2d/vfregularizerkernel.hh
Go to the documentation of this file.
/* -*- mia-c++ -*-
*
* This file is part of MIA - a toolbox for medical image analysis
* Copyright (c) Leipzig, Madrid 1999-2017 Gert Wollny
*
* MIA is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with MIA; if not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef mia_2d_vfregularizerkernel_hh
#define mia_2d_vfregularizerkernel_hh
#include <mia/core/factory.hh>
#include <mia/2d/vectorfield.hh>
NS_MIA_BEGIN
class EXPORT_2D C2DFVectorfieldRegularizerKernel : public CProductBase
{
public:
typedef C2DFVectorfieldRegularizerKernel plugin_type;
typedef C2DFVectorfield plugin_data;
class CBuffers
{
public:
virtual ~CBuffers();
};
typedef std::unique_ptr<CBuffers> PBuffers;
static const char *type_descr;
typedef std::shared_ptr< C2DFVectorfieldRegularizerKernel > Pointer;
C2DFVectorfieldRegularizerKernel(bool has_pertuberation);
float evaluate_pertuberation_row(unsigned y, CBuffers& buffers) const;
virtual ~C2DFVectorfieldRegularizerKernel();
void set_data_fields(C2DFVectorfield *output, const C2DFVectorfield *input);
void set_update_fields(const T2DDatafield<unsigned char> *update_flags,
T2DDatafield<unsigned char> *set_flags, T2DDatafield<float> *residua,
float residual_thresh);
float evaluate_row(unsigned y, CBuffers& buffers);
float evaluate_row_sparse(unsigned y, CBuffers& buffers);
unsigned get_boundary_padding() const;
PBuffers get_buffers() const;
void start_row(unsigned y, CBuffers& buffers) const;
bool has_pertuberation() const;
protected:
C2DFVectorfield& get_output_field() const;
const C2DFVectorfield& get_input_field() const;
T2DDatafield<float>& get_residua() const;
const T2DDatafield<unsigned char>& get_update_flags() const;
T2DDatafield<unsigned char>& get_set_flags() const;
float get_residual_thresh() const;
private:
virtual void post_set_data_fields();
virtual float do_evaluate_row(unsigned y, CBuffers& buffers) = 0;
virtual float do_evaluate_row_sparse(unsigned y, CBuffers& buffers) = 0;
virtual unsigned do_get_boundary_padding() const = 0;
virtual PBuffers do_get_buffers() const;
virtual void do_start_row(unsigned y, CBuffers& buffers) const;
virtual float do_evaluate_pertuberation_row(unsigned y, CBuffers& buffers) const;
C2DFVectorfield *m_output;
const C2DFVectorfield *m_input;
T2DDatafield<float> *m_residua;
const T2DDatafield<unsigned char> *m_update_flags;
T2DDatafield<unsigned char> *m_set_flags;
float m_residual_thresh;
bool m_has_pertuberation;
};
inline
bool C2DFVectorfieldRegularizerKernel::has_pertuberation() const
{
return m_has_pertuberation;
}
inline
C2DFVectorfield& C2DFVectorfieldRegularizerKernel::get_output_field() const
{
return *m_output;
}
inline
const C2DFVectorfield& C2DFVectorfieldRegularizerKernel::get_input_field() const
{
return *m_input;
}
inline
T2DDatafield<float>& C2DFVectorfieldRegularizerKernel::get_residua() const
{
return *m_residua;
}
inline
const T2DDatafield<unsigned char>& C2DFVectorfieldRegularizerKernel::get_update_flags() const
{
return *m_update_flags;
}
inline
T2DDatafield<unsigned char>& C2DFVectorfieldRegularizerKernel::get_set_flags() const
{
return *m_set_flags;
}
inline
float C2DFVectorfieldRegularizerKernel::get_residual_thresh() const
{
return m_residual_thresh;
}
typedef C2DFVectorfieldRegularizerKernel::Pointer P2DVectorfieldRegularizerKernel;
typedef TFactory<C2DFVectorfieldRegularizerKernel> C2DFVectorfieldRegularizerKernelPlugin;
typedef THandlerSingleton<TFactoryPluginHandler<C2DFVectorfieldRegularizerKernelPlugin>> C2DFVectorfieldRegularizerKernelPluginHandler;
template <> const char *const TPluginHandler<C2DFVectorfieldRegularizerKernelPlugin>::m_help;
extern template class EXPORT_2D TFactory<C2DFVectorfieldRegularizerKernel>;
extern template class EXPORT_2D TFactoryPluginHandler<C2DFVectorfieldRegularizerKernelPlugin>;
extern template class EXPORT_2D THandlerSingleton<TFactoryPluginHandler<C2DFVectorfieldRegularizerKernelPlugin>>;
FACTORY_TRAIT(C2DFVectorfieldRegularizerKernelPluginHandler);
NS_MIA_END
#endif
vectorfield.hh
C2DFVectorfieldRegularizerKernelPluginHandler
THandlerSingleton< TFactoryPluginHandler< C2DFVectorfieldRegularizerKernelPlugin > > C2DFVectorfieldRegularizerKernelPluginHandler
Definition 2d/vfregularizerkernel.hh:159
P2DVectorfieldRegularizerKernel
C2DFVectorfieldRegularizerKernel::Pointer P2DVectorfieldRegularizerKernel
Definition 2d/vfregularizerkernel.hh:155
C2DFVectorfieldRegularizerKernelPlugin
TFactory< C2DFVectorfieldRegularizerKernel > C2DFVectorfieldRegularizerKernelPlugin
Definition 2d/vfregularizerkernel.hh:157
C2DFVectorfieldRegularizerKernel::CBuffers
Definition 2d/vfregularizerkernel.hh:48
C2DFVectorfieldRegularizerKernel::CBuffers::~CBuffers
virtual ~CBuffers()
C2DFVectorfieldRegularizerKernel::get_residua
T2DDatafield< float > & get_residua() const
Definition 2d/vfregularizerkernel.hh:132
C2DFVectorfieldRegularizerKernel::set_update_fields
void set_update_fields(const T2DDatafield< unsigned char > *update_flags, T2DDatafield< unsigned char > *set_flags, T2DDatafield< float > *residua, float residual_thresh)
C2DFVectorfieldRegularizerKernel::Pointer
std::shared_ptr< C2DFVectorfieldRegularizerKernel > Pointer
Definition 2d/vfregularizerkernel.hh:57
C2DFVectorfieldRegularizerKernel::has_pertuberation
bool has_pertuberation() const
Definition 2d/vfregularizerkernel.hh:114
C2DFVectorfieldRegularizerKernel::type_descr
static const char * type_descr
Definition 2d/vfregularizerkernel.hh:55
C2DFVectorfieldRegularizerKernel::get_output_field
C2DFVectorfield & get_output_field() const
Definition 2d/vfregularizerkernel.hh:120
C2DFVectorfieldRegularizerKernel::plugin_data
C2DFVectorfield plugin_data
Definition 2d/vfregularizerkernel.hh:45
C2DFVectorfieldRegularizerKernel::get_boundary_padding
unsigned get_boundary_padding() const
C2DFVectorfieldRegularizerKernel::~C2DFVectorfieldRegularizerKernel
virtual ~C2DFVectorfieldRegularizerKernel()
C2DFVectorfieldRegularizerKernel::get_set_flags
T2DDatafield< unsigned char > & get_set_flags() const
Definition 2d/vfregularizerkernel.hh:144
C2DFVectorfieldRegularizerKernel::get_residual_thresh
float get_residual_thresh() const
Definition 2d/vfregularizerkernel.hh:150
C2DFVectorfieldRegularizerKernel::get_buffers
PBuffers get_buffers() const
C2DFVectorfieldRegularizerKernel::evaluate_row
float evaluate_row(unsigned y, CBuffers &buffers)
C2DFVectorfieldRegularizerKernel::get_update_flags
const T2DDatafield< unsigned char > & get_update_flags() const
Definition 2d/vfregularizerkernel.hh:138
C2DFVectorfieldRegularizerKernel::evaluate_row_sparse
float evaluate_row_sparse(unsigned y, CBuffers &buffers)
C2DFVectorfieldRegularizerKernel::get_input_field
const C2DFVectorfield & get_input_field() const
Definition 2d/vfregularizerkernel.hh:126
C2DFVectorfieldRegularizerKernel::PBuffers
std::unique_ptr< CBuffers > PBuffers
Definition 2d/vfregularizerkernel.hh:53
C2DFVectorfieldRegularizerKernel::plugin_type
C2DFVectorfieldRegularizerKernel plugin_type
Definition 2d/vfregularizerkernel.hh:44
C2DFVectorfieldRegularizerKernel::C2DFVectorfieldRegularizerKernel
C2DFVectorfieldRegularizerKernel(bool has_pertuberation)
C2DFVectorfieldRegularizerKernel::evaluate_pertuberation_row
float evaluate_pertuberation_row(unsigned y, CBuffers &buffers) const
C2DFVectorfieldRegularizerKernel::start_row
void start_row(unsigned y, CBuffers &buffers) const
C2DFVectorfieldRegularizerKernel::set_data_fields
void set_data_fields(C2DFVectorfield *output, const C2DFVectorfield *input)
C2DFVectorfield
a 2D field of floating point single accuracy 2D vectors
Definition 2d/vectorfield.hh:80
CProductBase
The base class for all plug-in created object.
Definition product_base.hh:41
T2DDatafield
A class to hold data on a regular 2D grid.
Definition 2d/datafield.hh:90
TFactoryPluginHandler
the Base class for all plugn handlers that deal with factory plugins.
Definition factory.hh:95
TFactory
This is tha base of all plugins that create "things", like filters, cost functions time step operator...
Definition factory.hh:51
THandlerSingleton
the singleton that a plug-in handler really is
Definition handler.hh:159
CCmdOptionFlags::output
@ output
Definition cmdoptionflags.hh:32
CCmdOptionFlags::input
@ input
Definition cmdoptionflags.hh:31
EXPORT_2D
#define EXPORT_2D
Definition defines2d.hh:37
NS_MIA_BEGIN
#define NS_MIA_BEGIN
conveniance define to start the mia namespace
Definition defines.hh:33
NS_MIA_END
#define NS_MIA_END
conveniance define to end the mia namespace
Definition defines.hh:36
factory.hh
FACTORY_TRAIT
#define FACTORY_TRAIT(F)
Definition factory_trait.hh:69