我使用opencv校准了我的单声道相机。现在我知道相机的内部矩阵和失真系数[K1,K2,P1,P2,K3,K4,K5,K6]。假设相机位于[x,y,z]并且[Roll,Pitch,Yaw]旋转。当相机在地板上观看时,如何以世界坐标获取每个像素[z = 0]。
答案 0 :(得分:3)
我建议您首先研究针孔相机模型,该模型使用相机内部参数模拟3D世界中的点映射到图像平面的过程。正如您所看到的,此过程不是一对一的,因此它通常不能反转(图像到3D),除非您有深度信息(您有,因为您说点位于z = 0)。 this presentation的幻灯片27中提到了这种特殊情况。以前的讲座详细解释了图像形成过程,可以作为实际确定从图像到世界坐标的转换的第一个参考。 Szeliski's book和this PDF也是很好的资源。
答案 1 :(得分:2)
你说你校准了相机,它给你:
首先,为了补偿失真,您可以使用undistort功能并获得无失真的图像。现在,您剩下的是内在/外在参数和针孔相机模型。以下公式取自OpenCV documentation,解释了如何使用这些参数将3D世界坐标转换为2D图像坐标:
基本上,您将3D坐标乘以投影矩阵,而投影矩阵又是内部参数(等式中的第一个矩阵)和外部参数(等式中的第二个矩阵)的组合。外部参数矩阵包含旋转和平移分量[R|T]
。
答案 2 :(得分:0)
假设您的相机根据世界参考具有T = [xyx]的平移,并且正如您告诉您的相机具有R = [滚动,俯仰打哈欠]旋转,并且相机的instrics参数以K为单位。任何像素([px py )在世界平面上具有W = [X,Y]坐标,而W只需使用以下Matlab代码即可计算
R = rotationVectorToMatrix(R)'
H=K*[R T];`
Q=inv([H(:,1) H(:,2) -[px;py;1]])*-H(:,4);
W=Q(1:2)
在这里,文档末尾是我的意思的好例子,https://github.com/muhammetbalcilar/Stereo-Camera-Calibration-Orthogonal-Planes