Как преобразовать изображение глубины rgb в облако точек?

У меня есть исследовательская идея для построения карт роботов. По сути, конечная цель - использовать умеренную монокулярную камеру (за 20-50 долларов) и создать трехмерную сеточную карту присутствия (существует популярная библиотека Octomap, написанная на C++). Для этого я предложил себе следующие шаги:

  1. Возьмите изображение rgb (из видео) и преобразуйте его в изображение глубины с помощью сверточной нейронной сети. Эта часть сделана.

  2. Возьмите исходное изображение rgb и созданное изображение глубины и преобразуйте его в облако точек.

  3. Возьмите облако точек и преобразуйте его в трехмерную сеточную карту присутствия.

Итак, что касается шага 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 и изображение глубины, созданное с использованием алгоритма глубокого обучения, можно ли преобразовать в облако точек с помощью приведенного выше кода?

Я думаю, у вас все будет в порядке, если вы знаете коэффициент масштабирования и фокусное расстояние.

Abyl Ikhsanov 13.09.2018 20:40
3
1
2 422
1

Ответы 1

Если вы правильно позаботитесь о шкале изображений RGB и глубины, все будет в порядке. Ваши окончательные атрибуты облака точек могут быть такими, как (x,y,z,r,g,b).

Другие вопросы по теме