圖像處理-從頻率角度分析中值濾波

1.均值濾波

對於中值濾波器,就是設定一定大小的核,計算核包含的像素點對應的中值。
median[a11a12a1na21a22a2nam1am2amn]median{\begin{bmatrix} {a_{11}}&{a_{12}}&{\cdots}&{a_{1n}}\\ {a_{21}}&{a_{22}}&{\cdots}&{a_{2n}}\\ {\vdots}&{\vdots}&{\ddots}&{\vdots}\\ {a_{m1}}&{a_{m2}}&{\cdots}&{a_{mn}}\\ \end{bmatrix} }
那麼對應的中值濾波核如下所示:
Filter=median×AFilter=median\times A

2.代碼

import numpy as np
from skimage import io
import cv2
from matplotlib import pyplot as plt
path = "D:/2_project/0_test/median_filter/anr/input/inputfull.jpg"
I = io.imread(path) #R*0.299+G*0.587+B*0.114
def medianfilter(image, winsize):
    rows, cols, channel = image.shape
    winH, winW = winsize
    halfwinH = (winH-1)//2 +1
    halfwinW = (winW-1)//2 +1
    medianfilterimage = np.zeros(image.shape, image.dtype)
    for k in range(channel):
        for i in range(rows):
            for j in range(cols):
                rtop = 0 if i-halfwinH < 0 else i - halfwinH
                rbootom = rows-1 if i + halfwinH > rows -1 else i + halfwinH
                cleft = 0 if j - halfwinW < 0 else j - halfwinW
                cright = cols-1 if j + halfwinW > cols -1 else j + halfwinW
                region = image[rtop:rbootom+1, cleft:cright+1, k]
                medianfilterimage[i][j][k] = np.median(region)
    return medianfilterimage
window = (9, 9)
output = medianfilter(I, window)

3.Kernel 大小分析

不同大小的核對圖像進行濾波得到的圖像信息不同,隨着核的大小的增大,計算的像素點越多,也就意味着濾波後的圖像包含了更多的低頻信息,這樣,隨着核大小的增大,高頻信息丟失。
對不同大小的圖像進行中值濾波,圖2是圖1縮放四倍,圖3是圖1縮放16倍。
以下是不同大小的核(包括size=3和size=9)中值濾波後的圖像:
圖1
圖2
圖3

4.對比均值濾波和中值濾波

圖4
圖5

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章