HALCON + BOP:从深度图到6D Pose

发布时间:2026/7/30 11:37:24

HALCON + BOP:从深度图到6D Pose 「Halcon 项目」。/~b4fb3ZrHFz~:/链接https://pan.quark.cn/s/1ee336f5e76dHALCON BOP从深度图到6D Pose这份资料记录了从选择数据集、理解ROI和点云到用HALCON完成Surface Matching、稠密Pose精修、6D Pose显示、计时优化和100帧精度评估的全过程。建议第一次阅读时按章节顺序看以后查代码时可以直接跳到“关键代码位置”和“当前结论”。1. 当前环境与数据软件HALCON版本22.11 SteadyHALCON安装目录E:\Halcon2022\MVTec\HALCON-22.11-SteadyBOP数据目录E:\BOP-Dataset\lm当前学习资料本文件所在目录为什么改用BOP数据集最初考虑使用RealSense D435i和Replica room0D435i现场深度噪声较明显刚开始不利于判断算法错误还是传感器错误。Replica适合室内场景重建和相机轨迹实验但不方便直接学习“已知物体CAD模型的6D Pose”。BOP LM同时提供RGB、深度、相机内参、PLY模型、物体Mask和6D Pose真值更适合验证完整流程。当前对象和场景数据集BOP LM 物体obj_000008电钻 PLY模型E:\BOP-Dataset\lm\models\obj_000008.ply 测试场景E:\BOP-Dataset\lm\test\000008 单帧示例000404场景000008中已有200张RGB图200张深度图200张普通Mask200张可见Mask200帧相机参数和6D Pose真值电钻在全部200帧中出现文件编号不是连续的000000000199实际范围约为000004001185。数据集来源与最小组合BOP官网https://bop.felk.cvut.czHugging Face数据集主页https://huggingface.co/bop-benchmark/datasets为了完成当前电钻实验最少需要lm/models/obj_000008.ply lm/models/models_info.json lm/test/000008/rgb lm/test/000008/depth lm/test/000008/mask_visib lm/test/000008/scene_camera.json lm/test/000008/scene_gt.json lm/test/000008/scene_gt_info.json当前E:\BOP-Dataset\lm已经包含所需内容不需要再次下载。数据集已经给出电钻PLY模型因此这一阶段不需要自己使用CAD软件重新制作模型。BOP目录结构E:\BOP-Dataset\lm ├─ models │ ├─ obj_000008.ply 电钻三维模型 │ └─ models_info.json 模型尺寸信息 └─ test\000008 ├─ rgb RGB图 ├─ depth 深度图 ├─ mask 完整物体Mask ├─ mask_visib 当前画面可见部分Mask ├─ scene_camera.json 相机内参、深度比例 ├─ scene_gt.json 6D Pose真值 └─ scene_gt_info.json 可见比例、真值框等信息2. 最终流水线RGB与深度图 → 检测框或分割Mask得到ROI → 深度图反投影成X/Y/Z图 → xyz_to_object_model_3d生成场景点云 → 读取PLY模型 → create_surface_model生成参考Surface Model → find_surface_model进行全局粗匹配 → dense_pose_refinement进行稠密Pose精修 → 得到T_camera_object → 显示红绿蓝坐标轴 → 与BOP真值比较完整流程总图3. 十个处理阶段3.1 原始RGBRGB图方便人和二维检测器识别物体但RGB像素本身没有三维距离。3.2 深度图深度图的每个有效像素保存一个距离值Z。BOP原始深度以整数形式保存本例按depth_scale转换后再除以1000得到米。3.3 ROIROI是Region of Interest即感兴趣区域。它的作用是只保留目标附近的深度点减少桌面、玩具和背景对配准的干扰。当前单帧程序默认使用矩形框模拟二维检测器输出调试时也可以使用BOP可见Mask。3.4 深度图转换为XYZ图用相机内参将像素坐标和深度反投影到相机三维坐标系X (u - Cx) × Z / Fx Y (v - Cy) × Z / Fy Z 深度其中Fx/Fy是焦距Cx/Cy是主点u/v是图像列和行。3.5 ObjectModel3D场景点云同一个像素位置的X、Y、Z组成一个三维点所有有效点组合后就是场景点云。HALCON关键代码xyz_to_object_model_3d (ImageX, ImageY, ImageZ, SceneModel3D)3.6 PLY/CAD模型PLY是物体的标准三维几何模型。它不一定必须由自己使用CAD软件制作也可以来自数据集、三维扫描、厂家或公开模型。在配准中PLY模型是需要被移动和旋转的“参考模型”现场深度形成的点云是“场景模型”。3.7 Surface Modelcreate_surface_model会对PLY表面采样建立点对几何特征、表面法向和搜索结构。create_surface_model ( CADModel3D, 0.01, [model_invert_normals], [true], SurfaceModelID )训练Surface Model较慢但同一个物体只需离线创建一次。现在程序会将其缓存后续用read_surface_model直接读取。3.8 全局粗匹配HALCON Surface-Based Matching先对场景降采样并选择关键点再比较场景点对和CAD点对的距离及相对方向生成候选Pose。随后默认进行稀疏Point-to-Plane姿态优化。因此这里的“粗配”更准确地说是点对特征全局搜索 稀疏点到平面Pose优化3.9 稠密Pose精修设置dense_pose_refinementtrue后HALCON使用更多场景点让场景点到最近CAD切平面的距离尽量小。这可以理解为HALCON封装的稠密Point-to-Plane ICP风格优化。find_surface_model ( SurfaceModelID, SceneModel3D, RelSamplingDistance, KeyPointFraction, 0.05, false, [num_matches,scene_invert_normals,dense_pose_refinement], [1,true,true], PoseEstimated, Score, SurfaceMatchingResultID )3.10 6D Pose6D Pose包含三个平移量X、Y、Z三个旋转量Rx、Ry、Rz最终矩阵HomMat3DEstimated T_camera_object它表示“物体模型坐标系中的点如何变换到相机坐标系”。pose_to_hom_mat3d (PoseBest, HomMat3DEstimated)红轴是X绿轴是Y蓝轴是Z轴原点表示物体位置轴方向表示物体旋转。HALCON当前直接输出图中红色轮廓BOP真值Pose绿色轮廓HALCON预测Pose红/绿/蓝箭头预测物体坐标系X/Y/ZT(mm)物体原点相对于相机的位置R(deg)HALCON Pose中的三个旋转角4. 单帧结果示例帧000404使用矩形ROI时场景点数43,745 粗配平移误差8.10 mm 粗配旋转误差4.72° 精修平移误差约1.72 mm 精修旋转误差约0.71°这个结果说明全局粗配成功找到了正确物体附近。稠密精修显著降低了位置和角度误差。深度单位、相机内参、CAD比例和法向方向基本正确。单帧结果很好但不能代表全部观察角度。5. 为什么最初运行很慢初始程序内部计时阶段时间深度、ROI、XYZ点云约0.015秒每帧重新创建Surface Model约8.99秒额外粗配测试约8.78秒第二次完整匹配和精修约8.00秒总时间约29.70秒主要问题有两个Surface Model原本每帧重新训练。为比较粗配和精配程序把全局搜索完整执行了两次。优化后Surface Model离线生成并缓存。生产模式只执行一次带稠密精修的匹配。可使用ShowVisualization : 0关闭轮廓、坐标轴和PNG输出。显示和保存结果图本身约需34秒因此“算法时间”和“带显示的演示时间”要分开看。6. 100帧批量评估为了避免被单帧结果误导从200帧中均匀选择了100帧并使用BOP可见真值Mask先测试Surface Matching本身。快速参数RelSamplingDistance 0.015 KeyPointFraction 0.5结果返回Pose44/100正确且低于5 mm、5°14/100低于2 mm、1°1/100平均匹配时间约0.285秒保守参数RelSamplingDistance 0.010 KeyPointFraction 1.0结果返回Pose63/100正确且低于5 mm、5°21/100低于2 mm、1°1/100平均匹配时间约1.342秒返回结果中的平移误差中位数约5.83 mm返回结果中的旋转误差中位数约1.63°旋转误差P95接近178°存在严重错误翻转100帧测试带来的关键认识000404上的约1.72 mm / 0.71°是一个效果很好的样例但当前配置不能稳定覆盖不同观察角度。当前真正的瓶颈是“粗配候选错误”而不是最后的稠密精修错误的全局候选Pose → 稠密精修进入错误局部极值 → 产生几十毫米或接近180°的错误精修只能改善已经接近正确解的初始Pose不能稳定挽救完全错误的粗配。7. 当前主程序开关主程序code/bop_lm_obj8_6d_pose.hdevROI模式UseGroundTruthMask : 00矩形ROI模拟检测器目标框1BOP可见真值Mask仅用于调试和算法上限测试精度模式AccuracyMode : 11保守参数0.010 / 1.0召回和精度优先0快速参数0.015 / 0.5仅适合实验可视化ShowVisualization : 11显示红绿轮廓、6D坐标轴和Pose数值0关闭图形输出用于生产计时或批处理是否额外运行粗配基准RunCoarseBenchmark : 00生产模式只匹配一次1额外运行一次不带Dense Refinement的匹配用来比较粗配和精修误差8. 文件说明HALCON和Python代码code/bop_lm_obj8_6d_pose.hdev单帧完整流程、计时和6D Pose显示code/benchmark_bop_lm_obj8_halcon.hdev单帧参数扫描code/bop_lm_obj8_batch100_eval.hdev100帧HALCON批量评估code/prepare_bop_lm_obj8_batch100.py准备100帧ID、真值矩阵和可见比例code/analyze_bop_lm_obj8_batch100.py汇总100帧结果code/bop_lm_obj8_visualize.py生成十张流程图code/make_bop_pipeline_montage.py拼接流程总图结果results/bop_lm_obj8_batch100_results.csv两组参数的逐帧结果results/bop_lm_obj8_batch100_summary.json100帧汇总指标results/bop_lm_obj8_batch100_worst20.csv最差20帧results/bop_lm_obj8_parameter_benchmark.tup单帧参数扫描原始结果results/bop_lm_obj8_timing_result.tup分阶段计时Surface Model缓存约65 MB为避免在资料包中复制两份仍保存在上一级目录../obj_000008_surface_model.sfm9. 如何在HDevelop中运行打开code/bop_lm_obj8_6d_pose.hdev。确认E:\BOP-Dataset\lm存在。确认上一级outputs目录中存在obj_000008_surface_model.sfm。初次学习保持ShowVisualization : 1 AccuracyMode : 1 RunCoarseBenchmark : 0运行后观察图形窗口中的红绿轮廓、XYZ坐标轴和Pose数值。查看输出的HomMat3DEstimated它就是T_camera_object。批量测试时打开code/bop_lm_obj8_batch100_eval.hdev该程序默认关闭逐帧图形显示只输出数值结果。10. 下一步优化方向后续继续使用HALCON建议按这个顺序进行将num_matches由1改为510保留多个粗配候选。根据深度残差、轮廓重合和可见面积重新选择候选Pose。对低Score或残差异常的Pose执行拒绝不发送给机器人。加入相机视角和允许旋转范围约束排除不可能的180°翻转。尝试支持3D边缘的Surface Model。将最差20帧逐一生成轮廓和坐标轴图寻找共同失败模式。连续视频使用上一帧Pose调用refine_surface_model_pose进行跟踪丢失时才重新全局搜索。接入D435i后重新标定内参过滤飞点和深度边缘噪声并单独统计真实相机精度。机械臂场景还需要加入手眼标定误差最终系统误差不等于单独的Pose误差。11. 当前阶段结论已经完成BOP LM最小数据准备深度图到XYZ和ObjectModel3DPLY到Surface ModelHALCON全局Surface Matching稀疏和稠密Point-to-Plane Pose优化T_camera_object输出BOP真值误差计算红绿轮廓与6D坐标轴显示Surface Model缓存和分阶段计时100帧速度、召回和精度验证尚未完成生产要求跨视角粗配稳定性不足错误Pose拒绝机制不足多候选重排序尚未实现D435i真实数据尚未重新评估手眼标定和机器人坐标变换尚未接入当前最重要的工程任务不是继续盲目调整Dense Refinement而是提高全局候选的召回、筛选正确候选并可靠拒绝错误Pose。

相关新闻