OpenCv相机标定——圆形标定板标定 0.前言 1.标定图案 2.OpenCv标定 3.标定结果分析 0.前言 OpenCv中,相机标定所使用的标定图案分为棋盘格、对称圆形及非对称圆形特征图、ArUco 在OpenCV的官方例程中,采用的是棋盘格图案,因为其操作简单、快速,标定精度满足一般应用场景的需求。对于标定精度要求高的场景,则一般采用圆形标定图案。 本文主要介绍如何使用圆形标定图案(对称和非对称)完成相机的标定,并将OpenCv标定结果与Halcon标定结果进行对比分析。 2.OpenCv标定 本文采用的标定为离线标定,先由相机采集N幅图像,再由标定程序读取图像。为了保证标定精度,建议采集10幅或更多的视图,尽量使得标定板的移动范围覆盖相机视野。 如果使用halcon在线抓图标定,可以有效避免图像品质问题,从而大幅度提高标定精度,预计标定精度和OpenCv标定相当或者更高。
相机标定 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140339.html原文链接:https://javaforall.cn
相机标定是进行视觉测量和定位的基础工作之一,标定参数准确与否直接关系到整个系统的精度,为此根据自己项目中的经验及参考相关的商用视觉软件的做法将相机标定过程中标定图片的获取过程中需要注意的问题总结如下: 标定板拍摄的张数要能覆盖整个测量空间及整个测量视场,把相机图像分成四个象限(如图1所示),应保证拍摄的标定板图像均匀分布在四个象限中,且在每个象限中建议进行不同方向的两次倾斜,图2是一组推荐摆放方式图片 标定图片的数量通常在15~25张之间,图像数量太少,容易导致标定参数不准确。 圆或者圆环特征的像素数尽量大于20,标定板的成像尺寸应大致占整幅画面的1/4 用辅助光源对标定板进行打光,保证标定板的亮度足够且均匀 标定板成像不能过爆,过爆会导致特征轮廓的提取的偏移,从而导致圆心提取不准确 标定板特征成像不能出现明显的离焦距,出现离焦时可通过调整调整标定板的距离、光圈的大小和像距(对于定焦镜头,通常说的调焦就是指调整像距)。 标定过程,相机的光圈、焦距不能发生改变,改变需要重新标定。
分为以下内容: 相机标定的目的和意义 相机成像过程的简化与建模 针孔相机模型的数学描述 标定针孔相机模型的参数 相机标定的目的和意义 我们所处的世界是三维的,而照片是二维的,这样我们可以把相机认为是一个函数 标定板的第二大作用是把标定板中的角点变换到相机坐标系下的坐标 。对于标定的初学者来说,很容易忽略的一点是标定板是具有标定板坐标系的。 换句话说,标定板中的每个角点,在标定板坐标系下的位置是确定并且是已知的。 而标定板坐标系变换到相机坐标系的变换矩阵,我们称它的元素为外参数,所以在我眼中,相机标定的外参根本就是标定内参的副产品,它会随着标定板的摆放不同而不同,由标定板坐标系变换到相机坐标系的变换矩阵可以由下式表达 如果用OpenCV或Matlab标定工具箱进行标定,需要给出棋盘格的物理尺寸,这其实就是在建立标定板坐标系,从测量的角度讲,标定板的精度是相机标定精度的基准,是误差传递链上的第一个环节。
综合考虑调试难度、标定精度等因素,9点法标定是工业上使用广泛的二维手眼标定,常用于从固定平面抓取对象进行装配等工业应用场景。 2 相关坐标系 手眼标定的熟练使用必须理解所涉及到的各个坐标系。 ? 图像坐标系 相机坐标系 标定板坐标系 ? 工具坐标系 机械手基础坐标系 ? 3 标定原理 通常眼在手上,相机拍照与标定的位置时一样的,那么眼在手上和手眼分离的标定过程都是一样的。 3 标定步骤 准备一块标定板。如果条件不足,可以使用白纸画上九个圆进行代替。 ? 相机位置,机械手位置全部固定好,标定针固定在机械手上,固定好后不能够再移动。 标定针的位置一定要与夹手或吸盘之内的工具同一位置高度。 将标定板放到相机下方,位置区域要与机械手工作的区域一样,包括高度必须尽量一致,这是标定准确度的关键。
概述 标定的目的,是求解相机与机械臂基座(或末端)之间固定的变换关系,是视觉引导机器人作业的基石,精准的标定是解决误差的前提。 牢固安装相机与标定板,确保绝对无移动。 可以将机械臂、相机、标定物回归到标定时的初始状态,进行一次快速验证,确认是否有物理位移。 数据采集不当: 运动不充分:机械臂只做了小范围平移,没有充分改变标定板的俯仰、偏航、滚转角度。 错误/不精确的相机内参:手眼标定极度依赖精确的相机内参(焦距、主点、畸变系数)。务必先对相机进行高精度的单目标定,并应用去畸变后再进行手眼标定。 严谨标定: 使用Charuco板。 确保相机已完成单目标定,内参已知。 控制机械臂带动标定板,在相机视野内进行至少20组大幅度的、不同方向的平动和旋转。
一、确定性误差公式 我们将第一节给出的IMU确定性误差直接拿过来,轴偏角公式如下: 尺度因子: 零偏: 二、工具标定 这里我们使用开源的imu_tk进行标定,下载:https bias_vec_; /** @brief Misalignment * scale matrix */ Eigen::Matrix< _T, 3 , 3> ms_mat_; 首先,进行加速度计的标定 raw_samp ); residuals[0] = _T2 ( g_mag_ ) - calib_samp.norm(); return true; } 其次,我们进行陀螺仪的标定 /test_imu_calib data/imu.txt data/imu_temperature.txt 加速度计的标定结果: ? 陀螺仪的标定结果: ? 温漂标定结果: ? 至此,IMU的整个标定已经完成,下一期我们开始单目及双目摄像头的标定。
在项目中,偶尔会遇到由于产品形状、拍摄位置等原因导致标定板很难放置的情况,此时可以考虑使用halcon自标定算法来标定相机。由于自标定可以在不使用用标定板情况下,进行畸变矫正。 自标定处理流程 自标定原理来源于此论文:“Automatic line-based estimation of radial lens distortion”。 ? 使用radial_distortion_self_calibration算子进行自标定, 得到相机内参以及用于标定的直线段 ? 后续步骤 自标定只需要一张图片,即可标定相机内参,后续若需要将像素单位换算至公有制单位,需要使用棋盘格、标准物、菲林片等进行转换,便可应用于测量项目;也可以利用一定网格构建XY坐标系,用于定位项目。 所以,相机标定后的应用,会在后续的测量篇以及手眼标定篇涉及,请持续关注。 ----
使用软件:Halcon18.05(默认安装好任一版halcon) 使用设备:Intel Realsense 435+AUBO机械臂 完成功能:相机标定、eye-in-hand手眼标定 1.准备标定板 MarkDist(单位为米) caltab.descr是标定板描述文件 caltab.ps为标定板生成文件,没有ps用Adobe PDF打开就能看到如下图1-2所示的标定板,可以直接打印。 如果买了标定板直接用标定板的数据就行,但还是需要用这个生成一个标定板的描述文件,也就是caltab.descr 点filename.write可以看到保存路径 图1-2 1.1.2.点插入 ,运行,在刚刚的保存路径下找到生成的caltab.descr 1.2有标定板 按照已有标定板尺寸生成caltab.descr——标定板描述文件,之后操作与1.1.2相同 2.相机标定 助手–打开新的Calibration 在结果中摄像机参数需要记录下来,之后会用到,摄像机位姿需要点击“保存”保存成 .dat 格式的文件 3.手眼标定 标定板不动,移动机械臂,拍摄15+张图片,覆盖多个位姿,并记录每张图片拍摄时机械臂的位姿
标定 由于OpenCV中cvStereoCalibrate总是会得到很夸张的结果(见下文5.1问题描述),所以最后还是决定用Bouguet的Matlab标定工具箱立体标定,再将标定的结果读入OpenCV Calibration迭代过程及结果 可以通过面板上的Show Extrinsic查看一下标定结果,可以验证一下标定外参数的结果 ? 2.10. 外部参数图示 验证标定结果无误之后,就点击面板上的Save按钮,程序会把标定结果放在一个叫Calib_Result.mat中,为了方便后续立体标定,把这个文件名改为Calib_Result_right.mat 左摄像头标定的方法与右摄像头相同,生成的Calib_Result.mat之后,将其改名为Calib_Result_left.mat就可以了 左右摄像头都标定完成之后,就可以开始立体标定了。 具体的方法可以参照Learning OpenCV第11章的例子,上面就是用cvSave保存标定结果,然后再用cvLoad把之前的标定结果读入矩阵的 ?
二、工具标定 这里我们使用开源的imu_utils进行标定,读者可以从github直接git clone。 生成的bmx160.yaml文件在imu_utils/data下,打开yaml文件我们可以看到陀螺仪与加速度计的三轴噪声以及随机游走,至此标定完成。 ? IMU标定系列文章 1. IMU标定(一) Python高性能系列文章 Python高性能计算之列表 Python高性能计算之字典 Python高性能计算之堆 欢迎关注微信公众号:Quant_Times
: u=u_0+\frac{x_c}{d_x},v=v_0+\frac{y_c}{d_y} 化为齐次坐标表示形式可得: 最后回到一整个流程(忽略透镜畸变): 棋盘 棋盘是一块由黑白方块间隔组成的标定板 ,我们用它来作为相机标定的标定物(从真实世界映射到数字图像内的对象)。
手眼标定最简单的方法:九点标定 九点标定的目的: 建立Mark点的图像坐标与其在机械手坐标系下的仿射变换矩阵,利用求得的仿射变换矩阵,可以把Mark点的图像坐标转成物理坐标,进而控制机械手完成定点抓取任务 halcon九点标定算子 %Mark点像素坐标 area_center(SortedRegions,Area,Row,Column) % Column_robot := [275,225,170,280,230,180,295,240,190
相机标定方法分类 相机标定方法有:传统相机标定法、主动视觉相机标定法、相机自标定法。 标定方法 优点 缺点 常用方法 传统相机标定法 可使用于任意的相机模型、 精度高 需要标定物、算法复杂 Tsai两步法、张氏标定法 主动视觉相机标定法 不需要标定物、算法简单、鲁棒性高 成本高、设备昂贵 张氏标定法使用二维方格组成的标定板进行标定,采集标定板不同位姿图片,提取图片中角点像素坐标,通过单应矩阵计算出相机的内外参数初始值,利用非线性最小二乘法估计畸变系数,最后使用极大似然估计法优化参数。 这种标定方法需要配备精准的控制平台,因此成本较高。 分层逐步标定法是先对图像的序列做射影重建,在重建的基础上进行放射标定和欧式标定,通过非线性优化算法求得相机内外参数。 对于标定图像数量,位姿越多,标定结果也会越精确,建议在10到20幅之间。按照上图中的1、2、3进行相机标定操作。
前言 计算机视觉中,相机标定的重要性不言而喻,前面在公众号【视觉IMAX】中写过有多篇文章是关于相机标定的,包括一分钟详解OpenCV之相机标定函数calibrateCamera(),从零开始学习「 张氏相机标定法」,但是,今天还想再次聊一聊相机标定,进一步加深对其基本方法与概念的理解。 一 基本问题 相机内外参数标定步骤主要包括如下: 考虑相机线性模型: ? 解算mij项; 分解内、外参数; 考虑非线性项。 Zhang方法:由张正友提出,OpenCV等广泛使用。 Zhang方法标定步骤: (1)对一个pose,计算单应性矩阵; (2)有三个以上pose,根据各单应矩阵计算线性相机参数; (3)使用非线性优化方法计算非线性参数。
相机标定就是确定这些参数的过程,它能:消除镜头畸变(鱼眼、桶形失真等)获取物体真实尺寸(从像素到实际距离)实现精确的3D重建和姿态估计相机标定原理标定的核心是棋盘格标定板,其规则图案提供了已知的3D空间坐标点 内参矩阵(3x3)畸变系数(k1, k2, p1, p2, k3)重投影误差(评估标定质量)代码解析核心类CameraCalibrator实现标定全流程:# 角点检测(关键步骤)gray = cv2.cvtColor 本文提供的工具简化了标定流程,结合实践技巧,可实现毫米级精度的测量任务。标定后,您将获得更准确的AR导航、三维重建和工业检测结果。源码获取:"""相机标定工具使用说明:1. 打印一个棋盘格标定板(推荐使用8x6的棋盘格,每个方格的尺寸为2.5cm x 2.5cm)2. 将标定板放在不同位置和角度,让程序采集多张图片(建议15-20张)3. 准备一个8x6的棋盘格标定板") print("2. 将棋盘格放在相机前不同位置和角度") print("3. 按空格键保存当前帧,按'q'键完成标定") print("4.
【实例简介】 经典手眼标定算法matlab代码,程序作者为 Christian Wengert 。
Halcon标定助手逐步使用 1 Step: 打开标定助手。 ? 2 Step: 选择标定描述文件 方法一:此步骤可以点击描述文件右侧浏览图片选择halcon自带的描述文件。 ? 本篇选择标注助手30*30的标定描述文件。 ? 3 Step: 切换至标定标定,加载标定图像。 ? 加载图像有两种,一种是加载离线图像文件,另一种是在线图像采集。 需要注意的几点,标定板与采集的图片质量要好,相机采集标定图片需要至少10张,尽可能多覆盖多个方向,视野至少1//3。 本文加载官方自带标定图片后,如下图。 ? 方式二:图像源->图像采集助手。 警告级别选择70即可,移除最后一张“标定点提取失败”状态的图片。 ? 品质没有超过警告级别的70%都为正常的。 5 Step: 标定。 点击“标定”按钮,会自动切换到“结果”选项卡。 至此,标定完成。 ----
Step.1 标定平面到图像平面的单应性(Homography) 刚开始不知道论文中 Homography 不知道是何方神圣,搜索到了最后这番解释: 因为张氏标定是一种基于平面棋盘格的标定,所以想要搞懂张氏标定 首先看一下,图像平面与标定物棋盘格平面的单应性。 因为标定物是平面,所以我们可以把世界坐标系构造在 Z = 0 的平面上。然后进行单应性计算。 那就是 3张不同的标定平面的照片, 我们大多是通过改变摄像机与标定板间的相对位置来获得不同的标定照片。 ( 如果用2张照片进行标定,就要舍去一个内参 r=0 ) 当然这只是张正友标定法不断变换标定板方位的 第一个原因 。 而张正友标定中用于提高标定精度的极大似然算法,我也在研究当中,希望以后可以发一篇博客。 小弟才疏学浅,如有错误,希望大家纠正指导。
“ 经济基础决定上层建筑” 1、什么是标定?需要标定什么?为什么需要标定? 3、标定板 令人欣慰的是, 我们不需要将繁琐的标定步骤细化至程序实现,利用标定板与Halcon自带的标定助手,就可完成以上过程。 通常在标定过程中,将标定板方至测量平面,以标定板为参考坐标系基准,建立世界坐标系,如下图所示。后续的标定过程可以借助halcon标定助手完成。 ? CalPlateDescr:标定板描述文件的文件路径(.descr文件为标定板描述文件)。 CalPlatePSFile:标定板图像文件的文件路径(.ps文件为标定板图形文件,可利用PS类软件打开)。