机器学习笔记之PCA-SIFT总结
不多说,直接上干货!
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算法详解
最新文章
- AVD Manager
- asp.net mvc 自定义身份验证 2
- 单链表带头结点&;不带头结点
- js获取select改变事件
- dp与px之间的转换
- 获得设备型号(含iPhone6 , iPhone 6+)
- JavaScript入门介绍(一)
- 小细节:Java中split()中的特殊分隔符 小数点
- hadoop 2.6.0 yarn total memory metrics 不正常
- JavaScript-RegExp对象仅仅能使用一次
- Python 协程/异步IO/Select\Poll\Epoll异步IO与事件驱动
- [Android FrameWork 6.0源码学习] View的重绘ViewRootImpl的setView方法
- Streaming Principal Component Analysis in Noisy Settings
- Python学习笔记(二)——数据类型
- oracle查看表名称和表字段注释
- ORA-00054:resource busy and acquire with nowait specified解决方法
- 大小端,memcpy和构造函数
- Lambda表达式浅析
- 【LOJ】#2075. 「JSOI2016」位运算
- 关于js语法(运算中出现无限大的问题)本身的错误的解决方案
热门文章
- 配置c3p0-config.xml数据库连接池,jdbcurl配置项报错Type The reference to entity ";useUnicode"; must end with the ';' delimiter.
- 数组合并--php
- 标量子查询SQL改写
- vue 运行时 + 编译器 vs. 只包含运行时
- svn基本使用详情
- Java:追加文件内容
- Python中的函数(5)
- 【HDU 2028】Lowest Common Multiple Plus
- 优化子查询sql语句为内连接
- python多线程--线程同步