13 #ifndef MITK_MINMAXLABELIMAGEFILTERWITHINDEX_H 14 #define MITK_MINMAXLABELIMAGEFILTERWITHINDEX_H 19 #include <itkImageToImageFilter.h> 20 #include <itkImageRegionConstIteratorWithIndex.h> 21 #include "itksys/hash_map.hxx" 26 template <
typename TInputImage,
typename TLabelImage>
32 typedef ImageToImageFilter< TInputImage, TInputImage >
Superclass;
42 typedef typename TInputImage::RegionType
RegionType;
43 typedef typename TInputImage::SizeType
SizeType;
46 typedef typename NumericTraits< PixelType >::RealType
RealType;
63 m_Min(
std::numeric_limits<PixelType>::
max()),
64 m_Max(
std::numeric_limits<PixelType>::
min())
68 typedef typename itksys::hash_map<LabelPixelType, LabelExtrema>
ExtremaMapType;
73 PixelType
GetMin(LabelPixelType label)
const 75 ExtremaMapTypeConstIterator it = m_LabelExtrema.find(label);
76 if (it == m_LabelExtrema.end())
81 return (*it).second.m_Min;
84 PixelType
GetMax(LabelPixelType label)
const 86 ExtremaMapTypeConstIterator it = m_LabelExtrema.find(label);
87 if (it == m_LabelExtrema.end())
92 return (*it).second.m_Max;
100 std::vector<LabelPixelType> labels;
101 for (
auto&& it:m_LabelExtrema)
103 labels.push_back(it.first);
110 ExtremaMapTypeConstIterator it = m_LabelExtrema.find(label);
111 if (it == m_LabelExtrema.end())
116 return (*it).second.m_MinIndex;
122 ExtremaMapTypeConstIterator it = m_LabelExtrema.find(label);
123 if (it == m_LabelExtrema.end())
128 return (*it).second.m_MaxIndex;
144 return m_GlobalMinIndex;
149 return m_GlobalMaxIndex;
156 this->SetNthInput( 1, const_cast< TLabelImage * >( input ) );
162 return itkDynamicCastInDebugMode< TLabelImage * >(
const_cast< DataObject *
>( this->ProcessObject::GetInput(1) ) );
169 outputRegionForThread,
170 ThreadIdType threadId)
override;
177 std::vector<ExtremaMapType> m_ThreadExtrema;
179 ExtremaMapType m_LabelExtrema;
180 PixelType m_GlobalMin;
181 PixelType m_GlobalMax;
182 IndexType m_GlobalMinIndex, m_GlobalMaxIndex;
186 #include "mitkMinMaxLabelmageFilterWithIndex.hxx" TLabelImage::PixelType LabelPixelType
IndexType GetGlobalMinIndex() const
const TLabelImage * GetLabelInput() const
itksys::hash_map< LabelPixelType, LabelExtrema > ExtremaMapType
NumericTraits< PixelType >::RealType RealType
std::vector< LabelPixelType > GetRelevantLabels() const
Returns a std::vector containing all labels for which min and max values (and indices) have been comp...
TLabelImage::IndexType LabelIndexType
PixelType GetGlobalMax() const
ExtremaMapType::value_type MapValueType
TInputImage::SizeType SizeType
TInputImage::PixelType PixelType
void BeforeThreadedGenerateData() override
ExtremaMapType::iterator ExtremaMapTypeIterator
TLabelImage::RegionType LabelRegionType
SmartPointer< Self > Pointer
void AfterThreadedGenerateData() override
void SetLabelInput(const TLabelImage *input)
IndexType GetGlobalMaxIndex() const
PixelType GetMax(LabelPixelType label) const
IndexType GetMaxIndex(LabelPixelType label) const
TLabelImage::SizeType LabelSizeType
MinMaxLabelImageFilterWithIndex Self
IndexType GetMinIndex(LabelPixelType label) const
SmartPointer< const Self > ConstPointer
TInputImage::IndexType IndexType
PixelType GetMin(LabelPixelType label) const
void ThreadedGenerateData(const RegionType &outputRegionForThread, ThreadIdType threadId) override
TInputImage::RegionType RegionType
The LabelExtrema class is just a container for global min/max values and their indices as well as all...
void AllocateOutputs() override
ImageToImageFilter< TInputImage, TInputImage > Superclass
PixelType GetGlobalMin() const
ExtremaMapType::const_iterator ExtremaMapTypeConstIterator