网站建设费用如何列支/福州网站seo
《数字图像处理-OpenCV/Python》第17章:图像的特征描述
本书京东 优惠购书链接 https://item.jd.com/14098452.html
本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html
第17章:图像的特征描述
特征检测与匹配是计算机视觉的基本任务,包括检测、描述和匹配三个相互关联的步骤。广泛应用于目标检测、图像检索、视频跟踪和三维重建等诸多领域。
OpenCV提供了丰富的特征检测和匹配算法,不仅继承了cv::Feature2D 类,而且采用了统一的定义和封装。
17.1 角点检测之Harris算法
角是直线方向的快速变化,角点定义为两条边的交点,是简单高效的特征。角点检测(Corner Detection)是特征检测的基础,Harris算法是经典的角点检测算法。
Harris角点检测
Harris角点检测算法的原理是,通过检测窗口在图像上移动,计算移动前后窗口中像素的灰度变化。角点是两条边的交点,其特征是检测窗口沿任方向移动都会导致灰度的显著变化。
Harris算法计算梯度的协方差矩阵M,协方差矩阵形状为椭圆,长短半轴由特征值 ( λ 1 , λ 2 ) (λ_1, λ_2) (λ1,λ2)决定,方向由特征向量决定。定义如下的角点响应函数 R。
R = d e t ( M ) − k [ t r a c e ( M ) ] 2 d e t ( M ) = λ 1 ∗ λ 2 t r a c e ( M ) = λ 1 + λ 2 \begin{aligned}R =& det(M) - k [trace(M)]^2 \\&det(M) = \lambda _1 * \lambda _2 \\&trace(M) = \lambda _1 + \lambda _2\end{aligned} R=det(M)−k[trace(M)]2det(M)=λ1∗λ2trace(M)=λ1+λ2
角点响应 R 只与矩阵 M 的特征值 λ 1 , λ 2 \lambda _1,\lambda _2 λ1,λ2 有关,可以用来判断区域是拐角、边缘还是平坦:
- λ 1 , λ 2 \lambda _1,\lambda _2 λ1,λ2 较小时, ∣ R ∣ |R| ∣R∣ 较小,即各个方向上灰度基本不变,表明检测器处于平坦区域;
- λ 1 > > λ 2 \lambda _1 >> \lambda _2 λ1>>λ2 或 λ 2 > > λ 1 \lambda _2 >> \lambda _1 λ2>>λ1 时, R < 0 R <0 R<0 ,即灰度在某个方向变化,但在其正交方向不变化,表明检测器处于边缘区域;
- λ 1 , λ 2 \lambda _1,\lambda _2 λ1,λ2 较大且数值相当时,灰度在某个方向及其正交方向都变化强烈,表明存在角点或孤立点。
Harris角点检测算法的重复性好、检测效率高,应用比较广泛。
Shi-Tomas角点检测
Shi-Tomas算法是对Harris角点检测算法的改进,区别在于将角点响应函数修改如下。
R = m i n ( λ 1 , λ 2 ) R = min(\lambda _1 , \lambda _2) R=min(λ1,λ2)
只有当梯度协方差矩阵M的特征值 λ 1 , λ 2 λ_1, λ_2 λ1,λ2 都大于阈值时,才判定为角点。
OpenCV的角点检测函数
在OpenCV中提供了函数cv.cornerEigenValsAndVecs计算图像或矩阵的特征值和特征向量,函数cv.cornerMinEigenVal计算梯度矩阵的最小特征值,函数cv.cornerHarris实现Harris角点检测。
函数原型
cv.cornerHarris(src, blockSize, ksize, k[, dst, borderType]) → dst
cv.cornerEigenValsAndVecs(src, blockSize, ksize[, dst, borderType]) → dst
cv.cornerMinEigenVal(src, blockSize[, dst, ksize, borderType]) → dst
参数说明
src:输入图像,单通道,数据类型为CV_8U或浮点数类型。
dst:输出图像,角点响应函数,大小与src相同,格式为CV_32FC1。
blockSize:检测器的滑动窗口尺寸,为整数。
ksize:Sobel梯度算子的孔径,即卷积核的大小,为整数。
k:Harris角点响应函数的调节参数,通常取0.04~0.06。
borderType:边界扩充的类型,不支持BORDER_WRAP。
注意问题
⑴ 函数cv.cornerHarris返回值是如下的Harris的角点响应图像R。
R = d s t ( x , y ) = d e t ( M ( x , y ) ) − k ∗ [ t r a c e ( M ( x , y ) ) ] 2 R=dst(x,y)=det(M(x,y))-k*[trace(M(x,y))]^2 R=dst(x,y)=det(M(x,y))−k∗[trace(M(x,y))]2
从角点响应图像中筛选大于检测阈值、且为局部最大值的点,就是图像的角点。检测阈值通常可以设为最大响应值的0.01~0.1。
⑵ 函数cv.cornerMinEigenVal与cv.cornerEigenValsAndVecs类似,区别在于它计算和保存矩阵M的最小特征值,即 m i n ( λ 1 , λ 2 ) min(λ_1 ,λ_2) min(λ1,λ2)。
在OpenCV中提供了函数cv.goodFeaturesToTrack实现Shi-Tomas角点检测。
先使用cornerHarris或cornerMinEigenVal计算角点响应函数,最小特征值小于阈值的角点被剔除;并进行非最大值抑制,只保留(3×3)邻域中的局部最大值;最后按照角点响应函数的大小排序,输出前N个结果。
函数原型
cv.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance[, corners, mask, blockSize, useHarrisDetector, k=0.04]) → corners
参数说明
src:输入图像,单通道,数据类型为CV_8U或浮点数类型。
corners:二维点向量集合的坐标(x,y),形如(n,1,2)的Numpy数组,浮点数。
maxCorners:角点数量的最大值N,整数。
qualityLevel:角点阈值系数,浮点数,取值范围0.0~1.0。
minDistance:角点之间的最小欧式距离。
mask:掩模图像,指定检测角点的区域,可选项。
blockSize:检测器的滑动窗口尺寸,可选项,默认值为3。
k:Harris角点响应函数的调节参数,可选项,默认值0.04。
useHarrisDetector:计算角点响应的方法,默认值false,使用cornerMinEigenVal计算,true表示使用cornerHarris计算。
注意问题
⑴ 输出参数corners是形如(n,1,2)的Numpy数组,表示检测到n个角点的坐标(x,y)。
⑵ 检测阈值是阈值系数qualityLevel与最大响应值的乘积,小于阈值的角点都被拒绝。例如,最大响应为1500,系数为0.1,则检测阈值为150。
⑶ 剔除间距小于maxDistance的角点,实现非最大值抑制方法,避免重复的邻近角点。
【例程1701】角点检测之Harris算法和Shi-Tomas算法
本例程示例Harris角点检测算法和Shi-Tomas角点检测算法的使用。
Harris角点检测函数的返回值是角点响应图像,需要进行阈值处理才能得到角点坐标。Shi-Tomas角点检测函数的返回值是角点坐标。
# 【1701】角点检测之Harris算法和Shi-Tomas算法
import cv2 as cv
import numpy as np
from matplotlib import pyplot as pltif __name__ == '__main__':img = cv.imread("../images/Fig1201.png", flags=1)gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)# Harris 角点检测算法dst = cv.cornerHarris(gray, 5, 3, k=0.04) # 角点响应图像,坐标(y,x)# Harris[dst>0.1*dst.max()] = [0,0,255] # 筛选角点,红色标记stack = np.column_stack(np.where(dst>0.2*dst.max())) # 阈值筛选角点 (n,2)corners = stack[:, [1, 0]] # 调整坐标次序:(y,x) -> (x,y)print("num of corners by Harris: ", corners.shape)imgHarris = img.copy()for point in corners: cv.drawMarker(imgHarris, point, (0,0,255), cv.MARKER_CROSS, 10, 1) # 在点(x,y)标记# Shi-Tomas 角点检测算法maxCorners, qualityLevel, minDistance = 100, 0.1, 5corners = cv.goodFeaturesToTrack(gray, maxCorners, qualityLevel, minDistance) # 角点坐标 (x,y)corners = np.squeeze(corners).astype(np.int) # 检测到的角点 (n,1,2)->(n,2)print("num of corners by Shi-Tomas: ", corners.shape[0])imgShiTomas = np.copy(img)for point in corners: # 注意坐标次序cv.drawMarker(imgShiTomas, (point[0], point[1]), (0,0,255), cv.MARKER_CROSS, 10, 2) # 在点(x,y)标记plt.figure(figsize=(9, 3.3))plt.subplot(131), plt.title("1. Original")plt.axis('off'), plt.imshow(cv.cvtColor(img, cv.COLOR_BGR2RGB))plt.subplot(132), plt.title("2. Harris corners")plt.axis('off'), plt.imshow(cv.cvtColor(imgHarris, cv.COLOR_BGR2RGB))plt.subplot(133), plt.title("3. Shi-tomas corners")plt.axis('off'), plt.imshow(cv.cvtColor(imgShiTomas, cv.COLOR_BGR2RGB))plt.tight_layout()plt.show()
运行结果:
num of corners by Harris: 589
num of corners by Shi-Tomas: 66
图17-1 Harris角点检测和Shi-Tomas角点检测
程序说明:
⑴ 程序运行结果如图17-1所示。子图1是原始图像,子图2是Harris角点检测的结果,子图3是Shi-Tomas角点检测的结果。
⑵ 运行结果表明,Harris算法函数检测到的角点数量远大于Shi-Tomas算法函数的结果。这是由于角点周围像素的响应值都很高,都被识别为角点,因此Harris函数会检测到大量重复的角点。
版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/140212758)
Copyright 2024 youcans, XUPT
Crated:2024-07-05
《数字图像处理-OpenCV/Python》 独家连载专栏 : https://blog.csdn.net/youcans/category_12418787.html
相关文章:

