OpenCV基本图像处理操作(十)——图像特征harris角点

角点

角点是图像中的一个特征点,指的是两条边缘交叉的点,这样的点在图像中通常表示一个显著的几角。在计算机视觉和图像处理中,角点是重要的特征,因为它们通常是图像中信息丰富的区域,可以用于图像分析、对象识别、3D建模等多种应用。

角点的识别可以帮助在进行图像匹配和跟踪时提供稳定的参考点,这是因为角点在图像中的位置比较容易通过算法检测出来,且不易受到视角变化的影响。因此,角点检测在视觉系统中非常重要,如机器人导航、增强现实等领域中都有广泛应用。

图像特征-harris角点检测

Harris 角点检测是一种流行的角点检测算法,用于从图像中识别出角点的位置,即图像中两条边交叉的特征点。这些特征点在图像匹配、追踪、计算机视觉等领域中非常有用。

算法原理

算法的基本思想是检测图像中灰度强度的局部变化非常显著的点。具体来说,Harris 角点检测器会对图像进行窗口滑动,计算窗口内每个点移动小量后对应的灰度变化量。这些变化量通过一个数学公式进行计算,其中包括图像的梯度、梯度的协方差矩阵以及这些矩阵的迹和行列式。

最终,通过一个响应函数的计算,可以评估每个点是否为角点。如果响应函数的值超过某个阈值,则该点被认为是角点。

Harris 角点检测器的优点在于它对图像旋转保持不变性,并且对噪声有一定的抵抗力,但可能对图像尺度的变化敏感。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Harris 角点检测是一种在图像中识别角点的流行算法。其核心思想是通过测量图像窗口在各个方向上移动时产生的度变化程度来识别角点。

Harris 角点检测原理:

Harris 角点检测算法基于这样一个观察:一个窗口如果在图像中的角点上移动,窗口内像素强度的变化将会很大。算法通过构建一个结构张量(也称为二阶矩阵)来量化这种变化,该矩阵反映了图像窗口内强度的变化情况。

数学表示:
  1. 计算图像梯度:首先计算图像的梯度 I x I_x Ix, I y I_y Iy,这里 I x I_x Ix I y I_y Iy 分别是图像在 x 方向和 y 方向的一阶导数。

  2. 构建结构张量:接着计算图像在每一点的结构张量 M M M,其由以下公式定义:
      M = ∑ x , y w ( x , y ) [ I x 2 I x I y I x I y I y 2 ]   \ M = \sum_{x, y} w(x, y) \begin{bmatrix} I_x^2 & I_x I_y \\ I_x I_y & I_y^2 \end{bmatrix} \  M=x,yw(x,y)[Ix2IxIyIxIyIy2] 

    其中, w ( x , y ) w(x, y) w(x,y) 是窗口函数,常用的是高斯窗口。

  3. 响应函数计算:Harris 响应函数 ( R ) 由下面的公式给出:
      R = det ⁡ ( M ) − k ⋅ ( trace ( M ) ) 2   \ R = \det(M) - k \cdot (\text{trace}(M))^2 \  R=det(M)k(trace(M))2 
    其中, det ⁡ ( M ) = λ 1 λ 2 \det(M) = \lambda_1 \lambda_2 det(M)=λ1λ2 是 ( M ) 的行列式(即特征值的乘积), trace ( M ) = λ 1 + λ 2 \text{trace}(M) = \lambda_1 + \lambda_2 trace(M)=λ1+λ2 M M M 的迹(即特征值的和), k k k 是一个经验参数,通常取值在 0.04 到 0.06 之间。

  4. 角点检测:如果 R R R 的值大于某个阈值,那么该点被认为是角点。

