8

OpenCVのプロジェクトでは、もちろんノイズを最小限に抑えながら、移動するオブジェクトを可能な限り適切にセグメント化したいと思います。

このために、画像減算アルゴリズムを使用したいと思います。私はすでに実行中のプログラムを持っていますが、今日、十分に公平な結果を得る方法を見つけられませんでした。

私はすでに次の(グレースケール)画像を与えています:

IplImage* grayScale;
IplImage* lastFrame;
IplImage* secondLastFrame;
IplImage* thirdLastFrame;

これまで、可動部分を取得するために、cvSub();現在のフレーム画像と最後のフレームを差し引くことを試みました。cvAbsDiff();

しかし、残念ながら、私はまだそこにたくさんのノイズを受け取ります(つまり、風が強いときに木がわずかに動くため)、動くオブジェクトが非常に大きく、ホモジェニックな色をしている場合(たとえば、白または黒のシャツを着た人)、減算人の左側と右側の画像の変化のみを検出し、体自体は検出しないため、1つのオブジェクトが2つのオブジェクトとして検出されることがあります...

cvAbsDiff(this->lastFrame,grayScale,output);
cvThreshold(output,output,10,250, CV_THRESH_BINARY);
cvErode(output,output, NULL, 2);
cvDilate(output,output, NULL, 2);

このノイズを取り除くために、画像を侵食して拡大しようとしましcvErode()cvDilate()が、これは非常に遅く、画面上の移動するオブジェクトが小さい場合、侵食によってオブジェクトの大部分が削除されるため、縮小した後、常に取得できるとは限りません。良い結果または分割されたオブジェクト。

この後、cvFindContours()輪郭を取得し、サイズを確認し、サイズが収まるかどうかを確認して、移動するオブジェクトの周りに長方形を描きます。ただし、セグメンテーションが不適切なためにオブジェクトが複数の長方形に分割されることが多いため、結果は良くありません。

友人から、次の2つ以上のフレームを減算に使用してみると、ノイズがすでに減少している可能性があると言われました...しかし、彼が何を意味しているのか、フレームを追加/減算して取得する方法がわかりません。ほとんどノイズがなく、十分な大きさのオブジェクトブロブを示す画像。

誰かがそれを手伝ってくれる?複数のフレームを使用して、ノイズを最小限に抑えながら、移動するオブジェクトに十分な大きさのブロブを備えた画像を取得するにはどうすればよいですか?私はどんなヒントにも感謝します...

追加:

私はここに現在のビデオをアップロードしました:http://temp.tinytall.de/多分誰かがそこでそれを試してみたいと思っています...

これはそのフレームです。左側の画像はcvFindContours()の結果を示し、右側の画像はセグメント化された画像であり、その上で輪郭を見つけようとしています...

セグメンテーション結果

つまり、1つの大きなオブジェクトは、十分に速く動いている場合は正常に機能します...つまり、自転車です。しかし、人を歩いていると、必ずしも良い結果が得られるとは限りません...何かアイデアはありますか?

4

3 に答える 3

2

3つの隣接するフレームA、B、Cが与えられると、2つのフレーム差XとYを取得できます。XとYを組み合わせると(たとえば、しきい値処理と論理AND演算を介して)、ノイズの影響を減らすことができます。望ましくない副作用は、動きが検出された領域が理想よりもわずかに小さくなることです(AND操作によって領域が減少します)。

画像シーケンスのモーションエスティメーションは何十年にもわたって十分に研究されてきたため、モーションベクトルフィールドの操作など、モーション検出のより高度な方法について読みたいと思うかもしれません。その場合、GoogleScholarはあなたの友達です。

于 2011-04-09T00:10:24.587 に答える
2

背景が固定されているようです。考えられる解決策の1つは、コンピューターに背景を学習させることです。時間の経過とともに平均を取ることによって。次に、平均画像と現在の画像の差を計算します。違いは、動く物体に起因する可能性があります。

于 2011-04-11T18:44:59.453 に答える
1

まあ、それは非常に危険な主題です。モーションエスティメーションは非常に複雑です。したがって、優れた文献を見つけて、アルゴリズムの発明を避けるようにしてください:)

私の提案は次のとおりです。

モーションエスティメーション用のバンドル画像を検索します。バンドルでは、ノイズとエラー率を減らすために多くの画像を使用しています。

最終的に、堅牢にしたい場合は、カルマンフィルターと呼ばれるものを調べてください。オブジェクトを追跡している場合は、フレーム間で「無限の速度ジャンプ」を行わないようにする必要があります(通常はノイズまたはミスです)。これは1つのC++ライブラリです。カルマンフィルターを強くお勧めします

最後に、MonoSLAM、私は少しプッシュしています:) Andrew Davison:Research

于 2011-04-09T15:44:59.917 に答える