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

2D图形编程

开发平台:

Matlab

  1. function gvf_snake(img)
  2. I = imread(img);  
  3. I = double(I);
  4. % Compute its edge map
  5. disp(' Compute edge map ...');
  6. f = 1 - I/255; 
  7. % Compute the GVF of the edge map f
  8. disp(' Compute GVF ...');
  9. [u,v] = GVF(f, 0.2, 80); 
  10. disp(' Nomalizing the GVF external force ...');
  11. mag = sqrt(u.*u+v.*v);
  12. px = u./(mag+1e-10); py = v./(mag+1e-10); 
  13. % display the results
  14. figure(1); 
  15. subplot(221); imshow(I); title('test image');
  16. subplot(222); imshow(f); title('edge map');
  17. % display the gradient of the edge map
  18. [fx,fy] = gradient(f); 
  19. subplot(223); quiver(fx,fy); 
  20. axis off; axis equal; axis 'ij';     % fix the axis 
  21. title('edge map gradient');
  22. % display the GVF 
  23. subplot(224); quiver(px,py);
  24. axis off; axis equal; axis 'ij';     % fix the axis 
  25. title('normalized GVF field');
  26. % snake deformation
  27. disp(' Press any key to start GVF snake deformation');
  28. pause;
  29. figure(1); subplot(221); cla;
  30. colormap(gray(256)); image(((1-f)+1)*40); axis('equal', 'off');
  31. [x,y] = snakeinit(1);
  32. snakedisp(x,y,'r') 
  33. pause(1);
  34. for i=1:25,
  35.     [x,y] = snakedeform(x,y,0.05,0,1,0.5,px,py,5);
  36.     [x,y] = snakeinterp(x,y,2,0.5);
  37.     snakedisp(x,y,'r') 
  38.     title(['Deformation in progress,  iter = ' num2str(i*5)])
  39.     pause(0.5);
  40. end
  41. disp(' Press any key to display the final result');
  42. pause;
  43. cla;
  44. colormap(gray(64)); image(((1-f)+1)*40); axis('equal', 'off');
  45. snakedisp(x,y,'r') 
  46. title(['Final result,  iter = ' num2str(i*5)]);