OpenCV-Python之邊緣保留濾波(EPF)
阿新 • • 發佈:2018-11-10
兩種常用的方法
- 高斯雙邊
- 均值遷移
高斯雙邊濾波
前文提到的高斯模糊只考慮了畫素空間的分佈,而沒有考慮差異問題。下圖十分形象的說明了邊緣保留濾波的原理。一張黑白分明存在噪聲的圖片通過高斯濾波保留邊緣將二者區分開來。
程式碼解析
# 邊緣保留濾波(EPF)
# 高斯雙邊濾波
def bilateral_demo(img):
dst = cv.bilateralFilter(src=img, d=0, sigmaColor=100, sigmaSpace=15)
'''
高斯雙邊模糊,相當於磨皮操作
src:原影象
d: 畫素的領域直徑,可由sigmaColor和sigmaColor計算得到
sigmaColor: 顏色空間的標準方差,一般越大越好
sigmaSpace: 座標空間的標準方差(畫素單位),一般越小越好
'''
cv.imshow('bilateal_dome', dst)
kennel = np.array([[0, -1, 0], [-1, 5, -1], [0, -1, 0]], np.float32) # 銳化操作使影象更立體
dst1 = cv.filter2D(dst, -1, kennel) # -1 表示和原圖一樣
cv.imshow('sharpening_dome', dst1)
image = cv.imread('./data/face.png', 1)
cv.imshow('source image', image)
bilateral_demo( image)
cv.waitKey(0)
cv.destroyAllWindows()
而用高斯模糊的結果是:
2.均值偏移濾波
# 均值偏移濾波
def mean_shift_demo(img):
dst = cv.pyrMeanShiftFiltering(src=img, sp=15, sr=20)
'''
均值偏移濾波處理,想當與把圖片轉油畫的操作
src: 原影象
sp:空間窗的半徑(The spatial window radius)
sr: 色彩窗的半徑(The color window radius)
通過均值遷移來進行邊緣保留濾波有時會導致影象過度模糊
'''
cv.imshow('mean_shift_demo', dst)
image = cv.imread('./data/face.png', 1)
cv.imshow('source image', image)
mean_shift_demo(image)
cv.waitKey(0)
cv.destroyAllWindows()