harris角点检测原理

article/2025/10/8 4:24:02

目录

1、角点概述

2、数学知识

3、Harris角点检测基本原理

4、优化改进


1、角点概述

        如果一个点在任意方向的一个微小变动都会引起灰度很大的变化,那么我们就把它称之为角点,也就是一阶导数(即灰度图的梯度)中的局部最大所对应的像素点就是角点。在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。基于图像灰度的方法通过计算点的曲率及梯度来检测角点。

2、数学知识

1)泰勒展开

        泰勒展开公式是一种统一的形式,非常完美。

        一维泰勒展开公式:

        二维泰勒展开公式:

2)矩阵的特征值和特征向量

 harris边角(兴趣点)检测算法 - 知乎

3、Harris角点检测基本原理

        人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。如果在各个方向上移动这个特征的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点。如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。

        Harris 检测器具有旋转不变性,但不具有尺度不变性,也就是说尺度变化可能会导致角点变为边缘,如下图所示:

        想要尺度不变特性的话,可以关注SIFT特征。

Harris 角点检测算法分为以下三步:

        1、当窗口同时向 x 和 y 两个方向移动时,计算窗口内部的像素值变化量E(u,v);

        2、对于每个窗口,都计算其对应的一个角点响应函数R;

        3、然后对该函数进行阈值处理,如果R > threshold,表示该窗口对应一个角点特征。

E(u,v)推导过程:

        首先,将图像窗口平移[u,v]产生灰度变化的自相关函数如下:

        其中窗口函数(权重矩阵)可以是平坦的,也可以是高斯的,是一个二维的滤波器。对于一个角点来说, E(u,v)会非常大。因此,我们可以最大化上面这个函数来得到图像中的角点。用上面的函数计算会非常慢。因此,我们使用泰勒展开式(只有一阶)来得到这个公式的近似形式。

        将平移后的式子进行泰勒展开如下:

         其中Ix和Iy是I的偏微分,在图像中就是在x和y方向的梯度图(可以通过cv2.Sobel()来得到):

        接下来继续推导:

         把u和v拿出来,得到最终的形式:

        其中矩阵M为:

         最后是把实对称矩阵对角化处理后的结果,可以把R看成旋转因子,其不影响两个正交方向的变化分量。经对角化处理后,将两个正交方向的变化分量提取出来,就是 λ1 和 λ2(特征值)。

        对于图像的每一个像素点(x,y),对应一个以该像素为中心的窗口w(x,y),然后该像素平移(u,v)得到新的像素点(x+u,y+v),而E(u,v)就是窗口中所有像素的加权和乘以不同位置像素的灰度差值。

        矩阵M又称为Harris矩阵。w(x,y)的宽度决定了在像素x 周围的感兴趣区域。

计算响应函数R:

        得到E(u,v)的最终形式,我们的目的是要找到会引起较大的灰度值变化的那些窗口。灰度值变化的大小则取决于矩阵M,那么如何找到这些窗口,我们可以使用矩阵的特征值来实现。

        忽略余项之后的表达式为一个二项式函数,然而二项式函数的本质上就是一个椭圆函数,椭圆的扁率和尺寸是由M(x,y)的特征值λ1、λ2决定的,椭圆的方向是由M(x,y)的特征矢量决定的,如下图所示,椭圆方程为:

         椭圆函数特征值与图像中的角点、直线(边缘)和平面之间的关系如下图所示。共可分为三种情况:

        a)图像中的直线。一个特征值大,另一个特征值小,λ1>λ2或λ2>λ1。自相关函数值在某一方向上大,在其他方向上小。

        b)图像中的平面。两个特征值都小,且近似相等;自相关函数数值在各个方向上都小。

        c)图像中的角点。两个特征值都大,且近似相等,自相关函数在所有方向都增大。

        通过M的两个特征值λ1和λ2的大小对图像点进行分类:

         如果λ1和λ2都很小,图像窗口在所有方向上移动都无明显灰度变化。由于我们是通过M的两个特征值的大小对图像进行分类,所以,定义角点相应函数R:

          其中k为经验常数,一般取k=0.04~0.06。为了去除加权常数κ,我们通常使用商数detM/(traceM)2作为指示器。所以,上图可以转化为:

         因为特征值λ1和λ2决定了R的值,R 只与M的特征值有关,所以我们可以用特征值来决定一个窗口是平面、边缘还是角点。

        平面:该窗口在平坦区域上滑动,窗口内的灰度值基本不会发生变化,所以|R|值非常小,在水平和竖直方向的变化量均较小,即Ix和Iy都较小,那么λ1和λ2都较小;

        边缘:R值为负数,仅在水平或竖直方向有较大的变化量,即Ix和Iy只有一个较大,也就是λ1>>λ2或λ2>>λ1;

        角点:R值很大,在水平、竖直两个方向上变化均较大的点,即Ix和Iy都较大,也就是λ1和λ2都很大。

