X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkExtractLungFilter.h;h=6ec698d3a204bc98dddd17190dafa44ba8e83209;hb=880e33e1299652f7a55ff47b8d65eb89f5578e5e;hp=1f6252d04737c46bf556f69b4a4dfa81b912462f;hpb=e008d74b0ecdc4ca2eaae8c429901a78f9ef5c31;p=clitk.git diff --git a/segmentation/clitkExtractLungFilter.h b/segmentation/clitkExtractLungFilter.h index 1f6252d..6ec698d 100644 --- a/segmentation/clitkExtractLungFilter.h +++ b/segmentation/clitkExtractLungFilter.h @@ -23,7 +23,7 @@ #include "clitkFilterBase.h" #include "clitkDecomposeAndReconstructImageFilter.h" #include "clitkExplosionControlledThresholdConnectedImageFilter.h" -#include "clitkSegmentationFunctions.h" +#include "clitkSegmentationUtils.h" // itk #include "itkStatisticsImageFilter.h" @@ -54,15 +54,16 @@ namespace clitk { */ //-------------------------------------------------------------------- - template + //-------------------------------------------------------------------- + template class ITK_EXPORT ExtractLungFilter: - public clitk::FilterBase, - public itk::ImageToImageFilter + public virtual clitk::FilterBase, + public itk::ImageToImageFilter { public: /** Standard class typedefs. */ - typedef itk::ImageToImageFilter Superclass; + typedef itk::ImageToImageFilter Superclass; typedef ExtractLungFilter Self; typedef itk::SmartPointer Pointer; typedef itk::SmartPointer ConstPointer; @@ -75,13 +76,14 @@ namespace clitk { FILTERBASE_INIT; /** Some convenient typedefs */ - typedef TInputImageType InputImageType; - typedef typename InputImageType::ConstPointer InputImageConstPointer; - typedef typename InputImageType::Pointer InputImagePointer; - typedef typename InputImageType::RegionType InputImageRegionType; - typedef typename InputImageType::PixelType InputImagePixelType; - typedef typename InputImageType::SizeType InputImageSizeType; - typedef typename InputImageType::IndexType InputImageIndexType; + typedef TImageType ImageType; + typedef typename ImageType::ConstPointer InputImageConstPointer; + typedef typename ImageType::Pointer InputImagePointer; + typedef typename ImageType::RegionType InputImageRegionType; + typedef typename ImageType::PixelType InputImagePixelType; + typedef typename ImageType::SizeType InputImageSizeType; + typedef typename ImageType::IndexType InputImageIndexType; + typedef typename ImageType::PointType InputImagePointType; typedef TMaskImageType MaskImageType; typedef typename MaskImageType::ConstPointer MaskImageConstPointer; @@ -90,16 +92,17 @@ namespace clitk { typedef typename MaskImageType::PixelType MaskImagePixelType; typedef typename MaskImageType::SizeType MaskImageSizeType; typedef typename MaskImageType::IndexType MaskImageIndexType; + typedef typename MaskImageType::PointType MaskImagePointType; - itkStaticConstMacro(ImageDimension, unsigned int, InputImageType::ImageDimension); + itkStaticConstMacro(ImageDimension, unsigned int, ImageType::ImageDimension); typedef int InternalPixelType; - typedef itk::Image InternalImageType; - typedef typename InternalImageType::Pointer InternalImagePointer; - typedef typename InternalImageType::IndexType InternalIndexType; - typedef LabelizeParameters LabelParamType; + typedef itk::Image InternalImageType; + typedef typename InternalImageType::Pointer InternalImagePointer; + typedef typename InternalImageType::IndexType InternalIndexType; + typedef LabelizeParameters LabelParamType; /** Connect inputs */ - void SetInput(const InputImageType * image); + void SetInput(const ImageType * image); void SetInputPatientMask(MaskImageType * mask, MaskImagePixelType BG); itkSetMacro(PatientMaskBackgroundValue, MaskImagePixelType); itkGetConstMacro(PatientMaskBackgroundValue, MaskImagePixelType); @@ -126,6 +129,10 @@ namespace clitk { itkGetConstMacro(UpperThreshold, InputImagePixelType); GGO_DefineOption(upper, SetUpperThreshold, InputImagePixelType); + itkSetMacro(NumberOfSlicesToSkipBeforeSearchingSeed, int); + itkGetConstMacro(NumberOfSlicesToSkipBeforeSearchingSeed, int); + GGO_DefineOption(skipslices, SetNumberOfSlicesToSkipBeforeSearchingSeed, int); + itkSetMacro(LowerThreshold, InputImagePixelType); itkGetConstMacro(LowerThreshold, InputImagePixelType); itkSetMacro(UseLowerThreshold, bool); @@ -152,7 +159,7 @@ namespace clitk { void AddSeed(InternalIndexType s); std::vector & GetSeeds() { return m_Seeds; } - GGO_DefineOption_Vector(seed, AddSeed, InternalIndexType, InputImageType::ImageDimension, true); + GGO_DefineOption_Vector(seed, AddSeed, InternalIndexType, ImageType::ImageDimension, true); // Step 3 options ExtractLung itkSetMacro(NumberOfHistogramBins, int); @@ -172,17 +179,30 @@ namespace clitk { itkGetConstMacro(LabelizeParameters3, LabelParamType*); GGO_DefineOption_LabelParam(3, SetLabelizeParameters3, LabelParamType); - // Step 5 options LungSeparation - // itkSetMacro(FinalOpenClose, bool); - // itkGetConstMacro(FinalOpenClose, bool); - // itkBooleanMacro(FinalOpenClose); + // Step 5 final openclose + itkSetMacro(FinalOpenClose, bool); + itkGetConstMacro(FinalOpenClose, bool); + itkBooleanMacro(FinalOpenClose); + GGO_DefineOption_Flag(openclose, SetFinalOpenClose); - // virtual void Update(); + itkSetMacro(FinalOpenCloseRadius, int); + itkGetConstMacro(FinalOpenCloseRadius, int); + GGO_DefineOption(opencloseRadius, SetFinalOpenCloseRadius, int); protected: ExtractLungFilter(); virtual ~ExtractLungFilter() {} - + + // Main members + InputImageConstPointer input; + MaskImageConstPointer patient; + InputImagePointer working_input; + typename InternalImageType::Pointer working_image; + typename InternalImageType::Pointer trachea_tmp; + MaskImagePointer trachea; + MaskImagePointer output; + unsigned int m_MaxSeedNumber; + // Global options itkSetMacro(BackgroundValue, MaskImagePixelType); itkSetMacro(ForegroundValue, MaskImagePixelType); @@ -202,6 +222,7 @@ namespace clitk { InputImagePixelType m_ThresholdStepSizeForTrachea; double m_MultiplierForTrachea; std::vector m_Seeds; + int m_NumberOfSlicesToSkipBeforeSearchingSeed; // Step 3 int m_NumberOfHistogramBins; @@ -212,24 +233,19 @@ namespace clitk { LabelParamType* m_LabelizeParameters3; // Step 5 - // bool m_FinalOpenClose; - + bool m_FinalOpenClose; + int m_FinalOpenCloseRadius; + + // Main functions virtual void GenerateOutputInformation(); virtual void GenerateData(); + + // Functions for trachea extraction + bool SearchForTracheaSeed(int skip); + void SearchForTrachea(); + void TracheaRegionGrowing(); + double ComputeTracheaVolume(); - // Steps - void RemoveAir(); - void FindTrachea(); - void ExtractLung(); - void RemoveTrachea(); - void LungSeparation(); - InputImageConstPointer input; - MaskImageConstPointer patient; - InputImagePointer working_input; - typename InternalImageType::Pointer working_image; - typename InternalImageType::Pointer trachea_tmp; - MaskImagePointer trachea; - private: ExtractLungFilter(const Self&); //purposely not implemented void operator=(const Self&); //purposely not implemented