8#ifndef VIGRA_SPECKLEFILTER_HXX
9#define VIGRA_SPECKLEFILTER_HXX
11#include "basicimage.hxx"
12#include "inspectimage.hxx"
14#include "applywindowfunction.hxx"
29 double w_half = window_shape.
x/2.0,
30 h_half = window_shape.
y/2.0,
33 for(y=0; y != window_shape.
y; y++)
35 for(x=0; x != window_shape.
x; x++)
39 res(x,y) = sqrt(x_diff*x_diff + y_diff*y_diff);
137template<
typename VALUETYPE>
146 using namespace vigra;
147 vigra_precondition(
k>0 &&
k<=1 ,
"vigra::FrostFunctor(): Damping factor k has to be: 0 < k <= 1!");
150 template <
class SrcIterator,
class SrcAccessor,
class DestIterator,
class DestAccessor>
153 using namespace vigra;
197 Diff2D windowShape()
const
199 return m_window_shape;
213 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
224 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
233template <
class T1,
class S1,
238 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
240 vigra_precondition(
src.shape() ==
dest.shape(),
241 "vigra::frostFilter(): Shape mismatch between input and output.");
339template<
typename VALUETYPE>
350 using namespace vigra;
351 vigra_precondition(
k>0 &&
k<=1 ,
"vigra::EnhancedFrostFunctor(): Damping factor k has to be: 0 < k <= 1!");
352 vigra_precondition(
enl>0,
"vigra::EnhancedFrostFunctor(): Equivalent number of looks (enl) must be larger than zero!");
355 template <
class SrcIterator,
class SrcAccessor,
class DestIterator,
class DestAccessor>
358 using namespace vigra;
370 C_max = sqrt(1+2.0/m_enl),
405 Diff2D windowShape()
const
407 return m_window_shape;
413 inline double func(
double C_I,
double C_max,
double C_u)
const
440 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
451 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
453 enhancedFrostFilter(s.first, s.second, s.third,
460template <
class T1,
class S1,
465 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
467 vigra_precondition(
src.shape() ==
dest.shape(),
468 "vigra::enhancedFrostFilter(): Shape mismatch between input and output.");
469 enhancedFrostFilter(srcImageRange(
src),
565template<
typename VALUETYPE>
573 using namespace vigra;
574 vigra_precondition(
enl>0,
"vigra::GamaMAPFunctor(): Equivalent number of looks (enl) must be larger than zero!");
577 template <
class SrcIterator,
class SrcAccessor,
class DestIterator,
class DestAccessor>
580 using namespace vigra;
591 C_max = sqrt(1+2.0/m_enl),
605 d_acc.set(result, d);
613 Diff2D windowShape()
const
615 return m_window_shape;
629 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
640 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
642 gammaMAPFilter(s.first, s.second, s.third,
648template <
class T1,
class S1,
653 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
655 vigra_precondition(
src.shape() ==
dest.shape(),
656 "vigra::gammaMAPFilter(): Shape mismatch between input and output.");
657 gammaMAPFilter(srcImageRange(
src),
751template<
typename VALUETYPE>
759 using namespace vigra;
760 vigra_precondition(
enl>0,
"vigra::KuanFunctor(): Equivalent number of looks (enl) must be larger than zero!");
763 template <
class SrcIterator,
class SrcAccessor,
class DestIterator,
class DestAccessor>
766 using namespace vigra;
776 C_u2 = (0.523*0.523)/m_enl,
785 Diff2D windowShape()
const
787 return m_window_shape;
800 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
811 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
813 kuanFilter(s.first, s.second, s.third,
819template <
class T1,
class S1,
824 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
826 vigra_precondition(
src.shape() ==
dest.shape(),
827 "vigra::kuanFilter(): Shape mismatch between input and output.");
828 kuanFilter(srcImageRange(
src),
921template<
typename VALUETYPE =
float>
929 using namespace vigra;
930 vigra_precondition(
enl>0,
"vigra::LeeFunctor(): Equivalent number of looks (enl) must be larger than zero!");
934 template <
class SrcIterator,
class SrcAccessor,
class DestIterator,
class DestAccessor>
937 using namespace vigra;
955 Diff2D windowShape()
const
957 return m_window_shape;
970 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
981 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
983 leeFilter(s.first, s.second, s.third,
989template <
class T1,
class S1,
994 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
996 vigra_precondition(
src.shape() ==
dest.shape(),
997 "vigra::leeFilter(): Shape mismatch between input and output.");
998 leeFilter(srcImageRange(
src),
1095template<
typename VALUETYPE>
1104 using namespace vigra;
1105 vigra_precondition(
k>0 &&
k<=1 ,
"vigra::EnhancedLeeFunctor(): Damping factor k has to be: 0 < k <= 1!");
1106 vigra_precondition(
enl>0,
"vigra::EnhancedLeeFunctor(): Equivalent number of looks (enl) must be larger than zero!");
1109 template <
class SrcIterator,
class SrcAccessor,
class DestIterator,
class DestAccessor>
1112 using namespace vigra;
1124 C_max = sqrt(1+2.0/m_enl),
1142 Diff2D windowShape()
const
1144 return m_window_shape;
1159 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
1170 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
1172 enhancedLeeFilter(s.first, s.second, s.third,
1178template <
class T1,
class S1,
1183 BorderTreatmentMode
border = BORDER_TREATMENT_REPEAT)
1185 vigra_precondition(
src.shape() ==
dest.shape(),
1186 "vigra::enhancedLeeFilter(): Shape mismatch between input and output.");
1187 enhancedLeeFilter(srcImageRange(
src),
Accessor accessor()
Definition basicimage.hxx:1066
traverser upperLeft()
Definition basicimage.hxx:925
Two dimensional difference vector.
Definition diff2d.hxx:186
int y
Definition diff2d.hxx:392
int x
Definition diff2d.hxx:385
This function tries to reduce the speckle noise of an image by applying the Enhanced Frost filter.
Definition specklefilters.hxx:341
This function tries to reduce the speckle noise of an image by applying the Enhanced Lee filter.
Definition specklefilters.hxx:1097
This function tries to reduce the speckle noise of an image by applying the Gamma Maximum A Posterior...
Definition specklefilters.hxx:567
This function tries to reduce the speckle noise of an image by applying the Kuan filter.
Definition specklefilters.hxx:753
This function tries to reduce the speckle noise of an image by applying the basic Lee filter.
Definition specklefilters.hxx:923
Class for a single RGB value.
Definition rgbvalue.hxx:128
void inspectImage(...)
Apply read-only functor to every pixel in the image.
void frostFilter(...)
This function tries to reduce the speckle noise of an image by applying the basic Frost filter.
void applyWindowFunction(...)
Apply a window function to each pixels of a given image.