最优角点判别:

        根据R的值,将这个窗口所在的区域划分为平面、边缘或角点。为了得到最优的角点,我们还可以使用非极大值抑制。        

        Harris角点检测的结果是带有这些分数R的灰度图像,设定一个阈值,R > threshold,分数大于这个阈值的像素就对应角点。

4、优化改进

1)由于Harris角点检测算法的稳定性和k值有关,而k是个经验值,不好设定最佳值。

        Shi-Tomasi发现,角点的稳定性其实和矩阵M的较小特征值有关,于是直接用较小的那个特征值作为分数。这样就不用调整k值了。

        所以Shi-Tomasi将分数公式改为如下形式:

        和Harris一样,如果该分数大于设定的阈值,我们就认为它是一个角点。

2)Harris和Shi-Tomasi都是基于梯度计算的角点检测方法,Shi-Tomasi的效果要好一些。基于梯度的检测方法有一些缺点: 计算复杂度高,图像中的噪声可以阻碍梯度计算。

        想要提高检测速度的话,可以考虑基于模板的方法:FAST角点检测算法。该算法原理比较简单,但实时性很强。

3)Harris 检测器具有旋转不变性,但不具有尺度不变性,也就是说尺度变化可能会导致角点变为边缘,如下图所示:

        想要尺度不变特性的话,可以关注SIFT特征。

相关链接:

1、harris角点检测算法实现

2、SHI-TOMASI角点检测


http://chatgpt.dhexx.cn/article/dbDINTlw.shtml

相关文章

计算机视觉(角点检测)- 1 - Harris角点检测

计算机视觉(角点检测)- 1 - Harris角点检测 学习前言一、Harris角点检测  1、什么是角点?  2、Harris角点检测的基本原理&基本思想  3、Harris角点检测的数学表达  4、获取点数据后,计算 I x , I y I_x&#x…

Visual Studio的sln工程设置VTK、ITK项目

Visual Studio的sln工程设置VTK、ITK项目 最近在学习使用VTK和ITK,使用Visual Studio新建Qt项目时发现项目不是使用过去使用的CMake组织,而是使用的Visual Studio默认的.sln文件,便学习了一下使用Visual Studio的sln工程设置VTK、ITK项目&am…

windows sln的qt 工程

看起来应该vs开发 qt项目不需要qtcreator? 画界面应该还是需要的。装一个vs的插件 2019的如果打开的工程跟你本地的qt不一致 在工程名字上右键change qt version弹出一个框框,里面有俩这里应该选第一个,这个是我本地安装的,vs2015 x86 版本windows sln 工程【这个新建一个q…

Visual studio 2015修改项目文件名及.sln文件名

Visual studio 2015修改项目文件名及.sln文件名: 问题描述 提示:在使用原有的项目代建一个新项目时,为了方便区分与原项目,故要修改该项目的项目名。 如图: 需要将QtGuiApplication1.vcxproj修改成CARFILM.vcxproj&…

C# 解析 sln 文件

我的项目,编码工具 需要检测打开一个工程,获取所有项目。 但是发现原来的方法,如果存在文件夹,把项目放在文件夹中,那么是无法获得项目,于是我就找了一个方法去获得sln文件的所有项目。 原先使用的方法dte…

Visual studio无法打开C#\.sln文件,不兼容

23/7/19文章更新:后来我总结了我这个问题出现的原因,是因为我的VS是2015版本,本来安装在笔记本电脑上,为了转到台式机,直接U盘复制过来的,然后复制过来安装的时候提示某个东西安装失败,我就点击…

.sln图标异常修复

.sln图标显示异常 本人就喜欢新版本的东西,电脑上安装过vs2017,vs2019,想体验最新的vs2022是什么感觉,之后sln图标显示异常,不太顺眼 这是由于该文件VSFileHandler_64.dll异常带来的问题,下载我提供的文件&#xff0c…

Visual Studio打开无sln项目,修复无效sln文件

