opencv实战项目二十八:基于Shi-Tomasi算法的箱子角点检测

news2024/11/19 5:30:44

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录

  • 前言
  • 一、角点检测方法概述
  • 二、Shi-Tomasi角点检测法


前言

随着科技的飞速发展,计算机视觉技术在我们的日常生活中扮演着越来越重要的角色。从无人驾驶汽车到智能手机的摄像头,再到各种智能监控系统,角点检测作为计算机视觉领域的基础技术之一,其应用范围日益广泛。在本文中,我们将聚焦于一种经典的角点检测算法——Shi-Tomasi角点检测算法,并以箱子角点检测为例,探讨其在实际应用中的效果和优势。Shi-Tomasi角点检测算法是基于Harris角点检测算法改进而来的一种高效、稳定的角点检测方法。它通过对图像中的每个像素点进行评分,筛选出具有显著角点特征的点,从而为后续的图像处理任务提供重要依据。在众多角点检测算法中,Shi-Tomasi算法以其优异的性能和简洁的实现方式,受到了广大研究者和工程师的青睐。
本文将首先介绍Shi-Tomasi角点检测算法的基本原理,然后通过一个具体的实例——箱子角点检测,展示算法在实际应用中的操作步骤和效果。希望通过本文的介绍,能让读者对Shi-Tomasi角点检测算法有更深入的了解,并在实际项目中灵活运用这一技术。

一、角点检测方法概述

角点检测是计算机视觉领域中的一个重要技术,它旨在识别图像中那些显著的特征点,这些点在几何上通常标志着物体轮廓的显著转折,而在图像处理中则表现为在两个方向上的梯度都相对较大。这些特征点的检测对于图像分析和理解至关重要,因为它们是特征提取的核心部分,能够显著提升图像匹配与识别的准确性和效率。此外,角点检测在运动分析领域也扮演着关键角色,它有助于跟踪对象的运动轨迹。
为了实现角点检测,研究人员开发了一系列算法,其中包括Harris、Shi-Tomasi、Susan、Fast、SIFT和SURF等。Harris和Shi-Tomasi算法的原理是基于图像的局部自相关性和特征值,它们能够有效地识别出图像中的角点。Susan算法则采用圆形模板来比较中心像素与周围像素的亮度,以此判断是否为角点。Fast算法通过快速比较像素周围的小区域内的亮度,实现了角点的快速检测。而SIFT和SURF算法不仅能够检测到角点,还能提取出尺度不变的特征描述符,这使得它们在图像的尺度变换下依然能够保持匹配的稳定性。值得注意的是,SURF算法在计算速度上优于SIFT,这使得它在实时应用中更为实用。本次项目使用的算法为Shi-Tomasi法,下面进行以此介绍。

二、Shi-Tomasi角点检测法

Shi-Tomasi角点检测算法是一种用于计算机视觉中的图像特征提取方法,它基于Harris角点检测算法。该算法由J. Shi和C. Tomasi在1994年提出,旨在找到图像中具有明显特征的区域,这些区域在图像中表现为角点。Shi-Tomasi算法的基本思想是检测图像中各个点的局部特征,通过计算每个像素点的兴趣值(角点响应值)来确定是否为角点。以下是算法的主要步骤:

  1. 图像差分: 计算图像在水平方向和垂直方向的梯度,即I_x和I_y。 计算图像的协方差矩阵M,其元素由以下公式给出:
    在这里插入图片描述

    这个矩阵描述了图像在该点的结构。

  2. 特征值计算: 计算协方差矩阵M的特征值λ1和λ2。
    特征值的大小反映了图像在该点的结构稳定性,较大的特征值意味着该点周围的结构变化较大,可能是一个角点。

  3. 角点响应值: Shi-Tomasi算法使用最小特征值来定义角点响应值R,而不是像Harris算法那样使用特征值的乘积和差:
    在这里插入图片描述

    如果R大于某个阈值,则认为该点是角点。

  4. 非极大值抑制: 为了确保检测到的角点是局部最优的,通常会使用非极大值抑制来细化角点,即只保留响应值最大的角点,而移除附近响应值较小的点。

在opencv中提供了 Shi-Tomasi算法的api:cv2.goodFeaturesToTrack(image, maxCorners, qualityLevel, minDistance, mask=None, blockSize=None, useHarrisDetector=False, k=0.04)
参数说明:

