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 TSourceImage, unsigned int dim >
00039 class ITK_EXPORT BloxBoundaryProfileImageToBloxCoreAtomImageFilter :
00040 public ImageToImageFilter< BloxBoundaryProfileImage<dim>,
00041 BloxCoreAtomImage<dim> >
00042 {
00043 public:
00045 typedef BloxBoundaryProfileImageToBloxCoreAtomImageFilter Self;
00046 typedef ImageToImageFilter<BloxBoundaryProfileImage<dim>,
00047 BloxCoreAtomImage<dim> > Superclass;
00048 typedef SmartPointer<Self> Pointer;
00049 typedef SmartPointer<const Self> ConstPointer;
00050
00052 itkNewMacro(Self);
00053
00055 itkTypeMacro( itkBloxBoundaryProfileImageToBloxCoreAtomImageFilter, ImageToImageFilter );
00056
00058 itkStaticConstMacro(NDimensions, unsigned int, TSourceImage::ImageDimension);
00059
00060 typedef BloxCoreAtomImage<dim> TOutputImage;
00061 typedef BloxCoreAtomImage<dim> OutputImageType;
00062 typedef typename OutputImageType::Pointer OutputImagePointer;
00063
00065 typedef BloxBoundaryProfileImage<dim> BoundaryProfileImageType;
00066 typedef typename BoundaryProfileImageType::Pointer BoundaryProfileImagePointer;
00067 typedef typename BoundaryProfileImageType::RegionType BoundaryProfileImageRegionType;
00068 typedef typename BoundaryProfileImageType::PixelType BoundaryProfileImagePixelType;
00069 typedef typename BoundaryProfileImageType::ConstPointer BoundaryProfileImageConstPointer;
00070
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 typename TOutputImage::IndexType IndexType;
00084
00086 typedef typename TOutputImage::PixelType PixelType;
00087
00089 typedef typename TOutputImage::RegionType OutputImageRegionType;
00090
00092 typedef Point<double, itkGetStaticConstMacro(NDimensions)> PositionType;
00093
00095 typedef typename PositionType::VectorType VectorType;
00096
00098 typedef CovariantVector<double, itkGetStaticConstMacro(NDimensions)> GradientType;
00099
00101 void FindCoreAtoms();
00102
00104 void FindCoreAtomsAtBoundaryPoint(BloxBoundaryProfileItem<dim>* pItem);
00105
00107 itkSetMacro(DistanceMin, double);
00108 itkSetMacro(DistanceMax, double);
00109 itkSetMacro(Epsilon, double);
00110 itkSetMacro(Polarity, bool);
00111
00113 void GenerateInputRequestedRegion();
00114
00116 void SetInput1(const SourceImageType * image1);
00117 void SetInput2(const BoundaryProfileImageType * image2);
00118
00119
00120 protected:
00121 BloxBoundaryProfileImageToBloxCoreAtomImageFilter();
00122 virtual ~BloxBoundaryProfileImageToBloxCoreAtomImageFilter() {};
00123 void PrintSelf(std::ostream& os, Indent indent) const;
00124
00126 void GenerateData();
00127
00128 private:
00129 BloxBoundaryProfileImageToBloxCoreAtomImageFilter(const Self&);
00130 void operator=(const Self&);
00131
00133 BoundaryProfileImageConstPointer m_BoundaryProfileImagePtr;
00134 SourceImageConstPointer m_SourceImagePtr;
00135 OutputImagePointer m_OutputPtr;
00136
00140 double m_DistanceMin;
00141 double m_DistanceMax;
00142 double m_Epsilon;
00143 bool m_Polarity;
00144 bool m_IntensityFlag;
00145 unsigned int m_IntensityThreshold;
00146 bool m_CreateCoreAtom;
00147 int m_CoreAtomsCreated;
00148 };
00149
00150 }
00151
00152 #ifndef ITK_MANUAL_INSTANTIATION
00153 #include "itkBloxBoundaryProfileImageToBloxCoreAtomImageFilter.txx"
00154 #endif
00155
00156 #endif