1 #ifndef vil_median_hxx_ 2 #define vil_median_hxx_ 11 # include <vcl_msvc_warnings.h> 23 unsigned ni = src_image.
ni();
24 unsigned nj = src_image.
nj();
27 std::ptrdiff_t s_istep = src_image.
istep(), s_jstep = src_image.
jstep();
28 std::ptrdiff_t d_istep = dest_image.
istep(), d_jstep = dest_image.
jstep();
33 std::vector<std::ptrdiff_t> offset;
36 std::vector<T> value_wkspce;
39 int ilo = -element.
min_i();
40 int ihi = ni-1-element.
max_i();
41 int jlo = -element.
min_j();
42 int jhi = nj-1-element.
max_j();
45 for (
int i=0;i<ilo;++i)
46 for (
unsigned int j=0;j<nj;++j)
47 dest_image(i,j,0)=
vil_sorted_value(src_image,0,element,i,j,value_wkspce,0.5);
49 for (
unsigned int i=ihi+1;i<ni;++i)
50 for (
unsigned int j=0;j<nj;++j)
51 dest_image(i,j,0)=
vil_sorted_value(src_image,0,element,i,j,value_wkspce,0.5);
53 for (
int i=ilo;i<=ihi;++i)
54 for (
int j=0;j<jlo;++j)
55 dest_image(i,j,0)=
vil_sorted_value(src_image,0,element,i,j,value_wkspce,0.5);
57 for (
int i=ilo;i<=ihi;++i)
58 for (
unsigned int j=jhi+1;j<nj;++j)
59 dest_image(i,j,0)=
vil_sorted_value(src_image,0,element,i,j,value_wkspce,0.5);
63 value_wkspce.resize( offset.size() );
64 int rank = int(0.5*(offset.size()-1));
65 for (
int j=jlo;j<=jhi;++j)
67 const T* src_p = src_row0 + j*s_jstep + ilo*s_istep;
68 T* dest_p = dest_row0 + j*d_jstep + ilo * d_istep;
70 for (
int i=ilo;i<=ihi;++i,src_p+=s_istep,dest_p+=d_istep)
71 *dest_p=
vil_sorted_value(src_p,&offset[0],value_wkspce.begin(),offset.size(),rank);
75 #undef VIL_MEDIAN_INSTANTIATE 76 #define VIL_MEDIAN_INSTANTIATE(T) \ 77 template void vil_median(const vil_image_view< T >& src_image, \ 78 vil_image_view< T >& dest_image, \ 79 const vil_structuring_element& element) 81 #endif // vil_median_hxx_ int max_i() const
Elements in box bounded by [min_i(),max_i()][min_j(),max_j()].
Structuring element for morphology represented as a list of non-zero pixels.
Concrete view of image data of type T held in memory.
int max_j() const
Elements in box bounded by [min_i(),max_i()][min_j(),max_j()].
void set_size(unsigned ni, unsigned nj) override
resize current planes to ni x nj.
void vil_median(const vil_image_view< T > &src_image, vil_image_view< T > &dest_image, const vil_structuring_element &element)
Computes median value of pixels under structuring element.
std::ptrdiff_t jstep() const
Add this to your pixel pointer to get next j pixel.
unsigned ni() const
Width.
unsigned nj() const
Height.
void vil_compute_offsets(std::vector< std::ptrdiff_t > &offset, const vil_structuring_element &element, std::ptrdiff_t istep, std::ptrdiff_t jstep)
Generate a list of offsets for use on image with istep,jstep.
T vil_sorted_value(const vil_image_view< T > &image, unsigned plane, const vil_structuring_element &element, int i0, int j0, std::vector< T > &values, double r)
Return (n*r)-th sorted value of pixels under element centred at (i0,j0).
int min_j() const
Elements in box bounded by [min_i(),max_i()][min_j(),max_j()].
T * top_left_ptr()
Pointer to the first (top left in plane 0) pixel.
unsigned nplanes() const
Number of planes.
int min_i() const
Elements in box bounded by [min_i(),max_i()][min_j(),max_j()].
std::ptrdiff_t istep() const
Add this to your pixel pointer to get next i pixel.