17 #ifndef __itkShapeKeepNObjectsLabelMapFilter_h
18 #define __itkShapeKeepNObjectsLabelMapFilter_h
41 template<
class TImage>
65 itkStaticConstMacro(ImageDimension,
unsigned int, TImage::ImageDimension);
73 #ifdef ITK_USE_CONCEPT_CHECKING
89 itkSetMacro( ReverseOrdering,
bool );
90 itkGetConstReferenceMacro( ReverseOrdering,
bool );
91 itkBooleanMacro( ReverseOrdering );
96 itkSetMacro( NumberOfObjects,
unsigned long );
97 itkGetConstReferenceMacro( NumberOfObjects,
unsigned long );
106 void SetAttribute(
const std::string & s )
108 this->SetAttribute( LabelObjectType::GetAttributeFromName( s ) );
118 template <
class TAttributeAccessor>
119 void TemplatedGenerateData(
const TAttributeAccessor & )
122 this->AllocateOutputs();
125 ImageType * output2 = this->GetOutput( 1 );
128 output2->SetBackgroundValue( output->GetBackgroundValue() );
131 typedef typename LabelObjectType::Pointer LabelObjectPointer;
132 typedef std::vector< LabelObjectPointer >
VectorType;
137 VectorType labelObjects;
138 labelObjects.reserve( labelObjectContainer.size() );
139 typename LabelObjectContainerType::const_iterator it = labelObjectContainer.begin();
140 while( it != labelObjectContainer.end() )
142 labelObjects.push_back( it->second );
148 if( m_NumberOfObjects < labelObjectContainer.size() )
150 typename VectorType::iterator end = labelObjects.begin() + m_NumberOfObjects;
151 if( m_ReverseOrdering )
154 std::nth_element( labelObjects.begin(), end, labelObjects.end(), comparator );
159 std::nth_element( labelObjects.begin(), end, labelObjects.end(), comparator );
161 progress.CompletedPixel();
164 for(
typename VectorType::const_iterator it2 = end;
165 it2 != labelObjects.end();
168 output2->AddLabelObject( *it2 );
169 output->RemoveLabelObject( *it2 );
170 progress.CompletedPixel();
175 void PrintSelf(std::ostream& os,
Indent indent)
const;
183 void operator=(
const Self&);
189 #ifndef ITK_MANUAL_INSTANTIATION