中值滤波实现的问题-python

"""中值滤波"""
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

中值滤波代码如上所示,用一种简单的方法实现,然而运行的结果却和预期不同,结果如下:
原图在这里插入图片描述第一个是原图,第二个是输出结果,不知道为什么会出现这么多黑色像素,但是显示出的像素值不为零,都是在一个合理的值之间,就是会有黑色覆盖,不知道为什么,希望知道的能不吝赐教

已经找到原理,原来是变量命名冲突,以此为戒!最后的结果:
11

最终代码:

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')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值