直接线性变换(DLT)是建立图像点坐标和相应物点物方空间坐标之间直接的线性关系的算法。
已知一组3D空间点坐标信息和其在图像中的投影坐标信息,计算图像相对的位姿变换信息。如果把3D点的空间坐标信息转换为另一个相机坐标下即可求解的来个相机坐标之间的位姿变换信息。
已知相机2坐标系下的一组3D点坐标为Pc2=(xc2,yc2,zc2)P_{c2}=(x_{c2},y_{c2},z_{c2})Pc2=(xc2,yc2,zc2),该点在相机1的投影坐标为(uc1,vc1)(u_{c1},v_{c1})(uc1,vc1),相机1对应的内参矩阵为KKK,根据上述信息有(uc1vc11)=K(R12(xc2yc2zc2)+t12)⟹(xc1yc1zc1)=[R12∣t12](xc2yc2zc21)⟹s(uc1vc11)=[t1t2t3t4t5t6t7t8t9t10t11t12](xc2yc2zc21)\begin{pmatrix} u_{c1} \\ v_{c1}\\ 1 \end{pmatrix}=K(R_{12}\begin{pmatrix} x_{c2} \\ y_{c2}\\ z_{c2} \end{pmatrix}+t_{12})\\ \implies\begin{pmatrix} x_{c1} \\ y_{c1}\\ z_{c1} \end{pmatrix}=[R_{12}|t_{12}]\begin{pmatrix} x_{c2} \\ y_{c2}\\ z_{c2}\\ 1 \end{pmatrix}\\\implies s\begin{pmatrix} u_{c1} \\ v_{c1}\\ 1 \end{pmatrix}=\begin{bmatrix}t_1&t_2&t_3&t_4\\t_5&t_6&t_7&t_8\\t_9&t_{10}&t_{11}&t_{12}\\\end{bmatrix}\begin{pmatrix} x_{c2} \\ y_{c2}\\ z_{c2}\\ 1 \end{pmatrix}⎝⎛uc1vc11⎠⎞=K(R12⎝⎛xc2yc2zc2⎠⎞+t12)⟹⎝⎛xc1yc1zc1⎠⎞=[R12∣t12]⎝⎜⎜⎛xc2yc2zc21⎠⎟⎟⎞⟹s⎝⎛uc1vc11⎠⎞=⎣⎡t1t5t9t2t6t10t3t7t11t4t8t12⎦⎤⎝⎜⎜⎛xc2yc2zc21⎠⎟⎟⎞上述矩阵方程可以写成来个线性方程的形式uc1=t1xc2+t2yc2+t3zc2+t4t9xc2+t10yc2+t11zc2+t12vc1=t5xc2+t6yc2+t7zc2+t8t9xc2+t10yc2+t11zc2+t12u_{c1}=\frac{t_1x_{c2}+t_2y_{c2}+t_3z_{c2}+t_4}{t_9x_{c2}+t_{10}y_{c2}+t_{11}z_{c2}+t_{12}}\\v_{c1}=\frac{t_5x_{c2}+t_6y_{c2}+t_7z_{c2}+t_8}{t_9x_{c2}+t_{10}y_{c2}+t_{11}z_{c2}+t_{12}}uc1=t9xc2+t10yc2+t11zc2+t12t1xc2+t2yc2+t3zc2+t4vc1=t9xc2+t10yc2+t11zc2+t12t5xc2+t6yc2+t7zc2+t8我们的目的就是求解 t1⋯t12t_1\cdots t_{12}t1⋯t12,通过多组匹配的2D-3D点可以构建线性方程组
(xc21yc21zc2110000−u1xc21−u1yc21−u1zc2110000xc21yc21zc211−v1xc21−v1yc21−v1zc211⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮⋮xc2nyc2nzc2n10000−unxc2n−unyc2n−unzc2n10000xc2nyc2nzc2n1−vnxc2n−vnyc2n−vnzc2n1)(t1t2t3t4t5t6t7t8t9t10t11t12)=0\begin{pmatrix} x^1_{c2}&y^1_{c2}&z^1_{c2}&1&0&0&0&0&-u_1x^1_{c2}&-u_1y^1_{c2}&-u_1z^1_{c2}&1\\ 0&0&0&0&x^1_{c2}&y^1_{c2}&z^1_{c2}&1&-v_1x^1_{c2}&-v_1y^1_{c2}&-v_1z^1_{c2}&1\\ \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots & \vdots\\ x^n_{c2}&y^n_{c2}&z^n_{c2}&1&0&0&0&0&-u_nx^n_{c2}&-u_ny^n_{c2}&-u_nz^n_{c2}&1\\ 0&0&0&0&x^n_{c2}&y^n_{c2}&z^n_{c2}&1&-v_nx^n_{c2}&-v_ny^n_{c2}&-v_nz^n_{c2}&1\\ \end{pmatrix} \begin{pmatrix}t_1\\t_2\\t_3\\t_4\\t_5\\t_6\\t_7\\t_8\\t_9\\t_{10}\\t_{11}\\t_{12}\end{pmatrix}=0⎝⎜⎜⎜⎜⎜⎛xc210⋮xc2n0yc210⋮yc2n0zc210⋮zc2n010⋮100xc21⋮0xc2n0yc21⋮0yc2n0zc21⋮0zc2n01⋮01−u1xc21−v1xc21⋮−unxc2n−vnxc2n−u1yc21−v1yc21⋮−unyc2n−vnyc2n−u1zc21−v1zc21⋮−unzc2n−vnzc2n11⋮11⎠⎟⎟⎟⎟⎟⎞⎝⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎜⎛t1t2t3t4t5t6t7t8t9t10t11t12⎠⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎟⎞=0如果一共有6对匹配的2D-3D点我们可以通过线性求解的形式获得t1⋯t12t_1\cdots t_{12}t1⋯t12,如果大于6对点我们可以通过SVD分解求最小二乘解获得t1⋯t12t_1\cdots t_{12}t1⋯t12。其中R=[t1t2t3t5t6t7t9t10t11]t=[t4t8t12]R=\begin{bmatrix}t_1&t_2&t_3\\t_5&t_6&t_7\\t_9&t_{10}&t_{11}\\\end{bmatrix}\\t=\begin{bmatrix}t_4\\t_8\\t_{12}\end{bmatrix}R=⎣⎡t1t5t9t2t6t10t3t7t11⎦⎤t=⎣⎡t4t8t12⎦⎤由于在整个求解的过程中没有考虑到旋转矩阵的单位正交性,可以将上述求的旋转矩阵进行QRQRQR分解求得或者R=(RRT)−12RR=(RR^T)^{-\frac1 2 }RR=(RRT)−21R
[PnP问题之DLT解法](https://zhuanlan.z hihu.com/p/58648937)
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态