图像中的词袋创建

数据挖掘 特征提取
2022-02-15 10:51:40

在 SIFT 特征提取中,如何生成关键点以及如何将特征存储在数据库中。在图像中,视觉词包是图像还是文本词?

1个回答

如何计算关键点:

  1. 获取您的图像并使用不同尺度 ) 对其进行卷积以获得这会产生具有不同模糊程度的图像的多个版本(每个比例I(x,y)G(x,y,kσkσL(x,y,kσ)kσI(x,y)

  2. 根据八度音阶分离模糊图像(八度音阶通常被视为)。在给定的八度范围内,取相邻模糊图像之间的差异。这种差异称为高斯差异 (DoG)此时,一张图片会很有帮助(来源:opencv):2σL(x,y,kiσ)L(x,y,kjσ)D(x,y,σ)=L(x,y,kiσ)L(x,y,kjσ)

在此处输入图像描述

如您所见,左侧是模糊/卷积/过滤的图像,右侧是相邻图像之间的差异。

  1. 然后,在 DoG 上取一个像素,并将其与同一 DoG 中的 8 个相邻像素进行比较,并将其与位于下一个比例的 DoG 的 9 个等效像素以及与前一个 DoG 中的其他 9 个像素进行比较。在图中,这对应于位于上方和下方的DoG。如果这个像素是一个局部极值,那么你就有一个候选关键点。请记住,可以根据其他标准丢弃候选人。

一旦有了这些关键点,就可以继续生成描述符。对于每个关键点,计算一个图像梯度。你应该知道,梯度告诉你最大变化率的方向。因此,您可以围绕每个关键点构建一个网格,该网格根据该点周围的主要梯度定向。这个网格有子区域(通常是 16 个子区域),并且对于每个子区域,计算一个 8-bin 直方图。最后,连接从网格中每个子区域获得的每个直方图,这就是该关键点的特征向量(实际上,完整的特征向量还包括位置和旋转角度。)一个有用的说明(来自 Solem 的用 Python 编程计算机视觉一书):

在此处输入图像描述

此时,每个关键点都有一个包含 132 个值的特征向量。至于您的第二个问题,我不确定将数组存储在数据库中的最佳方法。也许其他人可以在这一点上展开。当然,有几种选择:

  1. 创建一个数组数据类型来存储您的数据
  2. 只需使用 VARCHAR 字段
  3. 将其存储为二进制文件
  4. 使用专门设计用于处理数组的数据库。