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

2D图形编程

开发平台:

Matlab

  1. % EXAMPLE     an example of distance snake on U shape boundary          
  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 distance_ex;
  8.    % Read in the 64x64 U-shape image
  9.      [I,map] = rawread('../images/Milan-test.pgm');  
  10.      
  11.    % Compute its edge map
  12.      disp(' Compute edge map ...');
  13.      f = 1 - I/255; 
  14.    % Compute the distance transform
  15.      disp(' Compute distance transform ...');
  16.      D = dt(f>0.5);   % (f>0.5) to gurantee the binary input for dt
  17.      disp(' Compute the distance external force ...');
  18.      [px,py] = gradient(-D);
  19.    % display the results
  20.      figure(1); 
  21.      subplot(121); imdisp(D); title('distance transform');
  22.      subplot(122); quiver(px,py); 
  23.      axis('square', 'equal', 'off', 'ij');     % fix the axis 
  24.      title('distance 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.      t = 0:0.05:6.28;
  33.      x = 41 + 35*cos(t);
  34.      y = 60 + 50*sin(t);
  35.      [x,y] = snakeinterp(x,y,2,0.5);
  36.      snakedisp(x,y,'r') 
  37.      pause(1);
  38.      for i=1:25,
  39.        [x,y] = snakedeform(x,y,0.05,0,1,0.5,px,py,5);
  40.        [x,y] = snakeinterp(x,y,2,0.5);
  41.        snakedisp(x,y,'r') 
  42.        title(['Deformation in progress,  iter = ' num2str(i*5)])
  43.        pause(0.5);
  44.      end
  45.      disp(' ');
  46.      disp(' Press any key to display the final result');
  47.      pause;
  48.      figure(1); subplot(121); cla; 
  49.      colormap(gray(64)); image(((1-f)+1)*40); 
  50.      axis('square', 'equal', 'off');
  51.      snakedisp(x,y,'r') 
  52.      title(['Final result,  iter = ' num2str(i*5)]);