理解图像中卷积操作的含义
原文地址:https://blog.csdn.net/chaipp0607/article/details/72236892?locationNum=9&fps=1
上文用生動的例子來解釋卷積記載了卷積的含義,現在就來看看卷積在圖像處理中的應用吧。(ps:本文大部分內容系轉載大神的博客,現在csdn強制圖片水印,實在感到很無奈!!!)
數字圖像處理中卷積
數字圖像是一個二維的離散信號,對數字圖像做卷積操作其實就是利用卷積核(卷積模板)在圖像上滑動,將圖像點上的像素灰度值與對應的卷積核上的數值相乘,然后將所有相乘后的值相加作為卷積核中間像素對應的圖像上像素的灰度值,并最終滑動完所有圖像的過程。
這張圖可以清晰的表征出整個卷積過程中一次相乘后相加的結果:該圖片選用3*3的卷積核,卷積核內共有九個數值,所以圖片右上角公式中一共有九行,而每一行都是圖像像素值與卷積核上數值相乘,最終結果-8代替了原圖像中對應位置處的1。這樣沿著圖片一步長為1滑動,每一個滑動后都一次相乘再相加的工作,我們就可以得到最終的輸出結果。除此之外,卷積核的選擇有一些規則:
1)卷積核的大小一般是奇數,這樣的話它是按照中間的像素點中心對稱的,所以卷積核一般都是3x3,5x5或者7x7。有中心了,也有了半徑的稱呼,例如5x5大小的核的半徑就是2。
2)卷積核所有的元素之和一般要等于1,這是為了原始圖像的能量(亮度)守恒。其實也有卷積核元素相加不為1的情況,下面就會說到。
3)如果濾波器矩陣所有元素之和大于1,那么濾波后的圖像就會比原圖像更亮,反之,如果小于1,那么得到的圖像就會變暗。如果和為0,圖像不會變黑,但也會非常暗。
4)對于濾波后的結構,可能會出現負數或者大于255的數值。對這種情況,我們將他們直接截斷到0和255之間即可。對于負數,也可以取絕對值。
邊界補充問題
上面的圖片說明了圖像的卷積操作,但是他也反映出一個問題,如上圖,原始圖片尺寸為77,卷積核的大小為33,當卷積核沿著圖片滑動后只能滑動出一個55的圖片出來,這就造成了卷積后的圖片和卷積前的圖片尺寸不一致,這顯然不是我們想要的結果,所以為了避免這種情況,需要先對原始圖片做邊界填充處理。在上面的情況中,我們需要先把原始圖像填充為99的尺寸。
常用的區域填充方法包括:
為了畫圖方便,這里就不用55的尺寸了,用33定義原始圖像的尺寸,補充為9*9的尺寸,圖片上的顏色只為方便觀看,并沒有任何其他含義。
原始圖像:
補零填充
邊界復制填充
鏡像填充
塊填充
以上四種邊界補充方法通過看名字和圖片就能理解了,不在多做解釋。
不同卷積核下卷積意義
我們經常能看到的,平滑,模糊,去燥,銳化,邊緣提取等等工作,其實都可以通過卷積操作來完成,下面我們一一舉例說明一下:
一個沒有任何作用的卷積核:
卷積核:
將原像素中間像素值乘1,其余全部乘0,顯然像素值不會發生任何變化。
平滑均指濾波:
卷積核:
該卷積核的作用在于取九個值的平均值代替中間像素值,所以起到的平滑的效果:
高斯平滑:
卷積核:
高斯平滑水平和垂直方向呈現高斯分布,更突出了中心點在像素平滑后的權重,相比于均值濾波而言,有著更好的平滑效果。
圖像銳化:
卷積核:
該卷積利用的其實是圖像中的邊緣信息有著比周圍像素更高的對比度,而經過卷積之后進一步增強了這種對比度,從而使圖像顯得棱角分明、畫面清晰,起到銳化圖像的效果。
除了上述卷積核,邊緣銳化還可以選擇:
梯度Prewitt:
水平梯度卷積核:
垂直梯度卷積核:
梯度Prewitt卷積核與Soble卷積核的選定是類似的,都是對水平邊緣或垂直邊緣有比較好的檢測效果。
Soble邊緣檢測:
Soble與上述卷積核不同之處在于,Soble更強調了和邊緣相鄰的像素點對邊緣的影響。
水平梯度:
垂直梯度:
以上的水平邊緣與垂直邊緣檢測問題可以參考:Soble算子水平和垂直方向導數問題
梯度Laplacian:
卷積核:
Laplacian也是一種銳化方法,同時也可以做邊緣檢測,而且邊緣檢測的應用中并不局限于水平方向或垂直方向,這是Laplacian與soble的區別。下面這張圖可以很好的表征出二者的區別:來源于OpenCV官方文檔
總結
以上是生活随笔為你收集整理的理解图像中卷积操作的含义的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【C++】 vector.erase()
- 下一篇: 范数和机器学习中的范数