首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

非极大值抑制(Non-Maximum-Suppression)

非极大值抑制,简称为NMS算法。是一种获取局部最大值的有效方法。在3领域中,假设一个行向量的长度为w,从左向右,由第一个到第w个和其3领域中的数值进行比对。...如果某个i大于i+1并且小于i-1,则其为一个绝不最大值,同时也就意味着i+1不是一个局部最大值,所以将i移动2个步长,从i+2开始继续向后进行比较判断。...当比对到最后一个w时,直接将w设置为局部最大值。算法流程如下图所示。 应用范围          非极大值抑制NMS在目标检测,定位等领域是一种被广泛使用的方法。...第一种,选取好多矩形框的交集,即公共区域作为最后的目标区域。          第二种,选取好多矩形框的并集,即所有矩形框的最小外截矩作为目标区域。...当然这里也不是只要相交就直接取并集,需要相交的框满足交集占最小框的面积达到一定比例(也就是阈值)才合并。

51320

10分钟学会使用YOLO及Opencv实现目标检测(上)|附源码

在本教程中,将学习如何使用YOLO、OpenCV和Python检测图像和视频流中的对象。...,默认值设置为0.5,但该值也可以随意设置; -- threshold :非最大值抑制阈值,默认值设置为 0.3,可以在此处阅读有关非最大值抑制的更多信息。...boxesidxs = cv2.dnn.NMSBoxes(boxes, confidences, args["confidence"], args["threshold"]) YOLO算法并没有应用非最大值抑制...应用非最大值抑制可以抑制明显重叠的边界框,只保留最自信的边界框,NMS还确保我们没有任何冗余或无关的边界框。...利用OpenCV内置的NMS DNN模块实现即可实现非最大值抑制 ,所需要的参数是边界 框、 置信度、以及置信度阈值和NMS阈值。

