⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu3.m

📁 Snake模型源码
💻 M
📖 第 1 页 / 共 2 页
字号:
callbackStr='menu3(''DotsSizeChange'')';
textPos=[ButtPosX+0.5*ButtWidth ButtPosY ButtWidth*0.35 TextHeight];
stringVal=num2str(DotsSize);
if (SnakeDotsON==1) 
   en='On'; 
else 
   en='Off'; 
end;

HDedit9 = uicontrol('Parent', HDmainf, ...
   'BusyAction','Queue','Interruptible','off',...
   'Style','edit', ...
   'Units','pixel', ...
   'Position',textPos, ...
   'Units','normal', ...
   'Horiz','right', ...
   'Background','white', ...
   'Foreground','black', ...
   'String',stringVal,'Value',DotsSize, ...
   'UserData',DotsSize,...
   'Enable',en,...
   'callback',callbackStr);

% button Load Snake
labelStr='Save S.';
ButtPosX=MenuPosX+0.5*ButtDist+MenuSizeX/2;
ButtPosY = ButtPosY-ButtDist-ButtHeight;
ButtWidth=MenuSizeX/2-1.5*ButtDist;

HDButton5=uicontrol('Parent', HDmainf, ...
   'BusyAction','Queue','Interruptible','off',...
   'Style','pushbutton', ...
   'Units','pixels', ...
   'Position',[ButtPosX ButtPosY ButtWidth ButtHeight], ...
   'String',labelStr, ...
   'Enable','on', ...
   'Callback','menu3(''SaveSnake'')');

% The Inic
labelStr='Load S.';
ButtPosX=MenuPosX+ButtDist;
HDButton6=uicontrol('Parent', HDmainf, ...
   'BusyAction','Queue','Interruptible','off',...
   'Style','pushbutton', ...
   'Units','pixels', ...
   'Position',[ButtPosX ButtPosY ButtWidth ButtHeight], ...
   'String',labelStr, ...
   'Enable','on', ...
   'Callback','menu3(''LoadSnake'')');

%=========================================================
% HELP
%=========================================================

str='Click on images for magnification.|~';
str=strcat(str,'\bf<--Back|\rmBack to the previous menu.|');
str=strcat(str,'~\bfSnake|\rmRun snake iterations.|~  \it[x,y] = snakeinterp(XSnake,YSnake,dmax,dmin);|~ \it[x,y] = snakedeform(x,y,alpha,beta,gamma,kappa,px,py,NoIterations);|');
str=strcat(str,'~\bfAlpha|\rmTension of the snake.|');
str=strcat(str,'~\bfBeta|\rmRigidity of the snake.|');
str=strcat(str,'~\bfGamma|\rmStep size in one iteration.|');
str=strcat(str,'~\bfKappa|\rmExternal force weight.|');
str=strcat(str,'~\bfDmin|\rmMin resolution of the snake.|');
str=strcat(str,'~\bfDmax|\rmMax resolution of the snake.|');
str=strcat(str,'~\bfInitialization|\rmInitial snake position to the starting|or manual position.|');
str=strcat(str,'~\bfManual|\rmManual draw initial snake.|');
str=strcat(str,'~\bfRadious|\rmRadius of initial snake.|');
str=strcat(str,'~\bfDots|\rmDefine if nodes of snake are going to| be displayed.|');
str=strcat(str,'~\bfLoad Snake|\rmLoad snake parameters and position.|');
str=strcat(str,'~\bfSave Snake|\rmSave snake parameters and position.|');

