Halcon 单相机标定+消除径向畸变

本文介绍单相机标定的过程,包括生成标定板描述文件、使用标定助手进行标定,并提供了一个单相机标定及消除径向畸变的实例。通过采集不同角度的图像并进行标定,可以获得相机的内外参数。

单相机标定通常是相机使用的第一步,只有通过标定才能准确的获得相机的内参,以便于进行消除畸变、1D/2D测量等后续操作。

1、生成标定板描述文件
gen_caltab (7, 7, 0.0125, 0.5, 'caltab.descr', 'caltab.ps')

参数含义可以查手册(f1),运行后会在当前目录下生成两个文件: caltab.descr:标定板描述文件用于接下来的标定 caltab.ps:可用于打印标定板

2、标定助手

1)、描述文件选择刚刚生成的 2)、选择全标定,相元的高、宽可以咨询相机的商家询问,焦距可以查看镜头上,一般有标明,这里的参数只是初始参数。 3)、标定栏,选择采集助手,点实时,有两种合格的状态提示(确定是完美品质,品质有问题不耽误使用),失败一般是没有完全覆盖标定板。 4)、点采集20张左右的图片,尽量覆盖整个视场,覆盖所有角度(3d)。 5)、选择一张图片作为基础参考位姿。 6)、可以保存图片,如果标定后续有可能利用标定助手生成的代码进行标定可以用。失败的图片要移除,否则无法标定。 7)、点击标定,可以看到结果栏的内外参结果,可以保存成文件。用的时候可以直接读取进程序使用。 8)、在代码生成栏,可以插入tuple数据,也可以插入标定代码。

3、实例:单相机标定+消除径向畸变
* 标定 + 消除径向畸变
* Calibration 01: Code generated by Calibration 01
CameraParameters := [0.0057932,-11394.5,6.00136e-006,6e-006,330.616,235.876,640,480]
CameraPose := [0.00223981,-0.00965318,0.110595,6.81103,1.68414,177.246,0]

* Image Acquisition 01: Code generated by Image Acquisition 01
change_radial_distortion_cam_par ('adaptive', CameraParameters, 0, CamParamOut)
open_framegrabber ('DirectShow', 1, 1, 0, 0, 0, 0, 'default', 8, 'rgb', -1, 'false', 'default', '[0] LRCP  USB2.0', 0, -1, AcqHandle)
grab_image_start (AcqHandle, -1)
while (true)
    grab_image_async (Image, AcqHandle, -1)
    * Image Acquisition 01: Do something
    gen_radial_distortion_map (Map, CameraParameters, CamParamOut, 'bilinear')
    map_image (Image, Map, ImageMapped)
endwhile
close_framegrabber (AcqHandle)
### Halcon 中相标定方法及消除畸变 #### 相标定概述 相标定是一种技术手段,旨在获取相的内部参数(如焦距、主点位置)和外部参数(如旋转矩阵和平移向量),并校正由于光学成像引起的几何失真。在 Halcon 中,可以通过特定算法实现这一目标[^1]。 #### 消除畸变的过程 畸变通常分为径向畸变和切向畸变两种形式。Halocn 提供了多种工具来处理这些问题。通过标定过程,可以获得描述畸变特性的模型参数,并将其应用于后续图像处理中以修正畸变效果[^2]。 #### 单张图像自标定法 对于某些应用场景,可能仅能获得一张包含足够特征信息的图像来进行标定工作。在这种情况下,Halcon 的 `radial_distortion_self_calibration` 算子显得尤为重要。该算子能够基于输入图像中的直线结构自动估计相内参以及相应的畸变系数。 以下是具体操作说明: - **数据准备** 需要提供一幅高质量的图像作为输入源,在这幅图里应尽可能多地展现不同方向上的清晰线条轮廓。特别是靠近边界区域的部分更应该具备明显的线段特征以便于检测出显著变化趋势。 - **调用函数** 使用如下所示的核心代码片段执行整个流程: ```python from pyhalcon import * # 假设已加载好原始图片至Image变量中... image_contours = get_image_contours(Image) selected_contours = select_straight_lines(image_contours) camera_parameters = [] width, height = Image.Width(), Image.Height() result = radial_distortion_self_calibration(selected_contours, width, height, 0.5, 42, 'division_model', True, camera_parameters) if result == H_SUCCESS: print("成功完成自标定.") else: raise Exception("自标定失败!") ``` 上述脚本首先提取给定场景内的所有潜在候选边沿;接着筛选其中符合预定义标准的真实直线集合;最后传入必要维度数值及其他控制选项启动正式运算环节。 #### 结果应用实例 一旦获得了精确调整过的摄像装置属性设定值列表,则可进一步部署它们纠正新采集来的素材文件里的任何偏差状况。例如下面展示了一个简单的去扭曲程序样例: ```python undistorted_image = undistort_image_with_cam_par(original_image, calibrated_camera_params) save_image(undistorted_image,"output/UndistortedSample.png") ``` 以上命令序列读取先前保存下来的优化版配置资料重新构建无变形版本的目标图形对象,并最终存储回磁盘介质上形成可供验证成果的实际文档副本。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

文竹、文竹

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值