绵阳网赚论坛

双目摄像头标定与测距(一)-- 齐次坐标,世界坐标到像素坐标_绵阳网赚论坛

admin 2019-08-27 10:00 在家兼职平台 0 评论

三坐标网上编程兼职  最近从头研究了一下双目标标定,可是回头一看,不找找代码本身都无法实现进去了,即使有学过但都记忆含糊。公然对于新手而言,还是患上做条记。 对于付标定而言,假如只是想纯真患上到相机参数,用matlab会比opencv实现的结果更正确,matlab自带的相机标定东西箱也是简单上手的,利用教程也有很多资本。如下仅是对道理的简单描摹。 齐次坐标

  在以前得先了解一下 ‘齐次坐标’ 这个见解,其重要使用在盘算机图形盘算上,简单明白便是为了简化多少变更在计算机上的计算。比方:

平移t:坐标(x, y)分别向上,向右平移dx,dy单位,即(x' - y')=(x+dx,y+dy),用矩阵表现: \left[ {\begin{array}{*{20}{c}}{x'}\\{y'}\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}x\\y \end{array}} \right] + \left[ {\begin{array}{*{20}{c}}{dx}\\{dy}\end{array}} \right]\ 扭转R:在二维空间中,对付扭转角度为\theta,有\left[ {\begin{array}{*{20}{c}}{x'}\\{y'}\end{array}} \right] = \left[ {\beg

in{array}{*{20}{c}}{\cos \theta }&{ - \sin \theta }\\{\sin \theta }&{\cos \theta }\end{array}} \right] * \left[ {\begin{array}{*{20}{c}}x\\y\end{array}} \right]\ 为了合并矩阵运算的乘法与加法,所以援用了齐次坐标,即: \left[ {\begin{array}{*{20}{c}}{x'}\\{y'}\\1\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}{\cos \theta }&{ - \sin \theta }&{\rm{0}}\\{\sin \theta }&{\cos \theta }&{\rm{0}}\\0&0&1\end{array}} \right] * \left[ {\begin{array}{*{20}{c}}{\rm{1}}&{\rm{0}}&{tx}\\{\rm{0}}&{\rm{1}}&{ty}\\{\rm{0}}&{\rm{0}}{\rm{1}} \end{array}} \right] * \left[ {\begin{array}{*{20}{c}}x\\y\\1\end{array}} \right] = \left[ {\begin{array}{*{20}
	


{c}}{\cos \theta }&{ - \sin \theta }&{\left( {1 - \cos \theta } \right)tx + ty * \sin \theta }\\{\sin \theta }&{\cos \theta }&{\left( {1 - \cos \theta } \right)ty - tx * \sin \theta }\\0&0&1\end{array}} \right] * \left[ {\begin{array}{*{20}{c}}x\\y\\1\end{array}} \right] 另一方面,在实际的投影空间里笛卡尔坐标难以进行表白,因为两条平行线会相对平行,放在投影空间则否则,比方笛卡尔坐标下曲折平行的马路在视线里最终会无穷迫近于无穷远一点,楼再建高点即能够互通了。。

  齐次坐标便是讲本来n维的向量用n+1维表现,用p'=Ap(AR以及t构成的转换矩阵)方法表示多少变更。将(x, y)附加第三个坐标,因而每一个坐标用一个三元组(x,y,w)表示,称为点(x,y)的齐次坐标。日常来说当w不为0时,采取w=1,并将(\frac{x}{w},\frac{y}{w})称为齐次点(x,y,w)的笛卡尔坐标。 无关齐次坐标这里只是双方面的表明与明白 坐标转换关连图 全国坐标与相机坐标

  从全国坐标系\left( {{X_w},{Y_w},{Z_w}} \right)转换到相机坐标系,属于刚体变换(在三维空间中, 把一个多少何物体作旋转, 平移的活动,称之刚体变换),参考齐次坐标的示范,当拓展到三维时\left( {{X_W},{Y_W},{Z_W}} \right) \to\left( {{X_C},{Y_C},{Z_C}} \right)

\left[ {\begin{array}{*{20}{c}}{{X_C}}\\{{Y_C}}\\{{Z_C}}\\1\end{array}} \right] = \left[{\begin{array}{*{20}{c}}{{l_{00}}}&{{l_{01}
	
}}&{{l_{02}}}&{{t_x}}\\{{l_{10}}}&{{l_{11}}}&{{l_{12}}}&{{t_y}}\\{{l_{20}}}&{{l_{21}}}&{{l_{22}}}&{{t_z}}\\0&0&0&1\end{array}} \right] * \left[ {\begin{array}{*{20}{c}} {{X_W}}\\{{Y_W}}\\{{Z_W}}\\1\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}R&T\\0&1\end{array}} \right] * \left[ {\begin{array}{*{20}{c}}{{X_W}}\\{{Y_W}}\\{{Z_W}}\\1 \end{array}} \right]

R为3x3的旋转矩阵,T为平移向量,R,T两个外参构成世界坐标到相机坐标的转换矩阵 相机坐标到图像坐标 image.png

  拍照机坐标系的原点为摄像机光心,x轴与y轴与图像的X,Y轴平行,z轴为摄像机光轴,它与图像平面垂直,以此组成的空间直角坐标系称为摄像机坐标系,也称为相机坐标系,摄像机坐标系是三维坐标系。   从相机坐标系到图像坐标系,是3D到2D的转换,属于透视投影,下图更清楚表示进去

