3d/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_3d_vfregularizerkernel_hh
#define mia_3d_vfregularizerkernel_hh
#include <mia/core/factory.hh>
#include <mia/3d/vectorfield.hh>
NS_MIA_BEGIN
class EXPORT_3D C3DFVectorfieldRegularizerKernel : public CProductBase
{
public:
typedef C3DFVectorfieldRegularizerKernel plugin_type;
typedef C3DFVectorfield plugin_data;
class CBuffers
{
public:
virtual ~CBuffers();
};
typedef std::unique_ptr<CBuffers> PBuffers;
static const char *type_descr;
typedef std::shared_ptr< C3DFVectorfieldRegularizerKernel > Pointer;
C3DFVectorfieldRegularizerKernel(bool has_pertuberation);
float evaluate_pertuberation_row(unsigned y, unsigned z, CBuffers& buffers) const;
virtual ~C3DFVectorfieldRegularizerKernel();
void set_data_fields(C3DFVectorfield *output, const C3DFVectorfield *input);
void set_update_fields(const T3DDatafield<unsigned char> *update_flags,
T3DDatafield<unsigned char> *set_flags, T3DDatafield<float> *residua,
float residual_thresh);
float evaluate_row(unsigned y, unsigned z, CBuffers& buffers);
float evaluate_row_sparse(unsigned y, unsigned z, CBuffers& buffers);
unsigned get_boundary_padding() const;
PBuffers get_buffers() const;
void start_slice(unsigned z, CBuffers& buffers) const;
bool has_pertuberation() const;
protected:
C3DFVectorfield& get_output_field() const;
const C3DFVectorfield& get_input_field() const;
T3DDatafield<float>& get_residua() const;
const T3DDatafield<unsigned char>& get_update_flags() const;
T3DDatafield<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, unsigned z, CBuffers& buffers) = 0;
virtual float do_evaluate_row_sparse(unsigned y, unsigned z, CBuffers& buffers) = 0;
virtual unsigned do_get_boundary_padding() const = 0;
virtual PBuffers do_get_buffers() const;
virtual void do_start_slice(unsigned z, CBuffers& buffers) const;
virtual float do_evaluate_pertuberation_row(unsigned y, unsigned z, CBuffers& buffers) const;
C3DFVectorfield *m_output;
const C3DFVectorfield *m_input;
T3DDatafield<float> *m_residua;
const T3DDatafield<unsigned char> *m_update_flags;
T3DDatafield<unsigned char> *m_set_flags;
float m_residual_thresh;
bool m_has_pertuberation;
};
inline
bool C3DFVectorfieldRegularizerKernel::has_pertuberation() const
{
return m_has_pertuberation;
}
inline
C3DFVectorfield& C3DFVectorfieldRegularizerKernel::get_output_field() const
{
return *m_output;
}
inline
const C3DFVectorfield& C3DFVectorfieldRegularizerKernel::get_input_field() const
{
return *m_input;
}
inline
T3DDatafield<float>& C3DFVectorfieldRegularizerKernel::get_residua() const
{
return *m_residua;
}
inline
const T3DDatafield<unsigned char>& C3DFVectorfieldRegularizerKernel::get_update_flags() const
{
return *m_update_flags;
}
inline
T3DDatafield<unsigned char>& C3DFVectorfieldRegularizerKernel::get_set_flags() const
{
return *m_set_flags;
}
inline
float C3DFVectorfieldRegularizerKernel::get_residual_thresh() const
{
return m_residual_thresh;
}
typedef C3DFVectorfieldRegularizerKernel::Pointer P3DVectorfieldRegularizerKernel;
typedef TFactory<C3DFVectorfieldRegularizerKernel> C3DFVectorfieldRegularizerKernelPlugin;
typedef THandlerSingleton<TFactoryPluginHandler<C3DFVectorfieldRegularizerKernelPlugin>> C3DFVectorfieldRegularizerKernelPluginHandler;
template <> const char *const TPluginHandler<C3DFVectorfieldRegularizerKernelPlugin>::m_help;
extern template class EXPORT_3D TFactory<C3DFVectorfieldRegularizerKernel>;
extern template class EXPORT_3D TFactoryPluginHandler<C3DFVectorfieldRegularizerKernelPlugin>;
extern template class EXPORT_3D THandlerSingleton<TFactoryPluginHandler<C3DFVectorfieldRegularizerKernelPlugin>>;
FACTORY_TRAIT(C3DFVectorfieldRegularizerKernelPluginHandler);
NS_MIA_END
#endif
vectorfield.hh
P3DVectorfieldRegularizerKernel
C3DFVectorfieldRegularizerKernel::Pointer P3DVectorfieldRegularizerKernel
Definition 3d/vfregularizerkernel.hh:155
C3DFVectorfieldRegularizerKernelPluginHandler
THandlerSingleton< TFactoryPluginHandler< C3DFVectorfieldRegularizerKernelPlugin > > C3DFVectorfieldRegularizerKernelPluginHandler
Definition 3d/vfregularizerkernel.hh:159
C3DFVectorfieldRegularizerKernelPlugin
TFactory< C3DFVectorfieldRegularizerKernel > C3DFVectorfieldRegularizerKernelPlugin
Definition 3d/vfregularizerkernel.hh:157
C3DFVectorfieldRegularizerKernel::CBuffers
Definition 3d/vfregularizerkernel.hh:48
C3DFVectorfieldRegularizerKernel::CBuffers::~CBuffers
virtual ~CBuffers()
C3DFVectorfieldRegularizerKernel::evaluate_row_sparse
float evaluate_row_sparse(unsigned y, unsigned z, CBuffers &buffers)
C3DFVectorfieldRegularizerKernel::get_residual_thresh
float get_residual_thresh() const
Definition 3d/vfregularizerkernel.hh:150
C3DFVectorfieldRegularizerKernel::C3DFVectorfieldRegularizerKernel
C3DFVectorfieldRegularizerKernel(bool has_pertuberation)
C3DFVectorfieldRegularizerKernel::start_slice
void start_slice(unsigned z, CBuffers &buffers) const
C3DFVectorfieldRegularizerKernel::Pointer
std::shared_ptr< C3DFVectorfieldRegularizerKernel > Pointer
Definition 3d/vfregularizerkernel.hh:57
C3DFVectorfieldRegularizerKernel::evaluate_row
float evaluate_row(unsigned y, unsigned z, CBuffers &buffers)
C3DFVectorfieldRegularizerKernel::plugin_type
C3DFVectorfieldRegularizerKernel plugin_type
Definition 3d/vfregularizerkernel.hh:44
C3DFVectorfieldRegularizerKernel::evaluate_pertuberation_row
float evaluate_pertuberation_row(unsigned y, unsigned z, CBuffers &buffers) const
C3DFVectorfieldRegularizerKernel::plugin_data
C3DFVectorfield plugin_data
Definition 3d/vfregularizerkernel.hh:45
C3DFVectorfieldRegularizerKernel::has_pertuberation
bool has_pertuberation() const
Definition 3d/vfregularizerkernel.hh:114
C3DFVectorfieldRegularizerKernel::PBuffers
std::unique_ptr< CBuffers > PBuffers
Definition 3d/vfregularizerkernel.hh:53
C3DFVectorfieldRegularizerKernel::set_data_fields
void set_data_fields(C3DFVectorfield *output, const C3DFVectorfield *input)
C3DFVectorfieldRegularizerKernel::type_descr
static const char * type_descr
Definition 3d/vfregularizerkernel.hh:55
C3DFVectorfieldRegularizerKernel::get_residua
T3DDatafield< float > & get_residua() const
Definition 3d/vfregularizerkernel.hh:132
C3DFVectorfieldRegularizerKernel::get_output_field
C3DFVectorfield & get_output_field() const
Definition 3d/vfregularizerkernel.hh:120
C3DFVectorfieldRegularizerKernel::get_buffers
PBuffers get_buffers() const
C3DFVectorfieldRegularizerKernel::get_set_flags
T3DDatafield< unsigned char > & get_set_flags() const
Definition 3d/vfregularizerkernel.hh:144
C3DFVectorfieldRegularizerKernel::get_update_flags
const T3DDatafield< unsigned char > & get_update_flags() const
Definition 3d/vfregularizerkernel.hh:138
C3DFVectorfieldRegularizerKernel::get_input_field
const C3DFVectorfield & get_input_field() const
Definition 3d/vfregularizerkernel.hh:126
C3DFVectorfieldRegularizerKernel::get_boundary_padding
unsigned get_boundary_padding() const
C3DFVectorfieldRegularizerKernel::set_update_fields
void set_update_fields(const T3DDatafield< unsigned char > *update_flags, T3DDatafield< unsigned char > *set_flags, T3DDatafield< float > *residua, float residual_thresh)
C3DFVectorfieldRegularizerKernel::~C3DFVectorfieldRegularizerKernel
virtual ~C3DFVectorfieldRegularizerKernel()
C3DFVectorfield
a 3D field of floating point single accuracy 3D vectors
Definition 3d/vectorfield.hh:103
CProductBase
The base class for all plug-in created object.
Definition product_base.hh:41
T3DDatafield
A templated class of a 3D data field.
Definition 3d/datafield.hh:83
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_3D
#define EXPORT_3D
Definition defines3d.hh:45
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