估计从摄像机到地平面点的距离

时间:2018-02-12 20:00:11

标签: opencv image-processing computer-vision

如何从图像计算相机到地平面上某点的距离? enter image description here

我有相机的内在参数和位置(高度,音高)。 有没有可以估算距离的OpenCV函数?

2 个答案:

答案 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的回答。我真的不知道这种方法。现在自己调查一下。