У меня есть облако точек, сгенерированное датчиком Lidar .
Я бы хотел спроецировать облако 3D-точек на 2D-изображение, как если бы я смотрел глазами датчика (скажем, например, что датчик находится по координате (0,0,0))
Я бы хотел сгенерировать 2D-изображение, которое выглядит очень похоже на сгенерированный рисунок из Matlab (см. Ниже).
Я знаю, что эта 3D-2D-проекция лежит в контакте.проекционная камера.Однако я не смог получить те же результаты, что и Matlab.2-й вопрос - кроме того, я не знаю, какое фокусное расстояние я должен установить - потому что в облаке точек нет действительного фокусного расстояния.
Вот файл облака точек .
Вот рисунок, сгенерированный Matlab
Это изображение назначения, которое я хотел бы сгенерировать: ![enter image description here](https://i.stack.imgur.com/dyd5B.jpg)
Вот то, что яполучить: ![enter image description here](https://i.stack.imgur.com/TWOO6.jpg)
Вот мой код 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);