sift算法简介(一种斑点检测算法)

来源:互联网 发布:男女就业比例数据图片 编辑:程序博客网 时间:2024/06/08 08:18

斑点就是图像中颜色或纹理变化较大的点,不同于角点,斑点是图像中的一个区域。

sift算法是经典的斑点检测与匹配算法

1.构造高斯金字塔

(1)获取第0塔第0层图像。原始图像经过高斯函数平滑之后作为第0塔第0层图像。

(2)将第0搭第0层图像经过高斯函数建立不同的尺度空间,构成第0塔(一般为3-5层)。

(3)为了减少计算量,将相邻两个高斯尺度空间相减构造高斯差分尺度空间,比高斯尺度空间少一层。

(4)将第i塔的倒数第三层降采样之后作为第i+1塔的第0层,重复(1)-(3)构建第i+1塔

(5)塔的个数根据图像的大小判读。

2.寻找关键点

(1)在相同的高斯差分尺度空间中,判断一个点A是否关键点,需要判断点A在其邻域中是否是局部极值(极小值或极大值),点A的领域包括点A所在的层中的周围8个点和相邻的上下两层各9个点(一共28个点),如果该点A是极值,则将点A列为候选关键点。因为点A所在的尺度空间必须在中间,首尾两个尺度空间无法寻找关键点,所以将高斯差分尺度空间增加两层,将高斯尺度空间增加三层。

(2)通过拟和三维二次函数以精确确定关键点的位置和尺度(达到亚像素精度(亚像素精度是指相邻两像素之间细分情况)),去除对比度低的点和边缘点。对比度低:和邻域像素相差不大。边缘点:受环境影响较大。边缘点因为在横跨方向主曲率较大,在垂直边缘主曲率较小,计算两者比值,小于某个阈值,则保留该关键点。

3.用128维向量表示关键点

以关键点为核心,获取周围16*16个点。计算每个点的梯度方向和长度。然后将16*16区域分成大小为4*4的小区域,共分成4*4=16个小区域。将梯度方向分为8个(每45度为一个方向),统计每个小区域梯度方向的直方图,在统计时,梯度大小使用以关键点为核心的高斯函数进行加权。这样,每个小区域都可以用一个8维向量表示,而关键点可以用8*16=128维向量表示。将128维向量归一化可以避免环境等的影响。

4.匹配两幅图的关键点

按照1-3的方法分别用128维向量表示两幅图的关键点。判断甲图中的某一个关键点A是否和乙图匹配。需要计算点A和乙图所有关键点的欧式距离,找出点A和乙图中距离最近的两个点。判断点A和最近的点B距离与次近的点的距离的比值是否小于某个阈值,如果小于,则点B和点A匹配。否则乙图中没有和点A匹配的点。

原创粉丝点击