圖像中值濾波


一. 中值濾波:

    中值濾波器是一種可以使圖像平滑的濾波器。它使用濾波器范圍內的像素的中值去代表該范圍內所有的像素。中值濾波是消除圖像噪聲最常見的手段之一,特別是消除椒鹽噪聲,中值濾波的效果要比均值濾波更好。


二. python實現中值濾波和均值濾波,並用兩種濾波器對受到椒鹽噪聲污染的圖像進行去噪

import cv2

import numpy as np

# Median filter

def median_filter(img, K_size=3):

    H, W, C = img.shape

    ## Zero padding

    pad = K_size // 2

    out = np.zeros((H + pad*2, W + pad*2, C), dtype=np.float)

    out[pad:pad+H, pad:pad+W] = img.copy().astype(np.float)

    tmp = out.copy()

    # filtering

    for y in range(H):

        for x in range(W):

            for c in range(C):

                out[pad+y, pad+x, c] = np.median(tmp[y:y+K_size, x:x+K_size, c])

    out = out[pad:pad+H, pad:pad+W].astype(np.uint8)

    return out

# Average filter

def average_filter(img, G=3):

    out = img.copy()

    H, W, C = img.shape

    Nh = int(H / G)

    Nw = int(W / G)

    for y in range(Nh):

        for x in range(Nw):

            for c in range(C):

                out[G*y:G*(y+1), G*x:G*(x+1), c] = np.mean(out[G*y:G*(y+1), G*x:G*(x+1), c]).astype(np.int)

 

    return out

# Read image

img = cv2.imread("../paojie_sp.jpg")

# Median Filter and Average Filter

out1 = median_filter(img, K_size=3)

out2 = average_filter(img,G=3)

# Save result

cv2.imwrite("out1.jpg", out1)

cv2.imwrite("out2.jpg", out2)

cv2.waitKey(0)

cv2.destroyAllWindows()

 


三. 實驗結果


受到椒鹽噪聲污染的圖像 ↑

中值濾波后的圖像 ↑

均值濾波后的圖像 ↑

  可以明顯看出,對於受到椒鹽噪聲污染的圖像,中值濾波往往比均值濾波的去噪效果要好!


四. 參考內容:

https://www.jianshu.com/p/53b4a8b15c28


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM