00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
#ifndef _itkFastMarchingExtensionImageFilter_h
00018
#define _itkFastMarchingExtensionImageFilter_h
00019
00020
#include "itkFastMarchingImageFilter.h"
00021
#include "itkImage.h"
00022
#include "itkLevelSet.h"
00023
00024
namespace itk
00025 {
00026
00052
template <
00053
class TLevelSet,
00054
class TAuxValue,
00055
unsigned int VAuxDimension = 1,
00056
class TSpeedImage = Image<float,::itk::GetImageDimension<TLevelSet>::ImageDimension>
00057 >
00058 class ITK_EXPORT FastMarchingExtensionImageFilter :
00059
public FastMarchingImageFilter<TLevelSet,TSpeedImage>
00060 {
00061
public:
00063 typedef FastMarchingExtensionImageFilter
Self;
00064 typedef FastMarchingImageFilter<TLevelSet,TSpeedImage> Superclass;
00065 typedef SmartPointer<Self> Pointer;
00066 typedef SmartPointer<const Self> ConstPointer;
00067
00069
itkNewMacro(
Self);
00070
00072
itkTypeMacro(FastMarchingExtensionImageFilter,
FastMarchingImageFilter);
00073
00075 typedef typename Superclass::LevelSetType
LevelSetType;
00076 typedef typename Superclass::SpeedImageType
SpeedImageType;
00077 typedef typename Superclass::LevelSetImageType
LevelSetImageType;
00078
00080
itkStaticConstMacro(SetDimension,
unsigned int,Superclass::SetDimension);
00081
00083
itkStaticConstMacro(AuxDimension,
unsigned int,VAuxDimension);
00084
00086
typedef AuxVarTypeDefault<TAuxValue,
00087
itkGetStaticConstMacro(AuxDimension),
00088 itkGetStaticConstMacro(SetDimension)>
AuxVarType;
00089 typedef typename AuxVarType::AuxValueType
AuxValueType;
00090 typedef typename AuxVarType::AuxValueVectorType
AuxValueVectorType;
00091 typedef typename AuxVarType::AuxValueContainer
AuxValueContainer;
00092 typedef typename AuxVarType::AuxImageType
AuxImageType;
00093 typedef typename AuxVarType::AuxImagePointer
AuxImagePointer;
00094
00096
typedef Index<itkGetStaticConstMacro(SetDimension)> IndexType;
00097
00099
AuxImageType * GetAuxiliaryImage(
unsigned int idx );
00100
00102
void SetAuxiliaryAliveValues(
AuxValueContainer * values )
00103 { m_AuxAliveValues = values; }
00104
00106 AuxValueContainer * GetAuxiliaryAliveValues(
void)
00107 {
return m_AuxAliveValues.GetPointer(); }
00108
00110
void SetAuxiliaryTrialValues( AuxValueContainer * values )
00111 { m_AuxTrialValues = values; }
00112
00114
typename AuxValueContainer::Pointer GetAuxiliaryTrialValues()
00115 {
return m_AuxTrialValues; }
00116
00117
protected:
00118 FastMarchingExtensionImageFilter();
00119 ~FastMarchingExtensionImageFilter(){};
00120 void PrintSelf( std::ostream& os,
Indent indent )
const;
00121
00122
virtual void Initialize(
LevelSetImageType * );
00123
virtual double UpdateValue(
const IndexType & index,
00124
const SpeedImageType * speed,
LevelSetImageType * output);
00125
00127
virtual void GenerateOutputInformation();
00128
virtual void EnlargeOutputRequestedRegion(
DataObject *output );
00129
00130
private:
00131 FastMarchingExtensionImageFilter(
const Self&);
00132
void operator=(
const Self&);
00133
00134
typename AuxValueContainer::Pointer m_AuxAliveValues;
00135
typename AuxValueContainer::Pointer m_AuxTrialValues;
00136
00137 };
00138
00139 }
00140
00141
00142
#ifndef ITK_MANUAL_INSTANTIATION
00143
#include "itkFastMarchingExtensionImageFilter.txx"
00144
#endif
00145
00146
#endif