image: 待检测的灰度图像。
maxCorners: 检测到的角点的最大数量。如果检测到的角点数量超过这个值,则只保留响应值最大的角点。
qualityLevel: 角点的质量水平,取值范围在0到1之间。它是用来过滤掉那些响应值不够大的角点。只有那些响应值大于最大响应值乘以qualityLevel的角点才会被保留。
minDistance: 保留的角点之间的最小欧氏距离。这个参数有助于避免角点聚集在一起,保证角点分布均匀。
mask: 一个可选参数,它指定了检测角点的区域。只有在mask的非零区域才会检测角点。
blockSize: 计算协方差矩阵时考虑的邻域大小。
useHarrisDetector: 一个布尔值,如果设置为True,则使用Harris角点检测算法代替Shi-Tomasi算法。
k: 与Harris角点检测算法相关的自由参数。

返回值:

返回检测到的角点的坐标列表,每个坐标以 (x, y) 的形式表示。

使用代码:

import cv2
import numpy as np
# 读取图像
image = cv2.imread(r'F:\cv_traditional\1.jpg', cv2.IMREAD_GRAYSCALE)

# Shi-Tomasi 角点检测参数
max_corners = 10  # 要检测的最大角点数量
quality_level = 0.03 # 角点质量等级,范围从 0 到 1,越高表示角点质量越好
min_distance = 5  # 角点之间的最小欧氏距离

# 检测角点
corners = cv2.goodFeaturesToTrack(image, max_corners, quality_level, min_distance)

# 将角点坐标转换为整数
corners = np.int0(corners)

# 在图像上绘制角点
for corner in corners:
    x, y = corner.ravel()
    cv2.circle(image, (x, y), 3, (0,0,0), -1)  # 在角点位置画圆

