1

私は問題があります。このような写真がいくつかあります (.bmp ファイル):

1:

1

2:

2

3:

三

4:

四

5:

ここに画像の説明を入力

そして、写真にある円形の形がいくつあるかを認識したいと思います。例えば:

1 番目の画像: プログラムは 1 を返す必要があります

2 番目の画像: プログラムは 2 を返す必要があります

3 番目の画像: プログラムは 5 を返す必要があります

4 番目の画像: プログラムは 6 を返す必要があります

5 番目の画像: プログラムは 8 を返す必要があります

あなたはなにか考えはありますか?コードを C# または Java で記述したいと考えています (ライブラリがある場合)。

円形の間のこの狭い領域を探すことを考えましたが、これを行う方法がわかりません..

4

3 に答える 3

3

したがって、あなたの質問は実際に円を認識することではなく、重なり合う円を分割することについてです。これは、距離変換とそれに続く単純なしきい値処理を使用することで解決されます。そのような単純な。残っている唯一のステップは、接続されているコンポーネントの数を数えることです。

たとえば、Matlabコードは次のとおりです。

f = yourimage;
dist = bwdist(f);
result = dist > (max(max(dist)))/1.5;

画像1、3、5の結果は次のとおりです。

ここに画像の説明を入力してください ここに画像の説明を入力してください ここに画像の説明を入力してください

于 2013-01-10T01:31:28.257 に答える
1

openCV ライブラリを使用できます。標準インターフェースは C++ ですが、Java インターフェースも使用できます。

ここに関連するopenCV0関連のSOの回答があります。他にもたくさん見つけることができると確信しています...

houghcircles-parameters-to-recognise-balls

アップデート

何らかの理由で、この回答は反対票を投じられましたが、その理由はわかりません。

これはopenCVサイトのチュートリアルです

ここにopenCVのドキュメントがあります

そして、これがYouTubeの小さなビデオです

于 2013-01-10T00:59:29.033 に答える
1

この問題の課題は、円形の領域が接触していることです。ただし、あなたの場合にこれに対処する簡単な方法は、これらの画像を多数の単一ピクセルステップで侵食することです。ウィキペディアのこのページをご覧ください。

http://en.wikipedia.org/wiki/Erosion_(形態学)

MATLAB を使用している場合は、bwmorphこれを実行し、bwlabel最終的にここにあるオブジェクトの数を調べるために呼び出される関数があります。

おそらく、独自のカスタム コードを使用してこれらのイメージを侵食することができます。この場合、オブジェクトごとに 1 つのピクセルが残るまで浸食できます。

于 2013-01-10T01:33:30.367 に答える