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

2D图形编程

开发平台:

Matlab

  1. % EXAMPLE     GVF snake examples on two simulated object boundaries.
  2. %
  3. % NOTE: 
  4. % traditional snake and distance snake differed from GVF snake only 
  5. %   by using different external force field. In order to produce the
  6. %   corresponding external force field, use the following (all
  7. %   assuming edge map f is in memory).
  8. %
  9. % traditional snake:
  10. %   f0 = gaussianBlur(f,1);
  11. %   [px,py] = gradient(f0);
  12. %
  13. % distance snake:
  14. %   D = dt(f>0.5);  % distance transform (dt) require binary edge map
  15. %   [px,py] = gradient(-D);
  16. %
  17. % [px,py] is the external force field in both cases
  18. %
  19. % balloon model using a different matlab function "snakedeform2"
  20. % instead of "snakedeform". The external force could be any force
  21. % field generated above.
  22. %
  23. % an example of using it is as follows
  24. %       [x,y] = snakedeform2(x,y, alpha, beta, gamma, kappa, kappap, px,py,2);
  25. % do a "help snakedeform2" for more details
  26. %   Chenyang Xu and Jerry Prince 6/17/97
  27. %   Copyright (c) 1996-97 by Chenyang Xu and Jerry Prince
  28. %    cd .. ; 
  29. %    s = cd;  
  30. %    s = [s, '/snake'];
  31. %    path(s, path); 
  32. %    cd examples;
  33.    
  34. %    help gvf_ex;
  35.    % ==== Example 1: U-shape object ====
  36.    % Read in the 64x64 U-shape image
  37.      [I,map] = rawread('D:Matlab7workSnakesgvf_dist_v4.2cimagesU64.pgm');  
  38.      
  39.    % Compute its edge map
  40.      disp(' Compute edge map ...');
  41.      f = 1 - I/255; 
  42.    % Compute the GVF of the edge map f
  43.      disp(' Compute GVF ...');
  44.      [u,v] = GVF(f, 0.2, 80); 
  45.      disp(' Nomalizing the GVF external force ...');
  46.      mag = sqrt(u.*u+v.*v);
  47.      px = u./(mag+1e-10); py = v./(mag+1e-10); 
  48.    % display the results
  49.      figure(1); 
  50.      subplot(221); imdisp(I); title('test image');
  51.      subplot(222); imdisp(f); title('edge map');
  52.      % display the gradient of the edge map
  53.      [fx,fy] = gradient(f); 
  54.      subplot(223); quiver(fx,fy); 
  55.      axis off; axis equal; axis 'ij';     % fix the axis 
  56.      title('edge map gradient');
  57.      % display the GVF 
  58.      subplot(224); quiver(px,py);
  59.      axis off; axis equal; axis 'ij';     % fix the axis 
  60.      title('normalized GVF field');
  61.    % snake deformation
  62.      disp(' Press any key to start GVF snake deformation');
  63.      pause;
  64.      figure(1); subplot(221); cla;
  65.      colormap(gray(64)); image(((1-f)+1)*40); axis('equal', 'off');
  66.      [x,y] = snakeinit(1);
  67. %      t = 0:0.05:6.28;
  68. %      x = 32 + 30*cos(t);
  69. %      y = 32 + 30*sin(t);
  70. %      [x,y] = snakeinterp(x,y,2,0.5);
  71.      snakedisp(x,y,'r') 
  72.      pause(1);
  73.      for i=1:25,
  74.        [x,y] = snakedeform(x,y,0.05,0,1,0.5,px,py,5);
  75.        [x,y] = snakeinterp(x,y,2,0.5);
  76.        snakedisp(x,y,'r') 
  77.        title(['Deformation in progress,  iter = ' num2str(i*5)])
  78.        pause(0.5);
  79.      end
  80.      disp(' Press any key to display the final result');
  81.      pause;
  82.      cla;
  83.      colormap(gray(64)); image(((1-f)+1)*40); axis('equal', 'off');
  84.      snakedisp(x,y,'r') 
  85.      title(['Final result,  iter = ' num2str(i*5)]);
  86.      disp(' ');
  87.      disp(' Press any key to run the next example');
  88.      pause;
  89.      
  90.    % ==== Example 2: Room like object ====     
  91.    % Read in the 64x64 room image
  92.      [I,map] = rawread('D:Matlab7workSnakesgvf_dist_v4.2cimagesroom.pgm');  
  93.      
  94.    % Compute its edge map
  95.      disp(' Compute edge map ...');
  96.      f = 1 - I/255; 
  97.    % Compute the GVF of the edge map f
  98.      disp(' Compute GVF ...');
  99.      [px,py] = GVF(f, 0.2, 80); 
  100.    % display the results
  101.      figure(1); 
  102.      subplot(221); imdisp(I); title('test image');
  103.      subplot(222); imdisp(f); title('edge map');
  104.      % display the gradient of the edge map
  105.      [fx,fy] = gradient(f); 
  106.      subplot(223); quiver(fx,fy); 
  107.      axis off; axis equal; axis 'ij';     % fix the axis 
  108.      title('edge map gradient');
  109.      % display the GVF 
  110.      subplot(224); quiver(px,py);
  111.      axis off; axis equal; axis 'ij';     % fix the axis 
  112.      title('GVF field');
  113.        
  114.    % snake deformation
  115.      disp(' Press any key to start GVF snake deformation');
  116.      pause;
  117.      figure(1); subplot(221); cla;
  118.      colormap(gray(64)); image(((1-f)+1)*40); axis('equal', 'off');
  119.      t = 0:0.5:6.28;
  120.      x = 32 + 3*cos(t);
  121.      y = 32 + 3*sin(t);
  122.      [x,y] = snakeinterp(x,y,2,0.5);
  123.      snakedisp(x,y,'r'); 
  124.      pause(1);
  125.      for i=1:15,
  126.        [x,y] = snakedeform(x,y,0.05,0,1,2,px,py,5);
  127.        [x,y] = snakeinterp(x,y,2,0.5);
  128.        snakedisp(x,y,'r') 
  129.        title(['Deformation in progress,  iter = ' num2str(i*5)])
  130.        pause(0.5);
  131.      end
  132.      disp(' Press any key to display the final result');
  133.      pause;
  134.      figure(1); subplot(221); cla;
  135.      colormap(gray(64)); image(((1-f)+1)*40); axis('equal', 'off');
  136.      snakedisp(x,y,'r'); 
  137.      title(['Final result,  iter = ' num2str(i*5)]);
  138.