如何用OpenCV(C++)实现基于ORBBEBLID的尺度与角度不变特征匹配找图?

摘要:本文只发布于利用OpenCV实现尺度不变性与角度不变性的特征找图算法,知乎以及pchar.cn 一般来说,利用OpenCV实现找图功能,用的比较多的是模板匹配(matchTemplate)。笔者比较喜欢里面的NCC算法。但是模板有个很明显的
本文只发布于利用OpenCV实现尺度不变性与角度不变性的特征找图算法,知乎以及pchar.cn 一般来说,利用OpenCV实现找图功能,用的比较多的是模板匹配(matchTemplate)。笔者比较喜欢里面的NCC算法。但是模板有个很明显的短板,面对尺度改变,角度改变的目标就无能为力了。因此本文旨在做到模板匹配做不到的这两点上。 当然也有人利用模板匹配实现上面的功能,但是方法之无语,效率之低下让我不禁想起了三体中的一句话: “成吉思汗的骑兵,攻击速度与二十世纪的装甲部队相当;北宋的床弩,射程达一千五百米,与二十世纪的狙击步枪差不多;但这些仍不过是古代的骑兵与弓弩而已,不可能与现代力量抗衡。基础理论决定一切,未来史学派清楚地看到了这一点。而你们,却被回光返照的低级技术蒙住了眼睛。你们躺在现代文明的温床中安于享乐,对即将到来的决定人类命运的终极决战完全没有精神上的准备。” 本文并不涉及ORB或者BEBLID算法的具体实现,想了解的同学请移步论文。本文撰自一名非计算机系大一新生,有不到处还请见谅。 从特征匹配开始 特征匹配首先是需要获得特征点。通过特征检测算法,获得特征点后利用匹配器,或是计算汉明距离或是计算余弦距离,将两个图上的点连接在一起。 看笔者往期文章浅谈OpenCV的多对象匹配透明图像的实现,以及如何匹配半透明控件,在这篇文章中用的是SURF算法。但是这个算法并不支持角度不变性。 笔者在阅读OpenCV-mobile的readme的时候意外了解到ORB算法。
阅读全文