单张影像外定向的线性方法-Direct Linear Transformation

单张影像外定向的线性方法-Direct Linear Transformation

1.模型

DLT方法基于共线方程,利用图像坐标系下的放射变换进行延展,不需要固定的图像坐标系。也就是说处于一种不固定的状态下。
x = L 1 X + L 2 Y + L 3 Z + L 4 L 9 X + L 10 + L 11 Z + 1 y = L 5 X + L 6 Y + L 7 Z + L 8 L 9 X + L 10 + L 11 Z + 1 x=\frac{L_1X+L_2Y+L_3Z+L_4}{L_9X+L_{10}+L_{11}Z+1}\\ y=\frac{L_5X+L_6Y+L_7Z+L_8}{L_9X+L_{10}+L_{11}Z+1}\\ x=L9X+L10+L11Z+1L1X+L2Y+L3Z+L4y=L9X+L10+L11Z+1L5X+L6Y+L7Z+L8
其中 x x x y y y分别为图像坐标系下的点位坐标; X , Y , Z X,Y,Z X,Y,Z则是对应点在三维空间坐标系下的坐标。 L 1 − L 11 L_1-L_{11} L1L11是DLT方法的参数,需要被最小二乘法进行确定。利用这11个参数可以确定3个内方位元素( x 0 x_0 x0, y 0 y_0 y0, c c c)和6个外方位元素( X 0 X_0 X0, Y 0 Y_0 Y0, Z 0 Z_0 Z0, ϕ \phi ϕ, ω \omega ω, κ \kappa κ)。

将上方公式变形为线性形式,则有:
L 1 X + L 2 Y + L 3 Z + L 4 − x L 9 X − x L 10 Y − x L 11 Z − x = 0 L 5 X + L 6 Y + L 7 Z + L 8 − y L 9 X − y L 10 Y − y L 11 Z − y = 0 L_1X+L_2Y+L_3Z+L_4-xL_9X-xL_{10}Y-xL_{11}Z-x=0\\ L_5X+L_6Y+L_7Z+L_8-yL_9X-yL_{10}Y-yL_{11}Z-y=0\\ L1X+L2Y+L3Z+L4xL9XxL10YxL11Zx=0L5X+L6Y+L7Z+L8yL9XyL10YyL11Zy=0
采用最基础的间接平差方式进行计算,平差模型为:
v = A ⋅ x ^ − l A = [ X 1 Y 1 Z 1 1 0 0 0 0 − x 1 X 1 − x 1 Y 1 − x 1 Z 1 0 0 0 0 X 1 Y 1 Z 1 1 − y 1 X 1 − y 1 Y 1 − y 1 Z 1 X 2 Y 2 Z 2 1 0 0 0 0 − x 2 X 2 − x 2 Y 2 − x 2 Z 2 0 0 0 0 X 2 Y 2 Z 2 1 − y 2 X 2 − y 2 Y 2 − y 2 Z 2 ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ⋮ ] v=A·\hat x-l \\ A = \left[\begin{matrix}X_1\quad Y_1\quad Z_1\quad 1\quad0\quad0\quad0\quad0\quad -x_1X_1\quad -x_1Y_1 \quad -x_1Z_1 \\ 0\quad0\quad0\quad0\quad X_1\quad Y_1\quad Z_1\quad 1\quad -y_1X_1\quad -y_1Y_1 \quad -y_1Z_1 \\ X_2\quad Y_2\quad Z_2\quad 1\quad0\quad0\quad0\quad0\quad -x_2X_2\quad -x_2Y_2 \quad -x_2Z_2 \\ 0\quad0\quad0\quad0\quad X_2\quad Y_2\quad Z_2\quad 1\quad -y_2X_2\quad -y_2Y_2 \quad -y_2Z_2 \\ \vdots \quad\vdots \quad\vdots \quad\vdots \quad\vdots \quad\vdots \quad\vdots \quad\vdots \quad\vdots \end{matrix}\right] v=Ax^lA= X1Y1Z110000x1X1x1Y1x1Z10000X1Y1Z11y1X1y1Y1y1Z1X2Y2Z210000x2X2x2Y2x2Z20000X2Y2Z21y2X2y2Y2y2Z2
此方法最小需要6组同名点。

2.参数 L 1 − L 11 L_1-L_{11} L1L11与内外方位元素之间的转换关系

