数字图像处理python实现-图像去噪之空间域统计排序滤波

内容简介

  • 统计排序滤波
    • 中值滤波
    • 最值滤波
    • 修正的阿尔法均值滤波

统计排序滤波

统计排序滤波理解起来应该都不难,无非就是一个排序,根据不同的滤波来确定寻找的是什么值(最值或者中值),在文章开始先说明这一篇只提供修正的阿尔法均值滤波,因为前面两种的确过于简单。

中值滤波

这里书上的说明为:
数字图像处理python实现-图像去噪之空间域统计排序滤波_第1张图片
这里也是上一篇没有介绍几何均值滤波的原因,因为中值滤波对于椒盐噪声的去除效果实在不要太好,但是这里需要注意的有两点:

  1. 中值滤波仍然不是个保边缘的滤波
  2. 当信噪比过高的时候可需要多次中值滤波或者是使得模板mask的尺寸增大

最值滤波

数字图像处理python实现-图像去噪之空间域统计排序滤波_第2张图片
不做介绍,如果看不懂的读者的话,可能我的博客其他文章也不太适合你,真心的!!!
需要提一点的是,最大值滤波和最小值滤波两者结合的话是可以同时处理椒盐噪声的下面会用到!!!

修正的阿尔法均值滤波

仍然先给出书上的说明如下:
数字图像处理python实现-图像去噪之空间域统计排序滤波_第3张图片
在这里也真心佩服前人做的工作在混合噪声的问题上,这个滤波是解决(高斯+椒盐噪声)的滤波

首先从我们前面的介绍可以知道两点:

  1. 算术均值滤波可以很好的处理高斯噪声
  2. 最值滤波两者结合的话作用等同于中值滤波即可以去除椒盐噪声(上面最值滤波已经做过说明)

从公式可以看出,整个处理过程分为3个步骤:

  1. 排序
  2. 去除d/2个小值和d/2个大值
  3. 算均值

代码如下:

# @均值滤波
def deNoise(d, original):
    num = d / 2
    # 这里默认的是3*3模版故 length = 9,
    maskLength = 9
    start = int(num)
    end = int(maskLength - num)
    rows, cols = original.shape
    newI = np.zeros(original.shape)
    for i in range(1, rows - 1):
        for j in range(1, cols - 1):
            I = np.sort(original[i - 1:i + 2, j - 1:j + 2].flatten())
            newI[i, j] = np.mean(I[start:end])
    return newI


def meanDenoise(mask, original):
    rows, cols = original.shape
    ImageDenoise = np.zeros(original.shape)
    for i in range(1, rows - 1):
        for j in range(1, cols - 1):
            ImageDenoise[i, j] = np.mean(original[i - 1:i + 2, j - 1:j + 2] * mask)
    return ImageDenoise

def main():
    original = plt.imread("lena.tiff", 0)
    rows, cols = original.shape
    original_noise = original.copy().astype(np.float64)

    # 生成噪声图像,信噪比为10
    for i in range(cols):
        original_noise[:, i] += wgn(original_noise[:, i], 10)

    original_noise = pepperNoise(100000, original_noise)
    ImageDenoise = deNoise(6, original_noise)
    mask = np.ones(9).reshape(3, 3)
    ImageMeanDenoise = meanDenoise(mask, original_noise)
    plt.figure()
    show(original, "original", 2, 2, 1)
    show(original_noise, "original_noise", 2, 2, 2)
    show(ImageDenoise, "ImageDenoise", 2, 2, 3)
    show(ImageMeanDenoise, "ImageMeanDenoise", 2, 2, 4)
    plt.show()

效果如下:

其中从左到右依次为 原图 噪声图 阿尔法均值滤波处理图 算术均值滤波处理图

总结:处理一个问题的时候,理清思路很重要

转载我博客应当经我允许,至少要把原文链接放在文章最前面,这是对本人辛苦原创基本的尊重。

上一篇:数字图像处理python实现-图像去噪之空间域平滑线性滤波
下一篇:数字图像处理python实现-图像去噪之空间域自适应滤波

你可能感兴趣的:(数字图像处理,python,opencv,算法,图像识别)