首页 文章

图像坐标到世界坐标opencv

提问于
浏览
5

我使用opencv校准了我的单声道相机 . 现在我知道相机的内部矩阵和失真系数[K1,K2,P1,P2,K3,K4,K5,K6] . 假设相机位于[x,y,z]并且[Roll,Pitch,Yaw]旋转 . 当相机在地板上观看时,如何获得世界坐标中的每个像素[z = 0] .

enter image description here

3 回答

  • 2

    你说你校准了你的相机,它给你:

    • 内在参数

    • 外部参数(旋转,平移)

    • 失真系数

    首先,为了补偿失真,您可以使用undistort函数并获得未失真的图像 . 现在,您剩下的是内在/外在参数和针孔相机模型 . 以下公式取自OpenCV documentation,解释了如何使用这些参数将3D世界坐标转换为2D图像坐标:

    enter image description here

    基本上,您将3D坐标乘以投影矩阵,而投影矩阵又是内部参数(等式中的第一个矩阵)和外部参数(等式中的第二个矩阵)的组合 . 外部参数矩阵包含旋转和平移分量 [R|T] .

  • 3

    我建议你首先研究针孔相机模型,该模型模拟使用相机内部参数将3D世界中的点映射到图像平面的过程 . 正如您将看到的,此过程不是一对一的,因此它通常不能反转(图像到3D),除非您有深度信息(您有,因为您说点位于z = 0) ) . 在this presentation的幻灯片27中提到了这种特殊情况 . 以前的讲座详细解释了图像形成过程,可以作为实际确定从图像到世界坐标的转换的第一个参考 . Szeliski's bookthis PDF也是很好的资源 .

  • 0

    假设您的相机根据世界参考具有T = [xyx]'平移,并且正如您所说的相机具有R = [滚动,俯仰哈欠]旋转并且您的相机instrics参数在K中 . 任何像素(图像上的[px py])平面)在世界平面上具有W = [X,Y]坐标,并且可以使用以下Matlab代码计算W

    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

相关问题