代码实战

  • gray: 这是输入图像,应该是灰度图像,因为 Harris 角点检测通常在灰度图像上进行。
  • 2: 这是块大小(blockSize),即用于计算每个像素点的 Harris 响应值的邻域大小。这里的值 2 指的是考虑每个点周围 2x2 的窗口。
  • 3: 这是用于梯度计算的 Sobel 算子的孔径大小(apertureSize)。孔径大小为 3 意味着使用 3x3 的 Sobel 算子来计算图像的 x 方向和 y 方向的导数。
  • 0.04: 这是 Harris 角点检测算法中的自由参数 ( k )。该参数用于在响应函数 ( R ) 中平衡角点的度量,通常取值在 0.04 到 0.06 之间。

该函数的输出是一个灰度图像,其中每个像素的值代表该点作为角点的可能性。角点的位置通常是响应图中值较高的区域。在实际应用中,可能还需要进一步的步骤来阈值化和局部极大值抑制,以准确确定和标记角点的位置。

import cv2 
import numpy as np

img = cv2.imread('test_1.jpg')
print ('img.shape:',img.shape)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# gray = np.float32(gray)
dst = cv2.cornerHarris(gray, 2, 3, 0.04)
print ('dst.shape:',dst.shape)
img[dst>0.01*dst.max()]=[0,0,255]
cv2.imshow('dst',img) 
cv2.waitKey(0) 
cv2.destroyAllWindows()

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaSE中的String类

