标准KLT
KLT是属于光流法的一种,它的前提假设是:
亮度恒定
时间连续或者是运动是“小运动”
空间一致,临近点有相似运动,保持相邻
很直观的说,如果判断一个视频的相邻两帧I , J I,J I , J 在某局部窗口W W W 上是一样的,则在窗口W W W 内有:I ( x , y , t ) = J ( x ′ , y ′ , t + τ ) I(x,y,t) = J(x', y', t+\tau ) I ( x , y , t ) = J ( x ′ , y ′ , t + τ ) ,亮度恒定的假设(假设1)即为了保证其等号成立不受亮度的影响,假设2是为了保证KLT能找到点,假设3则为了尽量保证对于同一窗口中,所有点的偏移量都相等。
标准KLT的亮度假设可以表示为下式:(1) J ( x + d X 2 ) − I ( x − d X 2 ) = 0
J(x+\frac{dX}2) - I(x-\frac{dX}2)=0 \tag{1}
J ( x + 2 d X ) − I ( x − 2 d X ) = 0 ( 1 )
其中J J J 和I I I 是相邻两帧的图像,X = [ x , y ] T X = [x,y]^T X = [ x , y ] T 是对应的特征点,若考虑特征点周围的图像块P P P 则可以通过下式来求特征点的位移:∑ X ∈ P [ s x 2 s x s y s x s y s y 2 ] [ d x d y ] = 2 ∑ x ∈ P [ ( I ( X ) − J ( X ) ) s x ( I ( X ) − J ( X ) ) s y ]
\sum_{X\in P}\left[ \begin{matrix} s_x^2 & s_xs_y \\ s_xs_y & s_y^2 \end{matrix}\right]\left[ \begin{matrix} dx \\ dy \end{matrix}\right] = 2\sum_{x\in P}\left[ \begin{matrix} (I(X) - J(X))s_x \\ (I(X)-J(X))s_y \end{matrix}\right]
X ∈ P ∑ [ s x 2 s x s y s x s y s y 2 ] [ d x d y ] = 2 x ∈ P ∑ [ ( I ( X ) − J ( X ) ) s x ( I ( X ) − J ( X ) ) s y ]
其中s x = J x + I x , s y = J y + I y J x = ∂ J ( X ) ∂ x , J y = ∂ J ( X ) ∂ y , I x = ∂ I ( X ) ∂ x , I y = ∂ I ( X ) ∂ y
s_x = J_x + I_x, s_y = J_y + I_y \\
J_x = \frac{\partial J(X) }{\partial x} , J_y = \frac{\partial J(X) }{\partial y}, I_x = \frac{\partial I(X) }{\partial x}, I_y = \frac{\partial I(X) }{\partial y}
s x = J x + I x , s y = J y + I y J x = ∂ x ∂ J ( X ) , J y = ∂ y ∂ J ( X ) , I x = ∂ x ∂ I ( X ) , I y = ∂ y ∂ I ( X )
具有一定亮度鲁棒性的GRKLT
但是在实际应用的时候,我们并不能保证KLT的假设1是成立的,我们经常会遇到一些场景,亮度会突然有一个变化(变亮或者变暗)。参考论文[1]1 中的考虑了两幅图像的曝光差异的光流跟踪则会对亮度的变化有一定的鲁棒性。
我们先来介绍一下这种方法为什么会对亮度有一定的鲁棒性的原理。首先,标准的KLT只考虑了两幅图像对应点之间的灰度值的差异,所以当亮度变化的时候,标准的KLT就跟踪效果没有那么好。而GRKLT则在考虑基本假设的时候就考虑到了两幅图像之间的曝光差异,也就是考虑了两幅图像之间会有亮度的变化。
首先不同与标准KLT的基本方程(1),GRKLT的基本假设如下式所示:(2) g ( J ( x 2 ) ) − g ( I ( x 1 ) ) = K
g(J(x_2)) - g(I(x_1)) = K \tag{2}
g ( J ( x 2 ) ) − g ( I ( x 1 ) ) = K ( 2 )
其中响应函数g g g 是辐射响应函数的对数逆( l o g f − 1 ) (log f^{-1}) ( l o g f − 1 ) ,K是两幅图像曝光比的对数。我们简单的认为,g g g 是响应函数,K K K 是两幅图像的曝光差异。
首先考虑了当已知相机的响应函数g g g 时,跟踪特征和估计两幅图像之间曝光差K的方法。对于位移为d x dx d x 的特征x x x ,可以得到下式g ( J ( x + d x 2 ) ) − g ( I ( x + d x 2 ) ) = K
g(J(x+\frac{dx}2)) - g(I(x+\frac{dx}2)) = K
g ( J ( x + 2 d x ) ) − g ( I ( x + 2 d x ) ) = K
对图像进行泰勒展开,然后对响应函数进行线性化处理:g ( J ( x ) + ∇ J ( x ) T d x 2 ) − g ( I ( x ) − ∇ I ( x ) T d x 2 ) = K
g(J(x)+ \nabla J(x)^T \frac{dx}2) - g(I(x)- \nabla I(x)^T \frac{dx}2) = K
g ( J ( x ) + ∇ J ( x ) T 2 d x ) − g ( I ( x ) − ∇ I ( x ) T 2 d x ) = K
使得J ( x ) = J , I ( x ) = I J(x) = J,I(x) = I J ( x ) = J , I ( x ) = I ,g ′ g' g ′ 是g g g 的导数g ( J ( x ) + g ′ ( x ) ∇ J d x 2 ) − [ g ( I ( x ) − g ′ ( I ) ∇ I T d x 2 ) ] − K = 0
g(J(x)+ g'(x)\nabla J^ \frac{dx}2) - [g(I(x)-g'(I) \nabla I^T \frac{dx}2) ] - K =0
g ( J ( x ) + g ′ ( x ) ∇ J 2 d x ) − [ g ( I ( x ) − g ′ ( I ) ∇ I T 2 d x ) ] − K = 0
假设每个特征P i P_i P i 周围的图像块的所有像素的位移相等,每个特征的位移[ d x i , d y i ] T [dx_i,dy_i]^T [ d x i , d y i ] T 和曝光差K K K ,通过最小化以下误差函数来估计:E ( d x i , d y i , K ) = ∑ x ∈ P i ( β + a d x i 2 + b d y i 2 − K ) 2
E(dx_i,dy_i,K)=\sum_{x\in P_i}(\beta + a\frac{dx_i}2 + b\frac{dy_i}2 -K)^2
E ( d x i , d y i , K ) = x ∈ P i ∑ ( β + a 2 d x i + b 2 d y i − K ) 2
其中a = g ′ ( J ( x ) ) J x + g ′ ( I ( x ) ) I x b = g ′ ( J ( x ) ) J y + g ′ ( I ( x ) ) I y β = g ( J ( x ) ) + g ( I ( x ) )
a= g'(J(x))J_x + g'(I(x))I_x \\
b= g'(J(x))J_y + g'(I(x))I_y \\
\beta = g(J(x)) + g(I(x))
a = g ′ ( J ( x ) ) J x + g ′ ( I ( x ) ) I x b = g ′ ( J ( x ) ) J y + g ′ ( I ( x ) ) I y β = g ( J ( x ) ) + g ( I ( x ) )
当朝向未知数的所有偏导数为零时,误差函数被最小化。因此,需要针对每个特征求以下等式。(3) [ U i w i w i T λ i ] ⎵ A i z i = [ v i m i ]
\underbrace{
\left[ \begin{matrix}
U_i & w_i \\
w_i^T & \lambda_i
\end{matrix} \right]
}_{A_i}z_i =
\left[ \begin{matrix}
v_i \\
m_i
\end{matrix} \right] \tag{3}
A i [ U i w i T w i λ i ] z i = [ v i m i ] ( 3 ) U i = [ 1 2 ∑ P i a 2 1 2 ∑ P i a b 1 2 ∑ P i a b 1 2 ∑ P i b 2 ] w i = [ − ∑ P i a − ∑ P i b ] , λ i = ∑ P i 2 v i = [ − ∑ P i β a − ∑ P i β b ] , m i = 2 ∑ P i β z i = [ d x i , d y i , K ] T
U_i = \left[ \begin{matrix}
\frac{1}2\sum_{P_i}a^2 & \frac{1}2\sum_{P_i}ab \\
\frac{1}2\sum_{P_i}ab & \frac{1}2\sum_{P_i}b^2
\end{matrix}\right] \\
w_i = \left[ \begin{matrix}
-\sum_{P_i}a \\
-\sum_{P_i}b
\end{matrix}\right] , \lambda_i = \sum_{P_i}2 \\
v_i = \left[ \begin{matrix}
-\sum_{P_i}\beta a \\
-\sum_{P_i}\beta b
\end{matrix}\right] , m_i = 2\sum_{P_i} \beta \\
z_i = [dx_i, dy_i, K]^T
U i = [ 2 1 ∑ P i a 2 2 1 ∑ P i a b 2 1 ∑ P i a b 2 1 ∑ P i b 2 ] w i = [ − ∑ P i a − ∑ P i b ] , λ i = P i ∑ 2 v i = [ − ∑ P i β a − ∑ P i β b ] , m i = 2 P i ∑ β z i = [ d x i , d y i , K ] T
为了方便计算,我们对(3)式左乘下式[ I 0 − w T v − 1 1 ]
\left[ \begin{matrix}
I & 0 \\
-w^Tv^{-1} & 1
\end{matrix}\right]
[ I − w T v − 1 0 1 ]
得到[ U w 0 − w T U − 1 w + λ ] z = [ v − w T U − 1 v + m ]
\left[ \begin{matrix}
U & w \\
0 & -w^TU^{-1}w+ \lambda
\end{matrix} \right]
z =
\left[ \begin{matrix}
v \\
-w^TU^{-1}v+m
\end{matrix} \right]
[ U 0 w − w T U − 1 w + λ ] z = [ v − w T U − 1 v + m ]
然后我们求解( − w T U − 1 w + λ ) K = − w T U − 1 v + m
(-w^TU^{-1}w+ \lambda )K = -w^TU^{-1}v+m
( − w T U − 1 w + λ ) K = − w T U − 1 v + m
可以得到K,最后求解下面方程,就可以得到更新的d x , d y d_x,d_y d x , d y U i [ d x i d y i ] = v i − K w i
U_i \left[\begin{matrix}
dx_i \\ dy_i
\end{matrix}\right] = v_i - Kw_i
U i [ d x i d y i ] = v i − K w i
在我实际对比的时候,当两帧图像之间的亮度差值较大的时候,也就是K的值在-0.3左右的时候(此时两幅图像的亮度差值应该在0.7倍的时候)GRKLT任然可以跟踪的比较鲁棒,如下面几张图所示。当平时亮度变化不明显的时候,K的值一般在0左右。
标准KLT在亮度变化时的跟踪结果
S. K. Kim, D. Gallup, J. Frahm, M. Pollefeys, ”Joint Radiometric Calibration and Feature Tracking for an Adaptive Stereo System.” Computer Vision and Image Understanding, Vol. 114, pp. 574-582, May, 2010. ↩︎