我们将看到如何在单个图像上生成HOG特征,以及是否可以在更大的数据集上应用相同的HOG特征。我们将首先加载所需的库和我们要为其创建HOG特征的图像:
#导入所需的库 from skimage.io import imread, imshow from skimage.transform import resize from skimage.feature import hog from skimage import exposure import matplotlib.pyplot as plt %matplotlib inline #读入图片 img = imread(\'puppy.jpeg\') imshow(img) print(img.shape) (663,459,3)我们可以看到图像的形状是663 x 459.我们将不得不将此图像调整为64 x 128.请注意,我们使用的是skimage,它将输入作为高度x宽度。
#调整图像大小 resized_img = resize(img, (128,64)) imshow(resized_img) print(resized_img.shape) (128,64,3)在这里,我将直接使用skimage.features的hog函数。因此,我们不必单独计算梯度,幅值(总梯度)和方向。hog函数将在内部计算它并返回特征矩阵。
此外,如果你设置参数\'visualize = True\',它将返回HOG的图像。
#创建hog特征 fd, hog_image = hog(resized_img, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2), visualize=True, multichannel=True)在继续之前,让我先介绍一下这些超参数代表什么。或者,你可以在此处查看官方文档中的定义。
orientations是我们要创建桶的数量。由于我想要一个9 x 1矩阵,我将orientations设置为9
pixelspercell定义我们为其创建直方图的单元格的大小。在我们在本文中介绍的示例中,我们使用了8 x 8个单元格,在这里我将设置相同的值。如前所述,你可以选择更改此值
我们有另一个超参数cellperblock,它是我们对直方图进行标准化的块的大小。这个参数是每个块的单元格数量而不是像素的数量。因此,我们将使用2 x 2而不是16 x 16
函数的特征矩阵存储在变量fd中,图像存储在hog_image中。让我们检查一下特征矩阵的形状:
fd.shape (3780) \'\'\' HOG FEATURES \'\'\' # 导入需要的包 from skimage.io import imread, imshow from skimage.transform import resize from skimage.feature import hog from skimage import exposure #读取图片 img = imread(\'puppy.jpeg\') #改变图片尺寸 resized_img = resize(img, (128,64)) #产生HOG特征 fd, hog_image = hog(resized_img, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2), visualize=True, multichannel=True) print(\'\n\nShape of Image Features\n\n\') print(fd.shape) Shape of Image Features (3780,)正如预期的那样,我们有3,780个图像特征,这验证了我们之前在步骤7中所做的计算。你可以选择更改超参数的值,这将为你提供不同大小的特征矩阵。
让我们最后看看HOG图像:
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(16, 8), sharex=True, sharey=True) ax1.imshow(resized_img, cmap=plt.cm.gray) ax1.set_title(\'Input image\') # 缩放直方图以便更好地显示 hog_image_rescaled = exposure.rescale_intensity(hog_image, in_range=(0, 10)) ax2.imshow(hog_image_rescaled, cmap=plt.cm.gray) ax2.set_title(\'Histogram of Oriented Gradients\') plt.show() 结束笔记本文背后的想法是让你了解HOG特征描述子背后的实际原理以及如何计算特征。整个过程分为7个简单步骤。
下一步,我鼓励你尝试在简单的计算机视觉问题上使用HOG特征,并查看模型性能是否有所改善。
欢迎关注磐创博客资源汇总站:
欢迎关注PyTorch官方中文教程站: