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
- BSD See included LICENSE.txt file
- CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
- ======================================================================-====*/
+ ===========================================================================**/
#ifndef CLITKAUTOCROPFILTER_TXX
#define CLITKAUTOCROPFILTER_TXX
// clitk
#include "clitkCommon.h"
-#include "clitkSegmentationUtils.h"
// itk
#include "itkAutoCropLabelMapFilter.h"
#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;
+ UseBorderOff();
}
//--------------------------------------------------------------------
//--------------------------------------------------------------------
- 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;
}
//--------------------------------------------------------------------
- template <class TImageType>
+ template <class ImageType>
void
- AutoCropFilter<TImageType>::
+ AutoCropFilter<ImageType>::
GenerateOutputInformation() {
// Superclass
typedef itk::AutoCropLabelMapFilter<LabelMapType> AutoCropFilterType;
typename AutoCropFilterType::Pointer autoCropFilter = AutoCropFilterType::New();
autoCropFilter->SetInput(imageToLabelFilter->GetOutput());
+ // autoCropFilter->ReleaseDataFlagOff();
+ if (GetUseBorder()) {
+ DD("Crop UseBorder : not correctly implemented do not use (use PadLabelMapFilter)");
+ // http://www.itk.org/Doxygen/html/classitk_1_1AutoCropLabelMapFilter.html#a54f49fdff8d9f2d2313134109d510285
+ exit(0);
+ 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;
// 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);
+ }
+
+ // Set the region to output
output->SetLargestPossibleRegion(m_Region);
output->SetRequestedRegion(m_Region);
output->SetBufferedRegion(m_Region);
//--------------------------------------------------------------------
//--------------------------------------------------------------------
- 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 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 !