在計算機視覺中使用的比較多的就是卷積神經網路
卷積運算是卷積神經網路最基本的組成部分
邊緣檢測相對比較容易理解,就把它作為卷積運算的入門樣例
在人臉識別中:
神經網路的前幾層有可能是檢測邊緣的
後面的層有可能檢測到物體的部分區域
更靠後的一些層可能檢測到完整的物體
這個例子中就是人臉
給了上面這樣一張,讓電腦去搞清楚這張**裡有什麼物體
可能做的第一件事是檢測中的垂直邊緣
比如說,在這張中的欄杆就對應垂直線
與此同時,這些行人的輪廓線某種程度上也是垂線
這些線是垂直邊緣檢測器的輸出
同樣,可能也想檢測水平邊緣
比如說這些欄杆就是很明顯的水平線
看乙個例子,這是乙個6×6的灰度影象
因為是灰度影象,所以它是6×6×1的矩陣
而不是6×6×3的,因為沒有rgb三通道
為了檢測影象中的垂直邊緣,可以構造乙個3×3矩陣
在共用習慣中,在卷積神經網路的術語中,它被稱為過濾器
構造乙個3×3的過濾器,像這樣
在**它有時候會被稱為核,而不是過濾器
對這個6×6的影象進行卷積運算,卷積運算用 「 * 」 來表示
用3×3的過濾器對其進行卷積
這個卷積運算的輸出將會是乙個4×4的矩陣,可以將它看成乙個4×4的影象
為了計算第乙個元素,在4×4左上角的那個元素,使用3×3的過濾器,將其覆蓋在輸入影象
然後進行元素乘法(element-wise products)運算,所以
然後將該矩陣每個元素相加得到最左上角的元素
即3+1+2+0+0+0+(-1)+(-8)+(-2)=-5
一步一步向右移動,到達邊緣時,移動下一行
重新從左向右移動,得到下圖
為了更清楚一點,這個 -16 是通過底部右下角的3×3區域得到的
來看另外乙個例子,了解垂直邊緣檢測是怎麼做到的
這是乙個簡單的 6×6 影象,左邊的一半是10,右邊一般是0
如果把它當成乙個,左邊畫素值10是比較亮的畫素值,右邊畫素值0比較暗
有乙個特別明顯的垂直邊緣在影象中間
這條垂直線是從黑到白的過渡線,或者從白色到深色
這裡的維數似乎有點不正確,檢測到的邊緣太粗了
因為在這個例子中,太小了
如果用乙個1000×1000的影象,而不是6×6的
會發現其會很好地檢測出影象中的垂直邊緣
在這個例子中,在輸出影象中間的亮處
表示在影象中間有乙個特別明顯的垂直邊緣
從垂直邊緣檢測中可以得到的啟發是,因為使用3×3的矩陣(過濾器)
所以垂直邊緣是乙個3×3的區域
左邊是明亮的畫素,中間的並不需要考慮,右邊是深色畫素
在這個6×6影象的中間部分,明亮的畫素在左邊,深色的畫素在右邊
就被視為乙個垂直邊緣
卷積運算提供了乙個方便的方法來發現影象中的垂直邊緣
相似的,水平邊緣過濾器也是乙個3×3的區域,它的上邊相對較亮,而下方相對較暗
總而言之,通過使用不同的過濾器,可以找出垂直的或是水平的邊緣
在歷史上,在計算機視覺的文獻中,曾公平地爭論過怎樣的數字組合才是最好的
所以還可以使用sobel的過濾器:
還有一種叫做scharr的過濾器:
它的優點在於增加了中間一行元素的權重,這使得結果的魯棒性會更高一些
它有著和之前完全不同的特性,實際也是一種垂直邊緣檢測
如果將其翻轉90度,就能得到對應水平邊緣檢測
當真正想去檢測出複雜影象的邊緣
不一定要去使用那些研究者們所選擇的這九個數字,但可以從中獲益匪淺
把這矩陣中的9個數字當成9個引數,並且在之後可以學習使用反向傳播演算法
其目標就是去理解這9個引數
將矩陣的所有數字都設定為引數,通過資料反饋,讓神經網路自動去學習它們
會發現神經網路可以學習一些低階的特徵,例如這些邊緣的特徵
儘管比起那些研究者們要更費勁一些
但確實可以動手寫出這些東西
不過構成這些計算的基礎依然是卷積運算
使得反向傳播演算法能夠讓神經網路學習任何它所需要的3×3的過濾器
並在整幅上去應用它
去輸出這些,任何它所檢測到的特徵
不管是垂直的邊緣,水平的邊緣,還有其他奇怪角度的邊緣
所以這種將這9個數字當成引數的思想,已經成為計算機視覺中最為有效的思想之一
參考:
邊緣檢測學習筆記
cv2.sobel src,ddepth,dx,dy,ksize src 影象 ddepth 影象深度 cv 64f表示雙精度浮點型 dx,dy水平和數值方向 ksize sobel運算元,取值3 31的奇數。因為運算元矩陣一定要存在中心點。import cv2 as cv defshowimg i...
OpenCV學習筆記 6 邊緣檢測筆記
void roberts inputarray src,outputarray dst,int ddepth,int x 1,int y 0,int bordertype border default void conv2d inputarray src,inputarray kernel,outp...
opencv學習筆記2 邊緣檢測
總結 roberts運算元檢測方法對具有陡峭的低雜訊的影象處理效果較好,但是利用 roberts 運算元提取邊緣的結果是邊緣比較粗,因此邊緣的定位不是很準確。sobel運算元檢測方法對灰度漸變和雜訊較多的影象處理效果較好,sobel 運算元對邊緣定位不是很準確,影象的邊緣不止乙個畫素。prewitt...