0
我正在尝试编写一个“降噪”图片的程序。我试图抓取非边界像素,并使用边界像素来设置它的值,但似乎我的算法没有抓住预期的像素(因此我得到了一个搞砸的图像)。如果我理解正确,n =长度,m =高度(例如行)。我知道我可以使用numpy来获得3D表示,但这不是我想要做的。任何人都可以看到我做错了什么?下面的代码:使用Python的降噪图像算法
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
这是我想要使用的算法(但它是一个2D-表示写(和C),很明显):http://pastebin.com/teEeUgFj
编辑:还挺的算法背后的想法图形表示,把我所有的艺术人才来承担:
记住m是长度向下,所以在画面M.将be = 4,而不是301.
谢谢,这绝对是一个问题。现在我得到的输出图片不是90%的黑盒子。但我仍然有一个问题:如果我做1次迭代,输出图片或多或少是相同的(这可能是有意的),但是如果我做了很多迭代(例如10次),那么输出的图片只是一场“暴风雪”。我没有替换data2 =数据,和临时使用,与副本的东西。想法?看起来核心的降噪功能无法正常工作,但据我所知,我几乎可以直接从我发布链接的算法中复制它。 – user2875994 2014-10-30 08:39:13
另外,convoke2d似乎将2d数组作为输入,而我得到的列表是1维列表。 – user2875994 2014-10-30 08:43:29
Ooop,没关系,我只是有太高的因子值(1),当我用0.1尝试时,我得到了一个工作输出图片。所以我猜想唯一相关的问题是convoke。 – user2875994 2014-10-30 08:46:30