ITK
4.2.0
Insight Segmentation and Registration Toolkit
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
ITK
Modules
Core
Common
include
itkSymmetricEigenAnalysis.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 __itkSymmetricEigenAnalysis_h
19
#define __itkSymmetricEigenAnalysis_h
20
21
#include "
itkMacro.h
"
22
23
namespace
itk
24
{
60
template
<
typename
TMatrix,
typename
TVector,
typename
TEigenMatrix = TMatrix >
61
class
SymmetricEigenAnalysis
62
{
63
public
:
64
typedef
enum
65
{
66
OrderByValue
= 1,
67
OrderByMagnitude
,
68
DoNotOrder
69
}
70
EigenValueOrderType
;
71
72
SymmetricEigenAnalysis
():
73
m_Dimension
(0),
74
m_Order
(0),
75
m_OrderEigenValues
(
OrderByValue
) {}
76
77
SymmetricEigenAnalysis
(
const
unsigned
int
dimension):
78
m_Dimension
(dimension),
79
m_Order
(dimension),
80
m_OrderEigenValues
(
OrderByValue
) {}
81
82
~SymmetricEigenAnalysis
() {}
83
84
typedef
TMatrix
MatrixType
;
85
typedef
TEigenMatrix
EigenMatrixType
;
86
typedef
TVector
VectorType
;
87
101
unsigned
int
ComputeEigenValues
(
102
const
TMatrix & A,
103
TVector & EigenValues)
const
;
104
125
unsigned
int
ComputeEigenValuesAndVectors
(
126
const
TMatrix & A,
127
TVector & EigenValues,
128
TEigenMatrix & EigenVectors)
const
;
129
131
void
SetOrder
(
const
unsigned
int
n)
132
{
133
m_Order
= n;
134
}
135
139
unsigned
int
GetOrder
()
const
{
return
m_Order
; }
140
144
void
SetOrderEigenValues
(
const
bool
b)
145
{
146
if
( b ) {
m_OrderEigenValues
=
OrderByValue
; }
147
else
{
m_OrderEigenValues
=
DoNotOrder
; }
148
}
150
151
bool
GetOrderEigenValues
()
const
{
return
(
m_OrderEigenValues
==
OrderByValue
); }
152
156
void
SetOrderEigenMagnitudes
(
const
bool
b)
157
{
158
if
( b ) {
m_OrderEigenValues
=
OrderByMagnitude
; }
159
else
{
m_OrderEigenValues
=
DoNotOrder
; }
160
}
162
163
bool
GetOrderEigenMagnitudes
()
const
{
return
(
m_OrderEigenValues
==
OrderByMagnitude
); }
164
167
void
SetDimension
(
const
unsigned
int
n)
168
{
169
m_Dimension
= n;
170
if
(
m_Order
== 0 )
171
{
172
m_Order
=
m_Dimension
;
173
}
174
}
176
179
unsigned
int
GetDimension
()
const
{
return
m_Dimension
; }
180
private
:
181
unsigned
int
m_Dimension
;
182
unsigned
int
m_Order
;
183
EigenValueOrderType
m_OrderEigenValues
;
184
204
void
ReduceToTridiagonalMatrix
(
double
*inputMatrix,
VectorType
& d,
205
double
*
e
,
double
*e2)
const
;
206
228
void
ReduceToTridiagonalMatrixAndGetTransformation
(
229
double
*inputMatrix,
VectorType
& diagonalElements,
230
double
*subDiagonalElements,
double
*transformMatrix)
const
;
231
261
unsigned
int
ComputeEigenValuesUsingQL
(
262
VectorType
& d,
double
*
e
)
const
;
263
301
unsigned
int
ComputeEigenValuesAndVectorsUsingQL
(
302
VectorType
& d,
double
*
e
,
double
*z)
const
;
303
};
304
305
template
<
typename
TMatrix,
typename
TVector,
typename
TEigenMatrix >
306
std::ostream &
operator<<
(std::ostream & os,
307
const
SymmetricEigenAnalysis< TMatrix, TVector, TEigenMatrix >
& s)
308
{
309
os <<
"[ClassType: SymmetricEigenAnalysis]"
<< std::endl;
310
os <<
" Dimension : "
<< s.
GetDimension
() << std::endl;
311
os <<
" Order : "
<< s.
GetOrder
() << std::endl;
312
os <<
" OrderEigenValues: "
<< s.
GetOrderEigenValues
() << std::endl;
313
os <<
" OrderEigenMagnitudes: "
<< s.
GetOrderEigenMagnitudes
() << std::endl;
314
return
os;
315
}
316
}
// end namespace itk
317
318
#ifndef ITK_MANUAL_INSTANTIATION
319
#include "itkSymmetricEigenAnalysis.hxx"
320
#endif
321
322
#endif
323
Generated on Tue Jul 10 2012 23:45:34 for ITK by
1.8.1