str=strcat(str,'|~\bfTheoretical backgrounds|~\rmSnake moves trough image|in order to minimize energy of|');
str=strcat(str,'~  E=1/2\int[\alpha\mid\bfX''\rm(s)\mid^2+\beta\mid\bfX''''\rm(s)\mid^2]+\kappa E_e_x_t(\bfX\rm(s))ds');
WriteHelp(str);


%%%% define local menu objects, that should be deletet 
VectorOfLocalMenuHD=[HDButton1 HDButton2 HDButton3 HDButton4 HDedit1 HDtext1 HDedit2 HDtext2 HDMenuAxes HDedit3 HDtext3 HDedit4 HDtext4 HDedit5 HDtext5 HDedit6 HDtext6 HDedit7 HDtext7 HDedit8 HDRadioButton1 HDRadioButton2 HDedit9 HDButton5 HDButton6];
pause(0.1);

return

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% sub functons
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% initalize the sanke to the circle

function InicSnake();
global XSnake YSnake IncSnakeRadius Image1 HDSnakeLine;
global XSnakeInc YSnakeInc;   	% incicialization conture of the snake
global CircleOn;

if CircleOn==1
	t = 0:0.05:6.28;
	XSnake = (size(Image1,1)/2 +  IncSnakeRadius/2*size(Image1,1)*cos(t))';
   YSnake = (size(Image1,2)/2 +  IncSnakeRadius/2*size(Image1,2)*sin(t))';
else
   XSnake=[XSnakeInc; XSnakeInc(1)];
   YSnake=[YSnakeInc; YSnakeInc(1)];
end

set(HDSnakeLine,'XData',XSnake,'YData',YSnake,'Color','Red');
return


% callfunction for snake radius change
function RadiusChange()
global IncSnakeRadius;
global XSnake YSnake IncSnakeRadius Image1 HDSnakeLine;


v = get(gcbo,'Userdata');
s = get(gcbo,'String');
vv = eval(s,num2str(v));
if vv(1) > 1 | vv(1) < 0 | s~=num2str(vv)
   vv = v; 
   set(gcbo, 'String', num2str(v))
   return
end
set(gcbo,'Userdata',vv,'String',num2str(vv))
IncSnakeRadius=vv;

t = 0:0.05:6.28;
XSnake = (size(Image1,1)/2 +  IncSnakeRadius/2*size(Image1,1)*cos(t))';
YSnake = (size(Image1,2)/2 +  IncSnakeRadius/2*size(Image1,2)*sin(t))';
set(HDSnakeLine,'XData',XSnake,'YData',YSnake,'Color','Red');
return


% callfunction for Manual Snake

function ManualSnakeON()
global HDorigPic;						%original picture axes handle
global HDbluredPic;				   %blured picture axes handle
global HDvectorFPic;					%handle of vector field picture
global HDSnakeLine;
global HDManualSnakeLine;
global XSnakeManual YSnakeManual;
global HDpointer;				% handle of + pointer on the scren
global HDedit8 HDRadioButton1;
global CircleOn;
global HDButton1 HDButton2 HDButton4;

set([HDButton1 HDButton2 HDButton4],'Enable','Off');
set(HDedit8,'Enable','Off');
set(HDRadioButton1,'Value',0,'Enable','Off');
CircleOn=0;

set(gcbo,'String','End M.',...
   'CallBack','menu3(''ManualSnakeOFF'')');

HD=get(HDorigPic,'Children');
set(HD,'ButtonDownFcn','menu3(''DrawSnake'')');

%HD=get(HDbluredPic,'Children');
%set(HD,'ButtonDownFcn','menu3(''DrawSnake'')');

set(HDSnakeLine,'Visible','Off');
HDManualSnakeLine=[];
XSnakeManual=[];
YSnakeManual=[];
HDpointer=[];

%=========================================================
% HELP
%=========================================================

str='Click on the Original Image in order|to draw the contour of the snake.|';
str=strcat(str,'~|\bfEnd Manual|\rmClick when you finish drawing.|');
WriteHelp(str);

return

function ManualSnakeOFF()
global HDSnakeLine;
global HDpointer;				% handle of + pointer on the scren
global HDManualSnakeLine;
global HDRadioButton1;
global XSnakeManual YSnakeManual;
global XSnake YSnake;
global XSnakeInc YSnakeInc;   	% incicialization conture of the snake
global HDButton1 HDButton2 HDButton4;
global HDorigPic;

set([HDButton1 HDButton2 HDButton4],'Enable','On');

set(gcbo,'String','Manual',...
   'CallBack','menu3(''ManualSnakeON'')');
set(HDRadioButton1,'Enable','On');

if ~isempty(HDManualSnakeLine) 
   delete(HDManualSnakeLine);
end

if ~isempty(HDpointer)
   delete(HDpointer);   
end;

if size(XSnakeManual,1)>=3
   XSnake=XSnakeManual;
   YSnake=YSnakeManual;
   XSnakeInc=XSnake;
   YSnakeInc=YSnake;
end

set(HDSnakeLine,'XData',[XSnake; XSnake(1)],'YData',[YSnake; YSnake(1)],'Color','Red','Visible','on');

HD=get(HDorigPic,'Children');
set(HD,'ButtonDownFcn','SnakeIter(''Pic1Click'')');

%=========================================================
% HELP
%=========================================================

str='Click on images for magnification.|~';
str=strcat(str,'\bf<--Back|\rmBack to the previous menu.|');
str=strcat(str,'~\bfSnake|\rmRun snake iterations.|~  \it[x,y] = snakeinterp(XSnake,YSnake,dmax,dmin);|~ \it[x,y] = snakedeform(x,y,alpha,beta,gamma,kappa,px,py,NoIterations);|');
str=strcat(str,'~\bfAlpha|\rmTension of the snake.|');
str=strcat(str,'~\bfBeta|\rmRigidity of the snake.|');
str=strcat(str,'~\bfGamma|\rmStep size in one iteration.|');
str=strcat(str,'~\bfKappa|\rmExternal force weight.|');
str=strcat(str,'~\bfDmin|\rmMin raster of the snake.|');
str=strcat(str,'~\bfDmax|\rmMax raster of the snake.|');
str=strcat(str,'~\bfInitialization|\rmInitial snake position to the starting|or manual position.|');
str=strcat(str,'~\bfManual|\rmManual draw initial snake.|');
str=strcat(str,'~\bfRadious|\rmRadious of initial snake.|');
str=strcat(str,'~\bfDotst|\rmDefine if dots are going to| be displayed.|');
str=strcat(str,'~\bfLoad Snake|\rmLoad snake parameters and position.|');
str=strcat(str,'~\bfSave Snake|\rmSave snake parameters and position.|');

str=strcat(str,'|~\bfTheoretical back grounds|~\rmSnake moves trought image|in order to minimize energy of|');
str=strcat(str,'~  E=1/2\int[\alpha\mid\bfX''\rm(s)\mid^2+\beta\mid\bfX''''\rm(s)\mid^2]+\kappa E_e_x_t(\bfX\rm(s))ds');
WriteHelp(str);


