+++ /dev/null
-/*=========================================================================
- Program: vv http://www.creatis.insa-lyon.fr/rio/vv
-
- Authors belong to:
- - University of LYON http://www.universite-lyon.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
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the copyright notices for more information.
-
- It is distributed under dual licence
-
- - BSD See included LICENSE.txt file
- - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-===========================================================================**/
-#ifndef clitkDecomposeAndReconstructImageFilter_h
-#define clitkDecomposeAndReconstructImageFilter_h
-
-/* =================================================
- * @file clitkDecomposeAndReconstructImageFilter.h
- * @author
- * @date
- *
- * @brief
- *
- ===================================================*/
-
-
-// clitk include
-#include "clitkIO.h"
-#include "clitkCommon.h"
-#include "clitkDecomposeThroughErosionImageFilter.h"
-#include "clitkReconstructThroughDilationImageFilter.h"
-
-//itk include
-#include "itkImageToImageFilter.h"
-#include "itkRelabelComponentImageFilter.h"
-
-
-namespace clitk
-{
-
- template <class InputImageType, class OutputImageType>
- class ITK_EXPORT DecomposeAndReconstructImageFilter :
- public itk::ImageToImageFilter<InputImageType, OutputImageType>
- {
- public:
- //----------------------------------------
- // ITK
- //----------------------------------------
- typedef DecomposeAndReconstructImageFilter Self;
- typedef itk::ImageToImageFilter<InputImageType, OutputImageType> Superclass;
- typedef itk::SmartPointer<Self> Pointer;
- typedef itk::SmartPointer<const Self> ConstPointer;
-
- // Method for creation through the object factory
- itkNewMacro(Self);
-
- // Run-time type information (and related methods)
- itkTypeMacro( DecomposeAndReconstructImageFilter, ImageToImageFilter );
-
- /** Dimension of the domain space. */
- itkStaticConstMacro(InputImageDimension, unsigned int, Superclass::InputImageDimension);
- itkStaticConstMacro(OutputImageDimension, unsigned int, Superclass::OutputImageDimension);
-
- //----------------------------------------
- // Typedefs
- //----------------------------------------
- typedef typename OutputImageType::RegionType OutputImageRegionType;
- typedef int InternalPixelType;
- typedef typename InputImageType::PixelType InputPixelType;
- typedef typename OutputImageType::PixelType OutputPixelType;
- typedef typename InputImageType::SizeType SizeType;
-
-
- //----------------------------------------
- // Set & Get
- //----------------------------------------
- itkBooleanMacro(Verbose);
- itkSetMacro( Verbose, bool);
- itkGetConstReferenceMacro( Verbose, bool);
- itkBooleanMacro(FullyConnected);
- itkSetMacro( FullyConnected, bool);
- itkGetConstReferenceMacro( FullyConnected, bool);
- void SetRadius ( const SizeType& s){ m_Radius=s; this->Modified();}
- SizeType GetRadius(void){return m_Radius;}
- itkSetMacro( MaximumNumberOfLabels, unsigned int);
- itkGetConstMacro( MaximumNumberOfLabels, unsigned int);
- itkSetMacro( BackgroundValue, InternalPixelType);
- itkGetConstMacro( BackgroundValue, InternalPixelType);
- itkSetMacro( ForegroundValue, InternalPixelType);
- itkGetConstMacro( ForegroundValue, InternalPixelType);
- itkSetMacro( NumberOfNewLabels, unsigned int);
- itkGetConstMacro( NumberOfNewLabels, unsigned int);
- itkSetMacro( MinimumObjectSize, unsigned int);
- itkGetConstMacro( MinimumObjectSize, unsigned int);
- itkSetMacro( MinimumNumberOfIterations, unsigned int);
- itkGetConstMacro( MinimumNumberOfIterations, unsigned int);
- // // Convenience macro's: Built-in
- // itkBooleanMacro (flag); //FlagOn FlagOff
- // itkGetMacro(name, type);
- // itkSetMacro(name, type);
- // itkSetConstMacro( name, type);
- // itkGetConstMacro( name, type);
- // itkSetConstReferenceMacro(name, type);
- // itkGetConstReferenceMacro(name, type);
- // // Convenience macro's: Smartpointers
- // itkSetObjectMacro(name, type);
- // itkGetObjectMacro(name, type);
- // itkSetConstObjectMacro(name, type);
- // itkGetConstObjectMacro(name, type);
- // itkSetConstReferenceObjectMacro(name, type);
- // itkSetConstReference(name, type);
-
-
- protected:
-
- //----------------------------------------
- // Constructor & Destructor
- //----------------------------------------
- DecomposeAndReconstructImageFilter();
- ~DecomposeAndReconstructImageFilter() {};
-
- //----------------------------------------
- // Update
- //----------------------------------------
- // Generate Data
- void GenerateData(void);
-
- // // Threaded Generate Data
- // void BeforeThreadedGenerateData(void );
- // void ThreadedGenerateData(const OutputImageRegionType & outputRegionForThread, int threadId );
- // void AfterThreadedGenerateData(void );
- // // Override defaults
- // virtual void GenerateInputRequestedRegion();
- // virtual void GenerateOutputInformation (void);
- // virtual void EnlargeOutputRequestedRegion(DataObject *data);
- void AllocateOutputs(){;}
- //----------------------------------------
- // Data members
- //----------------------------------------
- bool m_Verbose;
- SizeType m_Radius;
- unsigned int m_NumberOfNewLabels;
- bool m_FullyConnected;
- InputPixelType m_BackgroundValue;
- InputPixelType m_ForegroundValue;
- unsigned int m_MaximumNumberOfLabels;
- unsigned int m_MinimumObjectSize;
- unsigned int m_MinimumNumberOfIterations;
- };
-
-
-} // end namespace clitk
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include "clitkDecomposeAndReconstructImageFilter.txx"
-#endif
-
-#endif // #define clitkDecomposeAndReconstructImageFilter_h
-
-
+++ /dev/null
-/*=========================================================================
- Program: vv http://www.creatis.insa-lyon.fr/rio/vv
-
- Authors belong to:
- - University of LYON http://www.universite-lyon.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
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the copyright notices for more information.
-
- It is distributed under dual licence
-
- - BSD See included LICENSE.txt file
- - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-===========================================================================**/
-#ifndef clitkDecomposeAndReconstructImageFilter_txx
-#define clitkDecomposeAndReconstructImageFilter_txx
-
-namespace clitk
-{
-
- //-------------------------------------------------------------------
- // Update with the number of dimensions
- //-------------------------------------------------------------------
- template<class InputImageType, class OutputImageType>
- DecomposeAndReconstructImageFilter<InputImageType, OutputImageType>::DecomposeAndReconstructImageFilter()
- {
- m_Verbose=false;
- for (unsigned int i=0; i<InputImageDimension; i++)
- m_Radius[i]=1;
- m_NumberOfNewLabels=1;
- m_FullyConnected=true;
- m_BackgroundValue=0;
- m_ForegroundValue=1;
- m_MaximumNumberOfLabels=10;
- m_MinimumObjectSize=10;
- m_MinimumNumberOfIterations=1;
-
- }
-
-
- //-------------------------------------------------------------------
- // Update with the number of dimensions and the pixeltype
- //-------------------------------------------------------------------
- template <class InputImageType, class OutputImageType>
- void
- DecomposeAndReconstructImageFilter<InputImageType, OutputImageType>::GenerateData()
- {
-
-
- // Internal type
- typedef itk::Image<InternalPixelType, InputImageDimension> InternalImageType;
-
- // Filters used
- typedef clitk::DecomposeThroughErosionImageFilter<InputImageType, InternalImageType> DecomposeThroughErosionImageFilterType;
- typedef clitk::ReconstructThroughDilationImageFilter<InternalImageType, InputImageType> ReconstructThroughDilationImageFilterType;
-
- // Erode
- typename DecomposeThroughErosionImageFilterType::Pointer erosionFilter=DecomposeThroughErosionImageFilterType::New();
- erosionFilter->SetInput(this->GetInput());
- erosionFilter->SetVerbose(m_Verbose);
- erosionFilter->SetFullyConnected(m_FullyConnected);
- erosionFilter->SetRadius(m_Radius);
- erosionFilter->SetNumberOfNewLabels(m_NumberOfNewLabels);
- erosionFilter->SetMinimumObjectSize(m_MinimumObjectSize);
- erosionFilter->SetMinimumNumberOfIterations(m_MinimumNumberOfIterations);
- erosionFilter->Update();
-
- // Reconstruct
- typename ReconstructThroughDilationImageFilterType::Pointer reconstructionFilter =ReconstructThroughDilationImageFilterType::New();
- reconstructionFilter->SetInput(erosionFilter->GetOutput());
- reconstructionFilter->SetVerbose(m_Verbose);
- reconstructionFilter->SetRadius(m_Radius);
- reconstructionFilter->SetMaximumNumberOfLabels(m_MaximumNumberOfLabels);
- reconstructionFilter->SetBackgroundValue(m_BackgroundValue);
- reconstructionFilter->SetForegroundValue(m_ForegroundValue);
- reconstructionFilter->Update();
-
- // Output
- this->SetNthOutput(0,reconstructionFilter->GetOutput());
- }
-
-
-}//end clitk
-
-#endif //#define clitkDecomposeAndReconstructImageFilter_txx
+++ /dev/null
-/*=========================================================================
- Program: vv http://www.creatis.insa-lyon.fr/rio/vv
-
- Authors belong to:
- - University of LYON http://www.universite-lyon.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
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the copyright notices for more information.
-
- It is distributed under dual licence
-
- - BSD See included LICENSE.txt file
- - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-===========================================================================**/
-#ifndef clitkDecomposeThroughErosionImageFilter_h
-#define clitkDecomposeThroughErosionImageFilter_h
-
-/* =================================================
- * @file clitkDecomposeThroughErosionImageFilter.h
- * @author
- * @date
- *
- * @brief
- *
- ===================================================*/
-
-
-// clitk include
-#include "clitkIO.h"
-#include "clitkCommon.h"
-#include "clitkSetBackgroundImageFilter.h"
-
-//itk include
-#include "itkImageToImageFilter.h"
-#include "itkBinaryThresholdImageFilter.h"
-#include "itkBinaryErodeImageFilter.h"
-#include "itkStatisticsImageFilter.h"
-#include "itkConnectedComponentImageFilter.h"
-#include "itkCastImageFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "itkRelabelComponentImageFilter.h"
-
-namespace clitk
-{
-
- template <class InputImageType, class OutputImageType>
- class ITK_EXPORT DecomposeThroughErosionImageFilter :
- public itk::ImageToImageFilter<InputImageType, OutputImageType>
- {
- public:
- //----------------------------------------
- // ITK
- //----------------------------------------
- typedef DecomposeThroughErosionImageFilter Self;
- typedef itk::ImageToImageFilter<InputImageType, OutputImageType> Superclass;
- typedef itk::SmartPointer<Self> Pointer;
- typedef itk::SmartPointer<const Self> ConstPointer;
-
- // Method for creation through the object factory
- itkNewMacro(Self);
-
- // Run-time type information (and related methods)
- itkTypeMacro( DecomposeThroughErosionImageFilter, ImageToImageFilter );
-
- /** Dimension of the domain space. */
- itkStaticConstMacro(InputImageDimension, unsigned int, Superclass::InputImageDimension);
- itkStaticConstMacro(OutputImageDimension, unsigned int, Superclass::OutputImageDimension);
-
- //----------------------------------------
- // Typedefs
- //----------------------------------------
- typedef typename OutputImageType::RegionType OutputImageRegionType;
- typedef int InternalPixelType;
- typedef typename InputImageType::PixelType InputPixelType;
- typedef typename OutputImageType::PixelType OutputPixelType;
- typedef typename InputImageType::SizeType SizeType;
-
- //----------------------------------------
- // Set & Get
- //----------------------------------------
- itkBooleanMacro(Verbose);
- itkSetMacro( Verbose, bool);
- itkGetConstReferenceMacro( Verbose, bool);
- itkBooleanMacro(FullyConnected);
- itkSetMacro( FullyConnected, bool);
- itkGetConstReferenceMacro( FullyConnected, bool);
- itkSetMacro( Lower, InputPixelType);
- itkGetConstMacro( Lower, InputPixelType);
- itkSetMacro( Upper, InputPixelType);
- itkGetConstMacro( Upper, InputPixelType);
- itkSetMacro( Inside, InternalPixelType);
- itkGetConstMacro( Inside, InternalPixelType);
- itkSetMacro( Outside, InternalPixelType);
- itkGetConstMacro( Outside, InternalPixelType);
- itkSetMacro( ErosionPaddingValue, OutputPixelType);
- itkGetConstMacro( ErosionPaddingValue, OutputPixelType);
- void SetRadius ( const SizeType& s){ m_Radius=s; this->Modified();}
- SizeType GetRadius(void){return m_Radius;}
- itkSetMacro( NumberOfNewLabels, unsigned int);
- itkGetConstMacro( NumberOfNewLabels, unsigned int);
- itkSetMacro( MinimumObjectSize, unsigned int);
- itkGetConstMacro( MinimumObjectSize, unsigned int);
- itkSetMacro( MinimumNumberOfIterations, unsigned int);
- itkGetConstMacro( MinimumNumberOfIterations, unsigned int);
-
- protected:
-
- //----------------------------------------
- // Constructor & Destructor
- //----------------------------------------
- DecomposeThroughErosionImageFilter();
- ~DecomposeThroughErosionImageFilter() {};
-
- //----------------------------------------
- // Update
- //----------------------------------------
- // Generate Data
- void GenerateData(void);
- void AllocateOutput(){;}
-
- // // Threaded Generate Data
- // void BeforeThreadedGenerateData(void );
- // void ThreadedGenerateData(const OutputImageRegionType & outputRegionForThread, int threadId );
- // void AfterThreadedGenerateData(void );
- // // Override defaults
- // virtual void GenerateInputRequestedRegion();
- // virtual void GenerateOutputInformation (void);
- // virtual void EnlargeOutputRequestedRegion(DataObject *data);
- // void AllocateOutputs();
- //----------------------------------------
- // Data members
- //----------------------------------------
- bool m_Verbose;
- bool m_FullyConnected;
- InputPixelType m_Lower;
- InputPixelType m_Upper;
- OutputPixelType m_ErosionPaddingValue;
- InputPixelType m_Inside;
- InputPixelType m_Outside;
- SizeType m_Radius;
- unsigned int m_NumberOfNewLabels;
- unsigned int m_MinimumObjectSize;
- unsigned int m_MinimumNumberOfIterations;
-
- };
-
-
-} // end namespace clitk
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include "clitkDecomposeThroughErosionImageFilter.txx"
-#endif
-
-#endif // #define clitkDecomposeThroughErosionImageFilter_h
-
-
+++ /dev/null
-/*=========================================================================
- Program: vv http://www.creatis.insa-lyon.fr/rio/vv
-
- Authors belong to:
- - University of LYON http://www.universite-lyon.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
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the copyright notices for more information.
-
- It is distributed under dual licence
-
- - BSD See included LICENSE.txt file
- - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-===========================================================================**/
-#ifndef clitkDecomposeThroughErosionImageFilter_txx
-#define clitkDecomposeThroughErosionImageFilter_txx
-
-/* =================================================
- * @file clitkDecomposeThroughErosionImageFilter.txx
- * @author
- * @date
- *
- * @brief
- *
- ===================================================*/
-
-
-namespace clitk
-{
-
- //-------------------------------------------------------------------
- // Update with the number of dimensions
- //-------------------------------------------------------------------
- template<class InputImageType, class OutputImageType>
- DecomposeThroughErosionImageFilter<InputImageType, OutputImageType>::DecomposeThroughErosionImageFilter()
- {
- m_Verbose=false;
- m_Lower =1;
- m_Upper=1;
- m_Inside=1;
- m_Outside=0;
- m_ErosionPaddingValue=static_cast<OutputPixelType>(-1);
- for (unsigned int i=0; i<InputImageDimension; i++)
- m_Radius[i]=1;
- m_NumberOfNewLabels=1;
- m_FullyConnected=true;
- m_MinimumObjectSize=10;
- m_MinimumNumberOfIterations=1;
- }
-
-
- //-------------------------------------------------------------------
- // Update with the number of dimensions and the pixeltype
- //-------------------------------------------------------------------
- template<class InputImageType, class OutputImageType>
- void
- DecomposeThroughErosionImageFilter<InputImageType, OutputImageType>::GenerateData()
- {
-
- //---------------------------------
- // Typedefs
- //---------------------------------
-
- // Internal type
- typedef itk::Image<InternalPixelType, InputImageDimension> InternalImageType;
-
- // Filters used
- typedef itk::BinaryThresholdImageFilter<InputImageType, InternalImageType> InputBinaryThresholdImageFilter;
- typedef itk::BinaryBallStructuringElement<InputPixelType,InputImageDimension > KernelType;
- typedef itk::BinaryErodeImageFilter<InternalImageType, InternalImageType , KernelType> BinaryErodeImageFilterType;
- typedef itk::BinaryThresholdImageFilter<InternalImageType, InternalImageType> BinaryThresholdImageFilterType;
- typedef itk::StatisticsImageFilter<InternalImageType> StatisticsImageFilterType;
- typedef itk::ConnectedComponentImageFilter<InternalImageType, InternalImageType> ConnectFilterType;
- typedef itk::RelabelComponentImageFilter<InternalImageType, InternalImageType> RelabelImageFilterType;
- typedef clitk::SetBackgroundImageFilter<InternalImageType, InternalImageType, InternalImageType> SetBackgroundImageFilterType;
-
- //---------------------------------
- // Binarize input
- //---------------------------------
- typename InputBinaryThresholdImageFilter::Pointer inputBinarizer=InputBinaryThresholdImageFilter::New();
- inputBinarizer->SetInput(this->GetInput());
- inputBinarizer->SetLowerThreshold(m_Lower);
- inputBinarizer->SetUpperThreshold(m_Upper);
- inputBinarizer ->SetInsideValue(m_Inside);
- inputBinarizer ->SetOutsideValue(m_Outside);
- if(m_Verbose) std::cout<<"Binarizing the input..."<<std::endl;
- inputBinarizer->Update();
-
- //---------------------------------
- // Label the input
- //---------------------------------
- typename ConnectFilterType::Pointer inputConnectFilter=ConnectFilterType::New();
- inputConnectFilter->SetInput(inputBinarizer->GetOutput());
- inputConnectFilter->SetBackgroundValue(0);
- inputConnectFilter->SetFullyConnected(m_FullyConnected);
- if(m_Verbose) std::cout<<"Labelling the connected components..."<<std::endl;
- // inputConnectFilter->Update();
-
- //---------------------------------
- // Count the initial labels
- //---------------------------------
- typename StatisticsImageFilterType::Pointer inputStatisticsImageFilter=StatisticsImageFilterType::New();
- inputStatisticsImageFilter->SetInput(inputConnectFilter->GetOutput());
- if(m_Verbose) std::cout<<"Counting the initial labels..."<<std::endl;
- inputStatisticsImageFilter->Update();
- unsigned int initialNumberOfLabels= inputStatisticsImageFilter->GetMaximum();
- if(m_Verbose) std::cout<<"The input contained "<<initialNumberOfLabels<<" disctictive label(s)..."<<std::endl;
- if(m_Verbose) std::cout<<"Performing erosions till at least "<<initialNumberOfLabels+m_NumberOfNewLabels<<" distinctive labels are counted..."<<std::endl;
-
- //---------------------------------
- // Structuring element
- //---------------------------------
- KernelType structuringElement;
- structuringElement.SetRadius(m_Radius);
- structuringElement.CreateStructuringElement();
-
- //---------------------------------
- // Repeat while not decomposed
- //---------------------------------
- typename InternalImageType::Pointer current=inputBinarizer->GetOutput();
- typename InternalImageType::Pointer output=inputBinarizer->GetOutput();
- unsigned int iteration=0;
- unsigned int max =initialNumberOfLabels;
-
- while ( (iteration < m_MinimumNumberOfIterations) || ( (max< initialNumberOfLabels + m_NumberOfNewLabels ) && (iteration<100 ) ) )
- {
-
-
- if(m_Verbose) std::cout<<"Eroding image (iteration "<<iteration<<")..."<<std::endl;
-
- //---------------------------------
- // Erode
- //---------------------------------
- typename BinaryErodeImageFilterType::Pointer erosionFilter=BinaryErodeImageFilterType::New();
- erosionFilter->SetInput (current);
- erosionFilter->SetForegroundValue (1);
- erosionFilter->SetBackgroundValue (-1);
- erosionFilter->SetBoundaryToForeground(false);
- erosionFilter->SetKernel(structuringElement);
- erosionFilter->Update();
- current=erosionFilter->GetOutput();
-
- //---------------------------------
- // Binarize (remove -1)
- //---------------------------------
- typename BinaryThresholdImageFilterType::Pointer binarizer=BinaryThresholdImageFilterType::New();
- binarizer->SetInput(erosionFilter->GetOutput());
- binarizer->SetLowerThreshold(1);
- binarizer->SetUpperThreshold(1);
- binarizer ->SetInsideValue(1);
- binarizer ->SetOutsideValue(0);
- if(m_Verbose) std::cout<<"Binarizing the eroded image..."<<std::endl;
- //binarizer->Update();
-
-
- //---------------------------------
- // ReLabel the connected components
- //---------------------------------
- typename ConnectFilterType::Pointer connectFilter=ConnectFilterType::New();
- connectFilter->SetInput(binarizer->GetOutput());
- connectFilter->SetBackgroundValue(0);
- connectFilter->SetFullyConnected(m_FullyConnected);
- if(m_Verbose) std::cout<<"Labelling the connected components..."<<std::endl;
- //connectFilter->Update();
-
- //---------------------------------
- // Sort
- //---------------------------------
- typename RelabelImageFilterType::Pointer relabelFilter=RelabelImageFilterType::New();
- relabelFilter->SetInput(connectFilter->GetOutput());
- relabelFilter->SetMinimumObjectSize(m_MinimumObjectSize);
- //relabelFilter->Update();
-
-
- //---------------------------------
- // Count the labels
- //---------------------------------
- typename StatisticsImageFilterType::Pointer statisticsImageFilter=StatisticsImageFilterType::New();
- statisticsImageFilter->SetInput(relabelFilter->GetOutput());
- statisticsImageFilter->Update();
- max= statisticsImageFilter->GetMaximum();
- if(m_Verbose) std::cout<<"Counted "<<max<<" label (s) larger then "<<m_MinimumObjectSize<<" voxels..."<<std::endl;
- output=statisticsImageFilter->GetOutput();
-
- // Next iteration
- iteration++;
- }
-
-
- //---------------------------------
- // Binarize current (remove -1)
- //---------------------------------
- typename BinaryThresholdImageFilterType::Pointer binarizer=BinaryThresholdImageFilterType::New();
- binarizer->SetInput(current);
- binarizer->SetLowerThreshold(1);
- binarizer->SetUpperThreshold(1);
- binarizer ->SetInsideValue(1);
- binarizer ->SetOutsideValue(0);
- if(m_Verbose) std::cout<<"Binarizing the eroded image..."<<std::endl;
- //binarizer->Update();
-
- //---------------------------------
- // ReLabel the connected components
- //---------------------------------
- typename ConnectFilterType::Pointer connectFilter=ConnectFilterType::New();
- connectFilter->SetInput(binarizer->GetOutput());
- connectFilter->SetBackgroundValue(0);
- connectFilter->SetFullyConnected(m_FullyConnected);
- if(m_Verbose) std::cout<<"Labelling the connected components..."<<std::endl;
- connectFilter->Update();
-
- //---------------------------------
- // Sort
- //---------------------------------
- typename RelabelImageFilterType::Pointer relabelFilter=RelabelImageFilterType::New();
- relabelFilter->SetInput(connectFilter->GetOutput());
- //relabelFilter->SetMinimumObjectSize(m_MinimumObjectSize); // Preserve all intensities
- //relabelFilter->Update();
-
- //---------------------------------
- // Set -1 to padding value
- //---------------------------------
- typename SetBackgroundImageFilterType::Pointer setBackgroundFilter =SetBackgroundImageFilterType::New();
- setBackgroundFilter->SetInput(relabelFilter->GetOutput());
- setBackgroundFilter->SetInput2(current);
- setBackgroundFilter->SetMaskValue(-1);
- setBackgroundFilter->SetOutsideValue(m_ErosionPaddingValue);
- if(m_Verbose) std::cout<<"Setting the eroded region to "<<m_ErosionPaddingValue<<"..."<<std::endl;
-
- //---------------------------------
- // Cast
- //---------------------------------
- typedef itk::CastImageFilter<InternalImageType, OutputImageType> CastImageFilterType;
- typename CastImageFilterType::Pointer caster= CastImageFilterType::New();
- caster->SetInput(setBackgroundFilter->GetOutput());
- caster->Update();
-
- //---------------------------------
- // SetOutput
- //---------------------------------
- this->SetNthOutput(0, caster->GetOutput());
- }
-
-
-}//end clitk
-
-#endif //#define clitkDecomposeThroughErosionImageFilter_txx
+++ /dev/null
-/*=========================================================================
- Program: vv http://www.creatis.insa-lyon.fr/rio/vv
-
- Authors belong to:
- - University of LYON http://www.universite-lyon.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
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the copyright notices for more information.
-
- It is distributed under dual licence
-
- - BSD See included LICENSE.txt file
- - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-===========================================================================*/
-
-#ifndef __clitkExtractImageFilter_h
-#define __clitkExtractImageFilter_h
-
-#include "itkImageToImageFilter.h"
-#include "itkSmartPointer.h"
-#include "itkExtractImageFilterRegionCopier.h"
-
-namespace clitk
-{
-
-template <class TInputImage, class TOutputImage>
-class ITK_EXPORT ExtractImageFilter:
- public itk::ImageToImageFilter<TInputImage,TOutputImage>
-{
-public:
- /** Standard class typedefs. */
- typedef ExtractImageFilter Self;
- typedef itk::ImageToImageFilter<TInputImage,TOutputImage> Superclass;
- typedef itk::SmartPointer<Self> Pointer;
- typedef itk::SmartPointer<const Self> ConstPointer;
-
- /** Method for creation through the object factory. */
- itkNewMacro(Self);
-
- /** Run-time type information (and related methods). */
- itkTypeMacro(ExtractImageFilter, ImageToImageFilter);
-
- /** Image type information. */
- typedef TInputImage InputImageType;
- typedef TOutputImage OutputImageType;
-
- /** Typedef to describe the output and input image region types. */
- typedef typename TOutputImage::RegionType OutputImageRegionType;
- typedef typename TInputImage::RegionType InputImageRegionType;
-
- /** Typedef to describe the type of pixel. */
- typedef typename TOutputImage::PixelType OutputImagePixelType;
- typedef typename TInputImage::PixelType InputImagePixelType;
-
- /** Typedef to describe the output and input image index and size types. */
- typedef typename TOutputImage::IndexType OutputImageIndexType;
- typedef typename TInputImage::IndexType InputImageIndexType;
- typedef typename TOutputImage::SizeType OutputImageSizeType;
- typedef typename TInputImage::SizeType InputImageSizeType;
-
- /** ImageDimension enumeration */
- itkStaticConstMacro(InputImageDimension, unsigned int,
- TInputImage::ImageDimension);
- itkStaticConstMacro(OutputImageDimension, unsigned int,
- TOutputImage::ImageDimension);
-
- typedef itk::ImageToImageFilterDetail::ExtractImageFilterRegionCopier<
- itkGetStaticConstMacro(InputImageDimension),
- itkGetStaticConstMacro(OutputImageDimension)> ExtractImageFilterRegionCopierType;
-
- void SetExtractionRegion(InputImageRegionType extractRegion);
- itkGetMacro(ExtractionRegion, InputImageRegionType);
-
-#ifdef ITK_USE_CONCEPT_CHECKING
- /** Begin concept checking */
- itkConceptMacro(InputCovertibleToOutputCheck,
- (itk::Concept::Convertible<InputImagePixelType, OutputImagePixelType>));
- /** End concept checking */
-#endif
-
-protected:
- ExtractImageFilter();
- ~ExtractImageFilter() {};
- void PrintSelf(std::ostream& os, itk::Indent indent) const;
-
-
- virtual void GenerateOutputInformation();
-
-
- virtual void CallCopyOutputRegionToInputRegion(InputImageRegionType &destRegion,
- const OutputImageRegionType &srcRegion);
-
-
- void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
- int threadId );
- InputImageRegionType m_ExtractionRegion;
- OutputImageRegionType m_OutputImageRegion;
-
-private:
- ExtractImageFilter(const Self&); //purposely not implemented
- void operator=(const Self&); //purposely not implemented
-
-};
-
-
-} // end namespace itk
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include "clitkExtractImageFilter.txx"
-#endif
-
-#endif
+++ /dev/null
-/*=========================================================================
- Program: vv http://www.creatis.insa-lyon.fr/rio/vv
-
- Authors belong to:
- - University of LYON http://www.universite-lyon.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
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the copyright notices for more information.
-
- It is distributed under dual licence
-
- - BSD See included LICENSE.txt file
- - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-===========================================================================*/
-
-#ifndef _clitkExtractImageFilter_txx
-#define _clitkExtractImageFilter_txx
-
-#include "clitkExtractImageFilter.h"
-#include "itkImageRegionIterator.h"
-#include "itkImageRegionConstIterator.h"
-#include "itkObjectFactory.h"
-#include "itkExtractImageFilterRegionCopier.h"
-#include "itkProgressReporter.h"
-
-
-namespace clitk
-{
-
-/**
- *
- */
-template <class TInputImage, class TOutputImage>
-ExtractImageFilter<TInputImage,TOutputImage>
-::ExtractImageFilter()
-{
-}
-
-
-/**
- *
- */
-template <class TInputImage, class TOutputImage>
-void
-ExtractImageFilter<TInputImage,TOutputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
- Superclass::PrintSelf(os,indent);
-
- os << indent << "ExtractionRegion: " << m_ExtractionRegion << std::endl;
- os << indent << "OutputImageRegion: " << m_OutputImageRegion << std::endl;
-}
-
-
-template<class TInputImage, class TOutputImage>
-void
-ExtractImageFilter<TInputImage,TOutputImage>
-::CallCopyOutputRegionToInputRegion(InputImageRegionType &destRegion,
- const OutputImageRegionType &srcRegion)
-{
- ExtractImageFilterRegionCopierType extractImageRegionCopier;
- extractImageRegionCopier(destRegion, srcRegion, m_ExtractionRegion);
-}
-
-
-template <class TInputImage, class TOutputImage>
-void
-ExtractImageFilter<TInputImage,TOutputImage>
-::SetExtractionRegion(InputImageRegionType extractRegion)
-{
- m_ExtractionRegion = extractRegion;
-
- unsigned int nonzeroSizeCount = 0;
- InputImageSizeType inputSize = extractRegion.GetSize();
- OutputImageSizeType outputSize;
- OutputImageIndexType outputIndex;
-
- /**
- * check to see if the number of non-zero entries in the extraction region
- * matches the number of dimensions in the output image.
- **/
- for (unsigned int i = 0; i < InputImageDimension; ++i)
- {
- if (inputSize[i])
- {
- outputSize[nonzeroSizeCount] = inputSize[i];
- outputIndex[nonzeroSizeCount] = extractRegion.GetIndex()[i];
- nonzeroSizeCount++;
- }
- }
-
- if (nonzeroSizeCount != OutputImageDimension)
- {
- itkExceptionMacro("Extraction Region not consistent with output image");
- }
-
- m_OutputImageRegion.SetSize(outputSize);
- m_OutputImageRegion.SetIndex(outputIndex);
- this->Modified();
-}
-
-
-
-/**
- * ExtractImageFilter can produce an image which is a different resolution
- * than its input image. As such, ExtractImageFilter needs to provide an
- * implementation for GenerateOutputInformation() in order to inform
- * the pipeline execution model. The original documentation of this
- * method is below.
- *
- * \sa ProcessObject::GenerateOutputInformaton()
- */
-template <class TInputImage, class TOutputImage>
-void
-ExtractImageFilter<TInputImage,TOutputImage>
-::GenerateOutputInformation()
-{
- // do not call the superclass' implementation of this method since
- // this filter allows the input and the output to be of different dimensions
-
- // get pointers to the input and output
- typename Superclass::OutputImagePointer outputPtr = this->GetOutput();
- typename Superclass::InputImageConstPointer inputPtr = this->GetInput();
-
- if ( !outputPtr || !inputPtr)
- {
- return;
- }
-
- // Set the output image size to the same value as the extraction region.
- outputPtr->SetLargestPossibleRegion( m_OutputImageRegion );
-
- // Set the output spacing and origin
- const itk::ImageBase<InputImageDimension> *phyData;
-
- phyData
- = dynamic_cast<const itk::ImageBase<InputImageDimension>*>(this->GetInput());
-
- if (phyData)
- {
- // Copy what we can from the image from spacing and origin of the input
- // This logic needs to be augmented with logic that select which
- // dimensions to copy
-
- unsigned int i;
- const typename InputImageType::SpacingType&
- inputSpacing = inputPtr->GetSpacing();
- const typename InputImageType::DirectionType&
- inputDirection = inputPtr->GetDirection();
- const typename InputImageType::PointType&
- inputOrigin = inputPtr->GetOrigin();
-
- typename OutputImageType::SpacingType outputSpacing;
- typename OutputImageType::DirectionType outputDirection;
- typename OutputImageType::PointType outputOrigin;
-
- if ( static_cast<unsigned int>(OutputImageDimension) >
- static_cast<unsigned int>(InputImageDimension ) )
- {
- // copy the input to the output and fill the rest of the
- // output with zeros.
- for (i=0; i < InputImageDimension; ++i)
- {
- outputSpacing[i] = inputSpacing[i];
- outputOrigin[i] = inputOrigin[i];
- for (unsigned int dim = 0; dim < InputImageDimension; ++dim)
- {
- outputDirection[i][dim] = inputDirection[i][dim];
- }
- }
- for (; i < OutputImageDimension; ++i)
- {
- outputSpacing[i] = 1.0;
- outputOrigin[i] = 0.0;
- for (unsigned int dim = 0; dim < InputImageDimension; ++dim)
- {
- outputDirection[i][dim] = 0.0;
- }
- outputDirection[i][i] = 1.0;
- }
- }
- else
- {
- // copy the non-collapsed part of the input spacing and origing to the output
- int nonZeroCount = 0;
- for (i=0; i < InputImageDimension; ++i)
- {
- if (m_ExtractionRegion.GetSize()[i])
- {
- outputSpacing[nonZeroCount] = inputSpacing[i];
- outputOrigin[nonZeroCount] = inputOrigin[i];
- int nonZeroCount2 = 0;
- for (unsigned int dim = 0; dim < InputImageDimension; ++dim)
- {
- if (m_ExtractionRegion.GetSize()[dim])
- {
- outputDirection[nonZeroCount][nonZeroCount2] =
- inputDirection[i][dim];
- ++nonZeroCount2;
- }
- }
- nonZeroCount++;
- }
- }
- }
-
- // set the spacing and origin
- outputPtr->SetSpacing( outputSpacing );
- outputPtr->SetDirection( outputDirection );
- outputPtr->SetOrigin( outputOrigin );
- outputPtr->SetNumberOfComponentsPerPixel(inputPtr->GetNumberOfComponentsPerPixel() );
- }
- else
- {
- // pointer could not be cast back down
- itkExceptionMacro(<< "itk::ExtractImageFilter::GenerateOutputInformation "
- << "cannot cast input to "
- << typeid(itk::ImageBase<InputImageDimension>*).name() );
- }
-}
-
-/**
- * ExtractImageFilter can be implemented as a multithreaded filter.
- * Therefore, this implementation provides a ThreadedGenerateData()
- * routine which is called for each processing thread. The output
- * image data is allocated automatically by the superclass prior to
- * calling ThreadedGenerateData(). ThreadedGenerateData can only
- * write to the portion of the output image specified by the
- * parameter "outputRegionForThread"
- *
- * \sa ImageToImageFilter::ThreadedGenerateData(),
- * ImageToImageFilter::GenerateData()
- */
-template <class TInputImage, class TOutputImage>
-void
-ExtractImageFilter<TInputImage,TOutputImage>
-::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
- int threadId)
-{
- itkDebugMacro(<<"Actually executing");
-
- // Get the input and output pointers
- typename Superclass::InputImageConstPointer inputPtr = this->GetInput();
- typename Superclass::OutputImagePointer outputPtr = this->GetOutput();
-
- // support progress methods/callbacks
- itk::ProgressReporter progress(this, threadId, outputRegionForThread.GetNumberOfPixels());
-
- // Define the portion of the input to walk for this thread
- InputImageRegionType inputRegionForThread;
- this->CallCopyOutputRegionToInputRegion(inputRegionForThread, outputRegionForThread);
-
- // Define the iterators.
- typedef itk::ImageRegionIterator<TOutputImage> OutputIterator;
- typedef itk::ImageRegionConstIterator<TInputImage> InputIterator;
-
- OutputIterator outIt(outputPtr, outputRegionForThread);
- InputIterator inIt(inputPtr, inputRegionForThread);
-
- // walk the output region, and sample the input image
- while( !outIt.IsAtEnd() )
- {
- // copy the input pixel to the output
- outIt.Set( static_cast<OutputImagePixelType>(inIt.Get()));
- ++outIt;
- ++inIt;
- progress.CompletedPixel();
- }
-}
-
-} // end namespace clitk
-
-#endif
+++ /dev/null
-/*=========================================================================
- Program: vv http://www.creatis.insa-lyon.fr/rio/vv
-
- Authors belong to:
- - University of LYON http://www.universite-lyon.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
- the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
- PURPOSE. See the copyright notices for more information.
-
- It is distributed under dual licence
-
- - BSD See included LICENSE.txt file
- - CeCILL-B http://www.cecill.info/licences/Licence_CeCILL-B_V1-en.html
-===========================================================================**/
-#ifndef clitkReconstructThroughDilationImageFilter_h
-#define clitkReconstructThroughDilationImageFilter_h
-
-/* =================================================
- * @file clitkReconstructThroughDilationImageFilter.h
- * @author
- * @date
- *
- * @brief
- *
- ===================================================*/
-
-
-// clitk include
-#include "clitkIO.h"
-#include "clitkCommon.h"
-#include "clitkConditionalBinaryDilateImageFilter.h"
-
-//itk include
-#include "itkImageToImageFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "itkConnectedComponentImageFilter.h"
-#include "itkStatisticsImageFilter.h"
-#include "itkCastImageFilter.h"
-#include "itkDifferenceImageFilter.h"
-#include "itkThresholdImageFilter.h"
-
-namespace clitk
-{
-
- template <class InputImageType, class OutputImageType>
- class ITK_EXPORT ReconstructThroughDilationImageFilter :
- public itk::ImageToImageFilter<InputImageType, OutputImageType>
- {
- public:
- //----------------------------------------
- // ITK
- //----------------------------------------
- typedef ReconstructThroughDilationImageFilter Self;
- typedef itk::ImageToImageFilter<InputImageType, OutputImageType> Superclass;
- typedef itk::SmartPointer<Self> Pointer;
- typedef itk::SmartPointer<const Self> ConstPointer;
-
- // Method for creation through the object factory
- itkNewMacro(Self);
-
- // Run-time type information (and related methods)
- itkTypeMacro( ReconstructThroughDilationImageFilter, ImageToImageFilter );
-
- /** Dimension of the domain space. */
- itkStaticConstMacro(InputImageDimension, unsigned int, Superclass::InputImageDimension);
- itkStaticConstMacro(OutputImageDimension, unsigned int, Superclass::OutputImageDimension);
-
- //----------------------------------------
- // Typedefs
- //----------------------------------------
- typedef typename OutputImageType::RegionType OutputImageRegionType;
- typedef int InternalPixelType;
- typedef typename InputImageType::PixelType InputPixelType;
- typedef typename OutputImageType::PixelType OutputPixelType;
- typedef typename InputImageType::SizeType SizeType;
-
- //----------------------------------------
- // Set & Get
- //----------------------------------------
- itkBooleanMacro(Verbose);
- itkSetMacro( Verbose, bool);
- itkGetConstReferenceMacro( Verbose, bool);
- void SetRadius ( const SizeType& s){ m_Radius=s; this->Modified();}
- SizeType GetRadius(void){return m_Radius;}
- itkSetMacro( ErosionPaddingValue, OutputPixelType);
- itkGetConstMacro( ErosionPaddingValue, OutputPixelType)
- itkSetMacro( MaximumNumberOfLabels, unsigned int);
- itkGetConstMacro( MaximumNumberOfLabels, unsigned int);
- itkSetMacro( BackgroundValue, InternalPixelType);
- itkGetConstMacro( BackgroundValue, InternalPixelType);
- itkSetMacro( ForegroundValue, InternalPixelType);
- itkGetConstMacro( ForegroundValue, InternalPixelType);
-
- protected:
-
- //----------------------------------------
- // Constructor & Destructor
- //----------------------------------------
- ReconstructThroughDilationImageFilter();
- ~ReconstructThroughDilationImageFilter() {};
-
- //----------------------------------------
- // Update
- //----------------------------------------
- // Generate Data
- void GenerateData(void);
-
- // // Threaded Generate Data
- // void BeforeThreadedGenerateData(void );
- // void ThreadedGenerateData(const OutputImageRegionType & outputRegionForThread, int threadId );
- // void AfterThreadedGenerateData(void );
- // // Override defaults
- // virtual void GenerateInputRequestedRegion();
- // virtual void GenerateOutputInformation (void);
- // virtual void EnlargeOutputRequestedRegion(DataObject *data);
- // void AllocateOutputs();
- //----------------------------------------
- // Data members
- //----------------------------------------
- bool m_Verbose;
- InternalPixelType m_BackgroundValue;
- InternalPixelType m_ForegroundValue;
- unsigned int m_MaximumNumberOfLabels;
- OutputPixelType m_ErosionPaddingValue;
- SizeType m_Radius;
-
- };
-
-
-} // end namespace clitk
-
-#ifndef ITK_MANUAL_INSTANTIATION
-#include "clitkReconstructThroughDilationImageFilter.txx"
-#endif
-
-#endif // #define clitkReconstructThroughDilationImageFilter_h
-
-