X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=segmentation%2FclitkExtractLymphStationsFilter.h;h=4c7c669d964524b24e7cb7ec6c113340aaada037;hb=3c86758765bc9bcba20d439424bcf97091b5af6f;hp=5fb011b64646cd3633dce2f5ec1cb4578ec125b9;hpb=d30d301ddbebb5f290f8d9c0104dc6448ea531e1;p=clitk.git diff --git a/segmentation/clitkExtractLymphStationsFilter.h b/segmentation/clitkExtractLymphStationsFilter.h index 5fb011b..4c7c669 100644 --- a/segmentation/clitkExtractLymphStationsFilter.h +++ b/segmentation/clitkExtractLymphStationsFilter.h @@ -23,6 +23,9 @@ #include "clitkFilterBase.h" #include "clitkFilterWithAnatomicalFeatureDatabaseManagement.h" +// vtk +#include + namespace clitk { //-------------------------------------------------------------------- @@ -71,6 +74,11 @@ namespace clitk { typedef typename MaskImageType::PointType MaskImagePointType; typedef itk::Image MaskSliceType; + typedef typename MaskSliceType::Pointer MaskSlicePointer; + typedef typename MaskSliceType::PointType MaskSlicePointType; + typedef typename MaskSliceType::RegionType MaskSliceRegionType; + typedef typename MaskSliceType::SizeType MaskSliceSizeType; + typedef typename MaskSliceType::IndexType MaskSliceIndexType; /** ImageDimension constants */ itkStaticConstMacro(ImageDimension, unsigned int, ImageType::ImageDimension); @@ -82,20 +90,30 @@ namespace clitk { itkSetMacro(ForegroundValue, MaskImagePixelType); // Station 8 - itkSetMacro(DistanceMaxToAnteriorPartOfTheSpine, double); - itkGetConstMacro(DistanceMaxToAnteriorPartOfTheSpine, double); + // itkSetMacro(DistanceMaxToAnteriorPartOfTheSpine, double); + //itkGetConstMacro(DistanceMaxToAnteriorPartOfTheSpine, double); itkSetMacro(EsophagusDiltationForAnt, MaskImagePointType); itkGetConstMacro(EsophagusDiltationForAnt, MaskImagePointType); itkSetMacro(EsophagusDiltationForRight, MaskImagePointType); itkGetConstMacro(EsophagusDiltationForRight, MaskImagePointType); - itkSetMacro(FuzzyThresholdForS8, double); - itkGetConstMacro(FuzzyThresholdForS8, double); + itkSetMacro(InjectedThresholdForS8, double); + itkGetConstMacro(InjectedThresholdForS8, double); // Station 7 - itkSetMacro(FuzzyThreshold, double); - itkGetConstMacro(FuzzyThreshold, double); - itkSetMacro(Station7Filename, std::string); - itkGetConstMacro(Station7Filename, std::string); + itkGetConstMacro(S7_UseMostInferiorPartOnlyFlag, bool); + itkSetMacro(S7_UseMostInferiorPartOnlyFlag, bool); + itkBooleanMacro(S7_UseMostInferiorPartOnlyFlag); + + // All stations + bool GetComputeStation(std::string s); + void AddComputeStation(std::string station) ; + void SetFuzzyThreshold(std::string station, std::string tag, double value); + double GetFuzzyThreshold(std::string station, std::string tag); + void SetThreshold(std::string station, std::string tag, double value); + double GetThreshold(std::string station, std::string tag); + itkGetConstMacro(ComputeStationsSupportsFlag, bool); + itkSetMacro(ComputeStationsSupportsFlag, bool); + itkBooleanMacro(ComputeStationsSupportsFlag); protected: ExtractLymphStationsFilter(); @@ -109,34 +127,113 @@ namespace clitk { MaskImagePointer m_Mediastinum; MaskImagePointer m_Working_Support; std::map m_ListOfStations; + std::map m_ListOfSupports; MaskImagePixelType m_BackgroundValue; - MaskImagePixelType m_ForegroundValue; + MaskImagePixelType m_ForegroundValue; + std::map m_ComputeStationMap; + + bool CheckForStation(std::string station); + void Remove_Structures(std::string station, std::string s); + + // Functions common to several stations + double FindCarina(); + double FindApexOfTheChest(); + double FindSuperiorBorderOfAorticArch(); + double FindInferiorBorderOfAorticArch(); + void FindLeftAndRightBronchi(); + void FindLineForS7S8Separation(MaskImagePointType & A, MaskImagePointType & B); + MaskImagePointer FindAntPostVessels(); + MaskImagePointer FindAntPostVessels2(); + + // Global parameters + typedef std::map FuzzyThresholdByStructureType; + std::map m_FuzzyThreshold; + typedef std::map ThresholdByStructureType; + std::map m_Threshold; + + // Station's supports + void ExtractStationSupports(); + void Support_SupInf_S1RL(); + void Support_LeftRight_S1R_S1L(); + void Support_SupInf_S2R_S2L(); + void Support_LeftRight_S2R_S2L(); + void Support_SupInf_S4R_S4L(); + void Support_LeftRight_S4R_S4L(); + void Support_Post_S1S2S4(); + void Support_S3P(); + void Support_S3A(); + void Support_S5(); + void Support_S6(); + + MaskImagePointer LimitsWithTrachea(MaskImageType * input, + int extremaDirection, int lineDirection, + double offset, double maxSupPosition); + MaskImagePointer LimitsWithTrachea(MaskImageType * input, + int extremaDirection, int lineDirection, + double offset); // Station 8 - double m_DistanceMaxToAnteriorPartOfTheSpine; + // double m_DistanceMaxToAnteriorPartOfTheSpine; double m_DiaphragmInferiorLimit; - double m_CarinaZ; double m_OriginOfRightMiddleLobeBronchusZ; - double m_FuzzyThresholdForS8; + double m_InjectedThresholdForS8; + MaskImagePointer m_Esophagus; MaskImagePointType m_EsophagusDiltationForAnt; MaskImagePointType m_EsophagusDiltationForRight; - MaskImagePointer EnlargeEsophagusDilatationRadiusInferiorly(MaskImagePointer & eso); + void ExtractStation_8(); + void ExtractStation_8_SetDefaultValues(); void ExtractStation_8_SI_Limits(); - void ExtractStation_8_AP_Limits(); - void ExtractStation_8_LR_Limits(); - + void ExtractStation_8_Ant_Limits(); + void ExtractStation_8_Left_Sup_Limits(); + void ExtractStation_8_Left_Inf_Limits(); + void ExtractStation_8_Single_CCL_Limits(); + void ExtractStation_8_Remove_Structures(); + + // Station 3P + void ExtractStation_3P(); + void ExtractStation_3P_SetDefaultValues(); + void ExtractStation_3P_LR_inf_Limits(); + void ExtractStation_3P_LR_sup_Limits_2(); + void ExtractStation_3P_Remove_Structures(); + void ExtractStation_3P_LR_sup_Limits(); + + // Station 3A + void ExtractStation_3A(); + void ExtractStation_3A_SetDefaultValues(); + void ExtractStation_3A_AntPost_S5(); + void ExtractStation_3A_AntPost_S6(); + void ExtractStation_3A_AntPost_Superiorly(); + void ExtractStation_3A_Remove_Structures(); + void ExtractStation_3A_PostToBones(); + + // Station 2RL + void ExtractStation_2RL(); + void ExtractStation_2RL_SetDefaultValues(); + void ExtractStation_2RL_SI_Limits(); + void ExtractStation_2RL_Ant_Limits(); + void ExtractStation_2RL_Ant_Limits2(); + void ExtractStation_2RL_Post_Limits(); + void ExtractStation_2RL_LR_Limits(); + void ExtractStation_2RL_Remove_Structures(); + void ExtractStation_2RL_SeparateRL(); + vtkSmartPointer Build3DMeshFrom2DContour(const std::vector & points); + // Station 7 void ExtractStation_7(); + void ExtractStation_7_SetDefaultValues(); void ExtractStation_7_SI_Limits(); - void ExtractStation_7_RL_Limits(); + void ExtractStation_7_RL_Interior_Limits(); + + + void ExtractStation_7_RL_Limits_OLD(); void ExtractStation_7_Posterior_Limits(); - std::string m_Station7Filename; - MaskImagePointer m_working_trachea; - double m_FuzzyThreshold; + void ExtractStation_7_Remove_Structures(); + bool m_S7_UseMostInferiorPartOnlyFlag; + bool m_ComputeStationsSupportsFlag; + MaskImagePointer m_Working_Trachea; MaskImagePointer m_LeftBronchus; MaskImagePointer m_RightBronchus; - MaskImagePointer m_Station7; typedef std::vector ListOfPointsType; ListOfPointsType m_RightMostInLeftBronchus; ListOfPointsType m_AntMostInLeftBronchus; @@ -171,7 +268,11 @@ namespace clitk { #ifndef ITK_MANUAL_INSTANTIATION #include "clitkExtractLymphStationsFilter.txx" +#include "clitkExtractLymphStation_Supports.txx" #include "clitkExtractLymphStation_8.txx" +#include "clitkExtractLymphStation_3P.txx" +#include "clitkExtractLymphStation_2RL.txx" +#include "clitkExtractLymphStation_3A.txx" #include "clitkExtractLymphStation_7.txx" #include "clitkExtractLymphStation_4RL.txx" #endif