はじめに
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_modelclear_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点群の前処理(フィルタリング・法線計算)
- ロボットピッキングへの応用
ゆたんぽBLOG 