detect_features.m
上传用户:trade789
上传日期:2018-05-10
资源大小:603k
文件大小:3k
源码类别:

2D图形编程

开发平台:

Matlab

  1. %/////////////////////////////////////////////////////////////////////////////////////////////
  2. %
  3. % detect_features - scale space feature detector based upon difference of gaussian filters.
  4. %                 selects features based upon their maximum response in scale space
  5. %
  6. % Usage:  [features,pyr,imp,keys] = detect_features(img, scl, disp_flag, thresh, radius, radius2, radius3, min_sep, edgeratio)
  7. %
  8. % Parameters:  
  9. %            
  10. %            img :      original image
  11. %            scl :      scaling factor between levels of the image pyramid
  12. %            thresh :   threshold value for maxima search (minimum filter response considered)
  13. %            radius :   radius for maxima comparison within current scale
  14. %            radius2:   radius for maxima comparison between neighboring scales
  15. %            radius3:   radius for edge rejection test
  16. %            min_sep :  minimum separation for maxima selection.
  17. %            edgeratio: maximum ratio of eigenvalues of feature curvature for edge rejection.
  18. %            disp_flag: 1- display each scale level on separate figure.  0 - no display
  19. %
  20. % Returns:
  21. %
  22. %            features  - matrix with one row for each feature consisting of the following:
  23. %              [x position,  y position, scale(sub-level), size of feature on image, edge flag, 
  24. %                            edge orientation, curvature of response through scale space ]                              
  25. %
  26. %            pyr, imp -  filter response and image pyramids
  27. %            keys - key values generated for each feature by construct_key.m
  28. %
  29. % Notes: 
  30. %            recommended parameter values are:
  31. %            scl = 1.5; thresh = 3;   radius = 4; radius2 = 4; radius3 = 4; min_sep = .04; edgeratio = 5;
  32. %
  33. % Author: 
  34. % Scott Ettinger
  35. % scott.m.ettinger@intel.com
  36. %
  37. % May 2002
  38. %/////////////////////////////////////////////////////////////////////////////////////////////
  39. function [features,pyr,imp,keys] = detect_features(img, scl, disp_flag, thresh, radius, radius2, radius3, min_sep, edgeratio)
  40.     if ~exist('scl')
  41.         scl = 1.5;
  42.     end
  43.      
  44.     if ~exist('thresh')
  45.         thresh = 3;
  46.     end
  47.     
  48.     if ~exist('radius')
  49.         radius = 4;
  50.     end
  51.     
  52.     if ~exist('radius2')
  53.         radius2 = 4;
  54.     end
  55.     if ~exist('radius3')
  56.         radius3 = 4;
  57.     end
  58.     
  59.     if ~exist('min_sep')
  60.         min_sep = .04;
  61.     end
  62.     if ~exist('edgeratio')
  63.         edgeratio = 5;
  64.     end
  65.     
  66.     if ~exist('disp_flag')
  67.         disp_flag = 0;
  68.     end
  69.     if size(img,3) > 1
  70.         img = rgb2gray(img);
  71.     end
  72.     
  73.     % Computation of the maximum number of levels:
  74.     Lmax = floor(min(log(2*size(img)/12)/log(scl)));
  75.     
  76.     %build image pyramid and difference of gaussians filter response pyramid
  77.     [pyr,imp] = build_pyramid(img,Lmax,scl);  
  78.     %get the feature points
  79.     pts = find_features(pyr,img,scl,thresh,radius,radius2,disp_flag,1);
  80.     %classify points and create sub-pixel and sub-scale adjustments 
  81.     [features,keys] = refine_features(img,pyr,scl,imp,pts,radius3,min_sep,edgeratio);
  82.     
  83.