待补充

后续介绍不够通俗化,需要再补充介绍一下。
主要是ε−meaningful\varepsilon-meaningfulε−meaningful事件到底怎么用的没有说清楚,其实这个只是算正确匹配对。

介绍

在openMVG中,其剔除误匹配使用的是ACRANSAC,而不是RANSAC。咋一看让人十分困惑,因此仔细阅读了两篇相关的论文,现在把我对于ACRANSAC的理解阐述一下。

参考资料

http://www.ipol.im/pub/art/2012/mmm-oh/(包含论文和代码)
[1] Automatic Homographic Registration of a Pair of Images, with A Contrario Elimination of Outliers
[2] A Probabilistic Criterion to Detect Rigid Point Matches Between Two Images and Estimate the Fundamental Matrix

ACRANSAC

下边将会分为三部分进行讲解,

  • RANSAC原理及缺陷
  • ACRANSAC原理及其与RANSAC的区别
  • ACRANSAC示例

###RANSAC原理及缺陷
RANSAC是目前使用最为广泛的误匹配剔除算法,其核心思路非常简单,大致可以分为三步:

  • 随机从数据集中抽取sss组数据用于计算模型
  • 通过阈值ttt寻找内点
  • 如果迭代次数小于nnn且内点数目超出mmm,则终止迭代;反之从第一部开始迭代
    纵观上述流程,可以发现RANSAC的合理使用,有三个值至关重要,分别是阈值、迭代次数和内点数目。阈值是判断一个数据是否是内点的关键,迭代次数是保证最优模型被找到的关键,内点数据是判断模型是否最优的关键。
    如何合理选取上述三个值是使用RANSAC的关键。阈值过低和内点数目过高都有可能导致RANSAC无法找到合理的模型,而迭代次数过少又可能导致无法寻找到最优模型。因此在实际使用是通常都要针对特定问题,根据经验设置这三个值,加大了RANSAC的使用难度。

###ACRANSAC原理及其与RANSAC的区别

注意的是,此处以求解基本矩阵FFF为基础介绍。
在介绍ACRANSAC之前,首先要介绍一些概念和定义,以便后续的理解。首先mim_imi​和mi′m^{'}_imi′​是一组对应数据,则记S=(mi,mi′)i=1...nS={(m_i,m^{'}_i)}_{i=1...n}S=(mi​,mi′​)i=1...n​。

