对于变换是简单的刚性变换,并且不改变特征之间的距离的情况,代价函数定义如下:
I ∗ = arg min I C ( I ; S , λ ) \mathcal{I}^{*}=\arg \min _{\mathcal{I}} C(\mathcal{I} ; S, \lambda) I∗=argIminC(I;S,λ)
C ( I ; S , λ ) = ∑ i ∈ I ∑ j ∈ I ( d ( x i , x j ) − d ( y i , y j ) ) 2 + λ ( N − ∣ I ∣ ) C(\mathcal{I} ; S, \lambda)=\sum_{i \in \mathcal{I}} \sum_{j \in \mathcal{I}}\left(d\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)-d\left(\mathbf{y}_{i}, \mathbf{y}_{j}\right)\right)^{2}+\lambda(N-|\mathcal{I}|) C(I;S,λ)=i∈I∑j∈I∑(d(xi,xj)−d(yi,yj))2+λ(N−∣I∣)
其中 S = { ( x i , y i ) } i = 1 N S=\left\{\left(\mathbf{x}_{i}, \mathbf{y}_{i}\right)\right\}_{i=1}^{N} S={ (xi,yi)}i=1N表示在两张图片上提取的特征; I \mathcal{I} I表示内点集; d d d表示两个特征值之间的距离,比如欧几里得距离; ∣ ⋅ ∣ |\cdot| ∣⋅∣表示集合的基数。
在理想情况下,第一项特征之间的距离应该为0。
在考虑到邻域结构在变换前后往往能够保持不变,对代价函数进行调整:
C ( I ; S , λ ) = ∑ i ∈ I 1 2 K ( ∑ j ∣ x j ∈ N x i ( d ( x i , x j ) − d ( y i , y j ) ) 2 + ∑ j ∣ y j ∈ N y i ( d ( x i , x j ) − d ( y i , y j ) ) 2 ) + λ ( N − ∣ I ∣ ) \begin{array}{l} C(\mathcal{I} ; S, \lambda)=\sum_{i \in \mathcal{I}} \frac{1}{2 K}\left(\sum_{j | \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{x}_{i}}}\left(d\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)-d\left(\mathbf{y}_{i}, \mathbf{y}_{j}\right)\right)^{2}\right. \\ \left.+\sum_{j | \mathbf{y}_{j} \in \mathcal{N}_{\mathbf{y}_{i}}}\left(d\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)-d\left(\mathbf{y}_{i}, \mathbf{y}_{j}\right)\right)^{2}\right)+\lambda(N-|\mathcal{I}|) \end{array} C(I;S,λ)=∑i∈I2K1(∑j∣xj∈Nxi(d(xi,xj)−d(yi,yj))2+∑j∣yj∈Nyi(d(xi,xj)−d(yi,yj))2)+λ(N−∣I∣)
其中, N x \mathcal{N}_{\mathbf{x}} Nx表示 x \mathbf{x} x的邻域, K K K表示邻域的基数。引入对于对是否是内点的判断函数 p i p_{i} pi,1表示是内点,0表示是外点。由于特征之间的距离在变换之后可能发生变化,将距离函数改为对于点是否在邻域中的判断函数:
d ( x i , x j ) = { 0 , x j ∈ N x i 1 , x j ∉ N x i , d ( y i , y j ) = { 0 , y j ∈ N y i 1 , y j ∉ N y i d\left(\mathbf{x}_{i}, \mathbf{x}_{j}\right)=\left\{\begin{array}{ll}0, & \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{x}_{i}} \\1, & \mathbf{x}_{j} \notin \mathcal{N}_{\mathbf{x}_{i}}\end{array}\right. , d\left(\mathbf{y}_{i}, \mathbf{y}_{j}\right)=\left\{\begin{array}{ll} 0, & \mathbf{y}_{j} \in \mathcal{N}_{\mathbf{y}_{i}} \\ 1, & \mathbf{y}_{j} \notin \mathcal{N}_{\mathbf{y}_{i}} \end{array}\right. d(xi,xj)={ 0,1,xj∈Nxixj∈/Nxi,d(yi,yj)={ 0,1,yj∈Nyiyj∈/Nyi
这样就可以将代价函数简化为:
C ( p ; S , λ ) = ∑ i = 1 N p i K ∑ j ∣ x j ∈ N X i d ( y i , y j ) + λ ( N − ∑ i = 1 N p i ) C(\mathbf{p} ; S, \lambda)=\sum_{i=1}^{N} \frac{p_{i}}{K} \sum_{j | \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{X}_{i}}} d\left(\mathbf{y}_{i}, \mathbf{y}_{j}\right)+\lambda\left(N-\sum_{i=1}^{N} p_{i}\right) C(p;S,λ)=i=1∑NKpij∣xj∈NXi∑d(yi,yj)+λ(N−i=1∑Npi)
之前只考虑了是否在变换前都是邻域点,没有考虑邻域内变换的一致性。 v i \mathbf{v}_{i} vi 表示 ( x i , y i ) \left(\mathbf{x}_{i}, \mathbf{y}_{i}\right) (xi,yi)对应的坐标差值, v i \mathbf{v}_{i} vi 和 v j \mathbf{v}_{j} vj之间的差值定义为:
s ( v i , v j ) = min { ∣ v i ∣ , ∣ v j ∣ } max { ∣ v i ∣ , ∣ v j ∣ } ⋅ ( v i , v j ) ∣ v i ∣ ⋅ ∣ v j ∣ s\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right)=\frac{\min \left\{\left|\mathbf{v}_{i}\right|,\left|\mathbf{v}_{j}\right|\right\}}{\max \left\{\left|\mathbf{v}_{i}\right|,\left|\mathbf{v}_{j}\right|\right\}} \cdot \frac{\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right)}{\left|\mathbf{v}_{i}\right| \cdot\left|\mathbf{v}_{j}\right|} s(vi,vj)=max{ ∣vi∣,∣vj∣}min{ ∣vi∣,∣vj∣}⋅∣vi∣⋅∣vj∣(vi,vj)
其中, s ( v i , v j ) ∈ [ − 1 , 1 ] s\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right) \in[-1,1] s(vi,vj)∈[−1,1], ( ⋅ , ⋅ ) (\cdot, \cdot) (⋅,⋅)表示内积,值越大相似度越大,对相似度根据阈值进行二值化:
d ( v i , v j ) = { 0 , s ( v i , v j ) ≥ τ 1 , s ( v i , v j ) < τ d\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right)=\left\{\begin{array}{l} 0, \quad s\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right) \geq \tau \\ 1, \quad s\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right)<\tau \end{array}\right. d(vi,vj)={ 0,s(vi,vj)≥τ1,s(vi,vj)<τ
改进之后的代价函数为:
C ( p ; S , λ , τ ) = ∑ i = 1 N p i K ( ∑ j ∣ x j ∈ N x i d ( y i , y j ) + ∑ j ∣ x j ∈ N x i , y j ∈ N y i d ( v i , v j ) ) + λ ( N − ∑ i = 1 N p i ) \begin{array}{l} C(\mathbf{p} ; S, \lambda, \tau)=\sum_{i=1}^{N} \frac{p_{i}}{K}\left(\sum_{j | \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{x}_{i}}} d\left(\mathbf{y}_{i}, \mathbf{y}_{j}\right)\right. \\ \left.+\sum_{j | \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{x}_{i}}, \mathbf{y}_{j} \in \mathcal{N}_{\mathbf{y}_{i}}} d\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right)\right)+\lambda\left(N-\sum_{i=1}^{N} p_{i}\right) \end{array} C(p;S,λ,τ)=∑i=1NKpi(∑j∣xj∈Nxid(yi,yj)+∑j∣xj∈Nxi,yj∈Nyid(vi,vj))+λ(N−∑i=1Npi)
由于特征在图像上分布不均匀,同时外点的比例也会变化,固定的K值不利于问题的求解。
为了解决这个问题,本文提出了多尺度邻域算法,改进之后的代价函数为:
C ( p ; S , λ , τ ) = ∑ i = 1 N p i M ∑ m = 1 M 1 K m ( ∑ j ∣ x j ∈ N x i K m d ( y i , y j ) + ∑ j ∣ x j ∈ N x i K m , y j ∈ N y i K m d ( v i , v j ) ) + λ ( N − ∑ i = 1 N p i ) \begin{array}{l} C(\mathbf{p} ; S, \lambda, \tau)=\sum_{i=1}^{N} \frac{p_{i}}{M} \sum_{m=1}^{M} \frac{1}{K_{m}}\left(\sum_{j | \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{x}_{i}}^{K_{m}}} d\left(\mathbf{y}_{i}, \mathbf{y}_{j}\right)\right. \\ \left.+\sum_{j | \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{x}_{i}}^{K_{m}}, \mathbf{y}_{j} \in \mathcal{N}_{\mathbf{y}_{i}}^{K_{m}}} d\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right)\right)+\lambda\left(N-\sum_{i=1}^{N} p_{i}\right) \end{array} C(p;S,λ,τ)=∑i=1NMpi∑m=1MKm1(∑j∣xj∈NxiKmd(yi,yj)+∑j∣xj∈NxiKm,yj∈NyiKmd(vi,vj))+λ(N−∑i=1Npi)
对代价函数进行整理,得到下式:
C ( p ; S , λ , τ ) = ∑ i = 1 N p i ( c i − λ ) + λ N C(\mathbf{p} ; S, \lambda, \tau)=\sum_{i=1}^{N} p_{i}\left(c_{i}-\lambda\right)+\lambda N C(p;S,λ,τ)=i=1∑Npi(ci−λ)+λN
其中:
c i = ∑ m = 1 M 1 M K m ( ∑ j ∣ x j ∈ N x i K m d ( y i , y j ) + ∑ j ∣ x j ∈ N x i K m , y j ∈ N y i K m d ( v i , v j ) ) \begin{aligned} c_{i}=& \sum_{m=1}^{M} \frac{1}{M K_{m}}\left(\sum_{j | \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{x}_{i}}^{K_{m}}} d\left(\mathbf{y}_{i}, \mathbf{y}_{j}\right)\right.\\ &\left.+\sum_{j | \mathbf{x}_{j} \in \mathcal{N}_{\mathbf{x}_{i}}^{K_{m}}, \mathbf{y}_{j} \in \mathcal{N}_{\mathbf{y}_{i}}^{K_{m}}} d\left(\mathbf{v}_{i}, \mathbf{v}_{j}\right)\right) \end{aligned} ci=m=1∑MMKm1⎝⎜⎛j∣xj∈NxiKm∑d(yi,yj)+j∣xj∈NxiKm,yj∈NyiKm∑d(vi,vj)⎠⎟⎞
显然可得:
p i = { 1 , c i ≤ λ 0 , c i > λ , i = 1 , … , N p_{i}=\left\{\begin{array}{l} 1, c_{i} \leq \lambda \\ 0, \quad c_{i}>\lambda \end{array}, i=1, \ldots, N\right. pi={ 1,ci≤λ0,ci>λ,i=1,…,N
由于本文的假设是邻域匹配的一致性,但在外点比较多时,使用所有点构建邻域会破坏邻域一致性。为了改善这一点,本文使用迭代的方法构建邻域:
I 0 = arg min I C ( I ; S , λ , τ ) \mathcal{I}_{0}=\arg \min _{\mathcal{I}} C(\mathcal{I} ; S, \lambda, \tau) I0=argIminC(I;S,λ,τ)
I ∗ = arg min I C ( I ; I 0 , S , λ , τ ) \mathcal{I}^{*}=\arg \min _{\mathcal{I}} C\left(\mathcal{I} ; \mathcal{I}_{0}, S, \lambda, \tau\right) I∗=argIminC(I;I0,S,λ,τ)
多次迭代的改善效果有限,本文认为 I 0 \mathcal{I}_{0} I0已经可以作为内点集的良好近似。
算法的时间和空间复杂度分别为 O ( N log N ) O(N \log N) O(NlogN)和 O ( N ) O(N) O(N)