十二、图像特征 sift

suaxi
2025-11-06 / 0 评论 / 6 阅读 / 正在检测是否收录...

1. 图像尺度空间

人眼很容易就能分辨出物体的大小,但对于计算机却很难,要让机器对物体在不同尺度下有一个统一的认知,就需要考虑图像在不同尺度下的特点。

尺度空间的获取通常使用高斯模糊实现

1.1图像尺度空间.png

1.2图像尺度空间.png

1.3图像尺度空间.png

不同σ的高斯函数决定了图像的平滑程度,σ越大,图像越模糊


2. 分辨率金字塔

  • 多分辨率金字塔

    2.1多分辨率金字塔.png

  • 高斯差分金字塔 DOG

    2.2高斯差分金字塔.png

  • DOG定义公式

    2.3DOG定义公式.png

  • DOG空间极值检测

    为了寻找尺度空间的极值点,每个像素点要和其图像区域(同一尺度空间)和尺度域(相邻的尺度空间)的所有相邻点进行比较,当其大于或小于所有相邻点时,该点就是极值点。

    如下图所示,位于中间的检测点要和其所在图像的3x3领域8个像素点,以及相临的上下两层的3x3领域18个像素点,共计26个点逐一进行比对。

    2.4DOG空间极值检测.png


3. 特征关键点定位

候选关键点是DOG空间的局部极值点,且均是离散的,对尺度空间DOG函数进行曲线拟合,计算极值点,以此实现关键点的精确定位。

3.1关键点的精确定位.png

  • 消除边界响应

    3.2消除边界响应-Hessian矩阵.png

  • 特征点的主方向

    3.3特征点的主方向.png

    每个特征点可以得到三个信息(x, y, σ, θ),即位置、尺度、方向,具有多个方向的关键点可以被复制成多份,然后将方向值分别赋值给复制后的特征点,一个特征点就产 生了多个坐标、尺度相等,但方向不同的特征点。


4. 生成特征描述

在完成关键点的梯度计算后,使用直方图统计临域内像素的梯度和方向

4.1生成特征描述.png

为了保证特征矢量的旋转不变性,要以特征点为中心,在附近临域内将坐标轴旋转θ度,即将坐标轴旋转为特征点的主方向。

4.2生成特征描述.png

以旋转之后的主方向为中心取8x8的窗口,求每个像素的梯度幅值和方向,箭头方向代表梯度方向,长度代表梯度幅值,再通过高斯窗口对其进行加权运算,最后在每个4x4的小块上绘制8个方向的梯度直方图,计算每个梯度方向的累加值,即可形成一个种子点,每个特征点由4个种子点组成,每个种子点有8个方向的向量信息。

4.3生成特征描述.png

相关论文建议对每个关键点使用4x4共16个种子点来描述,这样一个关键点就会产生128维的sift向量

4.4生成特征描述.png


5. 演示

import numpy as np
import matplotlib.pyplot as plt
import cv2

img = cv2.imread('ysg.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# 获取特征点
sift = cv2.xfeatures2d.SIFT_create()
kp = sift.detect(gray, None)

img = cv2.drawKeypoints(gray, kp, img)
plt.imshow(img, 'gray')
plt.show()

5.result.png

# 计算特征
kp, des = sift.compute(gray, kp)
np.array(kp).shape
(232,)

des.shape
(232, 128)

des[0]
array([  3.,  23.,  10.,   3.,  36.,  59.,  20.,   0., 124.,  15.,   1.,
         1.,  68.,  55.,  16.,   7., 170.,  59.,   0.,   0.,   1.,   1.,
         0.,   1.,  30.,   6.,   1.,   2.,  35.,   3.,   0.,   0.,  15.,
        68.,  22.,   4.,  24.,   6.,   0.,   0., 109.,  16.,   2.,   3.,
       104.,  41.,  10.,  14., 170.,  42.,   0.,   0.,   5.,   3.,   4.,
        26.,  54.,   9.,   1.,   0.,  26.,   6.,   0.,   0.,  77.,  14.,
         0.,   0.,   5.,   5.,   3.,  13.,  80.,   4.,   0.,   0.,  19.,
        24., 135., 155., 170.,   6.,   0.,   0.,   1.,   2.,  62., 170.,
        38.,  13.,   3.,   0.,   4.,   3.,   0.,   4.,  40.,   6.,   0.,
         0.,   4.,   2.,   0.,   4.,  66.,   3.,   0.,   0.,   0.,   0.,
        25.,  60.,   9.,   0.,   0.,   0.,   0.,   0.,  20.,  45.,   4.,
         2.,   0.,   0.,   0.,   0.,   0.,   2.], dtype=float32)
0

评论 (0)

取消