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_ANISOTROPIC_H
00026 #define IMG_ALG_FILTER_ANISOTROPIC_H
00027
00028 #include "gaussian.hh"
00029
00030 namespace ost { namespace img { namespace alg {
00031
00032 class DLLEXPORT_IMG_ALG AnisotropicFilter: public GaussianFilter {
00033 public:
00034 AnisotropicFilter(Real sigma=1.0);
00035
00036 template <typename T, class D>
00037 void VisitState(ImageStateImpl<T,D>& s);
00038
00039 protected:
00040 template <typename T, class D>
00041 void lineTransformFW(ImageStateImpl<T, D>& s,
00042 ExtentIterator& it,
00043 std::vector<T>& tmp_avg,
00044 std::vector<T>& tmp_min,
00045 std::vector<T>& tmp_max);
00046
00047 template <typename T, class D>
00048 void lineTransformBW(ImageStateImpl<T,D>& s,
00049 ExtentIterator& it,
00050 std::vector<T>& tmp_avg,
00051 std::vector<T>& tmp_min,
00052 std::vector<T>& tmp_max );
00053
00054 private:
00055 int n_;
00056 Real b1_b0_, b2_b0_, b3_b0_;
00057
00058 template <typename T>
00059 bool is_larger(const T& v1, const T& v2);
00060 };
00061
00062 }}}
00063
00064 #endif