[分章:技术知识]Halcon单相机标定和畸变矫正程序

[20240109]

一、为什么要进行单相机标定?

广义:畸变矫正和一维和二维测量

畸变矫正

在几何光学和阴极射线管(CRT)显示中。畸变是对直线投影的一种偏移。简单来说直线投影是场景内的一条直线投影到图片上也保持为一条直线。那畸变简单来说就是一条直线投影到图片上不能保持为一条直线了。这是一种光学畸变(optical aberration)。畸变是一种相差,可能由于摄像机镜头导致,会对拍摄的物体的形状产生变化,影响测量。

我自己对畸变矫正的理解就是,当相机进行标定时,虽然标定板也产生了畸变,但是标定板(圆形)的准确数据我们已经告诉了halcon,比如,圆的排列方式、直径、中心距等。通过加载多张标定板图片,halcon可以通过函数求出镜头里发生畸变的标定板与未发生畸变的标定板之间的映射关系,也就是相机本身的内参(拍摄有畸变)和矫正之后无畸变内参之间的映射关系,将这种映射关系作用到拍摄时发生畸变的物体当中,就完成了畸变校正.。

畸变矫正步骤

1)通过标定求出相机内参。

2)通过有畸变的内参求出无畸变的内参。用chage_radial_distortion_cam_par()函数完成。

3)求出有畸变的内参和无畸变的内参之间的映射关系。用

gen_radial_distortion_map()函数

4)将上边的映射关系作用到产生畸变的物体当中,完成畸变校正

一维和二维的测量

图片上的尺寸是像素距离,标定后,可以求出像素距离与物理空间距离的换算关系,从而计算出实际的物理尺寸。

狭义:求解相机的内参和外参以及畸变参数,得到二维平面像素坐标和三维世界坐标的关系,从而进行三维重建。

相机内参:相机的固有属性,在进行畸变校正时需要用到相机的内参。

相机外参:物体在经过透镜成像之后,实际上是经过了旋转和平移,而外参就是告诉我们物体成像后经过了那种旋转和平移,相机的外参包括平移矢量和旋转矩阵。

畸变参数:采用理想针孔模型,由于通过针孔的光线少,摄像机曝光太慢,在实际使用中均采用透镜,可以使图像生成迅速,但代价是引入了畸变。有两种畸变对投影图像影响较大:径向畸变和切向畸变。

相机的畸变和内参是相机本身的固有特性,标定一次即可一直使用。但由于相机本身并非理想的小孔成像模型以及计算误差,采用不同的图片进行标定时得到的结果都有差异。一般重投影误差很小的话,标定结果均可用。

二、标定流程

实现的原理是根据相机的像元尺寸、焦距和标定板的描述文件(.descr)来找到显示的标定板图像上面的标志点,从而确定标定板实际输入的参数(Distance、Diameter等)和这些参数对应的图像像素大小的关系,完成标定。

标定步骤

1)使用gen_caltab算子生成一个标定文件

标定前需要生成一个.descr的描述文件,也就是世界坐标系与像素坐标系的关系,当我们下一次做别的项目时,只需要调用描述文件,即可完成标定过程。

生成标记文件的算子:gen_caltab (7, x方向的标记数;

7, y方向的标记数;

0.0075, 标记点圆心之间的距离,单位:米;

0.5, 标记点直径与标记点圆心之间距离的比值;

‘C:/Users/Administrator/Desktop/caltab.descr’,标定板的描述文件的保 存路径;

‘caltab.ps’,描述标定板的一些信息,打印标定板时会用到)

2)打开标定助手,加载标定文件,设置相机参数(单个像元宽高(问相机厂商或看手册),相机焦距)

3)实时获取各个角度、位置的标定板图片(9-16张左右),并选择其中一种图片设置参考位姿,然后标定。

可以看到相机的参数:

4)保存相机内、外参,下次使用测量助手直接调用内外参文件。

单独说一下如何进行畸变校正,可以接上面的第三步之后:生成标定数据(相机内、外参)代码,从而进行畸变校正

程序

*0、相机内参

CameraParameters := [0.0375147,-270.806,8.30152e-006,8.3e-006,647.48,520.914,1280,960]

*相机位姿,即外参(旋转矩阵+平移矢量)

CameraPose := [-0.0091626,-0.00625214,0.700967,2.46926,358.933,179.443,0]

*1、校正径向畸变,得到新的相机内参

change_radial_distortion_cam_par (‘adaptive’, CameraParameters, 0, CamParamOut)

stop ()

Image Acquisition 02: Code generated by Image Acquisition 02

open_framegrabber (‘GigEVision’, 0, 0, 0, 0, 0, 0, ‘default’, -1, ‘default’, -1, ‘false’, ‘default’, ‘CAMERA_QBY_DM’, 0, -1, AcqHandle)

grab_image_start (AcqHandle, -1)

while (true)

grab_image_async (Image, AcqHandle, -1)

*2、对发生径向畸变的图像生成投影映射,图像的映射数据存在第一个参数中

gen_radial_distortion_map (Map, CameraParameters, CamParamOut, ‘bilinear’)

*3、对图像进行畸变校正

map_image (Image, Map, ImageMapped)

endwhile

close_framegrabber (AcqHandle)

注意:相机标定之后,相机焦距、上下位置不能再动,否则需要重新标定。

  • 24
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
0.4977 | 0.4964 | 0.4996 | | 100000 | 65.3811 | 65.3689 | 65.3465 | 65.3443 | 65.3731 | 65.3628 | 65.3465 | 65.3811 | | 500000 | 1669.9787 | 1669.1342 | 1666.4651 | 1667.Halcon相机标定助手是一款用于Halcon图像处理软件的插件,它可以帮助用户3455 | 1667.8320 | 1668.1511 | 1666.4651|速进行相机标定和图像矫正相机标定是指确定相机内部参数和外部参数1669.9787 | | 1000000 | 6695.4101 | 6699.4251 | 669的过程,包括焦距、主点、畸变等参数,以便正确地将图像坐标转换为4.4454 | 6696.7586 | 6693.4277 | 6695.6934 |世界坐标。标定的结果可以用于图像测量、位姿估计等应用。 Halcon相机 6693.4277| 6699.4251 | 2. 插入排序 随机数: | 数据规模 |标定助手可以通过自动化的方式对相机进行标定,同时还提供了手动标定的选 第一次排序 | 第二次排序 | 第三次排序 | 第四次排序 | 第五次排序 | 平均时间 项。用户只需要提供标定板的图片,标定助手就可以自动识别标定板并计算 | 最好时间 | 最坏时间 | | -------- | ---------- | ---------- | ---------- | ---------- | ---------- | --------- | --------- |出相应的参数。 图像矫正是指通过相机标定得到的参数对图像进行校正,以 --------- | | 100 | 0.0002 | 0.0002 | 0.0002 | 消除由于相机畸变引起的图像失真。Halcon相机标定助手还可以将标定0.0002 | 0.0002 | 0.0002 | 0.0002 | 0结果应用到图像矫正中,从而得到更为准确的图像结果。 总之,Halcon相.0002 | | 1000 | 0.0049 | 0.0049 | 0.004机标定助手是一款功能强大的工具,可以帮助用户快速、准确地完成相机标9 | 0.0049 | 0.0049 | 0.0049 | 0.0049定和图像矫正任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值