NI製品ディスカッション

cancel
Showing results for 
Search instead for 
Did you mean: 

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

Solved!
Go to solution
Highlighted

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

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

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

 

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

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

 

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

0 Kudos
Message 1 of 8
(200 Views)
Highlighted

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 Kudos
Message 2 of 8
(157 Views)
Highlighted

ke525さん

 

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

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

 

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

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

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

 

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

 

バージョン:LabIEW 2018 SP1 32bit

0 Kudos
Message 3 of 8
(123 Views)
Highlighted
Solution
Accepted by topic author saryo23

saryo23さん、

 

見てみました。

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

 

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

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

 

ke525_0-1596261152585.png

 

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

0 Kudos
Message 4 of 8
(115 Views)
Highlighted

ke525さん

 

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

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

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

 

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

ありがとうございます!

 

バージョン:LabVIew2018 SP1-32bit

0 Kudos
Message 5 of 8
(109 Views)
Highlighted

ke525さん

 

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

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

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

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

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

 

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

 

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

 

バージョン:LabVIE2018

 

0 Kudos
Message 6 of 8
(52 Views)
Highlighted
Solution
Accepted by topic author saryo23

saryo23さん、

 

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

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

 

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

 

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

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

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

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

 

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

 

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

 

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

 

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

 

0 Kudos
Message 7 of 8
(46 Views)
Highlighted

ke525さん

 

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

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

 

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

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

 

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

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

 

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

 

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

 

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

 

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

Message 8 of 8
(30 Views)