source: issm/branches/trunk-jpl-damage/src/m/model/plot/plot_overlay.m@ 11503

Last change on this file since 11503 was 11179, checked in by Mathieu Morlighem, 13 years ago

deal with inf in vector (overlay) and added plot none for radar image only

File size: 4.6 KB
Line 
1function plot_overlay(md,data,options,plotlines,plotcols,i)
2%PLOT_OVERLAY - superimpose radar image to a given field
3%
4% Usage:
5% plot_overlay(md,options,plotlines,plotcols,i)
6%
7% See also: PLOTMODEL
8
9%process mesh and data
10[x y z elements is2d isplanet]=processmesh(md,[],options);
11if strcmpi(data,'none'),
12 radaronly=1;
13 data=NaN*ones(md.mesh.numberofvertices,1);
14 datatype=1;
15else
16 radaronly=0;
17 [data datatype]=processdata(md,data,options);
18end
19
20%check is2d
21if ~is2d,
22 error('buildoverlay error message: overlay not supported for 3d meshes, project on a layer');
23end
24if datatype==3,
25 error('buildoverlay error message: overlay not supported for quiver plots');
26end
27
28
29%radar power
30if ~any(isnan(md.radaroverlay.x)) & ~any(isnan(md.radaroverlay.y)) & ~any(isnan(md.radaroverlay.pwr)),
31 disp('plot_overlay info: the radar image held by the model is being used');
32 xlim=[min(md.radaroverlay.x) max(md.radaroverlay.x)];
33 ylim=[min(md.radaroverlay.y) max(md.radaroverlay.y)];
34else
35 disp('Extracting radar image...');
36 %Get xlim and ylim (used to extract radar image)
37 xlim=getfieldvalue(options,'xlim',[min(x) max(x)])/getfieldvalue(options,'unit',1);
38 ylim=getfieldvalue(options,'ylim',[min(y) max(y)])/getfieldvalue(options,'unit',1);
39 options=addfielddefault(options,'xlim',xlim);
40 options=addfielddefault(options,'ylim',ylim);
41 md=radarpower(md,options);
42end
43
44%InterpFromMeshToGrid
45xmin=min(md.radaroverlay.x);
46ymax=max(md.radaroverlay.y);
47xspacing=(max(md.radaroverlay.x)-min(md.radaroverlay.x))/(length(md.radaroverlay.x));
48yspacing=(max(md.radaroverlay.y)-min(md.radaroverlay.y))/(length(md.radaroverlay.y));
49nlines=length(md.radaroverlay.y);
50ncols =length(md.radaroverlay.x);
51disp('Interpolating data on grid...');
52[x_m y_m data_grid]=InterpFromMeshToGrid(elements,x/getfieldvalue(options,'unit',1),y/getfieldvalue(options,'unit',1),...
53 data,xmin,ymax,xspacing,yspacing,nlines,ncols,NaN);
54
55%Process data_grid
56pos=find(isinf(data_grid));
57if ~isempty(pos),
58 disp('Warning: removing Infs from vector (probably log(0)?)');
59 data_grid(pos)=NaN;
60end
61if exist(options,'caxis'),
62 caxis_opt=getfieldvalue(options,'caxis');
63 data_grid(find(data_grid<caxis_opt(1)))=caxis_opt(1);
64 data_grid(find(data_grid>caxis_opt(2)))=caxis_opt(2);
65 data_min=caxis_opt(1);
66 data_max=caxis_opt(2);
67else
68 data_min=min(data_grid(:));
69 data_max=max(data_grid(:));
70end
71data_nan=find(isnan(data_grid));
72
73%Generate HSV image
74contrast=getfieldvalue(options,'contrast',1);
75transparency=getfieldvalue(options,'alpha',1);
76data_grid(data_nan)=data_min;
77
78colorm=getfieldvalue(options,'colormap','Rignot');
79if strcmpi(colorm,'Rignot'),
80 %hue (H)
81 h_data=(data_grid-data_min)/(data_max-data_min+eps);
82 if radaronly,
83 h_data(:)=0;
84 end
85 %saturation (S)
86 s_data=max(min((0.1+h_data).^(1/transparency),1),0);
87elseif strcmpi(colorm,'Seroussi'),
88 %hue (H)
89 h_data=1-(data_grid-data_min)/(data_max-data_min+eps)*0.7;
90 %h_data=(data_grid-data_min)/(data_max-data_min)*2/3;
91 if radaronly,
92 h_data(:)=0;
93 end
94 %saturation (S)
95 s_data=max(min((0.1+h_data).^(1/transparency),1),0);
96elseif strcmpi(colorm,'redblue')
97 data_mean=data_min+(data_max-data_min)/2;
98 %hue (H)
99 %h_data=0.7*ones(size(data_grid));
100 %h_data(find(data_grid>data_mean))=1;
101 h_data=1*ones(size(data_grid));
102 h_data(find(data_grid>data_mean))=0.7;
103 %saturation (S)
104 s_data=max(min(abs(data_grid-data_mean)/(data_max-data_mean) ,1),0);
105else
106 error('colormap not supported yet. (''Rignot'' and ''redblue'' are the only cupported colormaps)');
107end
108
109%Saturation is 0 in NaNs
110s_data(data_nan)=0;
111%intensity (V)
112radar=(md.radaroverlay.pwr).^(contrast);
113v_data=radar/max(radar(:)); %use radar power as intensity
114
115%Transform HSV to RGB
116image_hsv=zeros(size(data_grid,1),size(data_grid,2),3);
117image_hsv(:,:,1)=h_data;
118image_hsv(:,:,2)=s_data;
119image_hsv(:,:,3)=v_data;
120image_rgb=hsv2rgb(image_hsv);
121
122%Select plot area
123subplot(plotlines,plotcols,i);
124
125%Plot:
126imagesc(md.radaroverlay.x*getfieldvalue(options,'unit',1),md.radaroverlay.y*getfieldvalue(options,'unit',1),image_rgb);set(gca,'YDir','normal');
127
128%last step: mesh overlay?
129if exist(options,'edgecolor'),
130 hold on
131 A=elements(:,1); B=elements(:,2); C=elements(:,3);
132 patch('Faces',[A B C],'Vertices', [x y z],'FaceVertexCData',zeros(size(x)),'FaceColor','none','EdgeColor',getfieldvalue(options,'edgecolor'));
133end
134
135%Apply options, without colorbar and without grid
136options=changefieldvalue(options,'colormap',colorm); %We used an HSV colorbar
137if ~isnan(data_min),
138 options=changefieldvalue(options,'caxis',[data_min data_max]); %force caxis so that the colorbar is ready
139end
140options=addfielddefault(options,'axis','equal off'); %default axis
141applyoptions(md,data,options);
Note: See TracBrowser for help on using the repository browser.