]> Creatis software - clitk.git/blobdiff - itk/clitkAutoCropFilter.txx
Romulo:
[clitk.git] / itk / clitkAutoCropFilter.txx
index 6f009261f42acc9c7ad5c5206616ebf329ded775..85ce7be27cc4102825a73e911fccf1c4c6dc6b6c 100644 (file)
@@ -29,6 +29,7 @@
 #include "itkLabelImageToLabelMapFilter.h"
 #include "itkLabelMapToLabelImageFilter.h"
 #include "itkRegionOfInterestImageFilter.h"
+#include "itkExtractImageFilter.h"
 
 namespace clitk {
 
@@ -38,6 +39,7 @@ namespace clitk {
   AutoCropFilter():itk::ImageToImageFilter<ImageType, ImageType>() {
     this->SetNumberOfRequiredInputs(1);
     m_BackgroundValue  = 0;
+    UseBorderOn();
   }
   //--------------------------------------------------------------------
 
@@ -89,13 +91,19 @@ namespace clitk {
     typename ImageToMapFilterType::Pointer imageToLabelFilter = ImageToMapFilterType::New();  
     imageToLabelFilter->SetBackgroundValue(m_BackgroundValue);
     imageToLabelFilter->SetInput(input);
-    DD(input->GetLargestPossibleRegion());
     
     // AutoCrop
     typedef itk::AutoCropLabelMapFilter<LabelMapType> AutoCropFilterType;
     typename AutoCropFilterType::Pointer autoCropFilter = AutoCropFilterType::New();
     autoCropFilter->SetInput(imageToLabelFilter->GetOutput());
-    
+    //    autoCropFilter->ReleaseDataFlagOff(); 
+    if (GetUseBorder()) {
+      typename ImageType::SizeType s;
+      for(uint i=0; i<ImageType::ImageDimension; i++) s[i] = 1;
+      autoCropFilter->SetCropBorder(s);
+    }
+    autoCropFilter->ReleaseDataFlagOn(); 
+
     // Convert to LabelImage
     typedef itk::LabelMapToLabelImageFilter<LabelMapType, ImageType> MapToImageFilterType;
     typename MapToImageFilterType::Pointer labelToImageFilter = MapToImageFilterType::New();       
@@ -103,18 +111,19 @@ namespace clitk {
 
     // Go ! (needed)
     labelToImageFilter->Update();
-    DD("CHECK AUTOCROP IF NB LABEL == 0 !!!");
     m_labeImage = labelToImageFilter->GetOutput();
 
     // Update the output size
     m_Region = m_labeImage->GetLargestPossibleRegion();
-    DD(m_Region);
     // Sometimes the index is 9223372036854775807 ???
     if (m_Region.GetIndex()[0] > 99999) {
+      std::cerr << "Warning !! BUG int clitkAutoCropFilter ?" << std::endl;
       typename ImageType::IndexType index; 
       index.Fill(0);
       m_Region.SetIndex(index);
     }
+
+    // Set the region to output
     output->SetLargestPossibleRegion(m_Region);
     output->SetRequestedRegion(m_Region);
     output->SetBufferedRegion(m_Region);
@@ -130,11 +139,17 @@ namespace clitk {
     // Get input pointers
     ImageConstPointer input = dynamic_cast<const ImageType*>(itk::ProcessObject::GetInput(0));
   
-    // Extract the region
+    // Extract the region with RegionOfInterestImageFilter or ExtractImageFilter ? 
+    // The second is when reducing the nb of dimension (index always zero)
+    // The first keep index. 
+    // OLD : typedef itk::ExtractImageFilter<ImageType, ImageType> CropFilterType;
+    // OLD : cropFilter->SetExtractionRegion(m_Region);
+
     typedef itk::RegionOfInterestImageFilter<ImageType, ImageType> CropFilterType;
     m_labeImage->SetRequestedRegion(m_labeImage->GetLargestPossibleRegion());
     typename CropFilterType::Pointer cropFilter = CropFilterType::New();
     cropFilter->SetInput(m_labeImage);
+    cropFilter->SetReleaseDataFlag(this->GetReleaseDataFlag());
     cropFilter->SetRegionOfInterest(m_Region);
 
     // Go !