[Top][All Lists]
[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];
}
}
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libcvd-members] libcvd/cvd integral_image.h,
Edward Rosten <=