+ // To avoid repeat "this->"
+ AnatomicalFeatureDatabase * GetAFDB() { return clitk::FilterWithAnatomicalFeatureDatabaseManagement::GetAFDB(); }
+ void WriteAFDB() { clitk::FilterWithAnatomicalFeatureDatabaseManagement::WriteAFDB(); }
+ void LoadAFDB() { clitk::FilterWithAnatomicalFeatureDatabaseManagement::LoadAFDB(); }
+ void StartNewStep(std::string s) { clitk::FilterBase::StartNewStep(s); }
+ void StartSubStep() { clitk::FilterBase::StartSubStep(); }
+ template<class TInternalImageType>
+ void StopCurrentStep(typename TInternalImageType::Pointer p, std::string txt="") { clitk::FilterBase::StopCurrentStep<TInternalImageType>(p, txt); }
+ void StopCurrentStep() {clitk::FilterBase::StopCurrentStep(); }
+ void StopSubStep() {clitk::FilterBase::StopSubStep(); }
+
+ ImageConstPointer m_Input;
+ MaskImagePointer m_Mediastinum;
+ MaskImagePointer m_Working_Support;
+ std::map<std::string, MaskImagePointer> m_ListOfStations;
+ std::map<std::string, MaskImagePointer> m_ListOfSupports;
+ MaskImagePixelType m_BackgroundValue;
+ MaskImagePixelType m_ForegroundValue;
+ std::map<std::string, bool> m_ComputeStationMap;
+ std::string m_SupportLimitsFilename;
+ std::vector<SupportLimitsType> m_ListOfSupportLimits;
+
+ bool CheckForStation(std::string station);
+ void Remove_Structures(std::string station, std::string s);
+ void WriteImageSupport(std::string support);
+ void WriteImageStation(std::string station);
+ void ComputeOverlapWithRef(std::string station);
+ void Support_SI_Limit(const std::string station_limit, const std::string station,
+ const std::string structure_limit, const std::string structure,
+ const double offset);
+ void ReadSupportLimits(std::string filename);
+
+ // Functions common to several stations
+ double FindCarina();
+ double FindApexOfTheChest();
+ double FindSuperiorBorderOfAorticArch();
+ double FindInferiorBorderOfAorticArch();
+ void FindLeftAndRightBronchi();
+ void FindLineForS7S8Separation(MaskImagePointType & A, MaskImagePointType & B);
+ MaskImagePointer FindAntPostVesselsOLD();
+ MaskImagePointer FindAntPostVessels2();
+
+ // Global parameters
+ typedef std::map<std::string, double> FuzzyThresholdByStructureType;
+ std::map<std::string, FuzzyThresholdByStructureType> m_FuzzyThreshold;
+ typedef std::map<std::string, double> ThresholdByStructureType;
+ std::map<std::string, ThresholdByStructureType> m_Threshold;
+
+ // Station's supports
+ void ExtractStationSupports();
+ void Support_LeftRight_S1R_S1L();
+ void Support_LeftRight_S2R_S2L();
+ void Support_LeftRight_S4R_S4L();
+ void Support_Post_S1S2S4();
+
+ 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_DiaphragmInferiorLimit;
+ double m_OriginOfRightMiddleLobeBronchusZ;
+ double m_InjectedThresholdForS8;
+ MaskImagePointer m_Esophagus;
+ MaskImagePointType m_EsophagusDiltationForAnt;
+ MaskImagePointType m_EsophagusDiltationForRight;
+
+ void ExtractStation_8();
+ void ExtractStation_8_SetDefaultValues();
+ void ExtractStation_8_SI_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_Post_Left_Limits_With_Aorta_S5_Support();
+ void ExtractStation_3A_Post_Limits_With_Dilated_Aorta_S6_Support();
+ void ExtractStation_3A_AntPost_Superiorly();
+ void ExtractStation_3A_Remove_Structures();
+
+ // Station 2RL
+ void ExtractStation_2RL();
+ void ExtractStation_2RL_SetDefaultValues();
+ void ExtractStation_2RL_Ant_Limits(std::string s);
+ void ExtractStation_2RL_Remove_Structures(std::string s);
+ void ExtractStation_2RL_Cut_BrachioCephalicVein_superiorly_when_it_split();
+ vtkSmartPointer<vtkPolyData> Build3DMeshFrom2DContour(const std::vector<ImagePointType> & points);
+
+ // Station 1RL
+ void ExtractStation_1RL();
+ void ExtractStation_1RL_SetDefaultValues();
+ void ExtractStation_1RL_Ant_Limits();
+ void ExtractStation_1RL_Post_Limits();
+
+ // Station 4RL
+ void ExtractStation_4RL_SetDefaultValues();
+ void ExtractStation_4L();
+ void ExtractStation_4R();
+ void ExtractStation_S4L_S5_Limits_Aorta_LeftPulmonaryArtery(int KeepPoint);
+
+ // Station 5
+ void ExtractStation_5_SetDefaultValues();
+ void ExtractStation_5();
+ void ExtractStation_5_Limits_AscendingAorta_Ant();
+
+ // Station 6
+ void ExtractStation_6_SetDefaultValues();
+ void ExtractStation_6();
+
+
+ // Station 7
+ void ExtractStation_7();
+ void ExtractStation_7_SetDefaultValues();
+ void ExtractStation_7_SI_Limits();
+ void ExtractStation_7_RL_Interior_Limits();
+
+ void ExtractStation_7_RL_Limits_OLD();
+ void ExtractStation_7_Posterior_Limits();
+ void ExtractStation_7_Remove_Structures();
+ bool m_S7_UseMostInferiorPartOnlyFlag;
+ bool m_ForceSupportsFlag;
+ bool m_CheckSupportFlag;
+ MaskImagePointer m_Working_Trachea;
+ MaskImagePointer m_LeftBronchus;
+ MaskImagePointer m_RightBronchus;
+ typedef std::vector<MaskImageType::PointType> ListOfPointsType;
+ ListOfPointsType m_RightMostInLeftBronchus;
+ ListOfPointsType m_AntMostInLeftBronchus;
+ ListOfPointsType m_PostMostInLeftBronchus;
+ ListOfPointsType m_LeftMostInRightBronchus;
+ ListOfPointsType m_AntMostInRightBronchus;
+ ListOfPointsType m_PostMostInRightBronchus;
+
+ void FindExtremaPointsInBronchus(MaskImagePointer input,
+ int direction,
+ double distance_max_from_center_point,
+ ListOfPointsType & LR,
+ ListOfPointsType & Ant,
+ ListOfPointsType & Post);