00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef IMG_ALG_FILTER_GAUSSIAN_GRADIENT_MAGNITUDE_H
00026 #define IMG_ALG_FILTER_GAUSSIAN_GRADIENT_MAGNITUDE_H
00027
00028 #include <ost/img/algorithm.hh>
00029 #include <ost/img/image_state.hh>
00030 #include <ost/img/image_state/image_state_visitor.hh>
00031 #include <ost/message.hh>
00032
00033 #include "line_iterator.hh"
00034
00035 namespace ost { namespace img { namespace alg {
00036
00038
00045 class DLLEXPORT_IMG_ALG GaussianGradientMagnitudeFilterBase
00046 {
00047 public:
00049 GaussianGradientMagnitudeFilterBase(Real sigma=1.0);
00050
00051 template <typename T, class D>
00052 void VisitState(ImageStateImpl<T,D>& s);
00053
00054 static String GetAlgorithmName() {return "GaussianGradientMagnitudeFilter";}
00055
00057 void SetSigma(Real sigma) {
00058 calcBVals( calcQ(sigma) );
00059 }
00061 void SetQ(Real q) {
00062 calcBVals( q );
00063 }
00064
00065 protected:
00066 Real b0_, b1_, b2_, b3_, bb_;
00067
00068 private:
00069 Real calcQ( Real sigma );
00070 void calcBVals( Real q );
00071
00072 template <typename T, class D>
00073 void lineTransformFW(ImageStateImpl<T,D>& s, ExtentIterator& it);
00074
00075 template <typename T, class D>
00076 void lineTransformBW(ImageStateImpl<T,D>& s, ExtentIterator& it);
00077 };
00078
00079 typedef ImageStateModIPAlgorithm<GaussianGradientMagnitudeFilterBase> GaussianGradientMagnitudeFilter;
00080
00081 }
00082
00083 OST_IMG_ALG_EXPLICIT_INST_DECL(class,ImageStateModIPAlgorithm<alg::GaussianGradientMagnitudeFilterBase>)
00084
00085 }}
00086
00087 #endif