]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Common/SliceBySliceRandomWalker.h
...
[FrontAlgorithms.git] / lib / fpa / Common / SliceBySliceRandomWalker.h
1 // =========================================================================
2 // @author Leonardo Florez Valencia
3 // @email florez-l@javeriana.edu.co
4 // =========================================================================
5 #ifndef __fpa__Common__SliceBySliceRandomWalker__h__
6 #define __fpa__Common__SliceBySliceRandomWalker__h__
7
8 #include <fpa/Config.h>
9 #include <itkImageToImageFilter.h>
10
11 namespace fpa
12 {
13   namespace Common
14   {
15     /**
16      */
17     template< class _TImage, class _TLabels, class _TScalarImage >
18     class SliceBySliceRandomWalker
19       : public itk::ImageToImageFilter< _TImage, _TLabels >
20     {
21     public:
22       typedef _TImage       TImage;
23       typedef _TLabels      TLabels;
24       typedef _TScalarImage TScalarImage;
25
26       typedef SliceBySliceRandomWalker                   Self;
27       typedef itk::ImageToImageFilter< TImage, TLabels > Superclass;
28       typedef itk::SmartPointer< Self >                  Pointer;
29       typedef itk::SmartPointer< const Self >            ConstPointer;
30
31       typedef typename TImage::PixelType       TPixel;
32       typedef typename TLabels::PixelType      TLabel;
33       typedef typename TScalarImage::PixelType TScalar;
34
35     public:
36       itkNewMacro( Self );
37       itkTypeMacro(
38         fpa::Common::SliceBySliceRandomWalker, itk::ImageToImageFilter
39         );
40
41       itkGetConstMacro( Epsilon, TScalar );
42       itkSetMacro( Epsilon, TScalar );
43
44       itkGetConstMacro( Beta, TScalar );
45       itkSetMacro( Beta, TScalar );
46
47       itkGetConstMacro( VesselnessThreshold, TScalar );
48       itkSetMacro( VesselnessThreshold, TScalar );
49
50       ivqITKInputMacro( InputLabels, TLabels );
51       ivqITKInputMacro( InputVesselness, TScalarImage );
52
53     protected:
54       SliceBySliceRandomWalker( );
55       virtual ~SliceBySliceRandomWalker( );
56
57       virtual void GenerateData( ) override;
58
59       void _Composite(
60         typename TScalarImage::Pointer& composite,
61         const TLabels* labels,
62         const TScalarImage* vesselness,
63         const TScalar& maxVess
64         );
65
66       template< class _TSlicePtr, class _TInput >
67       void _Slice(
68         _TSlicePtr& slice,
69         const _TInput* input,
70         typename _TInput::RegionType region
71         );
72
73       template< class _TBinaryTree, class _TData3D, class _TFusion >
74       void _RandomWalker(
75         _TBinaryTree& binaryTree,
76         const _TData3D& data3D,
77         const _TFusion& fusion,
78         bool down
79         );
80
81     private:
82       // Purposely not implemented
83       SliceBySliceRandomWalker( const Self& other );
84       Self& operator=( const Self& other );
85
86     protected:
87       TScalar m_Epsilon;
88       TScalar m_Beta;
89       TScalar m_VesselnessThreshold;
90
91       TScalar m_VesselnessValue;
92     };
93
94   } // ecapseman
95
96 } // ecapseman
97
98 #ifndef ITK_MANUAL_INSTANTIATION
99 #  include <fpa/Common/SliceBySliceRandomWalker.hxx>
100 #endif // ITK_MANUAL_INSTANTIATION
101 #endif // __fpa__Common__SliceBySliceRandomWalker__h__
102 // eof - $RCSfile$