opencv圖像平滑

1.? 2D卷積??cv.filter2D()

對于一維信號,還可以使用各種低通濾波器( LPF )、高通濾波器( HPF )等對圖像進(jìn)行濾波。LPF有助于消除噪聲或模糊圖像。HPF濾鏡有助于在圖像中查找邊緣。OpenCV提供了一個函數(shù)cv2.filter2d ( ),用于將內(nèi)核與圖像進(jìn)行卷積。例如,我們將嘗試對圖像進(jìn)行平均濾波。5x 5平均濾波器內(nèi)核定義如下

操作如下:將核放在圖像的一個像素 A 上,求與核對應(yīng)的圖像上 25(5x5)個像素的和,在取平均數(shù),用這個平均數(shù)替代像素 A 的值。重復(fù)以上操作直到將圖像的每一個像素值都更新一邊。

img = cv2.imread('opencv_logo.jpg')


kernel = np.ones((5,5),np.float32)/25

dst = cv2.filter2D(img,-1,kernel)


plt.subplot(121),plt.imshow(img),plt.title('Original')

plt.xticks([]), plt.yticks([])

plt.subplot(122),plt.imshow(dst),plt.title('Averaging')

plt.xticks([]), plt.yticks([])

plt.show()

2.? ?圖像模糊(圖像平滑)

使用低通濾波器可以達(dá)到圖像模糊的目的。這對與去除噪音很有幫助。其實就是去除圖像中的高頻成分(比如:噪音,邊界)。所以邊界也會被模糊一點。(當(dāng)然,也有一些模糊技術(shù)不會模糊掉邊界)。OpenCV 提供了四種模糊技術(shù)。

2.1 平均? ?cv2.blur()? ?cv2.boxFilter()

這是由一個歸一化卷積框完成的。他只是用卷積框覆蓋區(qū)域所有像素的平均值來代替中心元素。可以使用函數(shù) cv2.blur() 和 cv2.boxFilter() 來完這個任務(wù)??梢酝床榭次臋n了解更多卷積框的細(xì)節(jié)。我們需要設(shè)定卷積框的寬和高。下面是一個 3x3 的歸一化卷積框:

PS:如果不想使用歸一化卷積框,應(yīng)該使用 cv2.boxFilter(),這時要傳入?yún)?shù) normalize=False。

blur = cv2.blur(img,(5,5))

2.2??高斯模糊? ?cv2.GaussianBlur()

現(xiàn)在把卷積核換成高斯核(簡單來說,方框不變,將原來每個方框的值是相等的,現(xiàn)在里面的值是符合高斯分布的,方框中心的值最大,其余方框根據(jù)距離中心元素的距離遞減,構(gòu)成一個高斯小山包。原來的求平均數(shù)現(xiàn)在變成求加權(quán)平均數(shù),全就是方框里的值)。實現(xiàn)的函數(shù)是 cv2.GaussianBlur()。我們需要指定高斯核的寬和高(必須是奇數(shù))。以及高斯函數(shù)沿 X,Y 方向的標(biāo)準(zhǔn)差。如果我們只指定了 X 方向的的標(biāo)準(zhǔn)差,Y 方向也會取相同值。如果兩個標(biāo)準(zhǔn)差都是 0,那么函數(shù)會根據(jù)核函數(shù)的大小自己計算。高斯濾波可以有效的從圖像中去除高斯噪音。如果你愿意的話,你也可以使用函數(shù) cv2.getGaussianKernel() 自己構(gòu)建一個高斯核。

如果要使用高斯模糊的話,上邊的代碼應(yīng)該寫成:

blur = cv2.GaussianBlur(img,(5,5),0)

2.3? 中值模糊?cv2.medianBlur()

顧名思義就是用與卷積框?qū)?yīng)像素的中值來替代中心像素的值。這個濾波器經(jīng)常用來去除椒鹽噪聲。前面的濾波器都是用計算得到的一個新值來取代中心像素的值,而中值濾波是用中心像素周圍(也可以使他本身)的值來取代它。它能有效的去除噪聲。卷積核的大小也應(yīng)該是一個奇數(shù)。

median = cv2.medianBlur(img,5)

2.4??雙邊濾波??cv2.bilateralFilter()

函數(shù) cv2.bilateralFilter() 能在保持邊界清晰的情況下有效的去除噪音。但是這種操作與其他濾波器相比會比較慢。我們已經(jīng)知道高斯濾波器是求中心點鄰近區(qū)域像素的高斯加權(quán)平均值。這種高斯濾波器只考慮像素之間的空間關(guān)系,而不會考慮像素值之間的關(guān)系(像素的相似度)。所以這種方法不會考慮一個像素是否位于邊界。因此邊界也會別模糊掉,而這正不是我們想要。雙邊濾波在同時使用空間高斯權(quán)重和灰度值相似性高斯權(quán)重??臻g高斯函數(shù)確保只有鄰近區(qū)域的像素對中心點有影響,灰度值相似性高斯函數(shù)確保只有與中心像素灰度值相近的才會被用來做模糊運(yùn)算。所以這種方法會確保邊界不會被模糊掉,因為邊界處的灰度值變化比較大。

blur = cv2.bilateralFilter(img,9,75,75)? ?#9 鄰域直徑,兩個 75 分別是空間高斯函數(shù)標(biāo)準(zhǔn)差,灰度值相似性高斯函數(shù)標(biāo)準(zhǔn)差

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 2D卷積(圖片過濾) 對于一維信號,圖片可以被多種低通濾波器(LPF),高通濾波器(HPF)過濾,一個LPF可以用...
    xxxss閱讀 3,825評論 1 49
  • 不同圖像灰度不同,邊界處一般會有明顯的邊緣,利用此特征可以分割圖像。需要說明的是:邊緣和物體間的邊界并不等同,邊緣...
    大川無敵閱讀 14,123評論 0 29
  • 參考資料: 圖像卷積與濾波的一些知識點 圖像處理基本概念——卷積,濾波,平滑 1.卷積的基本概念 首先,我們有一個...
    keloli閱讀 10,351評論 0 26
  • 1.簡單閥值cv2.threshold() 當(dāng)像素值高于閥值時,我們給這個像素賦予一個新值(可能是白色),否則我們...
    Zoe_C閱讀 1,006評論 0 0
  • 天剛蒙蒙亮,東邊剛出現(xiàn)魚肚白。河岸上霧氣朦朧,正好喚醒了張老伯那張睡眼惺忪的溝壑臉。 他目標(biāo)明確地溜達(dá)在河岸邊,撿...
    百合88閱讀 269評論 0 3

友情鏈接更多精彩內(nèi)容