【OpenCV 例程200篇】99. 修正阿尔法均值滤波器
3.6 修正阿尔法均值滤波器(Modified alpha-mean filter)
修正阿尔法均值滤波器也属于统计排序滤波器,其思想类似于比赛中去掉最高分和最低分后计算平均分的方法。
令 S x y Sxy Sxy 表示中心在点 ( x , y ) (x,y) (x,y) 、大小为 m ∗ n m*n m∗n 的矩形子窗口(邻域)的一组坐标,修正阿尔法均值滤波器在由 S x y Sxy Sxy 定义的邻域中,删除 d 个最低灰度值和 d 个最高灰度值,计算剩余像素 g R ( r , c ) g_R(r,c) gR(r,c) 的算术平均值作为输出结果,即:
     
      
       
        
         
          f
         
         
          ^
         
        
        
         (
        
        
         x
        
        
         ,
        
        
         y
        
        
         )
        
        
         =
        
        
         
          1
         
         
          
           m
          
          
           n
          
          
           −
          
          
           2
          
          
           d
          
         
        
        
         
          ∑
         
         
          
           (
          
          
           r
          
          
           ,
          
          
           c
          
          
           )
          
          
           ∈
          
          
           
            S
           
           
            R
           
          
         
        
        
         
          g
         
         
          R
         
        
        
         (
        
        
         r
        
        
         ,
        
        
         c
        
        
         )
        
       
       
         \hat{f}(x,y) = \frac{1}{mn-2d} \sum _{(r,c) \in S_R} g_R(r,c) 
       
      
     f^(x,y)=mn−2d1(r,c)∈SR∑gR(r,c)
 d 的取值范围是 
    
     
      
       
        [
       
       
        0
       
       
        ,
       
       
        m
       
       
        n
       
       
        /
       
       
        2
       
       
        −
       
       
        1
       
       
        ]
       
      
      
       [0, mn/2-1]
      
     
    [0,mn/2−1]。选择 d 的大小对图像处理的效果影响很大,当 
    
     
      
       
        d
       
       
        =
       
       
        0
       
      
      
       d=0
      
     
    d=0 时简化为算术平均滤波器,当 
    
     
      
       
        d
       
       
        =
       
       
        m
       
       
        n
       
       
        /
       
       
        2
       
       
        −
       
       
        1
       
      
      
       d=mn/2-1
      
     
    d=mn/2−1 简化为中值滤波器。d 取其它值时,适合于处理多种混合噪声,如高斯噪声和椒盐噪声。
例程 9.13:修正阿尔法均值滤波器
    # 9.13: 修正阿尔法均值滤波器 (Modified alpha-mean filter)
    img = cv2.imread("../images/Fig0507b.tif", 0)  # flags=0 读取为灰度图像
    img_h = img.shape[0]
    img_w = img.shape[1]
    m, n = 5, 5
    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")
    imgAlphaFilter0 = np.zeros(img.shape)
    imgAlphaFilter1 = np.zeros(img.shape)
    imgAlphaFilter2 = np.zeros(img.shape)
    for i in range(img_h):
        for j in range(img_w):
            # 邻域 m * n
            pad = imgPad[i:i+m, j:j+n]
            padSort = np.sort(pad.flatten())  # 对邻域像素按灰度值排序
            d = 1
            sumAlpha = np.sum(padSort[d:m*n-d-1])  # 删除 d 个最大灰度值, d 个最小灰度值
            imgAlphaFilter0[i, j] = sumAlpha / (m*n-2*d)  # 对剩余像素进行算术平均
            d = 2
            sumAlpha = np.sum(padSort[d:m*n-d-1])
            imgAlphaFilter1[i, j] = sumAlpha / (m*n-2*d)
            d = 4
            sumAlpha = np.sum(padSort[d:m*n-d-1])
            imgAlphaFilter2[i, j] = sumAlpha / (m*n-2*d)
    plt.figure(figsize=(9, 7))
    plt.subplot(221), plt.axis('off'), plt.title("Original")
    plt.imshow(img, cmap='gray', vmin=0, vmax=255)
    plt.subplot(222), plt.axis('off'), plt.title("Modified alpha-mean(d=1)")
    plt.imshow(imgAlphaFilter0, cmap='gray', vmin=0, vmax=255)
    plt.subplot(223), plt.axis('off'), plt.title("Modified alpha-mean(d=2)")
    plt.imshow(imgAlphaFilter1, cmap='gray', vmin=0, vmax=255)
    plt.subplot(224), plt.axis('off'), plt.title("Modified alpha-mean(d=4)")
    plt.imshow(imgAlphaFilter2, cmap='gray', vmin=0, vmax=255)
    plt.tight_layout()
    plt.show()
 

(本节完)
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接
Copyright 2021 youcans, XUPT
Crated:2022-2-1










