如何在Python中应用HOG特征提取(详细实现)

Python实现HOG特征提取:了解如何使用 scikit-image 库从 Python 中的图像中提取定向梯度直方图 (HOG) 特征。
定向梯度直方图 (HOG)是计算机视觉和图像处理应用程序中用于目标检测的特征描述符。它是一种计算图像特定部分或感兴趣区域中梯度方向事件的技术。
2005 年,Dalal 和 Triggs 发表了一篇名为Histograms of Oriented Gradients for Human Detection的研究论文。这篇论文发表后,HOG被用在了很多物体检测的应用中。
Python如何实现HOG特征提取?以下是 HOG 最重要的方面:

  • HOG 专注于对象的结构。它提取边缘大小以及边缘方向的信息。
  • 它使用64x128像素的检测窗口,因此首先将图像转换为(64, 128)形状。
  • 然后将图像进一步分成小部分,然后计算每个部分的梯度和方向。它被分成8x16 个单元格,50% 重叠,所以总共有7x15 = 105个块,每个块由8x8像素的2x2 个单元格组成。
  • 我们取每个块(8x8像素单元)的64 个梯度向量并将它们放入一个9-  bin 直方图。
如何在Python中应用HOG特征提取(详细实现)

文章图片
以下是我们在 HOG 特征提取中采取的基本步骤:
Python HOG特征提取教程:调整图像大小Python HOG特征提取示例:如前所述,如果你有一张宽图像,则将图像裁剪到要应用 HOG 特征提取的特定部分,然后将其调整为适当的形状。
计算梯度现在调整大小后,我们需要计算 x 和 y 方向的梯度。梯度只是 x 和 y 方向的微小变化,我们需要在图像上卷积两个简单的过滤器。
计算x方向梯度的滤波器为:
如何在Python中应用HOG特征提取(详细实现)

文章图片
以下是我们将此过滤器应用于图像时:
如何在Python中应用HOG特征提取(详细实现)

文章图片
用于计算 y 方向梯度的滤波器为:
如何在Python中应用HOG特征提取(详细实现)

文章图片
以下是我们将此过滤器应用于图像时:
如何在Python中应用HOG特征提取(详细实现)

文章图片
计算幅度Python HOG特征提取教程:为了计算梯度的大小,使用以下公式:
如何在Python中应用HOG特征提取(详细实现)

文章图片
如何在Python中应用HOG特征提取(详细实现)

文章图片
计算方向梯度方向由下式给出:
如何在Python中应用HOG特征提取(详细实现)

文章图片
让我们举个例子,假设我们有下面的矩阵:
如何在Python中应用HOG特征提取(详细实现)

文章图片
在x轴的梯度将简单地是94-56 = 38,和93-55 = 38在y轴。
量级将是:
如何在Python中应用HOG特征提取(详细实现)

文章图片
梯度方向将是:
如何在Python中应用HOG特征提取(详细实现)

文章图片

Python HOG特征提取示例代码现在我们了解了理论,让我们来看看如何使用scikit-image库从图像中提取 HOG 特征。
Python实现HOG特征提取:首先,让我们为本教程安装必要的库:
pip3 install scikit-image matplotlib

【如何在Python中应用HOG特征提取(详细实现)】Python如何实现HOG特征提取?我将在一个可爱的猫图像上执行 HOG ,把它拿到这里并将它放在当前的工作目录中(当然,你可以使用任何你想要的图像)。让我们加载图像并显示它:
#importing required libraries from skimage.io import imread from skimage.transform import resize from skimage.feature import hog from skimage import exposure import matplotlib.pyplot as plt# reading the image img = imread('cat.jpg') plt.axis("off") plt.imshow(img) print(img.shape)

输出:
(1349, 1012, 3)

如何在Python中应用HOG特征提取(详细实现)

文章图片
调整图像大小:
# resizing image resized_img = resize(img, (128*4, 64*4)) plt.axis("off") plt.imshow(resized_img) print(resized_img.shape)

输出:
(128, 64, 3)

如何在Python中应用HOG特征提取(详细实现)

文章图片
现在我们只需使用hog()scikit-image 库中的函数:
#creating hog features fd, hog_image = hog(resized_img, orientations=9, pixels_per_cell=(8, 8), cells_per_block=(2, 2), visualize=True, multichannel=True) plt.axis("off") plt.imshow(hog_image, cmap="gray")

输出:
如何在Python中应用HOG特征提取(详细实现)

文章图片
Python实现HOG特征提取:该hog()函数以 6 个参数作为输入:
  • image:要应用 HOG 特征提取的目标图像。
  • orientations:我们要创建的直方图中的 bin 数量,原始研究论文使用了 9 个 bin,因此我们将传递 9 作为方向。
  • pixels_per_cell:决定单元格的大小,前面我们提到过,是8x8。
  • cells_per_block:每个块的单元数,如前所述,将是2x2。
  • visualize: 一个布尔值是否返回 HOG 的图像,我们将其设置为True这样我们就可以显示图像。
  • multichannel:我们将其设置True为告诉函数最后一个维度被视为颜色通道,而不是空间。
最后,如果要保存图像:
# save the images plt.imsave("resized_img.jpg", resized_img) plt.imsave("hog_image.jpg", hog_image, cmap="gray")

Python HOG特征提取教程总结Python如何实现HOG特征提取?现在你知道如何借助scikit-image 库在 Python 中执行 HOG 特征提取 。
在此处查看完整代码。

    推荐阅读