我想使用ArUco来查找标记的“空间坐标”。我很难理解tvecs
和rvecs
。我走了这么远,tvecs
是平移,rvecs
是旋转的。但是它们是如何面向的,它们在代码中是按照什么顺序编写的,或者我是如何定位它们的呢?
这是一个设置的小草图。 I在X,Y,Z位置有一个摄像机(膝上型电脑摄像头只是用来说明相机的方向),相机是定向的,它可以用角a周围X,角b围绕Y,角c围绕Z(角在Rad中)来描述。
因此,如果我的相机是静止的,我会为ChArUco板拍摄不同的照片,给相机校准算法tvecs_camerapos
(Z,Y,X)和rvecs_camerapos
(c,b,a)。我得到了cameraMatrix,distCoeffs
和tvecs_cameracalib
,rvecs_cameracalib
。t/rvecs_camerapos
和t/rvecs_cameracalib
是不同的,我觉得很奇怪。
camerapos
或cameracalib
来估计姿态吗?我认为t/rvecs_cameracalib
是可以忽略的,因为我只对摄像机校准算法的内在参数感兴趣。
现在,我想找到标记X,Y,Z 的位置,我使用aruco.estimatePoseSingleMarkers
和t/rvecs_camerapos
,并检索t/rvecs_markerpos
。tvecs_markerpos
与我的期望值不匹配。
t/rvecs_markerpos
变换才能找到标记的X,Y,Z?发布于 2019-08-06 07:45:47
处理相机和摄像机校准的OpenCV例程(包括AruCo)使用针孔相机模型。世界起源被定义为相机模型的投影中心(所有进入照相机的光线都会聚在一起),Z轴定义为相机模型的光轴,X和Y轴形成一个正交系统,Z +Z在相机前面,+X在右边,+Y是向下的。所有AruCo坐标都在这个坐标系中定义。这解释了为什么您的“摄像机”to和rvecs会发生变化:它们并不定义相机在某些世界坐标系中的位置,而是定义标记相对于您的相机的位置。
你不需要真正知道相机校准算法是如何工作的,除了它会给你一个相机矩阵和一些镜头畸变参数,你用它作为输入到其他AruCo和OpenCV例程。
一旦您有了校准数据,您可以使用AruCo识别标记,并返回它们在相机定义的三维坐标系中的位置和方向,并对相机镜头的畸变进行正确的补偿。这是足够的,例如,增强现实使用OpenGL之上的视频饲料从你的相机。
发布于 2019-03-24 12:19:55
据我理解,相机坐标是三维世界的参照系。rvec和tvec是用来获得任何其他3D点(在世界参考帧中)的位置的变换。这两个向量都是外部参数R_t_t。本征参数一般是通过标定得到的。现在,如果你想把其他的3D点w.r.t世界参考框架投射到图像平面上,你需要先把这个3D点放到相机坐标系中,然后把它投影到图像上,才能得到一个正确的视角。
像平面点(u,v,1)=内禀三维点,1
参考坐标系是摄像机。rvec,tvec给出了6D姿态的标记wrt到相机。
https://stackoverflow.com/questions/53277597
复制相似问题