1.定义方式 常见的三种字符串构造 public class Test1 {public static void main(String[] args) {// 使用常量串构造String str1 "abc";System.out.println(str1);// 直接newString对象String str2 new String("ABC");System.out.println(str2);// 使用…

【Linux学习】Linux指令(四)

文章标题 🚀zip/unzip指令:🚀tar指令(重要):🚀uname –r指令:🚀关机指令🚀几个常用操作 🚀zip/unzip指令: zip 与 unzip的安装 yum i…

Day20-【Java SE高级】单元测试 反射 注解 动态代理

一、单元测试 就是针对最小的功能单元(方法),编写测试代码对其进行正确性测试。 1. 咱们之前是如何进行单元测试的?有啥问题? 只能在main方法编写测试代码,去调用其他方法进行测试。无法实现自动化测试,一个方法测试失败,可能…

学习在Debian系统上安装Shadowsocks教程

学习在Debian系统上安装Shadowsocks教程 安装shadowsocks-libev及其所需的依赖启动Shadowsocks服务:如果你想要通过代理本地流量,你可以使用ss-local:启动并设置ss-local:查看状态本地连接 安装shadowsocks-libev及其所需的依赖 …

量化交易为什么独宠Python

“我在学一门叫Python的语言”。“什么是Python,没听说过啊,为什么不学C啊”。这是发生在2014年,上海的一家量化基金,量化研究员和老板之间的对话。 “我想问一下关于Python的课程,什么时候能开班”。“Python啊&#…

数据结构-栈和队列刷题集(长期更新)

文章目录 万能计算器的实现以及源码分析1. leetcode 150 逆波兰表达式求值 万能计算器的实现以及源码分析 /*** 我们尝试写一个完整版的计算器,由于计算机不能很好的识别括号,所以一般要转换为逆波兰表达式求解* 思路解析 :* 1. 输入一个 中缀表达式* 2. 中缀表达式转化为list…

Python 数据结构和算法实用指南(一)

原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程…

28岁转行嵌入式适合转嵌入式吗?

转行到嵌入式领域是一个很好的选择,特别是如果你对电子技术、嵌入式系统和软硬件交互感兴趣的话。我这里有一套嵌入式入门教程,不仅包含了详细的视频 讲解,项目实战。如果你渴望学习嵌入式,不妨点个关注,给个评论222&a…

信息系统项目管理师0054:运维和服务(4信息系统管理—4.1管理方法—4.1.4运维和服务)

点击查看专栏目录 文章目录 4.1.4运维和服务1.运行管理和控制2.IT服务管理3.运行与监控4.终端侧管理5.程序库管理6.安全管理7.介质控制8.数据管理4.1.4运维和服务 信息系统的运维和服务应从信息系统运行的视角进行整合性的统筹规划,包括对信息系统、应用程序和基础设施的日常控…

C语言的OJ判题机设计与实现

1. 接收判题入参 判题需要作答代码、测试输入和期望输出、编译器名称、时空限制。对于支持special judge的还需要传入是否为sj和sj代码。推荐使用消息队列,应对高并发的比赛情况会比较好。 但是消息队列是异步的,我为了快点实现能提交后在当前页面获得判…

Elasticsearch:(一)ES简介

搜索引擎是什么?在不少开发者眼中,ES似乎就是搜索引擎的代名词,然而这实际上是一种误解。搜索引擎是一种专门用于从互联网中检索信息的技术工具,它主要可以划分为元搜索引擎、全文搜索引擎和垂直搜索引擎几大类。其中,…

AIGC算法1:Layer normalization

1. Layer Normalization μ E ( X ) ← 1 H ∑ i 1 n x i σ ← Var ⁡ ( x ) 1 H ∑ i 1 H ( x i − μ ) 2 ϵ y x − E ( x ) Var ⁡ ( X ) ϵ ⋅ γ β \begin{gathered}\muE(X) \leftarrow \frac{1}{H} \sum_{i1}^n x_i \\ \sigma \leftarrow \operatorname{Var}(…

【中级软件设计师】上午题08-UML(下):序列图、通信图、状态图、活动图、构件图、部署图

上午题08-UML 1 序列图2 通信图3 状态图3.1 状态和活动3.2 转换和事件 4 活动图5 构件图(组件图)6 部署图 【中级软件设计师】上午题08-UML(上):类图、对象图、用例图 UML图总和 静态建模:类图、对象图、用例图 动态建模&#xff…

【简单介绍下PostCSS】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

仿真测试的应用领域

仿真测试在各种领域中都有广泛的应用,以下是一些应用最广泛的场景: 工业制造:通过模拟制造过程,可以预测产品的质量和性能,优化生产流程,降低成本。航空航天:飞机、导弹、航天器等的设计和研发…

AWS Key disabler:AWS IAM用户访问密钥安全保护工具

关于AWS Key disabler AWS Key disabler是一款功能强大的AWS IAM用户访问密钥安全保护工具,该工具可以通过设置一个时间定量来禁用AWS IAM用户访问密钥,以此来降低旧访问密钥所带来的安全风险。 工具运行流程 AWS Key disabler本质上是一个Lambda函数&…

如何访问内网?

在互联网万维网上,我们可以轻松访问各种网站和资源。但是,有时我们需要访问局域网内的资源,例如公司内部的文件共享、打印机等。本文将介绍几种方法,帮助您实现访问内网的需求。 内网穿透技术 内网穿透技术是一种通过互联网将局域…

SQL表连接详解:JOIN与逗号(,)的使用及其性能影响

省流版 在这个详细的解释中,我们将深入探讨SQL中表连接的概念,特别是JOIN和逗号(,)在连接表时的不同用法及其对查询性能的影响。通过实际示例和背后的逻辑分析,我们将揭示在不同场景下选择哪种连接方式更为合适。 1.…

Mysql查询表的结构信息 把列名 数据类型 等变成列数据(适用于生成数据库表结构文档) (二)

书接上文 Mysql查询表的结构信息 把列名 数据类型 等变成列数据(适用于生成数据库表结构文档) (一) 好,怎么生成文档呢?很简单 用navicat 或者sqlyog navicat操作如下 举个例子 如下查询结果 全选查询结果,右键,复制为指标…

什么是神经网络和机器学习?【云驻共创】

什么是神经网络和机器学习? 一.背景 在当今数字化浪潮中,神经网络和机器学习已成为科技领域的中流砥柱。它们作为人工智能的支柱,推动了自动化、智能化和数据驱动决策的进步。然而,对于初学者和专业人士来说,理解神经…