]> Creatis software - clitk.git/blobdiff - itk/clitkAutoCropFilter.txx
change ROIFilter to extractImageFilter
[clitk.git] / itk / clitkAutoCropFilter.txx
index 46e35879d61866db3a03c38b6dc6fd856e31b0b4..743fe13f5a0bddd5a71fb57b5e8eab02d8398af6 100644 (file)
 #include "itkLabelImageToLabelMapFilter.h"
 #include "itkLabelMapToLabelImageFilter.h"
 #include "itkRegionOfInterestImageFilter.h"
+#include "itkExtractImageFilter.h"
 
 namespace clitk {
 
   //--------------------------------------------------------------------
-  template <class TImageType>
-  AutoCropFilter<TImageType>::
-  AutoCropFilter():itk::ImageToImageFilter<TImageType, TImageType>() {
+  template <class ImageType>
+  AutoCropFilter<ImageType>::
+  AutoCropFilter():itk::ImageToImageFilter<ImageType, ImageType>() {
     this->SetNumberOfRequiredInputs(1);
     m_BackgroundValue  = 0;
   }
@@ -43,20 +44,20 @@ namespace clitk {
 
 
   //--------------------------------------------------------------------
-  template <class TImageType>
+  template <class ImageType>
   void 
-  AutoCropFilter<TImageType>::
-  SetInput(const TImageType * image) {
+  AutoCropFilter<ImageType>::
+  SetInput(const ImageType * image) {
     // Process object is not const-correct so the const casting is required.
-    this->SetNthInput(0, const_cast<TImageType *>( image ));
+    this->SetNthInput(0, const_cast<ImageType *>( image ));
   }
   //--------------------------------------------------------------------
   
 
   //--------------------------------------------------------------------
-  template <class TImageType>
+  template <class ImageType>
   void 
-  AutoCropFilter<TImageType>::  
+  AutoCropFilter<ImageType>::  
   SetBackgroundValue(ImagePixelType p) {
     m_BackgroundValue = p;
   }
@@ -64,9 +65,9 @@ namespace clitk {
 
 
   //--------------------------------------------------------------------
-  template <class TImageType>
+  template <class ImageType>
   void 
-  AutoCropFilter<TImageType>::
+  AutoCropFilter<ImageType>::
   GenerateOutputInformation() {    
 
     // Superclass
@@ -94,7 +95,8 @@ namespace clitk {
     typedef itk::AutoCropLabelMapFilter<LabelMapType> AutoCropFilterType;
     typename AutoCropFilterType::Pointer autoCropFilter = AutoCropFilterType::New();
     autoCropFilter->SetInput(imageToLabelFilter->GetOutput());
-
+    autoCropFilter->ReleaseDataFlagOff(); 
+    
     // Convert to LabelImage
     typedef itk::LabelMapToLabelImageFilter<LabelMapType, ImageType> MapToImageFilterType;
     typename MapToImageFilterType::Pointer labelToImageFilter = MapToImageFilterType::New();       
@@ -106,6 +108,14 @@ namespace clitk {
 
     // Update the output size
     m_Region = m_labeImage->GetLargestPossibleRegion();
+    // 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);
+      DD(m_Region);
+    }
     output->SetLargestPossibleRegion(m_Region);
     output->SetRequestedRegion(m_Region);
     output->SetBufferedRegion(m_Region);
@@ -114,19 +124,26 @@ namespace clitk {
   //--------------------------------------------------------------------
    
   //--------------------------------------------------------------------
-  template <class TImageType>
+  template <class ImageType>
   void 
-  AutoCropFilter<TImageType>::
+  AutoCropFilter<ImageType>::
   GenerateData() {
     // Get input pointers
     ImageConstPointer input = dynamic_cast<const ImageType*>(itk::ProcessObject::GetInput(0));
   
-    // Extract the region
+    // Extract the region with RegionOfInterestImageFilter or ExtractImageFilter ? 
+    // The first is when reducing the nb of dimension (index always zero)
+    // The second keep index
+
     typedef itk::RegionOfInterestImageFilter<ImageType, ImageType> CropFilterType;
+    //typedef itk::ExtractImageFilter<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);
+    //cropFilter->SetExtractionRegion(m_Region);
 
     // Go ! 
     cropFilter->Update();