SIFT
概述
- sift(尺度不变特征变换):Scale Invariant Feature Transform
- 提取图像的局部特征;
- 在尺度空间寻找极值点;
- 提取极值点的位置、尺度、方向信息;
应用范围
- 物体识别
- 机器人地图感知与导航
- 影像拼接
- 3D模型建立
- 手势识别
- 影像追踪
特点
- 对视角变化、噪声等存在一定程度的稳定性;
- 独特性,信息量丰富,适于在海量数据中进行快速、准确匹配;
- 多量性,少数物体也可产生大量sift特征;
算法描述
- 实质是在不同的尺度空间上查找关键点(特征点);
- 计算关键点的大小、方向、尺度信息;
- 利用上述的信息组成关键点对特征点进行描述;
- sift查找的关键点十分突出,不会因光照、仿射变换和噪声等因素而变换稳定的特性;
- 稳定的特征点表现为:角点、边缘点、暗区的亮点、亮区的暗点;
- 匹配的过程就是对比这些特征点的过程;
SIFT特征提取和匹配具体步骤
- 生成高斯差分金字塔(DOG金字塔),构建尺度空间;
- 空间极值点检测,初步探查关键点;
- 稳定关键点的精确定位;
- 稳定关键点方向信息分配;
- 关键点描述;
- 特征点匹配;
SIFT尺度空间
- 在摄像头拍摄的画面中,计算机无法分辨一个景物的尺度信息;
- 人的大脑中对物体已经有了基本概念;
- 近距离和远距离观看一个苹果,都能认出;
- 距离物体近时,人眼能够获得足够的特征;
- 距离物体远时,能够忽略细节;
- 图片中的分辨率是固定的;
- 要模拟人眼的效果,需要不同分辨率的同一图片;
- 将这些图片制作成图像金字塔模拟人眼功能;
- 对尺寸变化的物体具有人眼的识别能力;
- 尺度空间定义
- 试图在图像领域中模拟人眼观察物体的概念和方法;
- 对不同尺寸的物体,分别观察细节和整体的能力;
SIFT图像金字塔
- 尺度空间--描述一个图片需要获得多少不同分辨率的图片;
- 图像金字塔--对一个原始图片不断地进行分辨率的减少,然后将得到的图片摞在一起,组成一个四棱锥,这个椎体称为图像金字塔;
- 以多分辨率来解释图像的结构
- 对原始图像进行多尺度像素采样;
- 生成N个不同分辨率的图像;
- 最高级别分辨率的图像放在最底部;
- 网上是一系列分辨率逐次降低的图片
- 最顶部是只含一个像素的图片;
- 这是传统意义上的金字塔。
获得图像金字塔的步骤
- 利用滤波器平滑图像(高斯滤波);
- 对平滑图像进行抽样(采样);
- 两种采样方式:上采样和下采样;
高斯金字塔的主要思想
- 对原始图像进行尺度变换;
- 获得图像多尺度下尺度空间表示序列;
- 对这些序列图像进行住轮廓提取;
- 以该轮廓作为一种特征向量,实现边缘、角点检测不同分辨率上的关键点提取;
- 各尺度下图像的模糊度逐渐变大;
- 模拟人眼由近及远对目标物体在视网膜上的成像过程;
- 尺度空间构建的基础是DOG金字塔;
- DOG金字塔构建的基础是高斯金字塔;
高斯金字塔
- 在SIFT中提出来的概念;
- 高斯金字塔是由很多组(Octave)金字塔构成;
- 每组金字塔都含有若干层(Interval);
高斯金字塔构建过程
- 将原图像扩大一倍作为高斯金字塔的第1组第1层;
- 将第1组第1层经高斯卷积(实质为高斯滤波或高斯平滑)作为第1组金字塔的第二层;
乘一比例系数K,得到
,用于平滑第1组第2层图像;结果作为第三层;
- 重复步骤3,得到L层图像;
- 同一组中,每一层图像的尺寸一样,平滑系数不一样;
- 对应的平滑系数为:
- 将第一组的倒数第三层图像作为比例因子为2的降采样(尺寸减半);
- 上述得到的图像作为第2组的第1层;
- 对第2组第1层图像做平滑因子为
的高斯平滑,得到第2组第2层;
- 重复类似步骤3,得到第2组的L层图像;
- 这些图像在组内尺寸一样;
- 对应的平滑系数为:
- 图像的尺寸为第1组图像的一半;
- 反复执行,得到O组。每组L层,共计O*L个图像,这些图像构成高斯金字塔;
构建尺度空间
- 高斯金字塔生成O组L层不同尺度的图像;
- (O,L)构成高斯金字塔的尺度空间;
- 组O作为二维坐标系的一个坐标;
- 层L作为另一个坐标;
- 给定的一组坐标(O,L)唯一确定高斯金字塔中的一幅图像;
- 采用高斯核函数进行滤波,保存原始图像最多的细节特征;
- 尺度空间图像就是当前图像与不同尺度核参数
卷积后的图像;
DOG金字塔
- 尺度空间构建的基础为DOG金字塔;
- 高斯金字塔是DOG金字塔构建的基础;
- DOG(Difference of Gaussian);
- 第一组第一层由高斯金字塔的第一组第二层减第一组第一层得到;
- 以此类推,逐组逐层生成每一个差分图像;
- 所有差分图像构成差分金字塔;
尺度空间极值检测
- 特征点由DOG空间局部极值点组成;
- 通过每个像素点和其所有临近点比较寻找极值点;
- 比较该点与其图像域和尺度域的相邻点的大小;
- 下图中间检测点与同层的8个相邻点以及上下层的9x2个点共计26各点比较;
- 确保在二维图像空间和尺度空间都检测到极值点;
- 局部极值点在同组中查找;
- 对于组内第一张图和最后一张图,没有前一张和下一张;
- 利用高斯模糊,在高斯金字塔多模糊出三张图像凑数;
- 在DOG中多出两张图像;
高斯金字塔的K值
;
- s:3到5之间,每组图像中检测S个尺度的极值点;
SIFT算法生成高斯金字塔的规则
- 高斯金字塔含O组图像;
- 每组图像有S+3层;
;
- s的意思:差分高斯金字塔求极值点的层点数量;
稳定关键点的精确定位
- DOG值对噪声和边缘比较敏感;
- 需要进一步筛选第二步中在尺度空间检测到的极值点;
- 去除不稳定和错误检出的极值点;
- 利用阈值的方法来限制:opencv:contrastThreshold;
稳定关键点方向信息分配
方法
- 获取关键点所在尺度空间邻域;
- 计算该区域的梯度和方向;
- 创建方向直方图;
- 假定直方图的峰值为主方向参数;
- 高于主方向80%的方向为辅助方向;
- 任意关键点,梯度幅值表示:
;
- 梯度方向为:
;
关键点描述
- 每一个关键点有位置\尺度\方向三个信息;
- 为每个关键点建立一个描述符;
- 用一组向量描述关键点;
- 使关键点不随各种变化而改变,比如光照变化\视角变化等
- 描述子包含关键点,及有贡献的周围邻域点;
关键点描述的思路
- 对关键点周围像素区域分块;
- 计算块内梯度直方图;
- 生成具有独特性的向量;
- 该向量是区域图像信息的一种抽象表述;
- 对于2x2的块,每块最终取8个方向;
- 生成2X2X8维度的向量;
- 以该 2X2X8维度的向量作为中心关键点的数学描述;
- 实验结果表明,对关键点采用4x4x8=128维向量表征,综合效果最佳(不变性与独特性).
特征点匹配
- 通过计算两组特征点的128维关键点的欧式距离实现;
- 欧式距离越小,相似度越高;
- 欧式距离小于阈值,匹配成功.
特征点匹配具体步骤:
- 对模板图(参考图,reference image)建立关键点描述子集合;
- 对实时图(观测图,observation image)建立关键点描述子集合;
- 通过两点集内关键点描述子的比对完成目标的识别;
- 128维关键点描述子采用欧式距离确定相似性;
- 采用穷举法匹配.