9.3_bounding-box

本文介绍了目标检测的概念,这是计算机视觉中的一项任务,旨在识别图像中的多个目标并确定它们的位置,通常用边界框表示。目标检测在无人驾驶、机器人和安防等领域有广泛应用。文中还展示了如何使用边界框标记图像中的目标,并给出了一个示例图像,描绘了狗和猫的边界框。

9.3 目标检测和边界框

在前面的一些章节中,我们介绍了诸多用于图像分类的模型。在图像分类任务里,我们假设图像里只有一个主体目标,并关注如何识别该目标的类别。然而,很多时候图像里有多个我们感兴趣的目标,我们不仅想知道它们的类别,还想得到它们在图像中的具体位置。在计算机视觉里,我们将这类任务称为目标检测(object detection)或物体检测。

目标检测在多个领域中被广泛使用。例如,在无人驾驶里,我们需要通过识别拍摄到的视频图像里的车辆、行人、道路和障碍的位置来规划行进线路。机器人也常通过该任务来检测感兴趣的目标。安防领域则需要检测异常目标,如歹徒或者炸弹。

在接下来的几节里,我们将介绍目标检测里的多个深度学习模型。在此之前,让我们来了解目标位置这个概念。先导入实验所需的包或模块。

%matplotlib inline
from PIL import Image

import sys
sys.path.append("..") 
import d2lzh_pytorch as d2l

下面加载本节将使用的示例图像。可以看到图像左边是一只狗,右边是一只猫。它们是这张图像里的两个主要目标。

d2l.set_figsize()
img = Image.open('../img/catdog.jpg')
d2l.plt.imshow(img);  # 加分号只显示图

在这里插入图片描述

9.3.1 边界框

在目标检测里,我们通常使用边界框(bounding box)来描述目标位置。边界框是一个矩形框,可以由矩形左上角的 x x x y y y轴坐标与右下角的 x x x y y y轴坐标确定。我们根据上面的图的坐标信息来定义图中狗和猫的边界框。图中的坐标原点在图像的左上角,原点往右和往下分别为 x x x轴和 y y y轴的正方向。

# bbox是bounding box的缩写
dog_bbox, cat_bbox = [60, 45, 378, 516], [400, 112, 655, 493]

我们可以在图中将边界框画出来,以检查其是否准确。画之前,我们定义一个辅助函数bbox_to_rect。它将边界框表示成matplotlib的边界框格式。

def bbox_to_rect(bbox, color):  # 本函数已保存在d2lzh_pytorch中方便以后使用
    # 将边界框(左上x, 左上y, 右下x, 右下y)格式转换成matplotlib格式:
    # ((左上x, 左上y), 宽, 高)
    return d2l.plt.Rectangle(
        xy=(bbox[0], bbox[1]), width=bbox[2]-bbox[0], height=bbox[3]-bbox[1],
        fill=False, edgecolor=color, linewidth=2)

我们将边界框加载在图像上,可以看到目标的主要轮廓基本在框内。

fig = d2l.plt.imshow(img)
fig.axes.add_patch(bbox_to_rect(dog_bbox, 'blue'))
fig.axes.add_patch(bbox_to_rect(cat_bbox, 'red'));

输出:
在这里插入图片描述

小结

  • 在目标检测里不仅需要找出图像里面所有感兴趣的目标,而且要知道它们的位置。位置一般由矩形边界框来表示。

注:除代码外本节与原书基本相同,原书传送门

