From Friday, April 19th (11:00 PM CDT) through Saturday, April 20th (2:00 PM CDT), 2024, ni.com will undergo system upgrades that may result in temporary service interruption.

We appreciate your patience as we improve our online experience.

NI製品ディスカッション

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

出力変数に数値が出ず、infと出てしまいます。

解決済み
解決策を見る

いつもお世話になっております。

LabVIEWの画像解析に関しての本、LabVIEW画像計測入門を参考に添付した画像のような円を三次元(X軸、Y軸、Z軸)を検出するプログラムを作成しました。ですが、三つの出力変数に数値ではなく、infという文字が出てきてしまいます。何度も参考書と照らし合わせてみたのですが、原因が何かわかりません。これは何が原因でinfと出てしまうのでしょうか。もしプログラムが間違っているのであれば、正しいプログラムを載せていただきたく存じます。

すべてをダウンロード
0 件の賞賛
メッセージ1/10
3,639件の閲覧回数

この円の半径は0.5[cm]でカメラと対象物との距離は90[cm]になります。

0 件の賞賛
メッセージ2/10
3,635件の閲覧回数

こんにちは。

 

カメラがないので添付していただいたVIを私の方で実行することはできませんが、

Infと出力されるということは、0で割った結果が出力されているのではないかと思います。

 

フォーミュラノードのr端子に0が入力されていませんか?

プローブを置くなどして、試してみてください。

(ちなみに、プローブの置き方は、ワイヤ上を右クリック » プローブを選択することで、プローブをワイヤ上に設置できます。プローブを置いた後にviを実行すると、ワイヤを流れているデータを直接見ることができます。)

0 件の賞賛
メッセージ3/10
3,617件の閲覧回数

dotriaconta

 

ご返答ありがとうございます。

プローブを置きプログラムを実行しましたところ

r端子に0.000E+0が入力されていました。

また、他にもcx、cy端子にも0.000E+0と入力されていました。

参考書のLabVIEW画像計測入門の通りに行ったのですが、これは何が原因なのでしょうか?

 

0 件の賞賛
メッセージ4/10
3,598件の閲覧回数

LabVIEW画像計測入門が手元にないので、正直どのように記載されているのかわかりませんが、

0が出力されているということは、目的の円が検出されていないということではないでしょうか。

 

Vision asistantを用いて、添付していただいた「en.jpg」内の円を検出できるように調整してみました。

やったこととしては、「カラープレーンの抽出」で明度プレーンの抽出を行い、そのまま「形状検出」で円を検出するようにしたのみです。

 

おそらく形状検出の前の処理がうまくいっていないのではと思います。

私の方でも、「カラー2値化」を行った後、「形状検出」を行っても円の検出がうまくできませんでした。

 

添付のVIでうまく実行できるか試してみていただけますでしょうか(うまくいく保証はありませんが)。

 

 

以上、ご確認のほどよろしくお願い致します。

メッセージ5/10
3,555件の閲覧回数

     dotriaconta

 

ご返答ありがとうございます。添付のVIを開こうと思いましたが、私のバージョンが古く添付しました画像のようなものが出てきてしまい開くことができませんでした。お忙しい中、作成して頂いたにもかかわらず大変申し訳ございません。

 

また、dotriaconta様にご教授頂いたやり方通り行いましたところ、円の検出のできるVIが作成できました。ここからさらにz軸の計測も行いたいと思うのですがどのような関数を組み込むことでz軸の計測ができますでしょうか。

 

何度も質問してしまい申し訳ありません。

すべてをダウンロード
0 件の賞賛
メッセージ6/10
3,516件の閲覧回数

うまく検出が出来たとのことで何よりです。

 

添付したviが開けないとのこと承知致しました。

古いバージョンでも開けるようにしておくべきでしたね。

気が回らずに申し訳ありませんでした。

不要かとは思いますが、念のため再度添付しておきます。

(Vision asistantなどのExpressVIの中身は、ExpressVI上、右クリック » フロントパネルを開く » 変換で見ることができますので、今後の参考になれば幸いです)

 

次に、z軸の検出に関してですが、z軸とはカメラから対象物までの距離のことでしょうか?

 

もしそうなのであれば、画像には2次元情報しか保持されていないので、直接z軸情報を得ることは出来ません。

 

直接は出来ませんが、例えば、今回検出している円の実際の大きさが分かるのであれば、実際の円の大きさと検出した円の大きさ(写真上の円の大きさ)からz軸を割り出すことはできると思います。

(これは以前、パターンマッチングを行った際に、x軸、y軸だけではなくz軸の測定も可能でしょうかのポストでされていたK.Harisaki様からの指摘と同じ回答です)

 

以上、どうぞよろしくお願い致します。

0 件の賞賛
メッセージ7/10
3,507件の閲覧回数

dotriaconta

 

丁寧にご対応していただきまして誠にありがとうございます。

 

実際のこの円は半径が0.5[cm]となるのですが、z軸を割り出す関数は添付したVIの中の公式で合っていますでしょうか。

また、合っていた場合、この方法以外にもz軸を割り出すことのできる関数はありますでしょうか。

 

なんども申し訳ありません。

0 件の賞賛
メッセージ8/10
3,487件の閲覧回数
解決策
トピック作成者ueki014が受理

お待たせしてすみません。



私の方でも、どのようにすればz軸情報を得ることができるだろうかといろいろと考えてみましたが、結果として得ることは出来ないとの結論に至りました。

前のポストで、実際の円の大きさと画像上の円の大きさを元に計算出来るのではと記述しましたが、これらの比から計算しようとしても元となるz軸の情報が全くないので、カメラ-対象物間の距離: zを計算することはできません。

ueki014様も上記のような考えの元、
z = z0 * r0 / r
という式から、zを計算しようとしているのだと思います。
(細かい点ですが、式中のr0とrが逆だと思います)

この式中のz0は何に対応する量なのでしょうか?

また、画像中の円の大きさ:r自体もピクセル単位で得られる量です。
これをcmなどの実空間上の単位に変換するには、カメラ自体の倍率(レンズの種類)や画像の画素数などが必要になります。
つまり、rの大きさ自体はzに依る量ではないということです。

以上のことから、私の中でz軸情報を得ることは出来ないという結論に至りました。

web上でも情報を検索してみましたが、下記のリンクのようにレンズ自体に何らかの細工をしたり、別途z軸情報を測定するためのセンサを設けることで、初めてz軸情報を得ることができるようです。

◯東芝 研究開発センター:研究開発ライブラリ 単眼カメラで撮影した1枚の画像からカラー画像と距離画像を同時に取得できる撮像技術を開発
https://www.toshiba.co.jp/rdc/detail/1606_01.htm

◯技術情報 - 3次元距離画像技術 | オプテックス
http://www.optex.co.jp/tech/sensor/3d.html

なので、z軸情報を得るためには今回のようなソフトウェア的な処理ではなく、ハードウェア的な処理を考える方が良いと思います。

以上、どうぞよろしくお願い致します。

メッセージ9/10
3,461件の閲覧回数

dotriaconta

 

私の不手際によりメールの確認ができておらず、返信が遅くなってしまい大変申し訳ありません。

 

Z0はボールとカメラの距離とありました。

 

数々の丁寧なご指摘、誠にありがとうございました。

 

 

 
0 件の賞賛
メッセージ10/10
3,413件の閲覧回数