坐标系转换--三维四参数大地坐标系转换模型变换关系理解

三维四参数空间直角坐标系转换模型变换关系理解

[ X G Y G Z G ] = [ X C Y C Z C ] + [ T x T y T z ] + [ Z C cos ⁡ B 0 sin ⁡ L 0 − Y C sin ⁡ B 0 − Z C cos ⁡ B 0 cos ⁡ L 0 + X C sin ⁡ B 0 Y C cos ⁡ B 0 cos ⁡ L 0 − X C cos ⁡ B 0 sin ⁡ L 0 ] α (1) \tag{1} \begin{bmatrix} X_G \\ Y_G \\ Z_G \end{bmatrix} = \begin{bmatrix} X_C \\ Y_C \\ Z_C \end{bmatrix} + \begin{bmatrix} T_x \\ T_y \\ T_z \end{bmatrix} + \begin{bmatrix} Z_C\cos{B_0}\sin{L_0} - Y_C\sin{B_0} \\ -Z_C\cos{B_0}\cos{L_0} + X_C\sin{B_0} \\ Y_C\cos{B_0}\cos{L_0} - X_C\cos{B_0}\sin{L_0} \\ \end{bmatrix}\alpha XGYGZG = XCYCZC + TxTyTz + ZCcosB0sinL0YCsinB0ZCcosB0cosL0+XCsinB0YCcosB0cosL0XCcosB0sinL0 α(1)
式中: 式中: 式中:
X G , Y G , Z G : 2000 国家大地坐标系下的坐标,单位为米 ( m ) ; X_G,Y_G,Z_G:2000国家大地坐标系下的坐标,单位为米(m); XG,YG,ZG2000国家大地坐标系下的坐标,单位为米(m)
B 0 , L 0 : 2000 国家大地坐标系下,区域中心 P 0 点的大地经纬度,单位为弧度 ( r a d ) ; B_0,L_0:2000国家大地坐标系下,区域中心P_0点的大地经纬度,单位为弧度(rad); B0,L02000国家大地坐标系下,区域中心P0点的大地经纬度,单位为弧度(rad)
X C , Y C , Z C :大地坐标系( 1954 北京坐标系或者 1980 西安坐标系)下的坐标,单位为米 ( m ) ; X_C,Y_C,Z_C:大地坐标系(1954北京坐标系或者1980西安坐标系)下的坐标,单位为米(m); XC,YC,ZC:大地坐标系(1954北京坐标系或者1980西安坐标系)下的坐标,单位为米(m)
T X , T Y , T Z :坐标平移量,单位为米 ( m ) ; T_X,T_Y,T_Z:坐标平移量,单位为米(m); TX,TY,TZ:坐标平移量,单位为米(m)
α :旋转参数,即区域中心 P 0 点法线为旋转轴的控制网水平定向旋转量, 顾及 1954 北京坐标系或者 1980 西安坐标系平面坐标由于起始定向与 2000 国家大地坐标系 的差异引起的坐标变化,单位为弧度 ( r a d ) 。 \alpha:旋转参数,即区域中心P_0点法线为旋转轴的控制网水平定向旋转量,\\ 顾及1954北京坐标系或者1980西安坐标系平面坐标由于起始定向与2000国家大地坐标系\\ 的差异引起的坐标变化,单位为弧度(rad)。 α:旋转参数,即区域中心P0点法线为旋转轴的控制网水平定向旋转量,顾及1954北京坐标系或者1980西安坐标系平面坐标由于起始定向与2000国家大地坐标系的差异引起的坐标变化,单位为弧度(rad)

令 令
a 0 = Z C cos ⁡ B 0 sin ⁡ L 0 − Y C sin ⁡ B 0 , a_0= Z_C\cos{B_0}\sin{L_0} - Y_C\sin{B_0}, a0=ZCcosB0sinL0YCsinB0
a 1 = − Z C cos ⁡ B 0 cos ⁡ L 0 + X C sin ⁡ B 0 , a_1= -Z_C\cos{B_0}\cos{L_0} + X_C\sin{B_0}, a1=ZCcosB0cosL0+XCsinB0
a 2 = Y C cos ⁡ B 0 cos ⁡ L 0 − X C cos ⁡ B 0 sin ⁡ L 0 a_2= Y_C\cos{B_0}\cos{L_0} - X_C\cos{B_0}\sin{L_0} a2=YCcosB0cosL0XCcosB0sinL0

