机器学习:opencv--特征检测

目录

前言

[一、 Harris 角点检测](#一、 Harris 角点检测)

1.基本思想

2.代码实现

[二、 SIFT(尺度不变特征变换)](#二、 SIFT(尺度不变特征变换))

1.代码实现


前言

特征检测是计算机视觉中的一个重要任务,旨在从图像中提取具有辨识度的关键点或区域。这些特征可以用于后续的图像分析、匹配和识别。

一、 Harris 角点检测

  • Harris角点检测算法是一种常用的计算机视觉算法,用于检测图像中的角点。该算法通过计算图像中每个像素的局部自相关矩阵,来判断该像素是否为角点。

1.基本思想

  1. 使用一个固定的小窗口在图像上进行任意方向的滑动,
  2. 比较滑动前与滑动后两种情况,
  3. 窗口中的像素灰度变化程度,
  4. 如果存在任意方向上的滑动,都有着较大灰度变化(sobel算子),
  5. 那么我们可以认为该窗口中存在角点
  • 例如该图中黄色框框就是一个检测窗口,任意方向滑动之后比较滑动前后的变化,如果有较大变化,就认为该窗口存在角点

2.代码实现

  1. 传入图像,变成灰度图
  2. 进行角点检测,返回图像大小的矩阵,矩阵中每个值是每个像素为角点的概率
  3. 该代码中通过是否大于最大概率的十分之一来判断是否是角点
  4. 若是,则标为绿色
python 复制代码
import cv2

"""角点检测harris"""
# 角点指图像中局部区域与周围区域有较大灰度变化的点或像素。
# cornerHarris(img,blockSize,ksize, k[, dst[, borderType]])-> dst
#   img:输入图像。
#   blockSize:角点检测中要考虑的领域大小。
#   ksize:Sobel求导中使用的窗口大小。
#   k:Harris角点检测方程中的自由参数,取值参数为[0.04,0.06]
# dst:返回numpy.ndarray对象,大小和src相同,值越大,对应像素点是角的概奉越高

img = cv2.imread('huanghelou.png')
# img = cv2.imread('huanghelou1.JPG')
# img = cv2.imread('face.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
dst = cv2.cornerHarris(gray, 4, 3, 0.06)

# 标记检测到的角点
img[dst > 0.1 * dst.max()] = [0, 255, 0]
cv2.imshow('img', img)
cv2.waitKey(0)

print(dst[dst > 0.06 * dst.max()])

输出:

二、 SIFT(尺度不变特征变换)

  • SIFT特征具有对旋转、尺度缩放、亮度变化等保持不变性,是一种非常稳定的局部特征。
  • 其原理是通过高斯图像金字塔以及高斯模糊等系列算法来获取图像的关键点

1.代码实现

  1. 传入图像,变成灰度图
  2. 创建sift对象,
  3. 使用.detect方法查找图像的关键点
  4. 再使用.drawKeypoints方法在图像上绘制出关键点以及关键点的信息
  5. 使用.compute方法计算关键点的描述符,将每个点映射到128维的矩阵内,
  6. 一行数值表示一个点,一个点有128个特征,有助于后面进行不同图像之间的关键点匹配
python 复制代码
import cv2
import numpy as np

"""特征提取sift"""
# 检测图像中的关键点
# cv2.SIFT_create()
# #cv2.xfeatures2d.SIFT_create()#创建一个sift特征的提取对象
# sift.detect(img)在图像中查找关键点

# img = cv2.imread('man.png')
img = cv2.imread('face.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
sift = cv2.SIFT_create()  # 创建sift对象
kp = sift.detect(gray)  # 查找关键点

# 绘制关键点
# drawKeypoints(image, keypoints, outImage, color=None, flags=None)
# image:原始图片
# keypoints:从原图中获得的关键点,这也是画图时所用到的数据
# outputimage:输出图像,可以是原始图片,也可以是None
# color:颜色设置,通过修改(b,g,r)的值,更改画笔的颜色,b=蓝色,q=绿色,r=红色。
# flags:绘图功能的标识设置
img_sift = cv2.drawKeypoints(img, kp, None, flags=cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS)
cv2.imshow('img_sift', img_sift)
cv2.waitKey(0)

# 使用sift.compute()计算关键点描述符,方便后期的特征匹配
kp, des = sift.compute(img, kp)
print(np.array(kp).shape, des.shape)
for i in kp:
    print(i.pt)

输出:

  • 利用kp中的pt属性,获取每个关键点的坐标
相关推荐
Lilith的AI学习日记1 分钟前
什么是预训练?深入解读大模型AI的“高考集训”
开发语言·人工智能·深度学习·神经网络·机器学习·ai编程
半导体守望者11 分钟前
ADVANTEST R3764 66 R3765 67爱德万测试networki connection programming网络程序设计手册
经验分享·笔记·功能测试·自动化·制造
聚客AI29 分钟前
PyTorch玩转CNN:卷积操作可视化+五大经典网络复现+分类项目
人工智能·pytorch·神经网络
程序员岳焱32 分钟前
深度剖析:Spring AI 与 LangChain4j,谁才是 Java 程序员的 AI 开发利器?
java·人工智能·后端
柠檬味拥抱33 分钟前
AI智能体在金融决策系统中的自主学习与行为建模方法探讨
人工智能
智驱力人工智能44 分钟前
智慧零售管理中的客流统计与属性分析
人工智能·算法·边缘计算·零售·智慧零售·聚众识别·人员计数
workflower1 小时前
以光量子为例,详解量子获取方式
数据仓库·人工智能·软件工程·需求分析·量子计算·软件需求
壹氿1 小时前
Supersonic 新一代AI数据分析平台
人工智能·数据挖掘·数据分析
柠石榴1 小时前
【论文阅读笔记】《A survey on deep learning approaches for text-to-SQL》
论文阅读·笔记·深度学习·nlp·text-to-sql
张较瘦_1 小时前
[论文阅读] 人工智能 | 搜索增强LLMs的用户偏好与性能分析
论文阅读·人工智能