我正在使用3个ArUco标记粘贴在3D头部模型上,以使用C ++中的OpenCV进行姿势估计。我的姿势估计算法为我提供了相对于摄影机的平移,但是我现在想知道标记相对于模型坐标系的坐标。因此,我已经使用3D扫描仪扫描了头部模型,并随身携带了一个对象文件和纹理文件。我的问题是获取相对于头部模型的标记坐标的最简单或最佳方法是什么。我应该使用OpenGL,Blender或者其他软件吗?寻找一些指示或建议。
答案 0 :(得分:2)
像您这样的声音具有相对于相机的标记坐标作为坐标系,因此在“眼睛空间”或相机空间中进行坐标调整。这是当您具有相机原点的坐标时。
本文有一个精巧的图表,它解释了不同的空间以及如何转换为不同的空间: http://antongerdelan.net/opengl/raycasting.html
如果要使用这些相同的坐标,但在模型空间中,则需要使您进入该空间的矩阵。
在这种情况下,您要从眼睛/相机空间->模型空间出发,因此需要将这些坐标乘以反视图矩阵,再乘以反模型矩阵。然后您的坐标将在模型空间中。
但是,例如在OpenGL中使用物理相机而不是软件相机时,这要困难得多。 为此,您将需要使用OpenCV获取相机的内部和外部参数。 有关更多详细信息,请参见本教程: https://docs.opencv.org/3.1.0/dc/dbb/tutorial_py_calibration.html