答案 0 :(得分:4)
如果没有示例,很难回答,但听起来你只想表现montecarlo simulation?
让我们说你的形状是由函数f
定义的,你有X,Y限制存储在两个元素向量中,例如xlim = [-10 10]即这个形状的所有可能的x值都在x = -10和x = 10之间,那么如果没有值,我建议你让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
答案 1 :(得分:1)
以下是使用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 ++中找到一些您可能感兴趣的其他云功能。