我尝试实现了以下算法,但生成的图像看起来和之前一样。
步骤1:读取噪声图片。
步骤2:选择大小为3x3的二维窗口,以处理像素点的中心元素为准。假设正在处理的像素为Pij。
步骤3:如果Pij是未受损的像素(即0 < Pij < 255),则保持其值不变。
步骤4:如果Pij = 0或Pij = 255,则Pij是一个受损的像素。
步骤5:如果所选窗口中有3/4或更多的像素是噪声,则将窗口大小增加到5x5。
步骤6:如果所选窗口中的所有元素都是0或255,则用窗口中元素的平均值替换Pij,否则转到步骤7。
步骤7:从所选窗口中消除0和255,并找到剩余元素的中位数值。用中位数值替换Pij。
步骤8:重复步骤2至6,直到整个图像的所有像素都被处理完毕。
这是我的代码,请提出改进意见。
步骤1:读取噪声图片。
步骤2:选择大小为3x3的二维窗口,以处理像素点的中心元素为准。假设正在处理的像素为Pij。
步骤3:如果Pij是未受损的像素(即0 < Pij < 255),则保持其值不变。
步骤4:如果Pij = 0或Pij = 255,则Pij是一个受损的像素。
步骤5:如果所选窗口中有3/4或更多的像素是噪声,则将窗口大小增加到5x5。
步骤6:如果所选窗口中的所有元素都是0或255,则用窗口中元素的平均值替换Pij,否则转到步骤7。
步骤7:从所选窗口中消除0和255,并找到剩余元素的中位数值。用中位数值替换Pij。
步骤8:重复步骤2至6,直到整个图像的所有像素都被处理完毕。
这是我的代码,请提出改进意见。
import Image
im=Image.open("no.jpg")
im = im.convert('L')
for i in range(2,im.size[0]-2):
for j in range(2,im.size[1]-2):
b=[]
if im.getpixel((i,j))>0 and im.getpixel((i,j))<255:
pass
elif im.getpixel((i,j))==0 or im.getpixel((i,j))==255:
c=0
for p in range(i-1,i+2):
for q in range(j-1,j+2):
if im.getpixel((p,q))==0 or im.getpixel((p,q))==255:
c=c+1
if c>6:
c=0
for p in range(i-2,i+3):
for q in range(j-2,j+3):
b.append(im.getpixel((p,q)))
if im.getpixel((p,q))==0 or im.getpixel((p,q))==255:
c=c+1
if c==25:
a=sum(b)/25
print a
im.putpixel((i,j),a)
else:
p=[]
for t in b:
if t not in (0,255):
p.append(t)
p.sort()
im.putpixel((i,j),p[len(p)/2])
else:
b1=[]
for p in range(i-1,i+2):
for q in range(j-1,j+2):
b1.append(im.getpixel((p,q)))
im.putpixel((i,j),sum(b1)/9)
im.save("nonoise.jpg")