(单/双目)图像标定全流程(C++/Opencv实现)---原理篇

最近在做图像标定工作,现对标定相关工作做个总结,以便后续查看。
相关代码参考:
想要学习目标标定,首先要了解,相机模型中的四个平面坐标系,以及他们之间的转化关系。
理论如下:
(1)图像像素坐标系(u, v)
以像素为单位,是以图像的左上方为原点的图像坐标系;
(2)图像物理坐标系(也叫像平面坐标系)(x, y)
以mm为单位,用物理单位表示图像像素位置,定义坐标系O-XY,原点O定义在相机与图像平面交点;
(3)相机坐标系(摄影机坐标系) (Xc, Yc, Zc)
以mm为单位,以相机的光心作为原点,Zc轴与光轴重合,并垂直于成像平面,且取摄影方向为正方向,Xc、Yc轴与图像物理坐标系的x, y轴平行,且OcO为摄像机的焦距f;
(4)世界坐标系 (Xw, Yw, Zw)
根据具体情况而定,该坐标系描述环境中任何物体的位置,满足右手法则;

坐标转化

u = x d x + u 0 v = y d y + v 0 u = \frac{x} {{dx}} + {u_0}{\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} {\kern 1pt} v = \frac{y} {{dy}} + {v_0}
latex加矩阵的公式实在过于繁琐,遂直接截图了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
其中,内参矩阵
在这里插入图片描述
外参矩阵
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
摄像机坐标与世界坐标系之间的转换(刚体变换和平移)。
在这里插入图片描述
R为分别绕XYZ轴旋转的效果总和
在这里插入图片描述
在这里插入图片描述
其由三个方向的 控制,故有三个自由度。T是指两个坐标系原点的XYZ坐标分量,即平移向量

单目标定:

基本思路:求得每个标定板对应的单应矩阵,再联合优化所有标定板数据得到相机内参矩阵,再得到每个标定板对应的外参。
相机标定的目的就是建立摄像机图像像素位置与场景点位置之间的关系,即世界坐标系与图像坐标系之间的关系。方法就是根据摄像机模型,由已知特征点的图像坐标求解摄像机的模型参数,从而可以从图像出发恢复出空间点三维坐标,即三维重建。所以要求解的参数包括4个内参数和5个畸变参数,对于外参数,即旋转矩阵的三个旋转参数R和平移向量的三个参数T。

双目立体标定:

双目摄像机标定和单目摄像机标定最主要的区别就是双目摄像机需要标定出左右摄像机坐标系之间的相对关系。
双目摄像机需要标定的参数:摄像机内参数矩阵,畸变系数矩阵,本征矩阵,基础矩阵,旋转矩阵以及平移矩阵。
双目视觉中两个摄像头之间的相对位置关系,即两个坐标系之间的相对位置关系,可以通过两个矩阵来描述:旋转矩阵R和平移矩阵T。
我们用旋转矩阵R和平移矩阵T来描述左右两个摄像机坐标系的相对关系,具体为:将左摄像机下的坐标转换到右摄像机下的坐标。
假设空间中有一点P,其在世界坐标系下的坐标为Pw,其在左右摄像机坐标系下的坐标可以表示为
在这里插入图片描述
Rl,Tl为左摄像头经过单目标定得到的相对标定物的旋转矩阵和平移向量,Rr,Tr为右摄像头经过单目标定得到的相对标定物的旋转矩阵和平移向量。
左右相机分别进行单目标定,就可以分别得到Rl,Tl,Rr,Tr,带入上式就可以求出左右相机之间的旋转矩阵R和平移T。求得的R和T就是立体标定要得到的结果。
亚像素定位:通常图像被离散化成像素形式,每个像素对应一个整数坐标位置,而为了达到精确性,需要精确到浮点坐标位置,因此涉及到亚像素定位问题。亚像素定位就是计算特征所在图像中的真实位置,而真实位置有时候并不在像素所在整数坐标位置上,而是在像素的内部。即存在于两个实际像素之间的像素,被称为“亚像素”。

猜你喜欢

转载自blog.csdn.net/u010801994/article/details/84561114