news 2026/1/15 9:20:42

从Halcon官方例子出发:双目相机标定与三维点云生成

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从Halcon官方例子出发:双目相机标定与三维点云生成

halcon双目相机标定+三维点云生成程序 官方例子改的

在机器视觉和三维重建领域,双目相机标定以及基于标定结果生成三维点云是至关重要的任务。今天就和大家分享下我基于Halcon官方例子修改,实现双目相机标定与三维点云生成程序的过程。

Halcon双目相机标定

官方例子基础

Halcon官方例子为我们提供了一个非常好的起点。在标定双目相机时,核心思路是通过棋盘格等标定板,获取不同角度下相机拍摄的图像特征点。

代码实现与分析

* 读取双目相机左右图像 read_image(LImage, 'left_camera_images/*.tif') read_image(RImage, 'right_camera_images/*.tif') * 提取棋盘格角点 find_caltab(LImage, CalTabDescrName, CalTabPose, 'all', 'caltab_found', LMarks, LNum) find_caltab(RImage, CalTabDescrName, CalTabPose, 'all', 'caltab_found', RMarks, RNum) * 相机标定 calibrate_cameras([LMarks, RMarks], [LNum, RNum], CalibrationDataID)

在这段代码中,首先通过readimage函数读取左右相机的图像数据。这里假设图像是以.tif格式存储在对应的文件夹中。接着,findcaltab函数用于在图像中寻找棋盘格角点,CalTabDescrName是棋盘格描述文件,通过这个函数可以得到角点的位置信息LMarksRMarks。最后,calibrate_cameras函数利用找到的角点信息进行相机标定,CalibrationDataID是标定数据的标识,后续会用于生成三维点云。

三维点云生成

基于标定结果的点云生成原理

在完成双目相机标定后,我们就有了足够的参数来计算空间中三维点的坐标。通过三角测量原理,利用左右相机图像中对应点的视差,结合标定得到的相机参数,就能计算出三维点的坐标。

代码实现与分析

* 获取标定参数 get_calib_data(CameraParamName, CalibrationDataID, 'camera', CameraParam) * 从图像中提取特征点对 match_template(LImage, Template, 'ncc', 0.7, RowL, ColumnL) match_template(RImage, Template, 'ncc', 0.7, RowR, ColumnR) * 计算三维点云 project_3d_point([RowL, RowR], [ColumnL, ColumnR], CameraParam, 'bilinear', X, Y, Z) create_3d_object(X, Y, Z, 'point', 3DObject)

这里,getcalibdata函数从标定数据CalibrationDataID中获取相机参数CameraParammatchtemplate函数用于在左右图像中匹配相同的模板,找到对应的特征点对,这里以归一化互相关(ncc)作为匹配算法,阈值设为0.7。最后,project3dpoint函数利用相机参数和左右图像中的对应点坐标,计算出三维空间中的点坐标XYZ,并通过create3d_object函数创建三维点云对象3DObject

通过这样基于Halcon官方例子的修改,我们成功实现了双目相机标定与三维点云生成的程序,为后续的机器视觉和三维重建应用打下基础。希望这段分享能给大家在相关领域的研究和开发带来一些启发。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/1/8 7:18:54

Linly-Talker技术解析:大模型如何驱动数字人口型与表情同步

Linly-Talker技术解析:大模型如何驱动数字人口型与表情同步 在虚拟主播24小时不间断直播、AI客服秒回用户咨询、在线课程由数字老师娓娓道来的今天,我们正悄然步入一个“非人类但拟人”的交互新时代。支撑这一切的,不再是昂贵的动作捕捉设备和…

作者头像 李华
网站建设 2026/1/12 5:40:33

pthread_detach函数的用法

pthread_detach函数的用法pthread_detach() 用来将一个线程设置为“分离态(detached)”,使其在退出时自动回收线程资源,不需要也不能再 pthread_join()。

作者头像 李华
网站建设 2026/1/14 9:33:11

Linly-Talker能否输出ProRes编码母版?专业后期流程支持

Linly-Talker 能否输出 ProRes 编码母版?专业后期流程支持深度解析 在影视制作和高端内容生产中,一个常被忽视但至关重要的问题浮出水面:AI生成的内容,能否真正进入广播级后期流程?比如,像 Linly-Talker 这…

作者头像 李华
网站建设 2026/1/9 21:24:29

25、深入解析DNS:从基础布局到高级管理

深入解析DNS:从基础布局到高级管理 1. DNS区域布局 DNS服务器可以托管单个DNS区域,也可以托管多个DNS区域。确定如何最佳部署区域需要对环境进行分析,以下因素决定了DNS区域的部署方式: - AD DS站点结构 - IT部门的分布 - 安全需求 1.1 AD DS站点结构 在部署跨越多个…

作者头像 李华
网站建设 2026/1/9 21:24:23

31、Windows Server 2008 文件服务配置与分布式文件系统详解(上)

Windows Server 2008 文件服务配置与分布式文件系统详解(上) 一、离线文件配置 在 Windows Server 2008 中,离线文件功能可以让用户在断开网络连接的情况下仍能访问某些文件。以下是配置离线文件的具体步骤: 1. 在 MSN - SRV - 0XX 上,打开控制面板,切换到经典视图,然…

作者头像 李华
网站建设 2026/1/10 12:33:47

35、Windows Server 2008 网络打印机配置与管理指南(上)

Windows Server 2008 网络打印机配置与管理指南(上) 在 Windows Server 2008 网络环境中,打印机的配置和管理是系统管理的重要组成部分。合理地设置打印机资源,能够提高打印效率,满足不同用户的需求。下面将详细介绍打印机配置和管理的相关操作。 1. 创建打印机池 当用…

作者头像 李华