对应点集配准算法

什么是配准

对应点集配准算法(四元数)

已知点集初始位置 A A A与运动后的位置 B B B,其中 a i a_i ai是点集 A A A的任意点, b i b_i bi是点集 B B B的任意点。

  1. 先求两个点集的中心 a ˉ \bar{a} aˉ b ˉ \bar{b} bˉ
  2. 再求点集的协方差 D A B D_{AB} DAB
    2.1 A的任意点的偏差 Δ a i = a i − a ˉ = ( δ a x i , δ a y i , δ a z i ) \Delta_{ai}=a_i-\bar{a}=(\delta a_{xi},\delta a_{yi},\delta a_{zi}) Δai=aiaˉ=(δaxi,δayi,δazi)
    2.2 B的任意点的偏差 Δ b i = a i − b ˉ = ( δ b x i , δ b y i , δ b z i ) \Delta_{bi}=a_i-\bar{b}=(\delta b_{xi},\delta b_{yi},\delta b_{zi}) Δbi=aibˉ=(δbxi,δbyi,δbzi)
    2.3 AB的协方差:
    D A B = ( . . . Δ a i x . . . . . . Δ a i y . . . . . . Δ a i z . . . ) ( . . . . . . . . . Δ b i x Δ a i y Δ a i z . . . . . . . . . ) D_{AB}=\begin{pmatrix} ...&\Delta a_{ix}&...\\ ...&\Delta a_{iy}&...\\ ...&\Delta a_{iz}&... \end{pmatrix} \begin{pmatrix} ...&...&...\\ \Delta b_{ix}&\Delta a_{iy}&\Delta a_{iz}\\ ...&...&... \end{pmatrix} DAB=.........ΔaixΔaiyΔaiz............Δbix......Δaiy......Δaiz...
  3. 构建差模矩阵
    Q = ( t r ( D ) Δ D 23 Δ D 31 Δ D 12 Δ D 23 ∣ − ∣ Δ D 31 ∣ M ∣ Δ D 12 ∣ − ∣ ) Q=\begin{pmatrix} tr(D)&\Delta D_{23}&\Delta D_{31}&\Delta D_{12}\\ \Delta D_{23}&|&-&|\\ \Delta D_{31}&|&M&|\\ \Delta D_{12}&|&-&| \end{pmatrix} Q=tr(D)ΔD23ΔD31ΔD12ΔD23ΔD31MΔD12
    其中:
    M = [ D + D T − t r ( D ) I 33 ] M=[D+D^T-tr(D)I_{33}] M=[D+DTtr(D)I33]
    Δ D = D − D T \Delta D=D-D^T ΔD=DDT
  4. Q Q Q的主特征向量就是从 A A A B B B的旋转四元数,将该四元数转换成旋转矩阵 R R R
  5. 平移向量为 T = b ˉ − a ˉ R T=\bar{b}-\bar{a} R T=bˉaˉR

可参考

ICP算法在点云配准的应用.
matlab练习程序(对应点集配准的四元数法).

对应点集配准算法(奇异值分解)

