Halcon自标定算子radial

您所在的位置:网站首页 halcon函数calibratecameras Halcon自标定算子radial

Halcon自标定算子radial

#Halcon自标定算子radial| 来源: 网络整理| 查看: 265

1、问题描述

HALCON error #3661: No stable solution found: please change the inlier threshold or select contours manually

先来看源码:

*校正径向畸变 *halcon提供了一种自标定的算子,它可以在不用标定板的情况下,标定出相机内参(无焦距),相对于多幅标定无法获取相机的外参。 *求出了相机内参就可以进行畸变校正,因而自标定相对于多幅标定,在畸变校正方面更快捷,这样设备在现场更容易操作、维护。 *参考官方例程 *radial_distortion.hdev *radial_distortion_self_calibration.hdev *名字:径向畸变自标定 *描述:此算子通过XLD轮廓数据来估算镜头的畸变参数和畸变中心。其获得的即便参数通过相机内参数CameraParam返回。 *此算子不能矫正焦距和比例因子,因此不能用于3D测量中。 *若相机模型为area(division),则相机参数为7个,若area(多项式),则相机参数12个。 *InlierThreshold值在0.01到0.5之间。值越小,精度越高,但是运算耗时长;值越大,越能容忍偏差。默认值0.05。 radial_distortion_self_calibration(lines, SelectedLines, Width, Height, 0.5, 42, 'division', 'variable', 0, CameraParam) *读写参数 write_cam_par (CameraParam, 'D:/CameraParam.dat') write_cam_par (CamParamOut, 'D:/CamParamOut.dat') read_cam_par ('D:/CameraParam.dat', CameraParam1) read_cam_par ('D:/CamParamOut.dat', CamParamOut1) *名字:校正畸变参数 *描述:根据指定的径向畸变系数,求取理想无畸变的相机内参。 change_radial_distortion_cam_par('fixed', CameraParam, 0, CamParamOut) *名字:校正畸变图像方法1 *描述:根据指定图像和指定相加参数来矫正输入图像的畸变。 get_domain(Imagecalib, Domain) change_radial_distortion_image(Imagecalib, Domain, Image_rectified1, CameraParam, CamParamOut) *校正畸变图像方法2,效果与方法1完全相同 gen_radial_distortion_map(Map, CameraParam, CamParamOut, 'bilinear') map_image(Imagecalib, Map, ImageMapped)

执行到radial_distortion_self_calibration函数的时候,报这个错误 No stable solution found: please change the inlier threshold or select contours manually (HALCON错误代码: 3661) 。

请问是怎么回事啊?

2、解决方法

把算子radial_distortion_self_calibration的DistortionCenter参数设置为'fixed'或者'adaptive'即可

如果改成了'fixed'或者'adaptive'仍然报错,那么:

(1)把InlierThreshold的数值需要适当增大

(2)棋盘格的行与列数目需要适当增大

3、什么是自标定

halcon提供了一种自标定的算子,它可以在不用标定板的情况下,标定出相机内参(无焦距),相对于多幅标定无法获取相机的外参。因为畸变一般在图像的边缘更严重,所以需要保证在图像的四周边缘有足够的直线线段。在实际项目中拍摄物体不可能都像例程中一样有理想的直线边缘,替代方法是:用菲林片制作一张网格黑色印制(10*10,可以根据自己实际情况调整)充满整个视野。求出了相机内参就可以进行畸变校正,因而自标定相对于多幅标定,在畸变校正方面更快捷,这样设备在现场更容易操作、维护。在畸变校正以后我们同样可以放置一个参考物求取像素当量,构建XY世界坐标系,以用于测量、定位等应用。后续若需要将像素单位换算至公有制单位,也可使用棋盘格、标准物、菲林片等进行转换,便可应用于测量项目;也可以利用一定网格构建XY坐标系,用于定位项目,这样在不借助标定板的情况下就可以畸变校正和测量类的项目。

4、自标定相关算子

radial_distortion_self_calibration(Contours : SelectedContours : Width, Height, InlierThreshold, RandSeed, DistortionModel, DistortionCenter, PrincipalPointVar : CameraParam)

名字:径向畸变自标定

描述:此算子通过XLD轮廓数据来估算镜头的畸变参数和畸变中心。其获得的即便参数通过相机内参数CameraParam返回。此算子不能矫正焦距和比例因子,因此不能用于3D测量中。

参数:

Contours :输入用来矫正的轮廓数据

SelectedContours :矫正后的轮廓数据

Width:获取轮廓数据的图像宽度

Height:获取轮廓数据的图像高度

InlierThreshold:分类阈值

RandSeed:随机种子

DistortionModel:畸变模式

DistortionCenter:畸变中心的估算模式,决定使用何种方式估计失真中心。有 ‘variable’(默认,适用于图像边缘轮廓线很多或者失真应该很高。否则,在寻找畸变中心时可能会出现不适定性,从而导致不稳定性。)‘adaptive’(如果可以假定畸变中心位于图像中心附近,并且只有很少的等值线可用或其他等值线的位置不好(例如等值线方向相同),则应使用这种方法), ‘fixed’(该方法适用于失真很弱或轮廓线少的情况下,在不好的位置。)

PrincipalPointVar :偏差控制,控制畸变中心与图像中心的偏差

CameraParam:输出相机内参数

change_radial_distortion_cam_par( : : Mode, CamParamIn, DistortionCoeffs : CamParamOut)

名字:矫正畸变参数

描述:根据指定的径向畸变系数,求取理想无畸变的相机内参。

参数:

Mode:畸变模式

CamParamIn:畸变的相机内部参数

DistortionCoeffs :畸变系数值

CamParamOut:已校正的相机内参

change_radial_distortion_image(Image, Region : ImageRectified : CamParamIn, CamParamOut : )

名字:矫正畸变图像

描述:根据指定图像和指定相加参数来矫正输入图像的畸变。change_radial_distortion_image根据摄像机内部参数CamParamIn和CamParamOut对输入图像图像的径向畸变进行改变。使用CamParamOut将位于区域区域内的输出图像的每个像素转换为图像平面,然后使用CamParamIn将其投影为图像的亚像素。通过双线性插值确定得到的灰度值。如果该亚像素在图像之外,则将图像重建中的对应像素设置为“黑色”并从图像域中消除。

参数:

Image:输入图像

Region :矫正图像的区域

ImageRectified :矫正图像

CamParamIn:输入相机参数

CamParamOut :输出相机参数

---

参考文献

[halcon] 相机自标定_Loewen丶的小窝-CSDN博客_相机自标定



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3