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