ICP(Iterative Closest Point):求一组平移和旋转使得两个点云之间重合度尽可能高。
找最近邻关联点,求解 R , t R , t R , t R , t R,tR,tR,tR,t R,tR,tR,tR,t,如此反复直到重合程度足够高。
X = { x 1 , x 2 , . . . , x N x } X=\left\{ {x_1,x_2,...,x_{Nx} }\right\} X={x1,x2,...,xNx}
Y = { y 1 , y 2 , . . . , y N y } Y=\left\{ {y_1,y_2,...,y_{Ny} } \right\} Y={y1,y2,...,yNy}
由于是变换前后对应点云,则 N x = N y Nx=Ny Nx=Ny
min E ( R , t ) = min ∑ i = 1 N x ∥ y i − ( R x i + t ) ∥ 2 \min E(R,t) = \min \sum\nolimits_{i = 1}^{Nx} {{{\left\| {{y_i} - \left( {R{x_i} + t} \right)} \right\|}^2}} minE(R,t)=min∑i=1Nx∥yi−(Rxi+t)∥2
求解使其最小的 R , t R,t R,t
min E ( R , t ) = min ∑ i = 1 N x ∥ y i − ( R x i + t ) ∥ 2 = min ∑ i = 1 N x ∥ y i − R x i − t − μ y + R μ x + μ y − R μ x ∥ 2 \begin{aligned} \min E(R,t) &= \min \sum\nolimits_{i = 1}^{Nx} {{{\left\| {{y_i} - \left( {R{x_i} + t} \right)} \right\|}^2}} \\ &= \min \sum\nolimits_{i = 1}^{Nx} {{{\left\| {{y_i} - R{x_i} - t - {\mu _y} + R{\mu _x} + {\mu _y} - R{\mu _x}} \right\|}^2}} \end{aligned} minE(R,t)=min∑i=1Nx∥yi−(Rxi+t)∥2=min∑i=1Nx∥yi−Rxi−t−μy+Rμx+μy−Rμx∥2
其中
μ
x
=
∑
i
=
1
N
x
x
i
,
μ
y
=
∑
i
=
1
N
y
y
i
\mu _x = \sum\nolimits{i = 1}^{Nx} {x_i} ,\mu _y = \sum\nolimits_{i = 1}^{Ny} {y_i}
μx=∑i=1Nxxi,μy=∑i=1Nyyi
则
min
E
(
R
,
t
)
=
min
∑
i
=
1
N
x
∥
y
i
−
R
x
i
−
t
−
μ
y
+
R
μ
x
+
μ
y
−
R
μ
x
∥
2
=
min
∑
i
=
1
N
x
∥
y
i
−
μ
y
−
R
(
x
i
−
μ
x
)
+
μ
y
−
R
μ
x
−
t
∥
2
=
min
∑
i
=
1
N
x
(
∥
y
i
−
μ
y
−
R
(
x
i
−
μ
x
)
∥
2
+
∥
μ
y
−
R
μ
x
−
t
∥
2
+
2
[
y
i
−
μ
y
−
R
(
x
i
−
μ
x
)
]
T
(
μ
y
−
R
μ
x
−
t
)
)
\begin{aligned} \min E(R,t) &=\min \sum\nolimits_{i = 1}^{Nx} {{{\left\| {{y_i} - R{x_i} - t - {\mu _y} + R{\mu _x} + {\mu _y} - R{\mu _x}} \right\|}^2}} \\ &=\min \sum\nolimits_{i = 1}^{Nx} {\left\| {y_i-\mu_y-R(x_i-\mu_x)+\mu_y-R\mu_x-t}\right\|}^2 \\ &=\min \sum\nolimits_{i = 1}^{Nx} ({\left\| {y_i-\mu_y-R(x_i-\mu_x)} \right\|}^2 +{\left\|{\mu_y-R\mu_x-t}\right\|}^2 \\ &+2[y_i-\mu_y-R(x_i-\mu_x)]^T(\mu_y-R\mu_x-t)) \end{aligned}
minE(R,t)=min∑i=1Nx∥yi−Rxi−t−μy+Rμx+μy−Rμx∥2=min∑i=1Nx∥yi−μy−R(xi−μx)+μy−Rμx−t∥2=min∑i=1Nx(∥yi−μy−R(xi−μx)∥2+∥μy−Rμx−t∥2+2[yi−μy−R(xi−μx)]T(μy−Rμx−t))
其中 ∑ i = 1 N x x i − N x μ x = 0 , ∑ i = 1 N y y i − N y μ y = 0 \sum\nolimits_{i = 1}^{Nx}x_i-Nx\mu_x=0 ,\sum\nolimits_{i = 1}^{Ny}y_i-Ny\mu_y=0 ∑i=1Nxxi−Nxμx=0,∑i=1Nyyi−Nyμy=0
min E ( R , t ) = min ∑ i = 1 N x ( ∥ y i − μ y − R ( x i − μ x ) ∥ 2 + ∥ μ y − R μ x − t ∥ 2 ) \min E(R,t) =\min \sum\nolimits_{i = 1}^{Nx} ({\left\| {y_i-\mu_y-R(x_i-\mu_x)} \right\|}^2 +{\left\|{\mu_y-R\mu_x-t}\right\|}^2) minE(R,t)=min∑i=1Nx(∥yi−μy−R(xi−μx)∥2+∥μy−Rμx−t∥2)
这样第一项中只含有变量 R R R,第二项含有 R , t R,t R,t,求整体的最小值可以使第一项的值最小,将得到的 R R R,带入第二项中,再使第二项为零求出 t t t的值。
min ∑ i = 1 N x ∥ y i − μ y − R ( x i − μ x ) ∥ 2 = min ∑ i = 1 N x ∥ y i ′ − R x i ′ ∥ 2 = min ∑ i = 1 N x ( y i ′ − R x i ′ ) T ( y i ′ − R x i ′ ) = min ∑ i = 1 N x ∥ y i ′ ∥ 2 + x i ′ T R T R x i ′ − x i ′ T R T y i ′ − y i ′ T R x i ′ = min ∑ i = 1 N x ∥ y i ′ ∥ 2 + x i ′ T R T R x i ′ − 2 x i ′ T R T y i ′ \begin{aligned} \min \sum\nolimits_{i = 1}^{Nx} &{\left\| {y_i-\mu_y-R(x_i-\mu_x)} \right\|}^2=\min \sum\nolimits_{i = 1}^{Nx} {\left\| {y_i'-Rx_i'} \right\|}^2 \\ &=\min \sum\nolimits_{i = 1}^{Nx} {(y_i'-Rx_i')^T(y_i'-Rx_i')} \\ &=\min \sum\nolimits_{i = 1}^{Nx} {\left\| y_i' \right\|}^2+x_i'^TR^TRx_i'-x_i'^TR^Ty_i'-y_i'^TRx_i' \\ &=\min \sum\nolimits_{i = 1}^{Nx} {\left\| y_i' \right\|}^2+x_i'^TR^TRx_i'-2x_i'^TR^Ty_i' \end{aligned} min∑i=1Nx∥yi−μy−R(xi−μx)∥2=min∑i=1Nx∥yi′−Rxi′∥2=min∑i=1Nx(yi′−Rxi′)T(yi′−Rxi′)=min∑i=1Nx∥yi′∥2+xi′TRTRxi′−xi′TRTyi′−yi′TRxi′=min∑i=1Nx∥yi′∥2+xi′TRTRxi′−2xi′TRTyi′
求解原函数最小值等同于求解: min ∑ i = 1 N x − x i ′ T R T y i ′ \min \sum\nolimits_{i = 1}^{Nx}{-x_i'^TR^Ty_i'} min∑i=1Nx−xi′TRTyi′
等同于求解: max ∑ i = 1 N x x i ′ T R T y i ′ \max \sum\nolimits_{i = 1}^{Nx}{x_i'^TR^Ty_i'} max∑i=1Nxxi′TRTyi′
max ∑ i = 1 N x x i ′ T R T y i ′ = max T r a c e ( ∑ i = 1 N x R x i ′ y i ′ T ) = max T r a c e ( R H ) \max \sum\nolimits_{i = 1}^{Nx}{x_i'^TR^Ty_i'}=\max Trace\left( {\sum\nolimits_{i = 1}^{Nx}{Rx_i'y_i'^T}} \right)=\max Trace(RH) max∑i=1Nxxi′TRTyi′=maxTrace(∑i=1NxRxi′yi′T)=maxTrace(RH)
由定理可知对于正定矩阵 A A T AA^T AAT和任意正交矩阵 B B B,有: T r ( A A T ) ≥ T r ( B A A T ) Tr(AA^T) \ge Tr(BAA^T) Tr(AAT)≥Tr(BAAT)
则对矩阵 H H H进行SVD分解:
H = U Σ V T H=U\Sigma V^T H=UΣVT
取 R = V U T R=VU^T R=VUT,则由定理得到此时的 R R R使得原式最大
再对应求解: t = μ y − R μ x t=\mu_y-R\mu_x t=μy−Rμx
将ICP构建成一个优化问题
F ( x ) = ∑ i = 1 n ∥ x i − T y i ∥ 2 2 F(x)=\sum\nolimits_{i = 1}^{n}{\left\| x_i-Ty_i \right\|}_2^2 F(x)=∑i=1n∥xi−Tyi∥22
其中 T T T为位姿变换矩阵
T = [ R t 0 1 ] T = {\begin{bmatrix} R&{\rm{t}}\\ 0&1 \end{bmatrix}} T=[R0t1]
求解优化问题需要构建残差约束并计算雅可比矩阵,这里的残差为 x i − T y i x_i-Ty_i xi−Tyi(可以理解为为变换后的点云与目标待配准点云之间的差异),计算雅可比矩阵可以使用李代数的方法对目标函数求导。
对于一个目标函数 F ( X ) = ∥ f ( X ) ∥ 2 F(X)= {\left\| f(X) \right\|}^2 F(X)=∥f(X)∥2,其中 F : R n → R m , X ∈ R n F:\mathbb{R}^n \to \mathbb{R}^m ,X \in \mathbb{R}^n F:Rn→Rm,X∈Rn ,需要求解 X X X使得目标函数 F ( X ) F(X) F(X) 取值最小。如果 f ( X ) f(X) f(X)为线性函数,则可以简化为最小二乘问题,可以求得最优解,但 f ( X ) f(X) f(X)为非线性函数则无法直接求解,需要迭代求解。
F ( X + Δ X ) = ∥ f ( X + Δ X ) ∥ 2 F(X+\Delta X)= {\left\| f(X+\Delta X) \right\|}^2 F(X+ΔX)=∥f(X+ΔX)∥2
迭代求 Δ X \Delta X ΔX使得 F ( X + Δ X ) F(X+\Delta X) F(X+ΔX)减小,直到其足够小并接近最小值时停止。
那么 Δ X \Delta X ΔX的取值该如何确定?
对 F ( X + Δ X ) F(X+\Delta X) F(X+ΔX)进行Taylor Expansion得到:
F ( X + Δ X ) = F ( X ) + J F Δ X + 1 2 Δ X T H F Δ X + O ( Δ X ) F(X+\Delta X)=F(X)+J_F\Delta X+\frac{1}{2}\Delta X^TH_F\Delta X+O(\Delta X) F(X+ΔX)=F(X)+JFΔX+21ΔXTHFΔX+O(ΔX)
只取到二阶项,其中 J J J为 F F F的雅可比矩阵, H H H为海塞矩阵, O ( Δ X ) O(\Delta X) O(ΔX)为忽略的高阶项。
雅可比矩阵定义:
有矩阵函数 F ( X ) F(X) F(X),其中 F : R n → R m , X ∈ R n F:\mathbb{R}^n \to \mathbb{R}^m ,X \in \mathbb{R}^n F:Rn→Rm,X∈Rn
J F = ∂ F ( X ) ∂ X T J_F=\frac{\partial F(X)}{\partial X^T} JF=∂XT∂F(X)
使等式对 Δ X \Delta X ΔX求导为 0 0 0得到:
∂ F ( X + Δ X ) ∂ Δ X = J F + H F Δ X = 0 \frac{\partial F(X+\Delta X)}{\partial \Delta X}=J_F+H_F\Delta X=0 ∂ΔX∂F(X+ΔX)=JF+HFΔX=0
由此得到 Δ X \Delta X ΔX的取值。
F ( X + Δ X ) = ∥ f ( X + Δ X ) ∥ 2 F(X+\Delta X)= {\left\| f(X+\Delta X) \right\|}^2 F(X+ΔX)=∥f(X+ΔX)∥2
对 f ( X + Δ X ) f(X+\Delta X) f(X+ΔX)进行Taylor Expansion得到:
f ( X + Δ X ) = f ( X ) + J f Δ X + O ( Δ X ) f(X+\Delta X)=f(X)+J_f\Delta X+O(\Delta X) f(X+ΔX)=f(X)+JfΔX+O(ΔX)
只取到一阶项。
F ( X + Δ X ) = ∥ f ( X + Δ X ) ∥ 2 = ( f ( X ) + J f Δ X ) T ( f ( X ) + J f Δ X ) = ∥ f ( X ) ∥ 2 + Δ X T J f T J f Δ X + Δ X T J f T f ( X ) + f ( X ) T J f Δ X = ∥ f ( X ) ∥ 2 + Δ X T J f T J f Δ X + 2 f ( X ) T J f Δ X \begin{aligned} F(X+\Delta X) &= {\left\| f(X+\Delta X) \right\|}^2 \\ &= (f(X)+J_f\Delta X)^T(f(X)+J_f\Delta X) \\ &={\left\| f(X) \right\|}^2+\Delta X^TJ_f^TJ_f\Delta X+\Delta X^TJ_f^Tf(X)+f(X)^TJ_f\Delta X \\ &={\left\| f(X) \right\|}^2+\Delta X^TJ_f^TJ_f\Delta X+2f(X)^TJ_f\Delta X \end{aligned} F(X+ΔX)=∥f(X+ΔX)∥2=(f(X)+JfΔX)T(f(X)+JfΔX)=∥f(X)∥2+ΔXTJfTJfΔX+ΔXTJfTf(X)+f(X)TJfΔX=∥f(X)∥2+ΔXTJfTJfΔX+2f(X)TJfΔX
使等式对 Δ X \Delta X ΔX求导等于 0 0 0得到:
∂ F ( X + Δ X ) ∂ Δ X = 2 J f T J f Δ X + 2 f ( X ) T J f = 0 \frac{\partial F(X+\Delta X)}{\partial \Delta X}=2J_f^TJ_f\Delta X+2f(X)^TJ_f=0 ∂ΔX∂F(X+ΔX)=2JfTJfΔX+2f(X)TJf=0
可以求得
J f T J f Δ X = − f ( X ) T J f J_f^TJ_f\Delta X=-f(X)^TJ_f JfTJfΔX=−f(X)TJf
因篇幅问题不能全部显示,请点此查看更多更全内容