Code covered by the BSD License  

Highlights from
Active contour platform

image thumbnail
from Active contour platform by olivier bernard
Compare the performance of different level sets and active contours methods.

creaseg_gui(ud)
% Copyright or © or Copr. CREATIS laboratory, Lyon, France.
% 
% Contributor: Olivier Bernard, Associate Professor at the french 
% engineering university INSA (Institut National des Sciences Appliquees) 
% and a member of the CREATIS-LRMN laboratory (CNRS 5220, INSERM U630, 
% INSA, Claude Bernard Lyon 1 University) in France (Lyon).
% 
% Date of creation: 8th of October 2009
% 
% E-mail of the author: olivier.bernard@creatis.insa-lyon.fr
% 
% This software is a computer program whose purpose is to evaluate the 
% performance of different level-set based segmentation algorithms in the 
% context of image processing (and more particularly on biomedical 
% images).
% 
% The software has been designed for two main purposes. 
% - firstly, CREASEG allows you to use six different level-set methods. 
% These methods have been chosen in order to work with a wide range of 
% level-sets. You can select for instance classical methods such as 
% Caselles or Chan & Vese level-set, or more recent approaches such as the 
% one developped by Lankton or Bernard.
% - finally, the software allows you to compare the performance of the six 
% level-set methods on different images. The performance can be evaluated 
% either visually, or from measurements (either using the Dice coefficient 
% or the PSNR value) between a reference and the results of the 
% segmentation.
%  
% The level-set segmentation platform is citationware. If you are 
% publishing any work, where this program has been used, or which used one 
% of the proposed level-set algorithms, please remember that it was 
% obtained free of charge. You must reference the papers shown below and 
% the name of the CREASEG software must be mentioned in the publication.
% 
% CREASEG software
% "T. Dietenbeck, M. Alessandrini, D. Friboulet, O. Bernard. CREASEG: a
% free software for the evaluation of image segmentation algorithms based 
% on level-set. In IEEE International Conference On Image Processing. 
% Hong Kong, China, 2010."
%
% Bernard method
% "O. Bernard, D. Friboulet, P. Thevenaz, M. Unser. Variational B-Spline 
% Level-Set: A Linear Filtering Approach for Fast Deformable Model 
% Evolution. In IEEE Transactions on Image Processing. volume 18, no. 06, 
% pp. 1179-1191, 2009."
% 
% Caselles method
% "V. Caselles, R. Kimmel, and G. Sapiro. Geodesic active contours. 
% International Journal of Computer Vision, volume 22, pp. 61-79, 1997."
% 
% Chan & Vese method
% "T. Chan and L. Vese. Active contours without edges. IEEE Transactions on
% Image Processing. volume10, pp. 266-277, February 2001."
% 
% Lankton method
% "S. Lankton, A. Tannenbaum. Localizing Region-Based Active Contours. In 
% IEEE Transactions on Image Processing. volume 17, no. 11, pp. 2029-2039, 
% 2008."
% 
% Li method
% "C. Li, C.Y. Kao, J.C. Gore, Z. Ding. Minimization of Region-Scalable 
% Fitting Energy for Image Segmentation. In IEEE Transactions on Image 
% Processing. volume 17, no. 10, pp. 1940-1949, 2008."
% 
% Shi method
% "Yonggang Shi, William Clem Karl. A Real-Time Algorithm for the 
% Approximation of Level-Set-Based Curve Evolution. In IEEE Transactions 
% on Image Processing. volume 17, no. 05, pp. 645-656, 2008."
% 
% This software is governed by the BSD license and
% abiding by the rules of distribution of free software.
% 
% As a counterpart to the access to the source code and rights to copy,
% modify and redistribute granted by the license, users are provided only
% with a limited warranty and the software's author, the holder of the
% economic rights, and the successive licensors have only limited
% liability. 
% 
% In this respect, the user's attention is drawn to the risks associated
% with loading, using, modifying and/or developing or reproducing the
% software by the user in light of its specific status of free software,
% that may mean that it is complicated to manipulate, and that also
% therefore means that it is reserved for developers and experienced
% professionals having in-depth computer knowledge. Users are therefore
% encouraged to load and test the software's suitability as regards their
% requirements in conditions enabling the security of their systems and/or 
% data to be ensured and, more generally, to use and operate it in the 
% same conditions as regards security.
% 
%------------------------------------------------------------------------


