在 SIFT 特征提取中,如何生成关键点以及如何将特征存储在数据库中。在图像中,视觉词包是图像还是文本词?
图像中的词袋创建
数据挖掘
特征提取
2022-02-15 10:51:40
1个回答
如何计算关键点:
获取您的图像并使用不同尺度 ) 对其进行卷积以获得。这会产生具有不同模糊程度的图像的多个版本(每个比例
根据八度音阶分离模糊图像(八度音阶通常被视为)。在给定的八度范围内,取相邻模糊图像和 之间的差异。这种差异称为高斯差异 (DoG)。此时,一张图片会很有帮助(来源:opencv):

如您所见,左侧是模糊/卷积/过滤的图像,右侧是相邻图像之间的差异。
- 然后,在 DoG 上取一个像素,并将其与同一 DoG 中的 8 个相邻像素进行比较,并将其与位于下一个比例的 DoG 的 9 个等效像素以及与前一个 DoG 中的其他 9 个像素进行比较。在图中,这对应于位于上方和下方的DoG。如果这个像素是一个局部极值,那么你就有一个候选关键点。请记住,可以根据其他标准丢弃候选人。
一旦有了这些关键点,就可以继续生成描述符。对于每个关键点,计算一个图像梯度。你应该知道,梯度告诉你最大变化率的方向。因此,您可以围绕每个关键点构建一个网格,该网格根据该点周围的主要梯度定向。这个网格有子区域(通常是 16 个子区域),并且对于每个子区域,计算一个 8-bin 直方图。最后,连接从网格中每个子区域获得的每个直方图,这就是该关键点的特征向量(实际上,完整的特征向量还包括位置和旋转角度。)一个有用的说明(来自 Solem 的用 Python 编程计算机视觉一书):

此时,每个关键点都有一个包含 132 个值的特征向量。至于您的第二个问题,我不确定将数组存储在数据库中的最佳方法。也许其他人可以在这一点上展开。当然,有几种选择:
- 创建一个数组数据类型来存储您的数据
- 只需使用 VARCHAR 字段
- 将其存储为二进制文件
- 使用专门设计用于处理数组的数据库。
其它你可能感兴趣的问题