File: itkImageDuplicator.h

package info (click to toggle)
insighttoolkit5 5.4.3-5
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 704,384 kB
  • sloc: cpp: 783,592; ansic: 628,724; xml: 44,704; fortran: 34,250; python: 22,874; sh: 4,078; pascal: 2,636; lisp: 2,158; makefile: 464; yacc: 328; asm: 205; perl: 203; lex: 146; tcl: 132; javascript: 98; csh: 81
file content (134 lines) | stat: -rw-r--r-- 4,113 bytes parent folder | download
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
/*=========================================================================
 *
 *  Copyright NumFOCUS
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *         https://www.apache.org/licenses/LICENSE-2.0.txt
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 *=========================================================================*/
#ifndef itkImageDuplicator_h
#define itkImageDuplicator_h

#include "itkObject.h"
#include "itkImage.h"

namespace itk
{
/** \class ImageDuplicator
 * \brief A helper class which creates an image which is perfect copy of the input image.
 *
 * This class is NOT a filter. Although it has an API similar to a filter, this class
 * is not intended to be used in a pipeline. Instead, the typical use will be like
 * it is illustrated in the following code:
 *
   \code
       medianFilter->Update();
       ImageType::Pointer image = medianFilter->GetOutput();
       using DuplicatorType = itk::ImageDuplicator< ImageType >;
       auto duplicator = DuplicatorType::New();
       duplicator->SetInputImage(image);
       duplicator->Update();
       ImageType::Pointer clonedImage = duplicator->GetOutput();
   \endcode
 *
 * Note that the Update() method must be called explicitly in the filter
 * that provides the input to the ImageDuplicator object. This is needed
 * because the ImageDuplicator is not a pipeline filter.
 *
 * \ingroup ITKCommon
 *
 * \sphinx
 * \sphinxexample{Core/Common/DuplicateAnImage,Duplicate An Image}
 * \endsphinx
 */
template <typename TInputImage>
class ITK_TEMPLATE_EXPORT ImageDuplicator : public Object
{
public:
  ITK_DISALLOW_COPY_AND_MOVE(ImageDuplicator);

  /** Standard class type aliases. */
  using Self = ImageDuplicator;
  using Superclass = Object;
  using Pointer = SmartPointer<Self>;
  using ConstPointer = SmartPointer<const Self>;

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

  /** \see LightObject::GetNameOfClass() */
  itkOverrideGetNameOfClassMacro(ImageDuplicator);

  /** Type definitions for the input image. */
  using ImageType = TInputImage;
  using ImagePointer = typename TInputImage::Pointer;
  using ImageConstPointer = typename TInputImage::ConstPointer;
  using PixelType = typename TInputImage::PixelType;
  using IndexType = typename TInputImage::IndexType;

  static constexpr unsigned int ImageDimension = ImageType::ImageDimension;

  itkSetConstObjectMacro(InputImage, ImageType);

  /**
   * Provide an interface to match that
   * of other ProcessObjects
   * for this source generation object
   * by returning a non-const pointer
   * for the generated Object.
   */
  // NOTE:  The m_DuplicateImage is only
  //       exposed via the Source generation interface
  //       by the GetOutput() method that mimics
  //       a process object.
  virtual const ImageType *
  GetOutput() const
  {
    return this->m_DuplicateImage.GetPointer();
  }
  virtual ImageType *
  GetOutput()
  {
    return this->m_DuplicateImage.GetPointer();
  }

#if !defined(ITK_LEGACY_REMOVE)
  // This interface was exposed in ITKv4 when the itkGetModifiableObjectMacro was used
  virtual ImageType *
  GetModifiableOutput()
  {
    return this->m_DuplicateImage.GetPointer();
  }
#endif

  /** Compute of the input image. */
  void
  Update();

protected:
  ImageDuplicator() = default;
  ~ImageDuplicator() override = default;
  void
  PrintSelf(std::ostream & os, Indent indent) const override;

private:
  ImageConstPointer m_InputImage{};
  ImagePointer      m_DuplicateImage{};
  ModifiedTimeType  m_InternalImageTime{};
};
} // end namespace itk

#ifndef ITK_MANUAL_INSTANTIATION
#  include "itkImageDuplicator.hxx"
#endif

#endif /* itkImageDuplicator_h */