0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

halcon单相机标定和畸变矫正程序

机器人及PLC自动化应用 来源:机器人及PLC自动化应用 2023-07-03 10:12 次阅读

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

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

畸变矫正:

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

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

步骤:

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

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

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

gen_radial_distortion_map()函数

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

一维和二维的测量

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

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

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

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

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

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

二、标定流程

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

a1aa40d4-18e6-11ee-962d-dac502259ad0.png

标定步骤:

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

a1bfd750-18e6-11ee-962d-dac502259ad0.png

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

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

7, y方向的标记数;

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

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

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

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

a1f4ebca-18e6-11ee-962d-dac502259ad0.png

a22f2d8a-18e6-11ee-962d-dac502259ad0.png

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

a25689ac-18e6-11ee-962d-dac502259ad0.png3)实时获取各个角度、位置的标定板图片(9-16张左右),并选择其中一种图片设置参考位姿,然后标定。

a266996e-18e6-11ee-962d-dac502259ad0.png
可以看到相机的参数:

a2753258-18e6-11ee-962d-dac502259ad0.png4)保存相机内、外参,下次使用测量助手直接调用内外参文件。

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

a2a8e8b4-18e6-11ee-962d-dac502259ad0.png

*相机内参

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)

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

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 图像
    +关注

    关注

    2

    文章

    1063

    浏览量

    40042
  • 相机
    +关注

    关注

    4

    文章

    1254

    浏览量

    52464
  • crt
    crt
    +关注

    关注

    2

    文章

    80

    浏览量

    35677
  • 程序
    +关注

    关注

    114

    文章

    3631

    浏览量

    79552

原文标题:halcon单相机标定和畸变矫正程序

文章出处:【微信号:gh_a8b121171b08,微信公众号:机器人及PLC自动化应用】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    [求助] 关于NI 视觉助手的标定训练栅格图像的选取以及畸变模式

    最近在学习NI 视觉助手的标定训练,想请教一下:在标定时我们输入的一般是一个标定板1,如果图像有较大的畸变失真(这里有个问题1:这个失真是指我要检测的图像存在失真还是指拍摄的
    发表于 06-13 11:14

    labview相机标定

    最近在做视觉,需要用labview做相机标定,通过空间转换确定空间位置。视觉助手的标定只能标定内参数,没有办法做内外参数的标定,哪位大神给
    发表于 04-24 16:08

    标定旋转中心点

    Halcon旋转标定固定相机,从下往上拍照,计算产品到标准位置的偏差,如果产品有角度偏差,那就要额外减去旋转产生的X、Y偏移,都说取点拟合圆,圆心就是旋转中心点,可是我拟合出来的圆心转换成机器人
    发表于 11-09 15:36

    相机标定介绍

    什么是摄相机标定?摄相机标定方法的分类?感兴趣的小伙伴们可以瞧一瞧。
    发表于 09-22 12:04 0次下载

    opencv单目相机标定例程

    OpenCV sample目录下自带两个与相机标定的cpp文件即:calibration.cpp和calibration_artificial.cppcalibration.cpp 是通过用户输入
    发表于 12-04 17:23 3457次阅读
    opencv单目<b class='flag-5'>相机</b><b class='flag-5'>标定</b>例程

    遗传算法的单目相机标定

    针对张正友标定方法中相机内参数的求解可能陷入局部最优解的问题,考虑镜头的三阶径向畸变和二阶离心畸变,提出一种基于改进遗传算法的单目相机内参数
    发表于 01-05 16:11 1次下载

    HALCON的3D相机标定

    转自:微信公众号AI图像 创建标定数据模型 你可以用算子create_calib_data创建一个标定数据模型,指定相机标定物体的数量。当用一个
    的头像 发表于 10-31 11:31 3510次阅读
    <b class='flag-5'>HALCON</b>的3D<b class='flag-5'>相机</b><b class='flag-5'>标定</b>

    剖析Halcon 9点标定旋转中心标定与使用

    本文是本人的经验总结,不代表标准理论,有错误请指正; 主要讲解上下双相机定位贴合的原理和实现过程,包括各种标定、组合使用及具体的halcon源码实现,适用于的X、Y、Z三轴加一旋转轴系统,如模组
    的头像 发表于 05-08 10:05 3.5w次阅读
    剖析<b class='flag-5'>Halcon</b> 9点<b class='flag-5'>标定</b>旋转中心<b class='flag-5'>标定</b>与使用

    基于除法畸变模型的镜头线性标定方法

    针对鱼眼镜头的高精度标定需求,提岀一种基于除法畸变模型的线性标定方法。通过除法模型将题转换为线性方程组求解问题相机畸变中心后对
    发表于 05-19 11:39 7次下载

    为什么要进行单相机标定

    为什么要进行单相机标定? 广义:畸变矫正和一维和二维测量 畸变矫正: 在几何光学和阴极射线管(C
    的头像 发表于 09-02 09:45 3135次阅读

    基于圆形标定点的相机几何参数的标定

    相机标定可以归纳为P−n−P(Perspective-n-Point)的问题,即已知三维物点坐标和对应的二维投影坐标,求解相机参数。由于镜头的畸变(径向和切向)带来非线性成像模型,一般
    的头像 发表于 12-21 09:52 907次阅读

    一种基于相位靶标的摄像机标定迭代畸变补偿算法

    相机畸变是影响相机标定精度的关键因素。由于畸变补偿不准确,传统的标定方法不能满足要求较高
    的头像 发表于 01-05 10:18 831次阅读

    如何学习相机模型与标定

    相机标定是通过输入带有标定patter的标定板来获得相机参数的一个过程。实际的光学成像是一套非常复杂的过程,从三维世界投影到
    的头像 发表于 06-01 14:36 466次阅读
    如何学习<b class='flag-5'>相机</b>模型与<b class='flag-5'>标定</b>?

    常用视觉的三种相机标定总结

    选中Export Camera Parameters按钮,将计算得到的相关参数导入到Matlab中;若要进行更精确的标定,可在标定时考虑畸变误差或采用双目相机
    发表于 10-09 10:51 723次阅读
    常用视觉的三种<b class='flag-5'>相机</b><b class='flag-5'>标定</b>总结

    关于鱼眼相机标定畸变矫正的分享

    在目标追踪任务中,通常的球机或者枪机方案,无法避免人群遮挡的问题,从而导致较高的ID Swich,造成追踪不稳定。
    的头像 发表于 10-18 14:24 1621次阅读
    关于鱼眼<b class='flag-5'>相机</b><b class='flag-5'>标定</b>的<b class='flag-5'>畸变</b>与<b class='flag-5'>矫正</b>的分享