点云生成(Point Cloud Generation)

2019-08-31 13:02发布

  • 我有一个3-d几何形状我必须转换成一个点云。
  • 将得到的点云可被认为等同于从所述对象物的激光扫描输出的点云。
  • 无网格生成neeeded
  • 所产生的点可以均匀地间隔,或者只是随机间隔 - 没关系
  • 3-d形状可以在3-d数学公式的形式来提供
  • 这必须使用MATLAB来完成

Answer 1:

这很难不一个例子来回答,但它听起来就像你只是想执行蒙特卡罗模拟的 ?

比方说您的形状由以下函数定义f并且已X,存储ÿ限制两个元件矢量例如XLIM = [-10 10]之间即X = -10,并且x = 10这种形状谎言的所有可能x值然后我会建议你做f返回某种错误代码,如果有特定XY对没有价值。 我会认为将是NaN 。 因此, f(x,y)是你写,要么返回功能z如果可以或NaN ,如果它不能

n= 10000;
counter  = 1;
shape = nan(n, 3)
while counter < n
   x = rand*diff(xlim) + mean(xlmin);
   y = rand*diff(ylim) + mean(ylim);
   z = f(x,y)
   if ~isnan(z)
      shape(counter, :) = [x, y, z];
      counter = counter + 1    
   end
end

所以上面的代码将产生10000(非唯一的,但是这很容易适用于)在你的造型加分随机抽样。

现在打字后,我意识到,也许你的形状,其实并不是所有的大,也许你可以品尝均匀它,而不是随机:

for x = xlim(1):xstep:xlim(2)
   for y = ylim(1):ystep:ylim(2)
       shape(counter, :) = [x, y, f(x,y)];
   end
end 

或者如果写f要矢量(优选)

shape = [(xlim(1):xstep:xlim(2))', (ylim(1):ystep:ylim(2))', f(xlim(1):xstep:xlim(2), ylim(1):ystep:ylim(2));

然后无论哪种方式

shape(isnan(shape(:, 3), :) = []; %remove the points that fell outside the shape


Answer 2:

下面是与来自PrimeSense的相机深度图像创建云图像的代码。

输入/该函数的输出继电器:

-inputs
 depth         -depth map
 topleft       -topleft coordinates of the segmented image in the whole image

-outputs
 pclouds       -3d point clouds

MATLAB代码:

depth = double(depth);
% Size of camera image
center = [320 240];
[imh, imw] = size(depth);
constant = 570.3;

% convert depth image to 3d point clouds
pclouds = zeros(imh,imw,3);
xgrid = ones(imh,1)*(1:imw) + (topleft(1)-1) - center(1);
ygrid = (1:imh)'*ones(1,imw) + (topleft(2)-1) - center(2);
pclouds(:,:,1) = xgrid.*depth/constant;
pclouds(:,:,2) = ygrid.*depth/constant;
pclouds(:,:,3) = depth;
distance = sqrt(sum(pclouds.^2,3));

编辑:这源来自该电流文章http://www.cs.washington.edu/rgbd-dataset/software.html

你可以在MATLAB和C ++一些其他的云功能,可以将你感兴趣的。



文章来源: Point Cloud Generation