【问题标题】:Binning and averaging huge pointcloud in Matlab在 Matlab 中对巨大的点云进行分箱和平均
【发布时间】:2013-01-19 13:43:09
【问题描述】:

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

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

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 坐标标量,因为这是我想要在每个 bin 中平均的值。

谢谢!

【问题讨论】:

  • 可能与使用 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)

标签: matlab 3d binning


【解决方案1】:

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

%# 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);

【讨论】:

    【解决方案2】:

    解决了。每百万点需要 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;
    

    【讨论】:

      猜你喜欢
      • 2010-12-19
      • 1970-01-01
      • 2017-10-27
      • 2014-07-12
      • 2015-07-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多