【问题标题】:Where exactly does the bounding box start or end?边界框到底在哪里开始或结束?
【发布时间】:2020-04-12 23:44:04
【问题描述】:

在 OpenCV 或对象检测模型中,它们将边界框表示为 4 个数字,例如x,y,宽度,高度或 x1,y1,x2,y2。

这些数字似乎定义不明确,但分辨率很大时没问题。 但这让我想到图像的分辨率非常低,例如8x8,一个像素的错误可能会导致事情变得非常错误。

所以我想知道,当您说边界框具有 x1=0、x2=100 时,究竟是什么意思?

具体来说,我想在理解好的情况下消除这些困惑:

  • 边界框的边界是占据第 0 个像素还是围绕第 0 个像素(其边界在 x=-1)?
  • 边界框的确切末端在哪里?如果图像的 shape=(8,8),结束是在 7 还是 8?
  • 如果要表示占据整个图像的边界框,它的值应该是多少?

所以我认为正确的问题应该是,我如何直观地考虑边界框,这样我就不会感到困惑?

【问题讨论】:

    标签: opencv deep-learning object-detection bounding-box yolo


    【解决方案1】:

    好的。在处理了很多天的边界框之后,我现在对如何考虑边界框坐标有了自己的直觉。

    我将坐标分为两类:连续的和离散的。当您尝试在它们之间转换时,通常会出现心理问题。

    假设图像的宽度=100,高度=100,那么您可以有一个带有 x,y 的连续点,该点可以具有[0,100] 范围内的任何实数值。

    表示 (0,0), (0.5,7.1,39.83,99.9999) 这样的点是有效点。

    现在您可以通过取数字的底数将图像上的连续点转换为离散点。例如。 (5.5, 8.9) 被映射到图像上的像素数 (5,8)。了解您不应该使用上限或舍入操作将其转换为离散版本非常重要。假设您有一个连续点 (0.9,0.9),该点位于 (0,0) 像素中,因此它最接近 (0,0) 像素,而不是 (1,1) 像素。

    在此基础上,让我们尝试回答我的问题:

    1. 所以我想知道,当您说边界框具有 x1=0、x2=100 时,究竟是什么意思?

      表示连续点 1 的 x 值 = 0,连续点 2 的 x 值 = 100。连续点的大小为零。这不是像素。

    2. 边界框的边框是占据第 0 个像素还是围绕第 0 个像素(其边框在 x=-1 处)?

      在连续空间中,边界框边框占用零空间。边框非常纤细。但是当我们想将它绘制到图像上时,边框的大小至少要 1 个像素厚。所以如果我们有一个连续点 (0,0),它将占据图像的第 0 个像素。但理论上,它代表第 0 个像素的左侧和顶部的细边框。

    3. 边界框的确切末端在哪里?如果图像的 shape=(8,8),那么结束是在 7 还是 8?

      您可以拥有的最大 x,y 值是 7.999...但是当转换为离散版本时,您将剩下 7 代表最后一个像素。

    4. 如果你想表示一个占据整个图像的边界框,它的值应该是什么?

      由于您拥有的精度,您应该在连续空间而不是离散空间中表示边界框坐标。这意味着最大的边界框从 (0,0) 开始,到 (100,100) 结束。但是如果要绘制这个框,则需要将其转换为离散版本,并在 (0,0) 处绘制边界框,并在 (99,99) 处结束。

    【讨论】:

      【解决方案2】:

      在 OpenCv 中,可以通过多种方式定义边界矩形。一种方法是它的左上角和右下角。对于构造函数Rect(int x1, int y1, int x2, int y2),它定义了这两点。矩形正好从那个像素和坐标开始。对于亚像素矩形,也有保存浮点坐标的变体。

      所以我想知道,当您说边界框具有 x1=0、x2=100 时,究竟是什么意思?

      这意味着左上角 x-coordinate 从 0 开始,右下角 x-coordinate 从 100 开始。

      边界框的边界是占据第 0 个像素还是围绕第 0 个像素(其边界在 x=-1)?

      边框正好从第 0 个像素开始。这意味着绘制时宽度和高度为1px的矩形只是一个符号点(1px)

      边界框的确切末端在哪里?如果图像的 shape=(8,8),那么结束是在 7 还是 8?

      7 点结束,见下文。

      如果要表示一个占据整个图像的边界框,它的值应该是多少?

      让图像大小为 100,100。由两点定义的图像矩形周围将是Rect(Point(0,0), Point(99,99)),起点和大小为Rect(0, 0, 100, 100)

      基本是要知道大小为X,Y 的图像在(0,0) 具有最小左上坐标,在右下坐标(X-1,Y-1) 具有最大坐标

      【讨论】:

        猜你喜欢
        • 2019-10-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多