この記事では、LabVIEWのアドオンソフトウェアの一つであるVision Development Moduleに付属する、画像解析用のソフトウェアVision Assistantの使用例を紹介したソリューションウィザードを解説しています。
Vision Development Moduleは有償のアドオンソフトウェアなので、どういったことができるかわからない状態で導入したくない、という方にも参考にしていただけると思いますし、既に使用している方には実装したい解析のヒントになるかもしれません。
なお、パート1、2は以下の記事を確認してみてください。

LabVIEWの中で確認できるサンプル
本題に入る前に、LabVIEW側で確認できる画像解析のプログラムのサンプルについて紹介します。
Vision Assistantは、画像解析を行うプログラムを用意するのに便利でサンプルもある程度揃っているのですが、本記事までで一通りのサンプル(ソリューションウィザード)を紹介したことになります。
実際は画像解析のための処理はもっと種類があるものの、ソリューションウィザードとしてはサンプルがありません。
そこで次に参照するべきなのがLabVIEWのサンプルです。
LabVIEWのサンプルはサンプルファインダから確認することができます。

例えば、Vision Assistantでは扱っていないようなOCR検査やバーコード読み取り、動き予想など多種多様なサンプルがあり、プログラムで実際にやりたいことの参考になるかもしれないので一度覗いてみるのをオススメします。

ソリューションウィザードの各処理について
それでは、ソリューションウィザードの残りのサンプルについて紹介していきます。
錠剤梱包検査
錠剤梱包検査のサンプルでは、指定した色の錠剤がそろっているかをカラーテンプレートマッチングによって検査しています。

カラーテンプレートマッチングは通常のテンプレートマッチングのように使えますが色の情報を含めてマッチングするのでこのような特定の色の複数個の対象を調べるのに便利です。

デンタルフロス検査
デンタルフロス検査のサンプルでは様々な角度になっている対象に対して特定の処理を行うためにパターンマッチングと座標系の設定を行っています。

この流れは他のサンプルでも既にいくつか使用されていますがやっていることは同じで、パターンマッチングをして対象のベースとなる部分を検出し、このマッチングされた情報を元に新規の座標系を設定しています。

こうすることで、下記の図のように対象がずれていたり回転していてもベース部分のマッチングからの新規座標系の設定が行えるので、ROIの位置を相対座標で指定することができ、調べたい領域を対象の位置次第で毎回定義しなおす、という必要がなくなります。

錠剤検査
錠剤検査では領域が重なっていそうな対象をうまく分割して粒子解析を行う方法を紹介しています。
二値化した状態で明るい領域がつながっていると正しく粒子解析ができないため、これを分割する必要があります。

つながってしまっている領域の分割のために、まずは二値化して明るい領域を抽出してから対象に対して距離マップを作成しています。
この処理をすることでこの次のWatershedセグメント時に領域を正しく分離できるようにします。

画像の分割をWatershedセグメント化処理で行ってから、これまでにバッファにためていた画像を使ってマスク処理をし、対象となっている錠剤が重なっているのを分割します。(サンプルでは「マスク処理」という名前になっている部分で「論理差」が選択されていますが、「マスク」の間違い?)

錠剤変色検査
錠剤変色検査では、対象の異なる色が混じっていることを検出します。

まずはカラー二値化で対象全体を抽出します。対象となる錠剤の中に変色部分があったらそこは「穴」となりますが、その穴は上級モフォロジーによって穴埋め処理をしておきます。

穴埋めする前と後との差分をとることで、穴となっていた部分、つまり変色部分のみを検出することができるので、あとは処理上生じたノイズ部分を除去しています。

異質錠剤検査
異質錠剤検査では調べたい対象以外を抽出するための処理についてのサンプルとなっています。
サンプルでは二色の錠剤のみですが、三色以上あったとしても目的の錠剤以外を抽出するには似たような操作で対応できると思います。

まずは背景から分離するためにカラー二値化をして対象である錠剤を全て検出しています。

今度は、「正しい」色の対象のみをカラー二値化で抽出します。

あとは今までに二値化していた画像同士で差分を取ることで正しくない色の対象のみを二値化画像としてあぶりだします。

ノイズの除去方法は様々あり得ますが、このサンプルでは基本モフォロジーの収縮操作によって余分な二値化領域を消すようにしています。

チュートリアルも活用する
さぁこれでソリューションウィザードのサンプルは一通り紹介しました。
実際にはソリューションウィザードにはもう二つ項目があるのですが、これらはチュートリアル扱いになっています。

ソリューションウィザードのサンプルを見ることでどのような処理ができるのかはわかった、でも実際にVision Assistantをどう触っていいかがわからない!という場合に、どのボタンをクリックしてどう操作すればいいかといったことを実例を元に紹介しているのがチュートリアルで、
C:\Users\Public\Documents\National Instruments\Vision Assistant\Documentation
のパスにあるVA_Tutorial.pdf資料に記述があります。

これを使用してVision Assistantの基本的な使い方に慣れたら、あとは今までに紹介してきたサンプルも実際に動かして確認しつつ応用できそうな処理の流れは覚えておいて、自分で用意した画像に対していろいろ処理を施して試行錯誤していく、というのがVision Assistantを使用した画像解析プログラムの開発の流れになると思います。
本記事ではVision Assistantのサンプルであるソリューションウィザードの中身について紹介してきました。
本記事および過去のパート1、2でしてきた紹介で、いきなりLabVIEWでゴリゴリプログラムを書くのなんてできない!という方に少しでも参考になればうれしいです。
ここまで読んでいただきありがとうございました。
コメント