从图像

时间:2016-12-19 15:01:35

标签: c++ opencv camera direction

我是一名机器人工程师,我不是计算机视觉或视觉伺服的专家。这是我对相机的最佳体验之一。

无论如何,我想获得与图像中某个像素相关的方位信息。

设置如下。我有一台分辨率为1040x776的相机,我进行了校准。我的图像中有一些物体,我能够检测到并与图像中的某个点相关联。像素用 u,v 表示(我猜)所以这些点在 u 轴(水平)上0到1040之间,在 0到776之间> v 轴。

假设u,v = 0,0位于图像的中心(即使它位于左上角。但这不是问题)。

我想要的是从相机中心到上述像素的单位矢量。因此,例如,如果像素位于图像的中心,则得到的矢量应为(1,0,0)。

我想我已经在stackexchange上找到了回复,但我不是100%肯定是我需要的: OpenCV: Calculate angle between camera and pixel

配方:

1 - 校准相机,获取相机矩阵K和失真参数D.在OpenCV中,这将按照本教程中的描述完成。

2 - 从感兴趣的像素位置消除非线性失真。在OpenCV中使用undistortPoints例程完成,而不传递参数R和P.

3 - 通过将相位坐标中的像素位置乘以相机矩阵的倒数,将相关像素反投影到相机3D坐标中的光线(相机中心尾部的单位矢量)。

你怎么看?

提前感谢您的关注。

1 个答案:

答案 0 :(得分:0)

假设摄影机位于原点并向下看正Z轴,则图像平面是XY平面,正X指向右,正Y指向下,3D像素的位置为:

(pixel.x - imageCentreX, pixel.y - imageCentreY, focalLength)

然后,您需要将其乘以相机的3x3旋转矩阵以获得3D方向矢量:

rotation * (pixel.x - imageCentreX, pixel.y - imageCentreY, focalLength)

然后可以通过除以长度来归一化此向量,以将单位方向向量取回一个像素。