From: David Sarrut Date: Mon, 26 Sep 2011 07:08:21 +0000 (+0200) Subject: Now inherit from clitkStructuresExtractionFilter X-Git-Tag: v1.3.0~217 X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=commitdiff_plain;h=d8491513127692da553a367ac5460a63a45f7129;p=clitk.git Now inherit from clitkStructuresExtractionFilter --- diff --git a/segmentation/clitkExtractLymphStationsFilter.h b/segmentation/clitkExtractLymphStationsFilter.h index 4c7c669..2db65b0 100644 --- a/segmentation/clitkExtractLymphStationsFilter.h +++ b/segmentation/clitkExtractLymphStationsFilter.h @@ -20,8 +20,7 @@ #define CLITKEXTRACTLYMPHSTATIONSFILTER_H // clitk -#include "clitkFilterBase.h" -#include "clitkFilterWithAnatomicalFeatureDatabaseManagement.h" +#include "clitkStructuresExtractionFilter.h" // vtk #include @@ -37,14 +36,12 @@ namespace clitk { template class ITK_EXPORT ExtractLymphStationsFilter: - public virtual clitk::FilterBase, - public clitk::FilterWithAnatomicalFeatureDatabaseManagement, - public itk::ImageToImageFilter > + public clitk::StructuresExtractionFilter { public: /** Standard class typedefs. */ - typedef itk::ImageToImageFilter > Superclass; + typedef clitk::StructuresExtractionFilter Superclass; typedef ExtractLymphStationsFilter Self; typedef itk::SmartPointer Pointer; typedef itk::SmartPointer ConstPointer; @@ -83,15 +80,13 @@ namespace clitk { /** ImageDimension constants */ itkStaticConstMacro(ImageDimension, unsigned int, ImageType::ImageDimension); FILTERBASE_INIT; - + itkGetConstMacro(BackgroundValue, MaskImagePixelType); itkGetConstMacro(ForegroundValue, MaskImagePixelType); itkSetMacro(BackgroundValue, MaskImagePixelType); itkSetMacro(ForegroundValue, MaskImagePixelType); // Station 8 - // itkSetMacro(DistanceMaxToAnteriorPartOfTheSpine, double); - //itkGetConstMacro(DistanceMaxToAnteriorPartOfTheSpine, double); itkSetMacro(EsophagusDiltationForAnt, MaskImagePointType); itkGetConstMacro(EsophagusDiltationForAnt, MaskImagePointType); itkSetMacro(EsophagusDiltationForRight, MaskImagePointType); @@ -123,6 +118,17 @@ namespace clitk { virtual void GenerateInputRequestedRegion(); virtual void GenerateData(); + // 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 + void StopCurrentStep(typename TInternalImageType::Pointer p, std::string txt="") { clitk::FilterBase::StopCurrentStep(p, txt); } + void StopCurrentStep() {clitk::FilterBase::StopCurrentStep(); } + void StopSubStep() {clitk::FilterBase::StopSubStep(); } + ImageConstPointer m_Input; MaskImagePointer m_Mediastinum; MaskImagePointer m_Working_Support; @@ -142,7 +148,7 @@ namespace clitk { double FindInferiorBorderOfAorticArch(); void FindLeftAndRightBronchi(); void FindLineForS7S8Separation(MaskImagePointType & A, MaskImagePointType & B); - MaskImagePointer FindAntPostVessels(); + MaskImagePointer FindAntPostVesselsOLD(); MaskImagePointer FindAntPostVessels2(); // Global parameters @@ -171,9 +177,7 @@ namespace clitk { MaskImagePointer LimitsWithTrachea(MaskImageType * input, int extremaDirection, int lineDirection, double offset); - // Station 8 - // double m_DistanceMaxToAnteriorPartOfTheSpine; double m_DiaphragmInferiorLimit; double m_OriginOfRightMiddleLobeBronchusZ; double m_InjectedThresholdForS8; @@ -201,31 +205,31 @@ namespace clitk { // Station 3A void ExtractStation_3A(); void ExtractStation_3A_SetDefaultValues(); - void ExtractStation_3A_AntPost_S5(); - void ExtractStation_3A_AntPost_S6(); + 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(); - 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(); + 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 Build3DMeshFrom2DContour(const std::vector & points); + // Station 1RL + void ExtractStation_1RL(); + void ExtractStation_1RL_SetDefaultValues(); + void ExtractStation_1RL_Ant_Limits(); + void ExtractStation_1RL_Post_Limits(); + // 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(); @@ -269,12 +273,13 @@ 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" +#include "clitkExtractLymphStation_1RL.txx" +#include "clitkExtractLymphStation_8.txx" +#include "clitkExtractLymphStation_7.txx" #endif #endif diff --git a/segmentation/clitkExtractLymphStationsFilter.txx b/segmentation/clitkExtractLymphStationsFilter.txx index 5f9bef0..03fb77e 100644 --- a/segmentation/clitkExtractLymphStationsFilter.txx +++ b/segmentation/clitkExtractLymphStationsFilter.txx @@ -50,9 +50,7 @@ template clitk::ExtractLymphStationsFilter:: ExtractLymphStationsFilter(): - clitk::FilterBase(), - clitk::FilterWithAnatomicalFeatureDatabaseManagement(), - itk::ImageToImageFilter() + clitk::StructuresExtractionFilter() { this->SetNumberOfRequiredInputs(1); SetBackgroundValue(0); @@ -60,11 +58,13 @@ ExtractLymphStationsFilter(): ComputeStationsSupportsFlagOn(); // Default values - ExtractStation_8_SetDefaultValues(); ExtractStation_3P_SetDefaultValues(); ExtractStation_2RL_SetDefaultValues(); ExtractStation_3A_SetDefaultValues(); + ExtractStation_1RL_SetDefaultValues(); + ExtractStation_7_SetDefaultValues(); + ExtractStation_8_SetDefaultValues(); } //-------------------------------------------------------------------- @@ -75,50 +75,51 @@ void clitk::ExtractLymphStationsFilter:: GenerateOutputInformation() { // Get inputs - LoadAFDB(); + this->LoadAFDB(); m_Input = dynamic_cast(itk::ProcessObject::GetInput(0)); - m_Mediastinum = GetAFDB()->template GetImage ("Mediastinum"); + m_Mediastinum = this->GetAFDB()->template GetImage ("Mediastinum"); // Clean some computer landmarks to force the recomputation - GetAFDB()->RemoveTag("AntPostVesselsSeparation"); + this->GetAFDB()->RemoveTag("AntPostVesselsSeparation"); // Global supports for stations - if (GetComputeStationsSupportsFlag()) { - StartNewStep("Supports for stations"); - StartSubStep(); - GetAFDB()->RemoveTag("CarinaZ"); - GetAFDB()->RemoveTag("ApexOfTheChestZ"); - GetAFDB()->RemoveTag("ApexOfTheChest"); - GetAFDB()->RemoveTag("RightBronchus"); - GetAFDB()->RemoveTag("LeftBronchus"); - GetAFDB()->RemoveTag("SuperiorBorderOfAorticArchZ"); - GetAFDB()->RemoveTag("SuperiorBorderOfAorticArch"); - GetAFDB()->RemoveTag("InferiorBorderOfAorticArchZ"); - GetAFDB()->RemoveTag("InferiorBorderOfAorticArch"); - ExtractStationSupports(); - StopSubStep(); - } - else { - m_ListOfSupports["S1R"] = GetAFDB()->template GetImage("Support_S1R"); - m_ListOfSupports["S1L"] = GetAFDB()->template GetImage("Support_S1L"); - m_ListOfSupports["S2R"] = GetAFDB()->template GetImage("Support_S2R"); - m_ListOfSupports["S2L"] = GetAFDB()->template GetImage("Support_S2L"); - m_ListOfSupports["S4R"] = GetAFDB()->template GetImage("Support_S4R"); - m_ListOfSupports["S4L"] = GetAFDB()->template GetImage("Support_S4L"); - - m_ListOfSupports["S3A"] = GetAFDB()->template GetImage("Support_S3A"); - m_ListOfSupports["S3P"] = GetAFDB()->template GetImage("Support_S3P"); - m_ListOfSupports["S5"] = GetAFDB()->template GetImage("Support_S5"); - m_ListOfSupports["S6"] = GetAFDB()->template GetImage("Support_S6"); - m_ListOfSupports["S7"] = GetAFDB()->template GetImage("Support_S7"); - m_ListOfSupports["S8"] = GetAFDB()->template GetImage("Support_S8"); - m_ListOfSupports["S9"] = GetAFDB()->template GetImage("Support_S9"); - m_ListOfSupports["S10"] = GetAFDB()->template GetImage("Support_S10"); - m_ListOfSupports["S11"] = GetAFDB()->template GetImage("Support_S11"); + bool supportsExist = true; + try { + m_ListOfSupports["S1R"] = this->GetAFDB()->template GetImage("Support_S1R"); + m_ListOfSupports["S1L"] = this->GetAFDB()->template GetImage("Support_S1L"); + m_ListOfSupports["S2R"] = this->GetAFDB()->template GetImage("Support_S2R"); + m_ListOfSupports["S2L"] = this->GetAFDB()->template GetImage("Support_S2L"); + m_ListOfSupports["S4R"] = this->GetAFDB()->template GetImage("Support_S4R"); + m_ListOfSupports["S4L"] = this->GetAFDB()->template GetImage("Support_S4L"); + + m_ListOfSupports["S3A"] = this->GetAFDB()->template GetImage("Support_S3A"); + m_ListOfSupports["S3P"] = this->GetAFDB()->template GetImage("Support_S3P"); + m_ListOfSupports["S5"] = this->GetAFDB()->template GetImage("Support_S5"); + m_ListOfSupports["S6"] = this->GetAFDB()->template GetImage("Support_S6"); + m_ListOfSupports["S7"] = this->GetAFDB()->template GetImage("Support_S7"); + m_ListOfSupports["S8"] = this->GetAFDB()->template GetImage("Support_S8"); + m_ListOfSupports["S9"] = this->GetAFDB()->template GetImage("Support_S9"); + m_ListOfSupports["S10"] = this->GetAFDB()->template GetImage("Support_S10"); + m_ListOfSupports["S11"] = this->GetAFDB()->template GetImage("Support_S11"); + } catch(clitk::ExceptionObject o) { + supportsExist = false; } - // Extract Station8 - ExtractStation_8(); + if (!supportsExist || GetComputeStationsSupportsFlag()) { + this->StartNewStep("Supports for stations"); + this->StartSubStep(); + this->GetAFDB()->RemoveTag("CarinaZ"); + this->GetAFDB()->RemoveTag("ApexOfTheChestZ"); + this->GetAFDB()->RemoveTag("ApexOfTheChest"); + this->GetAFDB()->RemoveTag("RightBronchus"); + this->GetAFDB()->RemoveTag("LeftBronchus"); + this->GetAFDB()->RemoveTag("SuperiorBorderOfAorticArchZ"); + this->GetAFDB()->RemoveTag("SuperiorBorderOfAorticArch"); + this->GetAFDB()->RemoveTag("InferiorBorderOfAorticArchZ"); + this->GetAFDB()->RemoveTag("InferiorBorderOfAorticArch"); + ExtractStationSupports(); + this->StopSubStep(); + } // Extract Station3P ExtractStation_3P(); @@ -126,26 +127,29 @@ GenerateOutputInformation() { // Extract Station3A ExtractStation_3A(); - // HERE - // Extract Station2RL - StartNewStep("Station 2RL"); - StartSubStep(); ExtractStation_2RL(); - StopSubStep(); + + // Extract Station1RL + ExtractStation_1RL(); + + // ---------- TODO ----------------------- + + // Extract Station8 + ExtractStation_8(); // Extract Station7 - StartNewStep("Station 7"); - StartSubStep(); + this->StartNewStep("Station 7"); + this->StartSubStep(); ExtractStation_7(); - StopSubStep(); + this->StopSubStep(); if (0) { // temporary suppress // Extract Station4RL - StartNewStep("Station 4RL"); - StartSubStep(); + this->StartNewStep("Station 4RL"); + this->StartSubStep(); //ExtractStation_4RL(); - StopSubStep(); + this->StopSubStep(); } } //-------------------------------------------------------------------- @@ -184,8 +188,8 @@ CheckForStation(std::string station) // Check if station already exist in DB bool found = false; - if (GetAFDB()->TagExist(s)) { - m_ListOfStations[station] = GetAFDB()->template GetImage(s); + if (this->GetAFDB()->TagExist(s)) { + m_ListOfStations[station] = this->GetAFDB()->template GetImage(s); found = true; } @@ -194,7 +198,7 @@ CheckForStation(std::string station) std::cout << "Station " << station << " already exists, but re-computation forced." << std::endl; } if (!found || GetComputeStation(station)) { - m_Working_Support = m_Mediastinum = GetAFDB()->template GetImage("Mediastinum", true); + m_Working_Support = m_Mediastinum = this->GetAFDB()->template GetImage("Mediastinum", true); return true; } else { @@ -329,8 +333,8 @@ clitk::ExtractLymphStationsFilter:: Remove_Structures(std::string station, std::string s) { try { - StartNewStep("[Station"+station+"] Remove "+s); - MaskImagePointer Structure = GetAFDB()->template GetImage(s); + this->StartNewStep("[Station"+station+"] Remove "+s); + MaskImagePointer Structure = this->GetAFDB()->template GetImage(s); clitk::AndNot(m_Working_Support, Structure, GetBackgroundValue()); } catch(clitk::ExceptionObject e) { @@ -415,22 +419,22 @@ FindLineForS7S8Separation(MaskImagePointType & A, MaskImagePointType & B) // B = lower border of bronchus intermedius (BI) or RightMiddleLobeBronchus try { - GetAFDB()->GetPoint3D("LineForS7S8Separation_Begin", A); - GetAFDB()->GetPoint3D("LineForS7S8Separation_End", B); + this->GetAFDB()->GetPoint3D("LineForS7S8Separation_Begin", A); + this->GetAFDB()->GetPoint3D("LineForS7S8Separation_End", B); } catch(clitk::ExceptionObject & o) { DD("FindLineForS7S8Separation"); // Load LeftLowerLobeBronchus and get centroid point MaskImagePointer LeftLowerLobeBronchus = - GetAFDB()->template GetImage ("LeftLowerLobeBronchus"); + this->GetAFDB()->template GetImage ("LeftLowerLobeBronchus"); std::vector c; clitk::ComputeCentroids(LeftLowerLobeBronchus, GetBackgroundValue(), c); A = c[1]; // Load RightMiddleLobeBronchus and get superior point (not centroid here) MaskImagePointer RightMiddleLobeBronchus = - GetAFDB()->template GetImage ("RightMiddleLobeBronchus"); + this->GetAFDB()->template GetImage ("RightMiddleLobeBronchus"); bool b = FindExtremaPointInAGivenDirection(RightMiddleLobeBronchus, GetBackgroundValue(), 2, false, B); @@ -439,8 +443,8 @@ FindLineForS7S8Separation(MaskImagePointType & A, MaskImagePointType & B) } // Insert into the DB - GetAFDB()->SetPoint3D("LineForS7S8Separation_Begin", A); - GetAFDB()->SetPoint3D("LineForS7S8Separation_End", B); + this->GetAFDB()->SetPoint3D("LineForS7S8Separation_Begin", A); + this->GetAFDB()->SetPoint3D("LineForS7S8Separation_End", B); } } //-------------------------------------------------------------------- @@ -454,24 +458,24 @@ FindCarina() { double z; try { - z = GetAFDB()->GetDouble("CarinaZ"); + z = this->GetAFDB()->GetDouble("CarinaZ"); } catch(clitk::ExceptionObject e) { DD("FindCarinaSlicePosition"); // Get Carina - MaskImagePointer Carina = GetAFDB()->template GetImage("Carina"); + MaskImagePointer Carina = this->GetAFDB()->template GetImage("Carina"); // Get Centroid and Z value std::vector centroids; clitk::ComputeCentroids(Carina, GetBackgroundValue(), centroids); // We dont need Carina structure from now - GetAFDB()->template ReleaseImage("Carina"); + this->GetAFDB()->template ReleaseImage("Carina"); // Put inside the AFDB - GetAFDB()->SetPoint3D("CarinaPoint", centroids[1]); - GetAFDB()->SetDouble("CarinaZ", centroids[1][2]); - WriteAFDB(); + this->GetAFDB()->SetPoint3D("CarinaPoint", centroids[1]); + this->GetAFDB()->SetDouble("CarinaZ", centroids[1][2]); + this->WriteAFDB(); z = centroids[1][2]; } return z; @@ -487,23 +491,23 @@ FindApexOfTheChest() { double z; try { - z = GetAFDB()->GetDouble("ApexOfTheChestZ"); + z = this->GetAFDB()->GetDouble("ApexOfTheChestZ"); } catch(clitk::ExceptionObject e) { DD("FindApexOfTheChestPosition"); - MaskImagePointer Lungs = GetAFDB()->template GetImage("Lungs"); + MaskImagePointer Lungs = this->GetAFDB()->template GetImage("Lungs"); MaskImagePointType p; p[0] = p[1] = p[2] = 0.0; // to avoid warning clitk::FindExtremaPointInAGivenDirection(Lungs, GetBackgroundValue(), 2, false, p); // We dont need Lungs structure from now - GetAFDB()->template ReleaseImage("Lungs"); + this->GetAFDB()->template ReleaseImage("Lungs"); // Put inside the AFDB - GetAFDB()->SetPoint3D("ApexOfTheChest", p); + this->GetAFDB()->SetPoint3D("ApexOfTheChest", p); p[2] -= 5; // We consider 5 mm lower - GetAFDB()->SetDouble("ApexOfTheChestZ", p[2]); - WriteAFDB(); + this->GetAFDB()->SetDouble("ApexOfTheChestZ", p[2]); + this->WriteAFDB(); z = p[2]; } return z; @@ -518,8 +522,8 @@ clitk::ExtractLymphStationsFilter:: FindLeftAndRightBronchi() { try { - m_RightBronchus = GetAFDB()->template GetImage ("RightBronchus"); - m_LeftBronchus = GetAFDB()->template GetImage ("LeftBronchus"); + m_RightBronchus = this->GetAFDB()->template GetImage ("RightBronchus"); + m_LeftBronchus = this->GetAFDB()->template GetImage ("LeftBronchus"); } catch(clitk::ExceptionObject & o) { @@ -528,7 +532,7 @@ FindLeftAndRightBronchi() // a Left and Right bronchus. // Get the trachea - MaskImagePointer Trachea = GetAFDB()->template GetImage("Trachea"); + MaskImagePointer Trachea = this->GetAFDB()->template GetImage("Trachea"); // Get the Carina position double m_CarinaZ = FindCarina(); @@ -595,9 +599,9 @@ FindLeftAndRightBronchi() LeftBronchus = clitk::AutoCrop(LeftBronchus, GetBackgroundValue()); // Insert int AFDB if need after - GetAFDB()->template SetImage ("RightBronchus", "seg/rightBronchus.mhd", + this->GetAFDB()->template SetImage ("RightBronchus", "seg/rightBronchus.mhd", RightBronchus, true); - GetAFDB()->template SetImage ("LeftBronchus", "seg/leftBronchus.mhd", + this->GetAFDB()->template SetImage ("LeftBronchus", "seg/leftBronchus.mhd", LeftBronchus, true); } } @@ -612,23 +616,23 @@ FindSuperiorBorderOfAorticArch() { double z; try { - z = GetAFDB()->GetDouble("SuperiorBorderOfAorticArchZ"); + z = this->GetAFDB()->GetDouble("SuperiorBorderOfAorticArchZ"); } catch(clitk::ExceptionObject e) { DD("FindSuperiorBorderOfAorticArch"); - MaskImagePointer Aorta = GetAFDB()->template GetImage("Aorta"); + MaskImagePointer Aorta = this->GetAFDB()->template GetImage("Aorta"); MaskImagePointType p; p[0] = p[1] = p[2] = 0.0; // to avoid warning clitk::FindExtremaPointInAGivenDirection(Aorta, GetBackgroundValue(), 2, false, p); p[2] += Aorta->GetSpacing()[2]; // the slice above // We dont need Lungs structure from now - GetAFDB()->template ReleaseImage("Aorta"); + this->GetAFDB()->template ReleaseImage("Aorta"); // Put inside the AFDB - GetAFDB()->SetPoint3D("SuperiorBorderOfAorticArch", p); - GetAFDB()->SetDouble("SuperiorBorderOfAorticArchZ", p[2]); - WriteAFDB(); + this->GetAFDB()->SetPoint3D("SuperiorBorderOfAorticArch", p); + this->GetAFDB()->SetDouble("SuperiorBorderOfAorticArchZ", p[2]); + this->WriteAFDB(); z = p[2]; } return z; @@ -644,11 +648,11 @@ FindInferiorBorderOfAorticArch() { double z; try { - z = GetAFDB()->GetDouble("InferiorBorderOfAorticArchZ"); + z = this->GetAFDB()->GetDouble("InferiorBorderOfAorticArchZ"); } catch(clitk::ExceptionObject e) { DD("FindInferiorBorderOfAorticArch"); - MaskImagePointer Aorta = GetAFDB()->template GetImage("Aorta"); + MaskImagePointer Aorta = this->GetAFDB()->template GetImage("Aorta"); std::vector slices; clitk::ExtractSlices(Aorta, 2, slices); bool found=false; @@ -671,12 +675,12 @@ FindInferiorBorderOfAorticArch() Aorta->TransformIndexToPhysicalPoint(index, lower); // We dont need Lungs structure from now - GetAFDB()->template ReleaseImage("Aorta"); + this->GetAFDB()->template ReleaseImage("Aorta"); // Put inside the AFDB - GetAFDB()->SetPoint3D("InferiorBorderOfAorticArch", lower); - GetAFDB()->SetDouble("InferiorBorderOfAorticArchZ", lower[2]); - WriteAFDB(); + this->GetAFDB()->SetPoint3D("InferiorBorderOfAorticArch", lower); + this->GetAFDB()->SetDouble("InferiorBorderOfAorticArchZ", lower[2]); + this->WriteAFDB(); z = lower[2]; } return z; @@ -688,7 +692,7 @@ FindInferiorBorderOfAorticArch() template typename clitk::ExtractLymphStationsFilter::MaskImagePointer clitk::ExtractLymphStationsFilter:: -FindAntPostVessels() +FindAntPostVesselsOLD() { // ----------------------------------------------------- /* Rod says: "The anterior border, as with the Atlas – UM, is @@ -704,11 +708,9 @@ FindAntPostVessels() bool found = true; MaskImagePointer binarizedContour; try { - DD("FindAntPostVessels try to get"); - binarizedContour = GetAFDB()->template GetImage ("AntPostVesselsSeparation"); + binarizedContour = this->GetAFDB()->template GetImage ("AntPostVesselsSeparation"); } catch(clitk::ExceptionObject e) { - DD("not found"); found = false; } if (found) { @@ -733,22 +735,22 @@ FindAntPostVessels() */ // Read structures - MaskImagePointer BrachioCephalicArtery = GetAFDB()->template GetImage("BrachioCephalicArtery"); - MaskImagePointer BrachioCephalicVein = GetAFDB()->template GetImage("BrachioCephalicVein"); - MaskImagePointer CommonCarotidArtery = GetAFDB()->template GetImage("CommonCarotidArtery"); - MaskImagePointer SubclavianArtery = GetAFDB()->template GetImage("SubclavianArtery"); - MaskImagePointer Thyroid = GetAFDB()->template GetImage("Thyroid"); - MaskImagePointer Aorta = GetAFDB()->template GetImage("Aorta"); - MaskImagePointer Trachea = GetAFDB()->template GetImage("Trachea"); + MaskImagePointer BrachioCephalicArtery = this->GetAFDB()->template GetImage("BrachioCephalicArtery"); + MaskImagePointer BrachioCephalicVein = this->GetAFDB()->template GetImage("BrachioCephalicVein"); + MaskImagePointer CommonCarotidArtery = this->GetAFDB()->template GetImage("CommonCarotidArtery"); + MaskImagePointer SubclavianArtery = this->GetAFDB()->template GetImage("SubclavianArtery"); + MaskImagePointer Thyroid = this->GetAFDB()->template GetImage("Thyroid"); + MaskImagePointer Aorta = this->GetAFDB()->template GetImage("Aorta"); + MaskImagePointer Trachea = this->GetAFDB()->template GetImage("Trachea"); // Create a temporay support // From first slice of BrachioCephalicVein to end of 3A - MaskImagePointer support = GetAFDB()->template GetImage("Support_Sup_Carina"); + MaskImagePointer support = this->GetAFDB()->template GetImage("Support_Sup_Carina"); MaskImagePointType p; p[0] = p[1] = p[2] = 0.0; // to avoid warning clitk::FindExtremaPointInAGivenDirection(BrachioCephalicVein, GetBackgroundValue(), 2, true, p); double inf = p [2]; - clitk::FindExtremaPointInAGivenDirection(GetAFDB()->template GetImage("Support_S3A"), + clitk::FindExtremaPointInAGivenDirection(this->GetAFDB()->template GetImage("Support_S3A"), GetBackgroundValue(), 2, false, p); double sup = p [2]; support = clitk::CropImageAlongOneAxis(support, 2, inf, sup, @@ -1010,8 +1012,8 @@ FindAntPostVessels() false, GetBackgroundValue()); // Update the AFDB writeImage(binarizedContour, "seg/AntPostVesselsSeparation.mhd"); - GetAFDB()->SetImageFilename("AntPostVesselsSeparation", "seg/AntPostVesselsSeparation.mhd"); - WriteAFDB(); + this->GetAFDB()->SetImageFilename("AntPostVesselsSeparation", "seg/AntPostVesselsSeparation.mhd"); + this->WriteAFDB(); return binarizedContour; /* @@ -1046,21 +1048,6 @@ FindAntPostVessels() //-------------------------------------------------------------------- - - - - - - - - - - - - - - - //-------------------------------------------------------------------- template typename clitk::ExtractLymphStationsFilter::MaskImagePointer @@ -1081,11 +1068,9 @@ FindAntPostVessels2() bool found = true; MaskImagePointer binarizedContour; try { - DD("FindAntPostVessels try to get"); - binarizedContour = GetAFDB()->template GetImage ("AntPostVesselsSeparation"); + binarizedContour = this->GetAFDB()->template GetImage ("AntPostVesselsSeparation"); } catch(clitk::ExceptionObject e) { - DD("not found"); found = false; } if (found) { @@ -1112,28 +1097,33 @@ FindAntPostVessels2() // Read structures std::map MapOfStructures; typedef std::map::iterator MapIter; - MapOfStructures["BrachioCephalicArtery"] = GetAFDB()->template GetImage("BrachioCephalicArtery"); - MapOfStructures["BrachioCephalicVein"] = GetAFDB()->template GetImage("BrachioCephalicVein"); - MapOfStructures["CommonCarotidArteryLeft"] = GetAFDB()->template GetImage("CommonCarotidArteryLeft"); - MapOfStructures["CommonCarotidArteryRight"] = GetAFDB()->template GetImage("CommonCarotidArteryRight"); - MapOfStructures["SubclavianArteryLeft"] = GetAFDB()->template GetImage("SubclavianArteryLeft"); - MapOfStructures["SubclavianArteryRight"] = GetAFDB()->template GetImage("SubclavianArteryRight"); - MapOfStructures["Thyroid"] = GetAFDB()->template GetImage("Thyroid"); - MapOfStructures["Aorta"] = GetAFDB()->template GetImage("Aorta"); - MapOfStructures["Trachea"] = GetAFDB()->template GetImage("Trachea"); + MapOfStructures["BrachioCephalicArtery"] = this->GetAFDB()->template GetImage("BrachioCephalicArtery"); + MapOfStructures["BrachioCephalicVein"] = this->GetAFDB()->template GetImage("BrachioCephalicVein"); + MapOfStructures["CommonCarotidArteryLeft"] = this->GetAFDB()->template GetImage("CommonCarotidArteryLeft"); + MapOfStructures["CommonCarotidArteryRight"] = this->GetAFDB()->template GetImage("CommonCarotidArteryRight"); + MapOfStructures["SubclavianArteryLeft"] = this->GetAFDB()->template GetImage("SubclavianArteryLeft"); + MapOfStructures["SubclavianArteryRight"] = this->GetAFDB()->template GetImage("SubclavianArteryRight"); + MapOfStructures["Thyroid"] = this->GetAFDB()->template GetImage("Thyroid"); + MapOfStructures["Aorta"] = this->GetAFDB()->template GetImage("Aorta"); + MapOfStructures["Trachea"] = this->GetAFDB()->template GetImage("Trachea"); std::vector ListOfStructuresNames; // Create a temporay support - // From first slice of BrachioCephalicVein to end of 3A - MaskImagePointer support = GetAFDB()->template GetImage("Support_Sup_Carina"); + // From first slice of BrachioCephalicVein to end of 3A or end of 2RL + MaskImagePointer support = this->GetAFDB()->template GetImage("Support_Sup_Carina"); MaskImagePointType p; p[0] = p[1] = p[2] = 0.0; // to avoid warning clitk::FindExtremaPointInAGivenDirection(MapOfStructures["BrachioCephalicVein"], GetBackgroundValue(), 2, true, p); double inf = p[2]; - clitk::FindExtremaPointInAGivenDirection(GetAFDB()->template GetImage("Support_S3A"), + clitk::FindExtremaPointInAGivenDirection(this->GetAFDB()->template GetImage("Support_S3A"), GetBackgroundValue(), 2, false, p); + MaskImagePointType p2; + clitk::FindExtremaPointInAGivenDirection(this->GetAFDB()->template GetImage("Support_S2L"), + GetBackgroundValue(), 2, false, p2); + if (p2[2] > p[2]) p = p2; + double sup = p[2]+support->GetSpacing()[2];//one slice more ? support = clitk::CropImageAlongOneAxis(support, 2, inf, sup, false, GetBackgroundValue()); @@ -1381,8 +1371,8 @@ FindAntPostVessels2() // Update the AFDB writeImage(binarizedContour, "seg/AntPostVesselsSeparation.mhd"); - GetAFDB()->SetImageFilename("AntPostVesselsSeparation", "seg/AntPostVesselsSeparation.mhd"); - WriteAFDB(); + this->GetAFDB()->SetImageFilename("AntPostVesselsSeparation", "seg/AntPostVesselsSeparation.mhd"); + this->WriteAFDB(); return binarizedContour; /* diff --git a/segmentation/clitkExtractLymphStationsGenericFilter.txx b/segmentation/clitkExtractLymphStationsGenericFilter.txx index 47dad7d..317c78a 100644 --- a/segmentation/clitkExtractLymphStationsGenericFilter.txx +++ b/segmentation/clitkExtractLymphStationsGenericFilter.txx @@ -114,11 +114,6 @@ SetOptionsFromArgsInfoToFilter(FilterType * f) f->AddComputeStation(mArgsInfo.station_arg[i]); // Station 3A - f->SetFuzzyThreshold("3A", "SVC", mArgsInfo.S3A_ft_SVC_arg); - f->SetFuzzyThreshold("3A", "Bones", mArgsInfo.S3A_ft_Bones_arg); - f->SetThreshold("3A", "Bones", mArgsInfo.S3A_t_Bones_arg); - f->SetFuzzyThreshold("3A", "Aorta", mArgsInfo.S3A_ft_Aorta_arg); - f->SetFuzzyThreshold("3A", "SubclavianArtery", mArgsInfo.S3A_ft_SubclavianArtery_arg); // Station 7 f->SetFuzzyThreshold("7", "Bronchi", mArgsInfo.S7_ft_Bronchi_arg); @@ -130,12 +125,12 @@ SetOptionsFromArgsInfoToFilter(FilterType * f) f->SetS7_UseMostInferiorPartOnlyFlag(mArgsInfo.S7_UseMostInferiorPartOnly_flag); // Station 2RL - f->SetFuzzyThreshold("2RL", "CommonCarotidArtery", mArgsInfo.S2RL_ft_CommonCarotidArtery_arg); - f->SetFuzzyThreshold("2RL", "BrachioCephalicTrunk", mArgsInfo.S2RL_ft_BrachioCephalicTrunk_arg); - f->SetFuzzyThreshold("2RL", "BrachioCephalicVein", mArgsInfo.S2RL_ft_BrachioCephalicVein_arg); - f->SetFuzzyThreshold("2RL", "Aorta", mArgsInfo.S2RL_ft_Aorta_arg); - f->SetFuzzyThreshold("2RL", "SubclavianArteryLeft", mArgsInfo.S2RL_ft_SubclavianArteryLeft_arg); - f->SetFuzzyThreshold("2RL", "SubclavianArteryRight", mArgsInfo.S2RL_ft_SubclavianArteryRight_arg); + + // Station 1RL + + // Set RelativePositionList filenames + for(uint i=0; iAddRelativePositionListFilename(mArgsInfo.relpos_arg[i]); } //--------------------------------------------------------------------