核心思想
给定一个模板
T
T
T和一个输入
I
I
I,以及一个或多个变换
W
W
W, 求一个参数最佳的变换
W
W
W,使得下式最小化:
min
x
∑
[
I
(
W
(
x
→
,
p
→
)
)
−
T
(
x
→
)
]
2
\min_{x} \sum[I(W(\overrightarrow x,\overrightarrow p ))-T(\overrightarrow x)]^2
xmin∑[I(W(x,p))−T(x)]2
在求最优解的时候,该算法假设目前的变换参数
p
→
\overrightarrow p
p已知,并迭代的计算的增量,使得更新后的
p
→
=
p
→
+
Δ
p
→
\overrightarrow p=\overrightarrow p+\Delta \overrightarrow p
p=p+Δp 能令上式比原来更小。
则上式改写为:
min
x
∑
[
I
(
W
(
x
→
,
p
→
+
Δ
p
→
)
)
−
T
(
x
→
)
]
2
\min_{x} \sum[I(W(\overrightarrow x,\overrightarrow p+\Delta \overrightarrow p ))-T(\overrightarrow x)]^2
xmin∑[I(W(x,p+Δp))−T(x)]2
算法流程
1.初始化参数向量
p
→
\overrightarrow p
p
2.计算下式
∑
x
[
I
(
W
(
x
→
,
p
→
)
)
−
T
(
x
→
)
]
2
\sum_x[I(W(\overrightarrow x,\overrightarrow p ))-T(\overrightarrow x)]^2
x∑[I(W(x,p))−T(x)]2
及其关于
p
→
\overrightarrow p
p导数,求得参数增量向量
Δ
p
→
\Delta \overrightarrow p
Δp
3.更新
p
→
\overrightarrow p
p,
p
→
=
p
→
+
Δ
p
→
\overrightarrow p=\overrightarrow p+\Delta \overrightarrow p
p=p+Δp
4.若
Δ
p
→
\Delta \overrightarrow p
Δp小于某个小量,即当前参数向量
p
→
\overrightarrow p
p基本不变化了,那么停止迭代,否则继续2,3两步骤。
具体做法
对
I
(
W
(
x
→
,
p
→
+
Δ
p
→
)
I(W(\overrightarrow x,\overrightarrow p+\Delta \overrightarrow p )
I(W(x,p+Δp)做一阶泰勒级数展开,
则目标函数变为:
∑
x
[
I
(
W
(
x
→
,
p
→
)
)
+
Δ
I
∂
W
∂
p
→
Δ
p
→
−
T
(
x
→
)
]
2
\sum_x[I(W(\overrightarrow x,\overrightarrow p )) + \Delta I \frac{\partial{W}}{\partial \overrightarrow p}\Delta \overrightarrow p-T(\overrightarrow x)]^2
x∑[I(W(x,p))+ΔI∂p∂WΔp−T(x)]2
对其求导,并令导数为0,得到下式:
2
∑
x
[
Δ
I
∂
W
∂
p
→
]
T
[
I
(
W
(
x
→
,
p
→
)
)
+
Δ
I
∂
W
∂
p
→
Δ
p
→
−
T
(
x
→
)
]
=
0
2\sum_x[\Delta I \frac{\partial{W}}{\partial \overrightarrow p}]^T[I(W(\overrightarrow x,\overrightarrow p )) + \Delta I \frac{\partial{W}}{\partial \overrightarrow p}\Delta \overrightarrow p-T(\overrightarrow x)]=0
2x∑[ΔI∂p∂W]T[I(W(x,p))+ΔI∂p∂WΔp−T(x)]=0
对上式中的
Δ
p
→
\Delta \overrightarrow p
Δp求解即可,得到
Δ
p
→
\Delta \overrightarrow p
Δp的是的解析解:
Δ
p
→
=
H
−
1
∑
x
[
Δ
I
∂
W
∂
p
→
]
T
[
T
(
x
→
)
−
I
(
W
(
x
→
,
p
→
)
)
]
\Delta \overrightarrow p=H^{-1}\sum_x[\Delta I \frac{\partial{W}}{\partial \overrightarrow p}]^T [T(\overrightarrow x) - I(W(\overrightarrow x,\overrightarrow p ))]
Δp=H−1x∑[ΔI∂p∂W]T[T(x)−I(W(x,p))]
其中
H
=
∑
x
[
Δ
I
∂
W
∂
p
→
]
T
[
Δ
I
∂
W
∂
p
→
]
H=\sum_x[\Delta I \frac{\partial{W}}{\partial \overrightarrow p}]^T[\Delta I \frac{\partial{W}}{\partial \overrightarrow p}]
H=x∑[ΔI∂p∂W]T[ΔI∂p∂W]
Lucas-Kanade算法(前向加性算法)
迭代
-
利用变换关系 W ( x → , p → ) W(\overrightarrow x,\overrightarrow p ) W(x,p),将 T T T中各个像素点的坐标对应到 I I I中的相应的像素点的坐标,得到 I ( W ( x → , p → ) ) I(W(\overrightarrow x,\overrightarrow p )) I(W(x,p))。
即 T T T和 I ( W ( x → , p → ) ) I(W(\overrightarrow x,\overrightarrow p )) I(W(x,p))的大小尺寸(像素个数和长宽)相同。 -
计算 T ( x → ) − I ( W ( x → , p → ) ) T(\overrightarrow x) - I(W(\overrightarrow x,\overrightarrow p )) T(x)−I(W(x,p)),获得误差图像。
-
计算 I I I中与 T T T经过 W ( x → , p → ) W(\overrightarrow x,\overrightarrow p ) W(x,p)变换对应的像素点的梯度图像 Δ I \Delta I ΔI,
即计算 I ( W ( x → , p → ) ) I(W(\overrightarrow x,\overrightarrow p )) I(W(x,p))中各个点在 I I I中的梯度。
利用 W ( x → , p → ) W(\overrightarrow x,\overrightarrow p ) W(x,p),将 T T T中各个像素点的坐标对应到 I I I的梯度图像 Δ I \Delta I ΔI中各个点的坐标。 -
计算在 ( x → , p → ) (\overrightarrow x,\overrightarrow p ) (x,p)设定下的Jacobian ∂ W ∂ p → \frac{\partial{W}}{\partial \overrightarrow p} ∂p∂W,
即代入当前参数 p → \overrightarrow p p,计算 ∂ W ∂ p → \frac{\partial{W}}{\partial \overrightarrow p} ∂p∂W。
如果 x x x是二维坐标,即 ∂ W ∂ p → = [ ] \frac{\partial{W}}{\partial \overrightarrow p}=[] ∂p∂W=[],也就是说每行是对 W W W中每个分量对于 p → \overrightarrow p p的每个参数分量的导数:
W ( x → , p → ) = ( W x ( x → , p → ) , W y ( x → , p → ) ) T W(\overrightarrow x,\overrightarrow p )=(W_x(\overrightarrow x,\overrightarrow p ),W_y(\overrightarrow x,\overrightarrow p ))^T W(x,p)=(Wx(x,p),Wy(x,p))T -
计算最速梯度下降图 Δ I ∂ W ∂ p → \Delta I \frac{\partial{W}}{\partial \overrightarrow p} ΔI∂p∂W,
即利用 ∂ W ∂ p → \frac{\partial{W}}{\partial \overrightarrow p} ∂p∂W与$ Δ I \Delta I ΔI中每个像素点相乘。 -
利用上述提到的公式计算Hessian矩阵
H = ∑ x [ Δ I ∂ W ∂ p → ] T [ Δ I ∂ W ∂ p → ] H=\sum_x[\Delta I \frac{\partial{W}}{\partial \overrightarrow p}]^T[\Delta I \frac{\partial{W}}{\partial \overrightarrow p}] H=x∑[ΔI∂p∂W]T[ΔI∂p∂W] -
利用上面步骤计算得到的值,计算
∑ x [ Δ I ∂ W ∂ p → ] T [ T ( x → ) − I ( W ( x → , p → ) ) ] \sum_x[\Delta I \frac{\partial{W}}{\partial \overrightarrow p}]^T [T(\overrightarrow x) - I(W(\overrightarrow x,\overrightarrow p ))] x∑[ΔI∂p∂W]T[T(x)−I(W(x,p))] -
利用上述提到的公式计算参数向量的增量
Δ p → = H − 1 ∑ x [ Δ I ∂ W ∂ p → ] T [ T ( x → ) − I ( W ( x → , p → ) ) ] \Delta \overrightarrow p=H^{-1}\sum_x[\Delta I \frac{\partial{W}}{\partial \overrightarrow p}]^T [T(\overrightarrow x) - I(W(\overrightarrow x,\overrightarrow p ))] Δp=H−1x∑[ΔI∂p∂W]T[T(x)−I(W(x,p))] -
更新 p → \overrightarrow p p, p → = p → + Δ p → \overrightarrow p=\overrightarrow p+\Delta \overrightarrow p p=p+Δp