この記事では、LabVIEWのアドオンソフトウェアの一つであるVision Development Moduleに付属する、画像解析用のソフトウェアVision Assistantの使用例を確認できるソリューションウィザードの紹介をしています。
Vision Development Moduleは有償のアドオンソフトウェアなので、どういったことができるかわからない状態で導入したくない、という方にも参考にしていただけると思いますし、既に使用している方には実装したい解析のヒントになるかもしれません。
アプリケーションの種類ごとのサンプルを確認する
Vision Assistantは、画像処理を行うために処理一つ一つを選択肢から選びそしてパラメタを変えてどのような処理結果になるかがその場でわかる便利なソフトウェアです。
Vision Assistantは、Vision Development Moduleというソフトウェアに付属します。(Vision Development Module自体はLabVIEWのアドオンソフトウェア扱いで、インストールすることでLabVIEWの中で画像解析を行うための関数が使えるようになります)
後からLabVIEWと一緒に使う、という場合にはLabVIEWを先にインストールしておきます。この順番を逆にし、Vision Development ModuleをインストールしてからLabVIEWをインストールするとうまく機能が使えません。
LabVIEW単体をインストールしただけでは機能が使用できないので、LabVIEWインストール後に単体でインストールする必要があるのですが、このVision Development Moduleのインストールについては別記事で紹介しています。
Vision Development Moduleをインストールすることで、LabVIEWとは独立して使用できるVision Assistantもインストールされます。
LabVIEWとは独立しているので、LabVIEWプログラムの書き方を知らなくてもVision Assistantを動かすことはできます。

ただ実際は、一連の処理内容をLabVIEWのコードとして出力しLabVIEWのプログラムと統合できたり、Express VIとしてもVision Assistantが存在しているのでLabVIEWとの使い勝手もかなりいいのが特徴です。

一方で、やれる処理が多くあるため、どのような処理ができるのか、どのようにやるべきかはなかなかいろいろ触らないとわからなかったりします。
私はこのブログの中で事あるごとにサンプルを確認して動作を確認することが大切であることを説いていますが、Vision Assistantも例外ではなく、ソリューションウィザードという名のサンプルを確認できる項目があります。
各分野であり得そうなシナリオで、というコンセプトでサンプルが作られているのですが、実際の画像を使用して解析を実装する際の例が見れるので、ぜひ一度いくつか見てみると面白いと思います。
サンプルの見方
Vision Assistantのサンプルは、ソリューションウィザードという名前でヘルプに項目があります。これをクリックすることで、どのサンプルを見たいか選び、ロードすることで開くことができます。

それぞれのサンプルにはサンプルの画像もついていて、処理を選ぶことができます。
基本的な操作としては、以下の3つを覚えておけばサンプルを確認する上では十分だと思います。
まずは画像の拡大です。サンプルを開いてそのままの状態だと表示されている画像が小さいので、画面に合わせて適当な大きさにズームさせます。

次に、画像処理の過程を自動で再生するための機能です。今選択している画像に対してだけなのか、あるいは複数の画像があるサンプルについては各画像を順繰り再生していくのかを選べます。

各画像を再生していくときの速度は選べないので、画像を詳しく確認したい、という場合には手動で画像を切り替えます。以下の手順で各画像を切り替えてください。

とりあえずこれらの操作ができればサンプルを選択して、実行、どのような処理が行われているかを確認することはできると思います。
ソリューションウィザードの各処理について
では、ソリューションウィザードの各項目でどのような処理をしてどのような結果となっているかを紹介します。
ヒューズボックス検査
まずはヒューズボックス検査を想定した画像解析です。
このサンプルでは、カラーマッチングを使用して、予想される位置に予想される色の対象物(ヒューズ)があるかどうかを検査していきます。

使用している解析はカラーマッチングで、あらかじめ用意しておいた色情報と、指定した領域の色情報が一致しているかを調べる事で、予想した位置に予想した色の対象があるかどうかを判別しています。

