点群の高さデータによって、グリットシートの1マスごとに色を付ける方法がわかりません。2000*1800のグリッドシートとXYZ座標のある点群データがあります。(色を付ける際に、一マスに二点以上存在する場合一番高い点を対象としたいです。色の配分は適当でかまいません。)添付した画像のグリットシートは200*180です。
1 view (last 30 days)
Show older comments
tetunari sogabe
on 16 Jan 2017
Commented: tetunari sogabe
on 20 Jan 2017

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
Accepted Answer
Tohru Kikawada
on 20 Jan 2017
下記の点を配慮して質問をいただけるとよりよい回答が得られる可能性があります。
- 表題は簡潔かつ困っていることを明確に記載すること (例:点群をグリッドに当てはめる方法)
- 具体的な内容は本文に書くこと(タイトルが長すぎると概要の理解を困難にします)
- コメントで質問された内容について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軸)の最大値をマッピングした画像:

More Answers (0)
See Also
Categories
Find more on Introduction to Installation and Licensing in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!