令 L = − 1 L 9 2 + L 10 2 + L 11 2 主点坐标(投影重心在图像上的坐标位置): x 0 ′ = − L 2 ⋅ ( L 1 ⋅ L 9 + L 2 ⋅ L 10 + L 3 ⋅ L 11 ) y 0 ′ = − L 2 ⋅ ( L 5 ⋅ L 9 + L 6 ⋅ L 10 + L 7 ⋅ L 11 ) 令L=\frac{-1}{\sqrt{L_9^2+L_{10}^2+L_{11}^2}}\\ 主点坐标(投影重心在图像上的坐标位置):\\ x_0^{'} = -L^2·(L_1·L_9+L_2·L_{10}+L_3·L_{11})\\ y_0^{'} = -L^2·(L_5·L_9+L_6·L_{10}+L_7·L_{11})\\ L=L92+L102+L112 1主点坐标(投影重心在图像上的坐标位置):x0=L2(L1L9+L2L10+L3L11)y0=L2(L5L9+L6L10+L7L11)
主距: c x = − L 2 ⋅ ( L 1 2 + L 2 2 + L 3 2 ) − x 0 ′ 2 c y = − L 2 ⋅ ( L 5 2 + L 6 2 + L 7 2 ) − y 0 ′ 2 旋转矩阵 R 上各个位置的值: r 11 = L ⋅ ( x 0 ′ ⋅ L 9 − L 1 ) c x r 12 = L ⋅ ( y 0 ′ ⋅ L 9 − L 5 ) c y r 13 = L ⋅ L 9 r 21 = L ⋅ ( x 0 ′ ⋅ L 10 − L 2 ) c x r 22 = L ⋅ ( y 0 ′ ⋅ L 10 − L 6 ) c y r 23 = L ⋅ L 10 r 31 = L ⋅ ( x 0 ′ ⋅ L 11 − L 3 ) c x r 32 = L ⋅ ( y 0 ′ ⋅ L 11 − L 7 ) c y r 33 = L ⋅ L 11 主距:\\ c_x=-\sqrt{L^2·(L_1^2+L_2^2+L_3^2)-x_0^{'2}}\\ c_y=-\sqrt{L^2·(L_5^2+L_6^2+L_7^2)-y_0^{'2}}\\ 旋转矩阵R上各个位置的值:\\ r_{11}=\frac{L·(x_0^{'}·L_9-L_1)}{c_x} \qquad r_{12}=\frac{L·(y_0^{'}·L_9-L_5)}{c_y} \qquad r_{13}=L·L_9 \qquad \\ r_{21}=\frac{L·(x_0^{'}·L_{10}-L_2)}{c_x} \qquad r_{22}=\frac{L·(y_0^{'}·L_{10}-L_6)}{c_y} \qquad r_{23}=L·L_{10} \qquad \\ r_{31}=\frac{L·(x_0^{'}·L_{11}-L_3)}{c_x} \qquad r_{32}=\frac{L·(y_0^{'}·L_{11}-L_7)}{c_y} \qquad r_{33}=L·L_{11} \qquad 主距:cx=L2(L12+L22+L32)x02 cy=L2(L52+L62+L72)y02 旋转矩阵R上各个位置的值:r11=cxL(x0L9L1)r12=cyL(y0L9L5)r13=LL9r21=cxL(x0L10L2)r22=cyL(y0L10L6)r23=LL10r31=cxL(x0L11L3)r32=cyL(y0L11L7)r33=LL11

在计算R矩阵的过程中,可能会导致R的行列式为负数的情况,必须进行检查,如果为负,则要乘上一个-1,然后还要进行正交标准化。
平移参数的确定 : [ X 0 Y 0 Z 0 ] = [ L 1 L 2 L 3 L 4 L 5 L 6 L 7 L 8 L 9 ] − 1 ⋅ [ L 4 L 8 1 ] 平移参数的确定:\\ \left[\begin{matrix}X_0\\Y_0\\Z_0\end{matrix}\right]= \left[\begin{matrix}L_1\quad L_2\quad L_3\\ L_4\quad L_5\quad L_6\\L_7 \quad L_8 \quad L_9 \end{matrix}\right]^{-1}·\left[\begin{matrix}L_4\\L_8\\1\end{matrix}\right] 平移参数的确定: X0Y0Z0 = L1L2L3L4L5L6L7L8L9 1 L4L81

3.DLT方法的缺点

如果内方位元素未知,则DLT模型将会增加很多参数;

如果参考点位位于一个近似平面上,则最上方共线方程的分母接近于0;

DLT方法无法探测到点位的相坐标和对应地面坐标的测量误差,所以可能得到错误的结果。