由类似三角形,得: \frac{{AB}}{{oC}} = \frac{{PB}}{{pC}} = \frac{{A{O_C}}}{{o{O_C}}} \to \frac{{{X_C}}}{x} = \frac{{{Y_C}}}{y} = \frac{{{Z_C}}}{f} \downarrow x = f\frac{{{X_C}}}	{{{Z_C}}},y = f\frac{{{Y_C}}}{{{Z_C}}} 经过变换可得:{Z_C}\left[ {\begin{array}{*{20}{c}}x\\y\\1 \end{array}} \right] = \left[ {\begin{array}{*{20}{c}}{x{Z_C}}\\{y{Z_C}}\\{{Z_C}} \end{array}} \right] = \left[ {\begin{array}{*{20}{c}}f&0&0&0\\0&f&0&0\\0&0&1&0 \end{array}} \right] * \left[ {\begin{array}{*{20}{c}}{{X_C}}\\{{Y_C}}\\{{Z_C}}\\1\end{array}} \right] 鉴于文章收尾齐次坐标的见解,Zc作为系数,在图像坐标系上,\left[ {\begin{array}{*{20}{c}} x\\y\\1\end{array}} \right] = {Z_C}\left[ {\begin{array}{*{20}{c}}x\\y\\1\end{array}} \right] 图像坐标到像素坐标

  在做图像处理惩罚的工夫,咱们对于图片像素点的读取,都因此图像左上角为原点,向右向下分别为x,y 的正标的目标,为了便利操纵,咱们必要从图像坐标转换到像素坐标。

其中{u_0},{v_0}代表图像坐标原点在像素坐标的地位,图像坐标的单位是妹妹,像素坐标的单位是pix,对于两者的转换,{d_x},{d_y}分别表示一个pix外队列上即是多少个妹妹。对此则有: \left\{ {\begin{array}{*{20}{c}}{u = \frac{x}{{dx}} + {u_0}}\\{v = \frac{y}{{dy}} + {v_0}}\end{array}} \right\} \left[ {\begin{array}{*{20}{c}}u\\v\\1\end{array}} \right] = \left[ {\begin{array}{*{20}{c}} {\frac{1}{{dx}}}&0&{{u_0}}\\0&{\frac{1}{{dy}}}&{{v_0}}\\0&0&1\end{array}} \right] * \left[ {\begin{array}{*{20}{c}}x\\y\\1\end{array}} \right] 总结

  如此一来,相机的成像道理以及对应的坐标关连能够梳理成:

\begin{array}{l}{Z_C}\left[ {\begin{array}{*{20}{c}}u\\v\\1\end{array}} \right] = \left[ {\begin{array}{*{20}{c}}{\frac{1}{{dx}}}&0&{{u_0}}\\0&{\frac{1}{{dy}}}&{{v_0}}\\0&0&1\end{array}} \right] * {Z_C}\left[ {\begin{array}{*{20}{c}}x\\y\\1\end{array}} \right]\\ = \left[ {\begin{array}{*{20}{c}} {\frac{1}{{dx}}}&0&{{u_0}}\\0&{\frac{1}{{dy}}}&{{v_0}}\\0&0&1\end{array}} \right]\left[ {\begin{array}{*{20}{c}}f&0&0&0\\0&f&0&0\\ 0&0&1&0 \end{array}} \right] * \left[ {\begin{array}{*{20}{c}} {{X_C}}\\{{Y_C}}\\{{Z_C}}\\1\end{array}} \right]\\ = \left[ {\begin{array}{*{20}{c}} {\frac{1}{{dx}}}&0&{{u_0}}\\0&{\frac{1}{{dy}}}&{{v_0}}\\0&0&1\end{array}} \right]\left[ {\begin{array}{*{20}{c}}f&0&0&0\\0&f&0&0\\0&0&1&0\end{array}} \right]\left[ {\begin{array}{*{20}{c}} {{l_{00}}}&{{l_{01}}}&{{l_{02}}}&{{t_x}}\\{{l_{10}}}&{{l_{11}}}&{{l_{12}}}&{{t_y}}\\ {{l_{20}}}&{{l_{21}}}&{{l_{22}}}&{{t_z}}\\0&0&0&1\end{array}} \right] * \left[ {\begin{array}{*{20}{c}}{{X_W}}\\ {{Y_W}}\\{{Z_W}}\\1\end{array}} \right]\end{array}

其中,相机内参:\left[ {\begin{array}{*{20}{c}}{\frac{1}{{dx}}}&0&{{u_0}}\\0&{\frac{1}{{dy}}}&{{v_0}}\\0&0&1\end{array}} \right]\left[ {\begin{array}{*{20}{c}}f&0&0&0\\0&f&0&0\\0&0&1&0\end{array}} \right],相机外参:\left[ {\begin{array}{*{20}{c}} {{l_{00}}}&{{l_{01}}}&{{l_{02}}}&{{t_x}}\\{{l_{10}}}&{{l_{11}}}&{{l_{12}}}&{{t_y}}\\{{l_{20}}}&{{l_{21}}}&{{l_{22}}}&{{t_z}}\\0&0&0&1\end{array}} \right]

以上是不考虑畸变环境下的转换,对于标定改正将会鄙人一篇继承研究

参考: