Locality Preserving Matching


代码:https://github.com/jiayi-ma/LPM
本文在已经通过SIFT描述子等方法得到两个特征集合的候选匹配关系之后,剔除错误的匹配。

代价函数的构造

理想情况下的代价函数

对于变换是简单的刚性变换,并且不改变特征之间的距离的情况,代价函数定义如下:
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,λ)=iIjI(d(xi,xj)d(yi,yj))2+λ(NI)
其中 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,λ)=iI2K1(jxjNxi(d(xi,xj)d(yi,yj))2+jyjNyi(d(xi,xj)d(yi,yj))2)+λ(NI)
其中, 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,xjNxixj/Nxi,d(yi,yj)={0,1,yjNyiyj/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=1NKpijxjNXid(yi,yj)+λ(Ni=1Npi)

邻域拓扑改进

之前只考虑了是否在变换前都是邻域点,没有考虑邻域内变换的一致性。 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}vivj(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(jxjNxid(yi,yj)+jxjNxi,yjNyid(vi,vj))+λ(Ni=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=1NMpim=1MKm1(jxjNxiKmd(yi,yj)+jxjNxiKm,yjNyiKmd(vi,vj))+λ(Ni=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=1Npi(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=1MMKm1jxjNxiKmd(yi,yj)+jxjNxiKm,yjNyiKmd(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)

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值