■
No.2:
XLDデータオブジェクトの抽出と操作性 |
HALCONではピクセル間にまたがるデータを測定するため、XLDオブジェクト(Extended
Line Description)を使用することでサブピクセル精度の計測を実現しています。HALCONのデータオブジェクトに関する詳しい紹介は、前号のLinX
Expressをご参照ください。
|
■
XLDデータオブジェクトの抽出
XLDデータオブジェクトを抽出する関数は、ピクセル数以上のデータを取り扱うため通常より多くの時間を要します。また、このような処理関数を画像全体に適応すると、実行時間の大きな損失となります。そこで、前号で紹介したRegionオブジェクトを使用することで、ある画像処理の結果(Region)を用いて、元画像から解析範囲を絞込むことができます。そして、範囲を絞込んだ画像からXLDデータの抽出を行うことで、データ抽出の処理時間を大幅に短縮することが出来ます。
|
領域を絞って抽出した場合:
23.2msec
|
画像全体から抽出した場合:
613.6msec
|
本機能は他社にないHALCONを代表する機能であり、高速化が求められるマシンビジョンシステムにて絶大なる効果を発揮します。本機能はエッジ抽出の高速化だけでなく、パターンマッチングでも解析範囲を絞り込むことで高速化が実現できます。
|
■
XLDオブジェクトの操作性
通常のアプリケーションでは、対象物と背景のコントラスト差が少ないなどの影響により、XLDオブジェクトを安定して抽出することが困難です。つまり、抽出したいエッジが途中で切れてしまったり、対象外の細かいエッジノイズを抽出してしまったり、といった悩みを抱えることになります。これに対して、HALCONの便利な関数群を利用することで、以下の通り巧みに目的のエッジを操作・抽出することができます。
|
【エッジの分割】
今回の目的ではダイアモンドの高さを計測したいので、直線成分のエッジに分割しなければなりません。そこで、「segment_contours_xld」関数を用いると、曲線や直線の成分に応じたパラメータを指定することにより、任意の箇所で自由にXLDオブジェクトを分割することができます。以下の例では、直線方向を向いていない“反り”を分割することで、後の操作により“反り”だけを除外できます。
|
エッジ分割前
|
|
エッジ分割後
|
【エッジの選択】
ノイズの影響によって抽出された細かなエッジを除外したり、誤った方向成分を持つエッジを除外するには、「select_contours_xld」関数を用います。これにより、XLDの形状特徴量を指定して任意のXLDだけを抽出することができます。以下の例では、直線成分を持ち、一定の長さを持っているXLDを抽出しています。
|
エッジ選択前
|
|
エッジ選択後
|
【エッジの結合】
直線や円などで近似を行う場合、より多くのエッジデータを活用することで精度を向上させることができます。そのためには、興味の対象となるエッジ同士を結合させる必要があり、HALCONでは「union_collinear_contours_xld」関数を利用します。この関数は、結合したいエッジ同士の相対距離や相対角度を指定することで、任意のエッジを自由に結合することが出来ます。今回の例では、ダイアモンドの斜辺を直線で近似することにより、その交点から高さを求めることを目的としているため、斜辺に平行なエッジ(XLD)同士を結合します。
|
エッジ結合前
|
|
エッジ結合後
|
No.3では、抽出したXLDデータを用いて円・直線成分で近似することにより、最終的に計測を行うところまでを解説いたします。ご期待ください。
なお、本号に関連するサンプルプログラムをご希望の方は、以下のサイトからダウンロードしていただけます。
program.zip
ただし、本プログラムの実行にはHALCONライセンスが必要となりますので、ライセンスを所有されていない方はHALCON活用法に付随する評価版CDのご利用をお勧めいたします。HALCON活用法のご購入は以下のページを参照ください。
|