OpenCVライブラリを使用して草に描かれた白い線を検出するコードをいくつか作成しました。私が使用したアプローチについて誰かの意見が必要です(私よりもはるかに良い方法があると確信しているので)。また、画像のわずかな変動のためにパラメーターを微調整する必要があるため(また、固定パラメーターで操作する必要があるため)、得られる結果は期待したほど良くありません。
これまでの私のアプローチ:
フィルターのシーケンスを変更する必要がありますか?
追伸処理能力についてはあまり心配していません。 GPU BでHoughLinesPを実行しています-
また、ここにサンプル画像があります:
私が得ている結果:キャニーで キャニーなし(パラメーターの微調整)
どんな助けやガイダンスでも大歓迎です!私はそれを改善するために何をすべきかわかりません!
[〜#〜] update [〜#〜]選択した回答に従って、非常に迅速なスケルトン実装(ぼかしのTONSを使用)を使用した後、これを取得しました。
画像の スケルトン表現 を使用しようとします。ここでのキャニーの問題は、線の幅のために基本的に2行になることです。
次に、ハフ変換を適用します。
可能な解決策の1つは、キャニーエッジ検出から取得したすべてのエッジポイントを取得し、これらのポイントで線形最小二乗(おそらく反復)を使用してラインを近似することです。このようにして、常にエッジポイントに「最適な」単一の線を取得します。この方法に関連するパラメーター化は事実上ありません。
屋内の画像にはキャニーを使用していましたが、屋外には確率的ハフ線変換(PHT)を適用するよりもラプラスフィルターとソーベルフィルターの方が適しています。
行を太くしたい場合は、ラプラスの後に Sobel演算子 を試し、最後にPHTを試してください。画像がうるさい場合、悪化する可能性があります。
最後の結果(スケルトンフィルターの後)に続いて、多くの小さなセグメントを取得します。その時点で、この記事で行われたことを実装するのに本当に良い立場にいると思います。
http://www.cs.ubc.ca/~lowe/papers/aij87.pdf
基本的に、同じオブジェクトに属する可能性に基づいて、画像内のさまざまな機能を再グループ化するツールを提供します。したがって、あなたがしなければならないことは、結果をアルゴリズムにフィードするだけで、おそらく結果として1行になります。
RANSAC
アルゴリズムが良い方法かもしれません。この方法は、regression
またはinterpolation
アプローチに似ています。 _Edge detection
_を使用した後、ポイントを抽出する必要があります(私が思うに、この目標のための最良の方法はcanny
です)。次に、最適な行を見つける必要があります。いくつかの点を通る線を見つけるには、線形回帰やRANSACなどのさまざまな方法があります。 this link でRANSAC
アルゴリズムに関する実装とメモを見つけることができます。
この目標のためのRANSACと他の有用なアルゴリズムは、OpenCV
(バージョン3.2で知っているように)および_already implemented
_(画像処理用の無料ライブラリ)の_Accord NET
_であることに注意してください。