return

% callfunction for when the button is down 

function DrawSnake()
global HDmainf;
global HDpointer;				% handle of + pointer on the scren
global XSnakeManual YSnakeManual;
global HDManualSnakeLine;

if ~isempty(HDpointer)
   delete(HDpointer);   
end;

HD=get(gcbo,'Parent');
set(HDmainf,'CurrentAxes',HD);
hold on;
P=get(HD,'CurrentPoint');
HDpointer=plot(P(1,1),P(1,2),'b+');

XSnakeManual=[XSnakeManual; P(1,1)];
YSnakeManual=[YSnakeManual; P(1,2)];

if size(XSnakeManual,1)==1
   HDManualSnakeLine=line(XSnakeManual, YSnakeManual);
end

set(HDManualSnakeLine,'XData',XSnakeManual,'YData',YSnakeManual,'EraseMode','none','Color','Red');
return


function CallbackRadius()
global CircleOn;						% inicalization snake will be circle
global HDedit8;

if get(gcbo,'Value')==1 
    CircleOn=1;
    set(HDedit8,'Enable','On');
 else
    CircleOn=0;
    set(HDedit8,'Enable','Off');
 end;   
return


% callfunction for snake radius change
function CallbackDots()
global HDSnakeLine;
global SnakeDotsON DotsSize;				      % 1 if snake dots should be displeyed
global HDedit9;

if get(gcbo,'Value')==1
   SnakeDotsON=1;
else
   SnakeDotsON=0;
end;

if SnakeDotsON==1 
   set(HDSnakeLine,'Marker','.','MarkerEdgeColor','Green','MarkerFaceColor','Blue','MarkerSize',DotsSize);
   set(HDedit9,'Enable','On');
else
   set(HDSnakeLine,'Marker','None');
   set(HDedit9,'Enable','Off');
end;
return

% callback function for dots change size
function DotsSizeChange()
global DotsSize HDSnakeLine;

