我正在研究机器人手臂,并试图找到一个相机和一个物体之间的距离,使用开放式CV知道物体的尺寸。
我不知道该怎么做。
我尝试使用visual servoing
方法,但没有成功。
任何帮助都会很好
答案 0 :(得分:0)
这是一个简单的解决方案:
1。)首先,您必须校准相机以接收C
矩阵。例如:
http://docs.opencv.org/doc/tutorials/calib3d/camera_calibration/camera_calibration.html
2。)然后你必须在图像上识别出距离已知的物体的两个点。我们可以在3D空间中使用这些点P1(X1, Y1, Z1)
和P2(X2, Y2, Z2)
,在2D图像平面中使用p1(x1, y1)
和p2(x2, y2)
。当然P1
和P2
不知道,只有图片上的对(p1
和p2
)及其距离D
。
3.)接下来,如果你知道相机校准矩阵C
,你有两个方程:
p1 = C * P1
和p2 = C * P2
然后:C^-1 * p1 = P1'
和C^-1 * p2 = P2'
其中P1' = (X1 / Z1, Y1 / Z1, 1)
和P2' = (X2 / Z2, Y2 / Z2, 1)
。这意味着C^-1 * p1
会返回属于Z1 = 1
距离的点的3D坐标。
但确切的距离不是1,而是Z1
和Z2
。现在,让我们假设Z1 == Z2 == Z
我们正在寻找距离Z
。
这遵循Z * C^-1 * p1 = P1
和Z * C^-1 * p2 = P2
。
下一个(Z * C^-1 * p1) - (Z * C^-1 * p2) = P1 - P2
和
Z * ((C^-1 * p1) - C^-1 * p2)) = P1 - P2
和
Z^2 * ((C^-1 * p1) - C^-1 * p2))^2 = (P1 - P2)^2 = D^2
现在,C
,p1
,p2
和D
已知,只有Z
是最后一个等式中的未知变量。
当然,这只是一个基本的解决方案,并且使用了对象点的距离非常相似的假设,但它可以工作。