ITK  4.4.0
Insight Segmentation and Registration Toolkit
itkBinaryThresholdProjectionImageFilter.h
Go to the documentation of this file.
1 /*=========================================================================
2  *
3  * Copyright Insight Software Consortium
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0.txt
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  *=========================================================================*/
18 #ifndef __itkBinaryThresholdProjectionImageFilter_h
19 #define __itkBinaryThresholdProjectionImageFilter_h
20 
22 #include "itkConceptChecking.h"
23 
24 namespace itk
25 {
49 namespace Function
50 {
51 template< class TInputPixel, class TOutputPixel >
53 {
54 public:
57 
58  inline void Initialize()
59  {
60  m_IsForeground = false;
61  }
62 
63  inline void operator()(const TInputPixel & input)
64  {
65  if ( input >= m_ThresholdValue )
66  {
67  m_IsForeground = true;
68  }
69  }
70 
71  inline TOutputPixel GetValue()
72  {
73  if ( m_IsForeground )
74  {
75  return m_ForegroundValue;
76  }
77  else
78  {
79  return m_BackgroundValue;
80  }
81  }
82 
84 
85  TInputPixel m_ThresholdValue;
86  TOutputPixel m_ForegroundValue;
87  TOutputPixel m_BackgroundValue;
88 };
89 } // end namespace Function
90 
91 template< class TInputImage, class TOutputImage >
93  public ProjectionImageFilter< TInputImage, TOutputImage,
94  Function::BinaryThresholdAccumulator<
95  typename TInputImage::PixelType,
96  typename TOutputImage::PixelType > >
97 {
98 public:
100  typedef ProjectionImageFilter< TInputImage, TOutputImage,
102  typename TInputImage::PixelType,
103  typename TOutputImage::PixelType > > Superclass;
104 
107 
110 
112  itkNewMacro(Self);
113 
115  typedef TInputImage InputImageType;
116  typedef TOutputImage OutputImageType;
117 
119  typedef typename InputImageType::PixelType InputPixelType;
120  typedef typename OutputImageType::PixelType OutputPixelType;
121 
122  typedef typename Superclass::AccumulatorType AccumulatorType;
123 
126  itkSetMacro(ForegroundValue, OutputPixelType);
127  itkGetConstMacro(ForegroundValue, OutputPixelType);
129 
132  itkSetMacro(BackgroundValue, OutputPixelType);
133  itkGetConstMacro(BackgroundValue, OutputPixelType);
135 
138  itkSetMacro(ThresholdValue, InputPixelType);
139  itkGetConstMacro(ThresholdValue, InputPixelType);
141 
142 #ifdef ITK_USE_CONCEPT_CHECKING
143 
144  itkConceptMacro( InputPixelTypeGreaterThanComparable,
146  itkConceptMacro( InputHasNumericTraitsCheck,
148 
150 #endif
151 
152 protected:
154  {
155  m_ForegroundValue = NumericTraits< OutputPixelType >::max();
157  m_ThresholdValue = NumericTraits< InputPixelType >::Zero;
158  }
159 
161 
162  void PrintSelf(std::ostream & os, Indent indent) const
163  {
164  Superclass::PrintSelf(os, indent);
165 
167  InputPixelPrintType;
168 
169  os << indent << "ForegroundValue: "
170  << static_cast< InputPixelPrintType >( m_ForegroundValue )
171  << std::endl;
172 
174  OutputPixelPrintType;
175 
176  os << indent << "BackgroundValue: "
177  << static_cast< OutputPixelPrintType >( m_BackgroundValue )
178  << std::endl;
179 
180  os << indent << "ThresholdValue: "
181  << static_cast< InputPixelPrintType >( m_ThresholdValue )
182  << std::endl;
183  }
184 
185  virtual AccumulatorType NewAccumulator(SizeValueType size) const
186  {
187  AccumulatorType accumulator(size);
188 
189  accumulator.m_ForegroundValue = m_ForegroundValue;
190  accumulator.m_BackgroundValue = m_BackgroundValue;
191  accumulator.m_ThresholdValue = m_ThresholdValue;
192  return accumulator;
193  }
194 
197 
200 
203 
204 private:
205  //purposely not implemented
207  void operator=(const Self &);
208 }; // end BinaryThresholdProjectionImageFilter
209 } //end namespace itk
210 
211 #endif
212