% EXAMPLE     an example of traditional snake on U-shape image
%

%   Chenyang Xu and Jerry Prince 6/17/97
%   Copyright (c) 1996-97 by Chenyang Xu and Jerry Prince

   cd ..;   s = cd;   s = [s, '/snake']; path(s, path); cd examples;
   
   help tradition_ex;
   % ==== Example 1: U-shape object ====

   % Read in the 64x64 U-shape image
     %[I,map] = rawread('../images/cochon64.pgm');  
     I = imread('../images/cochon128.pgm');
   % Compute its edge map, 
     disp(' Compute edge map ...');
     f = 1 - I/255; 
     f0 = gaussianBlur(f,1);
     % note: snake potential is the negative of edge map
     disp(' Comute the traditional external force ...');
     [px,py] = gradient(f0);

   % display the results
     figure(1); 
     subplot(121); imdisp(-f); title('snake potential');
     subplot(122); quiver(px,py); 
     axis('square', 'equal', 'off', 'ij');     % fix the axis 
     title('traditional force');

   % snake deformation
     disp(' ');
     disp(' Press any key to start the deformation');
     pause;
     figure(1); subplot(121); cla;
     colormap(gray(64)); image(((1-f)+1)*40); 
     axis('square', 'equal', 'off');
     disp('');
     disp('... Now capture range is small, use closer initialization.')
     t = 0:0.05:6.28;
     x = 64 + 60*cos(t);  
     y = 64 + 60*sin(t);
     [x,y] = snakeinterp(x,y,2,0.5);
     snakedisp(x,y,'r') 
     pause(1);

     disp('... Press <CTRL>-C to stop the program at any time.');
     for i=1:20,
       [x,y] = snakedeform(x,y,5,0,0.1,5,px,py,5);
       [x,y] = snakeinterp(x,y,2,0.5);
       if i > 100
           snakedisp(x,y,'r')
       end
       title(['Deformation in progress,  iter = ' num2str(i*5)])
       pause(0.5);
     end

     disp(' ');
     disp(' Press any key to display the final result');
     pause;
     figure(2); clf; 
     colormap(gray(64)); image(((1-f)+1)*40); axis equal
     snakedisp(x,y,'r') 
     title(['Final result,  iter = ' num2str(i*5)]);
