"""中值滤波"""
mask=np.zeros((3,3))+1
for i in range(1,w-1):
for j in range(1,h-1):
# mask1=mask*b2[x:x+3,y:y+3]
w=sorted([b2[i-1,j-1],b2[i-1,j],b2[i-1,j+1],b2[i,j-1],b2[i,j],b2[i,j+1],b2[i+1,j-1],b2[i+1,j],b2[i+1,j+1]])
h=w[5]
img4[i,j,0]=img4[i,j,0]+h
w=sorted([g2[i-1,j-1],g2[i-1,j],g2[i-1,j+1],g2[i,j-1],g2[i,j],g2[i,j+1],g2[i+1,j-1],g2[i+1,j],g2[i+1,j+1]])
h=w[5]
img4[i,j,1]=img4[i,j,1]+h
w=sorted([r2[i-1,j-1],r2[i-1,j],r2[i-1,j+1],r2[i,j-1],r2[i,j],r2[i,j+1],r2[i+1,j-1],r2[i+1,j],r2[i+1,j+1]])
h=w[5]
img4[i,j,2]=img4[i,j,2]+h
中值滤波代码如上所示,用一种简单的方法实现,然而运行的结果却和预期不同,结果如下:
第一个是原图,第二个是输出结果,不知道为什么会出现这么多黑色像素,但是显示出的像素值不为零,都是在一个合理的值之间,就是会有黑色覆盖,不知道为什么,希望知道的能不吝赐教
已经找到原理,原来是变量命名冲突,以此为戒!最后的结果:
最终代码:
n=3
template=np.ones(n)
for i in range(1,w-2):
for j in range(1,h-2):
# mask1=mask*b2[x:x+3,y:y+3]
# c1=img2[i:i+n,j:j+n,0]*template
# z1=np.sort(c1)
# z1=z1.flatten()
# #print(z)
# z1=z1[5]
# img4[i+2,j+2,0]=img4[i+2,j+2,0]+z1
# c2 = img2[i:i + n , j:j + n , 1] * template
# z2 = np.sort(c2)
# z2 = z2.flatten()
# #print(z)
# z2 = z2[5]
# img4[i+2, j+2, 1] = img4[i+2, j+2, 1] + z2
# c3 = img2[i:i + n , j:j + n , 2] * template
# z3 = np.sort(c3)
# z3 = z3.flatten()
# # print(z)
# z3 = z3[5]
# img4[i+2, j+2, 2] = img4[i+2, j+2, 2] + z3
w=sorted([b2[i-1,j-1],b2[i-1,j],b2[i-1,j+1],b2[i,j-1],b2[i,j],b2[i,j+1],b2[i+1,j-1],b2[i+1,j],b2[i+1,j+1]])
z=w[5]
img4[i,j,0]=img4[i,j,0]+z
w=sorted([g2[i-1,j-1],g2[i-1,j],g2[i-1,j+1],g2[i,j-1],g2[i,j],g2[i,j+1],g2[i+1,j-1],g2[i+1,j],g2[i+1,j+1]])
z=w[5]
img4[i,j,1]=img4[i,j,1]+z
w=sorted([r2[i-1,j-1],r2[i-1,j],r2[i-1,j+1],r2[i,j-1],r2[i,j],r2[i,j+1],r2[i+1,j-1],r2[i+1,j],r2[i+1,j+1]])
z=w[5]
img4[i,j,2]=img4[i,j,2]+z
# if z==z3:
# print('T')