【HALCON】Surface-based Matching(サーフェスマッチング)解説|3D点群で高精度位置決め

はじめに

HALCON の Surface-based Matching(サーフェスマッチング) は、3D点群データを使って物体の位置姿勢(Pose)を高精度に求める手法です。
2D画像では難しい「曲面」「エッジが少ない対象」「複雑形状」の認識に強く、ロボットピッキングや3D検査で広く使われています。

この記事では、公式情報と実務知見をもとに、サーフェスマッチングの仕組み・使い方・注意点をまとめます。

サーフェスマッチングとは?

サーフェスマッチングは、3D点群データ(ObjectModel3D)を使って物体を認識するマッチング手法です。

🔍 特徴(調査結果)

  • エッジが少ない曲面形状でも認識できる
  • ノイズ・欠損・重なりに強い
  • 低解像度の3Dデータでも安定
  • 高速でロバストな位置姿勢推定が可能
    (リンクスの解説より )

内部処理では、
点の3D位置情報 + 法線ベクトル
を使ってモデルとシーンを照合します。

使用する主なオペレーター

HALCONのサーフェスマッチングは、以下のオペレーター群で構成されています。
(MVTec公式リファレンスより )

用途オペレーター
モデル作成create_surface_model
モデル読み込みread_surface_model
マッチング実行find_surface_modelfind_surface_model_image
結果取得get_surface_matching_result
Poseの微修正refine_surface_model_pose
モデル保存serialize_surface_modeldeserialize_surface_model
メモリ開放clear_surface_modelclear_surface_matching_result

サーフェスマッチングの処理フロー

① 3D点群データの取得

  • 3Dカメラ(Gocator、heliInspect など)
  • ステレオカメラ
  • 光切断方式(レーザーライン)
    (HALCONは多くの3Dデバイスをサポート )

② Surface Model の作成

create_surface_model (ObjectModel3D, 'mlp', [], [], SurfaceModelID)
  • 点群から特徴点を抽出
  • 法線ベクトルを計算
  • マッチング用のモデルを生成

③ シーン点群とのマッチング

find_surface_model (SurfaceModelID, Scene3D, 0.7, 0.9, 0, 1, 'least_squares', Pose, Score)
  • Pose(位置姿勢)
    が返ってくる。

④ Poseの微調整(任意)

refine_surface_model_pose (...)

⑤ 結果の利用

  • ロボットピッキング
  • 3D検査
  • 位置決め・姿勢補正

サーフェスマッチングが強い理由

✔ 曲面・エッジレス形状に強い

2Dマッチングでは特徴が取れない対象でも、3D点群なら形状そのものを使える。

✔ ノイズ・欠損に強い

リンクスの解説によると、
「ノイズや欠損、重なりがあっても高速で認識可能」
とされている()。

✔ 低解像度でも安定

点群の密度が低くても、法線ベクトルを使うことで安定したマッチングが可能。

実務での利用シーン

1. ロボットピッキング(3D Bin Picking)

  • バラ積みワークの姿勢推定
  • 位置ズレ・重なりに強い
  • 金属・プラスチックなど反射の影響を受けにくい

2. 3D外観検査

  • 形状の欠け
  • 反り・歪み
  • 体積・高さの異常検出

3. 位置決め・姿勢補正

  • 3Dワークの正確な位置合わせ
  • 組立工程での位置補正

実務での注意点(重要)

⚠ 点群の前処理が品質を左右する

  • ノイズ除去
  • 不要領域の削除(ROI設定)
  • 法線の再計算

⚠ モデル点群とシーン点群のスケール差に注意

スケールが違うとマッチングできない。

⚠ 点群の向き(座標系)を揃える

ロボット座標系とカメラ座標系の整合が必須。

⚠ メモリ管理を忘れない

clear_surface_model
clear_surface_matching_result
を使わないとメモリリークの原因に

コード例(HDevelop)

* 3Dモデルの読み込み
read_object_model_3d ('model.om3', ObjectModel3D)

* Surface Model の作成
create_surface_model (ObjectModel3D, 'mlp', [], [], SurfaceModelID)

* シーン点群の読み込み
read_object_model_3d ('scene.om3', Scene3D)

* マッチング
find_surface_model (SurfaceModelID, Scene3D, 0.7, 0.9, 0, 1, 'least_squares', Pose, Score)

* 結果の利用
disp_message (WindowHandle, Score, 'window', 20, 20, 'black', 'true')

まとめ

HALCONのSurface-based Matchingは、
3D点群を使った高精度・高安定のマッチング手法 です。

  • 曲面・複雑形状に強い
  • ノイズ・欠損に強い
  • ロボットピッキングや3D検査で必須
  • オペレーター群が豊富で実務向け

今後の記事では、以下も深掘りできます:

  • Surface Model のパラメータ最適化
  • find_surface_model の高速化テクニック
  • 3D点群の前処理(フィルタリング・法線計算)
  • ロボットピッキングへの応用

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です