Mahotas - 加速稳健特征
加速稳健特征 (SURF) 是一种用于检测图像中独特特征(关键点)的算法。SURF 通过分析图像中多个尺度的强度变化来识别关键点。
它为这些点分配方向并生成描述符来捕捉它们的独特特征。
描述符以模式计算在关键点周围的局部区域内。然后,这些描述符可用于各种应用。
SURF 使用两种主要技术:surf density 和 surf integration。这两种技术都将在接下来的章节中详细讨论。
SURF Surf
SURF surf 是一种结合图像关键点检测和描述的技术。它生成对这些关键点的属性进行编码的描述符。该函数以图像作为输入并返回一组 SURF 描述符。
语法
以下是 mahotas − 中 surf.surf() 函数的基本语法
mahotas.features.surf.surf(f, nr_octaves=4, nr_scales=6, initial_step_size=1, threshold=0.1, max_points=1024, descriptor_only=False)
其中,
f − 它是输入图像。
nr_octaves(可选) −它定义了 SURF 算法中要使用的八度数。一个八度表示不同分辨率级别的图像(默认值为 4)。
nr_scales(可选) − 它确定每个八度的尺度数。尺度用于检测不同细节级别的特征(默认值为 6)。
initial_step_size(可选) − 它确定连续尺度之间的初始步长。较小的步长允许检测详细特征(默认值为 1)。
threshold(可选) − 它是用于过滤掉弱 SURF 特征的阈值(默认值为 0.1)。
max_points(可选) −它定义了将返回的最大 SURF 点数(默认值为 1024)。
descriptor_only(可选) − 它是一个标志,用于确定是否仅返回描述符或描述符和关键点。设置为 True 时,将仅返回检测到的特征的描述符。
如果设置为 False,则将同时返回关键点和描述符(默认值为 False)。
我们可以在下面看到冲浪图像 −

SURF Dense
SURF Dense 是 SURF 算法使用的一种技术。在 SURF Dense 中,关键点在图像上密集采样。
换句话说,SURF Dense 不是搜索特定的有趣点,而是计算图像中像素网格的描述符。这有助于捕获有关整个图像的信息。
在下图中,我们可以看到 SURF 密集图像 −

SURF 积分
SURF 积分技术通过利用积分图像提高了 SURF 算法的计算效率。积分图像预先计算图像特定区域像素强度的累积和。
这种预先计算消除了冗余计算,从而实现了更快、更高效的特征检测和描述。
因此,SURF 算法非常适合实时应用和处理大规模数据集。
以下是 SURF 积分的图像

示例
在下面的示例中,我们将对图像执行如上所述的不同 SURF 函数 −
import mahotas as mh from mahotas.features import surf import numpy as np import matplotlib.pyplot as mtplt image = mh.imread('tree.tiff', as_grey=True) # SURF density surf_dense = surf.dense(image, 100) mtplt.imshow(surf_dense) mtplt.title('SURF Dense Image') mtplt.axis('off') mtplt.show() # SURF integration surf_integral = surf.integral(image) mtplt.imshow(surf_integral) mtplt.title('SURF Integral Image') mtplt.axis('off') mtplt.show() # SURF surf surf_surf = surf.surf(image) mtplt.imshow(surf_surf) mtplt.title('SURF Surf Image') mtplt.axis('off') mtplt.show()
输出
得到的输出如下所示 −
SURF Dense 图像:

SURF 积分图像:

SURF 冲浪图像:

我们将在后续章节中详细讨论 SURF Dense 和 SURF 积分技术。