OpenRTM-aistのPython版、Java版には付属していませんのでご注意ください。また、Linux上では、LinuxにおけるOpenCVサンプルコードのビルド手順に従ってビルドしてインストールしてください。
概要
SubtractCaptureImageは入力画像から、変化のない部分を背景と判断して、前景(移動物)を取り出すマスク画像を出力するコンポーネントで、動的な背景差分法でリアルタイムな背景更新をするコンポーネントのサンプルです。OpenCVCamera、CameraViewerコンポーネントと共に使用します。
使い方
SubtractCaptureImageは入力画像で動きがないものを背景とみなして背景とするのと、画面上に新たに追加された物も動きがなくしばらくおいておかれると、それの部分も背景の一部と判定し、背景画像にとりこみます。出力には、入力画像、前景(移動物を示す)のマスク画像、移動物でも背景でもないものを示すマスク画像、背景画像、静止物体の背景化を表示する画像が出力されます。 このコンポーネントを使ってみるためにはCameraViewerを複数起動して複数の出力画像を同時に見るか、CameraViewerとの接続を変えながら、それぞれの出力画像を見ていってください。また入力画像としてOpenCVCameraコンポーネントを使用してみると良いでしょう。
- どれかのコンポーネントを右クリックし、[Activate Systems]を選択します。
- 画面のウィンドウを動かしながらCameraViewerの画面を表示させます。
- まずはbackGraoundImg が接続されているCameraViewer3の画面と入力画面と同じ画面であるoutput_imageに接続されているCameraViewer0の画面を見てみます。どちらにも何らかの画像が表示されているのを確認します。
- ここでforeMaskImgが接続されているCameraView1の画面を見てみると、最初は白い部分があったのが、徐々に真っ黒な画面になっていくというのが分かります。この画面は黒い部分が背景と見なされている部分、白い部分が前景と見なされている部分ということを示しています。前景と見なされるのは変化している部分、つまり動いている物です。そこで、真っ黒になった時に、なにか動くものを撮影してみると、その動いた物体の部分が白く表示されるのが分かります。またStillImgであるCameraView3の出力には動いているものが静止しはじめると、徐々にその物体がはっきりするようになってくるというのが分かります。下記のその例の画像を示します。
''それぞれの出力ポートの画像 - 前景検出’’
- StillImgの画像は、猫の置物をほぼ静止物と見なしているのを示しています。このアルゴリズムでは、静止物を背景と見なすのには、さらに時間を必要とし、その部分を徐々に背景と見なします。backGroundImgの画像では猫の置物の一部が表示され、その部分が背景と見なされているのがわかります。この後backGroundImgはStillImgとほぼ同じ画像になるように変化していきます。一方foreMaskImgは、白いところがあり、この部分は、まだ前景(移動物の画像)だと見なされています。
- stillMaskImgについては静止画として表現するのは難しいので、ここではサンプル画像は白いままのものしか提示しません。この画像に関しては、実際に画像を表示させて確認してください。なお、この出力は定常的には全体が白い画像が出力され、背景とも前景(移動物)とも見なされない部分、つまり背景と判定される直前に静止物が取り除かれたようなケースだけその部分を黒くした画像が出力されます。