python halcon的图像物体边缘矩形拟合_HALCON高级篇:3D相机标定(1/3)

本文介绍了使用Python和HALCON进行3D相机标定的过程,包括创建标定数据模型、设定相机内部参数初始值、描述标定物体等步骤。建议使用划分模型进行标定,但在需要更高精度时可选用多项式模型。HALCON的六角形排列标定板被推荐使用,因为它能在较少图像中覆盖整个视野,提高标定效率。
摘要由CSDN通过智能技术生成

创建标定数据模型

你可以用算子create_calib_data创建一个标定数据模型,指定相机和标定物体的数量。当用一个相机的时候,你也用一个单独的标定物体。

然后,你要做的是:

6968af20bc9b42685779f63b7edd3e40.png
  • 指定相机内部参数的初始值
  • 描述标定物体

指定相机内参的初始值

你可以用算子set_calib_data_cam_param来设置相机内部参数。

除了标定数据模型,算子也需要下面的参数作为输入:

55ad99bf93cc4d59d1d67819283d595d.png
  • CameraIdx:相机的索引(0代表单个相机)
  • CameraType: 相机的类型
  • CameraParam: 相机内参初始值的一个元组

那种畸变模型去使用

对于面阵相机,两种畸变模型可供使用:划分模型和多项式模型。划分模型用一个参数来构造径向畸变,多项式模型用5个参数来构造径向和离心畸变。

划分模型的优势是畸变可以被快速的应用,尤其是对于反向畸变,例如如果世界坐标被映射到图像平面。还有,如果只有几张标定图像被使用或者视野覆盖不足,划分模型则会比多项式模型得到更稳定的结果。多项式模型的主要优势是它可以更精确的构造畸变,因为其用了更高阶的项去构造径向畸变,并且它也构造了离心畸变。需要注意的是,多项式模型不能够反推。因此,反向畸变必须被迭代计算看,其要比划分模型反向畸变的计算要慢。

一般的,划分模型应该被用来标定。如果标定的精度不高,可以用多项式模型。但是需要注意的是,被用于多项式模型的标定序列必须提供一个完整的区域覆盖,这个区域在后边用于测量。畸变可能会在没有被标定板覆盖的区域外边被不准确的构造出来。这种情况发生在图像边缘,也发生在标定板没有覆盖到的视野区域内部。

描述标定物体

用算子set_calib_data_calib_object,你可以指定标定物体所需的信息。

如果你用的是HALCON的标定板,对应的描述文件名字就足够了。

420b6cdf382ad50720e12e8a81c929eb.png

如何获得一个合适的标定板

确定给CCD相机的相机参数最简单的方法就是利用HALCON的标定板(如图1所示)。在这种情况下,找标定把的整个过程,提取标定标志点,以及决定提取标定标志点和各自3D世界坐标之间的对应关系都可以自动的被执行。更重要的是,标定板更加精确,1um或更小,对于高精度的应用其是前提条件。

两种类型的HALCON标定板是被支持的。尤其是,六角形排列的标志点和矩形排列的标志点的标定板是可行的。具有六角形排列的标定板是在HALCON12中引进的,在大多数应用中被推荐使用,因为相比于矩形排列标志点的标定板,其提供了如下的优点:

l 具有矩形排列标志点的标定板应该充满图像视野的四分之一。为了覆盖包括不同倾斜的整个视野,许多图像(至少10到20)是需要。因为六角形排列的标定板包含了众多数目的标志点,因此用单个图像就能够覆盖整个图像面积,更少的图像(6到7张)被需要去得到可比较的标定 结果。

l 矩形排列标志点的标定板必须在图像全部可见的,然而六角形排列的标定板可以伸出图像的边缘。进而,当放置标定板的时候,后者就不需要太多的在意。标定板图像的获取就变的更快和方便,而没有稳定性的损失。

一个六边形排列的标定板在单张图像上应该充满整个图像区域。一个矩形排列的标定板应该至少覆盖图像区域的9分之一。为了提高标定的质量,我们推荐一个标定板至少覆盖图像区域的四分之一。

ef9f873351076dcc744c432f804561dc.png

图1:不同材质和尺寸的HALCON标定板:(a)六角排列的标志点(b)矩形排列的标志点

使用你自己的标定物体

利用HALCON,你不受限于使用一个平面标定板,例如HALCON标定板。你可以使用一个3D标定板或者甚至任意特征点(自然的标志)。仅有要求就是模型点的3D世界位置是已知的,并且具有很高的精度。

然后,你就简单将标定物体的所有点(标志点)的3D坐标作为一个元组传到算子set_calib_data_calib_object中的CalibObjeDescr。所有点的x, y, z坐标必须以【x, y, z】元组的顺序进行打包。

然而,需要主要的是,如果你用自己的标定物,你就不能再用find_calib_object。相反,你必须自己来确定模型点的2D位置和对3D点的对应关系。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值