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

相关文章

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

Python安装Pandas库的两种方法

《Python安装Pandas库的两种方法》本文介绍了三种安装PythonPandas库的方法,通过cmd命令行安装并解决版本冲突,手动下载whl文件安装,更换国内镜像源加速下载,最后建议用pipli... 目录方法一:cmd命令行执行pip install pandas方法二:找到pandas下载库,然后

Python标准库之数据压缩和存档的应用详解

《Python标准库之数据压缩和存档的应用详解》在数据处理与存储领域,压缩和存档是提升效率的关键技术,Python标准库提供了一套完整的工具链,下面小编就来和大家简单介绍一下吧... 目录一、核心模块架构与设计哲学二、关键模块深度解析1.tarfile:专业级归档工具2.zipfile:跨平台归档首选3.

idea的终端(Terminal)cmd的命令换成linux的命令详解

《idea的终端(Terminal)cmd的命令换成linux的命令详解》本文介绍IDEA配置Git的步骤:安装Git、修改终端设置并重启IDEA,强调顺序,作为个人经验分享,希望提供参考并支持脚本之... 目录一编程、设置前二、前置条件三、android设置四、设置后总结一、php设置前二、前置条件

python中列表应用和扩展性实用详解

《python中列表应用和扩展性实用详解》文章介绍了Python列表的核心特性:有序数据集合,用[]定义,元素类型可不同,支持迭代、循环、切片,可执行增删改查、排序、推导式及嵌套操作,是常用的数据处理... 目录1、列表定义2、格式3、列表是可迭代对象4、列表的常见操作总结1、列表定义是处理一组有序项目的

python使用try函数详解

《python使用try函数详解》Pythontry语句用于异常处理,支持捕获特定/多种异常、else/final子句确保资源释放,结合with语句自动清理,可自定义异常及嵌套结构,灵活应对错误场景... 目录try 函数的基本语法捕获特定异常捕获多个异常使用 else 子句使用 finally 子句捕获所

C++11范围for初始化列表auto decltype详解

《C++11范围for初始化列表autodecltype详解》C++11引入auto类型推导、decltype类型推断、统一列表初始化、范围for循环及智能指针,提升代码简洁性、类型安全与资源管理效... 目录C++11新特性1. 自动类型推导auto1.1 基本语法2. decltype3. 列表初始化3

SQL Server 中的 WITH (NOLOCK) 示例详解

《SQLServer中的WITH(NOLOCK)示例详解》SQLServer中的WITH(NOLOCK)是一种表提示,等同于READUNCOMMITTED隔离级别,允许查询在不获取共享锁的情... 目录SQL Server 中的 WITH (NOLOCK) 详解一、WITH (NOLOCK) 的本质二、工作

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也