Change libmv's bilinear sampling to assume the same pixel
authorKeir Mierle <mierle@gmail.com>
Sat, 9 Jun 2012 19:22:39 +0000 (19:22 +0000)
committerKeir Mierle <mierle@gmail.com>
Sat, 9 Jun 2012 19:22:39 +0000 (19:22 +0000)
conventions as Blender. This fixes the preview widget, and
should make tracking slightly more accurate.

extern/libmv/libmv/image/sample.h

index 04a5748ea4412559e0808064390a2cca124bc710..a8850effeabdfda139f9c6899590a21cabbf20d1 100644 (file)
@@ -59,6 +59,10 @@ inline T SampleLinear(const Array3D<T> &image, float y, float x, int v = 0) {
   int x1, y1, x2, y2;
   float dx, dy;
 
+  // Take the upper left corner as integer pixel positions.
+  x -= 0.5;
+  y -= 0.5;
+
   LinearInitAxis(y, image.Height(), &y1, &y2, &dy);
   LinearInitAxis(x, image.Width(),  &x1, &x2, &dx);
 
@@ -78,6 +82,10 @@ inline void SampleLinear(const Array3D<T> &image, float y, float x, T *sample) {
   int x1, y1, x2, y2;
   float dx, dy;
 
+  // Take the upper left corner as integer pixel positions.
+  x -= 0.5;
+  y -= 0.5;
+
   LinearInitAxis(y, image.Height(), &y1, &y2, &dy);
   LinearInitAxis(x, image.Width(),  &x1, &x2, &dx);