8

キャニーエッジ検出を適用した後のopenCVで、結果をさらに処理したいと思います(水平線のみを表示し、短い線を削除するなど)。しかし、キャニーの結果は単なる別のイメージです。検出されたエッジを説明する線の配列を取得したい

私は有名なハフライン変換を知っていますが、結果が常に良いとは限らないので、手動でキャニー結果を処理したいと思います。入力:

ここに画像の説明を入力してください

キャニーのみを出力:

ここに画像の説明を入力してください

キャニーを出力してからハフライン変換

ここに画像の説明を入力してください

階段のエッジを検出するためのハフライン変換結果(赤い線)です。キャニーエッジがエッジを検出しましたが、下から4行目が正しく検出されていません。

キャニー画像からエッジを抽出する方法はありますか?

4

2 に答える 2

15

結果を改善するために試すことができるいくつかのこと:

関心領域を適用する

画像に境界ウィンドウ効果があるように見えます。関心領域を削除して、次のような画像を作成しました(正しく表示されるまで微調整しましたが、ある種のカーネルオペレーターを使用している場合は、ウィンドウサイズがこのROIをより適切に定義します)。

ここに画像の説明を入力してください

標準のハフ変換を使用する

また、確率的ハフ変換を使用しているようです。したがって、補間された線ではなく、線分のみを取得します。標準変換を使用して、完全な理論線(rho、theta)を取得することを検討してください。これを行うと、次のような画像が表示されます。

ここに画像の説明を入力してください

これは、(Pythonインターフェイスから)行を生成するために使用したコードスニペットです。

(mu, sigma) = cv2.meanStdDev(stairs8u)
edges = cv2.Canny(stairs8u, mu - sigma, mu + sigma)
lines = cv2.HoughLines(edges, 1, pi / 180, 70)

角度に基づいてラインをフィルタリングする

最も頻繁に発生する線の角度を取り、外れ値を破棄することで、おそらく不良な線を除外できます。これにより、最も目に見えるステップに絞り込むことができます。

お役に立てば幸いです。

于 2012-06-05T18:00:55.597 に答える
8

LSWMS(加重平均シフトを使用した線分検出)方式を使用することをお勧めします。結果はHTやPPHTよりも優れています。

http://marcosnietoblog.wordpress.com/2012/04/28/line-segment-detection-opencv-c-source-code および http://www.youtube.com/watch?v=YYeX8IGOAxwを参照 してください

于 2012-06-25T05:38:21.553 に答える