07-31-2020 12:45 AM
現在私は、GigEカメラから画像を取り込んで背景差分プログラムを作成しています。
以前教えて頂いた「シフトレジスタ」を使用して、リセットボタンを押したときに、元の画像がリセットされて、リアルタイムの画像と比較して背景差分ができるようにしています。
つい先日、Vision Development Module を購入して、いろいろ試しているのですが画像タイプが合わなかったりとうまくいきません。
プログラムを添付いたしますので、なにかアドバイスを頂きたいです。
よろしくお願いいたします。
LabVIEWバージョン:LabVIEW 2018 SP1-32bit
解決済! 解決策の投稿を見る。
07-31-2020 08:11 AM
sayo23 さん、
見てみましたが、いくつか配線が間違っている気がします。
Thresholdの関数2つともSrcとDstを逆にしたほうが良いかと思いました。
また、IMAQ Createの Image Name入力は必ず別の名前を入れるようにしてください。
そうしないと、確か同じ領域を参照してしまって、データがおかしくなってしまうと思います。(うろ覚えなので違ったらすみません)
また、Redが入っているExtractSingleColorPlaneのSrcはケースストラクチャの後に出てきたワイヤにつなげると良いと思います。
今、主にエラーになっている原因は初回の実行時にシフトレジスタが空の状態なので、空のデータを関数が受けられずエラーになっています。
また、上記ワイヤをケースストラクチャの後ろに持ってきた場合も、初回はリセットボタンがFalseのため、空のImageを取ってきてしまいます。
なので、添付のようにすることで初回は必ずTrueを実行してくれるようになります。
Vision Development Moduleがあれば、最終的に Particle Analysisをすれば、以前に投稿されていた重心位置の抽出などもできそうですね。
07-31-2020 11:57 PM - 編集済み 08-01-2020 12:05 AM
ke525さん
ご返信ありがとうございます!
ケースストラクチャを使用して、改良してみました。
最後に出力したい背景差分の画像が出力されずに悩んでいます。
粒子解析の関数から画像を出すのではだめなのでしょうか。
また、他に間違いがあれば教えてください。
お忙しいところ恐縮ですが、よろしくお願いいたします。
バージョン:LabIEW 2018 SP1 32bit
08-01-2020 12:53 AM
saryo23さん、
見てみました。
Thresholdの Replace Value に255を入れると差分が見えるようになると思います。
また、ケースストラクチャで静止画を取れるようにしていると思いますが、うまくいかないのはImageのメモリ領域がうまく分けられていないので、背景が静止画に実はなっていません。(リアルタイムの画像が上書きをしています。)
静止画用のImage Createを作った上で、ケースストラクチャ内でImage Copyをしていただくとうまくいくと思います。
合わせて、リセットボタンの機械的動作をスイッチからラッチに戻していただくと良いと思います。
08-01-2020 01:29 AM
ke525さん
ご返信ありがとうございます!
なるほど。そうやるとうまくいくのですね。
まだまだ勉強不足だと感じました。
また色々試してみたいと思います。
ありがとうございます!
バージョン:LabVIew2018 SP1-32bit
08-05-2020 01:58 AM
ke525さん
度々申し訳ございません。
今回添付のプログラムをBasler ace カメラを使用して、リアルタイム画像を取得しているのですが
処理が遅いせいか、背景差分の画像を出力すると画像がコマ落ちしたり黒い線が入ってざらついたりしてしまいます。
これはパソコン側の問題で、LabVIEWの処理をパソコン側ができていないということでしょうか。
パソコン自体は、一昨年くらいに購入したもので比較的新しいものだと思います。
何かプログラムを軽くするアドバイスなどあればお聞きしたいです。
よろしくお願いいたします。
バージョン:LabVIE2018
08-05-2020
02:55 AM
- 最終編集日:
03-27-2025
11:00 AM
、編集者:
Content Cleaner
saryo23さん、
速度関連だと環境再現できないため、正確なことが言えないのですが、一番時間を食っているのが Particle Analysisの関数かと思います。
試しに、上記の関数を無効にして実行するとリアルタイムに動きますでしょうか。
上記を無効(無効ストラクチャを使うか、一旦削除するか)にしてリアルタイムに動くようになるのであれば、リアルタイムですべての画像を粒子解析するのは厳しいということになるので、間引きして処理をする必要が出てくると思います。
遅延してでもすべての画像解析がされる必要が出てくるのであれば、キューを利用して他のループにデータを渡して、そこで処理を完了させる作りにする必要があります。(ただし、Imageは他のデータ型と異なり、メモリ上に展開されているもののため、キューに渡す前に数値配列に変換してから渡す必要が出てきます。)
このような実装は、生産者/消費者と呼ばれます。
はじめはとっつきにくいですが、リアルタイムのデータを順次すべて解析・処理する必要があればこのような作りが必要になります。
間引きの処理で問題ないのであれば、ループをもう一つ作って、IMAQ Subtract の出力を変数に入れて、追加したループで、変数の値を受け取って処理をするようにすれば、現在のメインのループの処理を軽くすることはできます。イメージ伝わりますでしょうか。
あとは、NI MAXでBasler Aceカメラの画像サイズを落としてリアルタイムで動くかなど試すことは可能かと思います。
仕様として変えられないところもあると思いますので、仕様の中で検討いただく必要があるかと思います。
不明点あればお知らせください。
08-07-2020 12:03 AM
ke525さん
お世話になっております。
教えていただいたことを検討してみました。
まず、粒子解析の部分をケースストラクチャにつないで間引きしてみたら
リアルタイムの背景差分はうまくいった(スムーズに動いた)のでやはり粒子解析の部分が原因でした。
そこで次に、NI MAXを使用してカメラの画像サイズを落としてやってみたところスムーズに動きました!
粒子解析のプログラムに移行しても問題ありませんでした。
おそらくこれからもっとプログラムを追加していくと思うので、教えていただいたキューなども試していきたいと思います。
今回も丁寧な回答ありがとうございます。本当に助かっています。。。
今後ともよろしくお願いいたします。
バージョン:LabVIEW 2018 SP-1 32bit
08-12-2020 12:06 AM
ke525さん
度々すみません。
質問なのですが、粒子解析して出した図心の座標から3次元表示するためには
3D座標変換から3Dグラフ表示するという方向性であっているでしょうか。
もちろん、複数のカメラのキャレブレーションなどは行う必要はあると思いますが
その先の処理を検討していまして。。
お忙しいところ恐縮ですが、何かアドバイスがございましたらよろしくお願いいたします。
バージョン:LabVIEW 2018 SP-1 32bit
08-12-2020 12:59 AM
saryo23 さん
なんとなくあまりイメージがついていないのですが、なにかこんな3Dにしたい、というイメージ画像などあったりしますか?
自分はあまり3D関連使ったことが無いので、他の方の意見もあると良いなと思います。
Particle Analysis ReportのVIから座標は出ると思うので、あとは、その座標を加工して、、という一般的なところしかわからないです。
サンプルの中で、Stereoで調べると Compute Depth Image.viが出てくるのですが、キャリブレーションなどはそちらを参考いただくとよいかと思いました。
あまりお役に立てず申し訳ないです。