则 ( 1 ) 式变换为: 则(1)式变换为: (1)式变换为:
[ X G Y G Z G ] = [ X C Y C Z C ] + [ T x T y T z ] + [ a 0 a 1 a 2 ] α = [ X C Y C Z C ] + [ T x + a 0 α T y + a 1 α T z + a 2 α ] (2) \tag{2} \begin{bmatrix} X_G \\ Y_G \\ Z_G \end{bmatrix} = \begin{bmatrix} X_C \\ Y_C \\ Z_C \end{bmatrix} + \begin{bmatrix} T_x \\ T_y \\ T_z \end{bmatrix} + \begin{bmatrix} a_0 \\ a_1 \\ a_2 \end{bmatrix}\alpha = \begin{bmatrix} X_C \\ Y_C \\ Z_C \end{bmatrix} + \begin{bmatrix} T_x + a_0\alpha \\ T_y + a_1\alpha \\ T_z + a_2\alpha \end{bmatrix} XGYGZG = XCYCZC + TxTyTz + a0a1a2 α= XCYCZC + Tx+a0αTy+a1αTz+a2α (2)

又 ∵ 又\because
[ T x + a 0 α T y + a 1 α T z + a 2 α ] = [ P 1 P 2 P 3 P 4 P 5 P 6 P 7 P 8 P 9 P 10 P 11 P 12 ] [ T x T y T z α ] \begin{bmatrix} T_x + a_0\alpha \\ T_y + a_1\alpha \\ T_z + a_2\alpha \end{bmatrix} = \begin{bmatrix} P_1 & P_2 & P_3 & P_4 \\ P_5 & P_6 & P_7 & P_8 \\ P_9 & P_{10} & P_{11} & P_{12} \end{bmatrix} \begin{bmatrix} T_x \\ T_y \\ T_z \\ \alpha \end{bmatrix} Tx+a0αTy+a1αTz+a2α = P1P5P9P2P6P10P3P7P11P4P8P12 TxTyTzα
⇒ \Rarr
P 1 = 1 , P 2 = 0 , P 3 = 0 , P 4 = a 0 , P 5 = 0 , P 6 = 1 , P 7 = 0 , P 8 = a 1 , P 9 = 0 , P 10 = 0 , P 11 = 1 , P 12 = a 2 P_1=1,P_2=0,P_3=0,P_4=a_0,\\ P_5=0,P_6=1,P_7=0,P_8=a_1,\\ P_9=0,P_{10}=0,P_{11}=1,P_{12}=a_2 P1=1P2=0P3=0P4=a0P5=0P6=1P7=0P8=a1P9=0P10=0P11=1P12=a2

∴ ( 2 ) 式变换为: \therefore (2)式变换为: (2)式变换为:
[ X G Y G Z G ] = [ X C Y C Z C ] + [ 1 0 0 a 0 0 1 0 a 1 0 0 1 a 2 ] [ T x T y T z α ] (3) \tag{3} \begin{bmatrix} X_G \\ Y_G \\ Z_G \end{bmatrix} = \begin{bmatrix} X_C \\ Y_C \\ Z_C \end{bmatrix} + \begin{bmatrix} 1 & 0 & 0 & a_0 \\ 0 & 1 & 0 & a_1 \\ 0 & 0 & 1 & a_2 \end{bmatrix} \begin{bmatrix} T_x \\ T_y \\ T_z \\ \alpha \end{bmatrix} XGYGZG = XCYCZC + 100010001a0a1a2 TxTyTzα (3)

基于最小二乘与多对同名点对计算参数

设存在 n 对同名点对: ( X a , Y a , Z a ) 1 → ( X b , X b , Z b ) 1 , ⋯ , ( X a , Y a , Z a ) n → ( X b , X b , Z b ) n . 设存在n对同名点对:(X_a,Y_a,Z_a)_1 \rarr (X_b,X_b,Z_b)_1,\cdots,(X_a,Y_a,Z_a)_n \rarr (X_b,X_b,Z_b)_n. 设存在n对同名点对:(Xa,Ya,Za)1(Xb,Xb,Zb)1(Xa,Ya,Za)n(Xb,Xb,Zb)n.
令 令
θ = [ T x T y T z α ] \theta =\begin{bmatrix} T_x \\ T_y \\ T_z \\ \alpha \end{bmatrix} θ= TxTyTzα
v i = ( X G − X C , Y G − Y C , Z G − Z C ) i T , v_i=(X_G-X_C,Y_G-Y_C,Z_G-Z_C)^T_i, vi=(XGXC,YGYC,ZGZC)iT
P i = [ 1 0 0 a 0 0 1 0 a 1 0 0 1 a 2 ] i , P_i= \begin{bmatrix} 1 & 0 & 0 & a_0 \\ 0 & 1 & 0 & a_1 \\ 0 & 0 & 1 & a_2 \end{bmatrix}_i, Pi= 100010001a0a1a2 i
i = 1 , ⋯   , n i=1,\cdots,n i=1,,n