function creaseg_gui(ud)
    
    %-- Checking the Matlab version and if the Spline Toolbox is available
    a = ver;
    ud.Spline = 0;
    i = 1;
    
    while ( (i <= size(a,2)) && (~strcmp(a(i).Name,'MATLAB')) )
        i = i+ 1;
    end
    idx = find(a(i).Version == '.');
    v1 = str2double(a(i).Version(1:idx-1));        v2 = str2double(a(i).Version(idx+1:end));
    if ( (v1 >= 7) && (v2 >= 6) )
        ud.Version = 1;
    else
        ud.Version = 0;
    end
    
    ud.LastPlot = '';

    %-- create main figure
    ss = get(0,'ScreenSize');
    ud.gcf = figure('position',[300 200 ss(3)*2/3 ss(4)*2/3],'menubar','none','tag','creaseg','color',[87/255 86/255 84/255],'name','CREASEG','NumberTitle','off');

    
    %-- create main menu
    h1 = uimenu('parent',ud.gcf,'label','File');
    uimenu('parent',h1,'label','Open','callback','creaseg_loadimage');
    uimenu('parent',h1,'label','Close','callback',{@closeInterface});
    uimenu('parent',h1,'label','Save screen','callback',{@saveResult,1});
    uimenu('parent',h1,'label','Save result','callback',{@saveResult,3},'separator','on');
    
    
    
    %-- create Algorithm item submenu
    h1 = uimenu('parent',ud.gcf,'label','Algorithms');
    h2 = uimenu('parent',h1,'label','1-Caselles','callback',{@manageAlgoItem,1},'ForegroundColor',[255/255, 0/255, 0/255],'Checked','on');
    h3 = uimenu('parent',h1,'label','2-Chan & Vese','callback',{@manageAlgoItem,2});
    h4 = uimenu('parent',h1,'label','3-Chunming Li','callback',{@manageAlgoItem,3});
    h5 = uimenu('parent',h1,'label','4-Lankton','callback',{@manageAlgoItem,4});
    h6 = uimenu('parent',h1,'label','5-Bernard','callback',{@manageAlgoItem,5});
    h7 = uimenu('parent',h1,'label','6-Shi','callback',{@manageAlgoItem,6});
    h8 = uimenu('parent',h1,'label','7-Personal Algorithm','callback',{@manageAlgoItem,7});
    h9 = uimenu('parent',h1,'label','C-Comparison Mode','callback',{@manageCompItem,1},'separator','on');
    ud.handleMenuAlgorithms = [h2;h3;h4;h5;h6;h7;h8;h9];
    S = ['1-Caselles   ';'2-Chan & Vese';'3-Chunming Li'; ...
         '4-Lankton    ';'5-Bernard    ';'6-Shi        '; ...
         '7-Personal   ';'C-Comparison '];
    ud.handleMenuAlgorithmsName = cellstr(S);
    
    
    %-- create Tool item submenu
    h1 = uimenu('parent',ud.gcf,'label','Tool');
    uimenu('parent',h1,'label','Draw Initial Region','callback',{@manageAction,1});
    uimenu('parent',h1,'label','Run','callback','creaseg_run');
    
    %-- create Help item submenu
    h1 = uimenu('parent',ud.gcf,'label','Help');
    uimenu('parent',h1,'label','About Creaseg','callback',{@open_help});
    uimenu('parent',h1,'label','About the author','callback',{@open_author},'separator','on');
        
    
    %-- create Image Area
    ud.imagePanel = uipanel('units','normalized','position',[0.35 0.05 0.62 0.80],'BorderType','line','Backgroundcolor',[37/255 37/255 37/255],'HighlightColor',[0/255 0/255 0/255],'tag','imgPanel');
    ud.gca = axes('parent',ud.imagePanel,'Tag','mainAxes','DataAspectRatio',[1 1 1],'units','normalized','position',[0.05 0.05 0.9 0.9],'visible','off','tag','mainAxes');
    ud.img = image([1 256],[1 256],repmat(37/255,[256,256,3]),'parent',ud.gca,'Tag','mainImg');
    axis(ud.gca,'equal');
    set(ud.gca,'visible','off');
    pos = get(ud.gca,'position');
    colormap(gray(256));
    ud.imageId = ud.img;
    ud.imageMask(1,:) = pos;    
    ud.panelIcons = uipanel('parent',ud.gcf,'units','normalized','position',[0.35 0.87 0.42 0.08],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255],'tag','panelIcons','userdata',0);
    ud.panelText = uipanel('parent',ud.gcf,'units','normalized','position',[0.80 0.87 0.17 0.08],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    
    %--
    load('misc/icons/drawInitialization.mat');
    ha1 = uicontrol('parent',ud.panelIcons,'units','normalized','position',[0.10 0.25 0.08 0.5],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[160/255 130/255 95/255],'tooltip','draw initial region','Callback',{@manageAction,1});
    load('misc/icons/run2.mat');
    ha2 = uicontrol('parent',ud.panelIcons,'units','normalized','position',[0.22 0.25 0.08 0.5],'Style','pushbutton','CData',cdata,'Enable','On','Backgroundcolor',[240/255 173/255 105/255],'tooltip','Run','Callback',{@manageAction,2});
    load('misc/icons/arrow.mat');
    ha3 = uicontrol('parent',ud.panelIcons,'units','normalized','position',[0.34 0.25 0.08 0.5],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'tooltip','Pointer','Callback',{@manageAction,3});
    load('misc/icons/zoomIn.mat');
    ha4 = uicontrol('parent',ud.panelIcons,'units','normalized','position',[0.46 0.25 0.08 0.5],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'tooltip','Zoom In','Callback',{@manageAction,4});
    load('misc/icons/zoomOut.mat');
    ha5 = uicontrol('parent',ud.panelIcons,'units','normalized','position',[0.58 0.25 0.08 0.5],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'tooltip','Zoom Out','Callback',{@manageAction,5});
    load('misc/icons/pan.mat');
    ha6 = uicontrol('parent',ud.panelIcons,'units','normalized','position',[0.70 0.25 0.08 0.5],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'tooltip','Pan','Callback',{@manageAction,6});
    load('misc/icons/info.mat');
    ha7 = uicontrol('parent',ud.panelIcons,'units','normalized','position',[0.82 0.25 0.08 0.5],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'tooltip','Image Info','Callback',{@manageAction,7});
    ud.buttonAction = [ha1;ha2;ha3;ha4;ha5;ha6;ha7];
    
    
	%-- 
    ud.txtPositionIntensity = uicontrol('parent',ud.panelText,'style','text','enable','inactive','fontsize',8,...
        'backgroundcolor',[113/255 113/255 113/255],'foregroundcolor',[.9 .9 .9],'horizontalalignment','left');
    SetTextIntensityPosition(ud);
    
    ud.txtInfo1 = text('Parent',ud.gca,'units','normalized','position',[0.05,0.95], ...
        'string','','color',[255/255 255/255 0/255],'FontSize',8);
    ud.txtInfo2 = text('Parent',ud.gca,'units','normalized','position',[0.05,0.90], ...
        'string','','color',[255/255 255/255 0/255],'FontSize',8);
    ud.txtInfo3 = text('Parent',ud.gca,'units','normalized','position',[0.05,0.85], ...
        'string','','color',[255/255 255/255 0/255],'FontSize',8);      
    ud.txtInfo4 = text('Parent',ud.gca,'units','normalized','position',[0.05,0.80], ...
        'string','','color',[255/255 255/255 0/255],'FontSize',8);
    ud.txtInfo5 = text('Parent',ud.gca,'units','normalized','position',[0.05,0.75], ...
        'string','','color',[255/255 255/255 0/255],'FontSize',8); 
    
    %-- create Toolbar
    hToolbar = uitoolbar('Parent',ud.gcf,'HandleVisibility','callback');
    load('misc/icons/open.mat');
    uipushtool('Parent',hToolbar,'TooltipString','Open File','CData',cdata,'HandleVisibility','callback','ClickedCallback','creaseg_loadimage');
    load('misc/icons/screenshot.mat');
    uipushtool('Parent',hToolbar,'TooltipString','Save Screen','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@saveResult,1});
    load('misc/icons/save.mat'); 
    uipushtool('Parent',hToolbar,'TooltipString','Save data','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@saveResult,3});
    load('misc/icons/one.mat');
    ud.AlgoIcon(:,:,:,1) = cdata;
    hp1 = uitoggletool('Parent',hToolbar,'Separator','on','TooltipString','Caselles','State','On','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@manageAlgoItem,1});
    load('misc/icons/two.mat');
    ud.AlgoIcon(:,:,:,2) = cdata;
    hp2 = uitoggletool('Parent',hToolbar,'TooltipString','ChanVese','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@manageAlgoItem,2});
    load('misc/icons/three.mat'); 
    ud.AlgoIcon(:,:,:,3) = cdata;
    hp3 = uitoggletool('Parent',hToolbar,'TooltipString','Chunming Li','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@manageAlgoItem,3});
    load('misc/icons/four.mat'); 
    ud.AlgoIcon(:,:,:,4) = cdata;
    hp4 = uitoggletool('Parent',hToolbar,'TooltipString','Lankton','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@manageAlgoItem,4});
    load('misc/icons/five.mat'); 
    ud.AlgoIcon(:,:,:,5) = cdata;
    hp5 = uitoggletool('Parent',hToolbar,'TooltipString','Bernard','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@manageAlgoItem,5});
    load('misc/icons/six.mat'); 
    ud.AlgoIcon(:,:,:,6) = cdata;
    hp6 = uitoggletool('Parent',hToolbar,'TooltipString','Shi','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@manageAlgoItem,6});   
    load('misc/icons/seven.mat');
    ud.AlgoIcon(:,:,:,7) = cdata;
    hp7 = uitoggletool('Parent',hToolbar,'TooltipString','Personal Algorithm','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@manageAlgoItem,7});
    load('misc/icons/comp.mat'); 
    ud.AlgoIcon(:,:,:,8) = cdata;
    hp8 = uitoggletool('Parent',hToolbar,'Separator','on','TooltipString','Comparison Mode','CData',cdata,'HandleVisibility','callback','ClickedCallback',{@manageCompItem,1});
    load('misc/icons/brushR.mat');
    hp9 = uipushtool('Parent',hToolbar,'Separator','on','TooltipString','Change contour color','CData',cdata,'HandleVisibility','callback','userdata',1,'ClickedCallback',{@changeContourColor});        
    ud.handleContourColor = hp9;
    load('misc/icons/help.mat');
    uipushtool('Parent',hToolbar,'Separator','on','TooltipString','Help','CData',cdata,'HandleVisibility','callback','userdata',1,'ClickedCallback',{@open_help});            
    
    ud.handleIconAlgo = [hp1;hp2;hp3;hp4;hp5;hp6;hp7;hp8];
    ud.colorSpec = {'r','g','b','y','w','k'};
 
    %-- Create Icon for selected algorithm (in Comparison Mode) 
    load('misc/icons/oneSel.mat'); 
    ud.AlgoIconSel(:,:,:,1) = cdata;
    load('misc/icons/twoSel.mat'); 
    ud.AlgoIconSel(:,:,:,2) = cdata;
    load('misc/icons/threeSel.mat'); 
    ud.AlgoIconSel(:,:,:,3) = cdata;
    load('misc/icons/fourSel.mat'); 
    ud.AlgoIconSel(:,:,:,4) = cdata;
    load('misc/icons/fiveSel.mat'); 
    ud.AlgoIconSel(:,:,:,5) = cdata;
    load('misc/icons/sixSel.mat'); 
    ud.AlgoIconSel(:,:,:,6) = cdata;
    load('misc/icons/sevenSel.mat'); 
    ud.AlgoIconSel(:,:,:,7) = cdata;
    
    
    %-- INTERFACE -> SEGMENTATION CONTROL
    h1 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    h2 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    h3 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    h4 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    h5 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    h6 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    h7 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    h8 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    h9 = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'Visible','off','BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    hi = uipanel('parent',ud.gcf,'position',[0.03 0.05 0.30 0.9],'BorderType','line','Backgroundcolor',[87/255 86/255 84/255],'HighlightColor',[0/255 0/255 0/255]);
    ud.handleAlgoConfig = [h1;h2;h3;h4;h5;h6;h7;h8;h9;hi];
    
    
    %-- INTERFACE -> INITIALIZATION CONTROL
    hi1 = uicontrol('parent',hi,'units','normalized','position',[0 0.92 1 0.05],'Style','text','String','Initialization','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    hi2 = uipanel('parent',hi,'units','normalized','position',[0.07 0.05 0.85 0.85],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    load('misc/icons/rectangle.mat');
    hi3 = uicontrol('parent',hi2,'units','normalized','position',[0.35 0.80 0.30 0.05],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'Callback',{@creaseg_managedrawing,1});
    load('misc/icons/multirectangles.mat');
    hi4 = uicontrol('parent',hi2,'units','normalized','position',[0.35 0.70 0.30 0.05],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'Callback',{@creaseg_managedrawing,2});
    load('misc/icons/ellipse.mat');
    hi5 = uicontrol('parent',hi2,'units','normalized','position',[0.35 0.60 0.30 0.05],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'Callback',{@creaseg_managedrawing,3});
    load('misc/icons/multiellipses.mat');
    hi6 = uicontrol('parent',hi2,'units','normalized','position',[0.35 0.50 0.30 0.05],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'Callback',{@creaseg_managedrawing,4});
    load('misc/icons/manual.mat');
    hi7 = uicontrol('parent',hi2,'units','normalized','position',[0.35 0.40 0.30 0.05],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'Callback',{@creaseg_managedrawing,5});
    load('misc/icons/multimanuals.mat');
    hi8 = uicontrol('parent',hi2,'units','normalized','position',[0.35 0.30 0.30 0.05],'Style','pushbutton','CData',cdata,'Enable','On','BackgroundColor',[240/255 173/255 105/255],'Callback',{@creaseg_managedrawing,6});    
    ud.handleInit = [hi1;hi2;hi3;hi4;hi5;hi6;hi7;hi8];
    
    
    %-- INTERFACE -> CASELLES CONTROL
    h11 = uicontrol('parent',h1,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Caselles','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h12 = uipanel('parent',h1,'units','normalized','position',[0.07 0.75 0.85 0.15],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h13 = uicontrol('parent',h12,'units','normalized','position',[0.07 0.58 0.5 0.23],'Style','text','String','Number of iterations','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h14 = uicontrol('parent',h12,'units','normalized','position',[0.60 0.61 0.3 0.23],'Style','edit','String','200','BackgroundColor',[240/255 173/255 105/255]);
    h15 = uicontrol('parent',h12,'units','normalized','position',[0.07 0.13 0.5 0.23],'Style','text','String','Convergence thres.','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h16 = uicontrol('parent',h12,'units','normalized','position',[0.60 0.16 0.3 0.23],'Style','edit','String','2','BackgroundColor',[240/255 173/255 105/255]);
    h17 = uicontrol('parent',h1,'units','normalized','position',[0.1 0.66 0.85 0.04],'Style','text','String','Specific parameters','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h18 = uipanel('parent',h1,'units','normalized','position',[0.07 0.05 0.85 0.61],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h181 = uicontrol('parent',h18,'units','normalized','position',[0.07 0.88 0.5 0.05],'Style','text','String','Propagation term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h182 = uicontrol('parent',h18,'units','normalized','position',[0.55 0.88 0.3 0.055],'Style','edit','String','1','BackgroundColor',[240/255 173/255 105/255]);
    ud.handleAlgoCaselles = [h11;h12;h13;h14;h15;h16;h17;h18;h181;h182];
    

    %-- INTERFACE -> CHAN VESE CONTROL
    h21 = uicontrol('parent',h2,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Chan & Vese','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h22 = uipanel('parent',h2,'units','normalized','position',[0.07 0.75 0.85 0.15],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h23 = uicontrol('parent',h22,'units','normalized','position',[0.07 0.58 0.5 0.23],'Style','text','String','Number of iterations','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h24 = uicontrol('parent',h22,'units','normalized','position',[0.60 0.61 0.3 0.23],'Style','edit','String','200','BackgroundColor',[240/255 173/255 105/255]);
    h25 = uicontrol('parent',h22,'units','normalized','position',[0.07 0.13 0.5 0.23],'Style','text','String','Convergence thres.','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h26 = uicontrol('parent',h22,'units','normalized','position',[0.60 0.16 0.3 0.23],'Style','edit','String','2','units','normalized','BackgroundColor',[240/255 173/255 105/255]);
    h27 = uicontrol('parent',h2,'units','normalized','position',[0.1 0.66 0.85 0.04],'Style','text','String','Specific parameters','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h28 = uipanel('parent',h2,'units','normalized','position',[0.07 0.05 0.85 0.61],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h281 = uicontrol('parent',h28,'units','normalized','position',[0.07 0.88 0.5 0.05],'Style','text','String','Curvature term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h282 = uicontrol('parent',h28,'units','normalized','position',[0.55 0.88 0.3 0.055],'Style','edit','String','0.2','BackgroundColor',[240/255 173/255 105/255]);
    ud.handleAlgoChanVese = [h21;h22;h23;h24;h25;h26;h27;h28;h281;h282];
    
    
    %-- INTERFACE -> LI CONTROL
    h31 = uicontrol('parent',h3,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Chunming Li','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h32 = uipanel('parent',h3,'units','normalized','position',[0.07 0.75 0.85 0.15],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h33 = uicontrol('parent',h32,'units','normalized','position',[0.07 0.58 0.5 0.23],'Style','text','String','Number of iterations','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h34 = uicontrol('parent',h32,'units','normalized','position',[0.60 0.61 0.3 0.23],'Style','edit','String','200','BackgroundColor',[240/255 173/255 105/255]);
    h35 = uicontrol('parent',h32,'units','normalized','position',[0.07 0.13 0.5 0.23],'Style','text','String','Convergence thres.','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h36 = uicontrol('parent',h32,'units','normalized','position',[0.60 0.16 0.3 0.23],'Style','edit','String','2','units','normalized','BackgroundColor',[240/255 173/255 105/255]);
    h37 = uicontrol('parent',h3,'units','normalized','position',[0.1 0.66 0.85 0.04],'Style','text','String','Specific parameters','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h38 = uipanel('parent',h3,'units','normalized','position',[0.07 0.05 0.85 0.61],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h39 = uicontrol('parent',h38,'units','normalized','position',[0.07 0.88 0.5 0.05],'Style','text','String','Length term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h391 = uicontrol('parent',h38,'units','normalized','position',[0.55 0.88 0.3 0.055],'Style','edit','String','0.003','BackgroundColor',[240/255 173/255 105/255]);
    h392 = uicontrol('parent',h38,'units','normalized','position',[0.07 0.78 0.5 0.05],'Style','text','String','Regularization term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h393 = uicontrol('parent',h38,'units','normalized','position',[0.55 0.78 0.3 0.055],'Style','edit','String','1','BackgroundColor',[240/255 173/255 105/255]);
    h394 = uicontrol('parent',h38,'units','normalized','position',[0.07 0.68 0.5 0.05],'Style','text','String','Scale term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h395 = uicontrol('parent',h38,'units','normalized','position',[0.55 0.68 0.3 0.055],'Style','edit','String','7','BackgroundColor',[240/255 173/255 105/255]);
    ud.handleAlgoLi = [h31;h32;h33;h34;h35;h36;h37;h38;h39;h391;h392;h393;h394;h395];
    
    %-- INTERFACE -> LANKTON CONTROL
    h41 = uicontrol('parent',h4,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Lankton','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h42 = uipanel('parent',h4,'units','normalized','position',[0.07 0.75 0.85 0.15],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h43 = uicontrol('parent',h42,'units','normalized','position',[0.07 0.58 0.5 0.23],'Style','text','String','Number of iterations','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h44 = uicontrol('parent',h42,'units','normalized','position',[0.60 0.61 0.3 0.23],'Style','edit','String','200','BackgroundColor',[240/255 173/255 105/255]);
    h45 = uicontrol('parent',h42,'units','normalized','position',[0.07 0.13 0.5 0.23],'Style','text','String','Convergence thres.','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h46 = uicontrol('parent',h42,'units','normalized','position',[0.60 0.16 0.3 0.23],'Style','edit','String','2','units','normalized','BackgroundColor',[240/255 173/255 105/255]);
    h47 = uicontrol('parent',h4,'units','normalized','position',[0.1 0.66 0.85 0.04],'Style','text','String','Specific parameters','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h48 = uipanel('parent',h4,'units','normalized','position',[0.07 0.05 0.85 0.61],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h49 = uicontrol('parent',h48,'units','normalized','position',[0.07 0.88 0.5 0.05],'Style','text','String','Feature type','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h491 = uicontrol('parent',h48,'units','normalized','position',[0.55 0.90 0.39 0.04],'Style','popupmenu','String',{'Yezzi','Chan Vese'},'FontSize',9,'BackgroundColor',[240/255, 173/255, 105/255]);
    h492 = uicontrol('parent',h48,'units','normalized','position',[0.07 0.78 0.5 0.05],'Style','text','String','Neighborhood','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h493 = uicontrol('parent',h48,'units','normalized','position',[0.55 0.80 0.39 0.04],'Style','popupmenu','String',{'Circle','Square'},'FontSize',9,'BackgroundColor',[240/255, 173/255, 105/255]);
    h494 = uicontrol('parent',h48,'units','normalized','position',[0.07 0.68 0.5 0.05],'Style','text','String','Curvature term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h495 = uicontrol('parent',h48,'units','normalized','position',[0.55 0.68 0.3 0.06],'Style','edit','String','0.2','BackgroundColor',[240/255 173/255 105/255]);
    h496 = uicontrol('parent',h48,'units','normalized','position',[0.07 0.58 0.5 0.05],'Style','text','String','Radius term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h497 = uicontrol('parent',h48,'units','normalized','position',[0.55 0.58 0.3 0.06],'Style','edit','String','9','BackgroundColor',[240/255 173/255 105/255]);    
    ud.handleAlgoLankton = [h41;h42;h43;h44;h45;h46;h47;h48;h49;h491;h492;h493;h494;h495;h496;h497];    
    
    
    %-- INTERFACE -> BERNARD CONTROL
    h51 = uicontrol('parent',h5,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Bernard','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h52 = uipanel('parent',h5,'units','normalized','position',[0.07 0.75 0.85 0.15],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h53 = uicontrol('parent',h52,'units','normalized','position',[0.07 0.58 0.5 0.23],'Style','text','String','Number of iterations','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h54 = uicontrol('parent',h52,'units','normalized','position',[0.60 0.61 0.3 0.23],'Style','edit','String','200','BackgroundColor',[240/255 173/255 105/255]);
    h55 = uicontrol('parent',h52,'units','normalized','position',[0.07 0.13 0.5 0.23],'Style','text','String','Convergence thres.','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h56 = uicontrol('parent',h52,'units','normalized','position',[0.60 0.16 0.3 0.23],'Style','edit','String','2','units','normalized','BackgroundColor',[240/255 173/255 105/255]);
    h57 = uicontrol('parent',h5,'units','normalized','position',[0.1 0.66 0.85 0.04],'Style','text','String','Specific parameters','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h58 = uipanel('parent',h5,'units','normalized','position',[0.07 0.05 0.85 0.61],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h59 = uicontrol('parent',h58,'units','normalized','position',[0.07 0.88 0.5 0.05],'Style','text','String','Scale term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h591 = uicontrol('parent',h58,'units','normalized','position',[0.55 0.88 0.3 0.055],'Style','edit','String','1','BackgroundColor',[240/255 173/255 105/255]);
    ud.handleAlgoBernard = [h51;h52;h53;h54;h55;h56;h57;h58;h59;h591];
    
    
    %-- INTERFACE -> SHI CONTROL
    h61 = uicontrol('parent',h6,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Shi','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h62 = uipanel('parent',h6,'units','normalized','position',[0.07 0.83 0.85 0.07],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h621 = uicontrol('parent',h62,'units','normalized','position',[0.07 0.2 0.5 0.5],'Style','text','String','Number of iterations','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h622 = uicontrol('parent',h62,'units','normalized','position',[0.60 0.25 0.3 0.5],'Style','edit','String','200','BackgroundColor',[240/255 173/255 105/255]);
    h63 = uicontrol('parent',h6,'units','normalized','position',[0.1 0.76 0.85 0.04],'Style','text','String','Specific parameters','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h64 = uipanel('parent',h6,'units','normalized','position',[0.07 0.05 0.85 0.71],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h641 = uicontrol('parent',h64,'units','normalized','position',[0.07 0.89 0.5 0.05],'Style','text','String','Na term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h642 = uicontrol('parent',h64,'units','normalized','position',[0.55 0.90 0.3 0.047],'Style','edit','String','30','BackgroundColor',[240/255 173/255 105/255]);
    h643 = uicontrol('parent',h64,'units','normalized','position',[0.07 0.81 0.5 0.05],'Style','text','String','Ns term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h644 = uicontrol('parent',h64,'units','normalized','position',[0.55 0.82 0.3 0.047],'Style','edit','String','3','BackgroundColor',[240/255 173/255 105/255]);
    h645 = uicontrol('parent',h64,'units','normalized','position',[0.07 0.73 0.5 0.05],'Style','text','String','Sigma term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h646 = uicontrol('parent',h64,'units','normalized','position',[0.55 0.74 0.3 0.047],'Style','edit','String','3','BackgroundColor',[240/255 173/255 105/255]);
    h647 = uicontrol('parent',h64,'units','normalized','position',[0.07 0.65 0.5 0.05],'Style','text','String','Ng term','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h648 = uicontrol('parent',h64,'units','normalized','position',[0.55 0.66 0.3 0.047],'Style','edit','String','1','BackgroundColor',[240/255 173/255 105/255]);
    ud.handleAlgoShi = [h61;h62;h621;h622;h63;h64;h641;h642;h643;h644;h645;h646;h647;h648];
    
        
    %-- INTERFACE -> PERSONAL ALGO CONTROL
    h71 = uicontrol('parent',h7,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Personal Algorithm','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h72 = uipanel('parent',h7,'units','normalized','position',[0.07 0.75 0.85 0.15],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h73 = uicontrol('parent',h72,'units','normalized','position',[0.07 0.58 0.5 0.23],'Style','text','String','Number of iterations','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h74 = uicontrol('parent',h72,'units','normalized','position',[0.60 0.61 0.3 0.23],'Style','edit','String','200','BackgroundColor',[240/255 173/255 105/255]);
    h75 = uicontrol('parent',h72,'units','normalized','position',[0.07 0.13 0.5 0.23],'Style','text','String','Convergence thres.','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h76 = uicontrol('parent',h72,'units','normalized','position',[0.60 0.16 0.3 0.23],'Style','edit','String','2','BackgroundColor',[240/255 173/255 105/255]);
    h77 = uicontrol('parent',h7,'units','normalized','position',[0.1 0.66 0.85 0.04],'Style','text','String','Specific parameters','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h78 = uipanel('parent',h7,'units','normalized','position',[0.07 0.05 0.85 0.61],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h781 = uicontrol('parent',h78,'units','normalized','position',[0.07 0.89 0.5 0.05],'Style','text','String','Parameter 1','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h782 = uicontrol('parent',h78,'units','normalized','position',[0.55 0.90 0.3 0.047],'Style','edit','String','1','BackgroundColor',[240/255 173/255 105/255]);
    h783 = uicontrol('parent',h78,'units','normalized','position',[0.07 0.81 0.5 0.05],'Style','text','String','Parameter 2','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h784 = uicontrol('parent',h78,'units','normalized','position',[0.55 0.82 0.3 0.047],'Style','edit','String','1','BackgroundColor',[240/255 173/255 105/255]);
    ud.handleAlgoPersonal = [h71;h72;h73;h74;h75;h76;h77;h78;h781;h782;h783;h784]; 
    

    %-- INTERFACE -> COMPARISON CONTROL
    h81 = uicontrol('parent',h8,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Comparison Mode','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h82 = uipanel('parent',h8,'units','normalized','position',[0.07 0.83 0.85 0.07],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h821 = uicontrol('parent',h82,'units','normalized','position',[0.07 0.2 0.5 0.5],'Style','text','String','Number of iterations','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h822 = uicontrol('parent',h82,'units','normalized','position',[0.60 0.25 0.3 0.5],'Style','edit','String','200','callback',{@setAllNbIt},'BackgroundColor',[240/255 173/255 105/255]);
    h83 = uicontrol('parent',h8,'units','normalized','position',[0.1 0.77 0.85 0.03],'Style','text','String','Algorithms','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h84 = uipanel('parent',h8,'units','normalized','position',[0.07 0.52 0.85 0.25],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h841 = uicontrol('parent',h84,'units','normalized','position',[0.07 0.83 0.85 0.12],'Style','checkbox','String','1- Caselles','FontSize',9,'callback',{@SetIconSelected,1},'BackgroundColor',[113/255 113/255 113/255]);
    h842 = uicontrol('parent',h84,'units','normalized','position',[0.07 0.70 0.85 0.12],'Style','checkbox','String','2- Chan & Vese','FontSize',9,'callback',{@SetIconSelected,2},'BackgroundColor',[113/255 113/255 113/255]);
    h843 = uicontrol('parent',h84,'units','normalized','position',[0.07 0.57 0.85 0.12],'Style','checkbox','String','3- Chunming Li','FontSize',9,'callback',{@SetIconSelected,3},'BackgroundColor',[113/255 113/255 113/255]);
    h844 = uicontrol('parent',h84,'units','normalized','position',[0.07 0.44 0.85 0.12],'Style','checkbox','String','4- Lankton','FontSize',9,'callback',{@SetIconSelected,4},'BackgroundColor',[113/255 113/255 113/255]);
    h845 = uicontrol('parent',h84,'units','normalized','position',[0.07 0.31 0.85 0.12],'Style','checkbox','String','5- Bernard','FontSize',9,'callback',{@SetIconSelected,5},'BackgroundColor',[113/255 113/255 113/255]);
    h846 = uicontrol('parent',h84,'units','normalized','position',[0.07 0.18 0.85 0.12],'Style','checkbox','String','6- Shi','FontSize',9,'callback',{@SetIconSelected,6},'BackgroundColor',[113/255 113/255 113/255]);
    h847 = uicontrol('parent',h84,'units','normalized','position',[0.07 0.05 0.85 0.12],'Style','checkbox','String','7- Personal Algorithm','FontSize',9,'callback',{@SetIconSelected,7},'BackgroundColor',[113/255 113/255 113/255]);
    h85 = uicontrol('parent',h8,'units','normalized','position',[0.1  0.46 0.85 0.03],'Style','text','String','Reference','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h86 = uipanel('parent',h8,'units','normalized','position',[0.07 0.34 0.85 0.12],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h861 = uicontrol('parent',h86,'units','normalized','position',[0.15 0.58 0.30 0.31],'Style','pushbutton','String','Load','Backgroundcolor',[240/255 173/255 105/255],'callback','creaseg_loadreference','Enable','off');
    h862 = uicontrol('parent',h86,'units','normalized','position',[0.53 0.58 0.30 0.31],'Style','pushbutton','String','Create','Backgroundcolor',[240/255 173/255 105/255],'callback','creaseg_createreference','Enable','off');
    h863 = uicontrol('parent',h86,'units','normalized','position',[0.07 0.18 0.50 0.25],'Style','text','String','Interpolation Type','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h864 = uicontrol('parent',h86,'units','normalized','position',[0.63 0.20 0.30 0.25],'Style','popupmenu','String',{'Polygon','Spline'},'FontSize',9,'BackgroundColor',[240/255, 173/255, 105/255]);
    h87 = uipanel('parent',h8,'units','normalized','position',[0.07 0.16 0.85 0.12],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h871 = uicontrol('parent',h87,'units','normalized','position',[0.07 0.55 0.40 0.29],'Style','text','String','Similarity Criteria','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[113/255 113/255 113/255]);
    h872 = uicontrol('parent',h87,'units','normalized','position',[0.53 0.58 0.40 0.32],'Style','popupmenu','String',{'Dice','PSNR','Hausdorff','MSSD'},'FontSize',9,'BackgroundColor',[240/255, 173/255, 105/255]);
    h873 = uicontrol('parent',h87,'units','normalized','position',[0.07 0.18 0.85 0.32],'Style','checkbox','String','Intermediate Output','BackgroundColor',[113/255 113/255 113/255],'Value',1);
    h88 = uicontrol('parent',h8,'units','normalized','position',[0.3 0.086 0.40 0.035],'Style','pushbutton','String','See Results','callback',{@manageCompItem,2},'Enable','off','Backgroundcolor',[240/255 173/255 105/255]);
    ud.handleAlgoComparison = [h81;h82;h821;h822;h83;h84;h841;h842;h843;h844;h845;h846;h847;h85;h86;h861;h862;h863;h864;h87;h871;h872;h873;h88]; 
    
    
    %-- INTERFACE -> RESULTS CONTROL
    h91 = uicontrol('parent',h9,'units','normalized','position',[0.0 0.92 1.0 0.05],'Style','text','String','Results','FontSize',10,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    if ud.Version
        h92 = uitable('parent',h9,'units','normalized','position',[0.07 0.62 0.85 0.3],'ColumnName',{'Calculation Time', 'Dice'},'ColumnFormat',{'Bank', 'Bank'},'RowName',{'1','2','3','4','5','6','7'});
    else
        h92 = uicontrol('parent',h9,'units','normalized','position',[0.07 0.62 0.85 0.3],'Style','text','String','Results cannot be displayed here because your Matlab version do not support uitable. Therefore the results are saved in the file results.txt',...
            'FontSize',12,'HorizontalAlignment','center','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 0 0]);
    end
    h93 = uicontrol('parent',h9,'units','normalized','position',[0.1 0.55 0.85 0.03],'Style','text','String','Visual Criteria','FontSize',9,'HorizontalAlignment','left','Backgroundcolor',[87/255 86/255 84/255],'Foregroundcolor',[255/255 255/255 255/255]);
    h94 = uipanel('parent',h9,'units','normalized','position',[0.07 0.25 0.85 0.3],'BorderType','line','Backgroundcolor',[113/255 113/255 113/255],'HighlightColor',[0/255 0/255 0/255]);
    h941 = uicontrol('parent',h94,'units','normalized','position',[0.07 0.87 0.85 0.11],'Style','checkbox','String','Reference (White)','FontSize',9,'callback',{@creaseg_plotresults},'BackgroundColor',[113/255 113/255 113/255]);
    h942 = uicontrol('parent',h94,'units','normalized','position',[0.07 0.75 0.85 0.11],'Style','checkbox','String','1- Caselles (Yellow)','FontSize',9,'callback',{@creaseg_plotresults},'BackgroundColor',[113/255 113/255 113/255]);
    h943 = uicontrol('parent',h94,'units','normalized','position',[0.07 0.63 0.85 0.11],'Style','checkbox','String','2- Chan & Vese (Blue)','FontSize',9,'callback',{@creaseg_plotresults},'BackgroundColor',[113/255 113/255 113/255]);
    h944 = uicontrol('parent',h94,'units','normalized','position',[0.07 0.51 0.85 0.11],'Style','checkbox','String','3- Chunming Li (Cyan)','FontSize',9,'callback',{@creaseg_plotresults},'BackgroundColor',[113/255 113/255 113/255]);
    h945 = uicontrol('parent',h94,'units','normalized','position',[0.07 0.39 0.85 0.11],'Style','checkbox','String','4- Lankton (Red)','FontSize',9,'callback',{@creaseg_plotresults},'BackgroundColor',[113/255 113/255 113/255]);
    h946 = uicontrol('parent',h94,'units','normalized','position',[0.07 0.27 0.85 0.11],'Style','checkbox','String','5- Bernard (Green)','FontSize',9,'callback',{@creaseg_plotresults},'BackgroundColor',[113/255 113/255 113/255]);
    h947 = uicontrol('parent',h94,'units','normalized','position',[0.07 0.15 0.85 0.11],'Style','checkbox','String','6- Shi (Magenta)','FontSize',9,'callback',{@creaseg_plotresults},'BackgroundColor',[113/255 113/255 113/255]);
    h948 = uicontrol('parent',h94,'units','normalized','position',[0.07 0.03 0.85 0.11],'Style','checkbox','String','7- Personal Algorithm (Black)','FontSize',9,'callback',{@creaseg_plotresults},'BackgroundColor',[113/255 113/255 113/255]);
    h95 = uicontrol('parent',h9,'units','normalized','position',[0.3 0.086 0.4 0.035],'Style','pushbutton','String','See Parameters','callback',{@manageCompItem,1},'Backgroundcolor',[240/255 173/255 105/255]);
    ud.handleAlgoResults = [h91;h92;h93;h94;h941;h942;h943;h944;h945;h946;h947;h948;h95]; 
    if ud.Version
        SetTableColumnWidth(ud);
    end
    
    %-- create structure to image handle
    fd = [];
    fd.data = [];
    fd.visu = [];
    fd.tagImage = 0;
    fd.levelset = [];
    fd.visuTmp = [];
    fd.levelsetTmp = [];
    fd.translation = [0 0];
    fd.info = [];
    fd.reference = [];
    fd.points = [];
    fd.pointsRef = [];
    fd.handleRect = {};
    fd.handleElliRect = {};
    fd.handleManual = {};
    fd.handleReference = {};
    fd.method = '';
    fd.drawingManualFlag = 0;
    fd.drawingMultiManualFlag = 0;
    
    %-- Set function to special events
    set(ud.imageId,'userdata',fd);
    set(ud.gcf,'WindowButtonMotionFcn',{@creaseg_mouseMove},'visible','on','HandleVisibility','callback','interruptible','off');
    set(ud.gcf,'CloseRequestFcn',{@closeInterface});   
    
    %-- ATTACH UD STRUCTURE TO FIG HANDLE
    set(ud.gcf,'userdata',ud);
    set(ud.gcf,'ResizeFcn',@figResize);



%---------------------------------------------------------------------
%-- AUXILIARY FUNCTIONS ----------------------------------------------
%---------------------------------------------------------------------
    

%------------------------------------------------------------------    
function manageAlgoItem(src,evt,num)

    fig = gcbf;
    ud = get(fig,'userdata');     
    
    %-- cancel drawing mode
    set(ud.buttonAction(1),'background',[240/255 173/255 105/255]);    
    for k=3:size(ud.handleInit,1)
        set(ud.handleInit(k),'BackgroundColor',[240/255 173/255 105/255]);
    end
    
    %-- check whether the create button of comparison mode is unselect
    if ( get(ud.handleAlgoComparison(17),'BackgroundColor')~=[160/255 130/255 95/255] )    
        set(ud.gcf,'WindowButtonDownFcn','');
        set(ud.gcf,'WindowButtonUpFcn','');
        %-- put pointer button to select
        set(ud.buttonAction(3),'BackgroundColor',[160/255 130/255 95/255]);
    end    
    %-- put run button to unselect    
    set(ud.buttonAction(2),'BackgroundColor',[240/255 173/255 105/255]);
    
    %--
    if strcmp(get(ud.handleIconAlgo(8),'State'),'off')||(get(ud.handleAlgoComparison(6+num),'Value')==0)
        
        if strcmp(get(ud.handleIconAlgo(8),'State'),'on')
           EnableDisableNbit(ud,'on');
        end
        
        for k=1:size(ud.handleAlgoConfig,1)
            set(ud.handleAlgoConfig(k),'Visible','off');
            if k<size(ud.handleAlgoConfig,1)-1
                set(ud.handleIconAlgo(k),'State','off');
            end
        end
        set(ud.handleAlgoConfig(num),'Visible','on');
        set(ud.handleIconAlgo(num),'State','on');
        %--
        setAllIcon(ud);
        %--
        for k=1:size(ud.handleMenuAlgorithms,1)
            set(ud.handleMenuAlgorithms(k),'label',ud.handleMenuAlgorithmsName{k},'ForegroundColor',[0/255, 0/255, 0/255],'Checked','off');
        end
        set(ud.handleMenuAlgorithms(num),'label',ud.handleMenuAlgorithmsName{num},'ForegroundColor',[255/255, 0/255, 0/255],'Checked','on');
        
    else
        
        for k=1:size(ud.handleAlgoConfig,1)
            set(ud.handleAlgoConfig(k),'Visible','off');
            if k<size(ud.handleAlgoConfig,1)-1
                set(ud.handleIconAlgo(k),'State','off');
            end
        end
        set(ud.handleAlgoConfig(num),'Visible','on');
        set(ud.handleIconAlgo(8),'State','on');
        
    end
    
    
%--    
function manageCompItem(src, evt, num)
    
    fig = gcbf;
    ud = get(fig,'userdata');    
    EnableDisableNbit(ud,'off');
    
    %-- cancel drawing mode
    set(ud.buttonAction(1),'background',[240/255 173/255 105/255]);    
    for k=3:size(ud.handleInit,1)
        set(ud.handleInit(k),'BackgroundColor',[240/255 173/255 105/255]);
    end
    
    %-- check whether the create button of comparison mode is unselect
    if ( get(ud.handleAlgoComparison(17),'BackgroundColor')~=[160/255 130/255 95/255] )    
        set(ud.gcf,'WindowButtonDownFcn','');
        set(ud.gcf,'WindowButtonUpFcn','');
        %-- put pointer button to select
        set(ud.buttonAction(3),'BackgroundColor',[160/255 130/255 95/255]);
    end    
    %-- put run button to unselect    
    set(ud.buttonAction(2),'BackgroundColor',[240/255 173/255 105/255]); 
    
    %--
    for k=1:size(ud.handleAlgoConfig,1)
        set(ud.handleAlgoConfig(k),'Visible','off');
        if k<size(ud.handleAlgoConfig,1)-1
            set(ud.handleIconAlgo(k),'State','off');
        end
    end
    if num == 1
        set(ud.handleAlgoConfig(8),'Visible','on');
        set(ud.handleIconAlgo(8),'State','on');
    else
        set(ud.handleAlgoConfig(9),'Visible','on');
        set(ud.handleIconAlgo(8),'State','on')
        creaseg_plotresults(src,evt);
    end
    
    for k=1:size(ud.handleMenuAlgorithms,1)-1
        set(ud.handleMenuAlgorithms(k),'label',ud.handleMenuAlgorithmsName{k},'ForegroundColor',[0/255, 0/255, 0/255],'Checked','off');
    end
    set(ud.handleMenuAlgorithms(8),'label',ud.handleMenuAlgorithmsName{8},'ForegroundColor',[255/255, 0/255, 0/255],'Checked','on');

    setAllIcon(ud);
    setAllNbIt(src,evt);

    
%--
function manageInit(src,evt)
    
    fig = gcbf;
    ud = get(fig,'userdata');

    for k=1:size(ud.handleAlgoConfig,1)
        set(ud.handleAlgoConfig(k),'Visible','off');
    end
    set(ud.handleAlgoConfig(end),'Visible','on');
     
    
%--    
function closeInterface(src,evt)    
    
    delete(gcbf);
        
%--
function figResize(src,evt)

    fig = gcbf;
    ud = get(fig,'userdata');
    SetTextIntensityPosition(ud);
    if ud.Version
        SetTableColumnWidth(ud);
    end    
   
    
%--
function SetTableColumnWidth(ud)
 
    ss = get(ud.gcf,'position');
    posPanel = get(ud.handleAlgoConfig(9),'position');
    posTable = get(ud.handleAlgoResults(2),'position');
    w = ss(3)*posPanel(3)*posTable(3)-35;
    set(ud.handleAlgoResults(2),'ColumnWidth',{w/2,w/2});
       
    
%--    
function SetTextIntensityPosition(ud)
    
    ss = get(ud.gcf,'position');
    pos = get(ud.panelText,'position');
    w = ss(3)*pos(3);
    h = ss(4)*pos(4);    
    a = w/5;
    c = w-2*a;
    b = 3*h/8;
    d = h-2*b;
    set(ud.txtPositionIntensity,'units','pixels','position',[a b c d]);

    
%-- save images
function saveResult(src,evt,num)    

    fig = gcbf;
    ud = get(fig,'userdata');
    fd = get(ud.imageId,'userdata');
        
    img = fd.visu;
    method = fd.method;
    cl = ud.colorSpec(get(ud.handleContourColor,'userdata'));
    S = method;
            
    switch method
        case 'Reference'
            levelset = fd.reference;
        case 'Comparison'
            if num == 1
                num = 2;
            end
            levelset = zeros(size(img,1),size(img,2),8);
            levelset(:,:,1) = fd.reference;
            levelset(:,:,2:end) = fd.seg;
            cl = {'w','y','b','c','r','g','m','k'};
            S = ['Reference  ';'Caselles   ';'Chan & Vese';'Chunming Li'; ...
                 'Lankton    ';'Bernard    ';'Shi        ';'Personal   '];
        otherwise
            levelset = fd.levelset;
    end
    method = S;
    
    switch num
        
        case 1  %-- save screen (one contour)
            
            if ( ~isempty(img) )
                img = img - min(img(:));
                img = uint8(255*img/max(img(:)));
                imgrgb = repmat(img,[1 1 3]);
                if ( (~isempty(levelset)) && (size(img,1)==size(levelset,1)) && (size(img,2)==size(levelset,2)))
                    axes(get(ud.imageId,'parent'));
                    delete(findobj(get(ud.imageId,'parent'),'type','line'));                    
                    hold on; [c,h] = contour(levelset,[0 0],cl{1},'Linewidth',3); hold off;
                    delete(h);
                    tt = round(c);
                    %--
                    test = isequal(size(c,2),0);
                    while (test==false)
                        s = c(2,1);
                        if ( s == (size(c,2)-1) )
                            t = c;
                            hold on; plot(t(1,2:end)',t(2,2:end)',cl{1},'Linewidth',3);
                            test = true;
                        else
                            t = c(:,2:s+1);
                            hold on; plot(t(1,1:end)',t(2,1:end)',cl{1},'Linewidth',3);
                            c = c(:,s+2:end);
                        end
                    end
                    %--
                    tt = tt(:, (tt(1,:)~=0) & (tt(1,:)>=1) & (tt(1,:)<=size(img,2)) ...
                         & (tt(2,:)>=1) & (tt(2,:)<=size(img,1)));
                    imgContour = repmat(0,size(img));
                    for k=1:size(tt,2)
                        imgContour(tt(2,k),tt(1,k),1) = 1;                        
                    end
                    if ( min(size(img)) <= 225 )
                        se = strel('arbitrary',[1 1; 1 1]);
                    elseif ( min(size(img)) <= 450 )
                        se = strel('disk',1);
                    elseif ( min(size(img)) <= 775 )
                        se = strel('disk',2);
                    else
                        se = strel('disk',3);
                    end
                    imgContour = imdilate(imgContour,se);
                    [y,x] = find(imgContour~=0);                    
                    switch cl{1}
                        case 'r'
                            val = [255,0,0];
                        case 'g'
                            val = [0,255,0];
                        case 'b'
                            val = [0,0,255];
                        case 'y'
                            val = [255,255,0];
                        case 'w'
                            val = [255,255,255];
                        case 'k'
                            val = [0,0,0];
                    end
                    for k=1:size(x,1)
                        imgrgb(y(k),x(k),1) = val(1);
                        imgrgb(y(k),x(k),2) = val(2);
                        imgrgb(y(k),x(k),3) = val(3);
                    end
                    set(ud.imageId,'userdata',fd);
                    set(fig,'userdata',ud);
                end
                [filename, pathname] = uiputfile({'*.png','Png (*.png)';...
                    '*.bmp','Bmp (*.bmp)';'*.tif','Tif (*.tif)';...
                    '*.gif','Gif (*.gif)';'*.jpg','Jpg (*.jpg)'},'Save as');
                if ( ~isempty(pathname) && ~isempty(filename) )
                    imwrite(imgrgb,[pathname filename]);
                end
            end

        case 2  %-- save screen (Multiple contours)
            
            if ( ~isempty(img) )
                img = img - min(img(:));
                img = uint8(255*img/max(img(:)));
                imgrgb = repmat(img,[1 1 3]);
                if ( (~isempty(levelset)) && (size(img,1)==size(levelset,1)) && (size(img,2)==size(levelset,2)))
                    for i = 1:1:size(levelset,3)
                        if (max(max(levelset(:,:,i)))~=0) && (get(ud.handleAlgoResults(4+i),'Value'))
                            axes(get(ud.imageId,'parent'));
                            hold on; [c,h] = contour(levelset(:,:,i),[0 0],cl{i},'Linewidth',3); hold off;
                            delete(h);
                            tt = round(c);
                            %--
                            test = isequal(size(c,2),0);
                            while (test==false)
                                s = c(2,1);
                                if ( s == (size(c,2)-1) )
                                    t = c;
                                    hold on; plot(t(1,2:end)',t(2,2:end)',cl{i},'Linewidth',3);
                                    test = true;
                                else
                                    t = c(:,2:s+1);
                                    hold on; plot(t(1,1:end)',t(2,1:end)',cl{i},'Linewidth',3);
                                    c = c(:,s+2:end);
                                end
                            end
                            %--
                            tt = tt(:, (tt(1,:)~=0) & (tt(1,:)>=1) & (tt(1,:)<=size(img,2)) ...
                                 & (tt(2,:)>=1) & (tt(2,:)<=size(img,1)));
                            imgContour = repmat(0,size(img));
                            for k=1:size(tt,2)
                                imgContour(tt(2,k),tt(1,k),1) = 1;                        
                            end
                            if ( min(size(img)) <= 225 )
                                se = strel('arbitrary',[1 1; 1 1]);
                            elseif ( min(size(img)) <= 450 )
                                se = strel('disk',1);
                            elseif ( min(size(img)) <= 775 )
                                se = strel('disk',2);
                            else
                                se = strel('disk',3);
                            end
                            imgContour = imdilate(imgContour,se);
                            [y,x] = find(imgContour~=0);                    
                            switch cl{i}
                                case 'r'
                                    val = [255,0,0];
                                case 'g'
                                    val = [0,255,0];
                                case 'b'
                                    val = [0,0,255];
                                case 'y'
                                    val = [255,255,0];
                                case 'w'
                                    val = [255,255,255];
                                case 'k'
                                    val = [0,0,0];
                                case 'm'
                                    val = [255,0,255];
                                case 'c'
                                    val = [0,255,255];
                            end
                            for k=1:size(x,1)
                                imgrgb(y(k),x(k),1) = val(1);
                                imgrgb(y(k),x(k),2) = val(2);
                                imgrgb(y(k),x(k),3) = val(3);
                            end
                            set(ud.imageId,'userdata',fd);
                            set(fig,'userdata',ud);
                        end
                    end
                end
                [filename, pathname] = uiputfile({'*.png','Png (*.png)';...
                    '*.bmp','Bmp (*.bmp)';'*.tif','Tif (*.tif)';...
                    '*.gif','Gif (*.gif)';'*.jpg','Jpg (*.jpg)'},'Save as');
                if ( ~isempty(pathname) && ~isempty(filename) )
                    imwrite(imgrgb,[pathname filename]);
                end
            end
        
        case 3  %-- save data
            
            if ( ~isempty(img) )
                if ( (~isempty(levelset)) )
                    result = struct('img',img,'levelset',levelset, 'Method', method);
                else
                    result = img;
                end                
                [filename, pathname] = uiputfile({'*.mat','MAT-files (*.mat)'},'Save as'); 
                if ( ~isempty(pathname) && ~isempty(filename) )
                    save([pathname filename],'result');
                end
            end
            
    end
    
 
%-- change color of contour display on the image
function changeContourColor(src,evt)
    
    fig = findobj(0,'tag','creaseg');
    ud = get(fig,'userdata');
    fd = get(ud.imageId,'userdata');

    pos = get(src,'userdata');
    if (pos==6)
        pos = 1;
    else
        pos = pos+1;
    end
    filename = {'brushR' 'brushG' 'brushB' 'brushY' 'brushW' 'brushK'};
    load(['misc/icons/' filename{pos} '.mat']);
    set(src,'cdata',cdata,'userdata',pos);
    
    %--
    if ( ~isempty(fd.data) )
        switch ud.LastPlot
            case 'levelset'
                if ( (~isempty(fd.levelset)) && (size(fd.data,1)==size(fd.levelset,1)) ...
                        && (size(fd.data,2)==size(fd.levelset,2)))

                    cl = ud.colorSpec(pos);                    
                    if ( size(fd.handleRect,2) > 0 )
                        for k=size(fd.handleRect,2):-1:1
                            set(fd.handleRect{k},'EdgeColor',cl{1});
                        end
                    elseif ( size(fd.handleElliRect,2) > 0 )
                        for k=size(fd.handleElliRect,2):-1:1
                            set(fd.handleElliRect{k}(2),'color',cl{1});
                        end
                    elseif ( size(fd.handleManual,2) > 0 )    
                        for k=size(fd.handleManual,2):-1:1
                            if ( (size(fd.handleManual{k},1)==1) && (fd.handleManual{k}>0) )
                                set(fd.handleManual{k},'color',cl{1});                              
                            end
                        end        
                    else
                        axes(get(ud.imageId,'parent'));
                        delete(findobj(get(ud.imageId,'parent'),'type','line'));
                        hold on; [c,h] = contour(fd.levelset,[0 0],cl{1},'Linewidth',3); hold off;
                        delete(h);
                        test = isequal(size(c,2),0);
                        while (test==false)
                            s = c(2,1);
                            if ( s == (size(c,2)-1) )
                                t = c;
                                hold on; plot(t(1,2:end)',t(2,2:end)',cl{1},'Linewidth',3);
                                test = true;
                            else
                                t = c(:,2:s+1);
                                hold on; plot(t(1,1:end)',t(2,1:end)',cl{1},'Linewidth',3);
                                c = c(:,s+2:end);
                            end
                        end                        
                    end
                end    
                
            case 'reference'
                if ( (~isempty(fd.reference)) && (size(fd.data,1)==size(fd.reference,1)) ...
                        && (size(fd.data,2)==size(fd.reference,2)))

                    cl = ud.colorSpec(pos);    
                    axes(get(ud.imageId,'parent'));
                    delete(findobj(get(ud.imageId,'parent'),'type','line'));
                    hold on; [c,h] = contour(fd.reference,[0 0],cl{1},'Linewidth',3); hold off;
                    delete(h);
                    test = isequal(size(c,2),0);
                    while (test==false)
                        s = c(2,1);
                        if ( s == (size(c,2)-1) )
                            t = c;
                            hold on; plot(t(1,2:end)',t(2,2:end)',cl{1},'Linewidth',3);
                            test = true;
                        else
                            t = c(:,2:s+1);
                            hold on; plot(t(1,1:end)',t(2,1:end)',cl{1},'Linewidth',3);
                            c = c(:,s+2:end);
                        end
                    end    
                end 
        end
                
    end
    
   
%--
function SetIconSelected(src,evt,num)

    fig = gcbf;
    ud = get(fig,'userdata');

    if get(ud.handleAlgoComparison(6+num),'Value')
        set(ud.handleIconAlgo(num),'cdata',ud.AlgoIconSel(:,:,:,num))        
        set(ud.handleMenuAlgorithms(num),'label',ud.handleMenuAlgorithmsName{num},'ForegroundColor',[0/255, 153/255, 51/255],'Checked','on');
    else
        set(ud.handleIconAlgo(num),'cdata',ud.AlgoIcon(:,:,:,num)) 
        set(ud.handleMenuAlgorithms(num),'label',ud.handleMenuAlgorithmsName{num},'ForegroundColor',[0/255, 0/255, 0/255],'Checked','off');
    end
   
    
%--    
function setAllIcon(ud)
  
    for i=1:1:7
        if (get(ud.handleAlgoComparison(6+i),'Value')) && strcmp(get(ud.handleIconAlgo(8),'State'),'on')
            set(ud.handleIconAlgo(i),'cdata',ud.AlgoIconSel(:,:,:,i));
            set(ud.handleMenuAlgorithms(i),'label',ud.handleMenuAlgorithmsName{i},'ForegroundColor',[0/255, 153/255, 51/255],'Checked','on');
        else
            set(ud.handleIconAlgo(i),'cdata',ud.AlgoIcon(:,:,:,i));
            set(ud.handleMenuAlgorithms(i),'label',ud.handleMenuAlgorithmsName{i},'ForegroundColor',[0/255, 0/255, 0/255],'Checked','off');
        end
    end
              
    
%--    
function EnableDisableNbit(ud,s)

	set(ud.handleAlgoCaselles(4),'Enable',s);
	set(ud.handleAlgoChanVese(4),'Enable',s);
	set(ud.handleAlgoLi(4),'Enable',s);
	set(ud.handleAlgoLankton(4),'Enable',s);
	set(ud.handleAlgoBernard(4),'Enable',s);
	set(ud.handleAlgoShi(4),'Enable',s);
	set(ud.handleAlgoPersonal(4),'Enable',s);
   
    
%--    
function setAllNbIt(src,evt)

    fig = gcbf;
    ud = get(fig,'userdata');

    NbIt = get(ud.handleAlgoComparison(4),'String');
    
    set(ud.handleAlgoCaselles(4),'String',NbIt);    
    set(ud.handleAlgoChanVese(4),'String',NbIt);    
    set(ud.handleAlgoLi(4),'String',NbIt);    
    set(ud.handleAlgoLankton(4),'String',NbIt);    
    set(ud.handleAlgoBernard(4),'String',NbIt);    
    set(ud.handleAlgoShi(4),'String',NbIt);    
    set(ud.handleAlgoPersonal(4),'String',NbIt);
    
    
%--    
function creaseg_inittype(src, evt)

    fig = gcbf;
    ud = get(fig,'userdata');
    
    switch get(ud.handleInit(4),'Value')
        case {1,2}
            InitText_OnOff(ud,0);
        
        case 3
            InitText_OnOff(ud,1);
            set(ud.handleInit(5),'String','Center');
            set(ud.handleInit(7),'String','Xc');
            set(ud.handleInit(9),'String','Yc');

            set(ud.handleInit(13),'String','X Axis');
            set(ud.handleInit(15),'String','Y Axis');
            
            init_param(ud,get(ud.handleInit(4),'Value'));
            
        case 4
            InitText_OnOff(ud,1);
            set(ud.handleInit(5),'String','Center');
            set(ud.handleInit(7),'String','Xc');
            set(ud.handleInit(9),'String','Yc');

            set(ud.handleInit(13),'String','Length');
            set(ud.handleInit(15),'String','Width');
        
            init_param(ud,get(ud.handleInit(4),'Value'));
            
        case 5
            InitText_OnOff(ud,1);
            set(ud.handleInit(5),'String','Space');
            set(ud.handleInit(7),'String','X');
            set(ud.handleInit(9),'String','Y');

            set(ud.handleInit(13),'String','Radius');
            set(ud.handleInit(15),'Enable','Off');
            set(ud.handleInit(16),'Enable','Off');
        
            init_param(ud,get(ud.handleInit(4),'Value'));
            
        case 6
            InitText_OnOff(ud,1);
            set(ud.handleInit(5),'String','Space');
            set(ud.handleInit(7),'String','X');
            set(ud.handleInit(9),'String','Y');

            set(ud.handleInit(13),'String','Length');
            set(ud.handleInit(15),'String','Width');
            
            init_param(ud,get(ud.handleInit(4),'Value'));
    end
    
    
%--
function InitText_OnOff(ud,type)
    if type
        set(ud.handleInit(7),'Enable','On');
        set(ud.handleInit(8),'Enable','On');
        set(ud.handleInit(9),'Enable','On');
        set(ud.handleInit(10),'Enable','On');

        set(ud.handleInit(13),'Enable','On');
        set(ud.handleInit(14),'Enable','On');
        set(ud.handleInit(15),'Enable','On');
        set(ud.handleInit(16),'Enable','On');
    else
        set(ud.handleInit(7),'Enable','Off');
        set(ud.handleInit(8),'Enable','Off');
        set(ud.handleInit(9),'Enable','Off');
        set(ud.handleInit(10),'Enable','Off');

        set(ud.handleInit(13),'Enable','Off');
        set(ud.handleInit(14),'Enable','Off');
        set(ud.handleInit(15),'Enable','Off');
        set(ud.handleInit(16),'Enable','Off');
    end

    
%--    
function init_param(ud, method)
    fd = get(ud.imageId,'userdata');

    if ( isempty(fd.data) )
        return;
    end
    
    switch method
        case {3, 4}
            set(ud.handleInit(8),'string',num2str(size(fd.data,2)/2));
            set(ud.handleInit(10),'string',num2str(size(fd.data,1)/2));
            set(ud.handleInit(14),'string',num2str(size(fd.data,2)/4));
            set(ud.handleInit(16),'string',num2str(size(fd.data,1)/4));
        case {5, 6}
            set(ud.handleInit(8),'string',num2str(size(fd.data,2)/40));
            set(ud.handleInit(10),'string',num2str(size(fd.data,1)/40));
            set(ud.handleInit(14),'string',num2str(size(fd.data,2)/20));
            set(ud.handleInit(16),'string',num2str(size(fd.data,1)/20));
    end

    
%--            
function open_author(src,evt)
	web('http://www.creatis.insa-lyon.fr/~bernard');
    
    
%--    
function open_help(src,evt)
	web('http://www.creatis.insa-lyon.fr/~bernard/creaseg');

        
%--
function manageAction(src,evt,nbBut)

    %-- parameters
    fig = findobj(0,'tag','creaseg');
    ud = get(fig,'userdata');
    fd = get(ud.imageId,'userdata'); 

    %-- deal with pan option
    if ( (nbBut==2) || (nbBut==3) )
        pan off;
    end
    
    %-- clean up all messages
    if ( nbBut<7)
        set(ud.txtInfo1,'string','');
        set(ud.txtInfo2,'string','');
        set(ud.txtInfo3,'string','');
        set(ud.txtInfo4,'string','');
        set(ud.txtInfo5,'string','');        
    end
    
    if (nbBut==6)
        if (get(ud.buttonAction(6),'background')==[160/255 130/255 95/255])
            set(ud.buttonAction(6),'background',[240/255 173/255 105/255]);
        else
            set(ud.buttonAction(6),'background',[160/255 130/255 95/255]);
        end
    end       
    
    if (nbBut==7)
        if (get(ud.buttonAction(7),'background')==[160/255 130/255 95/255])
            set(ud.buttonAction(7),'background',[240/255 173/255 105/255]);
            set(ud.txtInfo1,'string','');
            set(ud.txtInfo2,'string','');
            set(ud.txtInfo3,'string','');
            set(ud.txtInfo4,'string','');
            set(ud.txtInfo5,'string','');
        else
            set(ud.buttonAction(7),'background',[160/255 130/255 95/255]);
        end
    end    


    %-- ACTION
    if ( (fd.tagImage == 1 ) || (nbBut == 1) )
        switch nbBut
            case 1 %-- Draw initial region
                set(ud.buttonAction(2),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(3),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(7),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(1),'BackgroundColor',[160/255 130/255 95/255]);  
                %-- switch off create button of comparison mode
                set(ud.handleAlgoComparison(17),'BackgroundColor',[240/255 173/255 105/255]); 
                %-- do corresponding action
                manageInit(src,evt);
            case 2  %-- Run method
                set(ud.buttonAction(1),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(2),'BackgroundColor',[160/255 130/255 95/255]);     
                set(ud.buttonAction(6),'BackgroundColor',[240/255 173/255 105/255]);                    
                set(ud.buttonAction(7),'BackgroundColor',[240/255 173/255 105/255]);                
                %-- switch off create button of comparison mode
                set(ud.handleAlgoComparison(17),'BackgroundColor',[240/255 173/255 105/255]);     
                %-- do corresponding action
                creaseg_run(src,evt); 
            case 3  %-- Set mouse pointer to own (disable current figure option icon properties)
                set(ud.buttonAction(2),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(6),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(7),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(3),'BackgroundColor',[160/255 130/255 95/255]);
                %-- put drawing to unclick
                for k=3:size(ud.handleInit,1)
                    set(ud.handleInit(k),'BackgroundColor',[240/255 173/255 105/255]);
                end
                %-- do corresponding action
                set(ud.gcf,'WindowButtonDownFcn','');
                set(ud.gcf,'WindowButtonUpFcn','');                 
            case 4  %-- Zoom in by a factor of 2
                set(ud.buttonAction(2),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(5),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(7),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(4),'BackgroundColor',[160/255 130/255 95/255]);
                %-- do corresponding action
                axes(get(ud.imageId,'parent'));
                zoom(ud.gca,2);
            case 5  %-- Zoom out by a factor of 2
                set(ud.buttonAction(2),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(4),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(7),'BackgroundColor',[240/255 173/255 105/255]);
                set(ud.buttonAction(5),'BackgroundColor',[160/255 130/255 95/255]); 
                %-- do corresponding action
                axes(get(ud.imageId,'parent'));
                zoom(ud.gca,0.5);
            case 6  %-- Pan into main figure
                %--
                set(ud.buttonAction(7),'BackgroundColor',[240/255 173/255 105/255]);
                %-- 
                if (get(ud.buttonAction(6),'background')==[240/255 173/255 105/255])
                    %-- first pan off
                    pan off;
                    if ( get(ud.buttonAction(1),'background')==[240/255 173/255 105/255] )
                        if ( get(ud.handleAlgoComparison(17),'background')==[240/255 173/255 105/255] )
                            %-- then put pointer button to selected
                            set(ud.buttonAction(3),'BackgroundColor',[160/255 130/255 95/255]);
                        end
                    end
                    %-- then go back to manual drawing mode if any
                    if ( fd.drawingManualFlag == 1 )
                        set(ud.gcf,'WindowButtonDownFcn',{@creaseg_drawManualContour});
                        set(ud.gcf,'WindowButtonUpFcn','');
                    end
                    %-- then go back to multi manual drawing mode if any
                    if ( fd.drawingMultiManualFlag == 1 )
                        set(ud.gcf,'WindowButtonDownFcn',{@creaseg_drawMultiManualContours});
                        set(ud.gcf,'WindowButtonUpFcn','');
                    end
                    %-- then go back to reference manual drawing mode if any
                    if ( fd.drawingReferenceFlag == 1 )
                        set(ud.gcf,'WindowButtonDownFcn',{@creaseg_drawMultiReferenceContours});
                        set(ud.gcf,'WindowButtonUpFcn','');
                    end                    
                    
                else
                    %-- put pointer button to unselected
                    set(ud.buttonAction(3),'BackgroundColor',[240/255 173/255 105/255]);                    
                    %-- do corresponding action
                    set(ud.gcf,'WindowButtonDownFcn','');
                    set(ud.gcf,'WindowButtonUpFcn','');                
                    axes(get(ud.imageId,'parent'));
                    pan(ud.gca);
                end
            case 7  %-- Display or not current image properties
                if (get(ud.buttonAction(7),'background')==[160/255 130/255 95/255])
                    fd = get(ud.imageId,'userdata');
                    if (  ~isempty(fd.info) )
                        if ( isfield(fd.info,'Width') )
                            set(ud.txtInfo1,'string',sprintf('width:%d pixels',fd.info.Width),'color',[1 1 0]);
                        end
                        if ( isfield(fd.info,'Height') )
                            set(ud.txtInfo2,'string',sprintf('height:%d pixels',fd.info.Height),'color',[1 1 0]);
                        end
                        if ( isfield(fd.info,'BitDepth') )
                            set(ud.txtInfo3,'string',sprintf('bit depth:%d',fd.info.BitDepth),'color',[1 1 0]);
                        end
                        if ( isfield(fd.info,'XResolution') && (~isempty(fd.info.XResolution)) )
                            if ( isfield(fd.info,'ResolutionUnit') )
                                if ( strcmp(fd.info.ResolutionUnit,'meter') )
                                    set(ud.txtInfo4,'string',sprintf('XResolution:%0.3f mm',fd.info.XResolution/1000),'color',[1 1 0]);
                                elseif ( strcmp(fd.info.ResolutionUnit,'millimeter') )
                                    set(ud.txtInfo4,'string',sprintf('XResolution:%0.3f mm',fd.info.XResolution),'color',[1 1 0]);
                                else
                                    set(ud.txtInfo4,'string',sprintf('XResolution:%0.3f',fd.info.XResolution),'color',[1 1 0]);
                                end
                            else
                                set(ud.txtInfo4,'string',sprintf('XResolution:%f',fd.info.XResolution),'color',[1 1 0]);
                            end
                        end
                        if ( isfield(fd.info,'YResolution') && (~isempty(fd.info.YResolution)) )
                            if ( isfield(fd.info,'ResolutionUnit') )
                                if ( strcmp(fd.info.ResolutionUnit,'meter') )
                                   set(ud.txtInfo5,'string',sprintf('YResolution:%0.3f mm',fd.info.YResolution/1000),'color',[1 1 0]); 
                                elseif ( strcmp(fd.info.ResolutionUnit,'millimeter') )
                                    set(ud.txtInfo5,'string',sprintf('YResolution:%0.3f mm',fd.info.YResolution),'color',[1 1 0]);
                                else
                                    set(ud.txtInfo5,'string',sprintf('YResolution:%0.3f',fd.info.YResolution),'color',[1 1 0]);
                                end
                            else
                                set(ud.txtInfo5,'string',sprintf('YResolution:%f',fd.info.XResolution),'color',[1 1 0]);
                            end
                        end                
                    end
                end
        end                
    end 

    

    
    

        

Contact us