contrib/mul/vimt3d/vimt3d_trilin_interp.h
Go to the documentation of this file.
00001 // This is mul/vimt3d/vimt3d_trilin_interp.h
00002 #ifndef vimt3d_trilin_interp_h_
00003 #define vimt3d_trilin_interp_h_
00004 //:
00005 // \file
00006 // \brief Bilinear interpolation functions for 2D images
00007 // \author Tim Cootes
00008 
00009 #include <vgl/vgl_point_3d.h>
00010 #include <vil3d/vil3d_trilin_interp.h>
00011 #include <vil3d/vil3d_image_view.h>
00012 
00013 //: Compute trilinear interpolation at (x,y,z) in world coordinates
00014 //  Interpolates given plane of image.image() at image.world2im(p)
00015 template<class T>
00016 inline double vimt3d_trilin_interp_safe(const vimt3d_image_3d_of<T>& image,
00017                                         const vgl_point_3d<double>& p,
00018                                         int plane=0)
00019 {
00020   vgl_point_3d<double> im_p = image.world2im()(p);
00021   const vil3d_image_view<T>& im = image.image();
00022   return vil3d_trilin_interp_safe(im_p.x(),im_p.y(),im_p.z(),
00023                                   im.origin_ptr()+plane*im.planestep(),
00024                                   im.ni(),im.nj(),im.nk(),
00025                                   im.istep(),im.jstep(),im.kstep());
00026 }
00027 
00028 //: Compute trilinear interpolation at (x,y,z) in world coordinates, no bound checks
00029 //  Interpolates given plane of image.image() at image.world2im(p)
00030 template<class T>
00031 inline double vimt3d_trilin_interp_raw(const vimt3d_image_3d_of<T>& image,
00032                                        const vgl_point_3d<double>& p,
00033                                        int plane=0)
00034 {
00035   vgl_point_3d<double> im_p = image.world2im()(p);
00036   const vil3d_image_view<T>& im = image.image();
00037   return vil3d_trilin_interp_raw(im_p.x(),im_p.y(),im_p.z(),
00038                                  im.origin_ptr()+plane*im.planestep(),
00039                                  im.istep(),im.jstep(),im.kstep());
00040 }
00041 
00042 #endif // vimt3d_trilin_interp_h_