- 我有一个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