X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=itk%2FclitkAutoCropFilter.txx;h=743fe13f5a0bddd5a71fb57b5e8eab02d8398af6;hb=0ce3ba4762f60cb451490224e436081cb0ae2598;hp=46e35879d61866db3a03c38b6dc6fd856e31b0b4;hpb=13ddd066e351ce733c75d38d0fb018bb6dba34b9;p=clitk.git diff --git a/itk/clitkAutoCropFilter.txx b/itk/clitkAutoCropFilter.txx index 46e3587..743fe13 100644 --- a/itk/clitkAutoCropFilter.txx +++ b/itk/clitkAutoCropFilter.txx @@ -29,13 +29,14 @@ #include "itkLabelImageToLabelMapFilter.h" #include "itkLabelMapToLabelImageFilter.h" #include "itkRegionOfInterestImageFilter.h" +#include "itkExtractImageFilter.h" namespace clitk { //-------------------------------------------------------------------- - template - AutoCropFilter:: - AutoCropFilter():itk::ImageToImageFilter() { + template + AutoCropFilter:: + AutoCropFilter():itk::ImageToImageFilter() { this->SetNumberOfRequiredInputs(1); m_BackgroundValue = 0; } @@ -43,20 +44,20 @@ namespace clitk { //-------------------------------------------------------------------- - template + template void - AutoCropFilter:: - SetInput(const TImageType * image) { + AutoCropFilter:: + SetInput(const ImageType * image) { // Process object is not const-correct so the const casting is required. - this->SetNthInput(0, const_cast( image )); + this->SetNthInput(0, const_cast( image )); } //-------------------------------------------------------------------- //-------------------------------------------------------------------- - template + template void - AutoCropFilter:: + AutoCropFilter:: SetBackgroundValue(ImagePixelType p) { m_BackgroundValue = p; } @@ -64,9 +65,9 @@ namespace clitk { //-------------------------------------------------------------------- - template + template void - AutoCropFilter:: + AutoCropFilter:: GenerateOutputInformation() { // Superclass @@ -94,7 +95,8 @@ namespace clitk { typedef itk::AutoCropLabelMapFilter AutoCropFilterType; typename AutoCropFilterType::Pointer autoCropFilter = AutoCropFilterType::New(); autoCropFilter->SetInput(imageToLabelFilter->GetOutput()); - + autoCropFilter->ReleaseDataFlagOff(); + // Convert to LabelImage typedef itk::LabelMapToLabelImageFilter 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 + template void - AutoCropFilter:: + AutoCropFilter:: GenerateData() { // Get input pointers ImageConstPointer input = dynamic_cast(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 CropFilterType; + //typedef itk::ExtractImageFilter 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();