ITK
4.4.0
Insight Segmentation and Registration Toolkit
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
ITK
Modules
Segmentation
LevelSetsv4
include
itkLevelSetBase.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
19
#ifndef __itkLevelSetBase_h
20
#define __itkLevelSetBase_h
21
22
#include "
itkIntTypes.h
"
23
#include "
itkCovariantVector.h
"
24
#include "
itkMatrix.h
"
25
#include "
itkNumericTraits.h
"
26
#include "
itkDataObject.h
"
27
28
namespace
itk
29
{
40
template
<
class
TInput,
unsigned
int
VDimension,
typename
TOutput,
class
TDomain >
41
class
LevelSetBase
:
public
DataObject
42
{
43
public
:
44
typedef
LevelSetBase
Self
;
45
typedef
DataObject
Superclass
;
46
typedef
SmartPointer< Self >
Pointer
;
47
typedef
SmartPointer< const Self >
ConstPointer
;
48
50
itkTypeMacro (
LevelSetBase
,
DataObject
);
51
52
itkStaticConstMacro (
Dimension
,
unsigned
int
, VDimension );
53
54
typedef
TInput
InputType
;
55
typedef
TOutput
OutputType
;
56
typedef
typename
NumericTraits< OutputType >::RealType
OutputRealType
;
57
typedef
CovariantVector< OutputRealType, VDimension >
GradientType
;
58
typedef
Matrix< OutputRealType, VDimension, VDimension >
HessianType
;
59
60
typedef
TDomain
DomainType
;
61
63
typedef
IdentifierType
RegionType
;
64
66
virtual
OutputType
Evaluate
(
const
InputType
& iP )
const
= 0;
67
69
virtual
GradientType
EvaluateGradient
(
const
InputType
& iP )
const
= 0;
70
72
virtual
HessianType
EvaluateHessian
(
const
InputType
& iP )
const
= 0;
73
74
virtual
OutputRealType
EvaluateLaplacian
(
const
InputType
& iP )
const
= 0;
75
virtual
OutputRealType
EvaluateGradientNorm
(
const
InputType
& iP )
const
;
76
virtual
OutputRealType
EvaluateMeanCurvature
(
const
InputType
& iP )
const
= 0;
77
85
template
<
class
T >
86
class
DataType
87
{
88
public
:
89
DataType
(
const
std::string& iName ) :
90
m_Name
( iName ),
m_Computed
( false )
91
{}
92
DataType
(
const
DataType
& iData ) :
m_Name
( iData.
m_Name
),
93
m_Value
( iData.
m_Value
),
m_Computed
( iData.
m_Computed
)
94
{}
95
96
~DataType
() {}
97
98
std::string
m_Name
;
99
T
m_Value
;
100
bool
m_Computed
;
101
102
void
operator =
(
const
DataType
& iData )
103
{
104
this->
m_Name
= iData.
m_Name
;
105
this->
m_Value
= iData.
m_Value
;
106
this->
m_Computed
= iData.
m_Computed
;
107
}
108
109
private
:
110
DataType
();
111
};
112
117
struct
LevelSetDataType
118
{
119
LevelSetDataType
() :
Value
(
"Value"
),
Gradient
(
"Gradient"
),
120
Hessian
(
"Hessian"
),
Laplacian
(
"Laplacian"
),
121
GradientNorm
(
"GradientNorm"
),
MeanCurvature
(
"MeanCurvature"
),
122
ForwardGradient
(
"ForwardGradient"
),
BackwardGradient
(
"BackwardGradient"
)
123
{
124
Value
.
m_Value
=
NumericTraits< OutputType >::Zero
;
125
Gradient
.m_Value.Fill(
NumericTraits< OutputRealType >::Zero
);
126
Hessian
.m_Value.Fill(
NumericTraits< OutputRealType >::Zero
);
127
Laplacian
.
m_Value
=
NumericTraits< OutputRealType >::Zero
;
128
GradientNorm
.
m_Value
=
NumericTraits< OutputRealType >::Zero
;
129
MeanCurvature
.
m_Value
=
NumericTraits< OutputRealType >::Zero
;
130
ForwardGradient
.m_Value.Fill(
NumericTraits< OutputRealType >::Zero
);
131
BackwardGradient
.m_Value.Fill(
NumericTraits< OutputRealType >::Zero
);
132
}
134
135
LevelSetDataType
(
const
LevelSetDataType
& iData ) :
Value
( iData.
Value
),
136
Gradient
( iData.
Gradient
),
Hessian
( iData.
Hessian
),
137
Laplacian
( iData.
Laplacian
),
GradientNorm
( iData.
GradientNorm
),
138
MeanCurvature
( iData.
MeanCurvature
),
ForwardGradient
( iData.
ForwardGradient
),
139
BackwardGradient
( iData.
BackwardGradient
) {}
140
141
~LevelSetDataType
() {}
142
143
void
operator =
(
const
LevelSetDataType
& iData )
144
{
145
Value
= iData.
Value
;
146
Gradient
= iData.
Gradient
;
147
Hessian
= iData.
Hessian
;
148
Laplacian
= iData.
Laplacian
;
149
GradientNorm
= iData.
GradientNorm
;
150
MeanCurvature
= iData.
MeanCurvature
;
151
ForwardGradient
= iData.
ForwardGradient
;
152
BackwardGradient
= iData.
BackwardGradient
;
153
}
154
156
DataType< OutputType >
Value
;
157
DataType< GradientType >
Gradient
;
158
DataType< HessianType >
Hessian
;
159
DataType< OutputRealType >
Laplacian
;
160
DataType< OutputRealType >
GradientNorm
;
161
DataType< OutputRealType >
MeanCurvature
;
162
DataType< GradientType >
ForwardGradient
;
163
DataType< GradientType >
BackwardGradient
;
164
};
165
166
virtual
void
Evaluate
(
const
InputType
& iP,
LevelSetDataType
& ioData )
const
= 0;
167
virtual
void
EvaluateGradient
(
const
InputType
& iP,
LevelSetDataType
& ioData )
const
= 0;
168
virtual
void
EvaluateHessian
(
const
InputType
& iP,
LevelSetDataType
& ioData )
const
= 0;
169
virtual
void
EvaluateLaplacian
(
const
InputType
& iP,
LevelSetDataType
& ioData )
const
= 0;
170
virtual
void
EvaluateGradientNorm
(
const
InputType
& iP,
LevelSetDataType
& ioData )
const
;
171
virtual
void
EvaluateMeanCurvature
(
const
InputType
& iP,
LevelSetDataType
& ioData )
const
;
172
virtual
void
EvaluateForwardGradient
(
const
InputType
& iP,
LevelSetDataType
& ioData )
const
= 0;
173
virtual
void
EvaluateBackwardGradient
(
const
InputType
& iP,
LevelSetDataType
& ioData )
const
= 0;
174
176
virtual
bool
IsInside
(
const
InputType
& iP )
const
;
177
180
itkGetConstMacro(MaximumNumberOfRegions,
RegionType
);
181
183
virtual
void
Initialize
();
184
186
virtual
void
UpdateOutputInformation
();
187
188
virtual
void
SetRequestedRegionToLargestPossibleRegion
();
189
190
virtual
void
CopyInformation
(
const
DataObject
*data);
191
192
virtual
void
Graft
(
const
DataObject
*data);
193
194
virtual
bool
RequestedRegionIsOutsideOfTheBufferedRegion
();
195
196
virtual
bool
VerifyRequestedRegion
();
197
202
virtual
void
SetRequestedRegion
(
const
DataObject
*data);
203
205
virtual
void
SetRequestedRegion
(
const
RegionType
& region);
206
207
itkGetConstMacro(RequestedRegion,
RegionType
);
208
210
virtual
void
SetBufferedRegion
(
const
RegionType
& region);
211
212
itkGetConstMacro(BufferedRegion,
RegionType
);
213
214
protected
:
215
LevelSetBase
();
216
virtual
~LevelSetBase
() {}
217
218
// If the RegionType is ITK_UNSTRUCTURED_REGION, then the following
219
// variables represent the maximum number of region that the data
220
// object can be broken into, which region out of how many is
221
// currently in the buffered region, and the number of regions and
222
// the specific region requested for the update. Data objects that
223
// do not support any division of the data can simply leave the
224
// MaximumNumberOfRegions as 1. The RequestedNumberOfRegions and
225
// RequestedRegion are used to define the currently requested
226
// region. The LargestPossibleRegion is always requested region = 0
227
// and number of regions = 1;
228
RegionType
m_MaximumNumberOfRegions
;
229
RegionType
m_NumberOfRegions
;
230
RegionType
m_RequestedNumberOfRegions
;
231
RegionType
m_BufferedRegion
;
232
RegionType
m_RequestedRegion
;
233
234
private
:
235
LevelSetBase
(
const
Self
& );
// purposely left unimplemented
236
void
operator =
(
const
Self
& );
// purposely left unimplemented
237
238
};
239
}
240
241
#ifndef ITK_MANUAL_INSTANTIATION
242
#include "itkLevelSetBase.hxx"
243
#endif
244
245
#endif // __itkLevelSetBase_h
246
Generated on Mon May 13 2013 00:58:48 for ITK by
1.8.3.1