点火プラグ検査
このサンプルでは点火プラグの検査として、特定の箇所の長さを測り、正しく作成されているかの検査をキャリパ関数で調べています。
結果として、指定した部分の長さの情報を取得することができます。

キャリパ関数はまた後ででてきますが、指定した部分の長さなどの情報を取得するための処理です。
ではどうやって「指定」をするかというと、このサンプルでやっているようにエッジ検出を行って各エッジを認識できるようにします(そしてキャリパ処理で個々のエッジを指定します)。
エッジ検出は、調べたい部分(下の図の中で緑色の線で表示された部分)に対してピクセル値の変化を調べ、急激な変化があった部分をエッジとして判別することで行っています。

細胞解析
このサンプルでは細胞解析として細胞の数をカウント、面積を測る目的で種々の画像調整を行っています。

細胞部分とそうでない部分を区別するためにいくつかのフィルタを通しています。このサンプルでは、ガウシアンフィルタやラプラシアンフィルタを使用しています。

その後画像を二値化し、粒子周りの小さいすき間部分を埋めています。

あとは一つの粒子とみなせる部分については穴埋めで大きな領域とみなし、画像の縁にあるものは正確な面積の判定に使えないので除外、円形ではないものも粒子とはみなさずに除外しています。

この後、粒子解析の処理によって様々な特徴量(重心、外接長方形、外周、面積などなど)を調べています。
培養解析
このサンプルでは培養した細胞の一つ一つを際立たせるために境界線を設けるための処理を実装しています。

こちらもまた、細胞以外の部分と分けるためにいくつかの処理を施します。
最終的に元画像に輪郭を重ねるといった処理になるので、元画像をバッファにためつつ、画像の平滑化やコンボリューションフィルタを適用しています。

次に二値化して細かい粒子は取り除き、また本来別々の粒子となっているべき部分が少し重なっているとよくないので分離処理を行っています。

分離がちゃんとできているか、ラベル付け処理で色分けして大丈夫か確認後、粒子の境界線を検出します。
あとは、一番最初にコピーした元画像に重ね合わせるだけなのですが、二値化したままだとスケールが(0,1)なので、スケールを(0,255)に変更することで元画像上で輪郭が白く見えるように工夫しています。

プリント回路基板検査
このサンプルではプリント回路基板の検査を例にパターンマッチングを行うことで検査対象が存在するかや正しい位置にあるかを判断する方法を紹介しています。

パターンマッチングはあらかじめ用意したテンプレートを使用し、そのテンプレートに近いと思われる部分を検出してくれます。どの程度近ければ検出されるか、という基準スコアの設定もできるので、検出の精度を調整することができます。

ピン検査
このサンプルでは、対象物の角度を測る目的の処理をエッジ検出やキャリパで実現する流れをピン検査を例に実装しています。
キャリパ処理によって、直線かあるいはピンが曲がっているかといった確認ができます。

キャリパ処理は、どの処理を行うかに依りますが基本的に二つ以上のエッジを指定して、そのエッジの間隔や水平からの角度、あるいは3つ以上選択した場合の描かれる線分同士の角度などを求めることができます。

フラットフィールド補正
このサンプルでは、不均一な背景を持つ画像に対して背景輝度補正を施すことで処理をしやすくし、より正確な二値化を経て対象物の面積を測定する処理を紹介しています。

フラットフィールド補正を行うことで、画像内の背景に明るさの違いがある場合、これを均等にしてくれます。この状態で画像を二値化して粒子解析を行うことで、粒子判別の間違いを防ぎやすくなります。

本記事ではVision Assistantのサンプルであるソリューションウィザードの中身について紹介してきました。
複数のサンプルで共通している、よく使われる処理もありますが、処理同士の組み合わせ次第で違った解析が行えるので、そのあたりの実装のヒントに役立つと思います。
サンプルはこれ以外にもまだ多くあり、別記事で紹介していきます。
ここまで読んでいただきありがとうございました。
コメント