libcvd-members
[Top][All Lists]
Advanced

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

[libcvd-members] libcvd/cvd image_interpolate.h


From: Edward Rosten
Subject: [libcvd-members] libcvd/cvd image_interpolate.h
Date: Tue, 01 Aug 2006 13:56:42 +0000

CVSROOT:        /cvsroot/libcvd
Module name:    libcvd
Changes by:     Edward Rosten <edrosten>        06/08/01 13:56:42

Modified files:
        cvd            : image_interpolate.h 

Log message:
        Fixed interpolation to return floating point type.

CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd/image_interpolate.h?cvsroot=libcvd&r1=1.12&r2=1.13

Patches:
Index: image_interpolate.h
===================================================================
RCS file: /cvsroot/libcvd/libcvd/cvd/image_interpolate.h,v
retrieving revision 1.12
retrieving revision 1.13
diff -u -b -r1.12 -r1.13
--- image_interpolate.h 20 Oct 2005 09:41:30 -0000      1.12
+++ image_interpolate.h 1 Aug 2006 13:56:42 -0000       1.13
@@ -3,6 +3,7 @@
 
 #include <TooN/TooN.h>
 #include <cvd/internal/pixel_operations.h>
+#include <cvd/internal/rgb_components.h>
 #include <math.h>
 
 namespace CVD
@@ -109,6 +110,7 @@
                                return ImageRef(round(v[0]), round(v[1]));
                        }
 
+                       typedef typename Pixel::traits<C>::float_type FT;
        
                public:
                        image_interpolate(const BasicImage<C>& i)
@@ -120,7 +122,7 @@
                                return im->in_image(to_ir(pos));
                        }
 
-                       C operator[](const TooN::Vector<2>& pos)
+                       FT operator[](const TooN::Vector<2>& pos)
                        {
                                return (*im)[to_ir(pos)];
                        }
@@ -148,6 +150,8 @@
                                return (TooN::make_Vector, ::floor(v[0]), 
::floor(v[1]));
                        }
 
+                       typedef typename Pixel::traits<T>::float_type FT;
+
                public:
                        image_interpolate(const BasicImage<T>& i)
                        :im(&i)
@@ -158,7 +162,7 @@
                                return im->in_image(ir(floor(pos)));
                        }
 
-                       T operator[](const TooN::Vector<2>& pos)
+                       FT operator[](const TooN::Vector<2>& pos)
                        {
                                TooN::Vector<2> delta =  pos - floor(pos);
 
@@ -171,7 +175,7 @@
                                        double x = delta[0];
                                        double y = delta[1];
 
-                                       T ret;
+                                       FT ret;
 
                                        for(unsigned int i=0; i < 
Pixel::Component<T>::count; i++)
                                        {
@@ -182,7 +186,7 @@
                                                c = 
Pixel::Component<T>::get((*im)[p + ImageRef(0,1)], i);
                                                d = 
Pixel::Component<T>::get((*im)[p + ImageRef(1,1)], i);
                                                
-                                               Pixel::Component<T>::get(ret, 
i) = (typename Pixel::Component<T>::type)  ((a*(1-x) + b*x)*(1-y) + (c*(1-x) + 
d*x)*y);
+                                               Pixel::Component<FT>::get(ret, 
i) = (typename Pixel::Component<T>::type)  ((a*(1-x) + b*x)*(1-y) + (c*(1-x) + 
d*x)*y);
                                        }
 
                                        return ret;
@@ -217,6 +221,8 @@
                                return (  pow(p(x+2), 3) - 4 * pow(p(x+1),3) + 
6 * pow(p(x), 3) - 4* pow(p(x-1),3))/6;
                        }
 
+                       typedef typename Pixel::traits<T>::float_type FT;
+
                public:
                        image_interpolate(const BasicImage<T>& i)
                        :im(&i)
@@ -227,7 +233,7 @@
                                return pos[0] >= 1 && pos[1] >=1 && pos[0] < 
im->size().x-2 && pos[1] < im->size().y - 2;
                        }
 
-                       T operator[](const TooN::Vector<2>& pos)
+                       FT operator[](const TooN::Vector<2>& pos)
                        {
                                int x = (int)floor(pos[0]);
                                int y = (int)floor(pos[1]);
@@ -235,7 +241,7 @@
                                float dy = pos[1] - y;
 
                                //Algorithm as described in 
http://astronomy.swin.edu.au/~pbourke/colour/bicubic/
-                               T ret;
+                               FT ret;
                                for(unsigned int i=0; i < 
Pixel::Component<T>::count; i++)
                                {
                                        float s=0;




reply via email to

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