Code前端首页关于Code前端联系我们

局部函数SIFT算法(配合适当的python代码)

terry 2年前 (2023-09-27) 阅读数 67 #数据结构与算法

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

精华

找到标尺不同位置的关键点,并计算关键点的方向。
局部特征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×为半径
  • 直方图顶部的方向代表关键点的主方向和方向的顶部方向histogram 表示特征点处邻域的梯度方向,以直方图中的最大值作为关键点的主方向。
  • 由于匹配的稳定性,超过最大值80%的方向称为辅助方向

局部特征SIFT算法描述(附python实例代码)
为了保证特征向量具有旋转不变性,需要以特征点为中心将特征点附近的图像旋转0°方向角。这意味着原始图像的 x 轴以与主方向相同的方向旋转。
局部特征SIFT算法描述(附python实例代码)

SIFT - 计算特征点描述符

对于每个关键点,它具有三项信息:位置、尺度和方向。为每个关键点创建一个描述符,并使用一组向量来描述该关键点,使其不会随着光照变化、视角变化等各种变化而变化。坐标

局部特征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实例代码)

版权声明

本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。

热门