NI製品ディスカッション

キャンセル
次の結果を表示 
次の代わりに検索 
もしかして: 

LabVIEW Vision Development Module を用いたリアルタイム背景差分

解決済み
解決策を見る

現在私は、GigEカメラから画像を取り込んで背景差分プログラムを作成しています。

以前教えて頂いた「シフトレジスタ」を使用して、リセットボタンを押したときに、元の画像がリセットされて、リアルタイムの画像と比較して背景差分ができるようにしています。

つい先日、Vision Development Module を購入して、いろいろ試しているのですが画像タイプが合わなかったりとうまくいきません。

 

プログラムを添付いたしますので、なにかアドバイスを頂きたいです。

よろしくお願いいたします。

 

LabVIEWバージョン:LabVIEW 2018 SP1-32bit

0 件の賞賛
メッセージ1/11
1,524件の閲覧回数

sayo23 さん、

 

見てみましたが、いくつか配線が間違っている気がします。

Thresholdの関数2つともSrcとDstを逆にしたほうが良いかと思いました。

 

また、IMAQ Createの Image Name入力は必ず別の名前を入れるようにしてください。

そうしないと、確か同じ領域を参照してしまって、データがおかしくなってしまうと思います。(うろ覚えなので違ったらすみません)

 

また、Redが入っているExtractSingleColorPlaneのSrcはケースストラクチャの後に出てきたワイヤにつなげると良いと思います。

今、主にエラーになっている原因は初回の実行時にシフトレジスタが空の状態なので、空のデータを関数が受けられずエラーになっています。

 

また、上記ワイヤをケースストラクチャの後ろに持ってきた場合も、初回はリセットボタンがFalseのため、空のImageを取ってきてしまいます。

なので、添付のようにすることで初回は必ずTrueを実行してくれるようになります。

 

ke525_0-1596201000621.png

 

Vision Development Moduleがあれば、最終的に Particle Analysisをすれば、以前に投稿されていた重心位置の抽出などもできそうですね。

0 件の賞賛
メッセージ2/11
1,481件の閲覧回数

ke525さん

 

ご返信ありがとうございます!

ケースストラクチャを使用して、改良してみました。

 

最後に出力したい背景差分の画像が出力されずに悩んでいます。

粒子解析の関数から画像を出すのではだめなのでしょうか。

また、他に間違いがあれば教えてください。

 

お忙しいところ恐縮ですが、よろしくお願いいたします。

 

バージョン:LabIEW 2018 SP1 32bit

0 件の賞賛
メッセージ3/11
1,447件の閲覧回数
解決策
トピック作成者saryo23が受理

saryo23さん、

 

見てみました。

Thresholdの Replace Value に255を入れると差分が見えるようになると思います。

 

また、ケースストラクチャで静止画を取れるようにしていると思いますが、うまくいかないのはImageのメモリ領域がうまく分けられていないので、背景が静止画に実はなっていません。(リアルタイムの画像が上書きをしています。)

静止画用のImage Createを作った上で、ケースストラクチャ内でImage Copyをしていただくとうまくいくと思います。

 

ke525_0-1596261152585.png

 

合わせて、リセットボタンの機械的動作をスイッチからラッチに戻していただくと良いと思います。

メッセージ4/11
1,439件の閲覧回数

ke525さん

 

ご返信ありがとうございます!

なるほど。そうやるとうまくいくのですね。

まだまだ勉強不足だと感じました。

 

また色々試してみたいと思います。

ありがとうございます!

 

バージョン:LabVIew2018 SP1-32bit

0 件の賞賛
メッセージ5/11
1,433件の閲覧回数

ke525さん

 

度々申し訳ございません。

今回添付のプログラムをBasler ace カメラを使用して、リアルタイム画像を取得しているのですが

処理が遅いせいか、背景差分の画像を出力すると画像がコマ落ちしたり黒い線が入ってざらついたりしてしまいます。

これはパソコン側の問題で、LabVIEWの処理をパソコン側ができていないということでしょうか。

パソコン自体は、一昨年くらいに購入したもので比較的新しいものだと思います。

 

