00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017 #ifndef __itkBloxBoundaryPointToCoreAtomImageFilter_h
00018 #define __itkBloxBoundaryPointToCoreAtomImageFilter_h
00019
00020 #include "itkImageToImageFilter.h"
00021 #include "itkPoint.h"
00022 #include "itkVector.h"
00023 #include "itkCovariantVector.h"
00024 #include "itkBloxBoundaryPointItem.h"
00025 #include "itkBloxBoundaryPointPixel.h"
00026 #include "itkBloxBoundaryPointImage.h"
00027 #include "itkBloxCoreAtomItem.h"
00028 #include "itkBloxCoreAtomPixel.h"
00029 #include "itkBloxCoreAtomImage.h"
00030
00031 namespace itk
00032 {
00033
00042 template<unsigned int dim>
00043 class ITK_EXPORT BloxBoundaryPointToCoreAtomImageFilter :
00044 public ImageToImageFilter< BloxBoundaryPointImage<dim>,
00045 BloxCoreAtomImage<dim> >
00046 {
00047 public:
00049 typedef BloxBoundaryPointToCoreAtomImageFilter Self;
00050 typedef ImageToImageFilter<BloxBoundaryPointImage<dim>,
00051 BloxCoreAtomImage<dim> > Superclass;
00052 typedef SmartPointer<Self> Pointer;
00053 typedef SmartPointer<const Self> ConstPointer;
00054
00056 itkNewMacro(Self);
00057
00059 itkTypeMacro( BloxBoundaryPointToCoreAtomImageFilter, ImageToImageFilter );
00060
00062 itkStaticConstMacro(NDimensions, unsigned int, dim);
00063
00065 typedef BloxBoundaryPointImage<dim> TInputImage;
00066 typedef BloxBoundaryPointImage<dim> InputImageType;
00067 typedef BloxCoreAtomImage<dim> TOutputImage;
00068 typedef BloxCoreAtomImage<dim> OutputImageType;
00069 typedef typename OutputImageType::Pointer OutputImagePointer;
00070 typedef typename InputImageType::Pointer InputImagePointer;
00071 typedef typename InputImageType::ConstPointer InputImageConstPointer;
00072
00074 typedef Size<dim> SizeType;
00075
00077 typedef typename TOutputImage::IndexType IndexType;
00078
00080 typedef typename TOutputImage::PixelType PixelType;
00081
00083 typedef typename TOutputImage::RegionType OutputImageRegionType;
00084
00086 typedef Point<double, dim> PositionType;
00087
00089 typedef typename PositionType::VectorType VectorType;
00090
00092 typedef CovariantVector<double, dim> GradientType;
00093
00095 void FindCoreAtoms();
00096
00098 void FindCoreAtomsAtBoundaryPoint(BloxBoundaryPointItem<dim>* pItem);
00099
00101 itkSetMacro(DistanceMin, double);
00102 itkSetMacro(DistanceMax, double);
00103 itkSetMacro(Epsilon, double);
00104 itkSetMacro(Polarity, bool);
00105
00107 void GenerateInputRequestedRegion();
00108
00109 protected:
00110 BloxBoundaryPointToCoreAtomImageFilter();
00111 virtual ~BloxBoundaryPointToCoreAtomImageFilter() {};
00112 void PrintSelf(std::ostream& os, Indent indent) const;
00113
00115 void GenerateData();
00116
00117 private:
00118 BloxBoundaryPointToCoreAtomImageFilter(const Self&);
00119 void operator=(const Self&);
00120
00122 InputImageConstPointer m_InputPtr;
00123 OutputImagePointer m_OutputPtr;
00124
00128 double m_DistanceMin;
00129 double m_DistanceMax;
00130 double m_Epsilon;
00131 bool m_Polarity;
00132
00134 float m_InverseNumberOfBoundaryPoints;
00135 unsigned long m_CurrentBoundaryPoint;
00136 unsigned long m_BoundaryPointsPerUpdate;
00137 unsigned long m_BoundaryPointsBeforeUpdate;
00138 };
00139
00140 }
00141
00142 #ifndef ITK_MANUAL_INSTANTIATION
00143 #include "itkBloxBoundaryPointToCoreAtomImageFilter.txx"
00144 #endif
00145
00146 #endif