<think>好的,我现在要解决用户关于NX Open API中UF_MODL_ask_bounding_box_aligned和UF_MODL_ask_bounding_box_exact两个函数的区别的问题。首先,我需要回忆这两个函数的功能以及它们在文档中的描述。 用户之前提到了三个获取边界盒子的方法,现在特别关注aligned和exact版本的区别。根据引用[1],UF_MODL_ask_bounding_box_aligned和UF_MODL_ask_bounding_box_exact的参数看起来相似,但可能有一些关键差异。首先,我需要确认这两个函数的主要功能。 通常,边界框(bounding box)函数用于获取模型对象的最小包围盒。Aligned可能指的是对齐某个坐标系,而exact可能表示更精确的计算。比如,aligned可能使用轴对齐的边界盒,而exact可能考虑对象的实际几何形状,即使旋转或非对齐的情况。 接下来,我需要检查函数的参数。UF_MODL_ask_bounding_box_aligned有一个expand参数,这可能意味着是否扩展边界盒以适应对象。而UF_MODL_ask_bounding_box_exact没有这个参数,可能总是精确计算,不考虑扩展。此外,exact函数可能在计算时使用更精确的算法,比如考虑曲面的实际形状,而aligned可能使用简化的方法,比如仅基于控制点或粗略估计。 另外,返回值方面,两者都返回min_corner、directions和distances,这可能表示边界盒的原点和各轴的方向及长度。但exact版本可能在这些值上更精确,尤其是在复杂几何体的情况下。 还需要考虑使用场景。例如,如果用户需要快速估算一个对象的尺寸,aligned可能更快但不够精确;而需要精确测量时,exact更适合,但计算时间可能更长。此外,坐标系(csys_tag)参数的存在说明两者都允许指定参考坐标系,这可能影响边界盒的方向。 总结下来,两者的主要区别可能在于计算的精确度和expand参数的存在。需要将这些点整理成清晰的中文回答,并生成相关问题。同时,确保回答结构符合用户的要求,分点说明区别、功能、用法,并添加引用标识。</think>### UF_MODL_ask_bounding_box_aligned vs UF_MODL_ask_bounding_box_exact 区别解析 #### 1. **核心功能区别** - **`UF_MODL_ask_bounding_box_aligned`** 用于获取模型对象在指定坐标系下的对齐边界盒子,支持通过`expand`参数控制是否扩展边界盒子以完全包含对象。 示例场景:快速估算模型在特定方向上的占位范围[^1]。 - **`UF_MODL_ask_bounding_box_exact`** 通过精确计算模型几何形状(包括曲面和复杂结构)的最小包围盒,**不依赖扩展参数**,直接返回数学定义的精确边界。 示例场景:需要高精度碰撞检测或加工路径规划时使用[^1]。 #### 2. **参数差异** ```c // UF_MODL_ask_bounding_box_aligned 参数 int UF_MODL_ask_bounding_box_aligned( tag_t object, // 目标对象 tag_t csys_tag, // 坐标系标签 logical expand, // 是否扩展边界(TRUE/FALSE) double min_corner[3], // 最小角点坐标 double directions[3][3], // 边界盒子方向矩阵 double distances[3] // 各方向长度 ); // UF_MODL_ask_bounding_box_exact 参数 int UF_MODL_ask_bounding_box_exact( tag_t object, // 目标对象 tag_t csys_tag, // 坐标系标签 double min_corner[3], // 最小角点坐标 double directions[3][3], // 边界盒子方向矩阵 double distances[3] // 各方向长度 ); ``` - **关键区别**:`expand`参数仅在`aligned`版本中存在。当`expand=TRUE`时,边界盒子可能略微放大以确保完全包含对象;`exact`版本则始终基于精确几何计算,不进行扩展[^1]。 #### 3. **性能与精度权衡** - **`aligned`版本**:计算速度快,适用于实时预览或非关键性操作,但对复杂曲面可能产生误差。 - **`exact`版本**:计算耗时较长,但精度高,适用于工程分析、制造等需要严格数据的场景。 #### 4. **典型应用对比** | 场景 | aligned版本适用性 | exact版本适用性 | |---------------------|-------------------|-----------------| | 模型快速定位 | ✔️ | ❌ | | 数控加工路径规划 | ❌ | ✔️ | | 渲染优化 | ✔️ | ❌ | | 公差分析 | ❌ | ✔️ |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

给算法爸爸上香

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值