何かプログラムを軽くするアドバイスなどあればお聞きしたいです。

 

よろしくお願いいたします。

 

バージョン:LabVIE2018

 

0 件の賞賛
メッセージ6/11
1,376件の閲覧回数
解決策
トピック作成者saryo23が受理

saryo23さん、

 

速度関連だと環境再現できないため、正確なことが言えないのですが、一番時間を食っているのが Particle Analysisの関数かと思います。

試しに、上記の関数を無効にして実行するとリアルタイムに動きますでしょうか。

 

上記を無効(無効ストラクチャを使うか、一旦削除するか)にしてリアルタイムに動くようになるのであれば、リアルタイムですべての画像を粒子解析するのは厳しいということになるので、間引きして処理をする必要が出てくると思います。

 

遅延してでもすべての画像解析がされる必要が出てくるのであれば、キューを利用して他のループにデータを渡して、そこで処理を完了させる作りにする必要があります。(ただし、Imageは他のデータ型と異なり、メモリ上に展開されているもののため、キューに渡す前に数値配列に変換してから渡す必要が出てきます。)

このような実装は、生産者/消費者と呼ばれます。

http://www.ni.com/tutorial/3023/ja/

はじめはとっつきにくいですが、リアルタイムのデータを順次すべて解析・処理する必要があればこのような作りが必要になります。

 

間引きの処理で問題ないのであれば、ループをもう一つ作って、IMAQ Subtract の出力を変数に入れて、追加したループで、変数の値を受け取って処理をするようにすれば、現在のメインのループの処理を軽くすることはできます。イメージ伝わりますでしょうか。

 

あとは、NI MAXでBasler Aceカメラの画像サイズを落としてリアルタイムで動くかなど試すことは可能かと思います。

 

仕様として変えられないところもあると思いますので、仕様の中で検討いただく必要があるかと思います。

 

不明点あればお知らせください。

 

0 件の賞賛
メッセージ7/11
1,370件の閲覧回数

ke525さん

 

お世話になっております。

教えていただいたことを検討してみました。

 

まず、粒子解析の部分をケースストラクチャにつないで間引きしてみたら

リアルタイムの背景差分はうまくいった(スムーズに動いた)のでやはり粒子解析の部分が原因でした。

 

そこで次に、NI MAXを使用してカメラの画像サイズを落としてやってみたところスムーズに動きました!

粒子解析のプログラムに移行しても問題ありませんでした。

 

おそらくこれからもっとプログラムを追加していくと思うので、教えていただいたキューなども試していきたいと思います。

 

今回も丁寧な回答ありがとうございます。本当に助かっています。。。

 

今後ともよろしくお願いいたします。

 

バージョン:LabVIEW 2018 SP-1 32bit

メッセージ8/11
1,354件の閲覧回数

ke525さん

 

度々すみません。

 

質問なのですが、粒子解析して出した図心の座標から3次元表示するためには

3D座標変換から3Dグラフ表示するという方向性であっているでしょうか。

 

もちろん、複数のカメラのキャレブレーションなどは行う必要はあると思いますが

その先の処理を検討していまして。。

 

お忙しいところ恐縮ですが、何かアドバイスがございましたらよろしくお願いいたします。

 

バージョン:LabVIEW 2018 SP-1 32bit

0 件の賞賛
メッセージ9/11
1,318件の閲覧回数

saryo23 さん

 

なんとなくあまりイメージがついていないのですが、なにかこんな3Dにしたい、というイメージ画像などあったりしますか?

 

自分はあまり3D関連使ったことが無いので、他の方の意見もあると良いなと思います。

Particle Analysis ReportのVIから座標は出ると思うので、あとは、その座標を加工して、、という一般的なところしかわからないです。

 

サンプルの中で、Stereoで調べると Compute Depth Image.viが出てくるのですが、キャリブレーションなどはそちらを参考いただくとよいかと思いました。

 

あまりお役に立てず申し訳ないです。

0 件の賞賛
メッセージ10/11
1,311件の閲覧回数