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