SUSAN角点及边缘检测方法详解

2024-03-25 01:59

本文主要是介绍SUSAN角点及边缘检测方法详解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

SUSAN检测方法是一种基于窗口模板的检测方法,主要是通过在图像每个像素点位置处建立一个窗口,这个窗口是圆形的,这里为了得到各方向同性的响应,窗口内可以是常数权值或高斯权值,一般情况下,窗口半径为3.4个像素(即窗口内总有37个像素)。

这样的窗口模板被放置在每个像素的位置,确定点之间强度相似程度可以由下面的图来描述,这里的x轴是指像素点之间强度差别,y轴指的相似程度,为1就指完全相似。


考虑为了运算简单,一般情况下使用a线(上图),最后统计所以同中心点相似的点数(即相似程度为1的点)相似点所在区域被称为USAN(Univalue Segment Assimilating Nucleus),而特征边缘或角点就是在这个点数值局部最小地方。图中的分界点(区分是否相似的像素差别)实际上反映了图像特征的最小对比程度,及被排除噪声的最大数目。

SUSAN边缘及角点检测没有用到图像像素的梯度(导数),因为这个原因,所以即使在噪声存在情况下,也能有好的表现。因为只要噪声足够的少,没有包含到所有相似像素的点,那么噪声就可以被排除。在计算时,单个值的集合统一消除了噪声的影响,所以SUSAN对于噪声具有较好的鲁棒性。

SUSAN是通过比较像素点邻域同其中心相似程度,所以也具有了光强变化不变性(因为像素点差别不会变化),及旋转不变性(旋转不会改变局部像素间的相似程度),及一定程度的尺度不变性(角点的角度在尺度放大并不会变化,这里的一定程度是指在尺度放大时,局部的曲度会慢慢平滑)。另外SUSAN使用的参数也非常的少,所以对于计算量及储存量要求低。

SUSAN方法被提出来,主要是为针对于边缘检测和角点检测的,然后其对于噪声较高的鲁棒性,也会用于在噪声消除中,被用于去选择最佳局部平滑邻域(相似程度的点最多的地方)。本文重点描述SUSAN方法用于边缘检测和角点检测的思路,并简要介绍下SUSAN方法是如何应用于噪声消除领域的。

 

一、SUSAN边缘检测

(1)边缘响应的计算

首先考虑到图像以每点像素为中心的圆形模板(半径为3.4个像素,模板内共有37个像素),对于其内的每个邻域点都作如下相似度衡量的计算(标准是上图的a线),这里的r是领域像素距离中心的长度,而r0是中心位置,t指相似度分界值(其决定了特征同背景的最小区别程度,及最大可被排除的噪声数)。


当然我们也可以用平滑的线来从代替这种直接的分割方式(如下图b线),这样可以获得更稳定而敏感的结果,虽然计算复杂但是可以通过查找表来获得较快的速度。公式如下:


并计算总共的相似程度:


接下来,将n同一个固定的阈值g比较(一般设置为最大同中心相似点数nmax的0.75倍左右),初始的边缘响应可以用下面等式计算:


这里g是为了排除噪声的影响,而当n小于这个阈值时,才能被考虑其的边缘是否是边缘,n越小,其边缘响应就越大。如果一个阶跃边缘被考虑,如果这个点在边缘上,那么其USAN的值应当是小于或等于0.5倍的最大值,而对于曲线边缘来说,这个值应该会更少(因为曲度会更小,所以在窗口内,曲线内的区域会更小),所以g的加入不会影响原来的边缘检测的结果的(即所得的边缘响应R是不会为0的)。

(2)边缘方向的计算

为什么要计算边缘方向呢?首先,非极大值抑制需要找到边缘方向(这个之后再解释),另外确定子像素级精度也需要找到边缘方向(这个好理解),最后,一些应用可以会用到边缘方向(也包括位置及长度),一个像素若其边缘长度不会0,那么便有边缘方向,边缘一般有两种情况:


一种是标准的边缘点(如同中的a和b,其刚好位于边缘的一边或另一边),而c是另一种情况,其刚好位于左右两边的过渡带间,而过渡带的强度恰好为左右像素强度的一半。这里还引入了一个概念,USAN的引力中心(USAN区域即图像模板内的白色区域,就是同中心相似的区域),其可以由下式计算:


其中a和b情况可以被视一种像素间边缘,引力中心同模板中心的向量恰好垂直于局部边缘方向,我们可以通过这种方式来找到其边缘方向。

而上图c的情况就完全不一样了,其引力中心同模板中心恰好在一点上(这被视为一种像素内边缘),此时边缘的方向就要找到USAN区域内最长的对称轴方向,这个可以通过如下公式来获得:



前两项的比值可以用于确定边缘的方向(度数),而后一项的符号用于确定一个倾斜边缘其梯度的符号(往那边倾斜)。

接下来的问题就是如何自动决定每点是属于以上哪种的边缘,首先如果USAN区域(像素数)比模板直径(像素数)要小,那么这应该是像素内边缘(如c)。如果要大的话,然后又找到USAN的引力中心,那么这应该是像素间边缘情况(如a和b)。如果引力中心同模板中心的距离小于1个像素的话,此时用于像素内边缘情况(如c)来计算更为精确。

(3)非极大值抑制

(4)子像素精度

对于每一个边缘点,首先找到边缘方向,然后在边缘垂直方向上减少边缘宽度,之后剩下的边缘点做3点二次曲线拟合,而曲线的转折点(一般情况下同最初边缘点的距离应当少于半个像素)被视为边缘的精确位置。

(5)检测位置并不依赖于窗口大小

即窗口模板增大,不会改变检测的边缘的位置,即SUSAN具有尺度不变性,另外其对于视点改变后的图像检测重复率也非常高,因为视点变化不会影响其角点是否存在。

 

