从NMS谈起——什么是好的特征

本文介绍了特征点提取在图像处理中的重要性,特别是关键点和描述符的选择与评价标准。关键点应当具有良好的几何意义和可重复性,而描述符则要求在不同条件下的对应点对保持相似。非极大值抑制(NMS)用于避免特征点聚集,但可能不保证全局均匀分布。Bucketing方法虽然缓解了局部聚集,但仍然需要手动调整参数。ORB-SLAM的Bucketing策略提供了一种改进,但仍有局限。这些方法广泛应用于图像匹配、目标检测等领域。
部署运行你感兴趣的模型镜像

特征的评价

提取特征时我们往往先提取关键点,再提取描述符。前者决定了我们用哪些点来代表一幅图像,后者决定了我们如何描述图像的内容。相应的,对于关键点和描述符都有不同的评价标准。

抛开对于速度和存储性能,对于描述符,我们有很清楚的评价标准:即在不同的视角和成像条件下,对应点对的描述符尽量相似,非对应点对的描述符尽量不同。对于关键点,则没有这么简单。

我们使用一副图像中的某些点(或者patch)来代表整张图像,因此对于关键点,我们希望它有明确的几何意义,因此现在使用的关键点往往是角点或者斑点。对于同一场景,我们希望提取的特征不随着视角和环境变化而大幅度变动,这实际上是希望关键点具有较好的可重复性。为了量化可重复性,我们对于同一场景在不同情况下得到的两张图片,提取相同数目的关键点,统计对应的关键点点对占总的关键点数量的比例。

关键点的空间分布

实际使用时,我们提取的关键点往往是有限的。因此如何选择关键点的分布就是一件很重要的事情。

不管是从提高可重复性的角度来说,还是从更好的代表图像语义的角度来说,我们都希望关键点能以某种方式均匀的分布在整幅图像上。

现有的关键点提取方法往往会对于整张图像计算一个关键点的响应度,由于图像局部性的存在,相邻的像素往往会有较为相似的响应度。如果只是简单的按照相似度从大到小的方法排序来取前M个点,将会导致按照响应度进行排序可能会导致关键点聚集在一起,如图,提取出来的点是一簇一簇的
TOPM

非极大值抑制

为解决这一问题,一个常用的方法是非极大值抑制算法(Non-Maximum Suppression,NMS)。它的原理是是对于每个邻近的区域中,只保留响应度最高的关键点,而丢弃其他的关键点。事实上为了避免出现上面的特征点聚集的情况,目前opencv中提取各种特征的算法默认进行了3*3的NMS,实现上也很简单,只需要从响应度最高的点开始,丢弃它的8-邻近区域的特征点,然后依次访问剩下的点就可以了。

使用3*3的NMS提取特征得到的结果如下:
NMS

可以看到,这种方法可以在缓解上面提到的特征点一簇一簇出现的情况,在提取相同数目的情况下更多的点落在了之前无法兼顾的区域,但是依然不能不能保证关键点均匀的分布在整张图像上。此外,使用一个人工规定的固定大小的窗口来进行NMS也并不是一个最优的方法:一方面不同场景,不同分辨率的图像需要的窗口时不一样的,另一方面即使对于同一张图像,不同的局部也需要使用不同的窗口来获得最优的分布。以上图为例,增加NMS的窗口可能可以保证特征的分布更加稀疏,但却可能导致一些应该提取出来的点被屏蔽掉。

这里讲了NMS在特征点提取中的应用,实际上目标检测的领域也常常用到NMS的方法来去掉重复的检测框。虽然具体实现上有差异,思想其实是一致的。

Bucketing

