Как спроецировать облако точек в 2D-изображение (как это делает Matlab scatter3d)? - PullRequest
0 голосов
/ 28 января 2019

У меня есть облако точек, сгенерированное датчиком Lidar .

Я бы хотел спроецировать облако 3D-точек на 2D-изображение, как если бы я смотрел глазами датчика (скажем, например, что датчик находится по координате (0,0,0))

Я бы хотел сгенерировать 2D-изображение, которое выглядит очень похоже на сгенерированный рисунок из Matlab (см. Ниже).

Я знаю, что эта 3D-2D-проекция лежит в контакте.проекционная камера.Однако я не смог получить те же результаты, что и Matlab.2-й вопрос - кроме того, я не знаю, какое фокусное расстояние я должен установить - потому что в облаке точек нет действительного фокусного расстояния.

Вот файл облака точек .

Вот рисунок, сгенерированный Matlab

Это изображение назначения, которое я хотел бы сгенерировать: enter image description here

Вот то, что яполучить: enter image description here

Вот мой код Matlab

path = fullfile(pwd, 'carPointCloud.txt');

data = importdata(path);
data(:,1:3) = data(:,1:3) - min(data(:,1:3)) + 1;
figure(5), scatter3(data(:,1),data(:,2),data(:,3),ones(1, size(data,1)), 
ones(size(data,1),1)); hold on;

resPixelToMeter = 100 / 1; 
focalPixels = 1;
imgWidth = 850;
imgHeight = imgWidth;
u = resPixelToMeter * focalPixels * (data(:,1) ./ data(:,3)) + imgWidth /2;
v = resPixelToMeter * focalPixels * (data(:,2) ./ data(:,3)) + imgHeight /2;

%figure(1), hist(u);
%figure(2), hist(v);

outOfImgRoi = u>imgWidth | v>imgHeight;
u(outOfImgRoi) = [];
v(outOfImgRoi) = [];

u = round(u);
v = round(v);

imgDim = [imgHeight, imgWidth];
indexes = sub2ind(imgDim, v, u);
img = zeros(imgHeight, imgWidth);

img(indexes) = 1;
figure(3), imshow(img);
...