二、SUSAN角点检测方法

角点检测方法同其边缘检测方法非常类似,其使用相同的方法来计算每个像素点的同圆形窗口内的相似程度n,然后n也是同一个权值g来比较,不过这里的g只是控制噪声存在数目,而需要考虑边缘,所以g的值为nmax的一半就可以了。

在特征检测方法里,我们一般需要至少一个阈值来区分特征同非特征,而这个阈值的选择将极大影响了最终特征提取的结果。一般情况下,这里有两种类型的阈值:一个衡量质量,一个衡量数量。SUSAN方法里的t和g恰好分别符合这两种情况,g控制角点检测的质量,如果g越小,那么我们得到的角点就更尖锐,而t则控制角点数目,如果t越小,那么我们检测的角点数目就越小,然后t却不会影响最终角点质量。(这段是题外话了>_<)

在计算角响应度后,而在非极大值抑制之前,我们可以排除一些在边缘或噪声位置的误检测角点,比如一条倾斜率比较小的直线,因为边缘线至少要一个像素宽度,所以会在直线上形成不连续断裂,这些断裂的位置可能会形成被误检的角点(如上图的c)。

(1)排除误检的角点

首先找到USAN的引力中心,然后计算引力中心同模板中心的距离,当USAN恰好能指示一个正确角点时,其引力中心同模板中心将不会靠得太近,而如果是条细线的话,引力中心同模板中心将会很近(如上图a和b所示)。另外的操作就是要加强USAN的邻近连续性,在真实图像里,非常容易出现小的噪声点,而这些噪声点可能分布于USAN内。所以对于模板内所有的像素,如果其是位于引力中心同模板中心所连的直线上,那么都应该视为USAN的一部分。

(2)非极大值抑制

SUSAN角点检测方法同基于导数检测方法一个非常大的优势在于,其不会在靠近中心相邻的区域不会与中心区域的角响应很难区分,所以局部的非极大值抑制中需要简单地选择局部的最大值就可以了。

 

三、SUSAN噪声滤波方法

SUSAN噪声滤波方法主要是通过仅平滑那些同中心像素相似的区域(即USAN),而由此保留图像的结构信息。而USAN的平滑主要就是找到其中所以像素的平均值,而不会对其相邻的不相关区域进行操作。

不过在区分相似度的公式上,却没有用到原来的公式,而是如下:


滤波器的最终公式为:



参考文献

SUSAN—ANew Approach to Low Level Image Processin


这篇关于SUSAN角点及边缘检测方法详解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/843507

相关文章

java中反射(Reflection)机制举例详解

《java中反射(Reflection)机制举例详解》Java中的反射机制是指Java程序在运行期间可以获取到一个对象的全部信息,:本文主要介绍java中反射(Reflection)机制的相关资料... 目录一、什么是反射?二、反射的用途三、获取Class对象四、Class类型的对象使用场景1五、Class

golang 日志log与logrus示例详解

《golang日志log与logrus示例详解》log是Go语言标准库中一个简单的日志库,本文给大家介绍golang日志log与logrus示例详解,感兴趣的朋友一起看看吧... 目录一、Go 标准库 log 详解1. 功能特点2. 常用函数3. 示例代码4. 优势和局限二、第三方库 logrus 详解1.

mysql出现ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决方法

《mysql出现ERROR2003(HY000):Can‘tconnecttoMySQLserveron‘localhost‘(10061)的解决方法》本文主要介绍了mysql出现... 目录前言:第一步:第二步:第三步:总结:前言:当你想通过命令窗口想打开mysql时候发现提http://www.cpp

一文详解如何从零构建Spring Boot Starter并实现整合

《一文详解如何从零构建SpringBootStarter并实现整合》SpringBoot是一个开源的Java基础框架,用于创建独立、生产级的基于Spring框架的应用程序,:本文主要介绍如何从... 目录一、Spring Boot Starter的核心价值二、Starter项目创建全流程2.1 项目初始化(

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

Spring Boot3虚拟线程的使用步骤详解

《SpringBoot3虚拟线程的使用步骤详解》虚拟线程是Java19中引入的一个新特性,旨在通过简化线程管理来提升应用程序的并发性能,:本文主要介绍SpringBoot3虚拟线程的使用步骤,... 目录问题根源分析解决方案验证验证实验实验1:未启用keep-alive实验2:启用keep-alive扩展建

MySQL INSERT语句实现当记录不存在时插入的几种方法

《MySQLINSERT语句实现当记录不存在时插入的几种方法》MySQL的INSERT语句是用于向数据库表中插入新记录的关键命令,下面:本文主要介绍MySQLINSERT语句实现当记录不存在时... 目录使用 INSERT IGNORE使用 ON DUPLICATE KEY UPDATE使用 REPLACE

Java异常架构Exception(异常)详解

《Java异常架构Exception(异常)详解》:本文主要介绍Java异常架构Exception(异常),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. Exception 类的概述Exception的分类2. 受检异常(Checked Exception)

C#基础之委托详解(Delegate)

《C#基础之委托详解(Delegate)》:本文主要介绍C#基础之委托(Delegate),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 委托定义2. 委托实例化3. 多播委托(Multicast Delegates)4. 委托的用途事件处理回调函数LINQ

Python GUI框架中的PyQt详解

《PythonGUI框架中的PyQt详解》PyQt是Python语言中最强大且广泛应用的GUI框架之一,基于Qt库的Python绑定实现,本文将深入解析PyQt的核心模块,并通过代码示例展示其应用场... 目录一、PyQt核心模块概览二、核心模块详解与示例1. QtCore - 核心基础模块2. QtWid