【小林的OpenCV基礎課 番外】極簡邊緣運算元基礎知識

圖像中邊緣的檢測,從視覺的角度考慮(而不是AI的角度),最簡單的辦法是求梯度。

我們知道,邊緣通常是像素值的跳變處,連續狀態時可求導後求梯度,離散狀態下可求差分再求梯度,而圖像的像素值是離散的,因此採用模板卷積求差分的方法求梯度。

尋找邊緣時,可以求一階導數,也可以求二階導數,而梯度方向也有兩方向和八方向等。

這篇番外以一階導數入手講解x,y方向的通過梯度找邊緣的過程,使用Sobel運算元。內容出自:

《計算機視覺教程(第2版)》 章毓晉 人民郵電出版社

邊緣卷積運算元是如何實現梯度求解呢?我們來個簡單的Demo:

我們分別使用x,y方向的Sobel運算元對一個水平方向跳變的圖像矩陣求梯度(一階)

x方向的梯度

y方向的梯度

按公式: K=sum_{i}^{n}{a_{i}b_{i}} 可計算得,x方向梯度值為38,y方向梯度值為0。由計算結果得出,在水平方向存在著一條豎直的邊緣,而直接從圖像矩陣中得出的結論亦如此。

下面這張圖出自官方指導:

實際圖像被邊緣運算元運算後的圖像,下方兩圖使用了Sobel運算元

但求出梯度之後,對於機器來講並沒有得到邊緣。要想得到邊緣還需要經過邊緣的篩選、邊緣的閉合等等。

最後的最後

如果喜歡小林的專欄,就收藏了吧!してください!

推薦閱讀:

3D卷積神經網路Note01

TAG:計算機視覺 | OpenCV |