《数字图像处理-OpenCV/Python》第17章:图像的特征描述
《数字图像处理-OpenCV/Python》第17章:图像的特征描述 本书京东 优惠购书链接 https://item.jd.com/14098452.html 本书CSDN 独家连载专栏 https://blog.csdn.net/youcans/category_12418787.html 第17章:图像的特征描述 特征检测与匹配是计算机视觉的…...

考研数学什么时候开始强化?如何保证进度不掉队?
晚了。我是实在人,不给你胡乱吹,虽然晚了,但相信我,还有的救。 实话实说,从七月中旬考研数一复习完真的有点悬,需要超级高效快速... 数二的时间也有点紧张... 中间基本没有试错的时间,让你换…...

Node.js的下载、安装和配置
天行健,君子以自强不息;地势坤,君子以厚德载物。 每个人都有惰性,但不断学习是好好生活的根本,共勉! 文章均为学习整理笔记,分享记录为主,如有错误请指正,共同学习进步。…...

java.util.Properties类介绍
java.util.Properties 是 Java 编程语言中的一个类,用于管理应用程序的配置信息,它继承自 java.util.Hashtable 类,因此它也是基于键值对的数据结构。主要用途是存储应用程序的配置参数,比如数据库连接信息、用户设置等。 以下是 Properties 类的一些主要特点和用法: 存储…...

