Computer vision 如何从rgb创建点云&;深度图像?

Computer vision 如何从rgb创建点云&;深度图像?,computer-vision,Computer Vision,对于我目前正在进行的一个大学项目,我必须通过从数据集中读取图像来创建点云。这些基本上都是视频帧,每一帧都有一个rgb图像以及相应的深度图像 我熟悉方程式z=f*b/d,但是我无法理解数据应该如何解释。未提供用于拍摄视频的摄像机的相关信息,项目还声明如下: “考虑摄像机48.6/62的水平/垂直视野 学位分别为“ 我在计算机视觉方面几乎没有经验,而且我以前从未遇到过使用两个视场。假设我按原样使用图像的深度(对于z坐标),我将如何计算点云中每个点的x和y坐标 以下是数据集外观的示例: 是的,指定多

对于我目前正在进行的一个大学项目,我必须通过从数据集中读取图像来创建点云。这些基本上都是视频帧,每一帧都有一个rgb图像以及相应的深度图像

我熟悉方程式
z=f*b/d
,但是我无法理解数据应该如何解释。未提供用于拍摄视频的摄像机的相关信息,项目还声明如下:

“考虑摄像机48.6/62的水平/垂直视野 学位分别为“

我在计算机视觉方面几乎没有经验,而且我以前从未遇到过使用两个视场。假设我按原样使用图像的深度(对于z坐标),我将如何计算点云中每个点的x和y坐标

以下是数据集外观的示例:


是的,指定多个视野是不常见的。给定一个典型的相机(方形像素、最小失真、通过图像中心的视图向量),通常只给出一个视场角度——水平或垂直,因为另一个视场角度可以从图像纵横比中导出

这里指定水平角为48.6,垂直角为62特别令人惊讶,因为图像是一个横向视图,我希望水平角大于垂直角。我很确定这是个打字错误: 交换时,比率
tan(62*pi/360)/tan(48.6*pi/360)
是在给定图像尺寸和平方像素的情况下所期望的
640/480
纵横比

无论如何,水平角度
t
基本上是指图像的水平范围,从左边缘到右边缘,覆盖了视野的
t
弧度弧,因此右边缘中心的像素位于从中心视图光线向右旋转
t/2
弧度的光线上。这条“右手”射线从原点的眼睛穿过点
(tan(t/2),0,-1)
(假设一个右手空间,正x指向右侧,正y指向上方,向下看负z轴)。要在距离眼睛
d
的空间中获取点,您只需沿该光线标准化一个向量,并将其乘以
d
。假设样本在平面传感器上呈线性分布,我希望对于
(x,y)
处的给定像素,可以使用以下公式计算其对应的光线点:

    p = (dx * tan(hfov / 2), dy * tan(vfov / 2), -1)
其中,
dx
2*(x-宽度/2)/width
dy
2*(y-高度/2)/height
hfov
vfov
是以弧度表示的视场角度

请注意,示例数据链接附带的显示了将深度图像转换为点云和距离场的建议过程的。其中,视野与图像尺寸烘焙到570.3的恒定因子,可用于恢复作者认为其记录设备具有的视野角度:

    atan(320 / 570.3) * (360 / pi / 2) * 2 = 58.6
这确实非常接近你得到的62度


根据Matlab代码,图像中的值似乎不是从给定点到眼睛的距离,而是沿着视图向量到包含给定点的垂直平面的距离(“深度”,或基本上是“z”),因此作者可以直接将其与向量相乘(dx*tan(hfov/2),dy*tan(vfov/2),-1)要获取空间中的点,跳过前面提到的规范化步骤。

谢谢!是的,这确实是一个打字错误,很好地解决了它。我有matlab代码,但我不想使用它,因为我无法理解它。现在我对它更满意了:)