Vision関数なしで粒子面積を測る | マーブルルール

Vision関数なしで粒子面積を測る

Tips

スポンサーリンク

この記事で扱っていること

  • Visionの関数を使用せずに粒子面積を測定する方法

を紹介しています。

注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。

LabVIEWで画像解析するとなるとVision Development Moduleという追加アドオンソフトウェアを使用するのが一番の選択肢になると思います(Visionの関数とは本記事ではこのVision Development Moduleのアドオンに付属する関数を指しています)。

ただこちらは有償ソフトウェアなので、持っていないと使えない機能になっています。

そうではなく、LabVIEWにそもそも存在している関数でやりくりして粒子解析っぽい処理を行うために活躍するのが、ピクチャ関数およびグラフィック形式の関数になります。

別の記事で、簡単に二値化を行う方法を紹介していました。

この記事で紹介していたプログラムを拡張し、指定した部分、領域内の粒子の大きさを求めるためのプログラムを考えてみました。

面積を求める、といっても何㎡という値が出るわけではなく、相対的な面積を求める方法となります。(もちろん画像と実世界の長さのスケールを合わせることができるのであれば何㎡といったことも求められるようになると思います)

スポンサーリンク

どんな結果になるか

フロントパネルには、元々の画像と、二値化した後の画像、さらにどの領域の粒子面積を調べるかの枠組みを表示するためのピクチャ表示器と、その抽出部分を示すピクチャ表示器、および領域についての情報を指定する数値制御器が並んでいます。

プログラムを実行した後は、まず二値化のしきい値を決めます。スライドを動かしてしきい値を定めたら、あとはその画像のさらにどの部分を調べたいかを指定します。

指定した領域の中で赤で示された部分は何ピクセルあるかを調べることができます。

プログラムの構造

ブロックダイアグラム全体は以下のようです。イベントストラクチャを使用したプログラムとしています。

一番最初に、「上」や「左」などの数値制御器に対して無効プロパティを設定しています。後ででてきますが、これらの数値制御器は初めから触れない方が都合がいいため最初のイベントが発生してから無効プロパティを再度設定しています。

その後、イベントストラクチャが入ったWhileループに入る前に、画像を読み込んでピックスマップにしています。これは、、画像データを2次元配列にした、と思ってください。

各イベントについて紹介します。

二値化レベルおよび領域反転の値変更イベントで、元の画像の二値化を行っています。このイベントの初回でプログラムの一番最初に設定した無効プロパティを再度指定しています。

ズームのイベントでは、、各ピクチャ表示器のズーム係数プロパティを使用して、一括で画像の拡大縮小が変更できるようにしています。

領域を抽出する数値制御器たちの値変更イベントでは、画像を2次元配列にしたものを部分配列によって抽出したり、長方形を描画関数によって枠指定のピクチャ表示器に長方形の枠を載せるといった処理を行っています。

Forループを入れ子にした部分は、抽出した画像の中で色が赤になっている(これは二値化レベルおよび領域反転の値変更イベントの処理の結果)部分の数を数えるようにしています。赤になっている配列の要素をTRUEとして、Forループを抜けた後に「ブールから(0,1)に変換」そして配列要素の和の関数で赤い領域の数を数えていることになります。

最後は停止ボタンの値変更イベントで、これによりプログラムが終了するようにしています。

画像タイプを変換する

このプログラムではブロックダイアグラム上で画像ファイルの拡張子を判別し、PNGでもJPEGでもBMPでも変換できるようにしています。

一方で、画像ファイル自体の拡張子を変更するといったこともVisionの関数を使用せずにできます。

本記事ではアドオンソフトであるVisionの関数を使用せずに画像処理のプログラムを書いてみました。もっと柔軟に、そして簡潔にプログラムを書くにはやはりアドオンソフトでついてくる関数に分があるのですが、工夫次第でプログラムが書ける例として参考にしてもらえれば嬉しいです。

ここまで読んでいただきありがとうございました。

コメント

タイトルとURLをコピーしました