[Halcon标定]相机自标定

[Halcon标定]相机⾃标定
⼀、⾃标定含义和意义
摄像机⾃标定⽅法不需要标定块,只是通过摄像机在运动过程中建⽴多幅图像之间对应的关系,直接进⾏标定,它克服了传统标定⽅法的缺点,灵活性较强,它的缺点是标定过程复杂,使⽤⾮线性⽅法标定,鲁棒性差,精度也不⾼。现在已有的⾃标定技术⼤致可以分为:基于Kruppa ⽅程的⾃标定⽅法、基于⼆次曲⾯的⾃标定⽅法、分层逐步标定法等。
在项⽬中,偶尔会遇到由于产品形状、拍摄位置等原因导致标定板很难放置的情况,此时可以考虑使⽤halcon⾃标定算法来标定相机。
halcon提供了⼀种⾃标定的算⼦,它可以在不⽤标定板的情况下,只需要⼀张图⽚,根据提取到是物体边缘的直线,来得到相机的内参,标定出相机内参(⽆焦距),从⽽完成畸变校正,因为畸变⼀般在图像的边缘更严重,所以需要保证在图像的四周边缘有⾜够的直线线段。在实际项⽬中拍摄物体不可能都像例程中⼀样有理想的直线边缘,替代⽅法是:⽤菲林⽚制作⼀张⽹格⿊⾊印制(10*10,可以根据⾃⼰实际情况调整)充满整个视野。
求出了相机内参就可以进⾏畸变校正,因⽽⾃标定相对于采集多张标定板图像进⾏标定⽽⾔,在畸变校正⽅⾯更快捷,极⼤地⽅便在设备现场进⾏调试,但是相对于标定板标定⽽⾔,⽆法求出相机的外参。
后续若需要将像素单位换算⾄公有制单位,也可使⽤棋盘格、标准物、菲林⽚等进⾏转换,便可应⽤于测量项⽬;也可以利⽤⼀定⽹格构建XY坐标系,⽤于定位项⽬,这样在不借助标定板的情况下就可以畸变校正和测量类的项⽬。
⼆、⾃标定流程:
1.求出拍摄物体的边缘XLD节能燃烧器
2.使⽤radial_distortion_self_calibration函数,根据边缘求出相机内参
3.change_radial_distortion_cam_par 求出理想⽆畸变内参
4.change_radial_distortion_image 根据相机内参,对图像进⾏畸变校正稀土镁合金
代码:
*使⽤edges_sub_pix或line_gauss提取图像边缘轮廓
edges_sub_pix(Image,Edges,'canny',1,10,40)
*分割直线和圆弧
segment_contours_xld(Edges,SplitEdges,'lines_circles',5,4,2)
*选择对校准有⽤的⾜够长的边
adsl分离器
select_shape_xld(SplitEdges,SelectedEdges,'contlength','and',30,100000)
*根据⼀组XLD轮廓估计镜头的畸变参数和畸变中⼼,以此达到校准径向畸变的⽬的
radial_distortion_self_calibration(SelectedEdges,CalibrationEdges,Width,Height,0.08,42,'division','variable',0,CamParSingleImage)
*根据radial_distortion_self_calibration的结果,您可以通过将包含畸变参数的参数CameraParam传递给操作符change_radial_distortion_cam_par和change_r adial_distortion_image来对图像进⾏校正,即去除径向畸变
get_domain(Image,Domain)
change_radial_distortion_cam_par('fixed',CamParSingleImage,0,CamParSingleImageRect)
change_radial_distortion_image(Image,Domain,ImageRectified,CamParSingleImage,CamParSingleImageRect)
write_cam_par(CamParSingleImage,'C:/Users/Administrator/Desktop/CamParSingleImage.dat')
write_cam_par(CamParSingleImageRect,'C:/Users/Administrator/Desktop/CamParSingleImageRect.dat')
read_cam_par('C:/Users/Administrator/Desktop/CamParSingleImage.dat',CamParSingleImage)
read_cam_par('C:/Users/Administrator/Desktop/CamParSingleImageRect.dat',CamParSingleImageRect)
三、核⼼函数:
核⼼算⼦⼀:radial_distortion_self_calibration( Contours : SelectedContours : Width, Height, InlierThreshold, RandSeed, DistortionModel, DistortionCenter, PrincipalPointVar : CameraParam ) —— 根据⼀组XLD轮廓估计镜头的畸变参数和畸变中⼼,以此达到校准径向畸变的⽬的
对畸变的评估是基于图像中可见⼤量直线的假设。由于透镜畸变,这些线将被投影成曲线轮廓。操作者现在可以确定适当的参数,通过这些参数,曲线轮廓可以被再次拉直,从⽽补偿透镜的畸变。
要获得合适的输⼊轮廓,可以使⽤edges_sub_pix或lines_gauss。轮廓应该是均匀分布的,并且应该位于图像边界附近,因为那⾥的失真程度是最⼤的,因此校准是最稳定的。为了提⾼速度和健壮性,您可以尝试获得长线性或圆形段,例如使⽤segment_contours_xld、union_collinear_contours_xld、union_cocircular_contours_xld或select_shape_xld。如果⼀个单独的图像在场景中没有包含⾜够的直线轮廓,你可以使⽤多个图像的轮廓。
操作员使⽤鲁棒RANSAC⽅法⾃动从场景中直线图像的轮廓中估计出这些轮廓。不满⾜这个条件,因此不适合校准过程的轮廓称为离值。操作符可以处理最⼤的异常值百分⽐为50%。经过畸变校正后,如果轮廓与相关直线的平均偏差⼤于给定的阈值T,则将轮廓归为离值。
InlierThreshold值描述包含100个点的轮廓从其关联线的平均偏差,以像素为单位。实际阈值T由InlierThreshold根据参考长度(100)和轮廓点个数m进⾏缩放得到,因此相似的轮廓分类相似。典型的InlierThreshold值在0.05到0.5之间。值越⾼,越能容忍偏差。
通过参数RandSeed,你可以控制随机⾏为的RANSAC算法,并迫使它返回可重复的结果。该参数作为初始值传递给内部使⽤的随机数⽣成器。如果将其设置为正值,操作符将为每个调⽤返回相同的结果,并具有相同的参数值。
参数列表:
Contours (in):可⽤于校准的等⾼线(图像中提取到轮廓线)
SelectedContours (out):⽤于校准的等⾼线(在图像中提取到轮廓线中筛选出符合条件的轮廓线)
Width(in):提取轮廓的图像的宽度
Height(in):提取轮廓的图像的⾼度
InlierThreshold(in):异常值分类的阈值:
氢氧焊接机RandSeed(in):随机种⼦
DistortionModel(in):畸变模式
DistortionCenter(in):决定使⽤何种⽅式估计失真中⼼。有 ‘variable’(默认,适⽤于图像边缘轮廓线很多或者失真应该很⾼。否则,在寻畸变中⼼时可能会出现不适定性,从⽽导致不稳定性。)‘adaptive’(如果可以假定畸变中⼼位于图像中⼼附近,并且只有很少的等值线可⽤或其他等值线的位置不好(例如等值线⽅向相同),则应使⽤这种⽅法), ‘fixed’(该⽅法适⽤于失真很弱或轮廓线少的情况下,在不好的位置。)
PrincipalPointVar (in):偏差控制,控制畸变中⼼与图像中⼼的偏差
CameraParam (out):输出相机内部参数
核⼼算⼦⼆:change_radial_distortion_cam_par( : : Mode, CamParamIn, DistortionCoeffs : CamParamOut) —— 根据指定的径向畸变确定新的相机参数。
参数列表:
笛膜胶Mode (in):模式 ( 注: ‘fixed’ 要⽐ ‘adaptive’ 稳定)监控备用电源
CamParamIn (in):相机内部参数(原图)
DistortionCoeffs(in):所需的径向扭曲
CamParamOut(out):相机内部参数(已修改)
核⼼算⼦三:change_radial_distortion_image(Image, Region : ImageRectified : CamParamIn, CamParamOut : ) —— 改变图像的径向畸变。
change_radial_distortion_image根据摄像机内部参数CamParamIn和CamParamOut对输⼊图像图像的径向畸变进⾏改变。使⽤CamParamOut将位于区域区域内的输出图像的每个像素转换为图像平⾯,然后使⽤CamParamIn将其投影为图像的亚像素。通过双线性插值确定得到的灰度值。如果该亚像素在图像之外,则将图像重建中的对应像素设置为“⿊⾊”并从图像域中消除。
参数列表:
Image (in):原始图像
Region (in):成像重建感兴趣的区域。
ImageRectified(out):畸变校正之后的图像
CamParamIn(in):内部相机参数。
CamParamOut(in):内部相机参数(已修改)。
戳戳⼩⼿帮忙点个免费的赞和关注吧,嘿嘿。

本文发布于:2024-09-25 04:33:51,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/161193.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:图像   畸变   标定   轮廓   参数   直线
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议