forked from InsightSoftwareConsortium/ITK
-
Notifications
You must be signed in to change notification settings - Fork 0
/
itkRegionGrowImageFilter.h
149 lines (122 loc) · 5.63 KB
/
itkRegionGrowImageFilter.h
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
140
141
142
143
144
145
146
147
148
149
/*=========================================================================
Program: Insight Segmentation & Registration Toolkit
Module: itkRegionGrowImageFilter.h
Language: C++
Date: $Date$
Version: $Revision$
Copyright (c) Insight Software Consortium. All rights reserved.
See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm 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 _itkRegionGrowImageFilter_h
#define _itkRegionGrowImageFilter_h
#include "itkObject.h"
#include "itkImageToImageFilter.h"
namespace itk
{
/** \class RegionGrowImageFilter
* \brief Base class for RegionGrowImageFilter object
*
* itkRegionGrowImageFilter is the base class for the
* RegionGrowImageFilter objects. It provides
* the basic function definitons that are inherent to a
* RegionGrowImageFilter objects.
* It is templated over the type of input and output image.
*
* This object defines the interface for those algorithm that perform
* feature/object segmentation by merging regions (parts of the image) that
* are similar in nature based on some metric. As a result parts of the image
* which belong to the same object gets merged and the region grows.
*
* As an example regarding using this class to implementation of advanced
* region growing algorithm, itkRegionGrowImageFilterKLM class has been
* derived from this class. The virtual function ApplyRegionGrowImageFilter()
* provides the interface to the outside world to extend/enhance the scope of
* the current algorithm or write other region growing algorithms. The
* function MergeRegions is interface for the operation that merges two
* regions.
*
* The local variable GridSize is used to define
* the initial small regions that the image is fragmented (atomic
* regions) into. For an 12 x 12 input image, GridSize set equal
* to [3, 3] will result in 16 initial regions. The default values are
* set equal to 2.
* The user can sets the number of desired regions via the m_MaxNumRegions
* parameter and the algorithm tries to perform region merging until there
* are only m_MaxNumRegions. If m_MaxNumRegions is more than the number of
* initial blocks, no region merging occurs.
*
* These blocks are important as the labels associated with these blocks keep
* changing during the region growing process and at the end, while generating
* the results, each of these atomic blocks are revisited and the blocks
* with same labels are considered to belong to the same region.
*
* This object supports data handling of multiband images. The object
* accepts images in vector format, where each pixel is a vector and each
* element of the vector corresponds to an entry from 1 particular band of
* a multiband dataset. The input to this object is assumed to be a multiband
* vector image, and the output is defined by specific algorithm
* implementation. The second template parameter is used to generate the
* the output image and can be modified according the algorithm
* specific output type.
*
* We expect the user to provide the input to the routine in vector format.
* A single band image is treated as a vector image with a single element
* for every vector.
*
* \ingroup RegionGrowingSegmentation
*/
template <class TInputImage, class TOutputImage>
class ITK_EXPORT RegionGrowImageFilter :
public ImageToImageFilter<TInputImage,TOutputImage>
{
public:
/** Standard class typedefs. */
typedef RegionGrowImageFilter Self;
typedef Object 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(RegionGrowImageFilter,Object);
/** Type definition for the input image. */
typedef TInputImage InputImageType;
typedef typename TInputImage::Pointer InputImagePointer;
typedef typename TInputImage::ConstPointer InputImageConstPointer;
/** Type definition for the input image pixel type. */
typedef typename TInputImage::PixelType InputImagePixelType;
/** Type definition for the output image. */
typedef TOutputImage OutputImageType;
typedef typename TOutputImage::Pointer OutputImagePointer;
/** Type definition for the input image pixel type. */
typedef typename TOutputImage::PixelType OutputImagePixelType;
/** Type definition for the initial grid. */
typedef typename TInputImage::SizeType GridSizeType;
/** Set/Get the initial grid. */
itkSetMacro(GridSize, GridSizeType);
itkGetConstReferenceMacro(GridSize, GridSizeType);
/** Set/Get the number of regions desired. */
itkSetMacro(MaximumNumberOfRegions, unsigned int);
itkGetConstReferenceMacro(MaximumNumberOfRegions, unsigned int);
/** Define a virtual RegionGrowImageFilter function. */
virtual void ApplyRegionGrowImageFilter(){};
/** Merge two regions. */
virtual void MergeRegions(){};
protected:
RegionGrowImageFilter();
~RegionGrowImageFilter();
void PrintSelf(std::ostream& os, Indent indent) const;
private:
RegionGrowImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
unsigned int m_MaximumNumberOfRegions;
GridSizeType m_GridSize;
}; // class RegionGrowImageFilter
} // namespace itk
#ifndef ITK_MANUAL_INSTANTIATION
#include "itkRegionGrowImageFilter.txx"
#endif
#endif