22 #ifndef otbReciprocalBarnesDecompImageFilter_h 23 #define otbReciprocalBarnesDecompImageFilter_h 26 #include "vnl/algo/vnl_complex_eigensystem.h" 45 template <
class TInput,
class TOutput>
56 inline void operator()(TOutput& result,
const TInput& Covariance)
const 59 VNLMatrixType qi(3, 1);
62 VNLMatrixType cov(3, 3);
77 ComplexType norm = (qi.conjugate_transpose() * cov * qi)[0][0];
78 VNLMatrixType ki = cov * qi / std::sqrt(norm);
79 result[0] =
static_cast<OutputValueType
>(ki[0][0]);
80 result[1] =
static_cast<OutputValueType
>(ki[1][0]);
81 result[2] =
static_cast<OutputValueType
>(ki[2][0]);
87 norm = (qi.conjugate_transpose() * cov * qi)[0][0];
88 ki = cov * qi / std::sqrt(norm);
89 result[3] =
static_cast<OutputValueType
>(ki[0][0]);
90 result[4] =
static_cast<OutputValueType
>(ki[1][0]);
91 result[5] =
static_cast<OutputValueType
>(ki[2][0]);
97 norm = (qi.conjugate_transpose() * cov * qi)[0][0];
98 ki = cov * qi / std::sqrt(norm);
99 result[6] =
static_cast<OutputValueType
>(ki[0][0]);
100 result[7] =
static_cast<OutputValueType
>(ki[1][0]);
101 result[8] =
static_cast<OutputValueType
>(ki[2][0]);
127 template <
typename TInputImage,
typename TOutputImage>
vnl_matrix< ComplexType > VNLMatrixType
constexpr vcl_size_t OutputSize(...) const
std::vector< double > VectorType
static constexpr double m_Epsilon
std::complex< double > ComplexType
void operator()(TOutput &result, const TInput &Covariance) const
The "otb" namespace contains all Orfeo Toolbox (OTB) classes.
A generic functor filter templated by its functor.
vnl_vector< ComplexType > VNLVectorType
TOutput::ValueType OutputValueType
vnl_vector< double > VNLDoubleVectorType