libcvd-members
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[libcvd-members] libcvd/cvd integral_image.h


From: Edward Rosten
Subject: [libcvd-members] libcvd/cvd integral_image.h
Date: Wed, 01 Apr 2009 15:43:30 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    libcvd
Changes by:     Edward Rosten <edrosten>        09/04/01 15:43:30

Modified files:
        cvd            : integral_image.h 

Log message:
        Faster version of integral image (2.5 ms, vs. 3 ms).

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd/integral_image.h?cvsroot=libcvd&r1=1.2&r2=1.3

Patches:
Index: integral_image.h
===================================================================
RCS file: /cvsroot/libcvd/libcvd/cvd/integral_image.h,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -b -r1.2 -r1.3
--- integral_image.h    28 Nov 2007 20:01:51 -0000      1.2
+++ integral_image.h    1 Apr 2009 15:43:30 -0000       1.3
@@ -35,27 +35,29 @@
        /// @param in The source image.
        /// @param out The source image.
        /// @ingroup gVision
+               
        template<class S, class D> void integral_image(const SubImage<S>& in, 
SubImage<D>& out)
        {
                if( in.size() != out.size())
                        throw 
Exceptions::Vision::IncompatibleImageSizes("integral_image");
                
+               out[0][0] = in[0][0];
                //Do the first row. 
-               D sum = 0;
-               for(int x=0; x < in.size().x; x++)
-               {
-                       sum += in[0][x];
-                       out[0][x] = sum;
-               }
+               for(int x=1; x < in.size().x; x++)
+                       out[0][x] =out[0][x-1] + in[0][x];
+
+               //Do the first column. 
+               for(int y=1; y < in.size().y; y++)
+                       out[y][0] =out[y-1][0] + in[y][0];
 
                //Do the remainder of the image
                for(int y=1; y < in.size().y; y++)
                {
-                       D sum = 0;
+                       D sum = in[y][0];
 
-                       for(int x=0; x < in.size().x; x++)
+                       for(int x=1; x < in.size().x; x++)
                        {
-                               sum += in[y][x];
+                               sum+= in[y][x];
                                out[y][x] = sum + out[y-1][x];
                        }
                }




reply via email to

[Prev in Thread] Current Thread [Next in Thread]