局部特征SIFT算法描述(附python实例代码)

2021年3月5日14:19:57 发表评论 116 views

基于尺度空间不变的特征,是用于图像处理领域的一种描述。可在图像中检测出关键点,是一种 局部特征描述子

实质

在不同的尺度空间上查找关键点,并计算出关键点的方向。
局部特征SIFT算法描述(附python实例代码)

特点

  • 具有良好的不变性
    旋转、尺度缩放、平移、亮度变化
    对视角变化、仿射变换和噪声也有一定程度的稳定性
  • 独特性好,信息量丰富
    适用于在海量特征数据库中进行快速、准确的匹配
  • 多量性
    即使少数物体也可以产生大量SIFT特征
  • 计算快
    经优化的SIFT匹配算法甚至可以达到实时性

尺度空间

使用不同o 的LOG对图片进行滤波
局部特征SIFT算法描述(附python实例代码)

使用LOG,则后续计算量较大,故使用DOG来代替LOG,用差分代替微分。
局部特征SIFT算法描述(附python实例代码)
局部特征SIFT算法描述(附python实例代码)

高斯金字塔

高斯金字塔就是在传统金字塔的基础上,图像的金字塔模型是指将原始图像不断降阶采样,对每一层用不同的参数σ做高斯模糊,使得每一层金字塔有多张高斯模糊图像,这样一组图像是一个octave。

高斯金字塔的构建分为两步:

(1)对图像做高斯平滑;
(2)对图像做降采样。
局部特征SIFT算法描述(附python实例代码)
octave(i+1)的第一张(从下往上数)图像是由octave(i)中的倒数第三张图像降采样得到

SIFT特征计算步骤

  • 在DoG尺度空间中获取极值点,即关键点
    LoG尺度空间和DoG尺度空间
  • 对关键点处理
    位置插值(获得精确的关键点)
    去除边缘点
  • 关键点的方向估计
  • 关键点描述子的生成
    区域坐标旋转
    计算采样区域的直方图

SIFT——计算高斯差分(DoG)空间

DoG函数

局部特征SIFT算法描述(附python实例代码)

DoG高斯差分金字塔

局部特征SIFT算法描述(附python实例代码)

DoG局部极值检测

局部特征SIFT算法描述(附python实例代码)

局部特征SIFT算法描述(附python实例代码)
判断极值点:以X为检测点,其周围的点,除了同层所包围的8个点外,还有上一层的9个点与下一层的9个点(考虑26个点

SIFT——特征点(又叫关键点)方向估计

本算法采用梯度直方图统计法,统计以关键点为原点,一定区域内的图像像素点确定关键点方向。

  • 在尺度上计算梯度直方图
    8方向――以特征点为中心、以3×为半径
  • 直方图的峰值方向代表了关键点的主方向,方向直方图的峰值则代表了该特征点处邻域梯度的方向,以直方图中最大值作为该关键点的主方向
  • 为了匹配的稳定性,将超过最高值80%的方向,称为辅方向

局部特征SIFT算法描述(附python实例代码)
为了保证特征矢量具有旋转不变性,需要以特征点为中心,将特征点附近邻域内的图像旋转一个方向角0。即将原图像x轴转到与主方向相同的方向。
局部特征SIFT算法描述(附python实例代码)

SIFT——计算特征点描述子

对于每一个关键点,都拥有位置、尺度以及方向三个信息。为每个关键点建立一个描述符,用一组向量将这个关键点描述出来,使其不随各种变化而改变,比如光照变化、视角变化等等。

在旋转后的坐标上采样16x16的像素窗

局部特征SIFT算法描述(附python实例代码)

完整代码如下

import numpy as np
import cv2 as cv
img = cv.imread('H:/pictures/')
gray= cv.cvtColor(img,cv.COLOR_BGR2GRAY)
sift = cv.xfeatures2d.SIFT_create()
kp = sift.detect(gray,None)
img=cv.drawKeypoints(gray,kp,img)

cv.imshow("SIFT", img)
cv.imwrite('',img)
cv.waitKey(0)
cv.destroyAllWindows()

局部特征SIFT算法描述(附python实例代码)
局部特征SIFT算法描述(附python实例代码)

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: