GenericImageTools.tcc 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. /**
  2. * @file GenericImageTools.cpp
  3. * @brief simple filter stuff
  4. * @author Erik Rodner
  5. * @date 07/30/2008
  6. */
  7. #include <iostream>
  8. #include "GenericImageTools.h"
  9. template <class PixelValueDst, class PixelValueSrc>
  10. void GenericImageTools::calcIntegralImage ( PixelValueDst *integralImage, const PixelValueSrc *image, int xsize, int ysize )
  11. {
  12. integralImage[0] = image[0];
  13. int k = xsize;
  14. for ( int y = 1 ; y < ysize; y++, k+=xsize )
  15. integralImage[k] = (PixelValueDst)(integralImage[k-xsize] + image[k]);
  16. k = 1;
  17. for ( int x = 1 ; x < xsize; x++, k++ )
  18. integralImage[k] = (PixelValueDst)(integralImage[k-1] + image[k]);
  19. k = xsize + 1;
  20. for ( int y = 1 ; y < ysize ; y++,k++ )
  21. for ( int x = 1 ; x < xsize ; x++,k++ )
  22. {
  23. integralImage[k] = (PixelValueDst)image[k];
  24. integralImage[k] += integralImage[k-1];
  25. integralImage[k] += integralImage[k - xsize];
  26. integralImage[k] -= integralImage[k - xsize - 1];
  27. }
  28. }
  29. template <class PixelValueDst, class PixelValueSrc>
  30. void GenericImageTools::nonMaximumSuppression ( PixelValueDst *dst, const PixelValueSrc *src,
  31. int xsize, int ysize, bool useEightConnectivity )
  32. {
  33. long k = 0;
  34. for ( int y = 0 ; y < ysize ; y++ )
  35. for ( int x = 0 ; x < xsize ; x++,k++ )
  36. {
  37. if ( x != 0 )
  38. {
  39. if ( src[k-1] > src[k] ) { dst[k] = 0; continue; };
  40. if ( useEightConnectivity ) {
  41. if ( ( y != 0 ) && ( src[k-xsize-1] > src[k] ) ) { dst[k] = 0; continue; };
  42. if ( ( y != ysize-1 ) && ( src[k+xsize-1] > src[k] ) ) { dst[k] = 0; continue; };
  43. }
  44. }
  45. if ( x != xsize-1 )
  46. {
  47. if ( src[k+1] > src[k] ) { dst[k] = 0; continue; };
  48. if ( useEightConnectivity ) {
  49. if ( ( y != 0 ) && ( src[k-xsize+1] > src[k] ) ) { dst[k] = 0; continue; };
  50. if ( ( y != ysize-1 ) && ( src[k+xsize+1] > src[k] ) ) { dst[k] = 0; continue; };
  51. }
  52. }
  53. // CHANGE THIS to dst <-> src !!
  54. if ( y != 0 )
  55. if ( src[k-xsize] > src[k] ) { dst[k] = 0; continue; };
  56. if ( y != ysize-1 )
  57. if ( src[k+xsize] > src[k] ) { dst[k] = 0; continue; };
  58. dst[k] = src[k];
  59. }
  60. }