0
点赞
收藏
分享

微信扫一扫

【OpenCV 完整例程】94. 算术平均滤波器

【OpenCV 完整例程】93. 噪声模型的直方图


3. 仅噪声存在的空间滤波图像复原

当一幅图像中唯一存在的退化是噪声时,退化模型简化为:
g ( x , y ) = f ( x , y ) + η ( x , y ) G ( u , v ) = F ( u , v ) + N ( u , v ) g(x,y) = f(x,y) + \eta(x,y) \\ G(u,v) = F(u,v) + N(u,v) g(x,y)=f(x,y)+η(x,y)G(u,v)=F(u,v)+N(u,v)
当仅存在加性随机噪声时,可以采用空间滤波方法来估计原图像 f ( x , y ) f(x,y) f(x,y),即对退化图像 g ( x , y ) g(x,y) g(x,y) 去除噪声。

空间滤波方法在《7. 空间域图像滤波》中进行了详细介绍,本章简要讨论空间滤波的降噪性能。

3.1 算术平均滤波器(Arithmentic mean filter)

算术平均滤波器是最简单的均值滤波器,与空间域滤波中的盒式滤波器相同。

S x y Sxy Sxy 表示中心在点 ( x , y ) (x,y) (x,y) 、大小为 m ∗ n m*n mn 的矩形子窗口(邻域)的一组坐标,算术平均滤波器在由 S x y Sxy Sxy 定义的区域中,计算被污染图像 g ( x , y ) g(x,y) g(x,y) 的平均值。

复原的图像 f ^ \hat{f} f^ 在点 ( x , y ) (x,y) (x,y) 的值,是使用 S x y Sxy Sxy 定义的邻域中的像素算出的算术平均值,即:
f ^ ( x , y ) = 1 m n ∑ ( r , c ) ∈ S x y g ( r , c ) \hat{f}(x,y) = \frac{1}{mn} \sum _{(r,c) \in Sxy} g(r,c) f^(x,y)=mn1(r,c)Sxyg(r,c)
这一操作可以通过一个大小为 m ∗ n m*n mn 的空间滤波器(核)来实现,核的所有系数都是 1 / m n 1/mn 1/mn

均值滤波平滑图像中的局部变化,可以降低图像中的噪声,但会模糊图像。


例程 9.8:算术平均滤波器

    # 9.8: 算术平均滤波器 (Arithmentic mean filter)
    # 参见例程 1.70:图像的低通滤波 (盒式滤波器核)
    img = cv2.imread("../images/Fig0507b.tif", 0)  # flags=0 读取为灰度图像

    kSize = (3,3)
    kernalMean = np.ones(kSize, np.float32) / (kSize[0]*kSize[1])  # 生成归一化盒式核
    imgConv1 = cv2.filter2D(img, -1, kernalMean)  # cv2.filter2D 方法

    kSize = (5,5)
    imgConv3 = cv2.boxFilter(img, -1, kSize)  # cv2.boxFilter 方法 (默认normalize=True)

    plt.figure(figsize=(9, 6))
    plt.subplot(131), plt.axis('off'), plt.title("Original")
    plt.imshow(img, cmap='gray', vmin=0, vmax=255)
    plt.subplot(132), plt.axis('off'), plt.title("filter2D(kSize=[3,3])")
    plt.imshow(imgConv1, cmap='gray', vmin=0, vmax=255)
    plt.subplot(133), plt.axis('off'), plt.title("boxFilter(kSize=[5,5])")
    plt.imshow(imgConv3, cmap='gray', vmin=0, vmax=255)
    plt.tight_layout()
    plt.show()

在这里插入图片描述


(本节完)


版权声明:

youcans@xupt 原创作品,转载必须标注原文链接

Copyright 2021 youcans, XUPT

Crated:2022-2-1


举报

相关推荐

0 条评论