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 直方图。
文章图片
以下是我们在 HOG 特征提取中采取的基本步骤:
Python HOG特征提取教程:调整图像大小Python HOG特征提取示例:如前所述,如果你有一张宽图像,则将图像裁剪到要应用 HOG 特征提取的特定部分,然后将其调整为适当的形状。
计算梯度现在调整大小后,我们需要计算 x 和 y 方向的梯度。梯度只是 x 和 y 方向的微小变化,我们需要在图像上卷积两个简单的过滤器。
计算x方向梯度的滤波器为:
文章图片
以下是我们将此过滤器应用于图像时:
文章图片
用于计算 y 方向梯度的滤波器为:
文章图片
以下是我们将此过滤器应用于图像时:
文章图片
计算幅度Python HOG特征提取教程:为了计算梯度的大小,使用以下公式:
文章图片
文章图片
计算方向梯度方向由下式给出:
文章图片
让我们举个例子,假设我们有下面的矩阵:
文章图片
在x轴的梯度将简单地是94-56 = 38,和93-55 = 38在y轴。
量级将是:
文章图片
梯度方向将是:
文章图片
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)
文章图片
调整图像大小:
# resizing image
resized_img = resize(img, (128*4, 64*4))
plt.axis("off")
plt.imshow(resized_img)
print(resized_img.shape)
输出:
(128, 64, 3)
文章图片
现在我们只需使用
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特征提取:该
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 特征提取 。
在此处查看完整代码。
推荐阅读
- 如何在Python中使用OpenCV检测图像中的轮廓()
- 如何在Python中使用Scikit-Learn进行特征选择()
- 如何在Python中使用HuggingFac Transformers微调BERT以进行文本分类()
- Python使用Huggingface Transformers实现对话式AI聊天机器人
- 在Python中使用Kafka检测流媒体应用程序中的欺诈交易
- 使用Python中的Imblearn和Smote变体库进行不平衡学习
- 如何在Python中使用Transformers从头开始??训练BERT()
- 如何在Python中使用Plotly创建绘图(完整指南)
- 一键u盘装xp系统,教您如何运用U盘装xp系统