根据式 ( 3 ) ,代入样本值得到方程组如下: 根据式(3),代入样本值得到方程组如下: 根据式(3),代入样本值得到方程组如下:
{ P 1 θ = v 1 P 2 θ = v 2 ⋮ P n θ = v n \begin{dcases} P_1\theta = v_1 \\ P_2\theta = v_2 \\ \vdots \\ P_n\theta = v_n \end{dcases} P1θ=v1P2θ=v2Pnθ=vn
则变换为矩阵方程为: 则变换为矩阵方程为: 则变换为矩阵方程为:
v = P θ v = P\theta v=
P = [ P 1 P 2 ⋮ P n ] , v = [ v 1 v 2 ⋮ v n ] P= \begin{bmatrix} P_1 \\ P_2 \\ \vdots \\ P_n \end{bmatrix}, v= \begin{bmatrix} v_1 \\ v_2 \\ \vdots \\ v_n \end{bmatrix} P= P1P2Pn v= v1v2vn

考虑 v = P θ 无解,需要从 P 的列空间中找出最接近 v 的向量 u ( u 可以理解为 v 在 P 的列空间中的投影,理解如下图所示:) 考虑v = P\theta无解,需要从P的列空间中找出最接近v的向量u(u可以理解为v在P的列空间中的投影,理解如下图所示:) 考虑v=无解,需要从P的列空间中找出最接近v的向量uu可以理解为vP的列空间中的投影,理解如下图所示:)
在这里插入图片描述

如上图所示, p 是 b 在 [ a 1 a 2 ] 列空间中的投影。 如上图所示,p是b在\begin{bmatrix} a_1 & a_2 \end{bmatrix} 列空间中的投影。 如上图所示,pb[a1a2]列空间中的投影。
令 e = v − u ,最小二乘就是找到 ∥ e ∥ 2 最小的点,最小二乘就是指向量长度的最小平方。 令e=v-u,最小二乘就是找到\parallel e \parallel^2最小的点,最小二乘就是指向量长度的最小平方。 e=vu,最小二乘就是找到e2最小的点,最小二乘就是指向量长度的最小平方。

由上可知, u 位于 P 的列空间中,即 u 是 P 的各列的线性组合: 由上可知,u位于P的列空间中,即u是P的各列的线性组合: 由上可知,u位于P的列空间中,即uP的各列的线性组合:
令 P 的列空间为 P = [ C 1 C 2 ⋯ C m ] 令P的列空间为 P= \begin{bmatrix} C_1 & C_2 & \cdots & C_m \end{bmatrix} P的列空间为P=[C1C2Cm]
故存在 u = C 1 θ 1 ~ + C 2 θ 2 ~ + ⋯ + C m θ m ~ 故存在 u=C_1\tilde{\theta_1} + C_2\tilde{\theta_2} + \cdots + C_m\tilde{\theta_m} 故存在u=C1θ1~+C2θ2~++Cmθm~
即 P θ ~ = u 有解。 即P\tilde{\theta}=u有解。 Pθ~=u有解。

e = v − u = v − P θ ~ e=v-u=v-P\tilde{\theta} e=vu=vPθ~
e 正交于 P 的列空间,存在: e正交于P的列空间,存在: e正交于P的列空间,存在:
e ⊥ C 1 , e ⊥ C 2 , ⋯   , e ⊥ C m e \perp C_1,e \perp C_2,\cdots,e \perp C_m eC1,eC2,,eCm

由向量点积关系式可得: 由向量点积关系式可得: 由向量点积关系式可得:

