卷積是什麼?使用opencv與python進行圖像卷積 Convolutions with OpenCV and Python

圖像卷積是什麼?


圖像卷積是計算機視覺,圖像處理領域經常用到的操作,比方說模糊操作(blurring),平滑操作(smoothing),以及邊緣檢測(edge detection)等都是卷積操作。卷積操作是計算機視覺以及圖像處理領域中最重要以及最基礎的操作之一。

我們可以簡單理解卷積是對兩個矩陣進行按元素(element-weise)的乘法,然後再對得到的矩陣結果個元素求和。

所以,在實際中,卷積是這樣的:

  1. 選取兩個矩陣(需要一樣的尺寸)。
  2. 兩個矩陣對應的元素進行按元素的乘法(注意,不是點乘,就是基本乘法)
  3. 把元素相加。




可以這樣理解,原始圖像是大矩陣,核是一個小矩陣(相對原始的圖像來說)
核是在大一些的圖片上從左到右,從上到下滑動的小矩陣
在上圖中,我們將核在原始圖像上從左到右,從上到下滑動。
下面是一個核的例子:
 一個3*3的核
一般來說,核可以是任意M * N像素大小,其中M,N 是奇數。值得注意的是,大多數核是N*N矩陣。

理解圖像卷積


在圖像處理中,卷積包含這三個方面:

  1. 一個輸入圖像。
  2. 一個將要應用到輸入圖像上的核矩陣。
  3. 一個輸出圖像來儲存輸入圖像域核卷積的輸出結果。

在對圖像進行卷積操作時,有這樣幾個步驟:
4. 在原始圖像中選擇一個(x,y)座標。
5. 把核的正中心放在(x,y)座標上。
6. 對核與輸入圖像對應區域進行按元素的乘法運算,然後把乘法運算得到的結果相加,得到一個值。這個值就是核輸出。
7. 在輸出圖像上對應於(x,y)座標的位置上,儲存核輸出的值。

下面是一個具體的示例,一個3 * 3的圖像區域與一個3 * 3的核卷積操作來實現模糊化(bluerring):
一個3*3的圖像區域與一個3*3的核卷積操作來實現模糊化(bluerring)
因此,卷積操作的結果存儲在輸出圖像中
經過卷積,我們將輸出圖像位於座標(i,j)位置的像素值設置爲126。

卷積在深度學習中扮演的角色


對於在卷積中使用的核,我們需要手動定義,來進行不一樣的操作,比如:平滑操作(smoothing),銳化操作(sharpening),以及邊緣檢測(edge detection)。

這些不錯,但是如果有一些途徑能自主學習這些操作呢?能否定義一個機器學習方法來學習這些操作呢?

事實上,這些算法是存在的。這種類型的算法是神經網絡(Neural Networks)的子類型,卷積神經網絡(Convolutional Neural Networks (CNNs))。通過使用卷積濾波器,非線性激活函數,乘積和和反向傳播算法,CNNs 可以對檢測淺層神經網絡的簡單結構如邊緣和斑點的濾波器進行學習,然後使用這些邊緣和結構作爲構建塊,最終完成檢測深層神經網絡的較高級別的對象(面部,貓,狗,杯子等)的工作。

會在之後繼續這方面的探討和分享。

原文:Convolutions with OpenCV and Python

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