如何将RGB深度图像转换为点云?

时间:2018-09-13 18:39:18

标签: python point-cloud-library

我对机器人映射有一个研究思路。基本上,最终目标是使用中等大小的单眼相机(价格为20-50美元)并创建3D占用网格图(有一个流行的用c ++编写的库称为Octomap)。为此,我向自己提出了以下步骤:

  1. 从视频中获取一个rgb图像,并使用卷积神经网络转换为深度图像。这部分完成了。

  2. 获取原始的rgb图像并创建深度图像,然后转换为点云。

  3. 获取点云并将其转换为3D占用栅格图。

因此,对于第2步,无论是对还是错,我都有些困惑。我已经采用了以下代码,这是一个开放源代码:

import argparse
import sys
import os
from PIL import Image

focalLength = 938.0
centerX = 319.5
centerY = 239.5
scalingFactor = 5000

def generate_pointcloud(rgb_file,depth_file,ply_file):

    rgb = Image.open(rgb_file)
    depth = Image.open(depth_file).convert('I')

    if rgb.size != depth.size:
        raise Exception("Color and depth image do not have the same 
resolution.")
    if rgb.mode != "RGB":
        raise Exception("Color image is not in RGB format")
    if depth.mode != "I":
        raise Exception("Depth image is not in intensity format")


    points = []    
    for v in range(rgb.size[1]):
        for u in range(rgb.size[0]):
            color = rgb.getpixel((u,v))
            Z = depth.getpixel((u,v)) / scalingFactor
            print(Z)
            if Z==0: continue
            X = (u - centerX) * Z / focalLength
            Y = (v - centerY) * Z / focalLength
            points.append("%f %f %f %d %d %d 0\n"% 

我认为points是实际上存储点云的列表,对吗?

所以我要问的大问题是,使用深度学习算法创建RGB图像和深度图像是否可以使用上面的代码转换为点云?

1 个答案:

答案 0 :(得分:0)

如果您能妥善处理 RGB 和深度图像比例,您会没事的。您的最终点云属性可能类似于 (x,y,z,r,g,b)