8#ifndef VIGRA_MEDIANFILTER_HXX
9#define VIGRA_MEDIANFILTER_HXX
14#include "applywindowfunction.hxx"
103template<
class VALUETYPE>
107 MedianFunctor(
Diff2D window_shape)
108 : m_window_shape(window_shape),
109 m_buffer(window_shape.
x*window_shape.
y)
113 template <
class SrcIterator,
class SrcAccessor,
class DestIterator,
class DestAccessor>
114 void operator()(SrcIterator s, SrcAccessor s_acc, DestIterator d, DestAccessor d_acc)
116 SrcIterator s_ul = s - m_window_shape/2,
117 s_lr = s_ul + m_window_shape;
119 std::fill(m_buffer.begin(), m_buffer.end(), VALUETYPE());
121 SrcIterator ys = s_ul;
124 typename std::vector<VALUETYPE>::iterator iter = m_buffer.begin(),
125 median_iter = m_buffer.begin()+m_buffer.size()/2;
127 for( ; ys.y != s_lr.y; ys.y++)
129 for(xs = ys; xs.x != s_lr.x; xs.x++, iter++)
135 std::nth_element(m_buffer.begin(), median_iter, m_buffer.end());
136 d_acc.set(*median_iter,d);
139 Diff2D windowShape()
const
141 return m_window_shape;
146 std::vector<VALUETYPE> m_buffer;
150template <
class SrcIterator,
class SrcAccessor,
151 class DestIterator,
class DestAccessor>
152inline void medianFilter(SrcIterator s_ul, SrcIterator s_lr, SrcAccessor s_acc,
153 DestIterator d_ul, DestAccessor d_acc,
155 BorderTreatmentMode border = BORDER_TREATMENT_REPEAT)
157 MedianFunctor<typename SrcIterator::value_type> func(window_shape);
161template <
class SrcIterator,
class SrcAccessor,
162 class DestIterator,
class DestAccessor>
163inline void medianFilter(triple<SrcIterator, SrcIterator, SrcAccessor> s,
164 pair<DestIterator, DestAccessor> d,
166 BorderTreatmentMode border = BORDER_TREATMENT_REPEAT)
174template <
class T1,
class S1,
176inline void medianFilter(MultiArrayView<2, T1, S1>
const & src,
177 MultiArrayView<2, T2, S2> dest,
179 BorderTreatmentMode border = BORDER_TREATMENT_REPEAT)
181 vigra_precondition(src.shape() == dest.shape(),
182 "vigra::medianFilter(): shape mismatch between input and output.");
Two dimensional difference vector.
Definition diff2d.hxx:186
int y
Definition diff2d.hxx:392
int x
Definition diff2d.hxx:385
void medianFilter(...)
This function calculates the median of a window of given size for the complete image.
void applyWindowFunction(...)
Apply a window function to each pixels of a given image.