ITK 6.0.0
Insight Toolkit
 
Loading...
Searching...
No Matches
itkEigenDecompositionSignConvention.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright NumFOCUS
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 * https://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 itkEigenDecompositionSignConvention_h
19#define itkEigenDecompositionSignConvention_h
20
21#include "vnl/vnl_matrix.h"
22#include <cmath>
23
24namespace itk::detail
25{
26
32template <typename T>
33void
35{
36 const unsigned int rows = V.rows();
37 for (unsigned int j = 0; j < V.cols(); ++j)
38 {
39 unsigned int pivot = 0;
40 for (unsigned int i = 1; i < rows; ++i)
41 {
42 if (std::abs(V(i, j)) > std::abs(V(pivot, j)))
43 {
44 pivot = i;
45 }
46 }
47 if (V(pivot, j) < T{ 0 })
48 {
49 V.scale_column(j, T{ -1 });
50 }
51 }
52}
53
54} // namespace itk::detail
55
56#endif // itkEigenDecompositionSignConvention_h
void CanonicalizeEigenvectorColumnSigns(vnl_matrix< T > &V)