Canny边缘检测方法中的非极大抑制

这篇具有很好参考价值的文章主要介绍了Canny边缘检测方法中的非极大抑制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

什么是非极大抑制

在目标检测中,通常会使用各种各样的方法来让计算机找到目标的所在位置,然而,计算机的输出往往并不是单一的,也就是说,一个目标可能会输出多个结果(如下图所示),这些结果有好有坏,因此就需要使用非极大抑制的方法来筛选出最优结果,说白了也就是一个剔除冗余的过程。
在这里插入图片描述

非极大值抑制(Non-Maximum Suppress,NMS)算法,其核心思想在于抑制非极大值的目标(去冗余),从而搜索出局部极大值的目标(找最优)。由于不同的目标框有不同的表示方式,因此NMS算法也具有不同的变体,本文通过目标检测的非极大抑制引入,简单讲述非极大抑制的思想以及其在边缘检测上的应用。

目标检测中的非极大抑制算法实现

(1)假设有n个候选预测框,将所有可能的预测框按类别划分n个集合,把整张图片也加入到集合当中,使得集合中存在n+1个元素
(2)用置信度最高的元素分别与其余元素之间计算IoU,如果IoU大于给定阈值,则将置信度较低的元素排除,保留置信度较高的元素。
IoU是两个区域重叠的部分除以两个区域的集合部分得出的结果,通过设定的阈值,与这个IoU计算结果比较。这里借用网络上的一张图片来帮助大家理解
在这里插入图片描述

(3)重复上述步骤,直到找出最优解为止。

非极大抑制在边缘检测中有什么作用

利用sobel算子可以计算图像梯度的幅值和方向,Sobel算子分为X方向和Y方向,表达如下
S x = [ − 1 0 1 − 2 0 2 − 1 0 1 ] S_x = \begin{bmatrix} -1 & 0 & 1 \\ -2 & 0 & 2 \\ -1 & 0 & 1 \end{bmatrix} Sx= 121000121
S y = [ − 1 − 2 − 1 0 0 0 1 2 1 ] S_y = \begin{bmatrix} -1 & -2 & -1 \\ 0 & 0 & 0 \\ 1 & 2 & 1 \end{bmatrix} Sy= 101202101
直接利用两个边缘检测卷积核,分别对图像进行边缘提取后再叠加,即可初步得到边缘图像。使用改算子进行卷积前,需要先将图像转化为单通道的灰度图。MATLAB代码如下:

conv1 = [1 0 -1 
         2 0 -2 
         1 0 -1]; 
  
conv2 = [1 2 1 
         0 0 0 
        -1 -2 -1]; 
         
% 也可以直接写成表达式 
% 其中I为目标图像对应的二值图像 
R=zeros(m,n); 
for xi=2:1:m-1 
    for yi = 2:1:n-1 
        R(xi,yi)=abs(I(xi+1,yi+1)+2*I(xi,yi+1)+I(xi-1,yi+1)-I(xi-1,yi-1)-2*I(xi,yi-1)-I(xi+1,yi-1))+abs(I(xi-1,yi-1)+2*I(xi-1,yi)+I(xi-1,yi+1)-I(xi+1,yi+1)-2*I(xi+1,yi)-I(xi+1,yi-1)); 
    end 
end 

做完这一步后,我们会发现,检测出来的边缘像素点有许多冗余,也就是同一个边缘可能检测了两条、三条甚至更多条。因此,我们就需要使用非极大抑制的方法来消除冗余,此处可参考J.Canny发表的论文

梯度方向上的非极大抑制

接下来进入本文的正题,
在John Canny提出的Canny算子的论文中,非最大值抑制就只是在0、90、45、135四个梯度方向上进行的,每个像素点梯度方向按照相近程度用这四个方向来代替。这四种情况也代表着四种不同的梯度,即
G y > G x G_y > G_x Gy>Gx,且两者同号
G y > G x G_y > G_x Gy>Gx,且两者异号
G y < G x G_y < G_x Gy<Gx,且两者同号
G y < G x G_y < G_x Gy<Gx,且两者异号
Canny边缘检测方法中的非极大抑制

如上图所示,根据X方向和Y方向梯度的大小可以判断A点是靠近X轴还是Y轴,通过A1和A2的像素值则可计算A点的亚像素值,B点同理,不再赘述。上面两图为靠近Y轴的梯度大,下面两图为靠近X轴的像素大。
由于A、B两点的位置是通过梯度来确定的,那么A、B两点的梯度值也可以根据Q点的梯度计算,因此假设Q点在四个方向上的梯度分别为 G 1 、 G 2 、 G 3 、 G 4 G_{1}、G_{2}、G_{3}、G_{4} G1G2G3G4。下面我们分情况来讨论

  1. 首先讨论 G y > G x G_y > G_x Gy>Gx的情况,此时

w = G x G y w = \frac{G_x}{G_y} w=GyGx
G 2 = G ( i − 1 , j ) G_2 = G(i-1, j) G2=G(i1,j)
G 4 = G ( i + 1 , j ) G_4 = G(i+1, j) G4=G(i+1,j)
如果两者同号,则
G 1 = G ( i − 1 , i − 1 ) G_1 = G(i-1,i-1) G1=G(i1,i1)
G 3 = G ( i + 1 , i + 1 ) G_3 = G(i+1,i+1) G3=G(i+1,i+1)
否则
G 1 = G ( i − 1 , i + 1 ) G_1 = G(i-1,i+1) G1=G(i1,i+1)
G 3 = G ( i + 1 , i − 1 ) G_3 = G(i+1,i-1) G3=G(i+1,i1)

  1. 然后是 G y < G x G_y < G_x Gy<Gx的情况

