35 #ifndef AIMS_PRIMALSKETCH_DIFFUSIONSMOOTHER_H
36 #define AIMS_PRIMALSKETCH_DIFFUSIONSMOOTHER_H
47 :
public Smoother<carto::VolumeRef<T>, carto::VolumeRef<T> >
53 void check(
int maxiter);
56 if (Delta_t<=0.25)
_dt=Delta_t;
58 std::cerr <<
"Diffusion Smoother : dt must be <= 0.25"
59 << std::endl; exit(EXIT_FAILURE);
63 int maxiter,
bool verbose=
false) = 0;
83 _hasConstantSources( false ) {}
88 int maxiter,
bool verbose=
false);
94 bool _hasConstantSources;
95 T _constantSourcesBackground;
110 int maxiter,
bool verbose=
false) = 0;
126 template<
typename T,
typename N=std::vector<Po
int3df> >
136 int maxiter,
bool verbose=
false);
155 _has_neumann_condition(false) {}
160 int maxiter,
bool verbose=
false);
161 void add_neumann_condition(
const Point3df &p);
167 bool _has_neumann_condition;
168 std::vector<Point3df> _neumann_conditions;
193 int maxiter,
bool verbose=
false);
195 _neumann_value = value;
201 short _neumann_value;
Base class for Heat diffusion.
static carto::VolumeRef< float > init_laplacian(void)
BaseDiffusionSmoother(float delta_t)
void SetDt(float Delta_t)
static carto::VolumeRef< float > laplacian
virtual carto::VolumeRef< T > doSmoothing(const carto::VolumeRef< T > &ima, int maxiter, bool verbose=false)=0
carto::VolumeRef< short > _mask
BaseMaskedDiffusionSmoother(float delta_t, bool safe=true)
void setMask(const carto::rc_ptr< carto::Volume< short > > &mask, short background=0)
virtual carto::VolumeRef< T > doSmoothing(const carto::VolumeRef< T > &ima, int maxiter, bool verbose=false)=0
~BaseMaskedDiffusionSmoother()
Heat diffusion with a volume of given datasource (Dirichlet conditions)
DiffusionSmoother(float delta_t)
void setConstantSources(const carto::VolumeRef< T > &, const T &background)
void removeConstantSources()
virtual carto::VolumeRef< T > doSmoothing(const carto::VolumeRef< T > &ima, int maxiter, bool verbose=false)
MaskedDiffusionSmoother(float delta_t, bool safe=true)
~MaskedDiffusionSmoother()
void set_neumann_value(short value)
~MaskedDiffusionSmoother()
MaskedDiffusionSmoother(float delta_t, bool safe=true)
carto::VolumeRef< T > doSmoothing(const carto::VolumeRef< T > &ima, int maxiter, bool verbose=false)
~MaskedDiffusionSmoother()
MaskedDiffusionSmoother(float delta_t, bool safe=true)
BucketMap< Void > * mask(const BucketMap< Void > &src, const BucketMap< Void > &m, bool intersect=true)