当只有屏幕空间坐标可用时,将世界空间中的正方形扩展为立方体

时间:2018-04-12 21:47:54

标签: opencv math graphics 3d

我有一张Go-board的照片,它基本上是一个有n * n个正方形的网格,每个正方形大小为a。 根据图像的拍摄方式,网格可以有一个像这样的消失点(n = 15,板尺寸b = 15 * a):

Grid with one vanishing point

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

Grid with two vanishing points

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

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

有关这四点的信息是否足以计算出来?

如果这个信息不够,也许有必要假设相机到电路板中心的距离通常是电路板尺寸b的1.5或2倍?

根据我的理解,四条线p1-q1,p2-q2,p3-q3,p4-q4都将通过位于板下某处的相同(未知)消失点。

对于每条线p1-q1,p2-q2,...的方向,可能是足够的近似(因为通常对于Go板n = 18,因此正方形尺寸a与板尺寸相比较小)。在屏幕空间中,只需选择一条垂直于地平线的线(由两个消失点vp1-vp2给出,或者在只有一个消失点的情况下由p1-p2给出)?

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

任何提示都非常感谢!

PS:我正在使用Objective-C& OpenCV

1 个答案:

答案 0 :(得分:0)

尚未完整答案,但这可能会有助于向前发展。正如 MvG 指出仅仅4点还不够。幸运的是我们知道电路板是一个正方形所以即使是透视变形, 2D 中的对角线应该/将在电路板中心相交(除非存在严重的鱼眼或其他扭曲图片)。这是一个测试图像(由 OpenGL 创建,我用作测试输入):

mid point

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

现在我们可以使用半对角线长度之间的比例来假设/适合透视。如果我们处理范围<0,9>中的单元格坐标,我们希望进一步划分这样的对角线:

uv

我仍然不确定究竟是多么准确(线性比l0/(l0+l1)不起作用)所以我需要检查透视映射方程以找出相对比率依赖性并计算逆(当我有时间心情时)。

如果这将是成功的,我们可以计算沿对角线的任何点(我们想要单元格边缘)。如果这样做,我们可以轻松计算任何单元格大小a的视觉大小,并使用消失点,而不使用任何 3D 变换矩阵。

如果这不可行,仍然可以选择使用DIP / CV技术来检测这样的细胞杂交:

仅使用子弹#2 ,但为此你需要考虑你将拥有的图像类型并调整探测器或为其添加预处理......

现在回到你的偏移量,你可以简单地通过单元格的视觉大小来偏移你的单元格,如下所示:

offset

并处理左侧点(插入大小或使用理智作为相邻单元格)除非使用太奇怪的板角度,否则应该可以工作。