我是使用halcon标定助手来标定线阵相机的,对于里面的一些参数来做一个记录说明:


首先下面的两个数组就是标定之后得到的相机内参外参

内参:CameraParameters := [0.0357809  ,  -61.3384  ,  6e-006  ,  6e-006  ,  915.932  ,  182.341  ,  2048  ,  3840  ,  1.41028e-006  ,  5.45462e-005  ,  3.86866e-006]
外参:CameraPose := [-0.0160874,0.0553653,0.255282,28.5899,6.24194,8.48283,0]

内参的11个参数分别是什么意思呢?内参一共十一个参数分别为  [Focus, Kappa, Sx, Sy, Cx, Cy, ImageWidth, ImageHeight, Vx, Vy, Vz]


Focus : 镜头焦距长度

Kappa: 镜头畸变系数,正负分别表示枕形畸变和桶状畸变

Sx: 表示相机单个像元宽度

Sy: 表示相机单个像元高度

Cx: 表示镜头光轴在像平面坐标上的投影横坐标,一般初始化的时候设置为width/2

Cy: 表示镜头光轴在像平面坐标上的投影纵坐标,一般初始化的时候设置为0,因为是一帧是一条线,所以纵坐标为0

ImageWidth: 表示一整副图片像素宽度

ImageHeight: 表示一整幅图片像素高度
Vx : x方向上运动速度,其实就是每拍摄一条线,x方向的走的距离,因为安装有误差,相机和运动方向不可能完全垂直,理论上为0最理想

Vy: y方向上运动速度,其实就是在扫描的时候,多远距离拍摄一条线

Vz: z方向上运动速度,其实就是每拍摄一条线,z方向上走的距离,也是因为安装有误差,理论上为0最理想

外参的六个参数表示由世界坐标系转换成相机坐标系的变换参数,六个参数分别为x,y,z三个轴的旋转角度和x,y,x三个轴的平移量

======================================================================================================

1.在halcon中使用标定助手对线扫相机进行标定,首先设置标定板描述文件路径,和镜头等相关参数


2.加载用于标定的图片,一般20张左右,注意加载的图片必须都找到标定板,显示检测品质出问题如果精度要求不是很高也可以接受。然后选定一张照片设置为参考位姿,设置参考位姿的作用是什么呢?当你标定完成之后,使用相机内参外参进行矫正之后的图片,会将这个图片上的标定板中心点作为远点坐标,并且这张变换后的图片作为相机垂直照射的平面参考。如果加载的图片找不到标定板,可以在最下方的标定板提取参数中改变参数,一般就能找提取到标定板了。最后点击标定按钮,就可以得到标定的参数了。

3.得到的内参,如何进行畸变矫正呢?使用如下代码,注释为蓝色,代码为红色。

你希望映射过后的图片的宽度(一条线)内视野为多少,这里为30mm,然后除以1000换算成m

TmpCtrl_RectificationWidth := 30
TmpCtrl_RectificationWidth := TmpCtrl_RectificationWidth / 1000.0

生成用于矫正的映射图,着重说一下这几个输入参数

CameraParameters:标定得到的相机内参

CameraPose:标定得到的相机位姿外参

2048:待转换图的宽度

3840:待转换图的高度

2048:转换之后的图像希望的宽度

3840:转换之后的图像希望的高度

TmpCtrl_RectificationWidth / 2048:表示希望转换后的图,每个像素代表的长度,单位是m。这里因为宽度视野(一条线覆盖的视野宽度)希望是30mm,而希望转换后的图像宽度为2048,所以这里用TmpCtrl_RectificationWidth / 2048,也就是说你可以自定义转换之后的图像每隔像素代表多少精度,这里的精度就是30mm/2048pix = 0.014mm/pix .注意下面的这个函数就是将图片转换成了z=0,垂直视角的函数,参看halcon函数说明。

gen_image_to_world_plane_map (TmpObj_RectificationMap, CameraParameters, CameraPose, 2048, 3840, 2048, 3840, TmpCtrl_RectificationWidth / 2048, 'bilinear')
最终使用map_image来转换图片,转换之后的图片在理论上横向纵向的坐标缩放比例是相等的,换句话来说一个正方形两个方向上的像素个数是一样的,并且是垂直拍摄的。
map_image (Image, TmpObj_RectificationMap, TmpObj_RectifiedImage)
--------------------- 
版权声明:本文为CSDN博主「d_a_r_k」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/d_a_r_k/article/details/77986015

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