数字图像处理与Python实现-图像降噪-中值滤波 - Go语言中文社区

数字图像处理与Python实现-图像降噪-中值滤波


中值滤波

中值滤波的算法原理是,首先确定一个奇数像素的窗口W,窗口内各像素按灰度大小排队后,用其中间位置的灰度值代替原f(x,y)f(x,y)灰度值成为窗口中心的灰度值g(x,y)g(x,y)
g(x,y)=Medf(xk,yl),(k,lW)(04-1) g(x,y) = Med{f(x-k,y-l),(k,l in W) } tag{04-1}

其中,W为选定窗口的大小; f(xk,yl)f(x-k,y-l)

  • 1 将模板在图像中漫游,并将模板中心与图中的某个像素位置重合;
  • 2 读取模板下各对应像素的灰度值;
  • 3 将模板对应的像素灰度值从小到大排序
  • 4 选取灰度序列里排在中间的一个像素的灰度值
  • 5 将这个中间值赋给对应模板中心位置的像素作为像素的灰度值。

二维中值滤波的窗口形状尺寸对滤波效果影响较大,不同的图像内容和不同的应用要求往往采用不同的窗口形状和尺寸。常见滤波窗口形状如下图所示:

在这里插入图片描述

Python语言实现的代码如下:

def median_filter(img, n=3):
    image = np.array(img, copy=True).astype(np.float32)
    processed = np.zeros_like(image)
    middle = int(n/2)
    r = np.zeros(n*n)
    g = np.zeros(n*n)
    b = np.zeros(n*n)
    for x in range(middle, image.shape[0] - middle):
        for y in range(middle, image.shape[1] - middle):
            cont = 0
            for i in range(x - middle, x + middle + 1):
                for j in range(y - middle, y + middle + 1):
                    r[cont] = image[i][j][0]
                    g[cont] = image[i][j][1]
                    b[cont] = image[i][j][2]
                    cont += 1
            r.sort()
            g.sort()
            b.sort()
            processed[x][y][0] = r[int(n*n/2)]
            processed[x][y][1] = g[int(n*n/2)]
            processed[x][y][2] = b[int(n*n/2)]
    processed = np.clip(processed,0,255).astype(np.uint8)
    return processed

程序运行结果:

在这里插入图片描述

左边为原图像,右边为中值滤波后的图像

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/wujuxKkoolerter/article/details/102733192
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