[AdaLAM: Revisiting Handcrafted Outlier Detection](https://arxiv.org/pdf/2006.04250.pdf)
核心步骤:
对应文中(Hierarchical Adaptive Affine Verification)
两张图片观测同一平面会使得 落在同一平面上的特征点具有单应性,可以在图像空间中利用仿射变换进行很好的近似。该仿射变换提供了较强的几何约束,通过这个几何约束可以滤除外点。
上述假设往往因为以下原因不成立:
目标: 选择一组置信度较高且分布较好的关键点作为种子点
选择方法: 首先给关键点分配一个置信度分数(confident score),对于置信分数较低的点做半径R为圆内的局部非极大值抑制(local non-maximum suppression),如果该点为极大值,那么将会被人为是种子点(seed point)。其中分数由 ratio-test给出(PS: 计算匹配时其实时从1对多的点对匹配中找到描述子距离最小的作为最终匹配结果,而ratio-test给的分数指的是 score = 最小距离/次小距离 这个分数越小,说明这个点没有其他模棱两可的备胎,也就时置信度越高)
ratio-test 需要了解
文中用 correspondence描述 匹配关系,下文翻译成 匹配对
令:
S i = ( X 1 S i , X 2 S i ) S_i = (X_1^{S_i},X_2^{S_i}) Si=(X1Si,X2Si)
表示种子点对的相似关系,包含一个相似变换(similarity transformation)
a S i = a 1 s i − a 2 S i σ S i = σ 1 S i / σ 2 S i 其 中 a S i 表 示 o r i e n t a t i o n , σ S i 表 示 S c a l e a^{S_i} = a_1^{s_i}-a_2^{S_i} \\ \sigma^{S_i} = \sigma_1^{S_i}/\sigma_2^{S_i}\\其中a^{S_i}表示orientation ,\sigma^{S_i} 表示Scale aSi=a1si−a2SiσSi=σ1Si/σ2Si其中aSi表示orientation,σSi表示Scale
同时:
N i ∈ M \mathcal{N_i}\in \mathcal{M} Ni∈M
表示落在种子点i附近的匹配关键点, 当满足以下关系时:
∥ X i S i − X 1 ∥ ≤ λ R 1 ∧ ∥ X 2 S i − X 2 ∥ ≤ λ R 2 ∣ a S i − a p ∣ ≤ t a ∧ ∣ l n ( σ S i σ p ) ∣ ≤ t σ \Vert X_i^{S_i}-X_1\Vert \le \lambda{R_1} \land \Vert X_2^{S_i}-X_2\Vert\le \lambda{R_{2}}\\ \lvert a^{S_i}-a^{p}\rvert \le t_a\land\lvert ln(\frac{\sigma^{S_i}}{\sigma^p})\rvert \le t_{\sigma} ∥XiSi−X1∥≤λR1∧∥X2Si−X2∥≤λR2∣aSi−ap∣≤ta∧∣ln(σpσSi)∣≤tσ
其中:
( p 1 , p 2 ) = ( ( X 1 , d 1 , a 1 , σ 1 ) , ( X 2 , d 2 , a 2 , σ 2 ) ) ∈ M a p = a 2 − a 1 , σ p = σ 2 / σ 1 t a , t σ 表 示 o r i e n t a t i o n 和 s c a l e 的 置 信 阈 R 1 , R 2 为 寻 找 与 种 子 点 相 关 关 键 点 的 半 径 , λ 是 一 个 超 参 数 (p_1,p_2) = ((X_1,d_1,a_1,\sigma_1),(X_2,d_2,a_2,\sigma_2))\in \mathcal{M}\\ a^p = a_2-a_1, \sigma^p = \sigma_2/\sigma_1\\ t_a,t_{\sigma}表示orientation和scale的置信阈\\ R_1,R_2为寻找与种子点相关关键点的半径,\lambda是一个超参数 (p1,p2)=((X1,d1,a1,σ1),(X2,d2,a2,σ2))∈Map=a2−a1,σp=σ2/σ1ta,tσ表示orientation和scale的置信阈R1,R2为寻找与种子点相关关键点的半径,λ是一个超参数
上述公式的逻辑是,根据seed point及其对应半径,查找一组临近点 N \mathcal{N} N,对于 N \mathcal{N} N内的所有匹配点进行orientation和scale的验证,从而确定该点是否与seed point是一致的,进而过滤掉一部分不一致点.
对于每组邻近点 N i ∈ M \mathcal{N_i}\in \mathcal{M} Ni∈M,采用RANSAC算法来找到一个仿射变换矩阵 A i j A_i^{j} Aij其中j表示第k次迭代。残差方程如下:
r k ( A i j ) = ∥ A i j X 1 k − X 2 k ∥ r_k(A^j_i) = \lVert A^j_iX_1^k-X_2^k\rVert rk(Aij)=∥AijX1k−X2k∥
文中提到,仿射矩阵指示描述两帧之间位姿关系的一部分,因此没法给残差项设定一个固定阈值去判断这些点是否为内点,受到这篇论文 的启发。
如果 H o \mathcal{H_o} Ho是一个包含统一外点的假设,我们将 r k r_k rk映射到一个 confidence measure c k c_k ck 上 <–看不懂,要看引用文献:
c k ( R ) = P E H o [ P ] = P ∣ R ∣ r k 2 R 2 2 c_k(\mathcal{R}) = \frac{P}{\Bbb{E}_{\mathcal{H}_o}[P]}=\frac{P}{\lvert\mathcal{R}\rvert \frac{r^2_k}{R^2_2}} ck(R)=EHo[P]P=∣R∣R22rk2P
其中 P P P是当假设匹配对 k k k为最坏匹配点对时,内点的数量, R \mathcal{R} R是一组残差,如果从0开始对k进行标序,那么 P = k + 1 P=k+1 P=k+1
这部分算是本论文比较核心的部分,需要细看引用文献
这里给出一些实现的细节,首先说了利用GPU对每个种子点及其附近点 N \mathcal{N} N计算RANSAC,并且由于在邻近点选择的时候不受其他种子点的影响,因此也会用GPU做并行计算加速。
R = w h π r a R = \sqrt{\frac{wh}{\pi r_a}} R=πrawh
其中 r a = 100 , w h 为 图 像 面 积 , 超 参 数 λ = 4 ra=100, wh为图像面积,超参数\lambda = 4 ra=100,wh为图像面积,超参数λ=4,RANSAC迭代次数被固定为128,对于SIFT关键点, t σ = 1.5 , t a = 3 0 o 另 外 , t c = 200 t_\sigma=1.5,t_a = 30^{\mathrm{o}}另外,t_c=200 tσ=1.5,ta=30o另外,tc=200<–暂不清楚