File: itkScalarToRGBColormapImageFilter.h

package info (click to toggle)
ants 1.9.2%2Bsvn680.dfsg-4
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 12,136 kB
  • sloc: cpp: 41,966; sh: 2,545; perl: 216; makefile: 43
file content (139 lines) | stat: -rw-r--r-- 5,027 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
/*=========================================================================

  Program:   Advanced Normalization Tools
  Module:    $RCSfile: itkScalarToRGBColormapImageFilter.h,v $
  Language:  C++
  Date:      $Date: 2009-05-15 12:51:13 $
  Version:   $Revision: 1.2 $

  Copyright (c) ConsortiumOfANTS. All rights reserved.
  See accompanying COPYING.txt or 
 http://sourceforge.net/projects/advants/files/ANTS/ANTSCopyright.txt for details.

     This software is distributed WITHOUT ANY WARRANTY; without even
     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
     PURPOSE.  See the above copyright notices for more information.

=========================================================================*/
#ifndef __itkScalarToRGBColormapImageFilter_h
#define __itkScalarToRGBColormapImageFilter_h

#include "itkImageToImageFilter.h"

#include "itkColormapFunctor.h"

namespace itk
{

/** \class ScalarToRGBColormapImageFilter
 * \brief Implements pixel-wise intensity->rgb mapping operation on one image.
 *
 * This class is parameterized over the type of the input image and
 * the type of the output image.
 *
 * ScalarToRGBColormapImageFilter
 *
 * \sa BinaryFunctorImageFilter TernaryFunctorImageFilter
 *
 * \ingroup   IntensityImageFilters     Multithreaded
 */
template <class TInputImage, class TOutputImage>
class ITK_EXPORT ScalarToRGBColormapImageFilter
: public ImageToImageFilter<TInputImage, TOutputImage>
{
public:
  /** Standard class typedefs. */
  typedef ScalarToRGBColormapImageFilter                 Self;
  typedef ImageToImageFilter<TInputImage, TOutputImage>  Superclass;
  typedef SmartPointer<Self>                             Pointer;
  typedef SmartPointer<const Self>                       ConstPointer;

  /** Method for creation through the object factory. */
  itkNewMacro( Self );

  /** Run-time type information (and related methods). */
  itkTypeMacro( ScalarToRGBColormapImageFilter, ImageToImageFilter );

  /** Some typedefs. */
  typedef TInputImage                                    InputImageType;
  typedef typename InputImageType::ConstPointer          InputImagePointer;
  typedef typename InputImageType::RegionType            InputImageRegionType;
  typedef typename InputImageType::PixelType             InputImagePixelType;
  typedef TOutputImage                                   OutputImageType;
  typedef typename OutputImageType::Pointer              OutputImagePointer;
  typedef typename OutputImageType::RegionType           OutputImageRegionType;
  typedef typename OutputImageType::PixelType            OutputImagePixelType;

  typedef Functor::ColormapFunctor<InputImagePixelType,
    OutputImagePixelType>                                ColormapType;

  /**
   * Set/Get the colormap object.
   */
  typename ColormapType::Pointer GetColormap() { return m_Colormap; }

  void SetColormap( ColormapType *colormap )
    {
    if ( m_Colormap != colormap )
      {
      m_Colormap = colormap;
      this->Modified();
      }
    }

  /**
   * Enum type that provides for an easy interface to existing colormaps.
   */
  typedef enum { Red, Green, Blue, Grey, Hot, Cool, Spring, Summer,
    Autumn, Winter, Copper, Jet, HSV, OverUnder } ColormapEnumType;

  void SetColormap( ColormapEnumType );

  /**
   * Set/Get UseInputImageExtremaForScaling.  If 'true', the colormap uses the
   * min and max values from the image to scale appropriately.  Otherwise,
   * these values can be set in the colormap manually.
   */
  itkSetMacro( UseInputImageExtremaForScaling, bool );
  itkGetConstMacro( UseInputImageExtremaForScaling, bool );
  itkBooleanMacro( UseInputImageExtremaForScaling );

protected:
  ScalarToRGBColormapImageFilter();
  virtual ~ScalarToRGBColormapImageFilter() {};

  void PrintSelf( std::ostream& os, Indent indent ) const;

  /** ScalarToRGBColormapImageFilter
   * can be implemented as a multithreaded filter.
   * Therefore, this implementation provides a ThreadedGenerateData() routine
   * which is called for each processing thread. The output image data is
   * allocated automatically by the superclass prior to calling
   * ThreadedGenerateData().  ThreadedGenerateData can only write to the
   * portion of the output image specified by the parameter
   * "outputRegionForThread"
   *
   * \sa ImageToImageFilter::ThreadedGenerateData(),
   *     ImageToImageFilter::GenerateData()  */
  void ThreadedGenerateData( const OutputImageRegionType& outputRegionForThread,
                             int threadId );

  /** Process to execute before entering the multithreaded section */
  void BeforeThreadedGenerateData();

private:
  ScalarToRGBColormapImageFilter(const Self&); //purposely not implemented
  void operator=(const Self&); //purposely not implemented

  typename ColormapType::Pointer     m_Colormap;

  bool                               m_UseInputImageExtremaForScaling;
};

} // end namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
#include "itkScalarToRGBColormapImageFilter.txx"
#endif

#endif