3

ウェブカメラ画像の動きを識別するアプリケーションがあります。次のようなものが生成されます...

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

黒の領域は動きを示します。これは主にピクセルごとに行われます(ただし、近くのピクセルは考慮されます)

だから...各ピクセルの動きがtrue/falseになったので、その情報を使用してオブジェクトの輪郭を識別する必要があります。

欲しいのは次のようなものです。

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

アウトラインは正確である必要はなく、バウンディングボックスを受け入れることができます。両方を組み合わせて表示すると、より目立つノイズの領域もいくつかあります...

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

ご覧のとおり、オブジェクトの外側にいくつかの「動き」ピクセルがあります。おそらく、オブジェクトの最小領域を指定することで、これらを排除します。

したがって、オブジェクトのエッジを識別するためのアルゴリズムは何ですか。理想的には、この情報を使用して、各オブジェクトのおおよその中心を計算できるようになります。

注:@mmgpで説明されているように、上の画像は白黒のものも含めてすべてフルRGBです。これは、エクスポート用の画像を生成する方法によるものです。内部的には、ビット配列です。

4

2 に答える 2

1

私のアドバイスは、これらのタスクにemgu(opencv)を使用することです。これは、matlabがおそらく知っているよりも少し複雑ですが、より高速です。

OpenCVには、形態操作の侵食と拡張が実装されています。

http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=morphology#dilate

http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=morphology#erode

または、より一般的なモルフォロジー操作に適したmorphologyex :

http://docs.opencv.org/modules/imgproc/doc/filtering.html?highlight=morphology#morphologyex

また、findContours関数もあり、ブロブ検出器と考えることができます。あなたの場合、あなたはそれにあなたの最初の画像を供給することができます(おそらくいくつかのノイズ除去前処理の後)そしてそれはあなたにそれらの形を返します。これらの返された形状は、必要に応じて、領域でフィルタリングするのが非常に簡単です。

findContoursドキュメント:

http://docs.opencv.org/modules/imgproc/doc/structural_analysis_and_shape_descriptors.html?highlight=findcontours#findcontours

于 2012-12-18T13:06:38.610 に答える
1

これは数理形態学にとって完璧な仕事のようです。この場合、ノイズの形である小さなオブジェクトを削除するには、領域ごとに形態学的な開口部を実行します。関心領域は不要な領域よりもはるかに大きいため、問題の領域は簡単に推定できます。ここで、大きなオブジェクト内の穴も削除する必要があります(例にはこれらの穴がいくつかあることに注意してください)。これを行うには、穴埋めと呼ばれる操作を実行します。これにより、画像の背景から到達できないポイントが破棄されます。この時点で、オブジェクトの重心の検出に進むことができますが、オブジェクトの境界をより均一にしたい場合は、小さな構造要素を使用した形態学的拡張または形態学的閉鎖を使用して、オブジェクトのより多くを保持することができます。

これらのタスクは、Matlabで次のように実行されます。

f = imread('http://i.stack.imgur.com/DexHs.png');
% The PNG is in RGB, but it actually describes a binary image.    
f = ~im2bw(f, 0);
g = bwareaopen(f, 100); % 100 is the maximum area for unwanted objects here
h = imfill(g, 'holes');
l = bwlabel(h);
cent = regionprops(l, 'centroid');

その結果:

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

2つの閉じた白い曲線は残りのオブジェクトの境界であり、黄色でそれらの図心が表示されます。この回答の最初のコメントで説明されているように、「よりソフトな」境界が必要な場合:

h1 = imclose(h, strel('disk', 3));

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

これを.netとしてタグ付けしているようですが、これらのツールは非常に基本的で一般的であるため、一部の.netパッケージですぐに利用できると思います。

于 2012-12-09T02:35:12.787 に答える