Visual Studio打开无sln项目,修复无效sln文件 打开项目文件地址(可在项目名右键-在文件资源管理器中打开文件夹) 打开-项目名.vcxproj文件 VC左上角点击全部保存,选择保存位置储存新的sln头文件 4.sln文件修复完成

VS2019 使用命令行编译工程sln

需要使用 devenv.com这个工具 具体的执行如下: test>"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\devenv.com" build\1.sln /Build执行结果如下: 在对应的路径下找到可执行文件运行

Visual studio 2019 创建.sln项目

文章目录 创建.sln项目在当前解决方案下,添加项目如何切换启动项目如何打开 .sln的解决方案的项目 创建.sln项目 文件–>新建 不要勾选最后一项。 点击 上面界面的右下角的 创建 ,进入下面的界面 解决方案和项目在电脑目录及在IDE上的展示 在当…

Unity sln 和 csproj 基础

根目录下 sln 和 csproj 区别 sln: solusion 简写,即解决方案 csproj:c sharp project 简写,即 C# 项目 解决方案sln是项目csproj的集合,项目是文件的集合。 一个 sln 中可以包含多个 csproj。 一个 csproj 可以包含多…

c语言编程题没有sln,使用CMake生成sln项目和VS工程遇到的问题

用vs运行cmake后的工程 1、单个文件示例: 1) 首先建立文件夹CMakeTest/Src 2) 在文件夹Src中建立两个文件main.c和CMakeLists.txt 3) main.c: #include int main() {printf("hello world."); getchar(); return 0; } 4) CMakeLists.txt PROJECT (HELLO) SET (SRC_L…

理解 Visual Studio 解决方案文件格式(.sln)

一般情况下我们并不需要关心 Visual Studio 解决方案文件格式(.sln),因为 Visual Studio 对解决方案文件的自动修复能力是非常强的。但是如果遇到自动解冲突错误或者编译不通过了,那么此文件还是需要手工修改的。 基本概念 Visua…

Win平台使用cmake工具生成sln工程示例

先安装一个版本的cmake,3.17.2; 这应该是比较新的版本;我看到有的示例是3.7以下版本; cmake加到系统path变量; 安装完成; 新建一个C#prj目录,下面放一个cs文件,新建一个myprj1目录; …

linux系统sln命令,dotnet sln

dotnet slndotnet sln 12/07/2020 本文内容 本文适用于: ✔️ .NET Core 2.x SDK 及更高版本This article applies to: ✔️ .NET Core 2.x SDK and later versions “属性”Name dotnet sln - 在 .NET 解决方案文件中列出或修改项目。dotnet sln - Lists or modifi…

【通用】vs2019项目sln、suo、vcxproj、vcxproj.filters、vcxproj.user文件名解析及相关节点属性解析

1.sln 文件 (Solution 文件) 解决方案是在 Visual Studio 中组织项目的结构。 该解决方案将项目的状态信息保留在两个文件中: .sln 文件 (基于文本的共享) .suo 文件 (用户特定的二进制解决方案选项) 这里先讲.sln 文件,.sln 文件包含环境用于查找和加载…

cosi-corr操作详细步骤

cosi-corr是一个可以加载到ENVI的软件包,由加利福尼亚理工学院的Franois Ayoub, Sbastien Leprince, and Lionel Keene开发,并且提供源代码,该软件受到了NSF的资助。软件的主要功能是可以满足各种影像的正射校正和影像配准。 针对下载下来的…

pearsonr(x,y)、corr()、corrcoef(u1) 相关系数计算

函数:pearsonr(x,y) 功能: 计算特征与目标变量之间的相关度 参数说明: 1)输入:x为特征,y为目标变量. 2)输出:r: 相关系数 [-1,1]之间,p-value: …

pandas.DataFrame.corr求解变量列相关系数与可视化展示

pandas.DataFrame.corr求解变量列相关系数与可视化展示 目录 pandas.DataFrame.corr求解变量列相关系数与可视化展示 1常见的三种相关系数2 pandas.DataFrame.corr用法3 结果可视化 1常见的三种相关系数 Pearson相关系数:度量两变量之间的线性相关性;对…

【20220623】【信号处理】深入理解Pearson相关系数和Matlab corr()、corrcoef()仿真

目录 一、定义 二、特性 三、适用条件 四、Matlab 仿真 1. 时间序列 2. 矩阵 一、定义 相关系数(correlation of coefficient)是统计学中的概念,是由统计学家卡尔皮尔逊设计的一个统计指标,也称作 Pearson 相关系数。相关系…