Mahotas 简明教程
Mahotas - Speeded-Up Robust Features
加速稳健特征 (SURF) 是一种算法,用于检测图像中的识别特征 (关键点)。SURF 通过分析不同比例的图像中的强度变化来标识关键点。
它为这些点分配方向并生成描述它们的独特特征的描述符。
描述符是在以关键点为中心的局部区域内以某种模式计算的。这些描述符随后可用于各种应用程序。
SURF 使用两种主要技术 - surf dense 和 surf integral。将在后面的章节中详细讨论这两种技术。
SURF Surf
SURF surf 是一种将图像关键点的检测和描述相结合的技术。它生成描述这些关键点属性的描述符。该函数将图像作为输入,并返回一组 SURF 描述符。
Syntax
以下是 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 (optional) - 它定义 SURF 算法中要使用的倍频程数。倍频程表示不同分辨率级别的图像(默认值为 4)。
-
nr_scales (optional) - 它确定每个倍频程的比例数量。比例用于检测不同细节级别的特征(默认值为 6)。
-
initial_step_size (optional) - 它确定连续比例之间的初始步长。较小的步长允许检测详细特征(默认值为 1)。
-
threshold (optional) - 它是用于过滤掉弱 SURF 特征的阈值(默认值为 0.1)。
-
max_points (optional) - 它定义将要返回的最大 SURF 点数(默认值为 1024)。
-
descriptor_only (optional) - 该标志确定是否仅返回描述符或描述符和关键点。当设置为 True 时,将仅返回检测到的特征的描述符。如果设置为 False,将返回关键点和描述符(默认值为 False)。
我们可以在下面看到冲浪图像 -
SURF Dense
SURF 稠密是 SURF 算法使用的一种技术。SURF 稠密在图像中对关键点进行稠密采样。
换句话说,SURF 稠密不搜索特定的兴趣点,而是计算图像中像素网格的描述符。这有助于获取有关整幅图像的信息。
在以下图像中,我们可以看到 SURF 稠密图像 −
SURF Integral
SURF 积分技术通过使用积分图像来提高 SURF 算法的计算效率。积分图像预先计算了像素强度在图像特定区域内的累加和。
这种预先计算消除了冗余计算,从而实现了更快、更有效的特征检测和描述。
结果,SURF 算法非常适合于实时应用程序和处理大规模数据集。
以下为 SURF 积分图像 −
Example
在下面的示例中,我们对图像执行了上面讨论的不同 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 dense
surf_dense = surf.dense(image, 100)
mtplt.imshow(surf_dense)
mtplt.title('SURF Dense Image')
mtplt.axis('off')
mtplt.show()
# SURF integral
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 Image:
SURF Integral Image:
SURF Surf Image:
我们将在后面的章节中详细讨论 SURF 稠密和 SURF 积分技术。