Преобразование матрицы облаков точек 320x240x3 в карту глубины 320x240x1 - PullRequest
0 голосов
/ 20 марта 2020

Кто-нибудь может мне помочь со следующей проблемой, используя Python?

У меня есть матрица облака точек, полученная от виртуальной камеры, ее размер составляет 320x240x3, что указывает координаты x, y, z каждой точки ( точки в поле зрения камеры).

Все значения варьируются от отрицательных до положительных. Как я могу преобразовать эту матрицу облака точек в карту глубины 320x240x1, в которой хранится положительное значение глубины каждого пикселя? Заранее спасибо.

1 Ответ

0 голосов
/ 21 марта 2020

Ну, если бы вы знали, как преобразовать изображение глубины в карту точек (это ваша матрица облаков точек), я полагаю, вы знаете об обратном.

Учитывая связанные внутренние характеристики камеры , используя модель камеры-обскуры , мы можем восстановить карту точек, используя следующий python код:

import numpy as np  
from imageio import imread, imwrite


# read depth image in
img = imread('depth.png')  
img = np.asarray(img)

# camera intrinsics, for demonstration purposes only. change to your own.
fx, fy = 570.0, 570.0
cx, cy = 320, 240 

# suppose your depth image is scaled by a factor of 1000
z = img.astype(float) / 1000.0  

# convert depth image of shape to point map 
# here we assume depth image is of shape (480, 640)
px, py = np.meshgrid(np.arange(640), np.arange(480))  # pixel_x, pixel_y
px, py = px.astype(float), py.astype(float)
x = ((px - cx) / fx) * z 
y = ((py - cy) / fy) * z 
pmap = np.concatenate([i[..., np.newaxis] for i in (x, y, z)], axis=-1)

Теперь вернемся к ваш вопрос.

Предполагается, что ваша карта точек находится в системе координат камеры (вы не перевели или не повернули pmap), чтобы преобразовать карту точек в изображение глубины, которое мы сделаем :

# convert point map to depth image
# that is, we are only using the points' z coordinates values
depth = (pmap[:, :, 2] * 1000).astype(np.uint16)
# now we can save the depth image to disk
imwrite('output.png', depth)

Надеюсь, это поможет:)

...