16 #include <eigen3/Eigen/src/SVD/JacobiSVD.h> 32 algorithmName = inputAlgorithmName;
36 Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic> endmemberMatrix, Eigen::VectorXf inputVector)
38 Eigen::VectorXf resultVector;
40 if (mitk::pa::LinearSpectralUnmixingFilter::AlgortihmType::HOUSEHOLDERQR == algorithmName)
41 resultVector = endmemberMatrix.householderQr().solve(inputVector);
43 else if (mitk::pa::LinearSpectralUnmixingFilter::AlgortihmType::LDLT == algorithmName)
45 Eigen::LLT<Eigen::MatrixXf> lltOfA(endmemberMatrix);
46 if (lltOfA.info() == Eigen::NumericalIssue)
48 mitkThrow() <<
"Possibly non semi-positive definitie endmembermatrix!";
51 resultVector = endmemberMatrix.ldlt().solve(inputVector);
54 else if (mitk::pa::LinearSpectralUnmixingFilter::AlgortihmType::LLT == algorithmName)
56 Eigen::LLT<Eigen::MatrixXf> lltOfA(endmemberMatrix);
57 if (lltOfA.info() == Eigen::NumericalIssue)
59 mitkThrow() <<
"Possibly non semi-positive definitie endmembermatrix!";
62 resultVector = endmemberMatrix.llt().solve(inputVector);
65 else if (mitk::pa::LinearSpectralUnmixingFilter::AlgortihmType::COLPIVHOUSEHOLDERQR == algorithmName)
66 resultVector = endmemberMatrix.colPivHouseholderQr().solve(inputVector);
68 else if (mitk::pa::LinearSpectralUnmixingFilter::AlgortihmType::JACOBISVD == algorithmName)
69 resultVector = endmemberMatrix.jacobiSvd(Eigen::ComputeFullU | Eigen::ComputeFullV).solve(inputVector);
71 else if (mitk::pa::LinearSpectralUnmixingFilter::AlgortihmType::FULLPIVLU == algorithmName)
72 resultVector = endmemberMatrix.fullPivLu().solve(inputVector);
74 else if (mitk::pa::LinearSpectralUnmixingFilter::AlgortihmType::FULLPIVHOUSEHOLDERQR == algorithmName)
75 resultVector = endmemberMatrix.fullPivHouseholderQr().solve(inputVector);
77 mitkThrow() <<
"404 VIGRA ALGORITHM NOT FOUND";
void SetAlgorithm(AlgortihmType inputAlgorithmName)
Takes a mitk::pa::LinearSpectralUnmixingFilter::AlgortihmType and fix it for usage at the "SpectralUn...
Eigen::VectorXf SpectralUnmixingAlgorithm(Eigen::Matrix< float, Eigen::Dynamic, Eigen::Dynamic > endmemberMatrix, Eigen::VectorXf inputVector) override
overrides the baseclass method with a mehtod to calculate the spectral unmixing result vector...
AlgortihmType
Contains all implemented Eigen algorithms for spectral unmixing. For detailed information of the algo...
~LinearSpectralUnmixingFilter() override
LinearSpectralUnmixingFilter()