Changeset 160 for aedes_export_gui.m


Ignore:
Timestamp:
Mar 8, 2011, 2:29:01 PM (8 years ago)
Author:
tjniskan
Message:
  • Detached the code for creating mosaic images from aedes_export_gui.m to aedes_createmosaic.m

A aedes_createmosaic.m
M aedes_export_gui.m
M aedes_revision.m

File:
1 edited

Legend:

Unmodified
Added
Removed
  • aedes_export_gui.m

    r155 r160  
    469469  if ~isempty(ROI)
    470470    Dat.RoiLabels = {ROI(:).label};
    471     set(H.ROI_LBOX,'string',Dat.RoiLabels)
     471    set(H.ROI_LBOX,'string',Dat.RoiLabels,...
     472                        'enable','on','value',[1:length(ROI)])
     473                set(H.DRAW_ROIS,'value',1)
    472474  end
    473475  tmp=get(H.DRAW_ROIS,'position');
     
    477479                              'style','checkbox',...
    478480                              'string','Draw Slice Nbr.',...
    479                               'value',1,...
     481                              'value',0,...
    480482                                                          'backgroundcolor',GD.col.frame);
    481483  tmp=get(H.DRAW_SLICENBR,'position');
     
    485487                              'style','checkbox',...
    486488                              'string','Draw File Name',...
    487                               'value',1,...
     489                              'value',0,...
    488490                                                          'backgroundcolor',GD.col.frame);
    489491  tmp=get(H.DRAW_FILENAME,'position');
     
    504506                                                          'backgroundcolor',GD.col.frame);
    505507  if isempty(overlay)
    506         set(H.DRAW_OVERLAY,'enable','off')
     508                set(H.DRAW_OVERLAY,'enable','off')
     509        else
     510                set(H.DRAW_OVERLAY,'value',1)
    507511  end
    508512  tmp=get(H.OPTIONS_UIPANEL,'position');
     
    975979if createMosaic
    976980 
     981        %% Show wait dialog
     982        [wait_h,txh]=aedes_calc_wait('Creating mosaic from slices...');
     983       
    977984  % Estimate space for the mosaic
    978985  cols=str2num(get(H.COLS_EDIT,'string'));
    979986  rows=str2num(get(H.ROWS_EDIT,'string'));
    980   if Dat.isDataMixed
    981     data_sz=size(DATA{Dat.SliceInd(1)}.FTDATA);
    982   else
    983     if sliceDir==1
    984       data_sz=size(DATA{1}.FTDATA(:,:,Dat.SliceInd(1),Dat.currentVol));
    985     elseif sliceDir==2
    986       data_sz=size(squeeze(DATA{1}.FTDATA(:,Dat.SliceInd(1),:,Dat.currentVol)));
    987     else
    988       data_sz=size(squeeze(DATA{1}.FTDATA(Dat.SliceInd(1),:,:,Dat.currentVol)));
    989     end
    990   end
    991  
    992   % Determine figure size
    993   scrsz = get(0,'screensize'); % Get current display resolution
    994   scrsz(4) = scrsz(4)-45-70; % The 47px is for taskbar,
    995   scrsz(3) = scrsz(3)-16;
    996   gap=3;
    997   fig_w = cols*data_sz(2)+(cols+1)*gap;
    998   fig_h = rows*data_sz(1)+(rows+1)*gap;
    999  
    1000   if fig_w>scrsz(3) || fig_h>scrsz(4)
    1001    
    1002     aratio_w=[fig_w fig_h]./fig_w;
    1003     aratio_h=[fig_w fig_h]./fig_h;
    1004     for ii=1:2
    1005       if fig_w>scrsz(3)
    1006         tmp=aratio_w*scrsz(3);
    1007         fig_w = tmp(1);
    1008         fig_h = tmp(2);
    1009       elseif fig_h>scrsz(4)
    1010         tmp=aratio_h*scrsz(4);
    1011         fig_w = tmp(1);
    1012         fig_h = tmp(2);
    1013       end
    1014     end
    1015   end
    1016  
    1017   %% Determine paper orientation
    1018   if fig_w>fig_h
    1019     paperorient = 'landscape';
    1020    
    1021     %% Determine paperposition
    1022     papersize = [29.7 21.0];
    1023     tmp=[fig_w,fig_h]./fig_h;
    1024     pap_h = tmp(2)*(papersize(2)-2);
    1025     pap_w = tmp(1)*(papersize(2)-2);
    1026     if pap_w>(papersize(1)-2)
    1027       pap_h=((papersize(1)-2)/pap_w)*pap_h;
    1028       pap_w = papersize(1)-2;
    1029     end
    1030     paperpos = [papersize(1)/2-pap_w/2 ...
    1031                 papersize(2)/2-pap_h/2 ...
    1032                 pap_w ...
    1033                 pap_h];
    1034   else
    1035     paperorient = 'portrait';
    1036 
    1037     %% Determine paperposition
    1038     papersize = [21.0 29.7];
    1039     tmp=[fig_w,fig_h]./fig_w;
    1040     pap_h = tmp(2)*(papersize(1)-2);
    1041     pap_w = tmp(1)*(papersize(1)-2);
    1042     if pap_h>(papersize(2)-2)
    1043       pap_w=((papersize(2)-2)/pap_h)*pap_w;
    1044       pap_h = papersize(2)-2;
    1045     end
    1046     paperpos = [papersize(1)/2-pap_w/2 ...
    1047                 papersize(2)/2-pap_h/2 ...
    1048                 pap_w ...
    1049                 pap_h];
    1050   end
    1051  
    1052  
    1053   %% Show wait dialog
    1054   [wait_h,txh]=aedes_calc_wait('Creating mosaic from slices...');
    1055  
    1056   % Draw the mosaic figure
    1057   fh = figure('position',[scrsz(3)/2-fig_w/2+4 ...
    1058                       scrsz(4)/2-fig_h/2+45 fig_w fig_h],...
    1059               'visible','on',...
    1060               'inverthardcopy','off',...
    1061               'renderer','opengl',...%'painters',...
    1062               'numbertitle','off',...
    1063               'name','Mosaic View',...
    1064               'colormap',colmap,...
    1065               'color','w',...
    1066               'papertype','a4',...
    1067               'paperpositionmode','manual',...
    1068               'paperorientation',paperorient,...
    1069               'paperunits','centimeters',...
    1070               'paperposition',paperpos);
    1071   set(fh,'paperunits','inches')
    1072   if ( roiTransp==0 | not(drawRois)) && not(drawOverlay)
    1073         set(fh,'renderer','painters');
    1074   end
    1075  
    1076   % Set resolution information in the figure
    1077   if ispref('Aedes','ExportMosaicImageResolution')
    1078         default_resolution = getpref('Aedes','ExportMosaicImageResolution');
    1079   else
    1080         default_resolution = 300;
    1081   end
    1082   setappdata(fh,'Exportsetup',struct('Resolution',default_resolution))
    1083  
    1084   %% Set header text
    1085   if ~Dat.isDataMixed
    1086     hs = getappdata(fh,'PrintHeaderHeaderSpec');
    1087     if isempty(hs)
    1088       hs = struct('dateformat','none',...
    1089                   'string',[date,',  ',...
    1090                           strrep(strrep(DATA{1}.HDR.fpath,'\','\\'),'_','\_'),...
    1091                           strrep(strrep(DATA{1}.HDR.fname,'\','\\'),'_','\_')],...
    1092                   'fontname','Times',...
    1093                   'fontsize',12,...          % in points
    1094                   'fontweight','normal',...
    1095                   'fontangle','normal',...
    1096                   'margin',15);            % in points
    1097     end
    1098     setappdata(fh,'PrintHeaderHeaderSpec',hs)
    1099   end
    1100  
    1101  
    1102   % Look for custom aspect ratio
    1103   if ispref('Aedes','ExportMosaicUseCustomAspectRatio')
    1104     data_aspectratio = getpref('Aedes','ExportMosaicUseCustomAspectRatio');
    1105   else
    1106     data_aspectratio = [1 1 1];
    1107   end
    1108  
    1109   %% images and axes
    1110   count=1;
    1111   gap_w=gap/fig_w;
    1112   gap_h=gap/fig_h;
    1113   for ii=1:rows
    1114     for kk=1:cols
    1115       ax=axes('parent',fh,...
    1116                 'units','normal',...
    1117                 'position',[(kk-1)*((1-(cols+1)*gap_w)/cols)+kk*gap_w ...
    1118                 (rows-ii)*((1-(rows+1)*gap_h)/rows)+(rows+1-ii)*gap_h ...
    1119                 (1-(cols+1)*gap_w)/cols (1-(rows+1)*gap_h)/rows],...
    1120                 'visible','off',...
    1121                 'ydir','reverse',...
    1122                 'xtick',[],...
    1123                 'ytick',[],...
    1124                 'xticklabel',[],...
    1125                 'yticklabel',[],...
    1126                 'DataAspectRatio',data_aspectratio,...
    1127                 'PlotBoxAspectRatio',[data_sz(2) data_sz(1) 1],...
    1128                 'PlotBoxAspectRatioMode','manual');
    1129           if strcmpi(get(fh,'renderer'),'opengl')
    1130                 roi_ax = axes('parent',fh,...
    1131                   'units','normal',...
    1132                   'position',[(kk-1)*((1-(cols+1)*gap_w)/cols)+kk*gap_w ...
    1133                   (rows-ii)*((1-(rows+1)*gap_h)/rows)+(rows+1-ii)*gap_h ...
    1134                   (1-(cols+1)*gap_w)/cols (1-(rows+1)*gap_h)/rows],...
    1135                   'visible','off',...
    1136                   'ydir','reverse',...
    1137                   'xtick',[],...
    1138                   'ytick',[],...
    1139                   'xticklabel',[],...
    1140                   'yticklabel',[],...
    1141                   'DataAspectRatio',data_aspectratio,...
    1142                   'PlotBoxAspectRatio',[data_sz(2) data_sz(1) 1],...
    1143                   'PlotBoxAspectRatioMode','manual');
    1144                 overlay_ax = axes('parent',fh,...
    1145                   'units','normal',...
    1146                   'position',[(kk-1)*((1-(cols+1)*gap_w)/cols)+kk*gap_w ...
    1147                   (rows-ii)*((1-(rows+1)*gap_h)/rows)+(rows+1-ii)*gap_h ...
    1148                   (1-(cols+1)*gap_w)/cols (1-(rows+1)*gap_h)/rows],...
    1149                   'visible','off',...
    1150                   'ydir','reverse',...
    1151                   'xtick',[],...
    1152                   'ytick',[],...
    1153                   'xticklabel',[],...
    1154                   'yticklabel',[],...
    1155                   'DataAspectRatio',data_aspectratio,...
    1156                   'PlotBoxAspectRatio',[data_sz(2) data_sz(1) 1],...
    1157                   'PlotBoxAspectRatioMode','manual');
    1158           end
    1159       if count<=length(Dat.SliceInd)
    1160        
    1161         if Dat.isDataMixed
    1162           imdata=DATA{Dat.SliceInd(count)}.FTDATA;
    1163         else
    1164           if sliceDir==1
    1165             imdata=DATA{1}.FTDATA(:,:,Dat.SliceInd(count),Dat.currentVol);
    1166             if drawOverlay
    1167               if overlay.isOverlayRGB
    1168                 overlay_data = squeeze(overlay.ImageOverlay(:,:,Dat.SliceInd(count),:));
    1169               else
    1170                 overlay_data = overlay.ImageOverlay(:,:,Dat.SliceInd(count),Dat.currentVol);
    1171               end
    1172             end
    1173           elseif sliceDir==2
    1174             imdata=squeeze(DATA{1}.FTDATA(:,Dat.SliceInd(count),:,Dat.currentVol));
    1175             if drawOverlay
    1176               if overlay.isOverlayRGB
    1177                 overlay_data = squeeze(overlay.ImageOverlay(:,Dat.SliceInd(count),:,:));
    1178               else
    1179                 overlay_data = squeeze(overlay.ImageOverlay(:,Dat.SliceInd(count),:,Dat.currentVol));
    1180               end
    1181             end
    1182           else
    1183             imdata=squeeze(DATA{1}.FTDATA(Dat.SliceInd(count),:,:,Dat.currentVol));
    1184             if drawOverlay
    1185               if overlay.isOverlayRGB
    1186                 overlay_data = squeeze(overlay.ImageOverlay(Dat.SliceInd(count),:,:,:));
    1187               else
    1188                 overlay_data = squeeze(overlay.ImageOverlay(Dat.SliceInd(count),:,:,Dat.currentVol));
    1189               end
    1190             end
    1191           end
    1192         end
    1193        
    1194        
    1195        
    1196         %% Plot image
    1197         h=image('parent',ax,...
    1198                   'cdata',imdata,...
    1199                   'cdatamapping','scaled');
    1200                          
    1201                 % Plot overlay
    1202                 if drawOverlay
    1203                   if ~overlay.isOverlayRGB
    1204                         ov_cmap = overlay.ImageOverlayCmap;
    1205                         ov_clim = round(((overlay.ImageOverlayClim-overlay.ImOverlayMin)*256)./...
    1206                           (overlay.ImOverlayMax-overlay.ImOverlayMin));
    1207                         if ov_clim(1)==ov_clim(2)
    1208                           if ov_clim(1)==0
    1209                                 ov_clim(2)=1;
    1210                           elseif ov_clim(1)==256
    1211                                 ov_clim(1)=255;
    1212                           end
    1213                         end
    1214                         ov_thold = round(((overlay.ImageOverlayThold-overlay.ImOverlayMin)*256)/...
    1215                           (overlay.ImOverlayMax-overlay.ImOverlayMin));
    1216                   end
    1217                   ov_alpha_val = overlay.ImageOverlayAlpha;
    1218                  
    1219                   if ~overlay.isOverlayRGB
    1220                         % Convert indexed image to RGB image
    1221                         %slice1_ind=overlay.ImageOverlay(:,:,Dat.Slices(1),Dat.CurrentVol);
    1222                         overlay_ind=double(overlay_data);
    1223                        
    1224                         % Get thresholded alpha indices
    1225                         if overlay.ImageOverlayTholdDirPos==1
    1226                           overlay_alpha_th = overlay_ind<ov_thold;
    1227                         else
    1228                           overlay_alpha_th = overlay_ind>ov_thold;
    1229                         end
    1230                        
    1231                         % Get clim alpha indices
    1232                         overlay_alpha_clim = ( overlay_ind>=ov_clim(1) & overlay_ind<=ov_clim(2) );
    1233                        
    1234                         overlay_ind(overlay_ind<ov_clim(1))=ov_clim(1);
    1235                         overlay_ind(overlay_ind>ov_clim(2))=ov_clim(2);
    1236                        
    1237                         overlay_ind=ceil((overlay_ind-ov_clim(1))./diff(ov_clim)*255+1);
    1238                        
    1239                         sz = size(overlay_ind);
    1240                         overlay_im = zeros([sz(1) sz(2) 3],'single');
    1241                         overlay_im(:,:,1)= reshape(ov_cmap(overlay_ind,1),sz);
    1242                         overlay_im(:,:,2)= reshape(ov_cmap(overlay_ind,2),sz);
    1243                         overlay_im(:,:,3)= reshape(ov_cmap(overlay_ind,3),sz);
    1244                   else
    1245                         overlay_im = overlay_data;
    1246                   end
    1247                  
    1248                   overlay_alpha = zeros(size(overlay_ind));
    1249                   overlay_alpha(overlay_alpha_clim) = ov_alpha_val;
    1250                   overlay_alpha(overlay_alpha_th) = 0;
    1251                  
    1252                   h=image('parent',overlay_ax,...
    1253                         'cdata',overlay_im,...
    1254                         'cdatamapping','scaled',...
    1255                         'AlphaDataMapping','none',...
    1256                         'AlphaData',overlay_alpha,...
    1257                         'visible','on');
    1258                  
    1259                 end
    1260                
    1261         %% Check Clim
    1262         if isempty(Clim_in)
    1263           clim = [min(min(imdata)) max(max(imdata))];
    1264           set(ax,'clim',clim)
    1265         elseif size(Clim_in,1)>1
    1266           set(ax,'clim',Clim_in(Dat.SliceInd(count),:))
    1267         else
    1268           clim = Clim_in;
    1269           set(ax,'clim',clim)
    1270         end
    1271        
    1272         % Draw ROIs
    1273         if drawRois
    1274           for tt=1:length(roi_ind)
    1275             if Dat.isDataMixed
    1276               roidata = ROI(roi_ind(tt)).voxels{Dat.SliceInd(count)};
    1277             else
    1278               if sliceDir==1
    1279                 roidata = ROI(roi_ind(tt)).voxels{1}(:,:,Dat.SliceInd(count),Dat.currentVol);
    1280               elseif sliceDir==2
    1281                 roidata = squeeze(ROI(roi_ind(tt)).voxels{1}(:,Dat.SliceInd(count),:,Dat.currentVol));
    1282               else
    1283                 roidata = squeeze(ROI(roi_ind(tt)).voxels{1}(Dat.SliceInd(count),:,:,Dat.currentVol));
    1284               end
    1285               if isempty(find(roidata))
    1286                 continue;
    1287               end
    1288                         end
    1289                        
    1290                         if strcmpi(get(fh,'renderer'),'opengl')
    1291                           roidata=uint8(roidata);
    1292                           cdata = zeros([size(roidata) 3],'uint8');
    1293                           if ROI(roi_ind(tt)).color(1)~=0
    1294                                 cdata(:,:,1) = roidata*ROI(roi_ind(tt)).color(1);
    1295                           end
    1296                           if ROI(roi_ind(tt)).color(2)~=0
    1297                                 cdata(:,:,2) = roidata*ROI(roi_ind(tt)).color(2);
    1298                           end
    1299                           if ROI(roi_ind(tt)).color(3)~=0
    1300                                 cdata(:,:,3) = roidata*ROI(roi_ind(tt)).color(3);
    1301                           end
    1302                           alphadata=double(roidata)*roiTransp;
    1303                          
    1304                           h=image('parent',roi_ax,'cdata',cdata,...
    1305                                 'AlphaDataMapping','none',...
    1306                                 'cdatamapping','scaled',...
    1307                                 'AlphaData',alphadata,...
    1308                                 'visible','on');
    1309                         end
    1310                          
    1311                         if showRoiEdges
    1312                           B=bwboundaries(roidata,4,'holes');
    1313                           for jj=1:length(B)
    1314                                 boundary = B{jj};
    1315                                 line('parent',ax,...
    1316                                   'xdata',boundary(:,2),'ydata',boundary(:,1),...
    1317                                   'color',ROI(roi_ind(tt)).color./255,...
    1318                                   'tag','roiedge',...
    1319                                   'linewidth',0.5,...
    1320                                   'linestyle','-',...
    1321                                   'hittest','off');
    1322                           end % for jj=1:length(B)
    1323                         end
    1324           end % for tt=1:length(roi_ind)
    1325         end % if drawRois
    1326        
    1327         % Draw slice number and filename
    1328         if drawSliceNbr || drawFileName
    1329           if (rows*cols)<=50
    1330             fontsz=8;
    1331           elseif (rows*cols)>50 & (rows*cols)<100
    1332             fontsz=7;
    1333           else
    1334             fontsz=6;
    1335           end
    1336           if drawSliceNbr && drawFileName
    1337             if Dat.isDataMixed
    1338               fname = DATA{Dat.SliceInd(count)}.HDR.fname;
    1339               fpath = DATA{Dat.SliceInd(count)}.HDR.fpath;
    1340             else
    1341               fname=DATA{1}.HDR.fname;
    1342               fpath = DATA{1}.HDR.fpath;
    1343             end
    1344             if strcmp(fname,'fid')
    1345               [fp,fn,fe]=fileparts(fpath(1:end-1));
    1346               fname = [fn,fe];
    1347             end
    1348             slicetxt = sprintf('%03d: %s',Dat.SliceInd(count),fname);
    1349           elseif drawFileName
    1350             if Dat.isDataMixed
    1351               fname = DATA{Dat.SliceInd(count)}.HDR.fname;
    1352               fpath = DATA{Dat.SliceInd(count)}.HDR.fpath;
    1353             else
    1354               fname=DATA{1}.HDR.fname;
    1355               fpath = DATA{1}.HDR.fpath;
    1356             end
    1357             if strcmp(fname,'fid')
    1358               [fp,fn,fe]=fileparts(fpath(1:end-1));
    1359               fname = [fn,fe];
    1360             end
    1361             slicetxt = fname;
    1362           elseif drawSliceNbr
    1363             slicetxt = sprintf('%03d',Dat.SliceInd(count));
    1364           end
    1365           tx_slice=text('parent',ax,...
    1366                         'units','normal',...
    1367                         'position',[0.01 0.99],...
    1368                         'verticalalign','top',...
    1369                         'horizontalalign','left',...
    1370                         'interpreter','none',...
    1371                         'string',slicetxt,...
    1372                         'backgroundcolor','w',...
    1373                         'clipping','off',...
    1374                         'fontsize',fontsz);
    1375         end
    1376        
    1377 % $$$         % Draw file name text
    1378 % $$$         if drawFileName
    1379 % $$$           if (rows*cols)<=50
    1380 % $$$             fontsz=8;
    1381 % $$$           elseif (rows*cols)>50 & (rows*cols)<100
    1382 % $$$             fontsz=7;
    1383 % $$$           else
    1384 % $$$             fontsz=6;
    1385 % $$$           end
    1386 % $$$           if drawSliceNbr
    1387 % $$$             tmp_ext=get(tx_nbr,'extent');
    1388 % $$$           else
    1389 % $$$             tmp_ext=[0.01 0.99 0 0];
    1390 % $$$           end
    1391 % $$$           if Dat.isDataMixed
    1392 % $$$             fname = DATA{Dat.SliceInd(count)}.HDR.fname;
    1393 % $$$             fpath = DATA{Dat.SliceInd(count)}.HDR.fpath;
    1394 % $$$           else
    1395 % $$$             fname=DATA{1}.HDR.fname;
    1396 % $$$             fpath = DATA{1}.HDR.fpath;
    1397 % $$$           end
    1398 % $$$           if strcmp(fname,'fid')
    1399 % $$$             [fp,fn,fe]=fileparts(fpath(1:end-1));
    1400 % $$$             fname = [fn,fe];
    1401 % $$$           end
    1402 % $$$           tx_fname=text('parent',ax,...
    1403 % $$$                         'units','normal',...
    1404 % $$$                         'position',[tmp_ext(1)+tmp_ext(3) 0.99],...
    1405 % $$$                         'verticalalign','top',...
    1406 % $$$                         'horizontalalign','left',...
    1407 % $$$                         'interpreter','none',...
    1408 % $$$                         'string',fname,...
    1409 % $$$                         'backgroundcolor','w',...
    1410 % $$$                         'clipping','off',...
    1411 % $$$                         'fontsize',fontsz);
    1412 % $$$         end
    1413        
    1414         count=count+1;
    1415       end % if count<=length(Dat.
    1416     end % for kk=1:cols
    1417   end % for ii=1:rows
     987       
     988        aedes_createmosaic(DATA,ROI,overlay,...
     989                'slicedir',sliceDir,...
     990                'drawslicenbr',drawSliceNbr,...
     991                'drawrois',drawRois,...
     992                'drawfilename',drawFileName,...
     993                'drawcolorbar',drawColorbar,...
     994                'drawoverlay',drawOverlay,...
     995                'colormap',colmap,...
     996                'cols',cols,...
     997                'rows',rows,...
     998                'roiind',roi_ind,...
     999                'sliceind',Dat.SliceInd,...
     1000                'clim',Clim_in,...
     1001                'vol',Dat.currentVol,...
     1002                'roitransp',roiTransp,...
     1003                'showRoiEdges',showRoiEdges);
     1004       
     1005%       if Dat.isDataMixed
     1006%     data_sz=size(DATA{Dat.SliceInd(1)}.FTDATA);
     1007%   else
     1008%     if sliceDir==1
     1009%       data_sz=size(DATA{1}.FTDATA(:,:,Dat.SliceInd(1),Dat.currentVol));
     1010%     elseif sliceDir==2
     1011%       data_sz=size(squeeze(DATA{1}.FTDATA(:,Dat.SliceInd(1),:,Dat.currentVol)));
     1012%     else
     1013%       data_sz=size(squeeze(DATA{1}.FTDATA(Dat.SliceInd(1),:,:,Dat.currentVol)));
     1014%     end
     1015%       end
     1016%   
     1017%   % Determine figure size
     1018%   scrsz = get(0,'screensize'); % Get current display resolution
     1019%   scrsz(4) = scrsz(4)-45-70; % The 47px is for taskbar,
     1020%   scrsz(3) = scrsz(3)-16;
     1021%   gap=3;
     1022%   fig_w = cols*data_sz(2)+(cols+1)*gap;
     1023%   fig_h = rows*data_sz(1)+(rows+1)*gap;
     1024%   
     1025%   if fig_w>scrsz(3) || fig_h>scrsz(4)
     1026%     
     1027%     aratio_w=[fig_w fig_h]./fig_w;
     1028%     aratio_h=[fig_w fig_h]./fig_h;
     1029%     for ii=1:2
     1030%       if fig_w>scrsz(3)
     1031%         tmp=aratio_w*scrsz(3);
     1032%         fig_w = tmp(1);
     1033%         fig_h = tmp(2);
     1034%       elseif fig_h>scrsz(4)
     1035%         tmp=aratio_h*scrsz(4);
     1036%         fig_w = tmp(1);
     1037%         fig_h = tmp(2);
     1038%       end
     1039%     end
     1040%   end
     1041%   
     1042%   %% Determine paper orientation
     1043%   if fig_w>fig_h
     1044%     paperorient = 'landscape';
     1045%     
     1046%     %% Determine paperposition
     1047%     papersize = [29.7 21.0];
     1048%     tmp=[fig_w,fig_h]./fig_h;
     1049%     pap_h = tmp(2)*(papersize(2)-2);
     1050%     pap_w = tmp(1)*(papersize(2)-2);
     1051%     if pap_w>(papersize(1)-2)
     1052%       pap_h=((papersize(1)-2)/pap_w)*pap_h;
     1053%       pap_w = papersize(1)-2;
     1054%     end
     1055%     paperpos = [papersize(1)/2-pap_w/2 ...
     1056%                 papersize(2)/2-pap_h/2 ...
     1057%                 pap_w ...
     1058%                 pap_h];
     1059%   else
     1060%     paperorient = 'portrait';
     1061%
     1062%     %% Determine paperposition
     1063%     papersize = [21.0 29.7];
     1064%     tmp=[fig_w,fig_h]./fig_w;
     1065%     pap_h = tmp(2)*(papersize(1)-2);
     1066%     pap_w = tmp(1)*(papersize(1)-2);
     1067%     if pap_h>(papersize(2)-2)
     1068%       pap_w=((papersize(2)-2)/pap_h)*pap_w;
     1069%       pap_h = papersize(2)-2;
     1070%     end
     1071%     paperpos = [papersize(1)/2-pap_w/2 ...
     1072%                 papersize(2)/2-pap_h/2 ...
     1073%                 pap_w ...
     1074%                 pap_h];
     1075%   end
     1076%   
     1077%   
     1078%   
     1079%   % Draw the mosaic figure
     1080%   fh = figure('position',[scrsz(3)/2-fig_w/2+4 ...
     1081%                       scrsz(4)/2-fig_h/2+45 fig_w fig_h],...
     1082%               'visible','on',...
     1083%               'inverthardcopy','off',...
     1084%               'renderer','opengl',...%'painters',...
     1085%               'numbertitle','off',...
     1086%               'name','Mosaic View',...
     1087%               'colormap',colmap,...
     1088%               'color','w',...
     1089%               'papertype','a4',...
     1090%               'paperpositionmode','manual',...
     1091%               'paperorientation',paperorient,...
     1092%               'paperunits','centimeters',...
     1093%               'paperposition',paperpos);
     1094%   set(fh,'paperunits','inches')
     1095%   if ( roiTransp==0 | not(drawRois)) && not(drawOverlay)
     1096%       set(fh,'renderer','painters');
     1097%   end
     1098%   
     1099%   % Set resolution information in the figure
     1100%   if ispref('Aedes','ExportMosaicImageResolution')
     1101%       default_resolution = getpref('Aedes','ExportMosaicImageResolution');
     1102%   else
     1103%       default_resolution = 300;
     1104%   end
     1105%   setappdata(fh,'Exportsetup',struct('Resolution',default_resolution))
     1106%   
     1107%   %% Set header text
     1108%   if ~Dat.isDataMixed
     1109%     hs = getappdata(fh,'PrintHeaderHeaderSpec');
     1110%     if isempty(hs)
     1111%       hs = struct('dateformat','none',...
     1112%                   'string',[date,',  ',...
     1113%                           strrep(strrep(DATA{1}.HDR.fpath,'\','\\'),'_','\_'),...
     1114%                           strrep(strrep(DATA{1}.HDR.fname,'\','\\'),'_','\_')],...
     1115%                   'fontname','Times',...
     1116%                   'fontsize',12,...          % in points
     1117%                   'fontweight','normal',...
     1118%                   'fontangle','normal',...
     1119%                   'margin',15);            % in points
     1120%     end
     1121%     setappdata(fh,'PrintHeaderHeaderSpec',hs)
     1122%   end
     1123%   
     1124%   
     1125%   % Look for custom aspect ratio
     1126%   if ispref('Aedes','ExportMosaicUseCustomAspectRatio')
     1127%     data_aspectratio = getpref('Aedes','ExportMosaicUseCustomAspectRatio');
     1128%   else
     1129%     data_aspectratio = [1 1 1];
     1130%   end
     1131%   
     1132%   %% images and axes
     1133%   count=1;
     1134%   gap_w=gap/fig_w;
     1135%   gap_h=gap/fig_h;
     1136%   for ii=1:rows
     1137%     for kk=1:cols
     1138%       ax=axes('parent',fh,...
     1139%               'units','normal',...
     1140%               'position',[(kk-1)*((1-(cols+1)*gap_w)/cols)+kk*gap_w ...
     1141%               (rows-ii)*((1-(rows+1)*gap_h)/rows)+(rows+1-ii)*gap_h ...
     1142%               (1-(cols+1)*gap_w)/cols (1-(rows+1)*gap_h)/rows],...
     1143%               'visible','off',...
     1144%               'ydir','reverse',...
     1145%               'xtick',[],...
     1146%               'ytick',[],...
     1147%               'xticklabel',[],...
     1148%               'yticklabel',[],...
     1149%               'DataAspectRatio',data_aspectratio,...
     1150%               'PlotBoxAspectRatio',[data_sz(2) data_sz(1) 1],...
     1151%               'PlotBoxAspectRatioMode','manual');
     1152%         if strcmpi(get(fh,'renderer'),'opengl')
     1153%               roi_ax = axes('parent',fh,...
     1154%                 'units','normal',...
     1155%                 'position',[(kk-1)*((1-(cols+1)*gap_w)/cols)+kk*gap_w ...
     1156%                 (rows-ii)*((1-(rows+1)*gap_h)/rows)+(rows+1-ii)*gap_h ...
     1157%                 (1-(cols+1)*gap_w)/cols (1-(rows+1)*gap_h)/rows],...
     1158%                 'visible','off',...
     1159%                 'ydir','reverse',...
     1160%                 'xtick',[],...
     1161%                 'ytick',[],...
     1162%                 'xticklabel',[],...
     1163%                 'yticklabel',[],...
     1164%                 'DataAspectRatio',data_aspectratio,...
     1165%                 'PlotBoxAspectRatio',[data_sz(2) data_sz(1) 1],...
     1166%                 'PlotBoxAspectRatioMode','manual');
     1167%               overlay_ax = axes('parent',fh,...
     1168%                 'units','normal',...
     1169%                 'position',[(kk-1)*((1-(cols+1)*gap_w)/cols)+kk*gap_w ...
     1170%                 (rows-ii)*((1-(rows+1)*gap_h)/rows)+(rows+1-ii)*gap_h ...
     1171%                 (1-(cols+1)*gap_w)/cols (1-(rows+1)*gap_h)/rows],...
     1172%                 'visible','off',...
     1173%                 'ydir','reverse',...
     1174%                 'xtick',[],...
     1175%                 'ytick',[],...
     1176%                 'xticklabel',[],...
     1177%                 'yticklabel',[],...
     1178%                 'DataAspectRatio',data_aspectratio,...
     1179%                 'PlotBoxAspectRatio',[data_sz(2) data_sz(1) 1],...
     1180%                 'PlotBoxAspectRatioMode','manual');
     1181%         end
     1182%       if count<=length(Dat.SliceInd)
     1183%         
     1184%         if Dat.isDataMixed
     1185%           imdata=DATA{Dat.SliceInd(count)}.FTDATA;
     1186%         else
     1187%           if sliceDir==1
     1188%             imdata=DATA{1}.FTDATA(:,:,Dat.SliceInd(count),Dat.currentVol);
     1189%             if drawOverlay
     1190%               if overlay.isOverlayRGB
     1191%                 overlay_data = squeeze(overlay.ImageOverlay(:,:,Dat.SliceInd(count),:));
     1192%               else
     1193%                 overlay_data = overlay.ImageOverlay(:,:,Dat.SliceInd(count),Dat.currentVol);
     1194%               end
     1195%             end
     1196%           elseif sliceDir==2
     1197%             imdata=squeeze(DATA{1}.FTDATA(:,Dat.SliceInd(count),:,Dat.currentVol));
     1198%             if drawOverlay
     1199%               if overlay.isOverlayRGB
     1200%                 overlay_data = squeeze(overlay.ImageOverlay(:,Dat.SliceInd(count),:,:));
     1201%               else
     1202%                 overlay_data = squeeze(overlay.ImageOverlay(:,Dat.SliceInd(count),:,Dat.currentVol));
     1203%               end
     1204%             end
     1205%           else
     1206%             imdata=squeeze(DATA{1}.FTDATA(Dat.SliceInd(count),:,:,Dat.currentVol));
     1207%             if drawOverlay
     1208%               if overlay.isOverlayRGB
     1209%                 overlay_data = squeeze(overlay.ImageOverlay(Dat.SliceInd(count),:,:,:));
     1210%               else
     1211%                 overlay_data = squeeze(overlay.ImageOverlay(Dat.SliceInd(count),:,:,Dat.currentVol));
     1212%               end
     1213%             end
     1214%           end
     1215%         end
     1216%         
     1217%         
     1218%         
     1219%         %% Plot image
     1220%         h=image('parent',ax,...
     1221%                 'cdata',imdata,...
     1222%                 'cdatamapping','scaled');
     1223%                         
     1224%               % Plot overlay
     1225%               if drawOverlay
     1226%                 if ~overlay.isOverlayRGB
     1227%                       ov_cmap = overlay.ImageOverlayCmap;
     1228%                       ov_clim = round(((overlay.ImageOverlayClim-overlay.ImOverlayMin)*256)./...
     1229%                         (overlay.ImOverlayMax-overlay.ImOverlayMin));
     1230%                       if ov_clim(1)==ov_clim(2)
     1231%                         if ov_clim(1)==0
     1232%                               ov_clim(2)=1;
     1233%                         elseif ov_clim(1)==256
     1234%                               ov_clim(1)=255;
     1235%                         end
     1236%                       end
     1237%                       ov_thold = round(((overlay.ImageOverlayThold-overlay.ImOverlayMin)*256)/...
     1238%                         (overlay.ImOverlayMax-overlay.ImOverlayMin));
     1239%                 end
     1240%                 ov_alpha_val = overlay.ImageOverlayAlpha;
     1241%                 
     1242%                 if ~overlay.isOverlayRGB
     1243%                       % Convert indexed image to RGB image
     1244%                       %slice1_ind=overlay.ImageOverlay(:,:,Dat.Slices(1),Dat.CurrentVol);
     1245%                       overlay_ind=double(overlay_data);
     1246%                       
     1247%                       % Get thresholded alpha indices
     1248%                       if overlay.ImageOverlayTholdDirPos==1
     1249%                         overlay_alpha_th = overlay_ind<ov_thold;
     1250%                       else
     1251%                         overlay_alpha_th = overlay_ind>ov_thold;
     1252%                       end
     1253%                       
     1254%                       % Get clim alpha indices
     1255%                       overlay_alpha_clim = ( overlay_ind>=ov_clim(1) & overlay_ind<=ov_clim(2) );
     1256%                       
     1257%                       overlay_ind(overlay_ind<ov_clim(1))=ov_clim(1);
     1258%                       overlay_ind(overlay_ind>ov_clim(2))=ov_clim(2);
     1259%                       
     1260%                       overlay_ind=ceil((overlay_ind-ov_clim(1))./diff(ov_clim)*255+1);
     1261%                       
     1262%                       sz = size(overlay_ind);
     1263%                       overlay_im = zeros([sz(1) sz(2) 3],'single');
     1264%                       overlay_im(:,:,1)= reshape(ov_cmap(overlay_ind,1),sz);
     1265%                       overlay_im(:,:,2)= reshape(ov_cmap(overlay_ind,2),sz);
     1266%                       overlay_im(:,:,3)= reshape(ov_cmap(overlay_ind,3),sz);
     1267%                 else
     1268%                       overlay_im = overlay_data;
     1269%                 end
     1270%                 
     1271%                 overlay_alpha = zeros(size(overlay_ind));
     1272%                 overlay_alpha(overlay_alpha_clim) = ov_alpha_val;
     1273%                 overlay_alpha(overlay_alpha_th) = 0;
     1274%                 
     1275%                 h=image('parent',overlay_ax,...
     1276%                       'cdata',overlay_im,...
     1277%                       'cdatamapping','scaled',...
     1278%                       'AlphaDataMapping','none',...
     1279%                       'AlphaData',overlay_alpha,...
     1280%                       'visible','on');
     1281%                 
     1282%               end
     1283%               
     1284%         %% Check Clim
     1285%         if isempty(Clim_in)
     1286%           clim = [min(min(imdata)) max(max(imdata))];
     1287%           set(ax,'clim',clim)
     1288%         elseif size(Clim_in,1)>1
     1289%           set(ax,'clim',Clim_in(Dat.SliceInd(count),:))
     1290%         else
     1291%           clim = Clim_in;
     1292%           set(ax,'clim',clim)
     1293%         end
     1294%         
     1295%         % Draw ROIs
     1296%         if drawRois
     1297%           for tt=1:length(roi_ind)
     1298%             if Dat.isDataMixed
     1299%               roidata = ROI(roi_ind(tt)).voxels{Dat.SliceInd(count)};
     1300%             else
     1301%               if sliceDir==1
     1302%                 roidata = ROI(roi_ind(tt)).voxels{1}(:,:,Dat.SliceInd(count),Dat.currentVol);
     1303%               elseif sliceDir==2
     1304%                 roidata = squeeze(ROI(roi_ind(tt)).voxels{1}(:,Dat.SliceInd(count),:,Dat.currentVol));
     1305%               else
     1306%                 roidata = squeeze(ROI(roi_ind(tt)).voxels{1}(Dat.SliceInd(count),:,:,Dat.currentVol));
     1307%               end
     1308%               if isempty(find(roidata))
     1309%                 continue;
     1310%               end
     1311%                       end
     1312%                       
     1313%                       if strcmpi(get(fh,'renderer'),'opengl')
     1314%                         roidata=uint8(roidata);
     1315%                         cdata = zeros([size(roidata) 3],'uint8');
     1316%                         if ROI(roi_ind(tt)).color(1)~=0
     1317%                               cdata(:,:,1) = roidata*ROI(roi_ind(tt)).color(1);
     1318%                         end
     1319%                         if ROI(roi_ind(tt)).color(2)~=0
     1320%                               cdata(:,:,2) = roidata*ROI(roi_ind(tt)).color(2);
     1321%                         end
     1322%                         if ROI(roi_ind(tt)).color(3)~=0
     1323%                               cdata(:,:,3) = roidata*ROI(roi_ind(tt)).color(3);
     1324%                         end
     1325%                         alphadata=double(roidata)*roiTransp;
     1326%                         
     1327%                         h=image('parent',roi_ax,'cdata',cdata,...
     1328%                               'AlphaDataMapping','none',...
     1329%                               'cdatamapping','scaled',...
     1330%                               'AlphaData',alphadata,...
     1331%                               'visible','on');
     1332%                       end
     1333%                         
     1334%                       if showRoiEdges
     1335%                         B=bwboundaries(roidata,4,'holes');
     1336%                         for jj=1:length(B)
     1337%                               boundary = B{jj};
     1338%                               line('parent',ax,...
     1339%                                 'xdata',boundary(:,2),'ydata',boundary(:,1),...
     1340%                                 'color',ROI(roi_ind(tt)).color./255,...
     1341%                                 'tag','roiedge',...
     1342%                                 'linewidth',0.5,...
     1343%                                 'linestyle','-',...
     1344%                                 'hittest','off');
     1345%                         end % for jj=1:length(B)
     1346%                       end
     1347%           end % for tt=1:length(roi_ind)
     1348%         end % if drawRois
     1349%         
     1350%         % Draw slice number and filename
     1351%         if drawSliceNbr || drawFileName
     1352%           if (rows*cols)<=50
     1353%             fontsz=8;
     1354%           elseif (rows*cols)>50 & (rows*cols)<100
     1355%             fontsz=7;
     1356%           else
     1357%             fontsz=6;
     1358%           end
     1359%           if drawSliceNbr && drawFileName
     1360%             if Dat.isDataMixed
     1361%               fname = DATA{Dat.SliceInd(count)}.HDR.fname;
     1362%               fpath = DATA{Dat.SliceInd(count)}.HDR.fpath;
     1363%             else
     1364%               fname=DATA{1}.HDR.fname;
     1365%               fpath = DATA{1}.HDR.fpath;
     1366%             end
     1367%             if strcmp(fname,'fid')
     1368%               [fp,fn,fe]=fileparts(fpath(1:end-1));
     1369%               fname = [fn,fe];
     1370%             end
     1371%             slicetxt = sprintf('%03d: %s',Dat.SliceInd(count),fname);
     1372%           elseif drawFileName
     1373%             if Dat.isDataMixed
     1374%               fname = DATA{Dat.SliceInd(count)}.HDR.fname;
     1375%               fpath = DATA{Dat.SliceInd(count)}.HDR.fpath;
     1376%             else
     1377%               fname=DATA{1}.HDR.fname;
     1378%               fpath = DATA{1}.HDR.fpath;
     1379%             end
     1380%             if strcmp(fname,'fid')
     1381%               [fp,fn,fe]=fileparts(fpath(1:end-1));
     1382%               fname = [fn,fe];
     1383%             end
     1384%             slicetxt = fname;
     1385%           elseif drawSliceNbr
     1386%             slicetxt = sprintf('%03d',Dat.SliceInd(count));
     1387%           end
     1388%           tx_slice=text('parent',ax,...
     1389%                         'units','normal',...
     1390%                         'position',[0.01 0.99],...
     1391%                         'verticalalign','top',...
     1392%                         'horizontalalign','left',...
     1393%                         'interpreter','none',...
     1394%                         'string',slicetxt,...
     1395%                         'backgroundcolor','w',...
     1396%                         'clipping','off',...
     1397%                         'fontsize',fontsz);
     1398%                               end
     1399%         
     1400%         count=count+1;
     1401%       end % if count<=length(Dat.
     1402%     end % for kk=1:cols
     1403%   end % for ii=1:rows
    14181404 
    14191405 
Note: See TracChangeset for help on using the changeset viewer.

Powered by Trac 1.0.9.Copyright © Juha-Pekka Niskanen 2008