ITK  4.3.0
Insight Segmentation and Registration Toolkit
itkLabelOverlayFunctor.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 __itkLabelOverlayFunctor_h
19 #define __itkLabelOverlayFunctor_h
20 
21 #include "itkLabelToRGBFunctor.h"
22 
23 namespace itk
24 {
25 namespace Functor
26 {
46 template< class TInputPixel, class TLabel, class TRGBPixel >
48 {
49 public:
51  {
52  // provide some default value for external use (outside
53  // LabelOverlayFunctorImageFilter) Inside LabelOverlayFunctorImageFilter,
54  // the values are always initialized
56  }
57 
58  inline TRGBPixel operator()(const TInputPixel & p1, const TLabel & p2) const
59  {
60  TRGBPixel rgbPixel;
62 
63  if ( p2 == m_BackgroundValue )
64  {
65  // value is background
66  // return a gray pixel with the same intensity than the input pixel
67  typename TRGBPixel::ValueType p =
68  static_cast< typename TRGBPixel::ValueType >( p1 );
69  rgbPixel[0] = p;
70  rgbPixel[1] = p;
71  rgbPixel[2] = p;
72  return rgbPixel;
73  }
74 
75  // taint the input pixel with the colored one returned by
76  // the color functor.
77  TRGBPixel opaque = m_RGBFunctor(p2);
78  // the following has been unrolled due to a bug with apple's
79  // llvm-gcc-4.2 build 5658
80  const double p1_blend= p1 * ( 1.0 - m_Opacity );
81  rgbPixel[0] = static_cast< typename TRGBPixel::ValueType >( opaque[0] * m_Opacity + p1_blend );
82  rgbPixel[1] = static_cast< typename TRGBPixel::ValueType >( opaque[1] * m_Opacity + p1_blend );
83  rgbPixel[2] = static_cast< typename TRGBPixel::ValueType >( opaque[2] * m_Opacity + p1_blend );
84 
85  return rgbPixel;
86  }
87 
88  bool operator!=(const LabelOverlayFunctor & l) const
89  {
90  bool value = l.m_Opacity != m_Opacity
92 
93  return value;
94  }
95 
97 
98  void SetOpacity(double opacity)
99  {
100  m_Opacity = opacity;
101  }
102 
103  void SetBackgroundValue(TLabel v)
104  {
105  m_BackgroundValue = v;
106  m_RGBFunctor.SetBackgroundValue(v);
107  }
108 
109  void ResetColors()
110  {
111  m_RGBFunctor.ResetColors();
112  }
113 
114  unsigned int GetNumberOfColors() const
115  {
116  return m_RGBFunctor.GetNumberOfColors();
117  }
118 
120  typedef typename TRGBPixel::ComponentType ComponentType;
121 
123  {
124  m_RGBFunctor.AddColor(r, g, b);
125  }
126 
127 protected:
128 
129 private:
130  double m_Opacity;
132 
134 };
135 } // end namespace functor
136 } // end namespace itk
137 
138 #endif
139