不多说,直接上干货!

  PCA-SIFT算法在描述子构建上作了创新,主要是 将统计学中的主成分分析(PCA)应用于对描述子向量的降维,以提高匹配效率 。

  PCA 的原理是:一般有效信号的方差大,噪声的方差小;通过PCA可以降维滤除噪声,保留信号。

1、算法分析 
  PCA-SIFT与标准SIFT有相同的亚像素位置(sub-pixel),尺度(scale)和主方向(dominant orientations),但在第4步计算描述子的时候,它用特征点周围的41×41的像斑计算它的主元,并用PCA-SIFT将原来的2×39×39维的向量降成20维,以达到更精确的表示方式。

  算法步骤如下: 
  (1)构建描述子的区域选定为以特征点为中心的41X41矩形(已与特征点主方向对齐); 
  (2)计算39x9矩形内每个像素对水平、垂直两个方向的偏导数(最外层像素不计算偏导数)。得到一个39x39x2=3042维的向量,对其归一化; 
  (3)假设有N个特征点,那么所有特征点描述子向量构成一个Nx3042的矩阵。对这N个向量计算NxN协方差矩阵; 
  (4)计算协方差矩阵的前k个最大特征值所对应的特征向量,这k个向量组成一个3042xk的投影矩阵; 
  (5)将Nx3042的描述子矩阵与3042xk的投影矩阵相乘,得到Nxk的矩阵,即降维描述子向量组成的矩阵。此时N个特征点的描述子向量均为k维。文中作者经过实验,取k=36。 
  算法步骤还有另一种描述,见这里。 
  该算法的创新之处 在于降低描述子维度的同时滤除了部分描述子向量中的干扰信息,有较好的鲁棒性 。同时该算法为后人研究描述子打开了一个方向,例如GLOH算法在描述特征点时也是用PCA将16*17维的向量降为40维,但GLOH算法构建描述子的方法不同,它是基于对数极坐标来构建的。

2、比较 
  (1)结果比较:PCA-SIFT所得的描述子在旋转、尺度变换,透视变换,添加噪声匹配的情形下,匹配均大幅领先于SIFT;在亮度变换时,与传统SIFT不相上下。在匹配时所得的正确点对也多于传统SIFT。可见PCA-SIFT生成的描述子质量很高。SIFT和PCA-SIFT的比较 。在运行时间方面,PCA-SIFT在特征点提取、描述子计算中略快于SIFT;但在后续的描述子匹配过程中,PCA-SIFT的速度大大超过SIFT的速度。 
  (2)优缺点比较: 
    △ SIFT: 
      维数:128 
      缺点:维数高、不完全的仿射不变 
      优点:需要较少的经验主义知识,易于开发 
    △ PCA-SIFT: 
      维数:可变,推荐20或者更少 
      缺点:不完全的仿射不变;投影矩阵需要一系列有代表性的图像;这个矩阵只对这类图像起作用 
      优点:保留不变性的同时低维,大大减少了计算时间。

参考资料: 
【特征匹配】PCA-SIFT原理及源码解析
PCA-SIFT特征分析(提升篇)PCA-SIFT 
PCA-SIFT:一个更鲜明地局部图像描述符特征提取方法 SIFT,PCA-SIFT,GLOH,SURF 
SURF PCA-SIFT and SIFT 开源代码 总结
谈谈SIFT、PCA-SIFT、SURF及我的一点思考
SIFT算法详解

最新文章

  1. AVD Manager
  2. asp.net mvc 自定义身份验证 2
  3. 单链表带头结点&不带头结点
  4. js获取select改变事件
  5. dp与px之间的转换
  6. 获得设备型号(含iPhone6 , iPhone 6+)
  7. JavaScript入门介绍(一)
  8. 小细节:Java中split()中的特殊分隔符 小数点
  9. hadoop 2.6.0 yarn total memory metrics 不正常
  10. JavaScript-RegExp对象仅仅能使用一次
  11. Python 协程/异步IO/Select\Poll\Epoll异步IO与事件驱动
  12. [Android FrameWork 6.0源码学习] View的重绘ViewRootImpl的setView方法
  13. Streaming Principal Component Analysis in Noisy Settings
  14. Python学习笔记(二)——数据类型
  15. oracle查看表名称和表字段注释
  16. ORA-00054:resource busy and acquire with nowait specified解决方法
  17. 大小端,memcpy和构造函数
  18. Lambda表达式浅析
  19. 【LOJ】#2075. 「JSOI2016」位运算
  20. 关于js语法(运算中出现无限大的问题)本身的错误的解决方案

热门文章

  1. 配置c3p0-config.xml数据库连接池,jdbcurl配置项报错Type The reference to entity "useUnicode" must end with the ';' delimiter.
  2. 数组合并--php
  3. 标量子查询SQL改写
  4. vue 运行时 + 编译器 vs. 只包含运行时
  5. svn基本使用详情
  6. Java:追加文件内容
  7. Python中的函数(5)
  8. 【HDU 2028】Lowest Common Multiple Plus
  9. 优化子查询sql语句为内连接
  10. python多线程--线程同步