w = G y G x w = \frac{G_y}{G_x} w=GxGy
G 2 = G ( i , j − 1 ) G_2 = G(i, j-1) G2=G(i,j1)
G 4 = G ( i , j + 1 ) G_4 = G(i, j+1) G4=G(i,j+1)
如果两者同号
G 1 = G ( i + 1 , i − 1 ) G_1 = G(i+1,i-1) G1=G(i+1,i1)
G 3 = G ( i − 1 , i + 1 ) G_3 = G(i-1,i+1) G3=G(i1,i+1)
否则
G 1 = G ( i − 1 , i − 1 ) G_1 = G(i-1,i-1) G1=G(i1,i1)
G 3 = G ( i + 1 , i + 1 ) G_3 = G(i+1,i+1) G3=G(i+1,i+1)
如此便可以计算出两个相邻亚像素点的梯度值
g A = w ∗ G 1 + ( 1 − w ) ∗ G 2 g_A = w*G_{1} + (1-w)*G_2 gA=wG1+(1w)G2
g B = w ∗ G 3 + ( 1 − w ) ∗ G 4 g_B = w*G_{3} + (1-w)*G_4 gB=wG3+(1w)G4
比较三者的像素值,如果Q点像素值大于其余两者,则保留Q点作为边缘上的点,否则认为Q点为冗余点。

参考链接

(36条消息) 非极大值抑制算法详解_武乐乐~的博客-CSDN博客_非极大值抑制算法
(36条消息) Canny算子中的非极大值抑制(Non-Maximum Suppression)分析_Belial_2010的博客-CSDN博客_canny算子非极大值抑制
(36条消息) Canny边缘检测Step3——梯度幅值的非极大值抑制(NMS)详解_Polaris_T的博客-CSDN博客_canny 非极大值抑制文章来源地址https://www.toymoban.com/news/detail-492806.html

到了这里,关于Canny边缘检测方法中的非极大抑制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机视觉算法中的Canny边缘检测(Canny Edge Detection)

    在计算机视觉领域,边缘检测是一项重要的任务。边缘是图像中物体之间的边界,通过边缘检测可以帮助我们识别出图像中的物体。Canny边缘检测是一种经典且常用的边缘检测算法。本文将对Canny边缘检测算法进行介绍和分析。 Canny边缘检测算法由约翰·Canny在1986年提出,是一

    2024年02月08日
    浏览(29)
  • 【目标检测】 非极大值抑制—NMS

    在目标检测任务中,一个目标可能会被多个边界框检测到,这些边界框可能会有不同的位置和大小,但表示同一个目标。 非极大值抑制 (Non-Maximum Suppression, NMS )是一种常用的方法,用于抑制这些重叠的边界框,只保留置信度最高的那个边界框,从而得到最终的目标检测结

    2024年02月04日
    浏览(27)
  • 【目标检测】非极大值抑制NMS的原理与实现

    非极大值抑制(Non-Maximum Suppression,NMS)是目标检测中常用的一种技术,它的主要作用是去除冗余和重叠过高的框,并保留最佳的几个。 NMS计算的具体步骤如下: 首先根据目标检测模型输出结果,得到一系列候选框及其对应的概率分数。 对所有候选框按照概率分数进行降序

    2024年02月08日
    浏览(28)
  • 13.4 目标检测锚框标注 & 非极大值抑制

    假设原图的高为 H ,宽为 W

    2024年02月11日
    浏览(34)
  • 【canny边缘检测】canny边缘检测原理及代码详解

    本文通过介绍canny边缘检测原理与代码解析,希望能让大家深入理解canny边缘检测 canny边缘检测主要分为4个部分,本文分别从每一个部分进行解析并附代码。 图像降噪 梯度计算 非极大值抑制 双阈值边界跟踪 图像去噪是进行边缘检测的第一步,通过去噪可以去除图像中的一些

    2024年02月10日
    浏览(31)
  • opencv(23) Canny边缘检测流程(Canny算子)

    Canny 边缘检测算法 是 John F. Canny 于 1986年开发出来的一个多级边缘检测算法,也被很多人认为是边缘检测的 最优算法 , 最优边缘检测的三个主要评价标准是: 低错误率: 标识出尽可能多的实际边缘,同时尽可能的减少噪声产生的误报。 高定位性: 标识出的边缘要与图像中的实

    2024年04月11日
    浏览(25)
  • python Canny边缘检测

        参考文献 Canny边缘检测算法(python 实现)_Master_miao的博客-CSDN博客_python canny 使用Pytorch从头实现Canny边缘检测 

    2024年02月06日
    浏览(33)
  • Canny边缘检测

      图象的边缘是指 图象局部区域亮度变化显著的部分 ,该区域的灰度剖面可以看作是一个阶跃,即从一个灰度值在很小的缓冲区域内急剧变化到另一个灰度相差较大的灰度值。 图象的边缘部分集中了图象的大部分信息 ,图象边缘的确定与提取对于整个图象场景的识别与理

    2024年02月06日
    浏览(26)
  • 图像边缘检测(Canny)

    Canny检测的流程 Canny检测主要是用于边缘检测 1)使用高斯滤波器,以平滑图像,滤除噪声。   2)计算图像中每个像素点的梯度强度和方向。 3)应用非极大值(Non-Maximum Suppression)抑制,以消除边缘检测带来的杂散响应 4)应用双阈值(Double-Threshold)检测来确定真实的和潜在的边缘 5)通

    2023年04月22日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包