Canny Edge 検出アルゴリズムを実装しようとしていますが、途中でいくつかの問題に遭遇しました。Canny エッジ検出のすべてのステップを理解していると思いますが、OpenCv 実装によって得られる結果と比較すると、結果は大きく異なります。
アルゴリズムが生成する必要があるように、1px 幅のエッジを取得できないようです。この非常に単純なバイナリ イメージの手順と結果は次のとおりです。
処理中のバイナリ イメージ:
ソーベル演算子を使用して計算された勾配の大きさ:
エッジの方向:
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
このステップでヒステリシスしきい値処理を実行すると、非常にエッジの効いた結果が得られます。明らかな問題は勾配の大きさの値ですが、それを解決する方法がわかりません。より経験豊富で知識のある人が、親切にも私を正しい方向に向けてくれるなら、私は非常に感謝しています.