美文网首页
7.4 中值滤波

7.4 中值滤波

作者: dinel | 来源:发表于2019-07-09 22:33 被阅读0次

    中值滤波与前面介绍的滤波方式不同,不再采用加权求均值的方式计算滤波结果。它用邻域内所有像素值的中间位来替代当前像素点的像素值

    7.4.1 基本原理

    中值滤波会取当前像素点及其周围临近像素点(一共有奇数个像素点)的像素值,将这些像素值排序,然后将位于中间位置的像素值作为当前像素点的像素值。
    例如,针对图 7-27 中第4 行第4 列的像素点,计算它的中值滤波值


    e3f5810516b9926ee168e8383c9bf5e.jpg

    将其邻域设置为 3×3 大小,对其 3×3 邻域内像素点的像素值进行排序(升序降序均可).按升序排序后得到序列值为[66,78,90.91,93,94,95,97,101]在该序列中,处于中心位中心点或中值点)的值是“93”,因此用该值替换原来的像素值 78,作为当点的新
    像素值
    处理结果如图 7-28 所示

    75ce4b248ce65f56cf03a9a2c2e2fb6.jpg

    7.4.2 函数语法

    在 OpenCV中,实现中值滤波的函数是 cv2.medianBlur(),其语法格式如下
    dst = cv2.medianBlur(src,ksize)

    1.dst 是返回值,表示进行中值滤波后得到的处理结果
    2.src 是需要处理的图像,即源图像,它能够有任意数量的通道,并能对各个通道独立处理。图像深度应该是 CV_8U、CV_16U、CV_16S、CV_32F 或者 CV_64F 中的一种
    3.ksize是滤波核的大小,滤波核大小是指在滤波处理过程中其邻域图像的高度和宽度.需要注意,核大小必须是比1 大的奇数,比如3、5、7等

    7.4.3 程序示例

    【例 7.7】针对噪声图像,对其进行中值滤波,显示滤波的结果

    根据题目要求,采用函数 cv2.medianBlur() 实现中值滤波,编写程序代码如下

    import cv2
    o=cv2.imread("C:\\Users\\Administrator\\Desktop\\opencv\\lenaNoise.png")
    r=cv2.medianBlur(o,3)
    cv2.imshow("original",o)
    cv2.imshow("result",r)
    cv2.waitKey()
    cv2.destroyAllWindows()
    
    
    1562683439(1).png

    从图中可以看到,由于没有进行均值处理,中值滤波不存在中值滤波等方式带来的细节模糊问题。在中值滤波处理中,噪声成分很难被选上,所以可以在几乎不影响图像的情况下除去全部噪声, 但是由于需要进行排序等操作,中指滤波需要的运算比较大

    相关文章

      网友评论

          本文标题:7.4 中值滤波

          本文链接:https://www.haomeiwen.com/subject/zlrqkctx.html