2 #ifndef vil_correlate_2d_h_ 3 #define vil_correlate_2d_h_ 10 # include <vcl_msvc_warnings.h> 18 template <
class srcT,
class kernelT,
class accumT>
20 std::ptrdiff_t s_jstep, std::ptrdiff_t s_pstep,
24 unsigned ni = kernel.
ni();
25 unsigned nj = kernel.
nj();
28 std::ptrdiff_t k_istep = kernel.
istep(), k_jstep = kernel.
jstep();
31 for (
unsigned p = 0; p<np; ++p)
34 const srcT* src_row = src_im + p*s_pstep;
37 for (
unsigned int j=0;j<nj;++j,src_row+=s_jstep,k_row+=k_jstep)
39 const srcT* sp = src_row;
40 const kernelT* kp = k_row;
42 for (
unsigned int i=0;i<ni;++i, sp += s_istep, kp += k_istep)
43 sum += accumT(*sp)*accumT(*kp);
55 template <
class srcT,
class destT,
class kernelT,
class accumT>
61 int ni = 1+src_im.
ni()-kernel.
ni(); assert(ni >= 0);
62 int nj = 1+src_im.
nj()-kernel.
nj(); assert(nj >= 0);
63 std::ptrdiff_t s_istep = src_im.
istep(), s_jstep = src_im.
jstep();
64 std::ptrdiff_t s_pstep = src_im.
planestep();
67 std::ptrdiff_t d_istep = dest_im.
istep(),d_jstep = dest_im.
jstep();
73 for (
int j=0;j<nj;++j,src_row+=s_jstep,dest_row+=d_jstep)
75 const srcT* sp = src_row;
77 for (
int i=0;i<ni;++i, sp += s_istep, dp += d_istep)
83 #endif // vil_correlate_2d_h_ Concrete view of image data of type T held in memory.
void set_size(unsigned ni, unsigned nj) override
resize current planes to ni x nj.
accumT vil_correlate_2d_at_pt(const srcT *src_im, std::ptrdiff_t s_istep, std::ptrdiff_t s_jstep, std::ptrdiff_t s_pstep, const vil_image_view< kernelT > &kernel, accumT)
Evaluate dot product between kernel and src_im.
void vil_correlate_2d(const vil_image_view< srcT > &src_im, vil_image_view< destT > &dest_im, const vil_image_view< kernelT > &kernel, accumT ac)
Correlate kernel with srcT.
std::ptrdiff_t jstep() const
Add this to your pixel pointer to get next j pixel.
unsigned ni() const
Width.
unsigned nj() const
Height.
std::ptrdiff_t planestep() const
Add this to your pixel pointer to get pixel on next plane.
A base class reference-counting view of some image data.
T * top_left_ptr()
Pointer to the first (top left in plane 0) pixel.
unsigned nplanes() const
Number of planes.
std::ptrdiff_t istep() const
Add this to your pixel pointer to get next i pixel.