]> Creatis software - clitk.git/blobdiff - segmentation/clitkExtractLymphStation_3A.txx
Second version of RelativePositionAnalyzer
[clitk.git] / segmentation / clitkExtractLymphStation_3A.txx
index 4b1d3c2906b13dac04cd915b881f66673f2f446b..50e394852123e6fec950275934f2de39978a84ec 100644 (file)
@@ -5,8 +5,6 @@ void
 clitk::ExtractLymphStationsFilter<ImageType>::
 ExtractStation_3A_SetDefaultValues()
 {
-  SetFuzzyThreshold("3A", "Sternum", 0.5);
-  SetFuzzyThreshold("3A", "SubclavianArtery", 0.5);
 }
 //--------------------------------------------------------------------
 
@@ -28,25 +26,19 @@ ExtractStation_3A()
   m_ListOfStations["3A"] = m_Working_Support;
   StopCurrentStep<MaskImageType>(m_Working_Support);
   
-  ExtractStation_3A_AntPost_S5();
-  ExtractStation_3A_AntPost_S6();
+  ExtractStation_3A_Post_Left_Limits_With_Aorta_S5_Support();
+  ExtractStation_3A_Post_Limits_With_Dilated_Aorta_S6_Support();
   ExtractStation_3A_AntPost_Superiorly();
   ExtractStation_3A_Remove_Structures();
-
-  Remove_Structures("3A", "Aorta");
-  Remove_Structures("3A", "SubclavianArteryLeft");
-  Remove_Structures("3A", "SubclavianArteryRight");
-  Remove_Structures("3A", "Thyroid");
-  Remove_Structures("3A", "CommonCarotidArteryLeft");
-  Remove_Structures("3A", "CommonCarotidArteryRight");
-  Remove_Structures("3A", "BrachioCephalicArtery");
-
-  ExtractStation_3A_PostToBones();
-  
   
+  // Generic RelativePosition processes
+  m_ListOfStations["3A"] = this->ApplyRelativePositionList("Station_3A", m_ListOfStations["3A"]);
 
-  // ExtractStation_3A_Ant_Limits(); --> No, already in support; to remove
-  // ExtractStation_3A_Post_Limits(); --> No, more complex, see Vessels etc
+  // Keep a single CCL
+  m_ListOfStations["3A"] = 
+    clitk::SliceBySliceKeepMainCCL<MaskImageType>(m_ListOfStations["3A"], 
+                                                  GetBackgroundValue(), 
+                                                  GetForegroundValue());
 
   // Store image filenames into AFDB 
   writeImage<MaskImageType>(m_ListOfStations["3A"], "seg/Station3A.mhd");
@@ -57,74 +49,16 @@ ExtractStation_3A()
 //--------------------------------------------------------------------
 
 
-//--------------------------------------------------------------------
-template <class ImageType>
-void 
-clitk::ExtractLymphStationsFilter<ImageType>::
-ExtractStation_3A_Ant_Limits() 
-{
-  StartNewStep("[Station 3A] Ant limits with Sternum");
-
-  // Get Sternum, keep posterior part.
-  MaskImagePointer Sternum = GetAFDB()->template GetImage<MaskImageType>("Sternum");
-  m_Working_Support = 
-    clitk::SliceBySliceRelativePosition<MaskImageType>(m_Working_Support, Sternum, 2, 
-                                                       GetFuzzyThreshold("3A", "Sternum"), "PostTo", 
-                                                       false, 3, true, false);
-  StopCurrentStep<MaskImageType>(m_Working_Support);
-  m_ListOfStations["3A"] = m_Working_Support;
-}
-//--------------------------------------------------------------------
-
 
 //--------------------------------------------------------------------
 template <class ImageType>
 void 
 clitk::ExtractLymphStationsFilter<ImageType>::
