0
点赞
收藏
分享

微信扫一扫

【OpenCV 完整例程】95. 几何均值滤波器

【OpenCV 完整例程】95. 几何均值滤波器


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.2 几何均值滤波器(Geometric mean filter)

使用几何均值滤波器复原图像,复原图像 f ^ \hat{f} f^ 在点 ( x , y ) (x,y) (x,y) 的值是邻域中的像素的几何平均值:
f ^ ( x , y ) = [ ∏ ( r , c ) ∈ S x y g ( r , c ) ] 1 / m n \hat{f}(x,y) = \begin{bmatrix} \prod _{(r,c) \in Sxy} g(r,c) \end{bmatrix} ^{1/mn} f^(x,y)=[(r,c)Sxyg(r,c)]1/mn
几何均值滤波器实现的平滑与算术平均滤波器相当,但损失的图像细节更少。


例程 9.9:几何均值滤波器

    # 9.9: 几何均值滤波器 (Geometric mean filter)
    img = cv2.imread("../images/Fig0507b.tif", 0)  # flags=0 读取为灰度图像
    img_h = img.shape[0]
    img_w = img.shape[1]

    # 算术平均滤波 (Arithmentic mean filter)
    kSize = (3,3)
    kernalMean = np.ones(kSize, np.float32) / (kSize[0]*kSize[1])  # 生成归一化盒式核
    imgAriMean = cv2.filter2D(img, -1, kernalMean)

    # 几何均值滤波器 (Geometric mean filter)
    m, n = 3, 3
    order = 1/(m*n)
    kernalMean = np.ones((m,n), np.float32)  # 生成盒式核

    hPad = int((m-1) / 2)
    wPad = int((n-1) / 2)
    imgPad = np.pad(img.copy(), ((hPad, m-hPad-1), (wPad, n-wPad-1)), mode="edge")

    imgGeoMean = img.copy()
    for i in range(hPad, img_h + hPad):
        for j in range(wPad, img_w + wPad):
            prod = np.prod(imgPad[i-hPad:i+hPad+1, j-wPad:j+wPad+1]*1.0)
            imgGeoMean[i-hPad][j-wPad] = np.power(prod, order)

    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("Arithmentic mean filter")
    plt.imshow(imgAriMean, cmap='gray', vmin=0, vmax=255)
    plt.subplot(133), plt.axis('off'), plt.title("Geometric mean filter")
    plt.imshow(imgGeoMean, cmap='gray', vmin=0, vmax=255)
    plt.tight_layout()
    plt.show()

在这里插入图片描述


(本节完)


版权声明:

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

Copyright 2021 youcans, XUPT

Crated:2022-2-1


举报

相关推荐

0 条评论