一、函數基礎
GaussianBlur函數是一種圖像卷積函數,作用是對圖像進行高斯濾波,它的使用方法如下所示:
cv2.GaussianBlur(src, ksize, sigmaX[, dst[, sigmaY[, borderType]]])
其中,參數含義如下:
- src:輸入圖像
- ksize:高斯內核的大小
- sigmaX:X方向高斯核標準差
- sigmaY:Y方向高斯核標準差,可選,默認為0
- dst:輸出圖像,可選
- borderType:邊緣處理方式,可選,默認為BORDER_DEFAULT
函數的返回值是處理後的圖像。
在卷積運算中,每個像素點都會與一個卷積核進行計算。對於高斯濾波,以當前像素點為中心的部分像素點會被卷積核權值加權平均。卷積核的大小和形狀決定了高斯濾波的效果。卷積核越大,高斯濾波的程度越高。
二、高斯濾波作用
高斯濾波的主要作用是消除圖像中的噪點並平滑圖像細節。
圖像除了包含對應灰度或彩色信息,還包含一些無用的噪點以及由傳感器等造成的不均勻扭曲。而高斯濾波可以清除這些噪點,使得圖像更加清晰。
三、參數ksize的影響
ksize是高斯內核的大小。它決定了卷積核的大小,從而影響高斯濾波的效果。
當ksize較小時,高斯濾波的效果較弱,圖像僅僅會有一些輕微的平滑;當ksize較大時,效果明顯,圖像會變得十分模糊。
下面是一個示例代碼,對同一張圖片進行了不同大小的高斯濾波處理。
import cv2
import numpy as np
img = cv2.imread('example.jpg')
img_small = cv2.GaussianBlur(img, (5, 5), 0)
img_big = cv2.GaussianBlur(img, (51, 51), 0)
cv2.imwrite('example_small.jpg', img_small)
cv2.imwrite('example_big.jpg', img_big)
其中,img為原圖,img_small為5×5內核高斯模糊後的圖像,img_big為51×51內核高斯模糊後的圖像。
四、參數sigmaX和sigmaY的影響
sigmaX和sigmaY決定了頂部和底部的像素和左側和右側的像素的不同權重。
當sigmaX和sigmaY都為0,高斯核的大小僅取決於ksize。當sigmaX和sigmaY都不為0時,高斯核的大小會自動根據sigma計算,同時,對於方形的卷積核,sigmaX與sigmaY應取值相等。
下面是一個示例,對於同一張圖像,調節sigmaX和sigmaY的值,觀察高斯濾波後的圖像變化。
import cv2
import numpy as np
img = cv2.imread('example.jpg')
img_sigma1 = cv2.GaussianBlur(img, (51, 51), 50, 1)
img_sigma2 = cv2.GaussianBlur(img, (51, 51), 50, 10)
img_sigma3 = cv2.GaussianBlur(img, (51, 51), 50, 50)
cv2.imwrite('example_sigma1.jpg', img_sigma1)
cv2.imwrite('example_sigma2.jpg', img_sigma2)
cv2.imwrite('example_sigma3.jpg', img_sigma3)
其中,img_sigma1為sigmaX=1,img_sigma2為sigmaX=10,img_sigma3為sigmaX=50的高斯濾波後的圖像。
五、邊緣處理方式的選擇
在進行高斯濾波時,根據邊緣的處理方式,可以將其分為以下幾類:
- BORDER_CONSTANT:用常數填充,常數值需要提供
- BORDER_REPLICATE:複製最後一行或最後一列
- BORDER_REFLECT:以邊緣元素為軸,對稱複製
- BORDER_WRAP:按照鏡像方式截取
常見的處理方式是BORDER_DEFAULT,這會根據圖像大小自動選擇邊緣處理方式。
六、結語
高斯濾波是圖像處理中最常用的濾波方式之一。通過對圖像進行高斯濾波,可以有效消除圖像中的噪點並平滑圖像細節。在使用時需要注意調節卷積核大小、sigmaX和sigmaY等參數,保證得到最優的濾波效果。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/152902.html