10

画像の最初の 25% よりも遠くのものを除外した深度ヒートマップの画像があります。

次のようになります。 ここに画像の説明を入力

画像には 2 つの色の塊があり、1 つは私の手 (顔の一部が後ろにある) で、もう 1 つは左下隅の机です。これらのブロブを見つけるために画像を検索するにはどうすればよいですか? 可能であれば、それらの周りに長方形を描画できるようにしたいと考えています。

これを行うこともできます (色合いを無視し、黒または白にフィルターします)。 ここに画像の説明を入力

4

5 に答える 5

4

シードピクセルとしてランダムなピクセルを選択します。これがエリアAになります。Aが大きくならないようになるまで、Aを繰り返し展開します。それはあなたの地域です。

Aを拡張する方法は、Aの隣接ピクセルを探して、Aの少なくとも1つの隣接ピクセルと同じ色になるようにすることです。

あなたにとって「似たような色」が何を意味するかは、多少異なります。別の答えで言うように、正確に2つの色を作ることができる場合、「類似」は「等しい」です。それ以外の場合、「類似」とは、RGB値を持つ色、または2つの色の各コンポーネントが互いに少量の範囲内にある色を意味します(つまり、255、128、128は252、125、130に類似しています)。

選択したピクセルを制限して、シードピクセルに類似している必要があるようにすることもできますが、人間がシードを選択している場合は、より適切に機能します。(たとえば、これはPhotoshopで行われていることだと思います。)

これは、エッジ検出よりも優れている可能性があります。これは、グラデーションをフィルタリングせずに処理でき、検出されたエッジをコヒーレント領域に処理する必要がないためです。グラデーションが黒から白になり、同じ領域として登録されるという欠点がありますが、それが必要な場合があります。また、実装には注意する必要があります。そうしないと、速度が遅くなります。

于 2011-01-24T19:55:41.437 に答える
3

画像が実際に 2 つ以上の異なる色 (色間のぼやけがほとんどない) のみである場合、エッジ検出アルゴリズムの簡単なケースです。

于 2011-01-24T19:48:48.693 に答える
3

必要なものにはやり過ぎかもしれませんが、OpenCV ライブラリ用の C# 用の優れたラッパーがあります。

ブロブ検出に C++ で OpenCV を使用することに成功しました。

http://www.emgu.com/wiki/index.php/Main_Page

および OpenCV の wiki ページ:

http://en.wikipedia.org/wiki/OpenCV

追加するために編集: これは、C# での Emgu のブロブ検出ライブラリです。エリアの降順でブロブを並べ替える優れた機能もあります (ノイズをフィルター処理するのに役立ちます)。

http://www.emgu.com/forum/viewtopic.php?f=3&t=205

再度編集:

Emgu が重すぎる場合、Aforge.NET にはいくつかのブロブ検出方法も含まれています

http://www.aforgenet.com/framework/

于 2011-01-24T19:56:53.060 に答える
2

この質問のコードサンプルのようなものを使用できます:c#で画像の色を見つけます

画像内の特定の色のx/yを見つけるのに役立ちます。次に、最小x/最大xと最小y/最大yを使用して長方形を描画できます。

于 2011-01-24T19:55:23.023 に答える