-ExtractStation_3A_Post_Limits() 
+ExtractStation_3A_Post_Left_Limits_With_Aorta_S5_Support() 
 {
-  StartNewStep("[Station 3A] Post limits with SubclavianArtery");
-
-  // Get Sternum, keep posterior part.
-  MaskImagePointer SubclavianArteryLeft = 
-    GetAFDB()->template GetImage<MaskImageType>("SubclavianArteryLeft");
-  MaskImagePointer SubclavianArteryRight = 
-    GetAFDB()->template GetImage<MaskImageType>("SubclavianArteryRight");
-
-  m_Working_Support = 
-    clitk::SliceBySliceRelativePosition<MaskImageType>(m_Working_Support, SubclavianArteryLeft, 2, 
-                                                       GetFuzzyThreshold("3A", "SubclavianArtery"), "AntTo", 
-                                                       false, 3, true, false);
-  m_Working_Support = 
-    clitk::SliceBySliceRelativePosition<MaskImageType>(m_Working_Support, SubclavianArteryRight, 2, 
-                                                       GetFuzzyThreshold("3A", "SubclavianArtery"), "AntTo", 
-                                                       false, 3, true, false);
-  StopCurrentStep<MaskImageType>(m_Working_Support);
-  m_ListOfStations["3A"] = m_Working_Support;
-}
-//--------------------------------------------------------------------
+  StartNewStep("[Station 3A] Post limits in S5 support according to Aorta");
 
