0

だから私は次の画像を持っています:

バイナリ イメージ - 形状

ここで、個々の切断された形状の中心点を見つけたいと思います。可能であれば幅と高さも知りたいです。

私は Java と java.awt.image パッケージを使用していますが、この問題に対する一般的な解決策だけでも役に立ちます。

私自身の考えは次のとおりです。

  • 繰り返して、最初の白いピクセルを見つけます。
  • そのピクセルから BFS を実行し、見つかった白いピクセルを番号 1 でマークします。
  • 終了したら、番号が割り当てられていない/マークされていない最初の白いピクセルで停止する画像を繰り返します。
  • これが見つかったら、BFS を実行し、見つかったすべてのピクセルを番号 2 でマークします。
  • 泡立てて、すすぎ、繰り返します。つまり... 画像の最後までこれを続けます。
  • あなたが達成している数は、異なる形状の数です。

しかし、これは少し集中しているようで、中心、幅、高さを見つける必要があります。もっと簡単な方法はありますか?何か案は?

4

1 に答える 1

0

それが良いアイデアかどうかはわかりませんが、これが役立つかもしれません:

エッジから送信randomWalksし、画像を小さなボックスに分割し、小さなボックスからランダムウォークを送信し続けます(そのポイントがどうなるかはわかりませんが、ここには複数の要素を持つ小さなボックスがないことがわかります)

- が見られずにrandomWalk別のカットがある場合は、新しい弓があります。たとえば、私のイメージでは、(0,200) から開始し、 (100,0)から開始し、(100,200)に触れずにヒットすると、ボックス(0,0,100,200)ができます。これを の配列リストに追加します。randomWalkwhitecolor1st randomWalk(rw1)rw2whitecolormyBoxes

-私の頭に浮かんだのは、次のようなことができるということです。ボックス内のピクセルの色の合計がゼロに等しい(または小さい数より小さい)場合、そのボックスには画像がありません。別のリストに追加できるので、それを呼び出しましょうmyEmptyBoxes

-次に、すべてのボックスに要素が 1 つしかないことが確実な場合は、すべてのボックスの色を合計し、2 つのボックスが等しいか非常に近い場合、それらは同じ画像である可能性があります。自動的ではない場合、それらは同じ画像ではありません。その2つの画像/ボックスで作業する必要はありません。

- 次のステップが思い浮かびませんでした。

-また、その種の問題に適したライブラリであるopencvを使用することをお勧めします

これが役立つことを願っています

画像

于 2013-04-15T11:25:41.873 に答える