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

Last change on this file since 12194 was 12168, checked in by cborstad, 13 years ago

merged trunk-jpl into branch through revision 12167

File size: 4.7 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, h_data(:)=0; end
83 %saturation (S)
84 s_data=max(min((0.1+h_data).^(1/transparency),1),0);
85elseif strcmpi(colorm,'Seroussi'),
86 %hue (H)
87 h_data=1-(data_grid-data_min)/(data_max-data_min+eps)*0.7;
88 %h_data=(data_grid-data_min)/(data_max-data_min)*2/3;
89 if radaronly, h_data(:)=0; end
90 %saturation (S)
91 s_data=max(min((0.1+h_data).^(1/transparency),1),0);
92elseif strcmpi(colorm,'redblue')
93 data_mean=data_min+(data_max-data_min)/2;
94 %hue (H)
95 %h_data=0.7*ones(size(data_grid));
96 %h_data(find(data_grid>data_mean))=1;
97 h_data=1*ones(size(data_grid));
98 h_data(find(data_grid<data_mean))=0.7;
99 %saturation (S)
100 s_data=max(min(abs(data_grid-data_mean)/(data_max-data_mean) ,1),0);
101else
102 error('colormap not supported yet. (''Rignot'' and ''redblue'' are the only cupported colormaps)');
103end
104
105%Saturation is 0 in NaNs
106s_data(data_nan)=0;
107%intensity (V)
108radar=(md.radaroverlay.pwr).^(contrast);
109v_data=radar/max(radar(:)); %use radar power as intensity
110
111%Change background from black to white
112%pos=find(v_data==0);v_data(pos)=1;
113
114%Transform HSV to RGB
115image_hsv=zeros(size(data_grid,1),size(data_grid,2),3);
116image_hsv(:,:,1)=h_data;
117image_hsv(:,:,2)=s_data;
118image_hsv(:,:,3)=v_data;
119image_rgb=hsv2rgb(image_hsv);
120
121%Select plot area
122subplot(plotlines,plotcols,i);
123
124%Plot:
125imagesc(md.radaroverlay.x*getfieldvalue(options,'unit',1),md.radaroverlay.y*getfieldvalue(options,'unit',1),image_rgb);set(gca,'YDir','normal');
126
127%last step: mesh overlay?
128if exist(options,'edgecolor'),
129 hold on
130 A=elements(:,1); B=elements(:,2); C=elements(:,3);
131 patch('Faces',[A B C],'Vertices', [x y z],'FaceVertexCData',zeros(size(x)),'FaceColor','none',...
132 'EdgeColor',getfieldvalue(options,'edgecolor'),'LineWidth',getfieldvalue(options,'linewidth',1));
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.