答案 0 :(得分:3)
您可以使用undistortPoints计算反投影像素的光线,但该API很难用于您的目的。在代码中“手动”进行计算可能更容易。至少做一次也可以帮助您了解API究竟在做什么。
将摄像机的“位置(高度,俯仰)”表示为旋转矩阵R和平移向量t,表示从地平面原点到摄像机的坐标变换。也就是说,给定地平面坐标中的一个点Pg = [Xg,Yg,Zg],它在相机框架中的坐标由
给出Pc = R * Pg + t
摄像机坐标中的摄像机中心为Cc = [0,0,0]。在地面坐标中,它是:
Cg = -R' * t
其中R'是R的转置。
为简单起见,假设地平面为Zg = 0。
设K是内在参数的矩阵。给定像素q = [u,v],将其写入均匀图像坐标Q = [u,v,1]。它在相机坐标中的位置是
Qc = Ki * Q
其中Ki = inv(K)是内在参数矩阵的倒数。那么世界坐标中的相同点就是
Qg = R' * Qc -R' * t
属于从相机中心穿过该像素的光线的所有点Pg = [Xg,Yg,Zg],以地面坐标表示,然后就行了
Pg = Cg + lambda * (Qg - Cg)
表示lambda从0变为正无穷大。最后一个公式表示地面XYZ坐标中的三个方程,并且您希望找到光线与地平面相交的X,Y,Z和λ的值。但这意味着Zg = 0,所以你只有3个未知数。解决它们(你从第3个等式恢复lambda,然后用前两个替换),你得到解决问题的Xg和Yg。
答案 1 :(得分:-1)
单个图像无法进行深度计算。您需要立体声配置(或至少两个已知距离的图像)。据我所知,单帧/图像的深度感知是不可能的。
非常感谢@Francesco的回答。我真的不知道这种方法。现在自己调查一下。