Matlab中大型点云的分块与平均

Matlab中大型点云的分块与平均,matlab,3d,binning,Matlab,3d,Binning,我有一个巨大的3D点云[3x40e6]。这是一个平面的点云,所以在这个意义上更像是2.5D。我想把点云放在一个固定的网格范围内,这样我就可以把它放在一个2D矩阵中,并用imagesc(mymap)查看它 我确实解决了这个问题,但时间太长了。这就是我目前得到的。工作正常,但需要10分钟。它插入了所有类型的摇摆,我不需要 xlin=linspace(min(xx),max(xx),meshsz*dxxyy); ylin=linspace(min(yy),max(yy),meshsz); [X,Y]=

我有一个巨大的3D点云[3x40e6]。这是一个平面的点云,所以在这个意义上更像是2.5D。我想把点云放在一个固定的网格范围内,这样我就可以把它放在一个2D矩阵中,并用imagesc(mymap)查看它

我确实解决了这个问题,但时间太长了。这就是我目前得到的。工作正常,但需要10分钟。它插入了所有类型的摇摆,我不需要

xlin=linspace(min(xx),max(xx),meshsz*dxxyy);
ylin=linspace(min(yy),max(yy),meshsz);
[X,Y]=meshgrid(xlin,ylin);
disp('+ Flattening (X,Y,Z) information into 2D (X,Y)(Z) mesh..')
%Fit to 2D grid (takes a long time)
Z=griddata(xx,yy,zz,X,Y);%,'cubic');
我真正想做的是将[3xN]向量中的所有数据存储到特定的2D范围图中。我想我必须把所有的值都放到地图中(有一些优秀的快速装箱算法),但是我还需要在地图中有特定的Z坐标标量,因为这是我想要在每个箱子中平均的


谢谢

已解决。每百万点需要200毫秒

yidx=[min(yy):dy:max(yy)];
xidx=[min(xx):dx:max(xx)];
ZmapSum=zeros(length(yidx),length(xidx));
ZmapIdx=zeros(size(ZmapSum));

[nx,binx] = histc(xx,xidx);
[ny,biny] = histc(yy,yidx);
%bin==0 means the value is out of range
binx=binx+1; biny=biny+1;
%binzero=( (binx==0) | (biny==0) );
%binx(binzero) = [];
%biny(binzero) = [];
%xx(binzero) = [];
%yy(binzero) = [];
%zz(binzero) = [];

%binx and biny give their respective bin locations
for i=1:1:length(xx)
    ZmapSum(biny(i),binx(i))=ZmapSum(biny(i),binx(i))+zz(i);
    ZmapIdx(biny(i),binx(i))=ZmapIdx(biny(i),binx(i))+1;
end

Zmap=ZmapSum./ZmapIdx;

以下是一步到位的方法
accumarray
允许您轻松交换用于组合数据的功能,以便您可以使用例如
std
查看局部变化,或
numel
查看每个箱子中的计数

%# transform your x,y coordinates to pixel (=bin) values
minX = min(xx);
maxX = max(xx);
minY = min(yy);
maxY = max(yy);

targetSize = [512 512];

xxBin = round( (xx-minX)/(maxX-minX)*(targetSize(1)-1) ) +1;
yyBin = round( (yy-minY)/(maxY-minY)*(targetSize(2)-1) ) +1;

%# map by using accumarray, take the mean of each bin 
map = accumarray([xxBin(:),yyBin(:)],zz,targetSize,@mean,0);

可能是使用bin变量的命令“[n,bin]=histc(…)”.yidx=[min(y):dy:max(y)];xidx=[min(x):dx:max(x)];[nx,binx]=histc(x,xidx)[ny,biny]=histc(y,yidx)