12.6K64
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    实战 | OpenCV中更稳更快的找圆方法--EdgeDrawing使用演示(详细步骤 + 代码)

    与许多其他遵循减法方法的现有边缘检测算法相比(即在图像上应用梯度滤波器后,根据多种规则消除像素,例如 Canny 中的非极大值抑制和滞后),ED 算法通过加法策略工作,即逐一选取边缘像素,因此称为“边缘绘制...然后我们处理这些随机形状的边缘段以提取更高级别的边缘特征,即直线、圆、椭圆等。从阈值梯度幅度中提取边缘像素的流行方法是非极大值抑制,它测试每个像素是否具有最大值沿其梯度方向的梯度响应,如果没有则消除。...然而,此方法不检查相邻像素的状态,因此可能会导致低质量(在边缘连续性、平滑度、薄度、定位方面)边缘片段。ED 不是非极大值抑制,而是指向一组边缘像素,并通过最大化边缘段的总梯度响应来将它们连接起来。...EdgeDrawing类是在Contrib的ximgproc模块中,C++中使用它需要满足以下条件: ① OpenCV >= 4.5.2 ② CMake编译Contrib模块 ③ 包含...设置为false时,能找到更多圆或直线。 【4】MinPathLength:最小连接像素长度处理以创建边缘段。在梯度图像中,为创建边缘段而处理的最小连接像素长度。

    4.7K11

    Opencv学习笔记------Harris角点检测

    ;//阈值除去响应小的值 int nonMaxSize;//这里采用默认的3,就是最大值抑制的邻域窗口大小 cv::Mat kernel;//最大值抑制的核,这里也就是膨胀用到的核 public...,剩下角点局部最大值图,即:完成非最大值抑制 cv::bitwise_and(cornerMap,localMax,cornerMap); return...另一方面,我们不再用非极大值抑制了,而选取容忍距离:容忍距离内只有一个特征点。    ...该算法首先选取一个具有最大   最小特征值的点(即:max(min(e1,e2)),e1,e2是harris矩阵的特征值)作为角点,然后依次按照最大最小特征值顺序寻找余下的角点,当然和前一角点距离在容忍距离内的新角点呗忽略...opencv更极端,选用半径为3的圆周上(上下左右)四个点,若超过三个点和该像素点不同,则该点为候选角点。     和Harris算法类似,该算法需要非极大值抑制。

    81120

    使用OpenCV+Python进行Canny边缘检测

    高斯滤波 我们可能听说过正态分布或高斯分布,这种分布在自然界中始终存在,常用于表示实值随机变量。 在图像处理中,可以对图像应用高斯滤波器以减少噪声,模糊的图片可以直观地观察到这个效果。...在这一步之后,结果是一个二值图像,这意味着图像将只包含两种颜色,黑色和白色。同样,非最大抑制这个名字听起来很复杂,实际上这是一个简单的操作。...我们通过检查每个像素在其梯度方向上的相邻像素来确定它是否具有最大强度,从而对每个像素应用非最大抑制。如果像素是最大的,那么我们将其值设置为 1。...我们首先选择两个阈值:最小值和最大值。这就是我们所谓的双阈值。...但是,如果边缘的强度梯度介于最小和最大阈值之间,则将其标记为弱边缘。 请参考下图: 阈值区域图 绿色区域是强度梯度高于最大阈值的地方,这意味着该区域内的任何边缘都被归类为强边缘。

    2.9K10

    丧尸目标检测:和你分享 Python 非极大值抑制方法运行得飞快的秘诀

    在收到我朋友 Tomasz Malisiewicz 博士(目标检测方面的专家)的建议之后,我决定将他 Matlab 上实现的非最大抑制方法移植到 Python 上。...我们是如何获得这么快的抑制时间的呢? 继续阅读去找出答案。 在Python上的非极大值抑制方法(更快) 在我们开始之前,如果你还没有读过上周关于非极大值抑制的帖子,我建议你先看一下那个帖子。...我们这个更快的非极大值抑制函数第 6-22 行基本与上周相同。我们通过抓取检测框的(x,y)坐标,计算它们的面积,并根据每个框的右下 y 坐标将他们分类到框列表中。...我们不再使用内部 for 循环来对单独对每个框进行循环,而是使用 np.maximum 和 np.minimum 对代码进行矢量化,这使得我们能够在坐标轴上找到最大值和最小值而不仅仅是一个数。...在最后一个例子中,我们可以再次看到,我们的非极大值抑制算法是正确的——即使有六个原始检测框被 HOG+线性 SVM 检测器检测到,应用非极大值抑制算法正确地抑制了其他五个检测框,给我们留下了最后的检测结果

    68910

    从一个 OpenCV 的 BUG 说起~

    此时我就在想,目标检测不是要经过一步 NMS(非极大值抑制)吗,才能得到最后的输出框,那么我可不可以在还没有经过 NMS 时,把所有的锚框都绘制出来呢,那就动手吧 ? ?...BUG 分析 WHAT,怎么还有个 bed (上图左上角那个蓝色框框)给画出来,但是预测的时候却没有呢,于是我又回顾了一遍 非极大值抑制(NMS)算法:从输出结果中提取最有可能的对象和其对应的边界框。...看着没毛病是吧,那我们就看看 OpenCV 的非极大值抑制是怎么实现的吧 indices = cv.dnn.NMSBoxes(bboxes, scores, score_threshold,...不是说对每类的对象执行非极大值抑制操作吗,怎么没有各个类别的参数输入??? 难道是 OpenCV 的 BUG(/兴奋脸)?还是另有所用? 既然遇见了这个问题,那么,我们就把这个 BUG 给填上呗!...自带的 NMS 操作和自己写的 MNS 操作进行对比,即: # 使用非极大值抑制方法抑制弱、重叠边界框 idxs = cv2.dnn.NMSBoxes(boxes, confidences, confidence_thre

    1.2K20

    手撕非极大值抑制算法NMS与soft-NMS

    前言 非极大值抑制算法(Non-maximum suppression, NMS)是有anchor系列目标检测的标配,如今大部分的One-Stage和Two-Stage算法在推断(Inference)...NMS的本质是搜索局部极大值,抑制非极大值元素,在目标检测中,我们经常将其用于消除多余的检测框(从左到右消除了重复的检测框,只保留当前最大confidence的检测框): NMS有很多种变体,这里介绍最为常见的...: 具体介绍可以看这里:深度学习中IU、IoU(Intersection over Union)的概念理解以及python程序实现 因为我们要手撸么,所以废话不多说,直接开始看代码,首先使用Pytorch...,5即4(位置信息)+1(可能为物体的概率) iou_threshold: 我们用IOU标准去除多余检测框的阈值 top_k: 保留多少个计算后留下来的候选框,如果为-1...对于Hard-NMS来说,当最大confidence与其余box的IOU大于一定的阈值,这些多余的box就消失了: 而在Soft-NMS中,对于与最大confidence的box相比iou大于一定阈值的框乘以一个与

    63020

    图像特征点|SUSAN特征

    对于上图中的e圆形模板,它完全处于白色的背景中,根据前面对USAN的定义,该模板处的USAN值是最大的;随着模板c和d的移动,USAN值逐渐减少;当圆形模板移动到b处时,其中心位于边缘直线上,此时其USAN...值逐渐减少为最大值的一半;而圆形模板运行到角点处a时,此时的USAN值最小。...得到的n值就是USAN的大小。得到USAN值后,通过阈值化就可以得到初步的边缘响应,公式表示如下: ? 其中,g为: ? 就是g的取值为USAN最大值的3/4。USAN值越小,边缘的响应就越强。...得了初始的边缘响应进行非极大值抑制,就可以得到图像的边缘信息了。上张SUSAN边缘检测的效果图: ? ?...,得到角点响应 使用非极大值抑制来寻找角点。

    1.2K10

    【计算机视觉——RCNN目标检测系列】三、IoU与非极大抑制

    顾名思义,非极大抑制就是要抑制非极大值。也可以将非极大抑制理解成搜索局部最大值。...在此我们讨论的非极大抑制主要特指用于目标检测领域中搜索木分类概率最大的目标框的非极大抑制算法,而通用的非极大抑制请阅读论文《Efficient Non-Maximum Suppression》。...具体算法流程如下: 首先我们按照目标框对应的分类概率进行排序,选取分类概率最大的目标框,记作current_box。...计算current_box与剩余目标框之间的IoU 将IoU大于阈值的目标框舍弃 接下来在剩余的目标框中再选出最大分类概率的目标框。按照上述流程一直循环直至条件结束。...:param dets: 目标框数组,目标框的格式为:[xin,ymin,xmax,ymax,score] :param thresh: 阈值 :return: 不重复的目标框数组在元目标框数组中的下标数组

    1.1K10

    FAST 角点检测

    它原理非常简单,遍历所有的像素点,判断当前像素点是不是特征点的唯一标准就是在以当前像素点为圆心以3像素为半径画个圆(圆上有16个点),统计这16个点的像素值与圆心像素值相差比较大的点的个数。...高速测试的结果被抛弃 检测到的很多特征点都是连在一起的 前 3 个问题可以通过机器学习的方法解决,最后一个问题可以使用非最大值抑制的方法解决。...由此得到的信息增益为 \Delta H = H(P) - H(P_d) - H(P_s) - H(P_b) 选择信息增益最大位置进行划分,得到决策树 使用决策树对类似场景进行特征点的检测与分类 非极大值抑制...OpenCV中的任何其他特征检测器。...如果需要,你可以指定阈值,是否应用非最大抑制,要使用的邻域等。

    15210

    OpenCV图像处理专栏十九 | 手动实现基于Canny算子的边缘检测

    基于Canny算子边缘检测的步骤如下: 使用高斯滤波算法,以平滑图像,滤除噪声 计算图像中每个像素点的梯度强度和方向 应用非极大值抑制,以消除边缘检测带来的杂散响应 应用双阈值检测来确定真正的边缘和潜在的边缘...关于Sobel算子的构造请看昨天的推文:OpenCV图像处理专栏十八 | 手动构造Sobel算子完成边缘检测 7.3 应用非极大值抑制,以消除边缘检测带来的杂散响应 非极大值抑制是一种边缘稀疏技术,作用在于瘦边...而非极大值抑制可以帮助将将局部最大值之外的所有梯度值抑制为,对梯度图像中每个像素进行非极大值抑制的算法步骤为: (1) 将当前像素的梯度强度与沿正负梯度方向上的两个像素进行比较。...(2) 如果当前像素的梯度值与另外两个像素值相比最大,则该像素点保留为边缘点,否则该像素点被抑制。 通常为了更加精确的计算,在跨梯度方向的两个相邻像素之间使用线性插值来得到要比较的像素梯度。 ?...非极大值抑制的伪代码 需要注意的是,如何标志方向并不重要,重要的是梯度方向的计算要和梯度算子的选取保持一致。 7.4 双阈值检测 在施加非极大值抑制之后,剩余的像素可以更准确地表示图像中的实际边缘。

    1.4K10

    教程 | Adrian小哥教程:如何使用Tesseract和OpenCV执行OCR和文本识别

    我的 imutils 包将用于非极大值抑制,因为 OpenCV 的 NMSBoxes 函数无法适配 Python API。我注意到 NumPy 是 OpenCV 的依赖项。...通过 imutils 方法进行非极大值抑制(第 117 行)。NMS 高效使用概率最高的文本区域,删除其他重叠区域。 现在我们知道文本区域的位置了,接下来需要识别文本。...我们开始在边界框上循环,并处理结果,为实际的文本识别做准备: ? 我们初始化 results 列表,使其包含我们的 OCR 边界框和文本(第 120 行)。...我们的结果(边界框值和实际的 text 字符串)附加在 results 列表(第 156 行)中。 接下来,我们继续该流程,在循环的基础上处理其他 ROI。...从文本中去掉非 ASCII 字符,因为 OpenCV 在 cv2.putText 函数中不支持非 ASCII 字符(第 171 行)。

    3.9K50

    目标检测中的 Anchor 详解

    虽然锚框应用于特征图,但我们仍然需要决定它们的形状、大小和宽高比。关键问题包括: 所有锚框都应该是垂直矩形,还是应该有一些是正方形? 最小和最大的锚框大小应该是什么?...步骤2:预测物体得分 评估每个锚框以确定是否包含物体。 分类头为每个锚框分配一个概率得分。 如果得分高,意味着框可能包含物体。 如果得分低,则忽略。...应用这些调整后,锚框稍微移动并调整大小以更准确地匹配汽车。 步骤4:去除冗余框(非最大抑制) 许多锚框可能会预测同一个物体,略有变化。 模型应用非最大抑制(NMS)去除冗余框,只保留最好的一个。...使用非最大抑制(NMS)去除了其他重叠框。 最终的边界框准确地围绕图像中的汽车。...下载2:Python视觉实战项目52讲在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取

    7510

    OpenCV 图像分析之 —— Canny

    Canny 是1986年提出的图像边缘检测经典算法,本文记录相关内容与 OpenCV 实现。 简介 通常情况下边缘检测的目的是在保留原有图像属性的情况下,显著减少图像的数据规模。...应用非最大抑制(non-maximum suppression)技术来消除边误检 通常灰度变化的地方都比较集中,将局部范围内的梯度方向上,灰度变化最大的保留下来,其它的不保留,这样可以剔除掉一大部分的点...沿着梯度方向对幅值进行非极大值抑制,而非边缘方向。 例如:3\times3区域内,边缘可以划分为垂直、水平、45°、135°4个方向,同样,梯度反向也为四个方向(与边缘方向正交)。...在每一点上,领域中心 x 与沿着其对应的梯度方向的两个像素相比,若中心像素为最大值,则保留,否则中心置0,这样可以抑制非极大值,保留局部梯度最大的点,以得到细化的边缘。...如果边缘像素点梯度值大于高阀值,则被认为是强边缘点。如果边缘梯度值小于高阀值,大于低阀值,则标记为弱边缘点。小于低阀值的点则被抑制掉。 选取系数TH和TL,比率为 2:1 或 3:1。

    2.1K20

    用39块钱的全志V851se视觉开发板做了个小相机,还可以物品识别、自动追焦!

    适配 OpenCV在打包好的固件中已经默认适配好了,如果不想了解如何适配OpenCV可以直接前往点击链接获取资料并跳过这部分 OpenCV默认不支持开启RAW Sensor,不过现在需要配置为OpenCV...算法通过计算框之间的交集面积和设置的阈值来进行筛选,并将保留的框的索引存储在picked向量中。...// 非极大值抑制算法(NMS) static void nms_sorted_bboxes(const std::vector& bboxs, std::vector& picked...然后应用非极大值抑制算法对检测结果进行筛选,最后将筛选后的目标框位置、大小和类别置信度等信息绘制在图像上。...// 按照分数对框进行排序 std::sort(BBox.begin(), BBox.end(), comp); // 应用非极大值抑制算法,获取保留的框的索引 std::vector

    27410

    10分钟上手,OpenCV自然场景文本检测(Python代码+实现)

    非纸质对象:大多数(但不是全部)纸张是不反光的。而自然场景中的文字可能是反光的,比如徽标,标志等。 非平面目标:想象文字印在瓶子上的情况,瓶子表面上的文本会扭曲和变形。...比如,Python中没有Point2f 和 RotatedRect函数,所以不能完全再现C++环境下的实现。 其次,NMSBoxes函数不返回Python绑定的任何值,最终导致OpenCV报错。...最后一步是将非最大值抑制应用于我们的边界框以抑制弱重叠边界框,然后显示结果文本预测: 112# apply non-maxima suppression to suppress weak, overlapping...OpenCV 4安装(cv2.dnn.NMSBoxes)中使用非最大值抑制,因为Python绑定没有返回值,最终导致OpenCV出错。...我无法完全在OpenCV 3.4.2中进行测试,因此它可以在v3.4.2中运行。 相反,我使用了imutils包中提供的非最大值抑制实现(第114行)。

    1.8K20

    图像边缘检测--OpenCV之cvCanny函数

    2.4 对梯度幅值进行非极大值抑制        图像梯度幅值矩阵中的元素值越大,说明图像中该点的梯度值越大,但这不不能说明该点就是边缘(这仅仅是属于图像增强的过程)。...在Canny算法中,非极大值抑制是进行边缘检测的重要步骤,通俗意义上是指寻找像素点局部最大值,将非极大值点所对应的灰度值置为0,这样可以剔除掉一大部分非边缘的点(这是本人的理解)。...图1 非极大值抑制原理         根据图1 可知,要进行非极大值抑制,就首先要确定像素点C的灰度值在其8值邻域内是否为最大。...这就是非极大值抑制的工作原理。         作者认为,在理解的过程中需要注意以下两点:         1)中非最大抑制是回答这样一个问题:“当前的梯度值在梯度方向上是一个局部最大值吗?”...完成非极大值抑制后,会得到一个二值图像,非边缘的点灰度值均为0,可能为边缘的局部灰度极大值点可设置其灰度为128。

    57720

    10分钟上手,OpenCV自然场景文本检测(Python代码+实现)

    非纸质对象:大多数(但不是全部)纸张是不反光的。而自然场景中的文字可能是反光的,比如徽标,标志等。 非平面目标:想象文字印在瓶子上的情况,瓶子表面上的文本会扭曲和变形。...比如,Python中没有Point2f 和 RotatedRect函数,所以不能完全再现C++环境下的实现。 其次,NMSBoxes函数不返回Python绑定的任何值,最终导致OpenCV报错。...最后一步是将非最大值抑制应用于我们的边界框以抑制弱重叠边界框,然后显示结果文本预测: 112# apply non-maxima suppression to suppress weak, overlapping...OpenCV 4安装(cv2.dnn.NMSBoxes)中使用非最大值抑制,因为Python绑定没有返回值,最终导致OpenCV出错。...我无法完全在OpenCV 3.4.2中进行测试,因此它可以在v3.4.2中运行。 相反,我使用了imutils包中提供的非最大值抑制实现(第114行)。

    1.7K30
    领券