2

平均シフトセグメンテーションを使用して、画像内で見つかったオブジェクトを数えようとしています。私は[pyrMeanShiftFiltering][1]OpenCVで作業してきました。次のコードを使用して、セグメント化された画像を生成できます。しかし、その画像の「アイテム」の数を実際に数える方法がわかりません。

pyrMeanShiftFiltering( img, res, spatialRad, colorRad, maxPyrLevel );このイメージで実行するだけです
分割されていない書籍

この画像 を生成しますここに画像の説明を入力

この例では、セグメンテーションによって色などに大きな違いが生じる画像がいくつかありますが、それほど違いはないように見えます。ただし、大部分のテスト ケースでは、画像自体でエッジ検出を使用するのに十分なほど、色がはっきりと区別されず、エッジが明確に区別されない (この例のように)仮定します。

これに基づいて、その画像内で見つかったオブジェクトの数を見つけるにはどうすればよいですか? 少しのコードを探していますが、正しい方向に突き刺すと役立ちます。

4

1 に答える 1

2

オブジェクトに異なる色が含まれている (そしてそれらの色が独特である) 場合、最も簡単な方法は、そこにあるクラスターの数を数えることです (ページが白/黄色であるため、白い色のクラスターを削除します)。

あなたが示した画像では、非常に特徴的なコーナーがあるため、コーナー検出器を使用することもできます。次に、周囲を見て、それらのコーナーを色でフィルタリングします (周囲の色には、(ページからの) 色と白の色が含まれている必要があります)。同じ垂直線に横たわり、最後にそれらを数えます。

もう 1 つのアイデアは、ページから白/黄色を外挿し (クラスタリング + ヒストグラム フィルタリング)、さまざまなブロブをカウントすることです。

おそらく最良の方法は、表紙の色 (青、緑) と最も近い白の色を見つけて、ページから白/黄の色を推定することです => ブロブを見つけます。これらのブロブには、最も近いカバーの色にラベルを付けることができます。次に、ページを表示し、最も近い表紙の色に従ってラベル付けされたブロブがあります。これらのブロブはいくつかの断片に分割され (1 つの本が他の本を部分的に覆っている)、2 つの異なるブロブが同じオブジェクト (複数の色の表紙を持つ本) に属している可能性がありますが、これらのブロブは長方形でなければなりません。そのため、その二値化された画像で線を見つけて、それらを最も近い線に接続しようとすることができます。そうすれば、最終的に 1 本の本に一致する 1 つのブロブが得られます。最後に、それらを数えることができます。

于 2013-03-30T20:47:32.363 に答える