Opencv 当只有屏幕空间坐标可用时,将世界空间中的正方形延伸到立方体

Opencv 当只有屏幕空间坐标可用时,将世界空间中的正方形延伸到立方体,opencv,math,graphics,3d,Opencv,Math,Graphics,3d,我有一张围棋板的照片,基本上是一个由n*n个正方形组成的网格,每个正方形的大小都是a。 根据图像的拍摄方式,网格可以有如下任一消失点(n=15,电路板尺寸b=15*a): 或者像这样的两个消失点(n=9,电路板尺寸b=9*a): 所以我能得到的是平板四个角的四个屏幕空间坐标:p1,p2,p3,p4 我想做的是计算板角对应的四个屏幕空间坐标q1、q2、q3、q4,如果板在世界空间中“向上”(垂直于板的平面)移动a,或者换句话说,如果板的厚度为a,则计算板顶部的坐标 关于这四个点的信息是否足以计

我有一张围棋板的照片,基本上是一个由n*n个正方形组成的网格,每个正方形的大小都是a。 根据图像的拍摄方式,网格可以有如下任一消失点(n=15,电路板尺寸b=15*a):

或者像这样的两个消失点(n=9,电路板尺寸b=9*a):

所以我能得到的是平板四个角的四个屏幕空间坐标:p1,p2,p3,p4

我想做的是计算板角对应的四个屏幕空间坐标q1、q2、q3、q4,如果板在世界空间中“向上”(垂直于板的平面)移动a,或者换句话说,如果板的厚度为a,则计算板顶部的坐标

关于这四个点的信息是否足以计算这一点

如果这不是足够的信息,那么假设摄像机到电路板中心的距离通常是电路板尺寸b的1.5倍或2倍可能会有所帮助

根据我的理解,四条线p1-q1、p2-q2、p3-q3、p4-q4都会经过相同(但未知)的消失点,位于电路板下方的某个地方

对于线p1-q1、p2-q2、p2-q2、p2-q1、p2-q2、p2-q1、p2-q2、p2-q1、p2-q2、p2-q2、p2-q1、p2-q2、p2-q2、p2-q1、p2-q2、p2-q2、。。。在屏幕空间中,只需选择一条垂直于地平线的线(由两个消失点vp1-vp2或p1-p2给出,如果只有一个消失点)

进行此近似后,仍然需要计算四条线p1-q1、p2-q2、p3-q3、p4-q4的长度

任何提示都非常感谢


PS:我正在使用Objective-C和OpenCV,这还不是一个完整的答案,但这可能有助于向前发展。正如MvG所指出的,仅仅4分是不够的。幸运的是,我们知道棋盘是一个正方形,因此即使存在透视失真,2D中的对角线也应该/将在棋盘中心相交(除非图像中存在严重的鱼眼或其他失真)。这里是一个测试图像(由我用作测试输入的OpenGL创建):

使用透视扭曲的角点(您的输入),灰色曲面为2D四边形。浅绿色/蓝色网格是3D OpenGL网格,我创建了2D角点(以查看它们是否匹配)。绿线是2D对角线,橙色点是2D角点和对角线交点。正如您所看到的,2D对角线交点与3D板中间单元中心完全对应

现在我们可以使用半对角线长度之间的比率来假设/拟合透视图。如果我们在范围
中处理单元格坐标,我们希望实现进一步的等分对角线,如下所示:

我仍然不确定准确程度(线性比率
l0/(l0+l1)
不起作用),因此我需要检查透视映射方程,以找到相对比率依赖关系并计算逆(当我有时间时)

如果这将是一个成功,那么我们可以计算沿对角线的任何点(我们想要单元边)。如果这样做的话,我们可以很容易地计算任何单元格大小
a
的视觉大小,并使用消失点,而不需要任何3D变换矩阵

如果不可行,仍然可以选择使用DIP/CV技术检测细胞交叉,如下所示:

仅使用项目符号#2,但为此,您需要考虑您将拥有的图像类型,并调整检测器或为其添加预处理

现在回到偏移,您只需按单元格的可视大小向上偏移单元格,如下所示:


并处理左侧点(要么插值大小,要么使用sane作为相邻单元),除非使用太奇怪的板角度,否则这些点应该可以工作

你知道你的相机视场(x,y)或焦距吗?如果是,您可以将3D平面拟合到您的4个点(在世界坐标中),并从中获得您点的3D坐标,然后您只需将其y坐标偏移高度差,然后再次应用相机透视…@Spektre否,我没有相机位置-只有四个courner点(屏幕坐标)FOV是视野而非位置,它表示摄像机在
x
y
方向上所覆盖的视角。如果您不知道,但知道像素在x和y方向上的角度大小可能相同,则这可能退化为相对比率单位,这仍然足够。另一种可能性是使用
VP
VP1,VP2
易于计算,但为此,您需要知道四个
p(i)
点的
a
高度(以像素为单位)。对于
VP
的情况,这很容易,但是对于
VP1、VP2
的情况,您必须应用透视校正纹理贴图计算的反转。。。为此,您需要的不仅仅是4个桥,幸运的是,这可能有助于获得其他积分。您是否有一些样本图像用于测试每个案例?您可以计算自由度。从三维齐次坐标到二维坐标的转换由3×4矩阵表示,可以在不影响转换的情况下缩放矩阵。所以你有12个矩阵元素,11个影响变换的真实自由度。知道4个x/y坐标意味着你有8项信息,因此又少了3项。知道更多的距离,如电路板尺寸和摄像头之间的比例,可以解释更多的距离。也就是说,如果没有额外的假设,你离u还有2个自由度