この記事で扱っていること
- 粒子解析結果を仕分ける方法
を紹介しています。
注意:すべてのエラーを確認しているわけではないので、記事の内容を実装する際には自己責任でお願いします。また、エラー配線は適当な部分があるので適宜修正してください。
LabVIEWのアドオンであるVision Development Moduleを使用することで、粒子解析が行えます。
これは、画像を2値化することで特定の領域を抽出し、これを粒子とみなすことで、その粒子に対する様々な情報を取得する処理になっています。
粒子に対する処理(測定)は様々ですが、それら処理の結果に応じて粒子を分類したい場合、測定結果のレンジを決めてそのレンジ内になっている粒子をハイライトさせると結果が分かりやすくなることがあります。
本記事では、粒子解析の「面積」の結果を基に、大きさごとに仕分けを行う処理を実装する例を紹介しています。
どんな結果になるか
フロントパネルには画像表示器と画像ファイルのパス制御器、処理結果のレンジを指定するための配列と、二値化のためのパラメタを決定するクラスタがあります。
まずは画像をファイルから選び、二値化パラメタを決めて二値化させます。
あとは処理結果のレンジを決めてハイライトの色も決めます。表示のボタンを押すことで、四角で囲ったハイライト部分の表示切替も行えます。
もしうまくバイナリ画像が表示されない場合には、画像表示器を右クリックして「Palette」が「Binary」になっているかを確認してみてください。
プログラムの構造
デザインはイベント駆動型のステートマシンとしています。
initializeステートでは、Visionのプログラムではおなじみの、IMAQ Createを行っています。
二つのIMAQ Createを用意しているのは、片方は元データを使用しもう片方は二値化の結果であるバイナリ画像を扱うためです。
他に、フロントパネル上の制御器をリセットするためにローカル変数を用いています(このinitialize以降、ローカル変数は使用していないため競合状態が起こることがありません)
wait for eventステートでは、イベントストラクチャでイベントを待ちます。
イベントの中身は単純で、列挙体で次にどのステートに進むかを指定しているだけですが、ファイルパス制御器の値変更のときだけこのイベントストラクチャの中に処理を入れています。
もちろん、これ専用のケースを作成し、イベントストラクチャの中に具体的な処理を入れない、という組み方でも問題ありません。
ファイルパスで画像が選ばれてから、二値化パラメタを変更することになりますが、この二値化パラメタ変更のイベントにより実行されるthresholdステートでは、IMAQ Thresholdの関数で二値化を行います。
二値化が終わったらParticle analysisステートで粒子解析を行います。
最初に、オーバーレイしていたものを消すようにしないと、パラメタを変えても設定が上手く反映されないことがあります。
今回は、解析結果として粒子の面積をIMAQ Particle Analysisの関数で指定しており、その結果の0列目を指標配列で渡し、上限下限の範囲内であるかを判定しています。
IMAQ Particle Analysisでは面積以外の解析も多くあるのでPixel Measurements入力(下の図ではAreaとなっている)指定する部分は定数で固定しておくのではなく制御器でもいいと思います。
なお、粒子とみなされる対象は画像内に複数存在しうるため、それら一つ一つの粒子の情報がIMAQ Particle Analysis Reportの出力として配列で得られることを利用してForループを組み合わせて処理するように実装しています。
外側のForループは、解析絞り込みのクラスタの要素の数だけ回ります。クラスタに何も要素がなければForループをそもそも回す必要がないですね。
内側のForループは、解析絞り込みのクラスタの要素の中で「表示」のブールがTRUEになっている項目に対してしか実行されません。
最後にstopステートでプログラムを終了しています。
二値化画像をブラッシュアップ
バイナリ画像に対しては、様々な処理を施して処理をやりやすくすることができます。
例えば、穴埋めの機能を使用することで、余分な穴の部分を無くすことができます。
また、「小さなオブジェクトを削除」することで、最初からゴミみたいな小さい粒子を取り除くことができます。下限を調整することでハイライト時に除くことはできますが、やると便利です。
なお、二値化以降これらの処理を施した場合に、穴埋めの機能をやっぱりやめようと思ってもバイナリ画像をコピーして残しておかない限りは簡単に元には戻せません。
一番手っ取り早い元の状態への戻し方は、二値化パラメタを変更して元に戻す方法になります。
本記事では、粒子解析の結果を仕分ける方法を紹介しました。
画像処理の中でも粒子解析は様々な情報を得ることができ使いこなせればかなり便利な機能だと思います。ここに加えて、解析結果から特定の条件に依り絞り込みを行うような処理を行いたいときに参考にしてもらえるとうれしいです。
ここまで読んでいただきありがとうございました。
コメント