[Top][All Lists]
[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: |
Wed, 17 Jan 2007 03:03:35 +0000 |
CVSROOT: /cvsroot/libcvd
Module name: libcvd
Changes by: Edward Rosten <edrosten> 07/01/17 03:03:35
Modified files:
cvd : image_interpolate.h
Log message:
Bilinear interpolation now does not attempt to access outside the image
when
its up against an edge.
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/libcvd/cvd/image_interpolate.h?cvsroot=libcvd&r1=1.14&r2=1.15
Patches:
Index: image_interpolate.h
===================================================================
RCS file: /cvsroot/libcvd/libcvd/cvd/image_interpolate.h,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- image_interpolate.h 1 Aug 2006 15:41:55 -0000 1.14
+++ image_interpolate.h 17 Jan 2007 03:03:35 -0000 1.15
@@ -150,6 +150,11 @@
return (TooN::make_Vector, ::floor(v[0]),
::floor(v[1]));
}
+ TooN::Vector<2> ceil(const TooN::Vector<2>& v)
+ {
+ return (TooN::make_Vector, ::ceil(v[0]),
::ceil(v[1]));
+ }
+
typedef typename Pixel::traits<T>::float_type FT;
public:
@@ -159,7 +164,7 @@
bool in_image(const TooN::Vector<2>& pos)
{
- return im->in_image(ir(floor(pos)));
+ return im->in_image(ir(floor(pos))) &&
im->in_image(ir(ceil(pos)));
}
FT operator[](const TooN::Vector<2>& pos)
@@ -168,10 +173,6 @@
ImageRef p = ir(floor(pos));
- if(delta[0] == 0 && delta[1] == 0)
- return (*im)[p];
- else
- {
double x = delta[0];
double y = delta[1];
@@ -179,19 +180,24 @@
for(unsigned int i=0; i <
Pixel::Component<T>::count; i++)
{
- float a, b, c, d;
+ float a, b=0, c=0, d=0;
- a =
Pixel::Component<T>::get((*im)[p + ImageRef(0,0)], i);
- b =
Pixel::Component<T>::get((*im)[p + ImageRef(1,0)], i);
- c =
Pixel::Component<T>::get((*im)[p + ImageRef(0,1)], i);
- d =
Pixel::Component<T>::get((*im)[p + ImageRef(1,1)], i);
+ a = Pixel::Component<T>::get((*im)[p +
ImageRef(0,0)], i) * (1-x) * (1-y);
- Pixel::Component<FT>::get(ret,
i) = ((a*(1-x) + b*x)*(1-y) + (c*(1-x) + d*x)*y);
+ if(x != 0)
+ b =
Pixel::Component<T>::get((*im)[p + ImageRef(1,0)], i) * x * (1-y);
+
+ if(y != 0)
+ c = Pixel::Component<T>::get((*im)[p +
ImageRef(0,1)], i) * (1-x) * y;
+
+ if(x !=0 && y != 0)
+ d =
Pixel::Component<T>::get((*im)[p + ImageRef(1,1)], i) * x * y;
+
+ Pixel::Component<FT>::get(ret, i) = a +
b + c + d;
}
return ret;
}
- }
TooN::Vector<2> min()
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [libcvd-members] libcvd/cvd image_interpolate.h,
Edward Rosten <=