]> Creatis software - clitk.git/blobdiff - segmentation/clitkMotionMaskGenericFilter.txx
Merge branch 'master' of git.creatis.insa-lyon.fr:clitk
[clitk.git] / segmentation / clitkMotionMaskGenericFilter.txx
old mode 100755 (executable)
new mode 100644 (file)
index d2de0d4..543bcdb
@@ -3,7 +3,7 @@
 
   Authors belong to:
   - University of LYON              http://www.universite-lyon.fr/
-  - Léon Bérard cancer center       http://oncora1.lyon.fnclcc.fr
+  - Léon Bérard cancer center       http://www.centreleonberard.fr
   - CREATIS CNRS laboratory         http://www.creatis.insa-lyon.fr
 
   This software is distributed WITHOUT ANY WARRANTY; without even
@@ -14,7 +14,7 @@
 
   - BSD        See included LICENSE.txt file
   - CeCILL-B   http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-======================================================================-====*/
+===========================================================================**/
 #ifndef clitkMotionMaskGenericFilter_txx
 #define clitkMotionMaskGenericFilter_txx
 
@@ -107,10 +107,13 @@ MotionMaskGenericFilter::GetAirImage(typename itk::Image<PixelType, Dimension>::
       typename InternalImageType::IndexType index;
       while(!it.IsAtEnd()) {
         index=it.GetIndex();
+
+        //Pad borders of all dimensions but 2 (cranio-caudal)
         for (unsigned int i=0; i<Dimension; i++){
-          if(index[2]!=0 &&
-             (index[i]==air->GetLargestPossibleRegion().GetIndex()[i]
-              || index[i]==(unsigned int)air->GetLargestPossibleRegion().GetIndex()[i]+ (unsigned int) air->GetLargestPossibleRegion().GetSize()[i]-1))
+          if(i==2)
+            continue;
+          if(index[i]==air->GetLargestPossibleRegion().GetIndex()[i]
+              || index[i]==(unsigned int)air->GetLargestPossibleRegion().GetIndex()[i]+ (unsigned int) air->GetLargestPossibleRegion().GetSize()[i]-1)
             it.Set(1);
         }
         ++it;
@@ -139,10 +142,13 @@ MotionMaskGenericFilter::GetAirImage(typename itk::Image<PixelType, Dimension>::
       typename InternalImageType::IndexType index;
       while(!it.IsAtEnd()) {
         index=it.GetIndex();
+
+        //Pad borders of all dimensions but 2 (cranio-caudal)
         for (unsigned int i=0; i<Dimension; i++){
-          if(index[2]!=0 &&
-             (index[i]==air->GetLargestPossibleRegion().GetIndex()[i]
-              || index[i]==(unsigned int)air->GetLargestPossibleRegion().GetIndex()[i]+ (unsigned int) air->GetLargestPossibleRegion().GetSize()[i]-1))
+          if(i==2)
+            continue;
+          if(index[i]==air->GetLargestPossibleRegion().GetIndex()[i]
+              || index[i]==(unsigned int)air->GetLargestPossibleRegion().GetIndex()[i]+ (unsigned int) air->GetLargestPossibleRegion().GetSize()[i]-1)
             it.Set(binarizeFilter->GetInsideValue());
         }
         ++it;
@@ -371,6 +377,8 @@ MotionMaskGenericFilter::GetLungsImage(typename itk::Image<PixelType, Dimension>
     connectFilter->SetBackgroundValue(0);
     connectFilter->SetFullyConnected(true);
     if (m_Verbose) std::cout<<"Labeling the connected components..."<<std::endl;
+    connectFilter->Update();
+    if (m_Verbose) std::cout<<"found "<< connectFilter->GetObjectCount() << std::endl;
 
     //---------------------------------
     // Sort the labels according to size
@@ -378,7 +386,7 @@ MotionMaskGenericFilter::GetLungsImage(typename itk::Image<PixelType, Dimension>
     typename RelabelFilterType::Pointer relabelFilter=RelabelFilterType::New();
     relabelFilter->SetInput(connectFilter->GetOutput());
     if (m_Verbose) std::cout<<"Sorting the labels..."<<std::endl;
-    // writeImage<InternalImageType> (relabelFilter->GetOutput(), "/home/jef/tmp/labels.mhd");
+    // writeImage<InternalImageType> (relabelFilter->GetOutput(), "/home/vdelmon/tmp/labels.mhd");
 
     //---------------------------------
     // Keep the label