1
我想實現Canny邊緣檢測算法,並且我遇到了一些問題。我認爲我理解Canny邊緣檢測的每一步,但與OpenCv實現的結果相比,它們差異很大。Canny邊緣檢測算法 - 實現問題
看來,我不能像算法應該產生的1px寬邊緣。以下是這個非常簡單的二進制圖象的步驟和結果:正被處理
二值圖像:
梯度幅值來計算使用Sobel算子:
邊緣方向:
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 <br>
1/- - - - - - - - - - - \ 1 <br>
1 |/- - - - - - - - - \ | 1 <br>
1 | |/- - - - - - - \ | | 1 <br>
1 | | |/- - - - - \ | | | 1 <br>
1 | | | | | | | | | | | | | 1 <br>
1 | | | | | | | | | | | | | 1 <br>
1 | | | | | | | | | | | | | 1 <br>
1 | | | | | | | | | | | | | 1 <br>
1 | | | | | | | | | | | | | 1 <br>
1 | | | \ - - - - -/| | | 1 <br>
1 | | \ - - - - - - -/| | 1 <br>
1 | \ - - - - - - - - -/| 1 <br>
1 \ - - - - - - - - - - -/1 <br>
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
非最大值抑制後的圖像:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 255 0 0 0 0 0 0 0 0 0 255 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 0 0 255 0 0 0 0 0 255 0 0 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 0 0 255 0 0 0 0 0 255 0 0 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 255 0 0 0 0 0 0 0 0 0 255 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0<br>
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
如果我在這個步驟執行滯後閾值,我得到很厚邊的結果。顯而易見的問題是梯度幅度值,但我不知道如何解決它。如果有人更有經驗和知識淵博,善意地指點我正確的方向,我會非常感激。