]> Creatis software - clitk.git/commitdiff
Add test outside SearchForTrackea to avoid infinite loop
authorVivien Delmon <vivien.delmon@creatis.insa-lyon.fr>
Tue, 14 Jun 2011 07:38:15 +0000 (09:38 +0200)
committerVivien Delmon <vivien.delmon@creatis.insa-lyon.fr>
Tue, 14 Jun 2011 07:38:15 +0000 (09:38 +0200)
When clitkExtractLung did not find the trackea it looped infinitly.

segmentation/clitkExtractLungFilter.txx

index 1a945917be9149b76617dfca22c40de34f533db6..3a098e9aad5c84bbbe965995ef7200ee974368ab 100644 (file)
@@ -591,7 +591,7 @@ ComputeTracheaVolume()
 
 //--------------------------------------------------------------------
 template <class ImageType>
-void 
+void
 clitk::ExtractLungFilter<ImageType>::
 SearchForTrachea()
 {
@@ -606,8 +606,8 @@ SearchForTrachea()
   double volume = 0.0;
   int skip = GetNumberOfSlicesToSkipBeforeSearchingSeed();
   while (!stop) {
-    stop = SearchForTracheaSeed(skip);
-    if (stop) {
+    stop = true;
+    if (SearchForTracheaSeed(skip)) {
       TracheaRegionGrowing();
       volume = ComputeTracheaVolume()/1000; // assume mm3, so divide by 1000 to get cc
       if (GetWriteStepFlag()) {
@@ -619,7 +619,6 @@ SearchForTrachea()
           if (GetVerboseStepFlag()) {
             std::cout << "\t Found trachea with volume " << volume << " cc." << std::endl;
           }
-          stop = true; 
         }
         else {
           if (GetVerboseStepFlag()) {
@@ -632,6 +631,11 @@ SearchForTrachea()
           // 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
+          std::cerr << "2 : Number of slices to skip to find trachea too high = " << skip << std::endl;
+          stop = true;
+        }
       }
       else {
         stop = true;