v = get(gcbo,'Userdata');
s = get(gcbo,'String');
vv = eval(s,num2str(v));
if vv(1) > 30 | vv(1) <= 0 | s~=num2str(vv)| round(vv(1))~=vv(1)
   vv = v; 
   set(gcbo, 'String', num2str(v))
   return
end
set(gcbo,'Userdata',vv,'String',num2str(vv))
DotsSize=vv;
set(HDSnakeLine,'Marker','.','MarkerEdgeColor','Green','MarkerFaceColor','Blue','MarkerSize',DotsSize);
return

%%% Callback function for save snake parameters 
function SaveSnake()
global SnakeFileName SnakePathName;  % name of the snake parameters file

global alpha beta gamma kappa dmin dmax;		% parameters for the snake
global XSnake YSnake;								% conture of the snake
global NoSnakeIterations;		   % number of Snake iterations
global SnakeDotsON;				   % 1 if snake dots should be displeyed
global IncSnakeRadius;				% inicializaton snake radius
global DotsSize;						



	[FileNameT PathNameT]=uiputfile(strcat(SnakePathName,SnakeFileName),'Save snake parameters');
   if FileNameT~=0 
      disp(' ');
      disp(strcat(' Saving	',FileNameT));
      save(strcat(PathNameT,FileNameT),'alpha','beta','gamma','kappa','dmin','dmax','XSnake','YSnake','NoSnakeIterations','SnakeDotsON','IncSnakeRadius','DotsSize');
      SnakePathName=PathNameT;
      SnakeFileName=FileNameT;
      disp(' ');
   end
return

%%% Callback function for load snake parameters 
function LoadSnake()
global SnakeFileName SnakePathName;  % name of the snake parameters file

global alpha beta gamma kappa dmin dmax;		% parameters for the snake
global XSnake YSnake;								% conture of the snake
global NoSnakeIterations;		   % number of Snake iterations
global SnakeDotsON;				   % 1 if snake dots should be displeyed
global IncSnakeRadius;				% inicializaton snake radius
global XSnakeInc YSnakeInc;   	% incicialization conture of the snake
global DotsSize;						
global HDedit1 HDedit2 HDedit3 HDedit4 HDedit5 HDedit6 HDedit7 HDedit8 HDedit9 ; % handels of snake edit uicontrol
global CircleOn;						% inicalization snake will be circle
global HDRadioButton1 HDRadioButton2;

	[FileNameT PathNameT]=uigetfile(strcat(SnakePathName,'\*.mat'),'Load snake parameters');
   if FileNameT~=0 
      disp(' ');
      disp(strcat(' Load	',FileNameT));
      disp(' ');

		load(strcat(PathNameT,FileNameT));

      SnakePathName=PathNameT;
      SnakeFileName=FileNameT;
      
      XSnakeInc=XSnake;
      YSnakeInc=YSnake;
      
      global HDSnakeLine;
      set(HDSnakeLine,'XData',[XSnake; XSnake(1)],'YData',[YSnake; YSnake(1)]);
      if SnakeDotsON==1 
		   set(HDSnakeLine,'Marker','.','MarkerEdgeColor','Green','MarkerFaceColor','Blue','MarkerSize',DotsSize);
         set(HDedit9,'Enable','On');
         set(HDRadioButton2,'Value',1);
		else
   		set(HDSnakeLine,'Marker','None');
         set(HDedit9,'Enable','Off');
         set(HDRadioButton2,'Value',0);
		end;
      
      % reset the values in the menu
      set(HDedit1,'String',num2str(alpha),'Value',alpha);
      set(HDedit2,'String',num2str(beta),'Value',beta);
      set(HDedit3,'String',num2str(gamma),'Value',gamma);
      set(HDedit4,'String',num2str(kappa),'Value',kappa);
      set(HDedit5,'String',num2str(dmin),'Value',dmin);
      set(HDedit6,'String',num2str(dmax),'Value',dmax);
      set(HDedit7,'String',num2str(NoSnakeIterations),'Value',NoSnakeIterations);
		set(HDedit8,'String',num2str(IncSnakeRadius),'Value',IncSnakeRadius);
		set(HDedit9,'String',num2str(DotsSize),'Value',DotsSize);
			
      set(HDRadioButton1,'Value',0);
      set(HDedit8,'Enable','Off');
      CircleOn=0;
   end
return

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -