python - 使用Python去噪图像算法

标签 python algorithm python-imaging-library

我正在尝试编写一个“去噪”图片的程序。我试图只抓取非边界像素并使用边界像素来设置它的值,但似乎我的算法没有抓取预期的像素(结果我得到了一个搞砸的图像)。如果我理解正确 n=length,m=height(例如行)。我知道我可以使用 numpy 来获得 3d 表示,但这不是我想要做的。谁能看到我做错了什么?这是代码:

from PIL import Image
def DenoiseImage(inputIm, factor, iters):

data = list(inputIm.getdata())
n, m = inputIm.size
data2 = data

for y in range (0, iters):

    #operate on pixels that aren't part of the top or bottom row
    for x in range (n, ((m-1)*n)-1):

        #makes sure x operated on isn't part of the left or right border
        if (x-1)%n != 0 and x%n != 0:
            #denoise pixel
            data[x] = data2[x] +factor*(data2[x-1]+data2[x+1]-4*data[x]+data2[x-n]+data2[x+n])

    temp = data2
    data2 = data
    data = temp

if iters%2==0:
    return data2
else:
    return data

这是我尝试使用的算法(但它显然是为二维表示(和 C 语言)编写的):http://pastebin.com/teEeUgFj

编辑:有点像算法背后思想的图形表示,发挥了我所有的艺术才能:

derp

请记住 m 是向下的长度,所以图中 m = 4,而不是 301。

最佳答案

造成这种情况的可能原因可能是data2 = data。您更改数据的过程将导致 data2 发生相同的更改,这意味着它们共享同一 block 内存。当您处理一些可变类(例如列表)时,这将在 python 中独一无二地发生。你可以使用

导入副本 data2 = copy.copy(数据)

或者我建议你使用 scipy.signal.convolve2d 来简化你的代码,而且效率也会更高。检查here

关于python - 使用Python去噪图像算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26641909/

相关文章:

python - 来自 socket() 的 UDP 数据包 header 与预期不符

python - Django self.cleaned_data Keyerror

python - 使用 PIL 和 OpenCV 2 在 Python 中轴越界错误

Python ImageFont 和 ImageDraw 检查字符支持的字体

python - 如何对 Pandas 的不规则时间间隔执行滚动平均值?

python - 从 python 运行 excel 宏

c - 马尔可夫链测试与实现

algorithm - 这种愚蠢的最坏情况下的时间复杂度?

c++ - 函数给出错误的结果

python - 如何使 ImageOps.fit 不裁剪?