私が取り組んでいるプロジェクトのOpenCVで遊び始めました。
このプロジェクトでは、私は鉢植えで植物を栽培しています。異なる発達段階の静的な写真が上から撮影されます(下図参照)。opencvで葉のような形を検出するための最適なアプローチ
目標は、異なる発達段階中に成長している植物の葉を検出し、最終的に(すなわち、大きさ)を測定することです。
私はCannyエッジ検出を使用する単純なアプローチを試みましたが、それは土壌中の小さなエッジを検出するため、それはうまくいきません(下の図参照)。
私はより良いアプローチは、色によって最初のセグメントへの画像だと思うし、その後葉を検出するために、いくつかのエッジ検出アルゴリズムを使用します。
良い方法がありますか?
あらかじめ葉の構造がわかっています。機械学習/分類アルゴリズムを使用してより良い結果を得ることができますか?
また、葉のサイズを測定する方法についても考えていませんか?サイズや他の記述子を測定するための一般的なパターンはありますか? (おそらく、画像に既知のサイズの参照オブジェクトがありますか?)。
最後に、私はまたある程度拡張するためにオクルージョンに対処しなければなりません。これは写真では見えませんが、後の開発段階では重なり合った葉を扱わなければならないかもしれません。 これに対処する方法はありますか?
私が処理しなければならない植物の何千ものがあるかもしれないと、私の賛成でないバイアス絵(すなわち、土壌などをブラックアウト)することができます。
私の質問を要約すると:
- (図を参照)土壌中の葉を検出するための最良の方法は何ですか?
- 機械学習アルゴリズムは検出を改善できますか?
- どのようにして葉のサイズを測定できますか?
- オクルージョン/オーバーラップの葉を処理するにはどうすればよいですか?
私はいくつかのポインタやアイデアに本当に感謝しています。(Jeff7のコメントに基づいて)
更新:
私が最初にFLOODFILLアルゴリズムとともに平均シフトカラーセグメンテーションを実行し、この絵になってしまった:
今Iその画像上で賢いエッジの検出+ findcontoursを実行すると、結果ははるかに良い:
フィードバックに感謝します。あなたは正しいです、私は条件を支配し、土壌を "黒くする"ことも考えました。 残念ながら、私は1つの工場だけでなく、時には何千人もの土壌を黒くすることは時間がかかり過ぎることもあるので、実際には可能ではありません。 葉のサイズを測定するには正しいです。これは、写真が常に同じ位置から取られ、ポットのサイズが同じであるため、実際に制御できます。 –
混乱して申し訳ありません。元の質問を更新して少し明確にしました。私はちょうど例として1つの植物を示していましたが、私は通常それらの鍋の36をトレイに持っています。 –
いいえ私はそれについて考えなかったが、これは良い提案です。ありがとう。私はそれを徹底的に調べます。 その設定で最も効果的なアルゴリズムや手法をお勧めしますか(ここで私は画像にバイアスをかけることはできず、この種の色分布を持つことができます)? –