pcshowを用いて​図を示しています.し​かし,綺麗に図が表示​されないため他に地形​を表示することが可能​でありそうな構文,又​は色合いの工夫などは​ありますでしょうか?

5 次查看(过去 30 天)
Taka
Taka 2017-12-15
编辑: Taka 2017-12-20
ある実験で示された地形を図としてプロットするために2mm間隔で座標点群を抽出しマットラボ上でプロット図として起こしました.地形の写真上の赤色で囲んだ部分をpcshowを用いて図で綺麗に出したいのですが,どうしてもぼやけてしまい上手く地形が綺麗に出てきません.
カラーマップエディターでカラーのMAXとMINの値を変えてみたり,単色の場合だったらマーカの色をより細かく刻んで設定してみたりしたのですがなかなか綺麗に表示ができません.
今はpcshowを用いて図を示しています.色は単色(出来ればグレー)かjetで図を示したいのですが,他にこのような地形を表示することが可能でありそうな構文,又は色合いの工夫などはありますでしょうか?
clear all
close all
filename ='case1 6h 2mm①-④.txt'
delimiterIn = ',';
headerlinesIn = 3;
A = importdata( filename, delimiterIn, headerlinesIn );
figure;
pcshow([A.data(:,1), A.data(:,2), A.data(:,3)]);
colormap gray;
ay = -0.00099;
el = 90.00099;
view(ay, el);
grid on;
% colormap('Direction','reverse')
%colorbar('Fontsize',12,'Direction','reverse')
xlabel('\sl Longshore Distance (m)');
ax.XAxisLocation='bottom';
xticks([0.0525 0.5 1 1.5 2 2.5 3 3.5 4 4.5 4.94750])
xticklabels({'0','0.5','1','1.5','2','2.5','3','3.5','4','4.5','5'})
ylabel('\sl Crossshore Distance (m)');
ax.YAxisLocation = 'right'
yticks([0.00250 0.5 1 1.5 2 2.5 2.9975])
yticklabels({'0','0.5','1','1.5','2','2.5','3'})
%set(gca,'YDir','reverse')
c = colorbar;
c.Label.String = '\sl water depth(m)';
c.Limits = [-0.1 0.1];

采纳的回答

Tohru Kikawada
Tohru Kikawada 2017-12-15
pcshow ですと 'MarkerSize' オプションで指定したドットの大きさによって、画像としてみた場合にはぼやけてしまいます。
もともとの点群の投影平面上の位置情報(organizedとも呼ばれます)は残っていますでしょうか。Kinectやステレオカメラ、LiDARで取得したデータであれば投影平面上の位置情報が残っていると思います。その場合、深度方向(Z軸)のデータだけ取り出すことができれば imagesc できれいに表示ができると思います。
一方、投影平面上の位置情報が欠落している場合には点群をメッシュ状にして表示することになると思います。その場合は delaunay 関数などが使えるかもしれません。
元のデータがあればもう少し具体的な提案ができるかもしれません。 ご参考になれば幸いです。
  7 个评论
Tohru Kikawada
Tohru Kikawada 2017-12-18
surf のオプションに色情報を渡すことで、色付けすることができますよ。また、 light オブジェクトで光源の位置や種類を設定できます。
clear all
close all
filename ='case1 6h 2mm①-④.txt'
if ~exist(filename,'file')
websave(filename,'https://jp.mathworks.com/matlabcentral/answers/uploaded_files/98621/case1%206h%20sample.txt');
end
delimiterIn = ',';
headerlinesIn = 3;
A = importdata( filename, delimiterIn, headerlinesIn );
figure;
pcshow([A.data(:,1), A.data(:,2), A.data(:,3)]);
colormap gray;
ay = -0.00099;
el = 90.00099;
view(ay, el);
grid on;
ax = gca;
% colormap('Direction','reverse')
%colorbar('Fontsize',12,'Direction','reverse')
xlabel('\sl Longshore Distance (m)');
ax.XAxisLocation='bottom';
xticks([0.0525 0.5 1 1.5 2 2.5 3 3.5 4 4.5 4.94750])
xticklabels({'0','0.5','1','1.5','2','2.5','3','3.5','4','4.5','5'})
ylabel('\sl Crossshore Distance (m)');
ax.YAxisLocation = 'right'
yticks([0.00250 0.5 1 1.5 2 2.5 2.9975])
yticklabels({'0','0.5','1','1.5','2','2.5','3'})
%set(gca,'YDir','reverse')
c = colorbar;
c.Label.String = '\sl water depth(m)';
c.Limits = [-0.1 0.1];
%%Point cloud to grid data
% Create labels
x = A.data(:,1);
y = A.data(:,2);
v = A.data(:,3);
xqlabel = linspace(min(x(:)),max(x(:)),1000);
yqlabel = linspace(min(y(:)),max(y(:)),1000);
[xq,yq] = meshgrid(xqlabel,yqlabel);
% Point cloud to grid
vq = griddata(x,y,v,xq,yq,'natural');
%%Image visualization
figure;
imagesc(xqlabel,yqlabel,vq);
ax = gca;
xlabel('\sl Longshore Distance (m)');
ax.XAxisLocation='bottom';
xticks([0.0525 0.5 1 1.5 2 2.5 3 3.5 4 4.5 4.94750])
xticklabels({'0','0.5','1','1.5','2','2.5','3','3.5','4','4.5','5'})
ylabel('\sl Crossshore Distance (m)');
ax.YAxisLocation = 'right';
yticks([0.00250 0.5 1 1.5 2 2.5 2.9975])
yticklabels({'0','0.5','1','1.5','2','2.5','3'})
colormap gray;
axis image;
c = colorbar;
c.Label.String = '\sl water depth(m)';
c.Limits = [-0.1 0.1];
%%Mesh visualization
% Generate colormap along with the crossshore axis
colors = repmat(permute(jet(numel(xqlabel)),[1 3 2]),[1 numel(yqlabel) 1]);
figure1 = figure;
axes1 = axes('Parent',figure1);
hold(axes1,'on');
surf(xq,yq,vq,colors,'Parent',axes1,...
'EdgeColor','none',...
'FaceLighting','gouraud');
% Create a light
light('Parent',axes1,'Position',[1 -6.12323399573677e-17 1]);
% Create ylabel
ylabel('\sl Crossshore Distance (m)');
% Create xlabel
xlabel('\sl Longshore Distance (m)');
grid(axes1,'on');
axis(axes1,'tight');
% Configure the rest of the parameters
set(axes1,'CameraPosition',...
[-21.8298827263687 0.583298749520218 1.76864432604658],'CameraUpVector',...
[0.069435328776402 0.00668586171916293 0.997564050259824],'CameraViewAngle',...
1.45621839490614,'DataAspectRatio',[1 1 1],'PlotBoxAspectRatio',...
[100.198662635289 2.9867302459682 1],'XTick',...
[0.0525 0.5 1 1.5 2 2.5 3 3.5 4 4.5 4.9475],'XTickLabel',...
{'0','0.5','1','1.5','2','2.5','3','3.5','4','4.5','5'},'YAxisLocation',...
'right','YTick',[0.0025 0.5 1 1.5 2 2.5 2.9975],'YTickLabel',...
{'0','0.5','1','1.5','2','2.5','3'});
Taka
Taka 2017-12-20
编辑:Taka 2017-12-20
質問に丁寧に対応していただき本当にありがとうございます!

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 LIDAR および点群の処理 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!