如何将点云投影到2D图像中(像Matlab scatter3d一样)?

时间:2019-01-28 07:09:55

标签: matlab computer-vision

我有一个Lidar传感器生成的点云。

我想将3D点云投影到2D图像上,就像我看着传感器的眼睛一样(例如,传感器位于坐标(0,0,0)上)

我想生成一个2D图像,看起来与Matlab生成的图形非常相似(见下文)。

我知道这个3D到2D投影位于针孔相机投影中。但是,我无法生成与Matlab相同的结果。 第二个问题-另外我不知道应该设置哪个焦距-因为点云中没有实际的焦距。

Here is the point cloud file

Here is matlab generated figure

这是我要生成的目标图像: 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);

0 个答案:

没有答案