Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 给定内在、外在和Y=0的约束,估计2D像素的深度_Opencv_Computer Vision_Perspective_Camera Calibration_Perspectivecamera - Fatal编程技术网

Opencv 给定内在、外在和Y=0的约束,估计2D像素的深度

Opencv 给定内在、外在和Y=0的约束,估计2D像素的深度,opencv,computer-vision,perspective,camera-calibration,perspectivecamera,Opencv,Computer Vision,Perspective,Camera Calibration,Perspectivecamera,我在离地面一定高度(h)处有一个单视图摄像机。通过校准,我获得了内在参数K、旋转矩阵和平移向量[R | t],因为我可以完全接触相机和环境,我可以测量任何我想要的东西。 我的目标是估计一个像素[u,v]在相机上的深度,因为我知道该像素在地板上(相对于相机,它位于y=-h)。 鉴于这一限制,我做了以下工作(没有成功): 根据[u,v]和相机参数+焦距[u-cx,v-cy,f]创建新的3D点P1 将P乘以相机矩阵K的倒数,并调用结果P2 将P2乘以[R | t]矩阵的倒数,并调用结果P3 P3是一

我在离地面一定高度(h)处有一个单视图摄像机。通过校准,我获得了内在参数K、旋转矩阵和平移向量[R | t],因为我可以完全接触相机和环境,我可以测量任何我想要的东西。 我的目标是估计一个像素[u,v]在相机上的深度,因为我知道该像素在地板上(相对于相机,它位于y=-h)。 鉴于这一限制,我做了以下工作(没有成功):

  • 根据[u,v]和相机参数+焦距[u-cx,v-cy,f]创建新的3D点P1
  • 将P乘以相机矩阵K的倒数,并调用结果P2
  • 将P2乘以[R | t]矩阵的倒数,并调用结果P3
  • P3是一个4x1向量,所以我们对它进行归一化,并将它降到3x1[X1,Y1,Z1]。这一点应该是我的[u,v]点的世界坐标投影
  • 当Y=-h时,按以下方式求解X和Z:
    • x=x1*(-h/y1)
    • y=z1*(-h/y1)
不幸的是,它看起来不对劲!我已经解决了这个问题两周了,所以能从社区得到一些帮助真的很棒。我肯定我错过了一些明显的东西


再次感谢

同构图像坐标是
P1=[u,v,1]
,或
[f*u,f*v,f]

与摄影机矩阵的逆矩阵相乘将生成一条光线,3D点沿该光线定位。
P2~=K⁻\*P1(~=等于一个比例因子)

让我们假设相机位于C(相机坐标系中的(0,0,0,1)),矢量P2的形式为
[x,y,z,0]
。(末尾的零使其平移不变!)

然后,您要查找的3D点位于
C+k*P2
,您必须求解变量k

P3 = Rt⁻¹ * (C + k*P2)
P4 = C2  + k * P3   
C2是摄像机在世界坐标系中的位置。 P3是世界坐标中的矢量。P4是您在
Y=-h

最后,插入约束
Y=-h
并使用
Y
组件计算
k

k = (-h - C2_y) / P3_y