二维对象相交

Posted

技术标签:

【中文标题】二维对象相交【英文标题】:Object intersection in 2d 【发布时间】:2021-09-25 02:31:13 【问题描述】:

图片(1)

图片(2)

我有 2 张图片 image(1) 和 image(2)

image(1):我将相机放在某个固定的位置并拍摄了这张图片。我有框坐标(xmin,ymin,xmax,ymax),由红色边界框显示。我还有一些感兴趣的区域(ROI),用蓝色框显示。

image(2):从顶部我捕捉到了这张图片。在这里,我也刚刚绘制了由红色边界框显示的框坐标(xmin,ymin,xmax,ymax)。还绘制了由蓝色框显示的感兴趣区域(ROI)。

在图像(1)中,我们可以看到红色框和蓝色框之间的一些交集。但这个路口不是真正的路口。因为当我们从顶视图看到图像时,我们可以看到它们之间没有交集,就像我在图像(2)中显示的那样。

所以对于图像(1),我有红色矩形坐标(xmin,ymin,xmax,ymax)。这个红色矩形包含对象。在那个红色矩形中,我没有关于对象位置/方向和对象可见角点的信息。 (因为从物体检测器我只得到这个红色矩形)。另外,我有蓝框(ROI)坐标。有没有办法借助相机校准(或任何其他计算机视觉方法)来找到这 2 个框(红色矩形和蓝色 ROI)在图像(1)中没有真正相交?

【问题讨论】:

确定这是可能的。如果您知道对象的大小和方向,您可以找到对象的 3D 地面点位置。但是对于没有场景标记的移动相机和任意对象,您可能无法根据示例图像中的情况所需的精度动态确定这些参数。 感谢您的回复。相机是固定的。通过相机校准,我将获得所有内在和外在参数。如图(1)所示,蓝框和红框像素坐标已经与我同在。那么在这个帮助下如何找到对象(图像(1))是否相交?你能用这种方式给任何方向吗... 【参考方案1】:

请看附件图片。您可能需要放大。请注意仍然存在镜头失真,我只是用手画线,所以不是很准确,但希望足以理解这个想法。

校准场景后,您将知道定义蓝色矩形的地平面以及对象位于该地平面上。我只是使用了纸上的正方形和方向,但是坐标轴可以是任意的。

您可以计算物体边界框方向的消失点,即深绿色线交点和橙色线交点(z方向消失点)和青色线交点(y方向消失点)。橙色和深绿色的线在现实中是平行的。

现在从地平面上方的 3D 对象边界框的左上角点(点 C),您可以直接画线到 y 方向消失点(左侧浅绿色线),同样边界框的右上角点(点 D)(右侧浅绿线)。浅绿色和深绿色线的交点是物体撞击地面的点(粉红色和深绿色和浅绿色线的交点)。如果其中一些点或其交点与您的 ROI 相交,则该对象实际上与地平面上的该区域相交。

您将需要一种方法来确定 3D 边界框的 2D 图像点,这本身就是一个难题。如果您知道对象的 CAD 模型或 3D 模型并且您拥有相机内在函数,那么文献中有一些形状拟合模型可用,例如来自 MVTec / Halcon 公司,他们的软件中也有实现。但是,如果您能够根据您的场景和相机确定 3D 中的 3D 对象点,那么您甚至不需要消失点的东西;)

【讨论】:

非常感谢您的可视化。您要计算对象边界框方向的消失点。我没有实际的对象坐标,我只有对象所在的红色矩形像素坐标(xmin,ymin,xmax,ymax)。(它是该对象的边界框,并且在该矩形中对象的放置方式像他们的方向/位置我没有的信息)。在相机校准中,我们将获得地平面。你能解释一下如何获得这条绿线、橙线、蓝线和精明线吗? 获取 3D 边界框(或更远的角点)将是改进检测算法的一部分。使用图像中的红色边界框,您将无法估计正确的位置/交叉点。您会看到 2D 边界框误差已经超过了所需的 3D 精度。 橙色/深绿色是 z 坐标方向(沿纸网格)的投影 3D 线,在该方向的消失点处相交。 3D 线在 3D 空间中是平行的!浅蓝色线沿对象 y 坐标方向(从对象的前上角到前下角的对象边缘)绘制,并再次超出它们的交点(消失点)。对象背面的平行边将在同一个消失点相交,因此您可以将线从可见的后顶角绘制到该消失点。 深绿色线是对象的地平面边缘。它们从可见的前底角开始,然后沿着消失线行进。物体在深绿色和浅绿色线的交点处结束(由于绘图的不精确,镜头畸变等有很大的误差) 深绿色和橙色线在 3D 中是平行的,因此它们在同一个消失点相交。因此,为了构建消失点,我使用了沿网格的橙色线。您还可以使用对象的 4 个可见顶角点来重建消失点。

以上是关于二维对象相交的主要内容,如果未能解决你的问题,请参考以下文章

如何检查圆是否与二维空间中的三角形相交?

Codeforces Hello 2020 选讲

python如何绘制一个三维空间下的平面?

二维平面三角划分

线段树维护二维平面中的线段

UVA 10652 Board Wrapping(二维凸包)