另一种尝试是使用Bucketing的方法来进行特征的均匀化,著名的SLAM算法ORB-SLAM 即是使用这种方法。它所用到的数据结构比较复杂,这里不多赘述。简单来说,它将一张图像分割成许多小格子,然后对每个格子中的图像提取一定数目的关键点。使用ORB-SLAM的ORB特征提取的关键点如下图所示:
可以看到,比起NMS,这种方法可以缓解特征点在全部聚集在某个局部的情况,但是对于每个局部,还是会出现特征点聚集的情况,这一点与NMS刚好相反。另一方面,Bucketing的过程还是需要手动设置格子的大小和阈值,因此也不是最优的算法。
Bucketing

Reference

  1. Balntas V, Lenc K, Vedaldi A, et al. HPatches: A benchmark and evaluation of handcrafted and learned local descriptors[C]//Proceedings of the IEEE conference on computer vision and pattern recognition. 2017: 5173-5182.
  2. Mur-Artal R, Montiel J M M, Tardos J D. ORB-SLAM: a versatile and accurate monocular SLAM system[J]. IEEE transactions on robotics, 2015, 31(5): 1147-1163.

您可能感兴趣的与本文相关的镜像

Yolo-v5

Yolo-v5

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

### 非极大值抑制NMS)在图像分割中的应用和原理 非极大值抑制(Non-Maximum Suppression, NMS)是一种广泛应用于目标检测和图像分割领域的技术,其核心作用是减少冗余检测框,确保每个目标只保留一个最优的边界框[^1]。在图像分割任务中,NMS的作用主要体现在后处理阶段,用于优化检测结果。 #### 1. NMS的基本原理 NMS的核心思想是通过比较候选区域的置信度分数(confidence score),去除重复或冗余的检测框。具体来说,NMS会根据预定义的交并比(Intersection over Union, IoU)阈值,筛选出具有最高置信度的边界框,并移除与其高度重叠的其他候选框。这一过程可以递归地进行,直到所有候选框都被处理完毕[^1]。 #### 2. NMS在图像分割中的作用 在图像分割任务中,NMS通常被用来解决以下问题: - **消除冗余检测**:在目标检测或实例分割中,同一目标可能会被多个边界框覆盖。NMS通过选择具有最高置信度的框并移除其余框,确保每个目标仅对应一个最优检测结果。 - **提升精度**:通过减少误检和冗余框,NMS能够显著提高模型的预测精度,尤其是在密集目标场景下[^1]。 - **优化性能**:在实时应用场景中,减少检测框数量可以降低后续处理的计算复杂度,从而提升整体效率。 #### 3. NMS的实现步骤 以下是NMS的一个典型实现流程: ```python def nms(boxes, scores, iou_threshold): # 对得分进行排序,从高到低 order = scores.argsort()[::-1] keep = [] while len(order) > 0: # 取出当前得分最高的框 idx = order[0] keep.append(idx) # 计算IoU并与阈值比较 ious = calculate_iou(boxes[idx], boxes[order[1:]]) # 筛选出IoU小于阈值的框 order = order[1:][ious < iou_threshold] return keep ``` 上述代码展示了如何通过IoU阈值筛选边界框,并保留最优结果。此外,还可以引入改进版的NMS算法(如DIoU-NMS、CIoU-NMS等)来进一步优化性能[^3]。 #### 4. NMS与图像分割技术的结合 在图像分割领域,NMS通常与其他技术结合使用,例如: - **Otsu's 方法**:虽然Otsu's方法主要用于灰度图像的全局阈值分割[^2],但其思想可以扩展到多模态图像分割中,与NMS协同工作以优化目标边界。 - **边缘检测**:Canny边缘检测中对像素梯度的筛选机制[^4],与NMS非极大值抑制思想有异曲同工之妙,二者均可用于精确定位目标边界。 #### 5. NMS的局限性 尽管NMS在图像分割中有重要作用,但也存在一些局限性: - **依赖阈值设置**:IoU阈值的选择直接影响最终结果的质量。如果阈值过高或过低,可能导致误检或漏检。 - **无法处理重叠目标**:对于高度重叠的目标(如人群密集场景),传统NMS可能难以区分不同个体。此时需要引入改进版算法或结合其他技术。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值