2 #ifndef vil_bilin_interp_h_ 3 #define vil_bilin_interp_h_ 18 # include <vcl_msvc_warnings.h> 28 std::ptrdiff_t xstep, std::ptrdiff_t ystep)
35 const T* pix1 = data + p1y*ystep + p1x*xstep;
37 double i1 = pix1[0 ]+(pix1[ ystep]-pix1[0 ])*normy;
38 double i2 = pix1[xstep]+(pix1[xstep+ystep]-pix1[xstep])*normy;
40 return i1+(i2-i1)*normx;
52 std::ptrdiff_t xstep, std::ptrdiff_t ystep)
62 std::ptrdiff_t xstep, std::ptrdiff_t ystep)
69 const T* pix1 = data + p1y*ystep + p1x*xstep;
73 if (normx == 0 && normy == 0)
return pix1[0];
74 if (normx == 0)
return pix1[0]+(pix1[ystep]-pix1[0])*normy;
75 if (normy == 0)
return pix1[0]+(pix1[xstep]-pix1[0])*normx;
77 double i1 = pix1[0 ]+(pix1[ ystep]-pix1[0 ])*normy;
78 double i2 = pix1[xstep]+(pix1[xstep+ystep]-pix1[xstep])*normy;
80 return i1+(i2-i1)*normx;
91 std::ptrdiff_t xstep, std::ptrdiff_t ystep)
103 std::ptrdiff_t xstep, std::ptrdiff_t ystep)
107 if (x>nx-1)
return 0.0;
108 if (y>ny-1)
return 0.0;
120 std::ptrdiff_t xstep, std::ptrdiff_t ystep)
122 if (x<0 || y<0 || x>nx-1 || y>ny-1)
return vil_na(
double());
132 double x,
double y,
unsigned p=0)
135 view.
ni(), view.
nj(),
146 double x,
double y,
unsigned p=0)
149 view.
ni(), view.
nj(),
161 std::ptrdiff_t xstep, std::ptrdiff_t ystep)
177 double x,
double y,
unsigned p=0)
180 view.
ni(), view.
nj(),
192 std::ptrdiff_t xstep, std::ptrdiff_t ystep)
196 if (x>nx-1) x=nx-1.0;
197 if (y>ny-1) y=ny-1.0;
207 double x,
double y,
unsigned p=0)
210 view.
ni(), view.
nj(),
214 #endif // vil_bilin_interp_h_ double vil_bilin_interp(const vil_image_view< T > &view, double x, double y, unsigned p=0)
Compute bilinear interpolation at (x,y), with minimal bound checks.
Concrete view of image data of type T held in memory.
double vil_na(double)
A particular qNaN to indicate not available.
double vil_bilin_interp_safe(const vil_image_view< T > &view, double x, double y, unsigned p=0)
Compute bilinear interpolation at (x,y), with bound checks.
double vil_bilin_interp_safe_edgena(const vil_image_view< T > &view, double x, double y, unsigned p=0)
Compute bilinear interpolation at (x,y), with bound checks.
NA (Not Available) is a particular double NaN to represent missing data.
std::ptrdiff_t jstep() const
Add this to your pixel pointer to get next j pixel.
unsigned ni() const
Width.
unsigned nj() const
Height.
double vil_bilin_interp_safe_extend(const vil_image_view< T > &view, double x, double y, unsigned p=0)
Compute bilinear interpolation at (x,y), with bound checks.
A base class reference-counting view of some image data.
double vil_bilin_interp_raw(double x, double y, const T *data, std::ptrdiff_t xstep, std::ptrdiff_t ystep)
Compute bilinear interpolation at (x,y), no bound checks.
double vil_bilin_interp_unsafe(double x, double y, const T *data, std::ptrdiff_t xstep, std::ptrdiff_t ystep)
Compute bilinear interpolation at (x,y), no bound checks. Requires 0<x<ni-2, 0<y<nj-2.
std::ptrdiff_t istep() const
Add this to your pixel pointer to get next i pixel.