Milan_tradition.m
上传用户:zlding2008
上传日期:2013-05-13
资源大小:1914k
文件大小:2k
源码类别:

2D图形编程

开发平台:

Matlab

  1. % EXAMPLE     an example of traditional snake on U-shape image
  2. %
  3. %   Chenyang Xu and Jerry Prince 6/17/97
  4. %   Copyright (c) 1996-97 by Chenyang Xu and Jerry Prince
  5.    cd ..;   s = cd;   s = [s, '/snake']; path(s, path); cd examples;
  6.    
  7.    help tradition_ex;
  8.    % ==== Example 1: U-shape object ====
  9.    % Read in the 64x64 U-shape image
  10.      [I,map] = rawread('../images/Milan-test.pgm');  
  11.      
  12.    % Compute its edge map, 
  13.      disp(' Compute edge map ...');
  14.      f = 1 - I/255; 
  15.      f0 = gaussianBlur(f,1);
  16.      % note: snake potential is the negative of edge map
  17.      disp(' Comute the traditional external force ...');
  18.      [px,py] = gradient(f0);
  19.    % display the results
  20.      figure(1); 
  21.      subplot(121); imdisp(-f); title('snake potential');
  22.      subplot(122); quiver(px,py); 
  23.      axis('square', 'equal', 'off', 'ij');     % fix the axis 
  24.      title('traditional force');
  25.    % snake deformation
  26.      disp(' ');
  27.      disp(' Press any key to start the deformation');
  28.      pause;
  29.      figure(1); subplot(121); cla;
  30.      colormap(gray(64)); image(((1-f)+1)*40); 
  31.      axis('square', 'equal', 'off');
  32.      disp('');
  33.      disp('... Now capture range is small, use closer initialization.')
  34.      t = 0:0.05:6.28;
  35.      x = 40 + 30*cos(t);  
  36.      y = 60 + 50*sin(t);
  37.      [x,y] = snakeinterp(x,y,2,0.5);
  38.      snakedisp(x,y,'r') 
  39.      pause(1);
  40.      disp('... Press <CTRL>-C to stop the program at any time.');
  41.      for i=1:100,
  42.        [x,y] = snakedeform(x,y,0.05,0,1,4,px,py,5);
  43.        [x,y] = snakeinterp(x,y,2,0.5);
  44.        snakedisp(x,y,'r') 
  45.        title(['Deformation in progress,  iter = ' num2str(i*5)])
  46.        pause(0.5);
  47.      end
  48.      disp(' ');
  49.      disp(' Press any key to display the final result');
  50.      pause;
  51.      figure(2); clf; 
  52.      colormap(gray(64)); image(((1-f)+1)*40); axis equal
  53.      snakedisp(x,y,'r') 
  54.      title(['Final result,  iter = ' num2str(i*5)]);