⇒ { C 1 T ( v − P θ ~ ) = 0 C 2 T ( v − P θ ~ ) = 0 ⋮ C m T ( v − P θ ~ ) = 0 \Rarr \begin{dcases} C_1^T(v-P\tilde{\theta})=0 \\ C_2^T(v-P\tilde{\theta})=0 \\ \vdots \\ C_m^T(v-P\tilde{\theta})=0 \end{dcases} C1T(vPθ~)=0C2T(vPθ~)=0CmT(vPθ~)=0

⇒ [ C 1 T C 2 T C 3 T ⋮ C m T ] ( v − P θ ~ ) = [ 0 0 0 ⋮ 0 ] \Rarr \begin{bmatrix} C_1^T \\ C_2^T \\ C_3^T \\ \vdots \\ C_m^T \end{bmatrix} (v-P\tilde{\theta})= \begin{bmatrix} 0 \\ 0 \\ 0 \\ \vdots \\ 0 \end{bmatrix} C1TC2TC3TCmT (vPθ~)= 0000

∵ P = [ C 1 C 2 ⋯ C m ] \because P= \begin{bmatrix} C_1 & C_2 & \cdots & C_m \end{bmatrix} P=[C1C2Cm]
∴ P T = [ C 1 T C 2 T ⋮ C m T ] \therefore P^T = \begin{bmatrix} C_1^T \\ C_2^T \\ \vdots \\ C_m^T \end{bmatrix} PT= C1TC2TCmT

⇒ P T ( v − P θ ~ ) = 0 \Rarr P^T(v-P\tilde{\theta})=0 PT(vPθ~)=0
⇒ P T P θ ~ = P T v \Rarr P^TP\tilde{\theta}=P^Tv PTPθ~=PTv
⇒ θ ~ = ( P T P ) − 1 P T v \Rarr \tilde{\theta}=(P^TP)^{-1}P^Tv θ~=(PTP)1PTv

即 θ ~ = ( P T P ) − 1 P T v 为基于最小二乘计算出来的最接近实际参数的转换值 即\tilde{\theta}=(P^TP)^{-1}P^Tv为基于最小二乘计算出来的最接近实际参数的转换值 θ~=(PTP)1PTv为基于最小二乘计算出来的最接近实际参数的转换值

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是基于参数相似变换模型的二维平面直角坐标转换的Python代码示例: ```python import numpy as np def similarity_transform(src_pts, dst_pts): """ 基于参数相似变换模型的二维平面直角坐标转换 :param src_pts: 源点坐标数组,形状为(N, 2) :param dst_pts: 目标点坐标数组,形状为(N, 2) :return: 变换矩阵M,形状为(3, 3) """ # 将点坐标转换为齐次坐标 src_pts = np.hstack((src_pts, np.ones((len(src_pts), 1)))) dst_pts = np.hstack((dst_pts, np.ones((len(dst_pts), 1)))) # 计算变换矩阵 A = np.zeros((2 * len(src_pts), 4)) b = np.zeros((2 * len(src_pts), 1)) for i in range(len(src_pts)): A[2 * i, 0] = src_pts[i, 0] A[2 * i, 1] = -src_pts[i, 1] A[2 * i, 2] = 1 A[2 * i + 1, 0] = src_pts[i, 1] A[2 * i + 1, 1] = src_pts[i, 0] A[2 * i + 1, 3] = 1 b[2 * i, 0] = dst_pts[i, 0] b[2 * i + 1, 0] = dst_pts[i, 1] x, _, _, _ = np.linalg.lstsq(A, b, rcond=None) M = np.array([[x[0, 0], -x[1, 0], x[2, 0]], [x[1, 0], x[0, 0], x[3, 0]], [0, 0, 1]]) return M ``` 其中,`src_pts`和`dst_pts`分别是源点坐标数组和目标点坐标数组,形状均为(N, 2),表示N个点在二维平面上的直角坐标。函数返回的是一个变换矩阵M,形状为(3, 3),可以用于将源点坐标转换到目标点坐标。具体使用方法可以参考下面的示例: ```python # 定义源点坐标和目标点坐标 src_pts = np.array([[0, 0], [1, 0], [0, 1], [1, 1]]) dst_pts = np.array([[1, 2], [3, 2], [1, 4], [3, 4]]) # 计算变换矩阵 M = similarity_transform(src_pts, dst_pts) # 测试变换矩阵 test_pts = np.array([[0.5, 0.5], [0.2, 0.8], [0.8, 0.2]]) test_pts_transformed = np.dot(np.hstack((test_pts, np.ones((len(test_pts), 1)))), np.transpose(M)) test_pts_transformed = test_pts_transformed[:, :2] / test_pts_transformed[:, 2:] print(test_pts_transformed) ``` 在上面的示例中,定义了源点坐标和目标点坐标,然后调用`similarity_transform`函数计算变换矩阵M。最后,我们测试了变换矩阵M对测试点进行变换的效果,并打印出了变换后的坐标。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值