1. 基于边缘检测的三维跟踪建模
三维物体追踪是已知图像中某个物体在已知一系列空间三维点位置(或者是一个3D 模型面片集)的信息下,将这些点通过一个恰到好处的位姿(R,t)进行转换后投影到图像上。问题的求解目标是这个位姿(R,t),难点是并不知道这些三维点对应图像上的哪些像素点。
假如已知这个3D模型在图像对应物体具有清晰轮廓,特别是物体与背景之间有较好的灰度值区分度的(比如白色桌子上放一本MVG书),就可以利用基于边缘检测的三维物体跟踪。
令:x是重投影回去的轮廓(以下简称轮廓)上的离散点,x表示二维点。此处为方便起见,先命名x对应的三维点的坐标为 ( X , Y , Z ) (X,Y,Z) (X,Y,Z)。
令:x在垂直于轮廓方向且向内的相邻点为 x p e x_{pe} xpe,平行于轮廓的相邻点为 x p a x_{pa} xpa。
由于基于边缘检测的三维物体跟踪的最重要的特点是:垂直于边缘方向的梯度大,平行于边缘方向的梯度小,于是有:
E = 1 2 ∑ l i n e ∈ c o n t o u r ∑ x ∈ l i n e ( I ( x ) − I ( x p a ) ) 2 + ( I ( x ) − I ( x p e ) − 256 ) 2 E =\frac{1}{2} \sum_{line\in contour}\sum_{x \in line}(I(x)-I(x_{pa}))^2+(I(x) - I(x_{pe}) - 256)^2 E=21line∈contour∑x∈line∑(I(x)−I(xpa))2+(I(x)−I(xpe)−256)2
其中 ∣ I ( x ) − I ( x p a ) ∣ |I(x) - I(x_{pa})| ∣I(x)−I(xpa)∣表示梯度。
后者 ( 256 − I ( x ) − I ( x p e ) ) 2 (256-I(x) - I(x_{pe}))^2 (256−I(x)−I(xpe))2让候选点到边缘的梯度(即 I ( x ) − I ( x p e ) I(x) - I(x_{pe}) I(x)−I(xpe))尽可能大(那样对应的E才会小)。灰度值最大值一般为256。
由于前者对结果的影响很小,因此我们考虑后者即可:
E = 1 2 ∑ l i n e ∈ c o n t o u r ∑ x i ∈ l i n e ( ( I ( x i ) − I ( x i p e ) − 256 ) 2 E =\frac{1}{2} \sum_{line\in contour}\sum_{x_i \in line}((I(x_i) - I(x_i{pe}) - 256)^2 E=21line∈contour∑xi∈line∑((I(xi)−I(xipe)−256)2
**注:**在实验室常用做法中使用的是根据该marker是黑色还是白色而决定使用:
E i = 1 2 ( I ( x ) − I ( x p p e ) + 256 ) 2 ( 白 色 ) E_i = \frac{1}{2}(I(x)-I(x_{p_{pe}}) + 256) ^2(白色) Ei=21(I(x)−I(xppe)+256)2(白色)
还是 E i = 1 2 ( I ( x ) − I ( x p e ) − 256 ) 2 ( 黑 色 ) E_i = \frac{1}{2}(I(x)-I(x_{pe}) - 256)^2(黑色) Ei=21(I(x)−I(xpe)−256)2(黑色),以便让像素差更接近与0.(我们以下假设是黑色)
2. 基于模型求导
2.1 链式分解
令 f i = ( I ( x i ) − I ( x i p e ) − 256 ) f_i = (I(x_i) - I(x_i{pe}) - 256) fi=(I(xi)−I(xipe)−256),则 E = 1 2 f T f = 1 2 [ f 1 f 2 … f n ] [ f 1 f 2 … f n ] E=\frac {1}{2}f^Tf= \frac{1}{2} \begin{bmatrix} f_1& f_2&…&f_n\end{bmatrix}\begin{bmatrix} f_1\\ f_2\\…\\f_n\end{bmatrix} E=21fTf=21[f1f2…fn]⎣⎢⎢⎡f1f2