SpringBoot后端验证码-防止密码爆破功能
一、简介 为了防止网站的用户被通过密码典爆破。引入验证码的功能是十分有必要的。而前端的验证码又仅仅是只防君子不防小人。通过burpsuit等工具很容易就会被绕过。所以后端实现的验证码才是对用户信息安全的一大重要保障。 实现思路: 1.引入图形生成的依赖 2.生成…...

ChatEval:通过多代理辩论提升LLM文本评估质量
论文地址:ChatEval: Towards Better LLM-based Evaluators through Multi-Agent Debate | OpenReviewText evaluation has historically posed significant challenges, often demanding substantial labor and time cost. With the emergence of large language models (LLMs…...

关于美国服务器IP的几个常见问题
在租用美国服务器时,与之密切相关的一个要素就是IP,关于IP的问题总是有人问起,这里列举几项常见的问题,以供参考。 一、IP收费吗? 一般情况下,在租用服务器时,会赠送几个IP,因为这些…...

redis运维:sentinel模式如何查看所有从节点
1. 连接到sentinel redis-cli -h sentinel_host -p sentinel_port如: redis-cli -h {域名} -p 200182. 发现Redis主服务器 连接到哨兵后,我们可以使用SENTINEL get-master-addr-by-name命令来获取当前的Redis主服务器的地址。 SENTINEL get-master-a…...

价格疑云?格行WiFi创始人亲解谜团,性价比之王如何炼成?
随身wifi行业乱象频出,作为行业领跑品牌的格行随身wifi,关于价格问题一直备受质疑。关于设备上的“格行自有格行的骄傲”也被外界认定为是自大,甚至发展的线下一万多家门店也被同行不认可。近日,企业财经专访记者有幸采访了格行随…...

揭秘“消费即赚”的循环购模式
大家好,我是吴军,今天我将带您深入探索一种颠覆传统的新型商业模式——循环购模式。在这个模式中,消费者不仅能享受到购物的乐趣,还能通过消费获得实实在在的回报,甚至实现“边消费边赚钱”的奇妙体验。您是否好奇&…...

javaweb个人主页设计(html+css+js)
目录 1 前言和要求 1.1 前言 1.2 设计要求 2 预览 2.1 主页页面 2.2 个人简介 2.3 个人爱好 2.4 个人成绩有代码,但是图片已省略,可以根据自己情况添加 2.5 收藏夹 3 代码实现 3.1 主页 3.2 个人简介 3.3 个人爱好 3.4 个人成绩ÿ…...

Android常用设计模式(小白必看)
不要担心冗长,3分钟解决面试和学习问题,收藏再看 目的:当作一种模板,结合自身特点,针对项目需求来使用 目录 单例模式 特点: 实现方式: 1、饿汉式 2、线程安全的懒汉式 3、双重校验锁 使…...

swift获取app网络和本地网络权限
请求蓝牙权限: //蓝牙if #available(iOS 13.1, *) {let autostate CBManager.authorizationif(autostate .notDetermined){print("")self.manager CBCentralManager(delegate: nil, queue: DispatchQueue.main,options: [CBCentralManagerOptionShowPo…...

用LangGraph、 Ollama,构建个人的 AI Agent
如果你还记得今年的 Google I/O大会,你肯定注意到了他们今年发布的 Astra,一个人工智能体(AI Agent)。事实上,目前最新的 GPT-4o 也是个 AI Agent。 现在各大科技公司正在投入巨额资金来创建人工智能体(AI …...

ubuntu20.04系统编译yolov8-obb.cpp代码记录
任务内容 在做ncnn-yolov8-obb模型安卓端移植的过程中,对开源代码进行调试。为了确认开源代码yolov8-obb.cpp可以移植开发,先对代码进行复现。因此在linux系统下编译yolov8-obb.cpp代码,验证项目中的代码是可运行的。然后再把这个代码中的模…...

JavaScript的数组与函数
数组 <script type"text/javascript">/** 知识点:数组* 理解:一维数组的容器* 概念:* 1.数组中的数据叫做元素* 2.元素都有编号叫做下标/索引* 3.下标从0开始* 注意:* 1.数组作为数据的容器…...

opencv--把cv::Mat数据转为二进制数据的保存和读取
保存 #include <opencv2/opencv.hpp> #include <iostream> #include <fstream>void saveMatToBinary(const cv::Mat& mat, const std::string& filename) {std::ofstream ofs(filename, std::ios::binary);if (!ofs.is_open()) {std::cerr <<…...

【微信小程序开发实战项目】——个人中心页面的制作
👨💻个人主页:开发者-曼亿点 👨💻 hallo 欢迎 点赞👍 收藏⭐ 留言📝 加关注✅! 👨💻 本文由 曼亿点 原创 👨💻 收录于专栏:…...

基于MCU平台的HMI开发的性能优化与实战(下)
继上篇《基于MCU平台的HMI开发的性能优化与实战(上)》深入探讨了提升MCU平台HMI开发效率和应用性能的策略后,本文将专注于NXP i.MX RT1170 MCU平台的仪表盘开发实践。我们将重点介绍Qt for MCUs的优化技巧,展示如何通过实际案例应…...

评估测试用例有效性 5个方面
评估测试用例的有效性是确保软件测试活动能够达到预期目标的关键步骤,有助于测试团队优化测试计划,提高测试效率,减少返工,节省成本。如果缺乏对测试用例的有效性评估,可能会导致测试用例无法覆盖关键功能点࿰…...

CentOS 7.9 快速更换 阿里云源教程
CentOS 7.9 更换源教程 总结 # 下载 wget yum -y install wget # 备份 yum 源 mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.bak # 下载阿里云的yum源到 /etc/yum.repos.d/ # 此处以 CentOS 7 为例,如果是其它版本或者系统的话&#…...

Python 编程快速上手——让繁琐工作自动化(第2版)读书笔记01 Python基础快速过关
Python 编程快速上手——让繁琐工作自动化(第2版)读书笔记01 Python基础快速过关 1 python基础概念 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。 python运算符顺序 **——%——//——/——*——-——python中常见的数据…...

实战 | YOLOv8使用TensorRT加速推理教程(步骤 + 代码)
导 读 本文主要介绍如何使用TensorRT加速YOLOv8模型推理的详细步骤与演示。 YOLOv8推理加速的方法有哪些? YOLOv8模型推理加速可以通过多种技术和方法实现,下面是一些主要的策略: 1. 模型结构优化 网络剪枝:移除模型中不重要的神经元或连接,减少模型复杂度。 模型精…...

绝区陆--大语言模型的幻觉问题是如何推动科学创新
介绍 大型语言模型 (LLM)(例如 GPT-4、LLaMA-2、PaLM-2、Claude-2 等)已展示出为各种应用生成类似人类文本的出色能力。然而,LLM 的一个鲜为人知的方面是它们倾向于“产生幻觉”或生成不正确或没有根据的事实陈述。我不认为这仅仅是一个限制…...

集训 Day 2 模拟赛总结
复盘 7:30 开题 想到几天前被普及组难度模拟赛支配的恐惧,下意识觉得题目很难 先看 T1,好像不是很难,魔改 Kruskal 应该就行 看 T2 ,感觉很神奇,看到多串匹配想到 AC 自动机,又想了想 NOIP …...

Linux系统(CentOS)安装Mysql5.7.x
安装准备: Linux系统(CentOS)添加防火墙、iptables的安装和配置 请访问地址:https://blog.csdn.net/esqabc/article/details/140209894 1,下载mysql安装文件(mysql-5.7.44为例) 选择Linux通用版本64位(L…...

YModem在Android上的实现
(一)参考文献 【安卓相关】蓝牙基于Ymodem协议发送bin文件,对硬件设备进行升级。 - 简书当Android BLE遇上YModem - 简书 (二)收发机制 基于我们具体的需求,在原有的基础上加了一下前后的处理。 * MY YMO…...

循环练习题
代码: public static void main(String[] args) { for (char c1a;c1<z;c1){System.out.print(" "c1); }System.out.println();for (char c2Z;c2>A;c2--){System.out.print(" "c2);}} 结果为:...

Seata解决分布式事务
我举的例子是:在网上购物时,我们支付后,订单微服务会更新订单状态,同时会远程调用购物车微服务清空购物车,和调用商品微服务完成商品库存减一。 我们曾经说的事务是只能在本微服务完成回滚,意思就是如果过…...

C语言编译报错error: expected specifier-qualifier-list before
C语言编译报错 error: storage class specified for parameter error: expected specifier-qualifier-list before 原因: 报错信息 "expected specifier-qualifier-list" 通常表示编译器期望在某个地方出现类型指定列表,但却没有找到。这通常…...