]> Creatis software - clitk.git/blobdiff - segmentation/clitkExtractLungFilter.txx
Add ROI tab
[clitk.git] / segmentation / clitkExtractLungFilter.txx
index f537fc1d2f5d483e33d3b9dfe7f6f33de4525c69..8dcdb5b04dffcffa4118269abee862c31742b53a 100644 (file)
@@ -259,6 +259,9 @@ GenerateOutputInformation()
   StartNewStep("Search for the trachea");
   SearchForTrachea();
   PrintMemory(GetVerboseMemoryFlag(), "After SearchForTrachea");
+  if (m_Seeds.empty()) {
+    clitkExceptionMacro("No seeds for trachea... Aborting.");
+  }
 
   //--------------------------------------------------------------------
   //--------------------------------------------------------------------
@@ -700,17 +703,20 @@ SearchForTracheaSeed2(int numberOfSlices)
         writer->Update();
       }
 
-      typename LabelImageType::LabelObjectContainerType shapes_map = label_map->GetLabelObjectContainer();
-      typename LabelImageType::LabelObjectContainerType::const_iterator s;
       typename ShapeLabelType::Pointer shape, max_e_shape;
       double max_elongation = GetMaxElongation();
       double max_size = size[0]*size[1]/128;
       double max_e = 0;
       int nshapes = 0;
-      for (s = shapes_map.begin(); s != shapes_map.end(); s++) {
-        shape = s->second;
-        if (shape->GetSize() > 150 && shape->GetSize() <= max_size) {
+      unsigned int nlables = label_map->GetNumberOfLabelObjects();
+      for (unsigned int j = 0; j < nlables; j++) {
+        shape = label_map->GetNthLabelObject(j);
+        if (shape->Size() > 150 && shape->Size() <= max_size) {
+#if ITK_VERSION_MAJOR < 4
           double e = 1 - 1/shape->GetBinaryElongation();
+#else
+          double e = 1 - 1/shape->GetElongation();
+#endif
           //double area = 1 - r->Area() ;
           if (e < max_elongation) {
             nshapes++;
@@ -763,6 +769,11 @@ SearchForTracheaSeed2(int numberOfSlices)
         
         prev_e_centre= max_e_centre;
       }
+      else {
+        if (GetVerboseRegionGrowingFlag()) {
+          cout << "No shapes found at slice " << index[2] << std::endl;
+        }
+      }
     }
     
     size_t longest = 0;
@@ -775,9 +786,11 @@ SearchForTracheaSeed2(int numberOfSlices)
       }
     }
     
-    if (GetVerboseRegionGrowingFlag()) 
-      std::cout << "seed at: " << trachea_centre << std::endl;
-    m_Seeds.push_back(trachea_centre);
+    if (longest > 0) {
+      if (GetVerboseRegionGrowingFlag()) 
+        std::cout << "seed at: " << trachea_centre << std::endl;
+      m_Seeds.push_back(trachea_centre);
+    }
   }
   
   return (m_Seeds.size() != 0);
@@ -889,16 +902,17 @@ SearchForTrachea()
             std::cout << "\t Found trachea with volume " << volume << " cc." << std::endl;
           }
         }
-        else {
-          if (GetVerboseStepFlag()) {
-            std::cout << "\t The volume of the trachea (" << volume 
-                      << " cc) seems not correct. I skip some slices (" << skip << ") and restart to find seeds." 
-                      << std::endl;
-          }
-          skip += 5;
-          stop = false;
-          // empty the list of seed
-          m_Seeds.clear();
+        else 
+          if (GetTracheaSeedAlgorithm() == 0) {
+            if (GetVerboseStepFlag()) {
+              std::cout << "\t The volume of the trachea (" << volume 
+                        << " cc) seems not correct. I skip some slices (" << skip << ") and restart to find seeds." 
+                        << std::endl;
+            }
+            skip += 5;
+            stop = false;
+            // empty the list of seed
+            m_Seeds.clear();
         }
         if (skip > 0.5 * working_input->GetLargestPossibleRegion().GetSize()[2]) {
           // we want to skip more than a half of the image, it is probably a bug