在上一篇FPGA圖像處理--Canny邊緣檢測(一)里介紹了Canny邊緣檢測的NMS計算,這里就介紹一下雙閾值邊緣檢測和弱邊緣連接。
雙閾值檢測顧名思義就是要有兩個閾值,在Sobel中只有一個閾值,這樣就可能帶來一些潛在的問題,比如閾值設(shè)置過低導(dǎo)致檢測出來的邊緣很多,或者設(shè)定的過高導(dǎo)致檢測出來的邊緣比較少。
在Canny中引入了雙閾值檢測,也就是定義一個高閾值和一個低閾值。當(dāng)邊緣的幅值大于高閾值的時候就認(rèn)為這個邊緣是一個強邊緣,低于低閾值的時候就認(rèn)為他不是邊緣,而在高閾值和低閾值之間的值被認(rèn)為是弱邊緣。通過后面的弱邊緣連接就可以讓弱邊緣有可能被識別為邊緣,也有可能被忽視掉。從而帶來更好的檢測效果。
我們來看一下Python的參考模型:
這里定義了一個函數(shù)來處理雙閾值的問題,當(dāng)像素的值大于等于高閾值的時候就設(shè)置當(dāng)前像素為255,介于低閾值和高閾值之間的值設(shè)置為127,小于低閾值的值設(shè)置為0,這個就很簡單了。
我們來看一下效果吧。
可以看到邊緣信息都被很好的檢測出來了,但是有的邊緣是斷斷續(xù)續(xù)的,這個時候就需要使用弱邊緣連接了。
最理想的弱邊緣連接肯定是做一遍深搜,但是這個對于資源消耗太大了,那么我們就退而求其次,如果一個點是弱邊緣的話,只要他周圍八個點里面有一個是強邊緣,那么我們就把這個點變?yōu)閺娺吘?。是不是很簡單?/p>
來看看Python的參考模型:
只要當(dāng)前值是127也就是我們在第一步中分離出來的弱邊緣,然后做一個判斷,判斷他周邊有沒有強邊緣,來決定是否將其變?yōu)閺娺吘夵c。
我們來看一下做了一次弱邊緣連接的效果:
大家注意看紅色框里面的這部分,可以看到一部分邊緣相對于之前已經(jīng)連接了起來。
如果我們多做幾次弱邊緣連接效果肯定會更好,不過與之帶來的就是計算成本的增加。
這里通過一個循環(huán)來控制做弱邊緣連接的次數(shù)。
來看一下弱邊緣連接改為五次的效果,可以看到效果比之前更好一點。
再來看一下不做高斯模糊的效果,可以看到有很多的噪點:
最后來展示下所有的效果圖,分別是原圖,sobel,nms,canny后的結(jié)果:
參考模型到這里就介紹完畢了,之后就是用Verilog來實現(xiàn)它。
審核編輯:湯梓紅
-
圖像處理
+關(guān)注
關(guān)注
27文章
1300瀏覽量
56894 -
邊緣檢測
+關(guān)注
關(guān)注
0文章
92瀏覽量
18249 -
Canny
+關(guān)注
關(guān)注
0文章
14瀏覽量
9713 -
python
+關(guān)注
關(guān)注
56文章
4807瀏覽量
85038
原文標(biāo)題:FPGA圖像處理--Canny邊緣檢測(二)
文章出處:【微信號:FPGA開源工坊,微信公眾號:FPGA開源工坊】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論