2

私は巨大な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座標スカラーも必要です。

ありがとう!

4

2 に答える 2

2

これが1つのステップでそれを行う方法です。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);
于 2013-01-19T18:30:48.407 に答える
0

解決しました。100万ポイントあたり200msかかります。

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;
于 2013-01-19T15:32:35.947 に答える