首页 > 新闻 > 2.3微秒的特征点匹配

2.3微秒的特征点匹配

2010年2月10日 cvchina 发表评论 阅读评论

这是cvpr2009最佳demo。来自剑桥大学。匹配一个特征点只用2.3微秒。是微秒,不是毫秒!一副平面图像按200个特征点(论文中提及200点就足够估算姿态了)算,那么一秒钟可以处理2000帧!!额里格神啊。从上面的视频上看,该算法可以流畅的运行在手机上面。很牛啊,你能想象在手机上算sift或者surf么。。。

算法思路沿袭Ferns,不过特征点检测用的Fast9,特征也变成了二进制特征,可以用SSE2什么的加速,还采用了动态匹配的策略,因此速度变得飞快,很有吸引力不是,来看论文吧。希望opencv下一个版本可以加入这个算法。

项目主页在这里。可以看大画幅视频和PPT。

Related posts

  1. K.Y
    2010年2月11日12:44 | #1

    个人很想知道这个实现当中SSE啥的对加速有多大贡献。

  2. 2010年2月11日15:25 | #2

    具体来说,求的是两个二进制串,相同位的个数。我不知道能快多少,没用过sse

  3. 2010年2月22日09:46 | #3

    二进制串的5个and,4个or…
    sse是啥玩意儿啊,论文里说,x86电脑对这种and或者or会自动用sse加速…
    不知道是不是我理解错了…

  4. 2010年2月22日10:20 | #4

    你看的很仔细嘛。。好好研究一下啊。
    我感觉很有潜力啊。
    http://zh.wikipedia.org/zh-cn/SSE2

  5. fengyu
    2010年3月25日23:37 | #5

    在opencv200里面搜cvfast.

    SSE是intel的指令集,如果你的程序时标准C,且不调用opencv2.0的函数的话,产生的代码是未优化的代码,也就是说,代码还是用的类似386、486时代的代码,若要充分利用cpu能力,就要使用sse指令集。现在的cpu大都支持SSE3,最新的好像是SSE4.1吧。

  6. 2010年3月26日20:15 | #6

    @fengyu
    受教了。
    我最近看了一下sse指令。sse是SIMD的扩展,主要是用单指令完成原先多条指令才能完成的运算,比如4个32bits float的乘法等等。msdn上有很多sse的内联函数的说明,值得看看。但是据说,如果要用sse的话,还是推荐直接内嵌汇编会更好一点。
    话说回来,与其有时间折腾汇编指令,不如多想想怎么优化算法,然后让编译器完成剩下的工作,比如换IPP编译代码。

  7. fengyu
    2010年3月27日10:59 | #7

    楼上说的对,但有时候算法结构优化是有局限性的,ipp的确很强大,对于学校是免费的,但对于公司是收费的(虽然费用也不贵)。msdn上的intrinsic其实比汇编要简单,直接在c语言里面调用,就像函数一样。印象中可以一次对16个字节进行加减乘法、逻辑等操作,性能提升是巨大的(你想啊,如果算法是每个cycle算一个像素,但cpu具体执行代码的时候,仍然会最少加载32bit的数据,额外浪费了很多资源)。

    对于算法研发人员,最主要的还是关注于算法的实现的结果,至于运行速度,那是也未必是算法研究人员的感兴趣的地方,毕竟,脑子里成天想着intrinsic,内存对齐,还怎么开发算法啊。不过,好消息是,opencv2.0已经部分支持sse3了,算法性能的提升是数10倍!我仅仅测试了几个函数而已。

  1. 本文目前尚无任何 trackbacks 和 pingbacks.