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

news/2024/12/22 18:34:23/

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

文章目录

  • 前言
  • 一、角点检测方法概述
  • 二、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.ppmy.cn/news/1531498.html

相关文章

iPhone不会爆炸?现实证明带电池的产品是真的可以变成武器的!

随着黎巴嫩的BP、太阳能电池板、家用电器等诸多消费电子产品爆炸伤人,一些人士也开始担忧美国的iPhone也可能爆炸,也有人反驳iPhone不会爆炸,那么iPhone这种电子产品到底能否远程控制将它变成武器呢?看看现实的诸多例子能给大家答…

【Golang】关于Go语言中的包

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…

从供应链切入,0Day打穿靶标的全流程实战

前言 整体的思路梳理: 1.对某靶标单位信息收集, 发现靶标某个站点系统为通用系统。 2.对该通用系统供应商进行信息收集。 3.拿下该供应商CICD系统, 从而得到目标通用系统源码。 4.代码审计, 组合拳0day成功进入靶标内网。…

项目实战总结-Kafka实战应用核心要点

Kafka实战应用核心要点 一、前言二、Kafka避免重复消费2.1 消费者组机制2.2 幂等生产者2.3 事务性生产者/消费者2.4 手动提交偏移量2.5 外部存储管理偏移量2.6 去重逻辑2.7 幂等消息处理逻辑2.8 小结 三、Kafka持久化策略3.1 持久化文件3.2 segment 分段策略3.3 数据文件刷盘策…

ip是可以从能够上网的设备提取吗

是的,IP地址可以从能够上网的设备提取。以下是如何从不同设备提取IP地址的具体方法: 在电脑上提取IP地址 Windows: 打开命令提示符(按下 Win R,输入 cmd,按回车)。 输入命令 ipconfig,按回车。…

【分布式微服务云原生】Dockerfile命令详解

Dockerfile 是一个文本文件,它包含了一系列的指令,用于构建一个 Docker 镜像。下面是 Dockerfile 中常用命令的详细解释和示例。 1. 获取镜像的三种方式 通过命令拉取镜像 docker pull 镜像名称从镜像仓库拉取指定的镜像。 通过容器创建镜像 docker…

Mybatis(进阶部分)

四 Mybatis完成CURD(二) 4.5 多条件CRUD 之前的案例中,接口里方法的形参个数都是1个;如果方法形参是两个或者两个以上时,MyBatis又该如何获取获取参数呢? Mybatis提供了好几种方式,可以获取多…

Lenovo SR850服务器亮黄灯维修和升级CPU扩展模块

佛山市三水区某高校1台Lenovo Thinksystem SR850服务器黄灯故障到现场检修 和 升级3号和4号CPU。加强服务器的计算性能; 故障情况是该学校it管理员这一天看到这台SR850服务器前面板亮了一个黄灯,但是目前系统运行正常,出于安全考虑&#xff0…