ITK  4.8.0
Insight Segmentation and Registration Toolkit
itkDivideOrZeroOutImageFilter.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 itkDivideOrZeroOutImageFilter_h
19 #define itkDivideOrZeroOutImageFilter_h
20 
22 #include "itkNumericTraits.h"
23 
24 namespace itk
25 {
26 
27 namespace Functor {
28 
29 template< typename TNumerator, typename TDenominator=TNumerator, typename TOutput=TNumerator >
31 {
32 public:
34  {
37  };
38 
40 
41  bool operator!=( const DivideOrZeroOut & other ) const
42  {
43  return !(*this == other);
44  }
45 
46  bool operator==( const DivideOrZeroOut & itkNotUsed(other) ) const
47  {
48  // Always return true for now. Do a comparison to m_Threshold if it is
49  // every made set-able.
50  return true;
51  }
52 
53  inline TOutput operator()( const TNumerator & n, const TDenominator & d )
54  {
55  if ( d < m_Threshold )
56  {
57  return m_Constant;
58  }
59  return static_cast< TOutput >( n ) / static_cast< TOutput >( d );
60  }
61  TDenominator m_Threshold;
62  TOutput m_Constant;
63 };
64 } // end namespace functor
65 
66 
77 template< typename TInputImage1,
78  typename TInputImage2=TInputImage1,
79  typename TOutputImage=TInputImage1 >
81  public BinaryFunctorImageFilter< TInputImage1, TInputImage2, TOutputImage,
82  Functor::DivideOrZeroOut<
83  typename TInputImage1::PixelType,
84  typename TInputImage2::PixelType,
85  typename TOutputImage::PixelType > >
86 {
87 public:
90  typedef BinaryFunctorImageFilter<TInputImage1, TInputImage2, TOutputImage,
92  typename TInputImage1::PixelType,
93  typename TInputImage2::PixelType,
94  typename TOutputImage::PixelType > > Superclass;
97 
98  typedef typename TInputImage1::PixelType NumeratorPixelType;
99  typedef typename TInputImage2::PixelType DenominatorPixelType;
100  typedef typename TOutputImage::PixelType OutputPixelType;
101 
103  itkNewMacro(Self);
104 
107 
109  void PrintSelf(std::ostream& os, Indent indent) const ITK_OVERRIDE
110  {
111  Superclass::PrintSelf(os, indent);
112  os << indent << "Threshold: " << GetThreshold() << std::endl;
113  }
115 
119  {
120  if ( threshold != this->GetFunctor().m_Threshold )
121  {
122  this->GetFunctor().m_Threshold = threshold;
123  this->Modified();
124  }
125  }
127  {
128  return this->GetFunctor().m_Threshold;
129  }
131 
134  void SetConstant( OutputPixelType constant )
135  {
136  if ( constant != this->GetFunctor().m_Constant )
137  {
138  this->GetFunctor().m_Constant = constant;
139  this->Modified();
140  }
141  }
143  {
144  return this->GetFunctor().m_Constant;
145  }
147 
148 protected:
151 
152 private:
153  DivideOrZeroOutImageFilter(const Self&); //purposely not implemented
154  void operator=(const Self&); //purposely not implemented
155 };
156 
157 } // end namespace itk
158 #endif
bool operator!=(const DivideOrZeroOut &other) const
void SetConstant(OutputPixelType constant)
void SetThreshold(DenominatorPixelType threshold)
static const double e
The base of the natural logarithm or Euler&#39;s number
Definition: itkMath.h:45
Base class for all process objects that output image data.
bool operator==(const DivideOrZeroOut &) const
void operator=(const Self &)
virtual void PrintSelf(std::ostream &os, Indent indent) const override
virtual void Modified() const
TOutput operator()(const TNumerator &n, const TDenominator &d)
BinaryFunctorImageFilter< TInputImage1, TInputImage2, TOutputImage, Functor::DivideOrZeroOut< typename TInputImage1::PixelType, typename TInputImage2::PixelType, typename TOutputImage::PixelType > > Superclass
Control indentation during Print() invocation.
Definition: itkIndent.h:49
DenominatorPixelType GetThreshold() const
void PrintSelf(std::ostream &os, Indent indent) const override
Implements pixel-wise generic operation of two images, or of an image and a constant.