边界框究竟从哪里开始或结束?
Where exactly does the bounding box start or end?
在 OpenCV 或对象检测模型中,它们将边界框表示为 4 个数字,例如x,y,宽度,高度或 x1,y1,x2,y2。
这些数字似乎不太明确,但是当分辨率很大时就没问题了。
但这让我想到图像的分辨率很低时,例如8x8,一个像素的错误会导致事情变得非常错误。
所以我想知道,当你说一个边界框有 x1=0,x2=100 到底是什么意思?
具体来说,我想在理解得很好的情况下消除这些困惑:
- 边界框边界是占据第 0 个像素还是围绕第 0 个像素(其边界位于 x=-1)?
- 边界框的确切末端在哪里?如果图像有 shape=(8,8),那么结尾是 7 还是 8?
- 如果你想表示一个占据整个图像的边界框,它的值应该是多少?
所以我认为正确的问题应该是,我如何直观地考虑边界框,以免这些让我感到困惑?
在 OpenCv 中,可以通过多种方式定义边界矩形。一种方式是它的左上角和右下角。在构造函数 Rect(int x1, int y1, int x2, int y2)
的情况下,它定义了这两点。矩形恰好从该像素和坐标开始。对于子像素矩形,还有保存浮点坐标的变体。
So I want to know, what exactly does it mean when you say that a bounding box has x1=0, x2=100?
这意味着左上角 x-coordinate
从 0 开始,右下角 x-coordinate
从 100 开始。
Does the bounding box border occupy the 0th pixel or is it surrounding 0th pixel (its border is at x=-1)?
边框恰好从第 0 个像素开始。意思是绘制时宽度和高度为1px的矩形只是一个小点(1px)
Where is the exact end of the bounding box? If the image have shape=(8,8), would the end be at 7 or 8?
7 点结束,见下文。
If you want to represent a bounding box that occupy the entire image, what should be its values?
假设图像大小为 100,100。由两点定义的图像矩形周围的起点和大小为 Rect(Point(0,0), Point(99,99))
Rect(0, 0, 100, 100)
最基本的是知道大小为 X,Y
的图像在 (0,0)
处有最小坐标,在右下角有最大值 (X-1,Y-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) 像素。
在此基础上,我们试着回答我的问题:
所以我想知道,当你说一个边界框有x1=0,x2=100时到底是什么意思?
表示连续点1的x值=0,连续点2的x值=100。连续点的大小为0。不是像素。
边界框边界是占据第0个像素还是围绕第0个像素(其边界在x=-1)?
在连续-space中,边界框边界占据零space。边框无限细。但是当我们想将它绘制到图像上时,边框的大小至少为 1 像素厚。所以如果我们有一个连续点 (0,0),它将占据图像的第 0 个像素。但理论上,它代表第0个像素的左侧和顶部的细边框。
边界框的确切末端在哪里?如果图像有 shape=(8,8),那么结尾是 7 还是 8?
您可以拥有的最大 x,y 值是 7.999...但是当转换为离散版本时,您将剩下代表最后一个像素的 7。
如果要表示一个占据整个图像的边界框,它的值应该是多少?
您应该以连续 space 而不是离散 space 表示边界框坐标,因为您拥有的精度。这意味着最大的边界框从 (0,0) 开始到 (100,100) 结束。但是如果你想绘制这个框,你需要将它转换为离散版本并在 (0,0) 处绘制边界框并在 (99,99) 处结束。
在 OpenCV 或对象检测模型中,它们将边界框表示为 4 个数字,例如x,y,宽度,高度或 x1,y1,x2,y2。
这些数字似乎不太明确,但是当分辨率很大时就没问题了。 但这让我想到图像的分辨率很低时,例如8x8,一个像素的错误会导致事情变得非常错误。
所以我想知道,当你说一个边界框有 x1=0,x2=100 到底是什么意思?
具体来说,我想在理解得很好的情况下消除这些困惑:
- 边界框边界是占据第 0 个像素还是围绕第 0 个像素(其边界位于 x=-1)?
- 边界框的确切末端在哪里?如果图像有 shape=(8,8),那么结尾是 7 还是 8?
- 如果你想表示一个占据整个图像的边界框,它的值应该是多少?
所以我认为正确的问题应该是,我如何直观地考虑边界框,以免这些让我感到困惑?
在 OpenCv 中,可以通过多种方式定义边界矩形。一种方式是它的左上角和右下角。在构造函数 Rect(int x1, int y1, int x2, int y2)
的情况下,它定义了这两点。矩形恰好从该像素和坐标开始。对于子像素矩形,还有保存浮点坐标的变体。
So I want to know, what exactly does it mean when you say that a bounding box has x1=0, x2=100?
这意味着左上角 x-coordinate
从 0 开始,右下角 x-coordinate
从 100 开始。
Does the bounding box border occupy the 0th pixel or is it surrounding 0th pixel (its border is at x=-1)?
边框恰好从第 0 个像素开始。意思是绘制时宽度和高度为1px的矩形只是一个小点(1px)
Where is the exact end of the bounding box? If the image have shape=(8,8), would the end be at 7 or 8?
7 点结束,见下文。
If you want to represent a bounding box that occupy the entire image, what should be its values?
假设图像大小为 100,100。由两点定义的图像矩形周围的起点和大小为 Rect(Point(0,0), Point(99,99))
Rect(0, 0, 100, 100)
最基本的是知道大小为 X,Y
的图像在 (0,0)
处有最小坐标,在右下角有最大值 (X-1,Y-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) 像素。
在此基础上,我们试着回答我的问题:
所以我想知道,当你说一个边界框有x1=0,x2=100时到底是什么意思?
表示连续点1的x值=0,连续点2的x值=100。连续点的大小为0。不是像素。
边界框边界是占据第0个像素还是围绕第0个像素(其边界在x=-1)?
在连续-space中,边界框边界占据零space。边框无限细。但是当我们想将它绘制到图像上时,边框的大小至少为 1 像素厚。所以如果我们有一个连续点 (0,0),它将占据图像的第 0 个像素。但理论上,它代表第0个像素的左侧和顶部的细边框。
边界框的确切末端在哪里?如果图像有 shape=(8,8),那么结尾是 7 还是 8?
您可以拥有的最大 x,y 值是 7.999...但是当转换为离散版本时,您将剩下代表最后一个像素的 7。
如果要表示一个占据整个图像的边界框,它的值应该是多少?
您应该以连续 space 而不是离散 space 表示边界框坐标,因为您拥有的精度。这意味着最大的边界框从 (0,0) 开始到 (100,100) 结束。但是如果你想绘制这个框,你需要将它转换为离散版本并在 (0,0) 处绘制边界框并在 (99,99) 处结束。