/vol/vipdata/irtk/contrib++/include/irtkEuclideanDistanceTransform.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #ifndef _IRTKEUCLIDEANDISTANCETRANSFORM_H
00014
00015 #define _IRTKEUCLIDEANDISTANCETRANSFORM_H
00016
00017 #define EDT_MAX_IMAGE_DIMENSION 26754
00018 #define EDT_MAX_DISTANCE_SQUARED 2147329548
00019 #define EDT_MAX_DISTANCE_SQUARED_ANISOTROPIC 2147329548
00020
00021 #include <irtkImageToImage.h>
00022
00023 template <class VoxelType> class irtkEuclideanDistanceTransform : public irtkImageToImage<VoxelType>
00024 {
00025
00026 public:
00027
00029 enum irtkDistanceTransformMode { irtkDistanceTransform2D, irtkDistanceTransform3D };
00030
00031 protected:
00032
00034 irtkDistanceTransformMode _distanceTransformMode;
00035
00037 int edtVornoiEDT(long *, long);
00038
00040 void edtComputeEDT_2D(char *, long *, long, long);
00041
00043 void edtComputeEDT_3D(char *, long *, long, long, long);
00044
00046 int edtVornoiEDT_anisotropic(float *, long, float);
00047
00049 void edtComputeEDT_2D_anisotropic(float *, float *, long, long, float, float);
00050
00052 void edtComputeEDT_3D_anisotropic(float *, float *, long, long, long, float, float,
00053 float);
00054
00056 virtual const char *NameOfClass();
00057
00059 virtual Bool RequiresBuffering();
00060
00061 public:
00062
00064 irtkEuclideanDistanceTransform(irtkDistanceTransformMode = irtkDistanceTransform3D);
00065
00067 ~irtkEuclideanDistanceTransform() {};
00068
00069
00070 virtual void Run();
00071 };
00072
00073 template <class VoxelType> inline const char *irtkEuclideanDistanceTransform<VoxelType>::NameOfClass()
00074 {
00075 return "irtkEuclideanDistanceTransform";
00076 }
00077
00078 template <class VoxelType> inline Bool irtkEuclideanDistanceTransform<VoxelType>::RequiresBuffering()
00079 {
00080 return False;
00081 }
00082
00083 #endif