目标检测(SIFT算法,HOG特征可视化)

文章介绍了SIFT算法在图像匹配中的作用,展示如何使用SIFT进行关键点检测和匹配,并通过示例代码说明了其在图像中的应用。同时,文章也探讨了HOG特征在对象检测中的重要性,提供了计算和可视化HOG特征的Python代码片段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题1:请用下面鸡蛋模板在原图中检测出对应的鸡蛋图像。

SIFT(Scale-Invariant Feature Transform)是一种经典的图像特征提取算法,它能够在不同尺度和旋转情况下提取出具有良好稳定性的特征点。SIFT算法的主要步骤包括关键点检测、关键点定位、关键点描述和关键点匹配。SIFT算法通过提取出具有尺度不变性、旋转不变性和部分视角不变性的特征描述子,可用于图像检索、目标跟踪、图像拼接等计算机视觉任务。

import cv2

source_image = cv2.imread('template.jpg')  # 灰度图像
target_image = cv2.imread('target.png')  # 灰度图像

result = cv2.matchTemplate(target_image, source_image, cv2.TM_CCOEFF_NORMED)
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result)
# 确定模板图像的宽度和高度
template_width, template_height = source_image.shape[:2]
# 绘制矩形框标记匹配区域
top_left = max_loc
bottom_right = (top_left[0] + template_width, top_left[1] + template_height)
cv2.rectangle(target_image, top_left, bottom_right, (0, 255, 0), 2)


sift = cv2.SIFT_create()
keypoints_source, descriptors_source = sift.detectAndCompute(source_image, None)
keypoints_target, descriptors_target = sift.detectAndCompute(target_image, None)
matcher = cv2.BFMatcher()
matches = matcher.match(descriptors_source, descriptors_target)
matches = sorted(matches, key=lambda x: x.distance)
matched_image = cv2.drawMatches(source_image, keypoints_source, target_image, keypoints_target, matches[:500], None,
                               flags=cv2.DrawMatchesFlags_NOT_DRAW_SINGLE_POINTS)
cv2.imshow('Matches', matched_image)
cv2.imwrite('Result.jpg', matched_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

 结果图:

可以看到,使用cv2.matchTemplate可以实现原图的图像匹配,使用cv2.SIFT_create()方法可以实现SIFT特征提取算法,匹配出原图和模板具有尺度不变性、旋转不变性的特征点,效果还是不错的。

问题2:请计算得到下图的HOG特征,并对其可视化。

 HOG(Histogram of Oriented Gradient)特征在对象检测与模式匹配中是一种常见的特征提取算法,是基于本地像素块进行特征直方图提取的一种算法。HOG算法的基本思想是将图像分成小的局部区域,计算每个区域内梯度方向的直方图,并将这些直方图连接起来形成特征描述子。HOG算法通过统计图像中不同方向上的梯度信息,能够捕捉到物体的边缘和纹理等局部特征,具有较好的鲁棒性和抗干扰能力。在目标检测中,通常使用滑动窗口和支持向量机(SVM)等方法,结合HOG特征来进行目标的定位和识别。

import cv2
import numpy as np
from skimage.feature import hog



# 加载图像
image = cv2.imread('target2.jpg')

# 将图像转换为灰度图像
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 定义HOG参数
orientations = 9  # 方向的数量
pixels_per_cell = (8, 8)  # 每个细胞的像素数
cells_per_block = (2, 2)  # 每个块的细胞数

# 计算HOG特征
features, hog_image = hog(gray_image, orientations=orientations,
                         pixels_per_cell=pixels_per_cell,
                         cells_per_block=cells_per_block,
                         visualize=True, block_norm='L2-Hys')

# 对HOG特征进行归一化处理
features = features.reshape(-1, orientations)
features = np.sqrt(features)
features = features / np.linalg.norm(features)
print('HOG特征数组:', features)
cv2.imshow('HOG Features', hog_image)
cv2.imwrite('HOG Features.png', hog_image)
cv2.waitKey(0)
cv2.destroyAllWindows()

结果图:

可以看到,HOG特征数组成功计算出来,并成功可视化HOG特征在输入图像上的分布情况。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

F0reverBound

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值