从图像中的像素中获取轴承矢量(方向)

Get bearing vector (direction) from pixel in image

本文关键字:方向 图像 像素 获取      更新时间:2023-10-16

我是一名机器人工程师,我不是计算机视觉或视觉伺服的专家。这是我对摄像机的第一个经验之一。

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

设置为以下。我有一个带有分辨率1040x776的相机,我校准了。我的图像中有一些对象,我能够检测并关联到图像中的一个点。像素以 u,v (我猜)表示,因此这些点在 u 轴上的0和1040之间,在> v 轴。

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

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

我认为我已经在stackexchange上找到了答复,但是我不是100%确定我需要的是:OPENCV:计算相机和像素之间的角度

食谱:

1-校准摄像机,获得摄像机矩阵K和失真参数D。在OpenCV中,如本教程所述进行的。

2-从感兴趣的像素位置中删除非线性失真。在OpenCV中,使用UndistortPoints例程完成,而无需通过参数r和p。

3-通过在均匀坐标中乘以相机矩阵的均值时,将感兴趣的像素引入相机3D坐标中的射线(带尾部的单位向量(带尾部的单位向量))。

您怎么看?

事先感谢您的关注。

假设摄像机位于原点位于原点,并且正在向下看正z轴,图像平面是xy平面,xy平面为正x,右x右y,指向朝下,a的位置3D中的像素为:

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

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

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

然后,您可以通过除以长度以检索单位方向向量到像素。