-
-//--------------------------------------------------------------------
-template <class ImageType>
-void 
-clitk::ExtractLymphStationsFilter<ImageType>::
-ExtractStation_3A_AntPost_S5() 
-{
-  StartNewStep("[Station 3A] Post limits around S5");
-
-  // First remove post to SVC
-  MaskImagePointer SVC = GetAFDB()->template GetImage <MaskImageType>("SVC");
-
-  // Trial in 3D -> difficulties superiorly. Stay slice by slice.
-  // Slice by slice not post to SVC. Use initial spacing
-  m_Working_Support = 
-    clitk::SliceBySliceRelativePosition<MaskImageType>(m_Working_Support, SVC, 2, 
-                                                       GetFuzzyThreshold("3A", "SVC"), 
-                                                       "NotPostTo", true, 
-                                                       SVC->GetSpacing()[0], false, false);  
-
-  // Consider Aorta, remove Left/Post part ; only around S5
+   // Consider Aorta, remove Left/Post part ; only around S5
   // Get S5 support and Aorta
   MaskImagePointer S5 = m_ListOfSupports["S5"];
   MaskImagePointer Aorta = GetAFDB()->template GetImage <MaskImageType>("Aorta");
@@ -133,6 +67,13 @@ ExtractStation_3A_AntPost_S5()
   // Inferiorly, Aorta has two CCL that merge into a single one when
   // S6 appears. Loop on Aorta slices, select the most ant one, detect
   // the most ant point.
+
+
+
+  // ====> TO BE CHANGED USING AscendingAorta and DescendingAorta
+
+
+
   std::vector<MaskSlicePointer> slices;
   clitk::ExtractSlices<MaskImageType>(Aorta, 2, slices);
   std::vector<MaskImagePointType> points;
@@ -188,9 +129,9 @@ ExtractStation_3A_AntPost_S5()
 template <class ImageType>
 void 
 clitk::ExtractLymphStationsFilter<ImageType>::
-ExtractStation_3A_AntPost_S6() 
+ExtractStation_3A_Post_Limits_With_Dilated_Aorta_S6_Support() 
 {
-  StartNewStep("[Station 3A] Post limits around S6");
+  StartNewStep("[Station 3A] Post limits with dilated Aorta");
 
   // Consider Aorta
   MaskImagePointer Aorta = GetAFDB()->template GetImage <MaskImageType>("Aorta");
@@ -206,13 +147,11 @@ ExtractStation_3A_AntPost_S6()
   radius[2] = 0; // required
   Aorta = clitk::Dilate<MaskImageType>(Aorta, radius, GetBackgroundValue(), GetForegroundValue(), false);
   
-  // Not Post to
-  m_Working_Support = 
-    clitk::SliceBySliceRelativePosition<MaskImageType>(m_Working_Support, Aorta, 2, 
-                                                       GetFuzzyThreshold("3A", "Aorta"), 
-                                                       "NotPostTo", true, 
-                                                       Aorta->GetSpacing()[0], false, false);
-  
+  // Now, insert this image in the AFDB (but do not store on disk)
+  GetAFDB()->template SetImage<MaskImageType>("Aorta_Dilated_Anteriorly", "seg/Aorta_Dilated_Anteriorly.mha", Aorta, false);
+  writeImage<MaskImageType>(Aorta, "seg/Aorta_Dilated_Anteriorly.mha");
+  GetAFDB()->Write();
+
   StopCurrentStep<MaskImageType>(m_Working_Support);
   m_ListOfStations["3A"] = m_Working_Support;
 }
@@ -226,30 +165,6 @@ clitk::ExtractLymphStationsFilter<ImageType>::
 ExtractStation_3A_AntPost_Superiorly() 
 {
   StartNewStep("[Station 3A] Post limits superiorly");
-
-  /*
- MaskImagePointer BrachioCephalicVein = GetAFDB()->template GetImage <MaskImageType>("BrachioCephalicVein");
- MaskImagePointer BrachioCephalicArtery = GetAFDB()->template GetImage <MaskImageType>("BrachioCephalicArtery");
- MaskImagePointer CommonCarotidArteryLeft = GetAFDB()->template GetImage <MaskImageType>("CommonCarotidArteryLeft");
- MaskImagePointer CommonCarotidArteryRight = GetAFDB()->template GetImage <MaskImageType>("CommonCarotidArteryRight");
- MaskImagePointer SubclavianArteryLeft = GetAFDB()->template GetImage <MaskImageType>("SubclavianArteryLeft");
- MaskImagePointer SubclavianArteryRight = GetAFDB()->template GetImage <MaskImageType>("SubclavianArteryRight");
-
-  // Not Post to
-#define RP(STRUCTURE)                                                   \
- m_Working_Support =                                                    \
-   clitk::SliceBySliceRelativePosition<MaskImageType>(m_Working_Support, STRUCTURE, 2, \
-                                                      0.5,              \
-                                                      "NotPostTo", true, \
-                                                      STRUCTURE->GetSpacing()[0], false, false);
- // RP(BrachioCephalicVein);
- RP(BrachioCephalicArtery);
- RP(CommonCarotidArteryRight);
- RP(CommonCarotidArteryLeft);
- RP(SubclavianArteryRight);
- RP(SubclavianArteryLeft);
-  */
   
   // Get or compute the binary mask that separate Ant/Post part
   // according to vessels
@@ -282,13 +197,14 @@ void
 clitk::ExtractLymphStationsFilter<ImageType>::
 ExtractStation_3A_Remove_Structures() 
 {
-  Remove_Structures("3A", "Aorta");
-  Remove_Structures("3A", "SubclavianArteryLeft");
-  Remove_Structures("3A", "SubclavianArteryRight");
-  Remove_Structures("3A", "Thyroid");
-  Remove_Structures("3A", "CommonCarotidArteryLeft");
-  Remove_Structures("3A", "CommonCarotidArteryRight");
-  Remove_Structures("3A", "BrachioCephalicArtery");
+  Remove_Structures(" 3A", "Aorta");
+  Remove_Structures(" 3A", "LeftSubclavianArtery");
+  Remove_Structures(" 3A", "RightSubclavianArtery");
+  Remove_Structures(" 3A", "Thyroid");
+  Remove_Structures(" 3A", "LeftCommonCarotidArtery");
+  Remove_Structures(" 3A", "RightCommonCarotidArtery");
+  Remove_Structures(" 3A", "BrachioCephalicArtery");
+  //  Remove_Structures("3A", "Bones"); --> should be in extractmediastinum
   //  Remove_Structures("3A", "BrachioCephalicVein"); ?
 
   StartNewStep("[Station 3A] Remove part of BrachioCephalicVein");
@@ -341,3 +257,5 @@ ExtractStation_3A_Remove_Structures()
   m_ListOfStations["3A"] = m_Working_Support;
 }
 //--------------------------------------------------------------------
+
+