相机标定(二)——图像坐标与世界坐标转换
一、坐标关系
相机中有四个坐标系,分别为world,camera,image,pixel
world为世界坐标系,可以任意指定xw轴和yw轴,为上图P点所在坐标系。
camera为相机坐标系,原点位于小孔,z轴与光轴重合,xw轴和yw轴平行投影面,为上图坐标系XcYcZc。
image为图像坐标系,原点位于光轴和投影面的交点,xw轴和yw轴平行投影面,为上图坐标系XYZ。
pixel为像素坐标系,从小孔向投影面方向看,投影面的左上角为原点,uv轴和投影面两边重合,该坐标系与图像坐标系处在同一平面,但原点不同。
二、坐标变换
下式为像素坐标pixel与世界坐标world的变换公式,右侧第一个矩阵为相机内参数矩阵,第二个矩阵为相机外参数矩阵。
2.1 变换流程
该方程右侧隐含了一次齐次坐标到非齐次坐标的转换
顺序变换
从pixel到camera,使用内参变换
从camera到world,使用外参变换
注意:两个变换之间的矩阵大小不同,需要分开计算,从pixel到camera获得的相机坐标为非齐次,需转换为齐次坐标再进行下一步变换。而在进行从camera到world时,需将外参矩阵转换为齐次再进行计算。(齐次坐标的分析)
直接变换
注意:直接变换是直接根据变换公式获得,实际上包含pixel到camera和camera到world,实际上和顺序变换一样,通过顺序变换可以更清晰了解变换过程。
2.2 参数计算
内参:通过张正友标定获得
外参:通过PNP估计获得
深度s:深度s为目标点在相机坐标系Z方向的值
2.3 外参计算
solvePnP函数
Perspective-n-Point是通过n组给定点的世界坐标与像素坐标估计相机位置的方法。OpenCV内部提供的函数为solvePnP(),函数介绍如下:
bool solvePnP(InputArray objectPoints,
InputArray imagePoints,
InputArray cameraMatrix,
InputArray distCoeffs,
OutputArray rvec,
OutputArray tvec,
bool useExtrinsicGuess=false,
int flags=ITERATIVE )
objectPoints,输入世界坐标系中点的坐标&