当前位置: 首页 > news >正文

halcon激光三角测量(十七)calibrate_sheet_of_light_3d_calib_object

目录

  • 一、calibrate_sheet_of_light_3d_calib_object例程代码
  • 二、标定过程
  • 三、校准后的3D模型和原3D模型对齐过程
  • 四、获得模型标定结果,并生成3D模型
  • 五、set_paint 和 dev_set_paint函数

一、calibrate_sheet_of_light_3d_calib_object例程代码

1、第一部分:读视差图,读3D模型,可视化
2、第二部分:创建激光三角测量模型
3、第三部分:基于视差图像进行校准,获得校准后的3D模型
4、第四部分:基于表面匹配对齐校准后的3D模型和原3D模型,移除背景,下采样,可视化
5、第五部分:可视化标定结果

**第一部分
dev_update_off ()
read_image (CalibObjectDisparity, 'sheet_of_light/calib_object_disparity')
get_image_size (CalibObjectDisparity, Width, Height)
dev_close_window ()
dev_open_window_fit_image (CalibObjectDisparity, 0, 0, -1, -1, WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')

read_object_model_3d ('calib_object.dxf', 'm', [], [], CalibObject3D, Status)
create_pose (0.000, 0.07, 2.7, 130, 350, 125, 'Rp+T', 'gba', 'point', VisualizationPoseModel)
Instructions[0] := 'Rotate: Left button'
Instructions[1] := 'Zoom:   Shift + left button'
Instructions[2] := 'Move:   Ctrl  + left button'
Title := 'CAD model of the calibration object\nThe object must be scanned low edge first'
visualize_object_model_3d (WindowHandle, CalibObject3D, [], VisualizationPoseModel, [], [], Title, [], Instructions, PoseOut)
* 
**第二部分
gen_cam_par_area_scan_division (0.016, 0, 4.65e-06, 4.65e-06, 640, 512, 1280, 1024, CameraParam)
set_system ('clip_region', 'false')
get_cam_par_data (CameraParam, 'image_width', ImageWidth)
get_cam_par_data (CameraParam, 'image_height', ImageHeight)
gen_rectangle1 (Domain, 0, 0, ImageHeight - 1, ImageWidth - 1)
create_sheet_of_light_model (Domain, [], [], SheetOfLightModelID)
set_sheet_of_light_param (SheetOfLightModelID, 'camera_parameter', CameraParam)
set_sheet_of_light_param (SheetOfLightModelID, 'calibration_object', 'calib_object.dxf')
* 
*第三部分 
dev_clear_window ()
dev_set_paint (['3d_plot', 'shaded', 8, 0.9, 0.02, 0.3, -0.3, 0.3, -0.01, -0.003, -0.025])
dev_display (CalibObjectDisparity)
disp_message (WindowHandle, 'Measured disparity of the calibration object', 'window', 12, 12, 'black', 'true')
set_profile_sheet_of_light (CalibObjectDisparity, SheetOfLightModelID, [])
disp_message (WindowHandle, 'Now calibrating. This may take a minute...', 'image', Height - 50, 12, 'orange', 'false')
dev_set_paint ('default')

calibrate_sheet_of_light (SheetOfLightModelID, Error)

set_profile_sheet_of_light (CalibObjectDisparity, SheetOfLightModelID, [])
get_sheet_of_light_result_object_model_3d (SheetOfLightModelID, ObjectModel3D)
dev_clear_window ()
* 
*第四部分 
create_surface_model (CalibObject3D, 0.03, [], [], SurfaceModelID)
find_surface_model (SurfaceModelID, ObjectModel3D, 0.05, 0.2, 0, 'false', [], [], Pose, Score, SurfaceMatchingResultID)
pose_to_hom_mat3d (Pose, CHomMat3D)
affine_trans_object_model_3d (CalibObject3D, CHomMat3D, ObjectModel3DAffineTrans)
create_pose (0.1, 0.02, 2.8, 135, 360, 110, 'Rp+T', 'gba', 'point', VisualizationPoseResult)

select_points_object_model_3d (ObjectModel3D, 'point_coord_z', 0.001, 1, ObjectModel3DThresholded)
sample_object_model_3d (ObjectModel3DThresholded, 'accurate', 0.001, [], [], ObjectModel3DSampled)
Title := 'Calibrated reconstruction of the measurement (yellow) together with the calibration object (blue)'
TitleWrapped := regexp_replace(Title + ' ',['(.{0,60})\\s', 'replace_all'],'$1\n')
visualize_object_model_3d (WindowHandle, [ObjectModel3DSampled,ObjectModel3DAffineTrans], [], VisualizationPoseResult, ['alpha_0', 'alpha_1', 'color_0', 'color_1'], [0.5, 0.3, 'yellow', 'blue'], TitleWrapped, [], Instructions, PoseOut)
* 
*第五部分 
get_sheet_of_light_param (SheetOfLightModelID, 'camera_parameter', CamParamResult)
get_sheet_of_light_param (SheetOfLightModelID, 'camera_pose', CameraPose)
get_sheet_of_light_param (SheetOfLightModelID, 'lightplane_pose', LightPlanePose)
get_sheet_of_light_param (SheetOfLightModelID, 'movement_pose', MovementPose)
dev_inspect_ctrl ([CameraParam,CamParamResult,CameraPose,LightPlanePose,MovementPose])
stop ()
dev_close_inspect_ctrl ([CameraParam,CamParamResult,CameraPose,LightPlanePose,MovementPose])
* 
* Visualize setup with calibration object
gen_sheet_of_light_object_model_3d (SheetOfLightModelID, 0.2, 0.05, 0.4, OM3DLightPlane, OM3DMovement, OM3DCamera, OM3DCone)
visualize_object_model_3d (WindowHandle, [CalibObject3D,OM3DLightPlane,OM3DMovement,OM3DCamera,OM3DCone], [], [0.0309362, 0.15155, 8.14821, 100.687, 1.86383, 90.368, 0], ['alpha_1', 'alpha_3', 'alpha_4', 'alpha_5', 'color_0', 'color_3', 'color_4', 'color_5'], [0.5, 0.5, 0.5, 0.5, 'blue', 'green', 'green', 'green'], 'Setup with calibration object', [], [], PoseOut)
* 
* Visualize setup with reconstructed object
visualize_object_model_3d (WindowHandle, [ObjectModel3DSampled,OM3DLightPlane,OM3DMovement,OM3DCamera,OM3DCone], [], PoseOut, ['alpha_1', 'alpha_3', 'alpha_4', 'alpha_5', 'color_0', 'color_3', 'color_4', 'color_5'], [0.5, 0.5, 0.5, 0.5, 'blue', 'green', 'green', 'green'], 'Setup with reconstructed object', [], [], PoseOut)

二、标定过程

1、创建激光三角测量模型
2、设置模型的相机参数、视差图、模型图
3、进行标定

create_sheet_of_light_model (Domain, [], [], SheetOfLightModelID)
set_sheet_of_light_param (SheetOfLightModelID, 'camera_parameter', CameraParam)
set_sheet_of_light_param (SheetOfLightModelID, 'calibration_object', 'calib_object.dxf')
set_profile_sheet_of_light (CalibObjectDisparity, SheetOfLightModelID, [])
calibrate_sheet_of_light (SheetOfLightModelID, Error)

三、校准后的3D模型和原3D模型对齐过程

create_surface_model (CalibObject3D, 0.03, [], [], SurfaceModelID)
find_surface_model (SurfaceModelID, ObjectModel3D, 0.05, 0.2, 0, 'false', [], [], Pose, Score, SurfaceMatchingResultID)
pose_to_hom_mat3d (Pose, CHomMat3D)
affine_trans_object_model_3d (CalibObject3D, CHomMat3D, ObjectModel3DAffineTrans)
create_pose (0.1, 0.02, 2.8, 135, 360, 110, 'Rp+T', 'gba', 'point', VisualizationPoseResult)

四、获得模型标定结果,并生成3D模型

gen_sheet_of_light_object_model_3d 是一个针对激光三角测量模型生成的函数。

get_sheet_of_light_param (SheetOfLightModelID, 'camera_parameter', CamParamResult)
get_sheet_of_light_param (SheetOfLightModelID, 'camera_pose', CameraPose)
get_sheet_of_light_param (SheetOfLightModelID, 'lightplane_pose', LightPlanePose)
get_sheet_of_light_param (SheetOfLightModelID, 'movement_pose', MovementPose)
gen_sheet_of_light_object_model_3d (SheetOfLightModelID, 0.2, 0.05, 0.4, OM3DLightPlane, OM3DMovement, OM3DCamera, OM3DCone)

五、set_paint 和 dev_set_paint函数

定义灰度值输出模式,dev_set_paint与set_paint不同的是,显示模式还用于之后打开的所有新图形窗口。

set_paint( : : WindowHandle, Mode : )
dev_set_paint( : : Mode : )

不同的图像类型对应不同的模式:
灰度图像可以根据其灰度值被解读为三维数据。要查看这些三维图表,请选择“3d_plot”模式;
三通道图像被解读为 RGB 图像;
向量场图像可以被视为“向量场”。
三种模式对应三组类型参数:
‘default’
[‘3d_plot’, Mode, Step, qa, qb, qc, qd, ZoomFac, CenterRow, CenterCol, CenterHeight]
[‘vector_field’, Mode, Step, MinLength, ScaleLength, CircleSize]

相关文章:

  • 容器、pod和缓存
  • 快速入门 Tailwind CSS:现代前端开发的利器
  • 【deepseek api 第三方平台使用参考】
  • 日常故障排查 - Java程序故障排查
  • Day19 第六章 二叉树part07
  • ASP.NET Core Web应用(.NET9.0)读取数据库表记录并显示到页面
  • 如何提升爬虫获取数据的准确性?
  • 记PasteSpider部署工具的Windows.IIS版本开发过程之草稿-Web.IIS.Administration解读(5)
  • 【MySQL】使用 JDBC 连接数据库
  • GitHub 热点项目介绍
  • 闵氏几何详解
  • 用于仿真得到超材料的S参数后,利用S参数矩阵提取等效介电常数和磁导率
  • 【Golang学习之旅】Go 语言微服务架构实践(gRPC、Kafka、Docker、K8s)
  • 【java】方法的基本内存原理(栈和堆)
  • Python爬虫入门实例:Python7个爬虫小案例(附源码)
  • Python 爬虫中的异常处理
  • 如何学习HBase:从入门到精通的完整指南
  • java在文本追加内容时候发现数据丢失问题
  • 3.4 AI Agent体验设计革命:从界面美学到情感化交互的企业级设计指南
  • Mybatisplus自定义sql
  • 1块钱解锁2万部微短剧还能日更,侵权盗版难题怎么破?
  • “80后”北大硕士罗婕履新甘肃宁县县委常委、组织部部长
  • 三方合作会否受政局变化影响?“中日韩+”智库合作论坛在沪举行
  • 解放日报:“感觉全世界人都在上海买买买”
  • 3月中国减持189亿美元美债、持仓规模降至第三,英国升至第二
  • 特朗普政府涉税改法案遭众议院预算委员会否决