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
如果我在这个步骤执行滞后阈值,我得到很厚边的结果。显而易见的问题是梯度幅度值,但我不知道如何解决它。如果有人更有经验和知识渊博,善意地指点我正确的方向,我会非常感激。