需要同名点的点数要大于6,有些苛刻。

4.注意事项

由共线方程到线性方程的过程一定要自己推导一边,将里面的细节弄清楚。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2nHy4dh2-1674089539434)(C:\Users\Mount Song\AppData\Roaming\Typora\typora-user-images\image-20230117214515540.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ovWLB3YM-1674089450094)(C:\Users\Mount Song\AppData\Roaming\Typora\typora-user-images\image-20230117214140677.png)]

这里面的 x 0 , y 0 , z 0 x_0,y_0,z_0 x0,y0,z0是地物系下,投影中心的坐标,也就是属于外方位元素,并且此种的 d / λ x d/\lambda_x d/λx就是对应书中的 c x ′ c^{'}_x cx,并且 d d d是焦距。图像上的点 Z Z Z方向坐标都为 − d -d d c c c是一个比例,共线方程上,线段之间成比例。

而网站上的一些模型,容易与坐标转换混淆,[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V2tpAP0G-1674089450095)(C:\Users\Mount Song\AppData\Roaming\Typora\typora-user-images\image-20230117215702347.png)]
在这里插入图片描述

这个模型中, Z C Z_C ZC移到右边放置到 f f f的下边,也即 f Z C \frac{f}{Z_C} ZCf就是共线方程上,两段线段的比例 c c c,实际上此中 u 0 , v 0 u_0,v_0 u0,v0与上面模型种的 u 0 , v 0 u_0,v_0 u0,v0符号相反,但由于 f f f一般取正数, 1 d x 、 1 d y \frac{1}{dx}、\frac{1}{dy} dx1dy1对应 1 λ x 、 1 λ y \frac{1}{\lambda_x}、\frac{1}{\lambda_y} λx1λy1互为相反数,而相机世界里面的 t = [ X 0 , Y 0 , Z 0 ] ′ t=[X_0,Y_0,Z_0]' t=[X0,Y0,Z0]则并非外方位元素,因为它的几何意义是地物系原点在图片坐标系下的坐标,所以只有利用旋转矩阵 R T R^T RT进行处理后 R T ⋅ t R^T·t RTt才是外方位元素中的位移元素, R R R直接对应于从地物系到相片坐标系的旋转矩阵。这个模型在应用的过程中,由于系数矩阵对应于,所以可以直接将坐标矩阵变形成:
[ R , t ] = [ f d x 0 u 0 0 f d x v 0 0 0 1 ] − 1 ⋅ [ L 1 L 2 L 3 L 4 L 5 L 6 L 7 L 8 L 9 L 10 L 11 1 ] ⋅ L 9 2 + L 10 2 + L 11 2 [R,t]=\left[\begin{matrix}\frac{f}{d_x} \quad 0 \quad u_0 \\0 \quad \frac{f}{d_x} \quad v_0 \\ 0 \quad 0\quad 1 \end{matrix}\right]^{-1}·\left[\begin{matrix}L_1 \quad L_2 \quad L_3 \quad L_4 \\ L_5 \quad L_6 \quad L_7 \quad L_8 \\ L_9 \quad L_{10} \quad L_{11} \quad 1 \end{matrix}\right] · \sqrt{L_9^2 + L_{10}^2 + L_{11}^2} [R,t]= dxf0u00dxfv0001 1 L1L2L3L4L5L6L7L8L9L10L111 L92+L102+L112
这里需要注意,这里之所以要成一个根号下,是为了使 L 12 L_{12} L12位置处为1, t t t获取后要经过 R T R^T RT去旋转,而 f / d x 、 f / d y f/d_x、f/d_y f/dxf/dy的计算可以根据[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Z9ZiL5j-1674089450096)(C:\Users\Mount Song\AppData\Roaming\Typora\typora-user-images\image-20230117220452883.png)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SE1rm7kn-1674089450096)(C:\Users\Mount Song\AppData\Roaming\Typora\typora-user-images\image-20230117220507344.png)]

但由于这个地方的计算方式对应的是第一种模型,所以正负号要做调整,具体过程一定要自行推到,对应出相应的值。

5.编程实现

编程实现了DLT的11参数确定。
在这里插入图片描述
编程实现了DLT的16参数确定。
在这里插入图片描述
DLT直接线性变换法(Direct Linear Transformation)实现相机外定向和相机标定

6.参考

(3条消息) C++/opencv实现DLT(直接线性变换法)标定相机_々云逸的博客-CSDN博客_opencv相机标定c++

DLT Method (kwon3d.com)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

狮子的心脏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值