17 #ifndef __itkRelabelComponentImageFilter_txx
18 #define __itkRelabelComponentImageFilter_txx
23 #include "itkNumericTraits.h"
31 template<
class TInputImage,
class TOutputImage >
37 Superclass::GenerateInputRequestedRegion();
43 input->SetRequestedRegion( input->GetLargestPossibleRegion() );
48 template<
class TInputImage,
class TOutputImage >
59 typename MapType::iterator mapIt;
63 typename TInputImage::ConstPointer input = this->GetInput();
64 typename TOutputImage::Pointer output = this->GetOutput();
71 input->GetRequestedRegion().GetNumberOfPixels() +
72 output->GetRequestedRegion().GetNumberOfPixels());
76 float physicalPixelSize = 1.0;
77 for (i=0; i < TInputImage::ImageDimension; ++i)
79 physicalPixelSize *= input->GetSpacing()[i];
103 mapIt = sizeMap.find( inputValue );
104 if ( mapIt == sizeMap.end() )
108 sizeMap.insert( MapValueType( inputValue, initialSize ) );
113 (*mapIt).second.m_SizeInPixels++;
114 (*mapIt).second.m_SizeInPhysicalUnits += physicalPixelSize;
120 progress.CompletedPixel();
127 typedef std::vector<RelabelComponentObjectType>
VectorType;
128 VectorType sizeVector;
129 typename VectorType::iterator vit;
131 typedef std::map< LabelType, LabelType > RelabelMapType;
132 RelabelMapType relabelMap;
135 for (mapIt = sizeMap.begin(); mapIt != sizeMap.end(); ++mapIt)
137 sizeVector.push_back( (*mapIt).second );
145 m_NumberOfObjects = sizeVector.size();
146 m_OriginalNumberOfObjects = sizeVector.size();
147 m_SizeOfObjectsInPixels.clear();
148 m_SizeOfObjectsInPixels.resize(m_NumberOfObjects);
149 m_SizeOfObjectsInPhysicalUnits.clear();
150 m_SizeOfObjectsInPhysicalUnits.resize(m_NumberOfObjects);
151 int NumberOfObjectsRemoved = 0;
152 for (i=0, vit = sizeVector.begin(); vit != sizeVector.end(); ++vit, ++i)
157 if (m_MinimumObjectSize > 0 && (*vit).m_SizeInPixels < m_MinimumObjectSize)
160 NumberOfObjectsRemoved++;
170 m_SizeOfObjectsInPixels[i] = (*vit).m_SizeInPixels;
171 m_SizeOfObjectsInPhysicalUnits[i] = (*vit).m_SizeInPhysicalUnits;
177 m_NumberOfObjects -= NumberOfObjectsRemoved;
178 if (NumberOfObjectsRemoved > 0)
180 m_SizeOfObjectsInPixels.resize(m_NumberOfObjects);
181 m_SizeOfObjectsInPhysicalUnits.resize(m_NumberOfObjects);
189 this->AllocateOutputs();
196 output->GetRequestedRegion());
198 output->GetRequestedRegion());
211 oit.
Set( outputValue );
215 oit.
Set( inputValue );
221 progress.CompletedPixel();
226 template<
class TInputImage,
class TOutputImage >
231 Superclass::PrintSelf(os, indent);
233 os << indent <<
"NumberOfObjects: " << m_NumberOfObjects << std::endl;
234 os << indent <<
"OriginalNumberOfObjects: " << m_OriginalNumberOfObjects << std::endl;
235 os << indent <<
"NumberOfObjectsToPrint: "
236 << m_NumberOfObjectsToPrint << std::endl;
237 os << indent <<
"MinimumObjectSizez: " << m_MinimumObjectSize << std::endl;
239 std::vector<ObjectSizeType>::const_iterator it;
240 std::vector<float>::const_iterator fit;
244 LabelType numPrint = m_NumberOfObjectsToPrint;
245 if (numPrint > m_SizeOfObjectsInPixels.size())
247 numPrint = m_SizeOfObjectsInPixels.size();
251 for (i=0, it = m_SizeOfObjectsInPixels.begin(),
252 fit = m_SizeOfObjectsInPhysicalUnits.begin();
253 i < numPrint; ++it, ++fit, ++i)
255 os << indent <<
"Object #" << i+1 <<
": " << *it <<
" pixels, "
256 << *fit <<
" physical units" << std::endl;
258 if (numPrint < m_SizeOfObjectsInPixels.size())
260 os << indent <<
"..." << std::endl;