[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[libcvd-members] libcvd/cvd vision.h
From: |
Dr. JJN |
Subject: |
[libcvd-members] libcvd/cvd vision.h |
Date: |
Tue, 09 Jan 2007 18:27:45 +0000 |
CVSROOT: /sources/libcvd
Module name: libcvd
Changes by: Dr. JJN <jjneubert> 07/01/09 18:27:45
Modified files:
cvd : vision.h
Log message:
fixed a few bugs
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd/vision.h?cvsroot=libcvd&r1=1.22&r2=1.23
Patches:
Index: vision.h
===================================================================
RCS file: /sources/libcvd/libcvd/cvd/vision.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -b -r1.22 -r1.23
--- vision.h 9 Jan 2007 15:27:12 -0000 1.22
+++ vision.h 9 Jan 2007 18:27:45 -0000 1.23
@@ -392,20 +392,29 @@
{
int i,j;
int w = out.size().x, h = out.size().y, iw = in.size().x, ih = in.size().y;
- TooN::Vector<2> base = M * -outOrig + inOrig; //one corner in the input
image
+ TooN::Vector<2> base;
TooN::Vector<2> p;
- p = (double)out.size().x,(double)out.size().y;
- p = M * (p-outOrig) + inOrig; //the other corner
TooN::Vector<2> across = M.T()[0];
TooN::Vector<2> down = M.T()[1];
+ //min and max x and y
+ base[0] = std::min( across[0]*(-outOrig[0]),
across[0]*(-outOrig[0]+(double)w) ) +
+ std::min( down[0]*(-outOrig[1]), down[0]*(-outOrig[1]+(double)h)
) + inOrig[0];
+ base[1] = std::min( across[1]*(-outOrig[0]),
across[1]*(-outOrig[0]+(double)w) ) +
+ std::min( down[1]*(-outOrig[1]), down[1]*(-outOrig[1]+(double)h)
) + inOrig[1];
+ p[0] = std::max( across[0]*(-outOrig[0]),
across[0]*(-outOrig[0]+(double)w) ) +
+ std::max( down[0]*(-outOrig[1]), down[0]*(-outOrig[1]+(double)h)
) + inOrig[0];
+ p[1] = std::max( across[1]*(-outOrig[0]),
across[1]*(-outOrig[0]+(double)w) ) +
+ std::max( down[1]*(-outOrig[1]), down[1]*(-outOrig[1]+(double)h)
) + inOrig[1];
+
+
+
//If the patch being extracted is completely in the image then no
//check is needed with each point.
- if ( p[0] >=0 && p[1] >=0 && p[0] < iw && p[1] < ih &&
- base[0] >=0 && base[1] >=0 && base[0] < iw && base[1] < ih)
+ if ( p[0] < iw && p[1] < ih && base[0] >=0 && base[1] >=0 )
{
-
+ base = M * -outOrig + inOrig;
for (j=0;j<h;++j,base+=down)
{
p = base;
@@ -413,19 +422,21 @@
sample(in,p[0],p[1],out[j][i]);
}
} else {
-
+ base = M * -outOrig + inOrig;
for (j=0;j<h;++j,base+=down)
{
p = base;
for (i=0;i<w;++i, p+=across)
+ {
//Make sure that we are extracting pixels in the image
- if ( p[0] >=0 && p[1] >=0 && p[0] < iw && p[1] < ih)
+ if ( p[0] < 0 || p[1] < 0 || p[0] >= iw || p[1] >= ih)
{
zeroPixel(out[j][i]);
} else
sample(in,p[0],p[1],out[j][i]);
}
}
+ }
}
template <class T> void transform(const BasicImage<T>& in, BasicImage<T>&
out, const TooN::Matrix<3>& Minv /* <-- takes points in "out" to points in "in"
*/)