【问题标题】:Get bearing vector (direction) from pixel in image从图像中的像素获取方位矢量(方向)
【发布时间】:2019-09-15 23:22:02
【问题描述】:

我是一名机器人工程师,不是计算机视觉或视觉伺服方面的专家。这是我第一次使用相机的经历。

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

设置如下。我有一台经过校准的分辨率为 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 坐标中的射线(尾部位于相机中心的单位向量)中。

你怎么看?

提前感谢您的关注。

【问题讨论】:

  • 两年过去了,您最终找到解决方案了吗?

标签: c++ opencv camera direction


【解决方案1】:

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

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

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

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

然后,您可以通过除以长度来归一化该向量,以检索到像素的单位方向向量。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 2011-05-08
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    相关资源
    最近更新 更多