【HALCON】シェイプマッチング完全ガイド - モデル作成から検出まで

PUBLISHED 2024-08-22
UPDATED 2024-09-06

HALCONのシェイプマッチングは、画像内で特定の形状パターンを高速かつ高精度に検出する技術です。産業用検査、ロボットビジョン、品質管理など幅広い分野で活用されています。


基本的なシェイプマッチング

create_shape_model - シェイプモデルの作成

テンプレート画像から形状モデルを作成します。回転に対応したマッチングが可能です。

create_shape_model(Template, NumLevels, AngleStart, AngleExtent, AngleStep,
                   Optimization, Metric, Contrast, MinContrast, ModelID)

パラメータ:

  • Template: モデルを作成するテンプレート画像
  • NumLevels: ピラミッドレベル数(‘auto’推奨)
  • AngleStart / AngleExtent: 回転角度の範囲
  • AngleStep: 角度ステップ(‘auto’推奨)
  • Optimization: 最適化方法(‘none’, ‘point_reduction_low’など)
  • Metric: マッチング基準(‘use_polarity’, ‘ignore_local_polarity’など)
  • Contrast / MinContrast: コントラスト設定
* シェイプモデルの作成例
read_image(Image, 'template.png')
threshold(Image, Region, 100, 255)
reduce_domain(Image, Region, TemplateImage)
create_shape_model(TemplateImage, 'auto', -0.39, 0.79, 'auto',
                   'auto', 'use_polarity', 30, 10, ModelID)

find_shape_model - シェイプモデルの検出

作成したモデルを画像内で検索し、位置・角度・スコアを取得します。

find_shape_model(Image, ModelID, AngleStart, AngleExtent, MinScore,
                 NumMatches, MaxOverlap, SubPixel, NumLevels,
                 Greediness, Row, Column, Angle, Score)

パラメータ:

  • MinScore: 最小一致スコア(0〜1)
  • NumMatches: 検出する最大数(0で全て)
  • MaxOverlap: 検出結果の最大重複率
  • SubPixel: サブピクセル精度(‘interpolation’, ‘least_squares’など)
  • Greediness: 貪欲度(速度と精度のバランス)
* シェイプモデルの検出
read_image(SearchImage, 'search.png')
find_shape_model(SearchImage, ModelID, -0.39, 0.79, 0.5, 1, 0.5,
                 'interpolation', 0, 0.9, Row, Column, Angle, Score)
* 検出位置の表示
dev_display(SearchImage)
gen_cross_contour_xld(Cross, Row, Column, 20, Angle)
dev_display(Cross)

スケーリング対応マッチング

create_scaled_shape_model - スケール対応モデル作成

異なるサイズで現れる物体を検出するためのモデルを作成します。

create_scaled_shape_model(Template, NumLevels, AngleStart, AngleExtent,
                          AngleStep, ScaleMin, ScaleMax, ScaleStep,
                          Optimization, Metric, Contrast, MinContrast, ModelID)

追加パラメータ:

  • ScaleMin / ScaleMax: スケール範囲(例: 0.8〜1.2)
  • ScaleStep: スケールステップ
* スケーリング対応モデルの作成
create_scaled_shape_model(Template, 'auto', 0, rad(360), 'auto',
                          0.8, 1.2, 'auto', 'auto', 'use_polarity',
                          30, 10, ModelID)

find_scaled_shape_model - スケール対応モデル検出

find_scaled_shape_model(Image, ModelID, AngleStart, AngleExtent,
                        ScaleMin, ScaleMax, MinScore, NumMatches,
                        MaxOverlap, SubPixel, NumLevels, Greediness,
                        Row, Column, Angle, Scale, Score)
* スケーリング対応モデルの検出
find_scaled_shape_model(Image, ModelID, 0, rad(360), 0.8, 1.2,
                        0.5, 0, 0.5, 'least_squares', 0, 0.9,
                        Row, Column, Angle, Scale, Score)

XLDベースのシェイプマッチング

create_shape_model_xld - XLD輪郭からモデル作成

画像ではなくXLD輪郭データから直接モデルを作成します。CADデータからのモデル作成に有用です。

