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

7 views (last 30 days)
Taka
Taka on 15 Dec 2017
Edited: Taka on 20 Dec 2017
ある実験で示された地形を図としてプロットするために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];

Accepted Answer

Tohru Kikawada
Tohru Kikawada on 15 Dec 2017
pcshow ですと 'MarkerSize' オプションで指定したドットの大きさによって、画像としてみた場合にはぼやけてしまいます。
もともとの点群の投影平面上の位置情報(organizedとも呼ばれます)は残っていますでしょうか。Kinectやステレオカメラ、LiDARで取得したデータであれば投影平面上の位置情報が残っていると思います。その場合、深度方向(Z軸)のデータだけ取り出すことができれば imagesc できれいに表示ができると思います。
一方、投影平面上の位置情報が欠落している場合には点群をメッシュ状にして表示することになると思います。その場合は delaunay 関数などが使えるかもしれません。
元のデータがあればもう少し具体的な提案ができるかもしれません。 ご参考になれば幸いです。
  7 Comments
Tohru Kikawada
Tohru Kikawada on 18 Dec 2017
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 on 20 Dec 2017
Edited: Taka on 20 Dec 2017
質問に丁寧に対応していただき本当にありがとうございます!

Sign in to comment.

More Answers (0)

Products

Community Treasure Hunt

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

Start Hunting!