non-max suppression(非最大值抑制)

本文介绍了非最大值抑制算法的基本原理及实现步骤。通过排序目标检测候选框并逐个评估,剔除重叠度过高的框,从而筛选出最优检测结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

non-max suppression(非最大值抑制)
该算法的原理:
先假设有6个矩形框,根据分类器的类别分类概率大小排序,假设从小到大属于车辆(被检测的目标)的概率分别问:A、B、C、D、E、F
(1)从最大概率 矩形框F开始,分别判断A~E与F的重叠度IOU是否大于某个指定的阀值;
(2)假设B、D与F的重叠度大于指定的阀值,则丢弃B、D,并标记第一个矩形框 F,使我们要保留的
(3)从剩下的矩形框A、C、E中,选择最大概率,假设为E,然后判断A、C与E的重叠度是否大于指定的阀值,假如大于就丢弃A、C,并标记E,是我们保留下来的第二个矩形框
一直重复上述过程,找到所有被保留的矩形框。# 欢迎使用Markdown编辑器写博客

本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦:

  • Markdown和扩展Markdown简洁的语法
  • 代码块高亮
  • 图片链接和图片上传
  • LaTex数学公式
  • UML序列图和流程图
  • 离线写博客
  • 导入导出Markdown文件
  • 丰富的快捷键

快捷键

  • 加粗 Ctrl + B
  • 斜体 Ctrl + I
  • 引用 Ctrl + Q
  • 插入链接 Ctrl + L
  • 插入代码 Ctrl + K
  • 插入图片 Ctrl + G
  • 提升标题 Ctrl + H
  • 有序列表 Ctrl + O
  • 无序列表 Ctrl + U
  • 横线 Ctrl + R
  • 撤销 Ctrl + Z
  • 重做 Ctrl + Y

Markdown及扩展

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档,然后转换成格式丰富的HTML页面。 —— [ 维基百科 ]

使用简单的符号标识不同的标题,将某些文字标记为粗体或者斜体,创建一个链接等,详细语法参考帮助?。

本编辑器支持 Markdown Extra ,  扩展了很多好用的功能。具体请参考Github.

表格

Markdown Extra 表格语法:

项目价格
Computer$1600
Phone$12
Pipe$1

可以使用冒号来定义对齐方式:

项目价格数量
Computer1600 元5
Phone12 元12
Pipe1 元234

定义列表

Markdown Extra 定义列表语法: 项目1 项目2
定义 A
定义 B
项目3
定义 C

定义 D

定义D内容

代码块

代码块语法遵循标准markdown代码,例如:

@requires_authorization
def somefunc(param1='', param2=0):
    '''A docstring'''
    if param1 > param2: # interesting
        print 'Greater'
    return (param2 - param1 + 1) or None
class SomeClass:
    pass
>>> message = '''interpreter
... prompt'''

脚注

生成一个脚注1.

目录

[TOC]来生成目录:

数学公式

使用MathJax渲染LaTex 数学公式,详见math.stackexchange.com.

  • 行内公式,数学公式为:[Math Processing Error] Γ ( n ) = ( n − 1 ) ! ∀ n ∈ N
  • 块级公式:

[Math Processing Error] x = − b ± b 2 − 4 a c 2 a

更多LaTex语法请参考 这儿.

UML 图:

可以渲染序列图:

Created with Raphaël 2.1.2 张三 张三 李四 李四 嘿,小四儿, 写博客了没? 李四愣了一下,说: 忙得吐血,哪有时间写。

或者流程图:

Created with Raphaël 2.1.2 开始 我的操作 确认? 结束 yes no
  • 关于 序列图 语法,参考 这儿,
  • 关于 流程图 语法,参考 这儿.

离线写博客

即使用户在没有网络的情况下,也可以通过本编辑器离线写博客(直接在曾经使用过的浏览器中输入write.blog.youkuaiyun.com/mdeditor即可。Markdown编辑器使用浏览器离线存储将内容保存在本地。

用户写博客的过程中,内容实时保存在浏览器缓存中,在用户关闭浏览器或者其它异常情况下,内容不会丢失。用户再次打开浏览器时,会显示上次用户正在编辑的没有发表的内容。

博客发表后,本地缓存将被删除。 

用户可以选择 把正在写的博客保存到服务器草稿箱,即使换浏览器或者清除缓存,内容也不会丢失。

注意:虽然浏览器存储大部分时候都比较可靠,但为了您的数据安全,在联网后,请务必及时发表或者保存到服务器草稿箱

浏览器兼容

  1. 目前,本编辑器对Chrome浏览器支持最为完整。建议大家使用较新版本的Chrome。
  2. IE9以下不支持
  3. IE9,10,11存在以下问题
    1. 不支持离线功能
    2. IE9不支持文件导入导出
    3. IE10不支持拖拽文件导入


  1. 这里是 脚注内容.
### OpenCV 中实现非最大值抑制(NMS) 在计算机视觉领域,非最大值抑制(Non-Maximum Suppression, NMS)是一种用于消除冗余检测框的技术。通过比较边界框之间的交并比(Intersection over Union, IoU),可以筛选出最可能的目标区域。 OpenCV 提供了两种内置方法来执行 NMS:`cv2.dnn.NMSBoxes` 和 `cv2.dnn.NMSBoxesBatched`[^2]。以下是基于这些函数的一个具体示例: #### 示例代码 ```python import cv2 import numpy as np # 定义一组边界框及其对应的置信度分数 boxes = [[10, 20, 40, 60], [20, 30, 50, 70], [30, 40, 60, 80]] scores = [0.9, 0.8, 0.7] # 转换为 NumPy 数组以便于操作 boxes_np = np.array(boxes).astype('float') scores_np = np.array(scores) # 设置参数 score_threshold = 0.8 # 置信度阈值 nms_threshold = 0.5 # IOU 阈值 # 使用 cv2.dnn.NMSBoxes 进行非最大值抑制 indices = cv2.dnn.NMSBoxes( bboxes=boxes_np, scores=scores_np, score_threshold=score_threshold, nms_threshold=nms_threshold ) print("保留下来的边界框索引:", indices.flatten()) ``` 上述代码实现了以下功能: - 输入了一组边界框和它们的置信度分数。 - 设定了两个重要参数:`score_threshold` 表示仅考虑高于此阈值的候选框;`nms_threshold` 是用来判断两框是否重叠过多的标准。 - 函数返回的是经过过滤后剩余的有效边界框索引列表。 #### 关键点解释 1. **输入数据结构** - 边界框应以 `[x_min, y_min, x_max, y_max]` 的形式提供给 `bboxes` 参数。 - 对应的置信度分数则作为单独的一维数组传递到 `scores` 参数中。 2. **输出解析** - 返回的结果是一个二维数组,其中每一行代表一个批次中的有效索引集合。如果只有一个批次,则可以直接展平得到最终结果。 3. **性能优化建议** - 当处理大量目标时,可先利用其他条件预选部分候选项再送入 NMS 处理,从而减少计算量。 #### 参考说明 非极大值抑制的核心逻辑是从高分向低分依次选取当前最优解,并剔除与其高度重合的部分[^1]。而 OpenCV 将这一流程封装成易于调用的形式,极大地简化了开发者的负担。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值