create_shape_model_xld(Contours, NumLevels, AngleStart, AngleExtent,
                       AngleStep, Optimization, Metric, MinContrast, ModelID)
* XLD輪郭からモデルを作成
gen_ellipse_contour_xld(Contour, 200, 200, 0, 100, 50, 0, rad(360), 'positive', 1.5)
create_shape_model_xld(Contour, 'auto', 0, rad(360), 'auto',
                       'none', 'use_polarity', 30, ModelID)

NCCマッチング(正規化相互相関)

輝度パターンに基づくマッチング手法です。テクスチャのある対象に適しています。

create_ncc_model - NCCモデルの作成

create_ncc_model(Template, NumLevels, AngleStart, AngleExtent,
                 AngleStep, Metric, ModelID)

Metric オプション:

  • 'use_polarity': コントラストの極性を考慮
  • 'ignore_global_polarity': 全体的な極性を無視
* NCCモデルの作成
create_ncc_model(Template, 5, -0.2, 0.4, 'auto', 'use_polarity', ModelID)

find_ncc_model - NCCモデルの検出

find_ncc_model(Image, ModelID, AngleStart, AngleExtent, MinScore,
               NumMatches, MaxOverlap, SubPixel, NumLevels,
               Row, Column, Angle, Score)
* NCCモデルの検出
find_ncc_model(SearchImage, ModelID, -0.2, 0.4, 0.7, 1, 0.5,
               'true', 0, Row, Column, Angle, Score)

モデルの管理

write_shape_model / read_shape_model - モデルの保存・読込

* モデルの保存
write_shape_model(ModelID, 'model.shm')

* モデルの読込
read_shape_model('model.shm', ModelID)

clear_shape_model - モデルの解放

* メモリからモデルを解放
clear_shape_model(ModelID)

get_shape_model_params - モデルパラメータの取得

get_shape_model_params(ModelID, NumLevels, AngleStart, AngleExtent,
                       AngleStep, ScaleMin, ScaleMax, ScaleStep, Metric)

マッチング手法の比較

手法特徴適用場面
shape_modelエッジベース、高速輪郭がはっきりした物体
scaled_shape_modelスケール変化対応サイズが変わる物体
ncc_model輝度パターンベーステクスチャのある対象
shape_model_xldCAD/輪郭データ使用設計データからの検出

実用的なパラメータ設定

速度重視の設定

* 高速検索(精度は低下)
find_shape_model(Image, ModelID, -0.2, 0.4, 0.7, 1, 0.5,
                 'none', 3, 0.9, Row, Column, Angle, Score)

精度重視の設定

* 高精度検索(処理時間増加)
find_shape_model(Image, ModelID, -0.2, 0.4, 0.5, 0, 0.3,
                 'least_squares_high', 0, 0.7, Row, Column, Angle, Score)

ノイズ環境での設定

* ノイズ耐性を高める
create_shape_model(Template, 'auto', -0.39, 0.79, 'auto',
                   'point_reduction_medium', 'ignore_local_polarity',
                   40, 15, ModelID)

応用例

部品検査

* 複数部品の検出と位置決め
find_shape_model(Image, ModelID, 0, rad(360), 0.6, 0, 0.5,
                 'least_squares', 0, 0.8, Rows, Columns, Angles, Scores)
for i := 0 to |Rows|-1 by 1
    * 各部品の処理
    vector_angle_to_rigid(0, 0, 0, Rows[i], Columns[i], Angles[i], HomMat2D)
endfor

ロボットビジョン

* ピッキング対象の位置・姿勢取得
find_scaled_shape_model(Image, ModelID, 0, rad(360), 0.9, 1.1,
                        0.7, 1, 0.5, 'least_squares', 0, 0.9,
                        Row, Column, Angle, Scale, Score)
* ロボット座標系への変換
affine_trans_point_2d(CamToRobot, Column, Row, RobotX, RobotY)

まとめ

HALCONのシェイプマッチングは、産業用画像処理の中核技術です。目的に応じて適切なモデルタイプを選択し、パラメータを調整することで、高速かつ高精度な検出が実現できます。

CATEGORY
TAGS
円