MATLAB: 点群の高さデータによ​って、グリットシート​の1マスごとに色を付​ける方法がわかりませ​ん。2000*180​0のグリッドシートと​XYZ座標のある点群​データがあります。(​色を付ける際に、一マ​スに二点以上存在する​場合一番高い点を対象​としたいです。色の配​分は適当でかまいませ​ん。)添付した画像の​グリットシートは20​0*180です。

日本語点群データからdsm作成

clear;
load('sample.mat')
xsize=200
ysize=180
Xsize = xsize*10;
Ysize = ysize*10;
line = [1:Xsize];
code = [1:Ysize];
[X,Y] = meshgrid(line,code);
[X1,X2] = ndgrid(line,code);
figure()
[X1_ndgrid,X2_ndgrid] = ndgrid(1:Xsize,1:Ysize);
Z = zeros(Xsize,Ysize);
mesh(X1_ndgrid,X2_ndgrid,Z,'EdgeColor','black')
axis equal;
% Set the axis labeling and title
h1 = gca;
h1.XTick = [1:Xsize];
h1.YTick = [1:Ysize];
xlabel('ndgrid Output')
axis([1 200 1 180]);
hold on
pcshow(sample)
az=0
el=90
view(az,el);
end

Best Answer

下記の点を配慮して質問をいただけるとよりよい回答が得られる可能性があります。
  • 表題は簡潔かつ困っていることを明確に記載すること (例:点群をグリッドに当てはめる方法)
  • 具体的な内容は本文に書くこと(タイトルが長すぎると概要の理解を困難にします)
  • コメントで質問された内容についてYes or Noで簡潔かつ的確に回答すること(より的確な情報を提供し回答を促進します)
今後ご質問される場合には こちら を参照の上、ご投稿をお願いいたします。
別件の回答と同じなのか、違うのかはっきりしませんが、質問内容から推測した処理を下記に示します。
for ループを使わずに簡潔に書く方法もあると思います。
%%3次元点群データの生成
xyz = randn(1000,3);
x = xyz(:,1);
y = xyz(:,2);
z = abs(xyz(:,3)); % 分かりやすくするためにZ軸は正にする
%%点群の可視化
figure;
scatter3(x,y,z);
%%DSM画像生成
Xsize = 50;
Ysize = 50;
line = linspace(min(x(:)),max(x(:)),Xsize);
code = linspace(min(y(:)),max(y(:)),Ysize);
[X,Y] = meshgrid(line,code);
Z = zeros(Xsize,Ysize);
for k = 1:numel(line)-1
for l = 1:numel(code)-1
% ある範囲に入っている点群のインデックスを取り出す
index = line(k) <= x & x < line(k+1) & ...
code(l) <= y & y < code(l+1);
if ~all(index==0)
% 点群の中でZ軸の値が一番大きいものを代入する
Z(k,l) = max(z(index));
end
end
end
figure, imagesc(line,code,Z);
colorbar;
元の点群データ:
グリッド内の高さ(Z軸)の最大値をマッピングした画像: