ソースを参照

bugfix in calcIntegralImage: no cumsum was done over row 0 and column 0, so wrong integral images were produced.

Johannes Ruehle 12 年 前
コミット
6dd903e6a4
2 ファイル変更11 行追加4 行削除
  1. 7 0
      image/GenericImageTools.h
  2. 4 4
      image/GenericImageTools.tcc

+ 7 - 0
image/GenericImageTools.h

@@ -16,6 +16,13 @@ class GenericImageTools
 {
     public:
 
+    /**
+     * calculates the integral image.
+     *
+     * note: result integral image has same dimensions as the source image -
+     * the size is NOT extended by a new 0-row and 0-column as is done in cv::integral.
+     *
+     */
     template <class PixelValueDst, class PixelValueSrc>
     static void calcIntegralImage ( NICE::ImageT<PixelValueDst> &integralImage, const NICE::ImageT<PixelValueSrc> &image, int xsize, int ysize );
 

+ 4 - 4
image/GenericImageTools.tcc

@@ -14,11 +14,11 @@ void GenericImageTools::calcIntegralImage ( NICE::ImageT<PixelValueDst> &integra
 {
   integralImage ( 0, 0 ) = ( PixelValueDst ) image ( 0, 0 );;
 
-  for ( int y = 1 ; y < ysize; y++ )
-    integralImage ( 0, y ) += image ( 0, y - 1 );
+  for ( int y = 0 ; y < (ysize - 1); ++y )
+    integralImage ( 0, y + 1) = integralImage ( 0, y) + image ( 0, y);
 
-  for ( int x = 1 ; x < xsize; x++ )
-    integralImage ( x, 0 ) += image ( x - 1, 0 );
+  for ( int x = 0 ; x < (xsize - 1); ++x )
+    integralImage ( x + 1, 0 ) = integralImage ( x, 0 ) + image ( x, 0 );
 
   for ( int y = 1 ; y < ysize ; y++ )
     for ( int x = 1 ; x < xsize ; x++ )