libcvd-members
[Top][All Lists]
Advanced

[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" 
*/)




reply via email to

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