00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __itkBloxBoundaryProfileImageToBloxCoreAtomImageFilter_h
00019 #define __itkBloxBoundaryProfileImageToBloxCoreAtomImageFilter_h
00020
00021 #include "itkImageToImageFilter.h"
00022 #include "itkPoint.h"
00023 #include "itkVector.h"
00024 #include "itkCovariantVector.h"
00025 #include "itkBloxBoundaryProfileItem.h"
00026 #include "itkBloxBoundaryProfilePixel.h"
00027 #include "itkBloxBoundaryProfileImage.h"
00028 #include "itkBloxCoreAtomItem.h"
00029 #include "itkBloxCoreAtomPixel.h"
00030 #include "itkBloxCoreAtomImage.h"
00031
00032 namespace itk
00033 {
00034
00038 template< typename TInputImage, typename TOutputImage, typename TSourceImage >
00039 class ITK_EXPORT BloxBoundaryProfileImageToBloxCoreAtomImageFilter :
00040 public ImageToImageFilter< TInputImage, TOutputImage >
00041 {
00042 public:
00044 typedef BloxBoundaryProfileImageToBloxCoreAtomImageFilter Self;
00045 typedef ImageToImageFilter<TInputImage, TOutputImage> Superclass;
00046 typedef SmartPointer<Self> Pointer;
00047 typedef SmartPointer<const Self> ConstPointer;
00048
00050 itkNewMacro(Self);
00051
00053 itkTypeMacro( BloxBoundaryProfileImageToBloxCoreAtomImageFilter, ImageToImageFilter );
00054
00056 itkStaticConstMacro(NDimensions, unsigned int, TSourceImage::ImageDimension);
00057
00059 typedef TInputImage InputImageType;
00060 typedef typename InputImageType::Pointer InputImagePointer;
00061 typedef typename InputImageType::RegionType InputImageRegionType;
00062 typedef typename InputImageType::PixelType InputImagePixelType;
00063 typedef typename InputImageType::ConstPointer InputImageConstPointer;
00064
00065 typedef TOutputImage OutputImageType;
00066 typedef typename OutputImageType::Pointer OutputImagePointer;
00067 typedef typename OutputImageType::RegionType OutputImageRegionType;
00068 typedef typename OutputImageType::PixelType OutputImagePixelType;
00069 typedef typename OutputImageType::ConstPointer OutputImageConstPointer;
00070 typedef typename OutputImageType::IndexType OutputImageIndexType;
00071
00072 typedef TSourceImage SourceImageType;
00073 typedef typename SourceImageType::Pointer SourceImagePointer;
00074 typedef typename SourceImageType::RegionType SourceImageRegionType;
00075 typedef typename SourceImageType::PixelType SourceImagePixelType;
00076 typedef typename SourceImageType::ConstPointer SourceImageConstPointer;
00077 typedef typename SourceImageType::IndexType SourceImageIndexType;
00078
00080 typedef Size<itkGetStaticConstMacro(NDimensions)> SizeType;
00081
00083 typedef Point<double, itkGetStaticConstMacro(NDimensions)> PositionType;
00084
00086 typedef typename PositionType::VectorType VectorType;
00087
00089 typedef CovariantVector<double, itkGetStaticConstMacro(NDimensions)> GradientType;
00090
00092 void FindCoreAtoms();
00093
00095 typedef BloxBoundaryProfileItem<itkGetStaticConstMacro(NDimensions)> BloxProfileItemType;
00096 void FindCoreAtomsAtBoundaryPoint(BloxProfileItemType* pItem);
00098
00100 itkSetMacro(DistanceMin, double);
00101 itkSetMacro(DistanceMax, double);
00102 itkSetMacro(Epsilon, double);
00103 itkSetMacro(Polarity, bool);
00105
00107 void GenerateInputRequestedRegion();
00108
00110 void SetInput1(const SourceImageType * image1);
00111 void SetInput2(const InputImageType * image2);
00113
00114 protected:
00115 BloxBoundaryProfileImageToBloxCoreAtomImageFilter();
00116 virtual ~BloxBoundaryProfileImageToBloxCoreAtomImageFilter() {};
00117 void PrintSelf(std::ostream& os, Indent indent) const;
00118
00120 void GenerateData();
00121
00122 private:
00123 BloxBoundaryProfileImageToBloxCoreAtomImageFilter(const Self&);
00124 void operator=(const Self&);
00125
00127 InputImageConstPointer m_BoundaryProfileImagePtr;
00128 OutputImagePointer m_OutputPtr;
00129 SourceImageConstPointer m_SourceImagePtr;
00130
00134 double m_DistanceMin;
00135 double m_DistanceMax;
00136 double m_Epsilon;
00137 bool m_Polarity;
00138 bool m_IntensityFlag;
00139 unsigned int m_IntensityThreshold;
00140 bool m_CreateCoreAtom;
00141 int m_CoreAtomsCreated;
00142 };
00143
00144 }
00145
00146 #ifndef ITK_MANUAL_INSTANTIATION
00147 #include "itkBloxBoundaryProfileImageToBloxCoreAtomImageFilter.txx"
00148 #endif
00149
00150 #endif
00151