好的,我会自己回答这个问题,因为我想我应该已经解决了:
本文提出了一种基于长方体/立方体的三维重建算法:
所以我所做的是首先根据已知的位置“估计”一个三维长方体。我估计并平均了x, y, z三个向量。我通过构造一个点p'间接地得到了z向量这个点p'就在平板凹槽中这些点的正上方,就像这样:
所以我得到了两个人造的立方体基于顶部和底部的图像,并得到了立方体的平均边长在2D像这样:
从那时起,我可以按照论文中描述的内容创建3D形状的第一个版本:
因为这仍然不是最优的,所以我接下来做的是创建一个真实的“世界坐标”的3D网格,并使用如下函数最小化重建的3D点和真实点之间的误差:
[squareError] = optimizeWithGlobals (F)
细化与fmin-search
Refined_F = fminsearch (@optimizeWithGlobals、ForRefinment_F选项);
我还采取了一些措施来防止它陷入局部极小值。并最终得到良好的重建(绿色的x为世界点,红色的是重建的):
注意边缘上的一些点有一点偏差(但都不超过0.2毫米)。这主要是因为我不能像网格图像中的其他点一样精确地设置这些点(稍后会修复):
还要特别感谢迈克尔,他在如何优化我的重建方面给了我一些建议
如果有人想知道关于这种方法的更多细节,可能会在以后的出版物中进行更详细的解释(如果我记得,我会在这里链接它)。此外,这里总是可以选择用问题进行注释(但不要期望快速响应时间)。
编辑:我忘了说这整个过程是用来优化F矩阵的,基本上就是我在最初的问题中提到的“函数T”:
T
(calib2D_bottom, calib2D_top) = calib3D |
T = ?
所以使用这个F矩阵,我现在应该能够重建表面,只要记录设置保持完全相同。