nonmaxsuppts.m

Package [view]: MatlabFns.rar
Upload User: hbhongteng
Upload Date: 2007-05-03
Package Size: 5634k
Code Size: 2k
Category: 2D Graphic
Development Platform: Matlab
  1. % NONMAXSUPPTS - non maximal suppression for corners
  2. %
  3. % Non maxima suppression and thresholding for points generated by a corner
  4. % detector.
  5. %
  6. % Usage:   [r,c] = nonmaxsuppts(cim, radius, thresh, im)
  7. %                                                    /
  8. %                                                  optional
  9. % Arguments:
  10. %            cim    - corner strength image.
  11. %            radius - radius of region considered in non-maximal
  12. %                     suppression. Typical values to use might
  13. %                     be 1-3 pixels.
  14. %            thresh - threshold.
  15. %            im     - optional image data.  If this is supplied the
  16. %                     thresholded corners are overlayed on this
  17. %                     image. This can be useful for parameter tuning.
  18. % Returns:
  19. %            r      - row coordinates of corner points.
  20. %            c      - column coordinates of corner points.
  21. % Peter Kovesi
  22. % School of Computer Science & Software Engineering
  23. % The University of Western Australia
  24. % pk @ csse uwa edu au
  25. % http://www.csse.uwa.edu.au/~pk
  26. %
  27. % September 2003
  28. function [r,c] = nonmaxsuppts(cim, radius, thresh, im)
  29.     
  30. % Extract local maxima by performing a grey scale morphological
  31. % dilation and then finding points in the corner strength image that
  32. % match the dilated image and are also greater than the threshold.
  33.     sze = 2*radius+1;                   % Size of mask.
  34.     mx = ordfilt2(cim,sze^2,ones(sze)); % Grey-scale dilate.
  35.     cim = (cim==mx)&(cim>thresh);       % Find maxima and threshold
  36.     
  37.     [r,c] = find(cim);                  % Find row,col coords.
  38.     
  39.     if nargin==4          % overlay corners on supplied image
  40. show(im,1), hold on
  41. plot(c,r,'r+'), title('corners detected');
  42.     end