Changeset 214


Ignore:
Timestamp:
Dec 17, 2015, 2:40:44 PM (20 months ago)
Author:
tjniskan
Message:
  • Changed contrast/brightness to window/level notation and removed the

obsolete gamma setting

  • Added icon and mouse gestures for the bucketfill operation. The operation

itself has been available in middle mouse button in the ROI draw tool, but
now has also its own toolbar button.

  • Added ROI statistics button in the ROI Analysis segment in the GUI.
  • Fixed a bug in the Current pixel value display.
  • Moved show/hide crosshairs to a toolbar button.

M aedes.m
M aedes_cdata.mat
M aedes_revision.m

Files:
3 edited

Legend:

Unmodified
Added
Removed
  • aedes.m

    r213 r214  
    769769                              'enable','off');
    770770
     771% Show/hide crosshairs
     772H.UITOGGLE_CROSSHAIRS = uitoggletool('parent',H.UITOOLBAR,...
     773                               'CData',btn_cdata.cdata.crosshairs_small,...
     774                               'ClickedCallback',@l_ShowHideCrossbars,...
     775                               'TooltipString','Show/Hide Crosshairs',...
     776                               'enable','off',...
     777                               'state','off',...
     778                               'separator','on');
     779                                                                                                               
    771780% Show Grid
    772781H.UITOGGLE_GRID = uitoggletool('parent',H.UITOOLBAR,...
     
    887896                                   'separator','off');
    888897
     898H.UITOGGLE_FILLROI = uitoggletool('parent',H.UITOOLBAR,...
     899                                  'CData',btn_cdata.cdata.bucketfill,...
     900                                  'ClickedCallback',...
     901                                  ['set(get(gcbo,''userdata''),''state'',''off''),' ...
     902                    'set(gcbo,''state'',''on'')'],...
     903                                   'TooltipString','Mouse: Fill ROI',...
     904                                   'enable','off',...
     905                                   'state','off',...
     906                                   'separator','off');
     907
    889908H.UITOGGLE_MOVEROI = uitoggletool('parent',H.UITOOLBAR,...
    890909                                  'CData',btn_cdata.cdata.move,...
     
    956975set([H.UITOGGLE_ARROW,H.UITOGGLE_PAN,...
    957976     H.UITOGGLE_DRAWROI,H.UITOGGLE_ERASEROI,H.UITOGGLE_MOVEROI,...
    958      H.UITOGGLE_MOVEROI3D],...
     977     H.UITOGGLE_MOVEROI3D,H.UITOGGLE_FILLROI],...
    959978    'userdata',[H.UITOGGLE_ARROW,H.UITOGGLE_PAN,...
    960979                H.UITOGGLE_DRAWROI,H.UITOGGLE_ERASEROI,H.UITOGGLE_MOVEROI,...
    961                 H.UITOGGLE_MOVEROI3D])
     980                H.UITOGGLE_MOVEROI3D,H.UITOGGLE_FILLROI])
    962981
    963982
     
    10571076                        'style','frame',...
    10581077                        'units','pixel',...
    1059                         'position',[5 fig_pos(4)-125-2 ...
    1060                     232-10 125],...%135
     1078                        'position',[5 fig_pos(4)-105-2 ...
     1079                    232-10 105],...%135
    10611080                        'backgroundcolor',GD.col.frame);
    10621081
     
    10661085H.SLICE_TOOLS_TX = uicontrol('parent',H.FIG,...
    10671086                             'units','pixel',...
    1068                              'position',[tmp(1)+5 tmp(2)+tmp(4)-18 150 13],...
     1087                             'position',[tmp(1)+5 tmp(2)+tmp(4)-20 150 15],...
    10691088                             'style','text',...
    10701089                             'horizontalalign','left',...
    10711090                             'fontweight','bold',...
    10721091                             'backgroundcolor',GD.col.frame,...
    1073                              'string','Slice Viewing Tools');
     1092                             'string','Image Coordinates');
    10741093
    10751094% Volume popup
     
    10981117H.SL_SLIDER = uicontrol('parent',H.FIG,...
    10991118                        'units','pixel',...
    1100                         'position',[tmp(1)+5 tmp(2)+80 215 20],...
     1119                        'position',[tmp(1)+5 tmp(2)+60 215 20],...
    11011120                        'style','slider',...
    11021121                        'backgroundcolor',GD.col.slider);
     
    11291148H.X_BTN = uicontrol('parent',H.FIG,...
    11301149                    'units','pixel',...
    1131                     'position',[tmp(1)+5 tmp(2)+55 30 22],...
     1150                    'position',[tmp(1)+5 tmp(2)+35 30 22],...
    11321151                    'style','togglebutton',...
    11331152                    'fontweight','bold',...
     
    12111230% Crossbars
    12121231tmp=get(H.SLICE_TOOLS,'pos');
    1213 H.SHOW_CROSSBARS = uicontrol('parent',H.FIG,...
    1214                              'units','pixel',...
    1215                              'position',[tmp(1)+5 tmp(2)+25 130 20],...
    1216                              'style','checkbox',...
    1217                              'fontweight','normal',...
    1218                              'string','Show Crossbars',...
    1219                              'backgroundcolor',GD.col.frame,...
    1220                              'value',0,...
    1221                              'callback',@l_ShowHideCrossbars);
     1232% H.SHOW_CROSSBARS = uicontrol('parent',H.FIG,...
     1233%                              'units','pixel',...
     1234%                              'position',[tmp(1)+5 tmp(2)+25 130 20],...
     1235%                              'style','checkbox',...
     1236%                              'fontweight','normal',...
     1237%                              'string','Show Crossbars',...
     1238%                              'backgroundcolor',GD.col.frame,...
     1239%                              'value',0,...
     1240%                              'callback',@l_ShowHideCrossbars);
    12221241
    12231242H.VOXEL_VALUE_TX = uicontrol('parent',H.FIG,...
    12241243                             'units','pixel',...
    1225                              'position',[tmp(1)+5 tmp(2)+5 tmp(3)/2-25 13],...
     1244                             'position',[tmp(1)+5 tmp(2)+20 130 13],...
    12261245                             'style','text',...
    12271246                             'fontweight','normal',...
    1228                              'string','Voxel value:',...
     1247                             'string','Current pixel value:',...
    12291248                                                                                                                 'horizontalalign','left',...
    12301249                             'backgroundcolor',GD.col.frame);                                                                                                   
     
    12321251H.VOXEL_VALUE = uicontrol('parent',H.FIG,...
    12331252                             'units','pixel',...
    1234                              'position',[tmp(1)+tmp(3)/2-15 tmp(2)+5 tmp(3)/2+10 13],...
     1253                             'position',[tmp(1)+5 tmp(2)+5 130 13],...
    12351254                             'style','text',...
    12361255                             'fontweight','normal',...
     
    12411260tmp=get(H.SLICE_TOOLS,'position');
    12421261fig_pos = get(H.FIG,'position');
    1243 %% Contrast/Brightness/Gamma tools frame
    1244 H.CONTRAST_TOOLS=uicontrol('parent',H.FIG,...
     1262%% Window/Level tools frame
     1263H.WINDOWLEVEL_TOOLS=uicontrol('parent',H.FIG,...
    12451264                           'style','frame',...
    12461265                           'units','pixel',...
    1247                            'position',[tmp(1) tmp(2)-5-230 ...
    1248                     tmp(3) 230],...
     1266                           'position',[tmp(1) tmp(2)-5-220 ...
     1267                    tmp(3) 220],...
    12491268                           'backgroundcolor',GD.col.frame);
    12501269
    12511270
    1252 % Contrast/Brightness/Gamma text
    1253 tmp=get(H.CONTRAST_TOOLS,'position');
    1254 H.CONTRAST_TOOLS_TX = uicontrol('parent',H.FIG,...
     1271% Window/Level text
     1272tmp=get(H.WINDOWLEVEL_TOOLS,'position');
     1273H.WINDOWLEVEL_TOOLS_TX = uicontrol('parent',H.FIG,...
    12551274                                'units','pixel',...
    12561275                                'position',[tmp(1)+5 tmp(2)+tmp(4)-18 150 13],...
     
    12591278                                'fontweight','bold',...
    12601279                                'backgroundcolor',GD.col.frame,...
    1261                                 'string','Contrast Tools');
    1262 
    1263 
    1264 % Contrast slider ------------------------------
    1265 tmp=get(H.CONTRAST_TOOLS,'position');
    1266 H.CONTRAST_SLIDER = uicontrol('parent',H.FIG,...
     1280                                'string','Window/Level');
     1281
     1282
     1283% Window slider ------------------------------
     1284tmp=get(H.WINDOWLEVEL_TOOLS,'position');
     1285H.WINDOW_SLIDER = uicontrol('parent',H.FIG,...
    12671286                              'units','pixel',...
    1268                               'position',[tmp(1)+5 tmp(2)+175 173 18],...
     1287                              'position',[tmp(1)+5 tmp(2)+165 173 18],...
    12691288                              'style','slider',...
    12701289                              'min',0,...
    12711290                              'max',100,...
    12721291                              'value',100,...
    1273                               'sliderstep',[0.005 0.1],...
     1292                              'sliderstep',[0.01 0.1],...
    12741293                              'backgroundcolor',GD.col.slider);
    1275 tmp=get(H.CONTRAST_SLIDER,'position');
    1276 % Contrast Edit box
    1277 H.CONTRAST_EDIT = uicontrol('parent',H.FIG,...
     1294tmp=get(H.WINDOW_SLIDER,'position');
     1295% Window Edit box
     1296H.WINDOW_EDIT = uicontrol('parent',H.FIG,...
    12781297                            'units','pixel',...
    12791298                            'position',[tmp(1)+tmp(3)+3 tmp(2) 37 tmp(4)],...
     
    12811300                            'backgroundcolor','w',...
    12821301                            'string','',...
    1283                             'callback',@l_SetContrastBrightnessGamma);
    1284 % Contrast text
     1302                            'callback',@l_SetWindowLevel);
     1303% Window text
    12851304h1 = uicontrol('parent',H.FIG,...
    12861305               'units','pixel',...
     
    12891308               'horizontalalign','left',...
    12901309               'backgroundcolor',GD.col.frame,...
    1291                'string','Contrast (0% - 100%)');
    1292 
    1293 % Brightness slider ---------------------------------
    1294 tmp=get(H.CONTRAST_SLIDER,'position');
     1310               'string','Window (0% - 100%)');
     1311
     1312% Level slider ---------------------------------
     1313tmp=get(H.WINDOW_SLIDER,'position');
    12951314tmp_gap=20;
    1296 H.BRIGHTNESS_SLIDER = uicontrol('parent',H.FIG,...
     1315H.LEVEL_SLIDER = uicontrol('parent',H.FIG,...
    12971316                                'units','pixel',...
    12981317                                'position',[tmp(1) tmp(2)-tmp(4)-tmp_gap tmp(3) tmp(4)],...
    12991318                                'style','slider',...
    1300                                 'min',-100,...
    1301                                 'max',100,...
     1319                                'min',-50,...
     1320                                'max',50,...
    13021321                                'value',0,...
    1303                                 'sliderstep',[0.0025 0.1],...
     1322                                'sliderstep',[0.01 0.1],...
    13041323                                'backgroundcolor',GD.col.slider);
    1305 tmp=get(H.BRIGHTNESS_SLIDER,'position');
    1306 % Contrast Edit box
    1307 H.BRIGHTNESS_EDIT = uicontrol('parent',H.FIG,...
     1324tmp=get(H.LEVEL_SLIDER,'position');
     1325% Level Edit box
     1326H.LEVEL_EDIT = uicontrol('parent',H.FIG,...
    13081327                              'units','pixel',...
    13091328                              'position',[tmp(1)+tmp(3)+3 tmp(2) 37 tmp(4)],...
     
    13111330                              'backgroundcolor','w',...
    13121331                              'string','',...
    1313                               'callback',@l_SetContrastBrightnessGamma);
    1314 % Brightness text
     1332                              'callback',@l_SetWindowLevel);
     1333% Level text
    13151334h1 = uicontrol('parent',H.FIG,...
    13161335               'units','pixel',...
    1317                'position',[tmp(1) tmp(2)+tmp(4)+2 150 12],...
     1336               'position',[tmp(1) tmp(2)+tmp(4)+2 170 12],...
    13181337               'style','text',...
    13191338               'horizontalalign','left',...
    13201339               'backgroundcolor',GD.col.frame,...
    1321                'string','Brightness (-100 - +100)');
    1322 
    1323 % Gamma slider ---------------------------------
    1324 tmp=get(H.BRIGHTNESS_SLIDER,'position');
    1325 H.GAMMA_SLIDER = uicontrol('parent',H.FIG,...
    1326                            'units','pixel',...
    1327                            'position',[tmp(1) tmp(2)-tmp(4)-tmp_gap tmp(3) tmp(4)],...
    1328                            'style','slider',...
    1329                            'min',0.01,...
    1330                            'max',4.99,...
    1331                            'value',1,...
    1332                            'sliderstep',[0.002008 0.1],...
    1333                            'backgroundcolor',GD.col.slider);
    1334 tmp=get(H.GAMMA_SLIDER,'position');
    1335 % Gamma Edit box
    1336 H.GAMMA_EDIT = uicontrol('parent',H.FIG,...
    1337                          'units','pixel',...
    1338                          'position',[tmp(1)+tmp(3)+3 tmp(2) 37 tmp(4)],...
    1339                          'style','edit',...
    1340                          'backgroundcolor','w',...
    1341                          'string','',...
    1342                          'callback',@l_SetContrastBrightnessGamma);
    1343 % Gamma text
    1344 h1 = uicontrol('parent',H.FIG,...
    1345                'units','pixel',...
    1346                'position',[tmp(1) tmp(2)+tmp(4)+2 150 12],...
    1347                'style','text',...
    1348                'horizontalalign','left',...
    1349                'backgroundcolor',GD.col.frame,...
    1350                'string','Gamma (0.01 - 4.99)');
     1340               'string','Level (-50% - 50%)');
     1341
    13511342if ~Dat.HG2graphics
    13521343if Dat.MatlabVersion>7.03
    1353   ContrastSliderListener = handle.listener(H.CONTRAST_SLIDER,...
    1354           'ActionEvent',@l_SetContrastBrightnessGamma);
    1355         BrightnessSliderListener = handle.listener(H.BRIGHTNESS_SLIDER,...
    1356           'ActionEvent',@l_SetContrastBrightnessGamma);
    1357         GammaSliderListener = handle.listener(H.GAMMA_SLIDER,...
    1358           'ActionEvent',@l_SetContrastBrightnessGamma);
    1359         setappdata(H.CONTRAST_SLIDER,'HandleListeners',...
    1360           [ContrastSliderListener,BrightnessSliderListener,...
    1361           GammaSliderListener])
     1344  WindowSliderListener = handle.listener(H.WINDOW_SLIDER,...
     1345          'ActionEvent',@l_SetWindowLevel);
     1346        LevelSliderListener = handle.listener(H.LEVEL_SLIDER,...
     1347          'ActionEvent',@l_SetWindowLevel);
     1348        setappdata(H.WINDOW_SLIDER,'HandleListeners',...
     1349          [WindowSliderListener,LevelSliderListener])
    13621350else
    13631351  if feature('javafigures')
    1364         ContrastSliderListener = handle.listener(H.CONTRAST_SLIDER,...
    1365           'ActionEvent',@l_SetContrastBrightnessGamma);
    1366         BrightnessSliderListener = handle.listener(H.BRIGHTNESS_SLIDER,...
    1367           'ActionEvent',@l_SetContrastBrightnessGamma);
    1368         GammaSliderListener = handle.listener(H.GAMMA_SLIDER,...
    1369           'ActionEvent',@l_SetContrastBrightnessGamma);
    1370         setappdata(H.CONTRAST_SLIDER,'HandleListeners',...
    1371           [ContrastSliderListener,BrightnessSliderListener,...
    1372           GammaSliderListener])
     1352        WindowSliderListener = handle.listener(H.WINDOW_SLIDER,...
     1353          'ActionEvent',@l_SetWindowLevel);
     1354        LevelSliderListener = handle.listener(H.LEVEL_SLIDER,...
     1355          'ActionEvent',@l_SetWindowLevel);
     1356        setappdata(H.WINDOW_SLIDER,'HandleListeners',...
     1357          [WindowSliderListener,LevelSliderListener])
    13731358  else
    1374         set(H.CONTRAST_SLIDER,'callback',@l_SetContrastBrightnessGamma)
    1375         set(H.BRIGHTNESS_SLIDER,'callback',@l_SetContrastBrightnessGamma)
    1376         set(H.GAMMA_SLIDER,'callback',@l_SetContrastBrightnessGamma)
     1359        set(H.WINDOW_SLIDER,'callback',@l_SetWindowLevel)
     1360        set(H.LEVEL_SLIDER,'callback',@l_SetWindowLevel)
    13771361  end
    13781362end
    13791363else
    1380         ContrastSliderListener = addlistener(H.CONTRAST_SLIDER,...
    1381           'ContinuousValueChange',@l_SetContrastBrightnessGamma);
    1382         BrightnessSliderListener = addlistener(H.BRIGHTNESS_SLIDER,...
    1383           'ContinuousValueChange',@l_SetContrastBrightnessGamma);
    1384         GammaSliderListener = addlistener(H.GAMMA_SLIDER,...
    1385           'ContinuousValueChange',@l_SetContrastBrightnessGamma);
    1386         setappdata(H.CONTRAST_SLIDER,'HandleListeners',...
    1387           [ContrastSliderListener,BrightnessSliderListener,...
    1388           GammaSliderListener])
    1389 end
    1390 tmp=get(H.GAMMA_SLIDER,'position');
    1391 
    1392 % Contrast autobalance
    1393 H.CONTRAST_AUTO = uicontrol('parent',H.FIG,...
     1364        WindowSliderListener = addlistener(H.WINDOW_SLIDER,...
     1365          'ContinuousValueChange',@l_SetWindowLevel);
     1366        LevelSliderListener = addlistener(H.LEVEL_SLIDER,...
     1367          'ContinuousValueChange',@l_SetWindowLevel);
     1368        setappdata(H.WINDOW_SLIDER,'HandleListeners',...
     1369          [WindowSliderListener,LevelSliderListener])
     1370end
     1371tmp=get(H.LEVEL_SLIDER,'position');
     1372% Clim Min text
     1373H.CLIMRANGETEXT = uicontrol('parent',H.FIG,...
     1374                          'units','pixel',...
     1375                          'position',...
     1376                          [10 tmp(2)-25 50 15],...
     1377                          'string','Range:',...
     1378                          'horizontalalign','left',...
     1379                          'style','text',...
     1380                          'backgroundcolor',GD.col.frame);
     1381tmp=get(H.CLIMRANGETEXT,'position');
     1382H.CLIMMINEDIT = uicontrol('parent',H.FIG,...
     1383                          'units','pixel',...
     1384                          'position',...
     1385                          [tmp(1)+tmp(3)+5 tmp(2) 60 18],...
     1386                          'string','',...
     1387                          'style','edit',...
     1388                          'backgroundcolor','w',...
     1389                          'callback',@l_ChangeClim);
     1390tmp=get(H.CLIMMINEDIT,'position');
     1391% % Clim Max text
     1392H.CLIMMAXTEXT = uicontrol('parent',H.FIG,...
     1393                          'units','pixel',...
     1394                          'position',...
     1395                          [tmp(1)+tmp(3)+5 tmp(2) 25 15],...
     1396                          'string','-',...
     1397                          'horizontalalign','center',...
     1398                          'style','text',...
     1399                          'backgroundcolor',GD.col.frame);
     1400% tmp=get(H.CLIMMAXTEXT,'position');
     1401% Max (Clim(2))
     1402H.CLIMMAXEDIT = uicontrol('parent',H.FIG,...
     1403                          'units','pixel',...
     1404                          'position',...
     1405                          [tmp(1)+tmp(3)+35 tmp(2) 60 18],...
     1406                          'string','',...
     1407                          'style','edit',...
     1408                          'backgroundcolor','w',...
     1409                          'callback',@l_ChangeClim);
     1410tmp=get(H.CLIMMINEDIT,'position');
     1411% Clim range behavior text
     1412H.CLIMRANGEBEHTEXT = uicontrol('parent',H.FIG,...
     1413        'units','pixel',...
     1414        'position',...
     1415        [10 tmp(2)-25 200 15],...
     1416        'string','Range in image stack:',...
     1417        'horizontalalign','left',...
     1418        'style','text',...
     1419        'backgroundcolor',GD.col.frame);
     1420tmp=get(H.CLIMMINEDIT,'position');
     1421% Clim range popup
     1422H.CLIMRANGE_POPUP = uicontrol('parent',H.FIG,...
     1423                              'units','pixel',...
     1424                              'position',...
     1425                              [10 tmp(2)-45 210 20],...
     1426                              'string',{'Range fixed (all images)',...
     1427                    'Range fixed (image)','Range image min-max','Range auto-balanced W/L'},...
     1428                              'horizontalalign','left',...
     1429                              'style','popup',...
     1430                              'enable','on',...
     1431                              'value',1,...
     1432                              'callback',@l_ChangeClimRange,...
     1433                              'backgroundcolor','w');
     1434
     1435% Window/level autobalance
     1436tmp=get(H.CLIMRANGE_POPUP,'position');
     1437H.WINDOWLEVEL_AUTO = uicontrol('parent',H.FIG,...
    13941438                            'units','pixel',...
    13951439                            'position',...
    1396                             [tmp(1) tmp(2)-tmp(4)-25 35 35],...
     1440                            [tmp(1) tmp(2)-tmp(4)-30 35 35],...
    13971441                            'string','',...
    13981442                            'CData',btn_cdata.cdata.contrast,...
    1399                             'tooltip','Contrast auto-balance',...
     1443                            'tooltip','Window/level auto-balance',...
    14001444                            'style','pushbutton',...
    1401                             'callback',@l_SetAutoContrast);
    1402 tmp=get(H.CONTRAST_AUTO,'position');
     1445                            'callback',@l_SetAutoWindowLevel);
     1446tmp=get(H.WINDOWLEVEL_AUTO,'position');
    14031447H.CONTRAST_INVERT = uicontrol('parent',H.FIG,...
    14041448                              'units','pixel',...
     
    14341478
    14351479
    1436 tmp=get(H.CONTRAST_AUTO,'position');
    1437 % Clim Min text
    1438 H.CLIMMINTEXT = uicontrol('parent',H.FIG,...
    1439                           'units','pixel',...
    1440                           'position',...
    1441                           [10 tmp(2)-25 50 15],...
    1442                           'string','Clim Min:',...
    1443                           'horizontalalign','left',...
    1444                           'style','text',...
    1445                           'backgroundcolor',GD.col.frame);
    1446 tmp=get(H.CLIMMINTEXT,'position');
    1447 % Min (Clim(1))
    1448 H.CLIMMINEDIT = uicontrol('parent',H.FIG,...
    1449                           'units','pixel',...
    1450                           'position',...
    1451                           [tmp(1)+tmp(3) tmp(2) 50 18],...
    1452                           'string','',...
    1453                           'style','edit',...
    1454                           'backgroundcolor','w',...
    1455                           'callback',@l_ChangeClim);
    1456 tmp=get(H.CLIMMINEDIT,'position');
    1457 % Clim Max text
    1458 H.CLIMMAXTEXT = uicontrol('parent',H.FIG,...
    1459                           'units','pixel',...
    1460                           'position',...
    1461                           [tmp(1)+tmp(3)+11 tmp(2) 50 15],...
    1462                           'string','Clim Max:',...
    1463                           'horizontalalign','left',...
    1464                           'style','text',...
    1465                           'backgroundcolor',GD.col.frame);
    1466 tmp=get(H.CLIMMAXTEXT,'position');
    1467 % Max (Clim(2))
    1468 H.CLIMMAXEDIT = uicontrol('parent',H.FIG,...
    1469                           'units','pixel',...
    1470                           'position',...
    1471                           [tmp(1)+tmp(3) tmp(2) 50 18],...
    1472                           'string','',...
    1473                           'style','edit',...
    1474                           'backgroundcolor','w',...
    1475                           'callback',@l_ChangeClim);
    1476 
    1477 tmp=get(H.CLIMMINTEXT,'position');
    1478 % Clim Range text
    1479 H.CLIMRANGE_TX = uicontrol('parent',H.FIG,...
    1480                            'units','pixel',...
    1481                            'position',...
    1482                            [10 tmp(2)-25 50 15],...
    1483                            'string','Clim range:',...
    1484                            'horizontalalign','left',...
    1485                            'style','text',...
    1486                            'backgroundcolor',GD.col.frame);
    1487 
    1488 tmp=get(H.CLIMRANGE_TX,'position');
    1489 % Clim range popup
    1490 H.CLIMRANGE_POPUP = uicontrol('parent',H.FIG,...
    1491                               'units','pixel',...
    1492                               'position',...
    1493                               [tmp(1)+tmp(3)+5 tmp(2)+5 155 15],...
    1494                               'string',{'locked (global)',...
    1495                     'locked (slice)','unlocked (min/max)','unlocked (auto-balanced)'},...
    1496                               'horizontalalign','left',...
    1497                               'style','popup',...
    1498                               'enable','on',...
    1499                               'value',1,...
    1500                               'callback',@l_ChangeClimRange,...
    1501                               'backgroundcolor','w');
     1480
    15021481
    15031482
    15041483%% Analyze tools ------------------------
    1505 tmp = get(H.CONTRAST_TOOLS,'position');
     1484tmp = get(H.WINDOWLEVEL_TOOLS,'position');
    15061485H.ANALYZE_TOOLS = uicontrol('parent',H.FIG,...H.SIDEBAR,...
    15071486'style','frame',...
    15081487    'units','pixel',...
    1509     'position',[tmp(1) tmp(2)-288-5 tmp(3) 288],...%[tmp(1) tmp(2)-348-5+40 tmp(3) 308],...
     1488    'position',[tmp(1) tmp(2)-318-5 tmp(3) 318],...%[tmp(1) tmp(2)-348-5+40 tmp(3) 308],...
    15101489    'backgroundcolor',GD.col.frame);
    15111490
     
    15341513               'position',[10 tmp(2)+tmp(4)-20 200 14],...%[10 332-40 200 14],...
    15351514               'style','text',...
    1536                'string','ROI Analysis Tools',...
     1515               'string','ROI Analysis',...
    15371516               'horizontalalign','left',...
    15381517               'fontweight','bold',...
    1539                'fontsize',8,...
    15401518               'backgroundcolor',GD.col.frame);
    15411519
     
    15451523                           'style','frame',...
    15461524                           'units','pixel',...
    1547                            'position',[tmp(1) tmp(2)-50 212 50]);%[10 259-40 212 70]);
     1525                           'position',[tmp(1) tmp(2)-55 212 50]);%[10 259-40 212 70]);
    15481526tmp=get(H.ROITOOLS_FRAME,'position');
    1549 % $$$ H.DRAW_ROI(1)=uicontrol('parent',H.FIG,...
    1550 % $$$                         'style','radio',...
    1551 % $$$                         'units','pixel',...
    1552 % $$$                         'value',0,...
    1553 % $$$                         'position',[22 tmp(2)+28 150 18],...
    1554 % $$$                         'string','Draw/Edit ROI',...
    1555 % $$$                         'callback',['set(get(gcbo,''userdata''),''value'',0),'...
    1556 % $$$                     'set(gcbo,''value'',1)']);
    1557 % $$$ H.DRAW_ROI(2)=uicontrol('parent',H.FIG,...
    1558 % $$$                         'style','radio',...
    1559 % $$$                         'units','pixel',...
    1560 % $$$                         'value',1,...
    1561 % $$$                         'position',[22 tmp(2)+7 150 18],...
    1562 % $$$                         'string','Change View/Contrast',...
    1563 % $$$                         'callback',['set(get(gcbo,''userdata''),''value'',0),'...
    1564 % $$$                     'set(gcbo,''value'',1)']);
    1565 % $$$ set(H.DRAW_ROI,'userdata',H.DRAW_ROI)
    1566 % $$$ h3=uicontrol('parent',H.FIG,...
    1567 % $$$              'units','pixel',...
    1568 % $$$              'position',[15 tmp(2)+49 150 0.2*70],...
    1569 % $$$              'style','text',...
    1570 % $$$              'string','ROI Tools',...
    1571 % $$$              'horizontalalign','left',...
    1572 % $$$              'fontweight','normal',...
    1573 % $$$              'fontsize',8);%'backgroundcolor','r');
     1527
    15741528
    15751529
     
    16321586                          'style','pushbutton',...
    16331587                          'units','pixel',...
    1634                           'position',[tmp(1) tmp(2)-65 40 40],...
     1588                          'position',[tmp(1) tmp(2)-70 40 40],...
    16351589                          'string','',...
    16361590                          'fontweight','bold',...
     
    16501604                          'tooltip','Save ROI(s)',...
    16511605                          'callback',@l_RoiSave);
    1652 
    1653 
     1606tmp=get(H.ROIBTN_SAVE,'position');
     1607H.ROIBTN_STATS = uicontrol('parent',H.FIG,...
     1608                          'style','pushbutton',...
     1609                          'units','pixel',...
     1610                          'position',[tmp(1) tmp(2)-tmp(4)-5 tmp(3:4)],...
     1611                          'string','',...
     1612                          'fontweight','bold',...
     1613                          'enable','off',...
     1614                          'CData',btn_cdata.cdata.statistics_large,...
     1615                          'tooltip','View ROI statistics',...
     1616                          'callback',@l_RoiViewStats);
     1617tmp=get(H.ROIBTN_LOAD,'position');
    16541618% ROI selection listbox
    16551619%uicm=uicontextmenu;
     
    16711635h1=uicontrol('parent',H.FIG,...
    16721636             'units','pixel',...
    1673              'position',[tmp(1) tmp(2)+tmp(4)+2 66 14],...
     1637             'position',[tmp(1) tmp(2)+tmp(4)+2 86 14],...
    16741638             'style','text',...
    16751639             'string','View ROI(s)',...
    16761640             'horizontalalign','left',...
    16771641             'fontweight','normal',...
    1678              'fontsize',8,...
    16791642             'backgroundcolor',GD.col.frame);
    16801643h1=uicontrol('parent',H.FIG,...
     
    16851648             'horizontalalign','left',...
    16861649             'fontweight','normal',...
    1687              'fontsize',8,...
    16881650             'backgroundcolor',GD.col.frame);
    16891651tmp=get(h1,'position');
     
    17001662h1 = uicontrol('parent',H.FIG,...
    17011663               'units','pixel',...
    1702                'position',[10 tmp(2)-25 133 14],...
     1664               'position',[10 tmp(2)-35 133 14],...
    17031665               'style','text',...
    17041666               'string','ROI Transparency',...
    17051667               'horizontalalign','left',...
    17061668               'fontweight','normal',...
    1707                'fontsize',8,...
    17081669               'backgroundcolor',GD.col.frame);
    17091670tmp=get(h1,'position');
     
    19811942H.UICH_ENABLED(end+1)=H.FILEMENU_EXPORT;
    19821943H.UICH_ENABLED(end+1)=H.UITOGGLE_COLORBAR;
     1944H.UICH_ENABLED(end+1)=H.UITOGGLE_CROSSHAIRS;
    19831945H.UICH_ENABLED(end+1)=H.UNFOLD_DATA;
    19841946
     
    19931955                    H.UITOGGLE_DRAWROI,...
    19941956                    H.UITOGGLE_ERASEROI,...
     1957                                                                                H.UITOGGLE_FILLROI,...
    19951958                    H.UITOGGLE_MOVEROI,...
    19961959                    H.UITOGGLE_MOVEROI3D,...
     
    20001963                    H.ROIBTN_DELALL,...
    20011964                    H.ROIBTN_SAVE,...
     1965                                                                                H.ROIBTN_STATS,...
    20021966                    H.ROI_EDIT,...
    20031967                    H.UIROISHOWEDGES,...
     
    22552219    end
    22562220  end
     2221
     2222        % If the data consists of multiple 2D files that are all of the same
     2223        % size, ask if the user wants to view them as 3D data.
     2224        if Read2Mixed
     2225                nFiles = length(DATA);
     2226                X = zeros(1,nFiles);
     2227                Y = zeros(1,nFiles);
     2228                for ii = 1:nFiles
     2229                        X(ii)=size(DATA{ii}.FTDATA,1);
     2230                        Y(ii)=size(DATA{ii}.FTDATA,2);
     2231                end
     2232                if all(X==X(1)) && all(Y==Y(1))
     2233                        resp = questdlg('Do you want to view data as a 3D data set or a 2D image stack?',...
     2234                                'View data 3D or 2D?','View as 3D data','View as 2D image stack','View as 2D image stack');
     2235                        if isempty(resp)
     2236                                viewAs3D = false;
     2237                        elseif strcmpi(resp,'View as 3D data')
     2238                                viewAs3D = true;
     2239                        else
     2240                                viewAs3D = false;
     2241                        end
     2242                        if viewAs3D
     2243                                tmp = DATA{1};
     2244                                tmp.FTDATA = zeros(X(1),Y(1),nFiles,class(DATA{1}.FTDATA));
     2245                                for ii = 1:nFiles
     2246                                        tmp.FTDATA(:,:,ii) = DATA{ii}.FTDATA;
     2247                                        DATA{ii}.FTDATA=[];
     2248                                end
     2249                                DATA=[];
     2250                                DATA=tmp;
     2251                        end
     2252                end
     2253        end
    22572254 
    22582255  % Remove skipped volumes
     
    23002297  DATA{1}=rmfield(DATA{1},'DataRotation');
    23012298  DATA{1}=rmfield(DATA{1},'DataFlip');
    2302 end
    2303 if isfield(DATA{1},'SliceClim')
    2304   Dat.SliceClim = DATA{1}.SliceClim;
    2305   DATA{1}=rmfield(DATA{1},'SliceClim');
    23062299end
    23072300if isfield(DATA{1},'RotateFlip3d')
     
    23332326% Initialize GUI
    23342327l_Initialize([],[]);
     2328
     2329if isfield(DATA{1},'SliceClim')
     2330  Dat.SliceClim = DATA{1}.SliceClim;
     2331  DATA{1}=rmfield(DATA{1},'SliceClim');
     2332        set(H.CLIMRANGE_POPUP,'value',2)
     2333        l_ChangeClimRange([],[])
     2334end
    23352335
    23362336%% If the ROI-structure has been given in file load time, refresh ROIs
     
    28322832end
    28332833
    2834 % Set mouse for changing contrast
     2834% Set mouse for changing window/level
    28352835set(get(H.UITOGGLE_ARROW,'userdata'),'state','off')
    28362836set(H.UITOGGLE_ARROW,'state','on')
     
    28462846delete(H.CROSSBAR_LN)
    28472847H.CROSSBAR_LN=[];
    2848 set(H.SHOW_CROSSBARS,'value',0)
     2848%set(H.SHOW_CROSSBARS,'value',0)
    28492849
    28502850% Reset image sliders
     
    28542854% Reset uitoolbar buttons
    28552855set([H.UIPUSH_ZOOMIN,H.UIPUSH_ZOOMOUT,H.UITOGGLE_ZOOMNORM],'enable','off')
    2856 set([H.UITOGGLE_VIEW3D,H.UITOGGLE_VIEWY,H.UITOGGLE_VIEWZ],'state','off')
     2856set([H.UITOGGLE_VIEW3D,H.UITOGGLE_VIEWY,H.UITOGGLE_VIEWZ,H.UITOGGLE_CROSSHAIRS],'state','off')
    28572857set([H.UITOGGLE_ARROW,H.UITOGGLE_PAN,...
    28582858     H.UITOGGLE_DRAWROI,H.UITOGGLE_ERASEROI,H.UITOGGLE_MOVEROI,...
    2859      H.UITOGGLE_MOVEROI3D,H.UITOGGLE_GRID],...
     2859     H.UITOGGLE_MOVEROI3D,H.UITOGGLE_GRID,H.UITOGGLE_CROSSHAIRS],...
    28602860    'enable','off')
    28612861set([H.UIPUSH_NEWROI,H.UIPUSH_UNDOROI],...
     
    29192919% Reset figure window title
    29202920set(H.FIG,'Name','Aedes 1.0')
     2921
     2922% Update Voxel Value text
     2923set(H.VOXEL_VALUE,'string','-')
    29212924
    29222925%% Place blank frame in front of gui
     
    30453048
    30463049% Get default Clim behavior from preferences -------------
    3047 try
    3048   Dat.LockClim = getpref('Aedes','LockClim');
    3049   if Dat.LockClim==0
    3050     val=3;
    3051   elseif Dat.LockClim==1
    3052     val=1;
    3053   elseif Dat.LockClim==2
    3054     val=2;
    3055   else
    3056     val=4;
    3057   end
    3058 catch
    3059   Dat.LockClim = 1; % 0 = clim unlocked
     3050% try
     3051%   Dat.LockClim = getpref('Aedes','LockClim');
     3052%   if Dat.LockClim==0
     3053%     val=3;
     3054%   elseif Dat.LockClim==1
     3055%     val=1;
     3056%   elseif Dat.LockClim==2
     3057%     val=2;
     3058%   else
     3059%     val=4;
     3060%   end
     3061% catch
     3062  Dat.LockClim = 0; % 0 = clim unlocked
    30603063                    % 1 = clim locked global
    30613064                    % 2 = clim locked slice
    30623065                    % 3 = clim unlocked and auto-balanced
    3063   val = 1;
    3064 end
     3066  val = 3;
     3067% end
    30653068
    30663069% Set Clim values ----------------------------------
     
    32483251l_ChangeColorbarLimits([],[])
    32493252
    3250 % Set default Contrast, Brightness, and Gamma.
     3253% Set default Window, Level, and Gamma.
    32513254% Store current valid value in the userdata...
    3252 Dat.Contrast = 100;
    3253 Dat.Brightness = 0;
    3254 Dat.Gamma = 1;
    3255 set(H.CONTRAST_EDIT,'string',num2str(Dat.Contrast),...
    3256   'userdata',Dat.Contrast)
    3257 set(H.BRIGHTNESS_EDIT,'string',num2str(Dat.Brightness),...
    3258   'userdata',Dat.Brightness)
    3259 set(H.GAMMA_EDIT,'string',num2str(Dat.Gamma),...
    3260   'userdata',Dat.Gamma)
     3255Dat.Window = 100;
     3256Dat.Level = 0;
     3257set(H.WINDOW_EDIT,'string',num2str(Dat.Window),...
     3258  'userdata',Dat.Window)
     3259set(H.LEVEL_EDIT,'string',num2str(Dat.Level),...
     3260  'userdata',Dat.Level)
    32613261
    32623262
     
    34583458                    'enable','on')
    34593459  end
     3460
     3461        set(H.CLIMRANGE_POPUP,'enable','on','value',3)
    34603462else
    34613463  if Dat.ImageDim(Dat.DataInd,3)==1
     
    34843486  set(H.UIMENU_ROTATEFLIP3D,'enable','on')
    34853487  set(H.UIMENU_ROTATEFLIP,'enable','off')
    3486 end
    3487 
    3488 
    3489 % Reset contrast/brightness/gamma sliders
    3490 set(H.CONTRAST_SLIDER,'value',100)
    3491 set(H.BRIGHTNESS_SLIDER,'value',0)
    3492 set(H.GAMMA_SLIDER,'value',1)
     3488        set(H.CLIMRANGE_POPUP,'value',3,'enable','off')
     3489end
     3490
     3491
     3492% Reset window/level sliders
     3493set(H.WINDOW_SLIDER,'value',100)
     3494set(H.LEVEL_SLIDER,'value',0)
    34933495
    34943496% Set file name to figure window title
     
    37923794l_DisplayData([],[])
    37933795
    3794 % Refresh brightness/contrast
    3795 l_SetContrastBrightnessGamma(0,[],Clim,0)
     3796% Refresh window/level
     3797l_SetWindowLevel(0,[],Clim,0)
    37963798
    37973799% Load ROI(s)
     
    51395141if strcmpi(get(H.UIVIEW_INFOTXTBACKGROUND,'checked'),'off')
    51405142  set([H.INFOTEXT,H.ROIINFOTEXT],...
    5141                     'backgroundcolor','w')
     5143                    'backgroundcolor','w','color','k')
    51425144        if ~Dat.HG2graphics
    51435145                set([H.INFOTEXT,H.ROIINFOTEXT],'erasemode','normal')
     
    51475149else
    51485150  set([H.INFOTEXT,H.ROIINFOTEXT],...
    5149                     'backgroundcolor','none')
     5151                    'backgroundcolor','none','color','k')
    51505152        if ~Dat.HG2graphics
    51515153                set([H.INFOTEXT,H.ROIINFOTEXT],'erasemode','xor')
     
    57185720
    57195721% Draw crossbars
    5720 if get(H.SHOW_CROSSBARS,'value')
     5722if strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on')
    57215723  l_ShowHideCrossbars;
    57225724end
     
    57315733
    57325734% Refresh Clim if unlocked or slice locked
    5733 if any(Dat.LockClim==[0 2 3]) && Dat.isDataMixed
     5735if any(Dat.LockClim==[0 1 2 3]) && Dat.isDataMixed
    57345736  l_RefreshClim([],[]);
    57355737end
     
    59205922 
    59215923  % Hide crossbars from other axis if they are selected
    5922   if get(H.SHOW_CROSSBARS,'value')
     5924  if strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on')
    59235925    set(H.CROSSBAR_LN(:,:),'visible','off')
    59245926    set(H.CROSSBAR_LN(vtype,:),'visible','on')
     
    59345936  Dat.AxView=0;
    59355937  set(H.IM,'visible','on')
    5936   if get(H.SHOW_CROSSBARS,'value')
     5938  if  strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on')
    59375939    set(H.CROSSBAR_LN(:,:),'visible','on')
    59385940  end
     
    63096311function l_ShowHideCrossbars(h,evd)
    63106312try
    6311 if get(H.SHOW_CROSSBARS,'value') | ~isfield(H,'CROSSBAR_LN')
     6313if  strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on') | ~isfield(H,'CROSSBAR_LN')
    63126314  % Draw crossbars
    63136315  ax_h = [H.IMAX1,H.IMAX2,H.IMAX3];
     
    63686370 
    63696371  % Set visibility for lines
    6370   if get(H.SHOW_CROSSBARS,'value')
     6372  if  strcmpi(get(H.UITOGGLE_CROSSHAIRS,'state'),'on')
    63716373    if any(Dat.AxView==[1 2 3])
    63726374      set(H.CROSSBAR_LN(Dat.AxView,:),'visible','on')
     
    63946396function l_UpdateIntensityValue(h,evd)
    63956397try
    6396 % Look for a quick return
    6397 if ~Dat.ShowColorbar
    6398   return
    6399 end
     6398       
     6399        % Get the current intensity value
     6400        IntVal=DATA{Dat.DataInd}.FTDATA(Dat.Slices(3),...
     6401                Dat.Slices(2),...
     6402                Dat.Slices(1),...
     6403                Dat.CurrentVol);
     6404       
     6405        % Update Voxel Value text
     6406        set(H.VOXEL_VALUE,'string',...
     6407                sprintf('%.2f',IntVal))
     6408       
     6409        % Look for a quick return
     6410        if ~Dat.ShowColorbar
     6411                return
     6412  end
    64006413
    64016414% Get the current intensity value
     
    64546467end
    64556468
    6456 % Update Voxel Value text
    6457 set(H.VOXEL_VALUE,'string',...
    6458                         sprintf('%.2f',IntVal))
    64596469
    64606470% Refresh axes
     
    72767286  if h==H.CLIMMINEDIT
    72777287    val = str2num(get(H.CLIMMINEDIT,'string'));
     7288                if isempty(val) && strcmpi(get(H.CLIMMINEDIT,'string'),'min')
     7289                        val = Dat.OrigClim(Dat.DataInd,1);
     7290                        set(H.CLIMMINEDIT,'string',num2str(val));
     7291                end
    72787292    if isempty(val) || ~isreal(val) || val>=Dat.Clim(2)
    72797293      set(H.CLIMMINEDIT,'string',num2str(get(H.CLIMMINEDIT,'userdata')))
     
    72847298  elseif h==H.CLIMMAXEDIT
    72857299    val = str2num(get(H.CLIMMAXEDIT,'string'));
     7300                if isempty(val) && strcmpi(get(H.CLIMMAXEDIT,'string'),'max')
     7301                        val = Dat.OrigClim(Dat.DataInd,2);
     7302                        set(H.CLIMMAXEDIT,'string',num2str(val));
     7303                end
    72867304    if isempty(val) || ~isreal(val) || val<=Dat.Clim(1)
    72877305      set(H.CLIMMAXEDIT,'string',num2str(get(H.CLIMMAXEDIT,'userdata')))
     
    72917309    set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2))
    72927310  else
    7293         set(H.CLIMMINEDIT,'userdata',Dat.Clim(1))
    7294         set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2))
    7295         set(H.CLIMMINEDIT,'string',num2str(get(H.CLIMMINEDIT,'userdata')))
    7296         set(H.CLIMMAXEDIT,'string',num2str(get(H.CLIMMAXEDIT,'userdata')))
     7311                set(H.CLIMMINEDIT,'userdata',Dat.Clim(1))
     7312                set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2))
     7313                set(H.CLIMMINEDIT,'string',num2str(get(H.CLIMMINEDIT,'userdata')))
     7314                set(H.CLIMMAXEDIT,'string',num2str(get(H.CLIMMAXEDIT,'userdata')))
    72977315  end
    72987316 
     
    73007318  set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    73017319 
    7302   % Save Clim values and change the range to slice locked position
    7303   if Dat.LockClim==2
    7304     Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
    7305   elseif Dat.LockClim==0 || Dat.LockClim==3
    7306     Dat.LockClim = 1;
    7307     set(H.CLIMRANGE_POPUP,'value',1)
    7308     %Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
    7309     setpref('Aedes','LockClim',Dat.LockClim);
    7310   end
    7311  
     7320%   % Save Clim values and change the range to slice locked position
     7321%       if Dat.isDataMixed
     7322%               if Dat.LockClim==2
     7323%                       Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
     7324%               elseif Dat.LockClim==0 || Dat.LockClim==3
     7325%                       Dat.LockClim = 1;
     7326%                       set(H.CLIMRANGE_POPUP,'value',1)
     7327%               end
     7328%       end
     7329       
     7330        % Save Clim values and change the range to slice locked position
     7331        if Dat.isDataMixed
     7332                if any(Dat.LockClim==[0,2,3])
     7333                        Dat.LockClim = 2;
     7334                        Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
     7335                        set(H.CLIMRANGE_POPUP,'value',2)
     7336                end
     7337        end
     7338
    73127339  % Refresh colorbar limits
    73137340  l_ChangeColorbarLimits([],[])
     7341
     7342        % Refresh window/level sliders
     7343        l_SetWindowLevel([],0,Dat.Clim,0)
    73147344 
    73157345  catch
     
    73337363  l_RefreshClim([],[])
    73347364elseif val==3
    7335   Dat.LockClim = 0; % Unlocked
     7365  Dat.LockClim = 0; % Unlocked min-max
    73367366  l_RefreshClim([],[])
    73377367elseif val==4
     
    73397369  l_RefreshClim([],[])
    73407370end
    7341 setpref('Aedes','LockClim',Dat.LockClim);
     7371%setpref('Aedes','LockClim',Dat.LockClim);
    73427372
    73437373catch
     
    73537383function l_RefreshClim(h,evd)
    73547384try
    7355  
    7356   %if ~Dat.isDataMixed
    7357   % return
    7358   %end
    73597385
    73607386if Dat.LockClim==0
    73617387  %% Clim unlocked
    73627388  Dat.Clim = Dat.OrigClim(Dat.DataInd,:);
     7389  l_SetWindowLevel(0,[],Dat.Clim,0)
     7390 
     7391elseif Dat.LockClim==1
     7392  %% Clim locked global
     7393        l_SetWindowLevel(0,[],Dat.Clim,0)
     7394 
     7395
     7396elseif Dat.LockClim==2
     7397  %% Clim locked slice
     7398  Dat.Clim = Dat.SliceClim(Dat.DataInd,:);
    73637399  %set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    73647400  %set(H.CLIMMINEDIT,'userdata',Dat.Clim(1),...
     
    73667402  %set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2),...
    73677403  %                  'string',num2str(Dat.Clim(2)))
    7368   l_SetContrastBrightnessGamma(0,[],Dat.Clim,0)
    7369  
    7370 elseif Dat.LockClim==1
    7371   %% Clim locked global
    7372  
    7373 elseif Dat.LockClim==2
    7374   %% Clim locked slice
    7375   Dat.Clim = Dat.SliceClim(Dat.DataInd,:);
    7376   set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    7377   set(H.CLIMMINEDIT,'userdata',Dat.Clim(1),...
    7378                     'string',num2str(Dat.Clim(1)))
    7379   set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2),...
    7380                     'string',num2str(Dat.Clim(2)))
    73817404 
    73827405  % Refresh colorbar limits
    7383   l_ChangeColorbarLimits([],[])
     7406  %l_ChangeColorbarLimits([],[])
     7407
     7408        l_SetWindowLevel(0,[],Dat.Clim,0)
    73847409 
    73857410elseif Dat.LockClim==3
    73867411  %% Clim unlocked with auto-balance
    7387   l_SetAutoContrast([],[])
    7388  
    7389   %Dat.Clim = Dat.OrigClim(Dat.DataInd,:);
    7390   %set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    7391   %set(H.CLIMMINEDIT,'userdata',Dat.Clim(1),...
    7392   %                  'string',num2str(Dat.Clim(1)))
    7393   %set(H.CLIMMAXEDIT,'userdata',Dat.Clim(2),...
    7394   %                  'string',num2str(Dat.Clim(2)))
     7412  l_SetAutoWindowLevel([],[])
    73957413end
    73967414
     
    74037421%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    74047422%%
    7405 %% Modify Contrast/Brightness/Gamma
     7423%% Modify Window/Level
    74067424%%
    74077425%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    7408 function l_SetContrastBrightnessGamma(h,evd,clim_in,wbm)
     7426function l_SetWindowLevel(h,evd,clim_in,wbm)
    74097427try
    74107428if nargin==4
    74117429  if ~isempty(clim_in) & wbm==0
    7412     % Calculate contrast value and to two decimals
    7413     Dat.Contrast=(diff(clim_in)/diff(Dat.OrigClim(Dat.DataInd,:)))*100;
    7414     %Dat.Contrast = fix(Dat.Contrast*100)/100;
    7415    
    7416     % Calculate Brightness
    7417     Dat.Brightness = ((diff(clim_in)/2-(diff(Dat.OrigClim(Dat.DataInd,:))/2))./(diff(Dat.OrigClim(Dat.DataInd,:))/2))*100;
    7418     %Dat.Brightness = fix(Dat.Brightness*100)/100;
    7419    
    7420     % Make sure that contrast/brightness values are valid
    7421     Dat.Contrast = max(min(Dat.Contrast,100),0);
    7422     Dat.Brightness = max(min(Dat.Brightness,100),-100);
     7430                Dat.Clim = clim_in;
     7431
     7432                % Set Window and Level according to range
     7433                [Dat.Window,Dat.Level]=l_RangeToWindowLevel(clim_in);
    74237434   
    74247435    % Set slider values
    7425     set(H.CONTRAST_SLIDER,'value',Dat.Contrast)
    7426     set(H.BRIGHTNESS_SLIDER,'value',Dat.Brightness)
     7436    set(H.WINDOW_SLIDER,'value',Dat.Window)
     7437    set(H.LEVEL_SLIDER,'value',Dat.Level)
    74277438  else % The function is called from WindowButtonMotion
    74287439   
     
    74377448    xy=cp_old-cp;
    74387449   
    7439     % Use "tol" pixels to represent 1% shift in contrast
    7440     % and brightness...
    7441     tolx = 4; % Set 1% tolerance
    7442     toly = 2;
     7450    % Use "tol" pixels to represent 1% shift in window
     7451    % and level...
     7452    tolx = 1; % Set 1% tolerance
     7453    toly = 1;
    74437454   
    7444    
    7445     shift_contrast=xy(1)/tolx;
    7446     shift_brightness=xy(2)/toly;
    7447     Dat.Contrast = Dat.Contrast-shift_contrast;
    7448     Dat.Brightness = Dat.Brightness+shift_brightness;
    7449     Dat.Contrast = fix(Dat.Contrast*100)/100;
    7450     Dat.Brightness = fix(Dat.Brightness*100)/100;
     7455    shift_window=xy(1)/tolx;
     7456    shift_level=xy(2)/toly;
     7457    Dat.Window = Dat.Window-shift_window;
     7458    Dat.Level = Dat.Level+shift_level;
     7459    Dat.Window = floor(Dat.Window);
     7460    Dat.Level = floor(Dat.Level);
    74517461   
    74527462    % Make sure that values are within limits
    7453     Dat.Contrast = max(min(Dat.Contrast,100),0);
    7454     Dat.Brightness = max(min(Dat.Brightness,100),-100);
    7455    
     7463    Dat.Window = max(min(Dat.Window,100),0);
     7464    Dat.Level = max(min(Dat.Level,50),-50);
     7465                Dat.Clim = l_WindowLevelToRange([Dat.Window,Dat.Level]);
     7466
    74567467    % Set slider values
    7457     set(H.CONTRAST_SLIDER,'value',Dat.Contrast)
    7458     set(H.BRIGHTNESS_SLIDER,'value',Dat.Brightness)
     7468    set(H.WINDOW_SLIDER,'value',Dat.Window)
     7469    set(H.LEVEL_SLIDER,'value',Dat.Level)
     7470
     7471                if Dat.isDataMixed && any(Dat.LockClim==[0,2,3])
     7472                        Dat.LockClim = 2;
     7473                        Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
     7474                        set(H.CLIMRANGE_POPUP,'value',2)
     7475                end
    74597476  end
    74607477else
     
    74627479end
    74637480
    7464 % If called from Contrast Slider ---------------
    7465 if h==H.CONTRAST_SLIDER
     7481% If called from Window Slider ---------------
     7482if h==H.WINDOW_SLIDER
    74667483  val = get(h,'value');
    7467  
    7468   % Round value to one decimal
    7469   Dat.Contrast = fix(val*100)/100;
    7470  
    7471 % If called from Brightness Slider ----------------
    7472 elseif h==H.BRIGHTNESS_SLIDER
     7484
     7485        Dat.Window = floor(val);
     7486 
     7487% If called from Level Slider ----------------
     7488elseif h==H.LEVEL_SLIDER
    74737489  val = get(h,'value');
    7474  
    7475   % Round value to one decimal
    7476   Dat.Brightness = fix(val*100)/100;
    7477  
    7478  
    7479 
    7480 % If called from Gamma Slider ---------------------
    7481 elseif h==H.GAMMA_SLIDER
    7482   val = get(h,'value');
    7483  
    7484   % Round value to two decimals
    7485   %val=round(val*100)/100
    7486   Dat.Gamma = fix(round(val*100))/100;
    7487  
    7488   set(H.GAMMA_SLIDER,'value',Dat.Gamma)
    7489   set(H.GAMMA_EDIT,'string',sprintf('%.2f',Dat.Gamma))
    7490   set(H.FIG,'colormap',Dat.ColMap.^Dat.Gamma);
    7491   return
    7492 
    7493 % If called from Contrast Editbox -------------------
    7494 elseif h==H.CONTRAST_EDIT
     7490
     7491  Dat.Level = floor(val);
     7492
     7493% If called from Window Editbox -------------------
     7494elseif h==H.WINDOW_EDIT
    74957495 
    74967496  val=str2num(get(h,'string'));
     
    74997499    set(h,'string',num2str(get(h,'userdata')))
    75007500  else
    7501     % Round value to two decimals
    7502     Dat.Contrast = fix(val*100)/100;
    7503   end
    7504   set(H.CONTRAST_SLIDER,'value',Dat.Contrast)
    7505  
    7506 % If called from Brightness Editbox ----------------
    7507 elseif h==H.BRIGHTNESS_EDIT
     7501                Dat.Window = floor(val);
     7502  end
     7503  set(H.WINDOW_SLIDER,'value',Dat.Window)
     7504 
     7505% If called from Level Editbox ----------------
     7506elseif h==H.LEVEL_EDIT
    75087507 
    75097508  val=str2num(get(h,'string'));
     
    75127511    set(h,'string',num2str(get(h,'userdata')))
    75137512  else
    7514     % Round value to two decimals
    7515     Dat.Brightness = fix(val*100)/100;
    7516   end
    7517   set(H.BRIGHTNESS_SLIDER,'value',Dat.Brightness)
    7518  
    7519 % If called from Gamma Editbox ---------------------
    7520 elseif h==H.GAMMA_EDIT
    7521  
    7522   val=str2num(get(h,'string'));
    7523   % Check input values
    7524   if ~isreal(val) || isempty(val) || val<0.01 || val>4.99
    7525     set(h,'string',num2str(get(h,'userdata')))
    7526   else
    7527     % Round value to two decimals
    7528     Dat.Gamma = fix(val*100)/100;
    7529   end
    7530   set(H.GAMMA_SLIDER,'value',Dat.Gamma)
    7531   set(H.GAMMA_EDIT,'string',sprintf('%.2f',Dat.Gamma))
    7532   set(H.FIG,'colormap',Dat.ColMap.^Dat.Gamma);
    7533   return
     7513                Dat.Level = floor(val);
     7514  end
     7515  set(H.LEVEL_SLIDER,'value',Dat.Level)
     7516 
    75347517end
    75357518
    75367519% Update Edit box values
    7537 set(H.CONTRAST_EDIT,'string',sprintf('%.2f',Dat.Contrast))
    7538 set(H.BRIGHTNESS_EDIT,'string',sprintf('%.2f',Dat.Brightness))
    7539 %set(H.GAMMA_EDIT,'string',sprintf('%.2f',Dat.Gamma))
    7540 
    7541 % Set Contrast
    7542 % cont = round(diff(Dat.OrigClim(Dat.DataInd,:))/2);
    7543 % Clim(1) = round(Dat.OrigClim(Dat.DataInd,1)+((100-Dat.Contrast)/100)*cont);
    7544 % Clim(2) = round(Dat.OrigClim(Dat.DataInd,2)-((100-Dat.Contrast)/100)*cont);
    7545 cont = diff(Dat.OrigClim(Dat.DataInd,:))/2;
    7546 Clim(1) = Dat.OrigClim(Dat.DataInd,1)+((100-Dat.Contrast)/100)*cont;
    7547 Clim(2) = Dat.OrigClim(Dat.DataInd,2)-((100-Dat.Contrast)/100)*cont;
    7548 
    7549 
    7550 % Set Brightness
    7551 % Clim = Clim+round((diff(Dat.OrigClim(Dat.DataInd,:))/2)*(Dat.Brightness/100));
    7552 Clim = Clim+(diff(Dat.OrigClim(Dat.DataInd,:))/2)*(Dat.Brightness/100);
    7553 Dat.Clim = Clim;
     7520set(H.WINDOW_EDIT,'string',sprintf('%.0f',Dat.Window))
     7521set(H.LEVEL_EDIT,'string',sprintf('%.0f',Dat.Level))
     7522
     7523% If called from Clim edit, do not update clim
     7524if evd==0
     7525        return
     7526end
     7527
     7528% Save Clim values and change the range to slice locked position
     7529if any(h==[H.WINDOW_SLIDER,H.LEVEL_SLIDER,...
     7530                H.WINDOW_EDIT,H.LEVEL_EDIT])
     7531        Dat.Clim = l_WindowLevelToRange([Dat.Window,Dat.Level]);
     7532        if Dat.isDataMixed
     7533                if any(Dat.LockClim==[0,2,3])
     7534                        Dat.LockClim = 2;
     7535                        Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
     7536                        set(H.CLIMRANGE_POPUP,'value',2)
     7537                end
     7538        end
     7539end
    75547540
    75557541% Verify that Clim is valid
     
    75617547set([H.IMAX1,H.IMAX2,H.IMAX3],'Clim',Dat.Clim)
    75627548
    7563 
    7564 % Set Gamma
    7565 %set(H.FIG,'colormap',Dat.ColMap.^Dat.Gamma);
    75667549
    75677550% Update Clim editboxes
     
    75717554                  'userdata',Dat.Clim(2))
    75727555
    7573 % Update slice locked clim
    7574 if Dat.LockClim==2
    7575   Dat.SliceClim(Dat.DataInd,:)=Dat.Clim;
    7576 end
     7556
    75777557
    75787558% Refresh colorbar limits
     
    75827562  aedes_errordump(lasterror);
    75837563end
    7584 end % function l_SetContrastBrightnessGamma(h,
     7564end % function l_SetWindowLevel(h,
     7565
     7566% Map Window/Level to Range ----------------------
     7567function range = l_WindowLevelToRange(WL_in)
     7568
     7569        % Make sure that Window is 0..100
     7570        window = min(max(WL_in(1),0),100);
     7571        window_w = diff(Dat.OrigClim(Dat.DataInd,:))*(window/100);
     7572
     7573        % Make sure that level is -50..50
     7574        level = min(max(WL_in(2),-50),50);
     7575        level_abs = (level+50)/100*diff(Dat.OrigClim(Dat.DataInd,:))+Dat.OrigClim(Dat.DataInd,1);
     7576
     7577        % Calculate range
     7578        range = [level_abs-window_w/2 level_abs+window_w/2];
     7579
     7580end
     7581
     7582% Map Range to Window/Level ----------------------
     7583function [window,level] = l_RangeToWindowLevel(range_in)
     7584       
     7585        % Calculate window
     7586        window = diff(range_in)/diff(Dat.OrigClim(Dat.DataInd,:))*100;
     7587        window = min(max(window,0),100);
     7588       
     7589        % Calculate level
     7590        level_abs = range_in(1)+diff(range_in)/2;
     7591        level = (level_abs-Dat.OrigClim(Dat.DataInd,1))/diff(Dat.OrigClim(Dat.DataInd,:))*100-50;
     7592        level = min(max(level,-50),50);
     7593end
    75857594
    75867595%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    75877596%%
    7588 %% Auto-contrast -- set contrast automatically
     7597%% Set window/level automatically
    75897598%%
    75907599%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    7591 function l_SetAutoContrast(h,evd)
     7600function l_SetAutoWindowLevel(h,evd)
    75927601try
    75937602Clim = zeros(1,2);
     
    76197628end
    76207629
    7621 % Update contrast
    7622 l_SetContrastBrightnessGamma(0,[],Clim,0)
     7630% Update Window/Level
     7631l_SetWindowLevel(0,[],Clim,0)
    76237632
    76247633catch
    76257634  aedes_errordump(lasterror);
    76267635end
    7627 end % function l_SetAutoContrast(h,
     7636end % function l_SetAutoWindowLevel(h,
    76287637
    76297638%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    77907799%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    77917800%%
    7792 %% Reset Contrast/Brightness/Gamma sliders
     7801%% Reset Window/Level sliders
    77937802%%
    77947803%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    7795 function l_ResetContrast(h,evd)
     7804function l_ResetWindowLevel(h,evd)
    77967805try
    77977806% Look for a quick return
     
    78017810
    78027811% Determine which slider called the function
    7803 if h==H.CONTRAST_SLIDER
    7804   Dat.Contrast = 100;
    7805   set(H.CONTRAST_SLIDER,'value',Dat.Contrast)
    7806 elseif h==H.BRIGHTNESS_SLIDER
    7807   Dat.Brightness = 0;
    7808 elseif h==H.GAMMA_SLIDER
    7809   Dat.Gamma = 1;
    7810 end
    7811 
    7812 % Set Contrast
    7813 l_SetContrastBrightnessGamma(0,[])
     7812if h==H.WINDOW_SLIDER
     7813  Dat.Window = 100;
     7814  set(H.WINDOW_SLIDER,'value',Dat.Window)
     7815elseif h==H.LEVEL_SLIDER
     7816  Dat.Level = 0;
     7817end
     7818
     7819% Set Window/Level
     7820l_SetWindowLevel(0,[])
    78147821
    78157822catch
    78167823  aedes_errordump(lasterror);
    78177824end
    7818 end % function l_ResetContrast(h,
     7825end % function l_ResetWindowLevel(h,
    78197826
    78207827%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    97939800           'tag','roi_edgeline',...
    97949801           'linewidth',1.5,...
    9795            'linestyle','--',...
     9802           'linestyle','-',...
    97969803           'hittest','off');
    97979804    end
     
    999510002%%
    999610003%% Set mouse to control either ROI
    9997 %% functions or slice/contrast viewing
     10004%% functions or viewing
    999810005%%
    999910006%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
     
    1000910016%% Draw ROI
    1001010017if strcmpi(get(H.UITOGGLE_DRAWROI,'state'),'on') || ...
    10011       strcmpi(get(H.UITOGGLE_ERASEROI,'state'),'on')
     10018      strcmpi(get(H.UITOGGLE_ERASEROI,'state'),'on') || ...
     10019                        strcmpi(get(H.UITOGGLE_FILLROI,'state'),'on')
    1001210020 
    1001310021  if isempty(ROI)
     
    1006510073                  @l_WindowButtonUpFcn)
    1006610074        l_RoiDrawErase([],[],'erase',false,ax_ind,roi_ind)
     10075
     10076                                % Fill ROI -----------------------
     10077                        elseif strcmpi(get(H.UITOGGLE_FILLROI,'state'),'on')
     10078                                l_RoiFill([],[],'fill',ax_ind,roi_ind)
    1006710079      end
    1006810080    end
     
    1008410096                'windowbuttonupfcn',...
    1008510097                @l_WindowButtonUpFcn)
     10098
    1008610099                else
    1008710100     
     
    1009310106      elseif strcmpi(get(H.UITOGGLE_ERASEROI,'state'),'on')
    1009410107        l_RoiFill([],[],'fill_remove',ax_ind,roi_ind)
     10108                        elseif strcmpi(get(H.UITOGGLE_FILLROI,'state'),'on')
     10109                                set(H.FIG,'windowbuttonmotionfcn',...
     10110                  {@l_RoiDrawErase,'draw',true,ax_ind,roi_ind},...
     10111                  'windowbuttonupfcn',...
     10112                  @l_WindowButtonUpFcn)
     10113        l_RoiDrawErase([],[],'draw',false,ax_ind,roi_ind)
    1009510114      end
    1009610115    end
     
    1012510144                  @l_WindowButtonUpFcn)
    1012610145        l_RoiDrawErase([],[],'draw',false,ax_ind,roi_ind)
     10146                                elseif strcmpi(get(H.UITOGGLE_FILLROI,'state'),'on')
     10147                                        l_RoiFill([],[],'fill_remove',ax_ind,roi_ind)
    1012710148      end
    1012810149    end
    1012910150  end
    1013010151 
    10131 elseif strcmpi(get(H.UITOGGLE_ARROW,'state'),'on') %% Slice/Contrast viewing
     10152elseif strcmpi(get(H.UITOGGLE_ARROW,'state'),'on') %% Slice/window/level viewing
    1013210153  if seltype==1
    1013310154    % Check which image was pressed
     
    1016910190    end
    1017010191   
    10171     % Use the mouse to set contrast and brightness
     10192    % Use the mouse to set window and level
    1017210193    cp = get(H.FIG,'currentpoint');
    1017310194    Dat.tmp_point = cp;
    1017410195   
    1017510196    set(H.FIG,'windowbuttonmotionfcn',...
    10176               {@l_SetContrastBrightnessGamma,[],1},...
     10197              {@l_SetWindowLevel,[],1},...
    1017710198              'windowbuttonupfcn',...
    1017810199              @l_WindowButtonUpFcn)
     
    1025410275%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    1025510276  function l_MouseWheelFcn(h,evd)
    10256    
     10277
     10278    % Get the point where mouse cursor was when scroll wheel event was
     10279                % fired
     10280                cp = get(H.FIG,'Currentpoint');
     10281                fig_pos = get(H.FIG,'position');
     10282                pos = [232 0 fig_pos(3) fig_pos(4)-232];
     10283                coord = [cp(1) cp(2)];
     10284                coord(1) = coord(1)-pos(1);
     10285                coord(2) = abs(coord(2)-pos(2)-pos(4));
     10286                if coord(1) < 0 || coord(2) < 0 || ...
     10287                                coord(1) > pos(3) || coord(2) > pos(4)
     10288                        return
     10289                end
     10290
    1025710291    %cp=get(H.FIG,'CurrentPoint')
    1025810292                modifier = get(H.FIG,'CurrentModifier');
     
    1027610310                                l_Zoom([],[],'-')
    1027710311                        end
     10312                       
    1027810313                end
    1027910314               
     
    1045410489          Dat.ColMap=flipud(Dat.ColMap);
    1045510490        end
    10456         set(H.FIG,'colormap',Dat.ColMap.^Dat.Gamma)
     10491        set(H.FIG,'colormap',Dat.ColMap)
    1045710492        setpref('Aedes','ColorMap',str)
    1045810493  else
     
    1047910514        Dat.ColMap=flipud(Dat.ColMap);
    1048010515  end
    10481   set(H.FIG,'colormap',Dat.ColMap.^Dat.Gamma)
     10516  set(H.FIG,'colormap',Dat.ColMap)
    1048210517 
    1048310518  setpref('Aedes','ColorMap',str)
  • aedes_revision.m

    r213 r214  
    9393% bash-script every time it is called so that this file "aedes_revision.m" is
    9494% always in the list of committed files. DO NOT EDIT THE NEXT LINE!!!
    95 % - SVN Hook -
     95% - Svn Hook -
Note: See TracChangeset for help on using the changeset viewer.

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