17 #ifndef __itkBinaryShapeKeepNObjectsImageFilter_txx
18 #define __itkBinaryShapeKeepNObjectsImageFilter_txx
20 #include "itkBinaryShapeKeepNObjectsImageFilter.h"
26 template<
class TInputImage>
30 m_BackgroundValue = NumericTraits<OutputImagePixelType>::NonpositiveMin();
31 m_ForegroundValue = NumericTraits<OutputImagePixelType>::max();
32 m_FullyConnected =
false;
33 m_ReverseOrdering =
false;
34 m_Attribute = LabelObjectType::SIZE;
37 template<
class TInputImage>
43 Superclass::GenerateInputRequestedRegion();
46 InputImagePointer input =
const_cast<InputImageType *
>(this->GetInput());
49 input->SetRequestedRegion( input->GetLargestPossibleRegion() );
54 template<
class TInputImage>
60 ->SetRequestedRegion( this->GetOutput()->GetLargestPossibleRegion() );
64 template<
class TInputImage>
71 progress->SetMiniPipelineFilter(
this);
74 this->AllocateOutputs();
76 typename LabelizerType::Pointer labelizer = LabelizerType::New();
77 labelizer->SetInput( this->GetInput() );
78 labelizer->SetForegroundValue( m_ForegroundValue );
79 labelizer->SetBackgroundValue( m_BackgroundValue );
80 labelizer->SetFullyConnected( m_FullyConnected );
81 labelizer->SetNumberOfThreads( this->GetNumberOfThreads() );
82 progress->RegisterInternalFilter(labelizer, .3f);
84 typename LabelObjectValuatorType::Pointer valuator = LabelObjectValuatorType::New();
85 valuator->SetInput( labelizer->GetOutput() );
86 valuator->SetNumberOfThreads( this->GetNumberOfThreads() );
87 if( m_Attribute == LabelObjectType::PERIMETER || m_Attribute == LabelObjectType::ROUNDNESS )
89 valuator->SetComputePerimeter(
true );
91 if( m_Attribute == LabelObjectType::FERET_DIAMETER )
93 valuator->SetComputeFeretDiameter(
true );
95 progress->RegisterInternalFilter(valuator, .3f);
97 typename KeepNObjectsType::Pointer opening = KeepNObjectsType::New();
98 opening->SetInput( valuator->GetOutput() );
99 opening->SetNumberOfObjects( m_NumberOfObjects );
100 opening->SetReverseOrdering( m_ReverseOrdering );
101 opening->SetAttribute( m_Attribute );
102 opening->SetNumberOfThreads( this->GetNumberOfThreads() );
103 progress->RegisterInternalFilter(opening, .2f);
105 typename BinarizerType::Pointer binarizer = BinarizerType::New();
106 binarizer->SetInput( opening->GetOutput() );
107 binarizer->SetForegroundValue( m_ForegroundValue );
108 binarizer->SetBackgroundValue( m_BackgroundValue );
109 binarizer->SetBackgroundImage( this->GetInput() );
110 binarizer->SetNumberOfThreads( this->GetNumberOfThreads() );
111 progress->RegisterInternalFilter(binarizer, .2f);
113 binarizer->GraftOutput( this->GetOutput() );
115 this->GraftOutput( binarizer->GetOutput() );
119 template<
class TInputImage>
124 Superclass::PrintSelf(os, indent);
126 os << indent <<
"FullyConnected: " << m_FullyConnected << std::endl;
127 os << indent <<
"BackgroundValue: " <<
static_cast<typename NumericTraits<OutputImagePixelType>::PrintType
>(m_BackgroundValue) << std::endl;
128 os << indent <<
"ForegroundValue: " <<
static_cast<typename NumericTraits<OutputImagePixelType>::PrintType
>(m_ForegroundValue) << std::endl;
129 os << indent <<
"NumberOfObjects: " << m_NumberOfObjects << std::endl;
130 os << indent <<
"ReverseOrdering: " << m_ReverseOrdering << std::endl;
131 os << indent <<
"Attribute: " << LabelObjectType::GetNameFromAttribute(m_Attribute) <<
" (" << m_Attribute <<
")" << std::endl;