图像二维坐标转世界三维坐标

1、张正友标定法:

摄像机标定(Camera calibration)简单来说是从世界坐标系换到图像坐标系的过程,也就是求最终的投影矩阵的过程,由投影过程求出相机的外参数和内参数。

[1]基本的坐标系:

· 世界坐标系(world coordinate)(xw,yw,zw),也称为测量坐标系,是一个三维直角坐标系,以其为基准可以描述相机和待测物体的空间位置。世界坐标系的位置可以根据实际情况自由确定。

· 相机坐标系(camera coordinate)(xc,yc,zc),也是一个三维直角坐标系,原点位于镜头光心处,x、y轴分别与相面的两边平行,z轴为镜头光轴,与像平面垂直。

· 像素坐标系uov是一个二维直角坐标系,反映了相机CCD/CMOS芯片中像素的排列情况。原点o位于图像的左上角,u轴、v轴分别于像面的两边平行。像素坐标系中坐标轴的单位是像素(整数)。

· 成像平面坐标系(x,y):像素坐标系不利于坐标变换,因此需要建立图像坐标系XOY,其坐标轴的单位通常为毫米(mm),原点是相机光轴与相面的交点(称为主点),即图像的中心点,X轴、Y轴分别与u轴、v轴平行。故两个坐标系实际是平移关系,即可以通过平移就可得到。

[2]一般来说,标定的过程分为两个部分:

· 第一步是从世界坐标系转为相机坐标系,这一步是三维点到三维点的转换,包括R,t(相机外参,确定了相机在某个三维空间中的位置和朝向)等参数;

· 第二部是从相机坐标系转为成像平面坐标系(像素坐标系),这一步是三维点到二维点的转换,包括K(相机内参,是对相机物理特性的近似)等参数;

· 世界坐标系转换为相机坐标系

其中R为3*3的旋转矩阵,t为3*1的平移矢量,即相机外参数


· 相机坐标系转换为图像坐标系

s为比例因子(s不为0),f为有效焦距(光心到图像平面的距离),(x,y,z,1)是空间点P在相机坐标系oxyz中的齐次坐标,(X,Y,1)是像点p在图像坐标系OXY中的齐次坐标。

· 图像坐标系转换为像素坐标系

其中,dX、dY分别为像素在X、Y轴方向上的物理尺寸,u0,v0为主点(图像原点)坐标

· 世界坐标系转换为像素坐标系

其中,m1、m2即为相机的内参和外参数。通过blog.csdn.net/lql0716/a进行求解。

注意:R,t参数矩阵为不可逆矩阵。


2、摄像机标定

matlab标定程序:下载解压,运行calib_gui即可

棋盘格:实际计算时,需要测量尺格的长度,用于标定,即dx,dy。

摄像机标定方法matlab:按照布置进行标定,提取角点需放大图片减少误差。

求出相机的内参和畸变系数。

3、相机位姿估计:

由于需要世界三维坐标转换到二维坐标,仅仅标定出外参和内参仍然求不出。特别是当时matlab标定方法,已经标定出内参和外参,天真的我,以为直接代入上式中就可以进行坐标转换。后来一想,每副图片都有一个外参,而且世界坐标系定义的是哪个啊!!!!

我求出的内外参数要怎么用啊!!!!!!

纠结了半天,各种百度坐标转换,问师兄都没有用,后来在刷知乎的时候,看评论看到一个人的回答:求PnP问题。

然后我就发现新天地了,相机的位姿估计。天真的我以为,相机坐标系就是相机的位置坐标。愚蠢至极。。。。。。。。。。。


PnP问题是求解3D-2D点对运动的方法。他描述了当知道n个三维空间点坐标及其二维投影位置时,如何估计相机的位姿。

单目相机位姿估计

N=3时求出4组解,好像再加一个点就能解决这个问题了,事实上也几乎如此。说几乎是因为还有其他一些特殊情况,这些特殊情况就不再讨论了。N>3后,能够求出正解了,但为了一个正解就又要多加一个球D显然不够”环保”,为了更快更节省计算机资源地解决问题,先用3个点计算出4组解获得四个旋转矩阵、平移矩阵。

输入参数准备:
1 objectPoints特征点世界坐标
2 imagePoints特征点在摄像头下的像素点坐标
3 cameraMatrixdistCoeffs内参矩阵和畸变矩阵

相机世界坐标的求解:
1求世界坐标中的点在相机坐标系下的坐标
2求相机在世界坐标中的坐标,旋转角度





4、二维转三维

天真的我再一次以为,求出摄像机的坐标,旋转角度,只不是就可以求出待测点的世界坐标了,然而外参矩阵是不可逆的。

这就是单目相机的痛点,我以为他简单,他折磨死你。二维怎么可能转三维,怎么可能!!!!

这种情况下,文献都是应用另一个摄像机同时拍摄进行求解。可是我是跟踪啊,然道我两幅图片都要跟踪。

这时候横下一条心,把世界坐标系的高度进行约束,即设置z=0.

求出相机的坐标系(即在世界坐标系的坐标和旋转矩阵);求出待测点在摄像机坐标系的坐标;利用摄像机的旋转坐标求出摄像机相对于世界坐标系个坐标的旋转角度,和待测点在摄像机坐标系的坐标求出待测点在世界坐标系相对于相机坐标系的向量。对,只能求出向量,所以要高度约束啊。

我终于解决这个问题了。


其他问题求解啊,比如怎么求得特征点和待测点的图像像素坐标,哈哈,用画图工具就可以了。我一直在想opencv该怎么编程。

solvePnP用的环境是vs2013和opencv2.4.9.第一次学会用vs,VS2013配置opencv2.4.9

发布于 2017-12-14