halcon相机标定助手_halcon相机标定和图像矫正

本文详细介绍了Halcon相机标定的过程,包括标定助手的使用、相机参数设置、标定板生成和标定图像加载。还讨论了相机的径向畸变和切向畸变,并提供了标定程序的示例代码。最后,文章讲解了如何在Halcon中进行图像矫正,包括使用内外参和仅使用内参的方法。
摘要由CSDN通过智能技术生成

对于相机采集的图片,会由于相机本身和透镜的影响产生形变,通常需要对相机进行标定,获取相机的内参或内外参,然后矫正其畸变。相机畸变主要分为径向畸变和切向畸变,其中径向畸变是由透镜造成的,切向畸变是由成像仪与相机透镜的不平行造成的。

针孔模型是理想透镜的成像模型,但是实际中相机的透镜不可能是理想的模型,透镜形状的非理想特征造成像点会沿径向发生畸变。一个像点沿径向内缩叫负畸变,或桶形畸变沿径向外延叫正畸变,或枕形畸变。这种崎变相对于光轴严格对称的,也是畸变的主要分量。

图1径向畸变                                                               图2切向畸变

其中,(X,Y,Z)为世界坐标系中的实际点坐标,(u,v)为图像坐标系统的像素坐标,A为相机内参,f像素单元的焦距,c图像像素中心点。

(1-2)

1.1halcon相机标定

1.1.1标定助手及相机参数设置

打开halcon标定助手,加载标定板文件,选择相机类型,设置相机参数,然后加载相机采集的标定图像,如下图所示,图像中全部标定点能够检测出,即采集的相机已经设置好,然后生成代码。

图4 halcon标定助手

标定板生成:

标定板文件的生成分为.descr和.cpd的文件,不同格式文件需使用不同函数进行生成。如,

*生成的是27*31,标定点直径0.0075mm的.cpd标定板(精度高标定板)

create_caltab (27, 31, 0.0075, [13, 6, 6, 20, 20], [15, 6, 24, 6, 24], 'light_on_dark', 'D:/calplate.cpd', 'caltab.ps')

*生成的是7*7,标定点之间距离0.1m,直径0.5的.descr标定板

gen_caltab( 7, 7, 0.1, 0.5, 'D:/caltab.descr', 'caltab.ps')

加载标定图像:

图5加载标定图像

如图5所示࿰

### 使用Halcon进行距离测量 在图像处理软件Halcon中,`measure_pos` 函数用于检测并定位边缘位置。此函数通过分析指定区域内灰度变化来识别物体边界,并返回这些边界的坐标信息[^2]。 对于具体实现距离测量的任务来说: - 需要先定义一个 `MeasureHandle` 对象作为测量工具; - 调用 `gen_rectangle2` 或者其他创建几何形状的命令构建感兴趣区 (ROI),即设定好待测目标所在的大致范围; - 接着利用 `set_measure_param` 设置合适的参数如高斯平滑系数 (`Sigma`) 阈值 (`Threshold`) 来优化边缘提取效果; - 执行 `measure_pos` 获取一系列符合条件的边缘点的位置数据; - 计算任意两点间的欧几里得距离即可得到它们之间的真实间距; 下面给出一段简单的Python代码片段展示上述过程: ```python from pyhalcon import * # 初始化HALCON环境变量 hdev_window_open(0, 0, 512, 512) # 加载测试图像 image = read_image('example.bmp') # 创建测量句柄 measure_handle = create_measures(image.Width, image.Height, 'rectangle', [-1,-1], [1,1]) # 定义矩形区域 row_begin, col_begin, phi, length1, length2 = 200, 200, math.radians(-45), 80, 30 gen_rectangle2(row_begin, col_begin, phi, length1, length2, rect) # 应用 measure_pos 寻找边缘 sigma, threshold, transition, select = 1.0, 20, 'all', 'true' rows_edge, cols_edge, amplitudes, distances = measure_pos(image, sigma, threshold, transition, select) # 绘制结果 disp_message(window_id, "Detected Edges", 'window', row_begin+length1/2, col_begin-length2/2, 'black') for i in range(len(rows_edge)): disp_cross_contour_xld(window_id, rows_edge[i], cols_edge[i]) close_all_windows() ``` 这段程序展示了如何设置测量参数以及调用 `measure_pos` 进行边缘检测的过程。需要注意的是,在实际操作过程中可能还需要进一步调整各个参数以适应不同应用场景下的需求[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值