# 显示图像
cv2.imshow('Shi-Tomasi Corner Detection', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

效果:
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2183913.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Oracle exadata存储节点更换内存操作及报错处理

1.报错信息 在进行Oracle exadata巡检时,发现cell节点有一根内存报错,报错信息如下: 报错内存位置为:CPU1 P1/D2槽位 报错内存信息: 根据报错信息确认内存PN号、大小等息,并将信息反馈公司,及…

git初级使用学习(图文)

以后工作少不了使用git,记录一下今天的学习,防止忘记 Git 是一个分布式版本控制系统,常用于代码管理和团队协作 首先新建一个文件夹,作为本地仓库 mkdir git-practice 初始化仓库 git init 新建个test1.cpp文件,…

CSS中字体图标的使用

引言: 在网页设计当中,会有很多很简洁的图标,比如箭头,照相机,放大镜等 这些大概率都是使用字体图标来完成的,因为字体图标比较简洁高效,不会像图片一样需要向浏览器请求数据。那么字体图标该…

第七篇:重定向和管道相关知识总结

续第六篇:Linux进程的相关知识总结(2)-CSDN博客 目录 第五章:管道和重定向 5.1重定向 5.1.1产生重定向的原因 5.1.2重定向的应用 5.1.3查看现有的进程号、文件描述符 5.1.3.1文件描述符(FD、文件句柄&#xff0…

Redis介绍及整合Spring

目录 Redis介绍 Spring与Redis集成 Redis介绍 Redis是内存数据库,Key-value型NOSQL数据库,项目上经常将一些不经常变化并且反复查询的数据放入Redis缓存,由于数据放在内存中,所以查询、维护的速度远远快于硬盘方式操作数据&#…

Vortex GPGPU的github流程跑通与功能模块波形探索

文章目录 前言一、跟着官方文档走一遍二、cache子模块的波形仿真2.1 必要的文件内容解释2.2 cache子模块波形仿真——目前环境没啥问题了,就vcd因为配置问题出不来 总结 前言 看了那么久的verilog代码和文档,但还是没怎么接触过Vortex GPGPU全流程跑通与…

Vscode、小皮面板安装

Vscode下载官网:Visual Studio Code - Code Editing. Redefined 小皮面板官网:小皮面板-好用、安全、稳定的Linux服务器面板! (xp.cn) 一、进入vscode官网下载 后面就是一通无脑下一步下一步 安装好后的界面如下图 二、下载小皮&#xff0…

面试题1-fail-safe机制与fail-fast 机制

1.定义 Fail-safe 和 Fail-fast,是多线程并发操作集合时的一种失败处理机制。 1.1.Fail-Safe机制 1.1.1.定义 Fail-Safe 机制的设计目标是在发生故障时,系统仍然能够继续运行,尽量避免导致整个系统崩溃。即使发生错误或异常,系统…

记录|Modbus-TCP产品使用记录【摩通传动】

目录 前言一、摩通传动实验图1.1 配置软件 IO_Studio1.2 测试软件Modbus Poll1.2.1 读写设置测试1.2.2 AI信号的读取 1.3 对应的C#连接Modbus的测试代码如下【自制,仅供参考】1.4 最终实验图 更新时间 前言 参考文章: 自己需要了解和对比某些产品的Modbu…

GAN|对抗| 生成器更新|判别器更新过程

如上图所示,生成对抗网络存在上述内容: 真实数据集;生成器;生成器损失函数;判别器;判别器损失函数;生成器、判别器更新(生成器和判别器就是小偷和警察的关系,他们共用的…

【STM32单片机_(HAL库)】4-4【定时器TIM】脉冲计数配置步骤及实验

脉冲计数配置步骤 1.硬件 STM32单片机最小系统按键模块 2.软件 定时器HAL驱动层文件添加counter驱动文件添加GPIO常用函数main.c程序 #include "sys.h" #include "delay.h" #include "led.h" #include "uart1.h" #include "…

热销的五款骨传导耳机真的好用吗?无广测评五款骨传导耳机

在科技快速发展的背景下,产品设计的重点开始转向考虑人们的行为方式与健康需求。耳机,已成为现代生活中不可或缺的一部分,无论是出于日常习惯、隐私考量,还是在公共场合的礼貌需求,耳机都始终陪伴着我们。 随着耳机在…

JAVAEE如何实现网页(jsp)间的数据传输?一文总结

刚刚接触到JAVAEE的WEB开发,解释不周的地方希望感谢指正!!! 情景如下: 我的使用是21版的IDEA,9.03版本的tomcat,来做一个示范。 构建项目 点击下一步 -> 完成,等待项目构建结束…

如何设计具体项目的数据库管理

### 例三:足协的数据库管理算法 #### 角色: - **ESFP学生**:小明 - **ENTP老师**:张老师 #### 主题:足协的数据库管理算法 --- **张老师**:小明,今天我们来讨论一下足协的数据库管理算法。你…

CATIA风扇

记录下风扇绘制的要点 1、 图纸 2、 先画出投影面的草图,下图中白色线,然后目标是获得紫色线,紫色线是白色线在淡黄色面上的投影。红色线和蓝色线是螺旋线。 3、根据以下投影视图,螺旋线从起点到终点,围绕旋转轴旋转一…

【C++】第一节:C++入门

1、C关键字 2、命名空间 在C/C中,变量、函数和后面要学到的类都是大量存在的,这些变量、函数和类的名称将都存在于全局作用域中,可能会导致很多冲突。使用命名空间的目的是对标识符的名称进行本地化,以避免命名冲突或名字污染&am…

Activiti7 工作流引擎学习

目录 一. 什么是 Activiti 工作流引擎 二. Activiti 流程创建步骤 三. Activiti 数据库表含义 四. BPMN 建模语言 五. Activiti 使用步骤 六. 流程定义与流程实例 一. 什么是 Activiti 工作流引擎 Activiti 是一个开源的工作流引擎,用于业务流程管理&#xf…

SpringCloud源码:服务端分析(二)- EurekaServer分析

背景 从昨日的两篇文章:SpringCloud源码:客户端分析(一)- SpringBootApplication注解类加载流程、SpringCloud源码:客户端分析(二)- 客户端源码分析。 我们理解了客户端的初始化,其实…

车辆种类分类识别数据集,可以识别7种汽车类型,已经按照7:2:1比 例划分数据集,训练集1488张、验证集507张,测试集31张, 共计2026张。

车 车辆种类分类识别数据集,可以识别7种汽车类型,已经按照7:2:1比 例划分数据集,训练集1488张、验证集507张,测试集31张, 共计2026张。 数据集分为一类客车(tinycar) ,类客车(midcar) ,三类 客车(bigcar) ,…

数据库重建索引的作用?

重建索引是数据库管理中的一个重要操作,主要用于优化数据库性能和提高查询效率。以下是重建索引的一些主要用途: 提高查询性能:随着时间的推移,数据的插入、更新和删除会导致索引碎片化,重建索引可以减少碎片&#xf…