已知点集初始位置 A A A与运动后的位置 B B B,其中 a i a_i ai是点集 A A A的任意点, b i b_i bi是点集 B B B的任意点。

  1. 先求两个点集的中心 a ˉ \bar{a} aˉ b ˉ \bar{b} bˉ
  2. 再求点集的张量和 H A B H_{AB} HAB
  3. 将张量和进行奇异值分解 H = U Σ V T H=U \Sigma V^T H=UΣVT
  4. 最佳旋转矩阵为
    R = { V U T ∣ V U T ∣ > 0 − V U T ∣ V U T ∣ < 0 R= \begin{cases} VU^T &|VU^T|>0\\-VU^T&|VU^T|<0 \end{cases} R={VUTVUTVUT>0VUT<0
  5. 最佳平移 T = b ˉ − a ˉ R T=\bar{b}-\bar{a} R T=bˉaˉR

张量的迹

两个矢量的内积是一个标量 a ⋅ b = a b T a\cdot b=ab^T ab=abT
两个矢量的外积是一个向量 a ⨂ b = a T b a\bigotimes b=a^Tb ab=aTb
所有矢量为行的形式
以三维为例
a ⋅ b = ( x a y a z a ) ⋅ ( x b y b z b ) = x a x b + y a y b + z a z b a\cdot b=\begin{pmatrix}x_a & y_a & z_a\end{pmatrix}\cdot \begin{pmatrix}x_b \\ y_b \\ z_b\end{pmatrix}=x_ax_b+y_ay_b+z_az_b ab=(xayaza)xbybzb=xaxb+yayb+zazb
a ⨂ b = ( x a y a z a ) ⋅ ( x b y b z b ) = ( x a x b x a y b x a z b y a x b y a y b y a z b y a x b y a y b y a z b ) a\bigotimes b=\begin{pmatrix}x_a \\ y_a \\ z_a\end{pmatrix}\cdot \begin{pmatrix}x_b & y_b & z_b\end{pmatrix}=\begin{pmatrix}x_ax_b & x_ay_b & x_az_b\\y_ax_b & y_ay_b & y_az_b\\ y_ax_b & y_ay_b & y_az_b\end{pmatrix} ab=xayaza(xbybzb)=xaxbyaxbyaxbxaybyaybyaybxazbyazbyazb
可知 a ⋅ b = t r ( a ⨂ b ) a\cdot b=tr(a\bigotimes b) ab=tr(ab),也就是说矢量的内积就是矢量外积的迹。
对应点群之间的距离可以如下表示
d = ∑ k = 1 n ( a k − b k ) 2 = ∑ k = 1 n ( a k − b k ) ⋅ ( a k − b k ) T / n = ∑ k = 1 n ( a k a k T − b k a k T − a k b k T + b k b k T ) / n = ∑ k = 1 n a k a k T / n + ∑ k = 1 n b k b k T / n − 2 ∑ k = 1 n a k b k T / n d=\sum_{k=1}^n (a_k-b_k)^2=\sum_{k=1}^n (a_k-b_k)\cdot (a_k-b_k)^T/n\\=\sum_{k=1}^n(a_ka_k^T-b_ka_k^T-a_kb_k^T+b_kb_k^T)/n\\ =\sum_{k=1}^na_ka_k^T/n+\sum_{k=1}^nb_kb_k^T/n-2\sum_{k=1}^na_kb_k^T/n d=k=1n(akbk)2=k=1n(akbk)(akbk)T/n=k=1n(akakTbkakTakbkT+bkbkT)/n=k=1nakakT/n+k=1nbkbkT/n2k=1nakbkT/n
也就是说 ∑ k = 1 n a k b k T \sum_{k=1}^na_kb_k^T k=1nakbkT越大,两个对应点群的距离就越小。 ∑ k = 1 n a k b k T \sum_{k=1}^na_kb_k^T k=1nakbkT其实就是两个点群对应点的内积之和,根据前面的所述内积与外积的关系,他也就是外积和的迹
∑ k = 1 n a k b k T = t r ( ∑ k = 1 n a k T b k ) = t r ( ∑ k = 1 n ( x a k x b k x a k y b k x a k z b k y a k x b k y a k y b k y a k z b k y a k x b k y a k y b k y a k z b k ) ) \sum_{k=1}^na_kb_k^T=tr(\sum_{k=1}^na_k^Tb_k)\\ =tr(\sum_{k=1}^n\begin{pmatrix}x_{ak}x_{bk} & x_{ak}y_{bk} & x_{ak}z_{bk}\\y_{ak}x_{bk} & y_{ak}y_{bk} & y_{ak}z_{bk}\\ y_{ak}x_{bk} & y_{ak}y_{bk} & y_{ak}z_{bk}\end{pmatrix}) k=1nakbkT=tr(k=1nakTbk)=tr(k=1nxakxbkyakxbkyakxbkxakybkyakybkyakybkxakzbkyakzbkyakzbk)
可以证明,当外积等于其奇异值矩阵时,他的迹最大。也就是说,如果外积 a ⊗ b a\otimes b ab奇异值为 Σ \Sigma Σ
Σ = ( σ x 0 0 0 σ y 0 0 0 σ z ) m a x ( t r ( a ⊗ b ) ) = σ x + σ y + σ z \Sigma=\begin{pmatrix}\sigma_x & 0 & 0\\0 & \sigma_y & 0\\0 & 0& \sigma_z\end{pmatrix}\\ max(tr(a\otimes b))=\sigma_x +\sigma_y +\sigma_z Σ=σx000σy000σzmax(tr(ab))=σx+σy+σz
如何让 a a a b b b的外积变成其奇异值呢?我们知道
H = U Σ V T H=U\Sigma V^T H=UΣVT
若有个旋转矩阵为 R = V T U R=V^TU R=VTU时,外积就是其奇异值矩阵。
我们还可以构建一个重合度的概念
ρ = 2 ∑ k = 1 n a k b k T ∑ k = 1 n a k a k T / n + ∑ k = 1 n b k b k T / n = 2 A T B A T A + B T B \rho=\frac{2\sum_{k=1}^na_kb_k^T}{\sum_{k=1}^na_ka_k^T/n+\sum_{k=1}^nb_kb_k^T/n}\\ =\frac{2A^TB}{A^TA+B^TB} ρ=k=1nakakT/n+k=1nbkbkT/n2k=1nakbkT=ATA+BTB2ATB
当点群就一个点时
ρ = 2 a T b a T a + b T b = a ⋅ b a 2 + b 2 = c o s < a , b > \rho =\frac{2a^Tb}{a^Ta+b^Tb}=\frac{a\cdot b}{a^2+b^2}=cos ρ=aTa+bTb2aTb=a2+b2ab=cos<a,b>
也就是说,对于一个点时,重合度就是矢量之间夹角的余弦值,可以用下图表示
对应点集配准算法_第1张图片
直观的理解就是当a与b的夹角越小时,两个矢量越接近重合。同理当两个点群的重合度越小时,两个点群越重合。
三维点云配准 – ICP 算法原理及推导.

你可能感兴趣的:(数学)