####定义1:模型FFF的评价标准如下:
αF(S)=2DAmax(m,m′)∈Sdist(m′,Fm)\alpha_F(S)=\frac{2D}{A}max_{(m,m^{'})\in S}dist(m^{'},Fm) αF​(S)=A2D​max(m,m′)∈S​dist(m′,Fm)
其中FmFmFm是对应的核线,dist是m′m^{'}m′和核线之间的欧式距离。AAA是图片的面积,DDD是对角线长度,因此2DA\frac{2D}{A}A2D​是一个归一化参数。
关于上式还有另外一种理解模式,即从概率的角度。假设m′m^{'}m′是随机均匀分布在图片上,那么其到核线的距离也是一个随机值,其概率值也可以用面积的方式来表达,如下图所示。绿色部分的面积就小于等于对角线面积乘以其到核线的距离,而白色部分就是图片的面积。

####定义2:模型FFF的残差为α\alphaα的前提是:
αF(S)≤α\alpha_F(S)\leq \alpha αF​(S)≤α
定义2的意思其实是利用SSS的一个子集(FFF对应的就是7个点)计算一个模型,然后求解出其对应的评价标准(定义1),然后这个值就是评价模型合理的依据。对比RANSAC,其实此处对应的就是阈值,一个模型计算出的残差越小,其模型的可信度自然越高。但是此处同时也引出了一个问题,对于一个SSS要穷举计算其最小残差实际上是一个不可能完成的任务。因此此处借助了RANSAC的思路,利用随机选点来计算其残差值,后续使用ACRANSAC会再加以说明。

####定义3:ε\varepsilonε-meaningful事件:记Λ\LambdaΛ为升序排列的随机变量,那么满足:
∣Λ∣⋅P[E⩽t]≤ε\begin{vmatrix} \Lambda \end{vmatrix}\cdot P\begin{bmatrix} E\leqslant t \end{bmatrix}\leq \varepsilon ∣∣​Λ​∣∣​⋅P[E⩽t​]≤ε
的事件就被称为ε\varepsilonε-meaningful事件。
从概率论的角度,ε\varepsilonε-meaningful可以当做是某件事发生的期望值。由于在ACRANSAC中,期望对应的残差和残差发生的概率,因此这个期望值越小那么模型合理的概率也就越大。后文中的推论1和推论2都是在此基础上进行的。


注意的是,此处以求解基本矩阵FFF为基础介绍。
####推理1:假设SSS中全是正确的匹配值,那么残差为α\alphaα的模型对应的ε\varepsilonε-meaningful事件为:
ε1(α,n)=3⋅(n7)⋅αn−7⩽ε\varepsilon _1(\alpha,n)=3 \cdot \binom{n}{7} \cdot \alpha ^{n-7} \leqslant \varepsilon ε1​(α,n)=3⋅(7n​)⋅αn−7⩽ε
解释一下上述公式,首先由于SSS中一共有nnn个点,且每777个点可以算出333个模型,因此总共有3⋅(n7)3\cdot\binom{n}{7}3⋅(7n​)个模型。其次要保证所有的点都满足残差为α\alphaα,则除用于计算模型的点之外n−7^{n-7}n−7点的残差都应该小于α\alphaα;根据前文提到,每一个点都是随机分布,因此每一个点符合条件的概率为α\alphaα,故所有点符合的概率为αn−7\alpha ^{n-7}αn−7。
由于前文已经提到,ε\varepsilonε期望是刻画残差大小的值,因此其值越小表面模型越合理,其精度也越高。同时不难发现,针对两个不同的模型F1F_1F1​和F2F_2F2​,我们可以利用上述点对其分别进行评价,比较那一个模型的精度更高,相比RANSAC,这是ACRANSAC的最大的优势之一。

####推理2.1:假设SSS中存在错误的匹配值,其子集SiS_iSi​(kkk个数据)的ε\varepsilonε-meaningful事件为:
ε2(α,n,k)=3(n−7)⋅(nk)⋅(k7)⋅αk−7⩽ε\varepsilon _2(\alpha,n,k)=3 (n-7)\cdot \binom{n}{k} \cdot \binom{k}{7} \cdot \alpha ^{k-7} \leqslant \varepsilon ε2​(α,n,k)=3(n−7)⋅(kn​)⋅(7k​)⋅αk−7⩽ε
其中$(n-7)\cdot \binom{n}{k} 是子集的大小和子集的可能组合数的乘积,表明可能存在的子集的数目。上式就是ACRANSAC的核心,针对不同的模型只需要计算其对应的是子集的大小和子集的可能组合数的乘积,表明可能存在的子集的数目。 上式就是ACRANSAC的核心,针对不同的模型只需要计算其对应的是子集的大小和子集的可能组合数的乘积,表明可能存在的子集的数目。上式就是ACRANSAC的核心,针对不同的模型只需要计算其对应的\varepsilon即可,并通过比较不同模型之间的即可,并通过比较不同模型之间的即可,并通过比较不同模型之间的\varepsilon $来选择最优的模型。

####推理2.2:推理2.1中的公式可以进一步抽象成一下形式:
ε2(α,n,k)=Noutcome(N−Nsample)⋅(Nk)⋅(kNsample)⋅αk−Nsample⩽ε\varepsilon _2(\alpha,n,k)=N_{outcome} (N-N_{sample})\cdot \binom{N}{k} \cdot \binom{k}{N_{sample}} \cdot \alpha ^{k-N_{sample}} \leqslant \varepsilon ε2​(α,n,k)=Noutcome​(N−Nsample​)⋅(kN​)⋅(Nsample​k​)⋅αk−Nsample​⩽ε
其中NoutcomeN_{outcome}Noutcome​表示一组数据能输出几个模型,NsampleN_{sample}Nsample​表明计算一个模型需要的最少数据量。


####ACRANSAC的用法
前文已经非常仔细的介绍了ACRANSAC的核心思想,即通过比较ε\varepsilonε来选择最优的模型,其计算思路利用伪代码的方式可以表示成如下形式:

为方便理解,此处对其再进行一次解释:

  • 首先确定ε\varepsilonε,通常取1;如果要更高精度,可以取0.001。对于α\alphaα,考虑可接收的最小距离为ddd,则α=2dDA\alpha=\frac{2dD}{A}α=A2dD​
  • 随机抽取子集SiS_iSi​用于计算对应的模型,并计算S−SiS-S_iS−Si​中点对应的残差,并将其按照升序进行排列;
  • 将其余点按照残差从大到小的排序逐步加入到SiS_iSi​中,并逐个计算NFANFANFA,最后只保留NFANFANFA最小的模型;注意残差大于ddd的点不予考虑
  • 判断模型是否合理,如果合理保存;判断循环是否结束,如果没有结束返回第一步;如果结束则退出循环,并输出最佳模型。

除此之外,ACRANSAC还有两个trick需要进行解释:

  • 为方便计算,通常使用log(NFA)log(NFA)log(NFA)代替NFANFANFA,这样可以简化计算。
  • 每次保留10%的迭代次数IterIterIter。如果当前模型的NFANFANFA小于阈值,则仅仅迭代0.1⋅Iter0.1 \cdot Iter0.1⋅Iter次;或者迭代次数达到90%后还没有找到最佳模型,则不再继续进行迭代,直接保存当前最优即可。

####区别和优点
解释到次数,已经不难发现相比RANSAC,ACRANSAC使用的参数更少,或者说ACRANSAC基本上不依靠参数设置来获取最优模型。
并且,使用ACRANSAC能够直接客观的比较两个模型的差异,从而获取最佳模型;这在RANSAC是不存在的。

###ACRANSAC示例
下文是一个利用ACRANSAC计算单应变换的示例,提供了计算结果和计算过程。
计算结果


计算过程

sift:: 1st image: 536 keypoints
sift:: 2nd image: 632 keypoints
sift:: matches: 159
Remove 25/159 duplicate matches, keeping 134nfa=-525.208 inliers=124 precision=2.01905 im1 (iter=0,sample=5,9,20,133)nfa=-573.793 inliers=130 precision=1.78031 im2 (iter=4,sample=40,130,29,112)nfa=-581.485 inliers=125 precision=1.2473 im1 (iter=13,sample=57,106,110,27)nfa=-586.776 inliers=127 precision=1.33191 im1 (iter=18,sample=98,90,43,1)nfa=-600.671 inliers=128 precision=1.23988 im2 (iter=56,sample=90,101,55,16)nfa=-606.959 inliers=128 precision=1.16957 im1 (iter=320,sample=42,132,23,71)nfa=-610.796 inliers=127 precision=1.06373 im1 (iter=659,sample=42,126,16,100)nfa=-611.263 inliers=128 precision=1.12375 im2 (iter=676,sample=55,5,59,127)
Before refinement: Average/max error: 0.537432/1.12375
After  refinement: Average/max error: 0.482015/1.1777
H=[ 1.1653 -0.113549 -526.933;  0.175622 1.12019 -62.3101;  0.000219927 -2.69926e-05 1 ]
-- Render Mosaic --
-- Render Mosaic - Image A --
-- Render Mosaic - Image B --

总结

由于刚刚看明白,有错误之处也请大家指出。

ACRANSAC之我见相关推荐

  1. ES6 Proxy 性能之我见

    ES6 Proxy 性能之我见 本文翻译自https://thecodebarbarian.com/thoughts-on-es6-proxies-performance Proxy是ES6的一个强力 ...

  2. java的不足_Java不足之我见

    Java不足之我见 作者:未知    文章来源:www.jspcn.net 发布日期:2005年01月19日 许多人都在使用Java开发程序,本人也是其中之一,作为一名 有一定软件工作经历的开发人员, ...

  3. GridView标题行换行之我见 (转)

    GridView标题行换行之我见 (转) 1.不换行: word-break:keep-all;word-wrap:normal 2.换行: word-break:break-all;word-wra ...

  4. Framework 4.0 新关键字dynamic 之我见(二)

    Hi,大家好,随着大家对VS2010的深入了解,对dynamic已经是越来越了解了,何时该用,何时不用已经非常熟悉了,原本不打算再写下去的,但感觉还有点东西需要说说,就简单再说一下吧. 原先以为dyn ...

  5. 这是我见过的GAN的最佳用法!

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 子豪 发自 凹非寺 量子位 报道 | 公众号 QbitAI 用GAN ...

  6. 风之语.甲骨文裁员之我见

    风之语.甲骨文裁员之我见 5月7日,媒体爆出甲骨文中国研发中心裁员的新闻,网上议论纷纷. 一些自媒体纷纷写文,或者分析裁员原因,或者就这个事情发表自己的看法.笔者也有关注这个事情,笔者认为,企业裁员并 ...

  7. 饶毅:中国脑计划是我见过的最差科学经费管理,中国猴计划应该缓行

    左:饶毅 右:蒲慕明 来源:饶议科学  作者:饶毅 原标题:中国猴计划应该缓行 在我国上上下下左左右右普遍对支持科学研究有广泛共识,在我国具备一定支持科学研究的经济条件的情况下,科技部正在推动最大的两 ...

  8. 《CDN 之我见》系列二:原理篇(缓存、安全)

    2019独角兽企业重金招聘Python工程师标准>>> <CDN之我见>共由三个篇章组成,分为原理篇.详解篇和陨坑篇.本篇章适合那些从未接触过.或仅了解一些 CDN 专业 ...

  9. 眼球网站经济学之我见——在网站上建立现代的经济体系

    请大家原谅我一下子发这么多文章,因为我真的是很难的有时间这么畅快的写一些东西出来了.对于挤出其他人的文章,我已经有很深的愧疚感了,真诚致歉.如果真有人觉得在这段时间内发文章不划算,可能导致自己文章被很 ...

最新文章

  1. 转:经典论文翻译导读之《Google File System》
  2. 高通android开源代码下载
  3. Tensorflow:TF模型文件(checkpoint文件夹下ckpt文件之data、index、meta)保存、模型导入、恢复并fine-tuning之详细攻略
  4. CALayer 一些简单的小例子
  5. C11标准委员会成员解读C语言新标准
  6. python 如何定义空字典_python字典中如何添加键值对
  7. BZOJ 1831 逆序对
  8. android pie华为更新,华为多款机型近期将迎来Android Pie系统更新,下列这几款肯定有你...
  9. hud 3874 求区间内不同数字的和
  10. OneDrive更换要同步文件夹
  11. 福建计算机专业公务员考试培训,2016中国证监会公务员考试专业科目考试大纲(计算机类)...
  12. 【译】3D打印:介绍
  13. 利用FRP跨局域网操纵虚拟机集群
  14. chatGPT 与文言一心的对比
  15. win10电脑禁用开机自启动软件
  16. 用c语言实现的FFT
  17. 电脑启动项快捷键大全
  18. Ai实现FPS游戏自动瞄准 yolov5fps自瞄
  19. 融资-0420-v1.0张雅慧
  20. 移动硬盘和Mac不兼容怎么办? Paragon和Tuxera对比

热门文章

  1. python 英文关键词提取_python TF-IDF算法实现文本关键词提取
  2. 【R语言】【1】初学R语言语法使用Rstudio编辑
  3. 【华人学者风采】倪冰冰 上海交通大学
  4. 移动互联网需求革命:由“生理需求”到“自我实现”
  5. Excel长串数字显示异常,如2E+13
  6. 做全新的自己,向未来冲刺
  7. 如何用计算机组添加打印机共享的打印机,win7如何添加打印机_Win7电脑如何设置打印机家庭组共享?...
  8. 雅思做题技巧误区一,不敢选TRUE。误区二,见到only或must等绝对词就选FALSE。误区三,找不到就选NOT GIVEN。误区四,喜欢把TRUE/FALSE/NOT GIVEN理解为
  9. 《那些年啊,那些事——一个程序员的奋斗史》——99
  10. ICLR 2022论文双盲通过却被爆抄袭:数据算法全部照搬,第二页几乎空白