From fe9aa991ea08e8a29bd58022bdb16ba216b60239 Mon Sep 17 00:00:00 2001 From: Julien Malik <julien.malik@c-s.fr> Date: Fri, 27 Jan 2012 13:22:01 +0100 Subject: [PATCH] BUG: remove CLSPSTO and FCLS unmixing algorithms, not ready yet for release --- .../otbHyperspectralUnmixing.cxx | 12 +- .../otbFCLSUnmixingImageFilter.h | 188 ------------------ .../otbFCLSUnmixingImageFilter.txx | 188 ------------------ Testing/Code/Hyperspectral/CMakeLists.txt | 17 -- .../otbCLSPSTOUnmixingImageFilter.cxx | 80 -------- .../otbFCLSUnmixingImageFilter.cxx | 80 -------- .../Hyperspectral/otbHyperspectralTests1.cxx | 2 - 7 files changed, 7 insertions(+), 560 deletions(-) delete mode 100644 Code/Hyperspectral/otbFCLSUnmixingImageFilter.h delete mode 100644 Code/Hyperspectral/otbFCLSUnmixingImageFilter.txx delete mode 100644 Testing/Code/Hyperspectral/otbCLSPSTOUnmixingImageFilter.cxx delete mode 100644 Testing/Code/Hyperspectral/otbFCLSUnmixingImageFilter.cxx diff --git a/Applications/Hyperspectral/otbHyperspectralUnmixing.cxx b/Applications/Hyperspectral/otbHyperspectralUnmixing.cxx index 83f6be0dd9..4dd933bdb2 100644 --- a/Applications/Hyperspectral/otbHyperspectralUnmixing.cxx +++ b/Applications/Hyperspectral/otbHyperspectralUnmixing.cxx @@ -22,7 +22,7 @@ #include "otbUnConstrainedLeastSquareImageFilter.h" #include "otbISRAUnmixingImageFilter.h" #include "otbNCLSUnmixingImageFilter.h" -#include "otbFCLSUnmixingImageFilter.h" +//#include "otbFCLSUnmixingImageFilter.h" #include "otbMDMDNMFImageFilter.h" #include "otbVectorImageToMatrixImageFilter.h" @@ -40,7 +40,7 @@ typedef otb::StreamingStatisticsVectorImageFilter<DoubleVectorImageType> Streami typedef otb::UnConstrainedLeastSquareImageFilter<DoubleVectorImageType, DoubleVectorImageType, double> UCLSUnmixingFilterType; typedef otb::ISRAUnmixingImageFilter<DoubleVectorImageType, DoubleVectorImageType, double> ISRAUnmixingFilterType; typedef otb::NCLSUnmixingImageFilter<DoubleVectorImageType, DoubleVectorImageType, double> NCLSUnmixingFilterType; -typedef otb::FCLSUnmixingImageFilter<DoubleVectorImageType, DoubleVectorImageType, double> FCLSUnmixingFilterType; +//typedef otb::FCLSUnmixingImageFilter<DoubleVectorImageType, DoubleVectorImageType, double> FCLSUnmixingFilterType; typedef otb::MDMDNMFImageFilter<DoubleVectorImageType, DoubleVectorImageType> MDMDNMFUnmixingFilterType; typedef otb::VectorImageToMatrixImageFilter<DoubleVectorImageType> VectorImageToMatrixImageFilterType; @@ -69,7 +69,7 @@ enum EndmembersEstimationMethod enum UnMixingMethod { UnMixingMethod_UCLS, - UnMixingMethod_FCLS, + //UnMixingMethod_FCLS, UnMixingMethod_NCLS, UnMixingMethod_ISRA, UnMixingMethod_MDMDNMF, @@ -122,8 +122,8 @@ private: AddChoice("ua.ucls", "UCLS"); SetParameterDescription("ua.ucls", "Unconstrained Least Square"); - AddChoice("ua.fcls", "FCLS"); - SetParameterDescription("ua.fcls", "Fully constrained Least Square"); +// AddChoice("ua.fcls", "FCLS"); +// SetParameterDescription("ua.fcls", "Fully constrained Least Square"); AddChoice("ua.ncls", "NCLS"); SetParameterDescription("ua.ncls", "Non-negative constrained Least Square"); @@ -216,6 +216,7 @@ private: } break; + /* case UnMixingMethod_FCLS: { std::cout << "FCLS Unmixing" << std::endl; @@ -230,6 +231,7 @@ private: } break; + */ case UnMixingMethod_MDMDNMF: { std::cout << "MDMD-NMF Unmixing" << std::endl; diff --git a/Code/Hyperspectral/otbFCLSUnmixingImageFilter.h b/Code/Hyperspectral/otbFCLSUnmixingImageFilter.h deleted file mode 100644 index 6a32a7dc9e..0000000000 --- a/Code/Hyperspectral/otbFCLSUnmixingImageFilter.h +++ /dev/null @@ -1,188 +0,0 @@ -/*========================================================================= - - Program: ORFEO Toolbox - Language: C++ - Date: $Date$ - Version: $Revision$ - - - Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. - See OTBCopyright.txt for details. - - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ -#ifndef __otbFCLSUnmixingImageFilter_h -#define __otbFCLSUnmixingImageFilter_h - -#include "itkMacro.h" -#include "itkNumericTraits.h" -#include "otbUnaryFunctorImageFilter.h" -#include "vnl/algo/vnl_svd.h" -#include <boost/shared_ptr.hpp> - -namespace otb -{ - -namespace Functor { - -/** \class FCLSUnmixingFunctor - * - * \brief TODO - * - */ -template<class TInput, class TOutput, class TPrecision> -class FCLSUnmixingFunctor -{ -public: - typedef FCLSUnmixingFunctor<TInput, TOutput, TPrecision> Self; - - typedef TInput InputType; - typedef TOutput OutputType; - typedef TPrecision PrecisionType; - - typedef vnl_vector<PrecisionType> VectorType; - typedef vnl_matrix<PrecisionType> MatrixType; - - FCLSUnmixingFunctor(); - virtual ~FCLSUnmixingFunctor(); - - unsigned int GetOutputSize() const; - - bool operator !=(const FCLSUnmixingFunctor& other) const; - - bool operator ==(const FCLSUnmixingFunctor& other) const; - - void SetEndmembersMatrix(const MatrixType& U); - const MatrixType& GetEndmembersMatrix(void) const; - - void SetMaxIteration(unsigned int val) - { - m_MaxIteration = val; - } - - unsigned int GetMaxIteration() const - { - return m_MaxIteration; - } - - OutputType operator ()(const InputType& in) const; - -private: - - static bool IsNonNegative(PrecisionType val) - { - return val >= 0; - } - - typedef vnl_svd<PrecisionType> SVDType; - typedef boost::shared_ptr<SVDType> SVDPointerType; - - MatrixType m_U; - MatrixType m_N; - MatrixType m_Nt; - MatrixType m_NtNinv; - SVDPointerType m_Svd; // SVD of U - unsigned int m_OutputSize; - unsigned int m_MaxIteration; -}; -} - -/** \class FCLSUnmixingImageFilter - * - * \brief Performs fully constrained least squares on each pixel of a VectorImage - * - * This filter takes as input a multiband image and a matrix. - * If the matrix is called $A$, it solves, for each pixel $p$, the system - * \f$A \cdot x = p\f$ in the least square sense, with additionnal constraints on the solution - * \f$\hat{x}\f$ ensuring positivity (each component is positive) and additivity (the sum of - * all components is 1). - * - * The main use of this filter is to unmix an hyperspectral dataset, - * where \f$A\f$ is the mixing matrix, in which each row corresponds to an endmember signature. - * - * The number of rows in \f$A\f$ must match the input image number of bands. - * The number of bands in the output image will be the number of columns of $A$ - * - * References - * "Fully Constrained Least-Squares Based Linear Unmixing." Daniel Heinz, - * Chein-I Chang, and Mark L.G. Althouse. IEEE. 1999. - * - * \ingroup Hyperspectral - * \ingroup Streamed - * \ingroup Threaded - */ -template <class TInputImage, class TOutputImage, class TPrecision> -class ITK_EXPORT FCLSUnmixingImageFilter : - public otb::UnaryFunctorImageFilter<TInputImage, TOutputImage, - Functor::FCLSUnmixingFunctor<typename TInputImage::PixelType, - typename TOutputImage::PixelType, TPrecision> > -{ -public: - /** Standard class typedefs. */ - typedef FCLSUnmixingImageFilter Self; - typedef otb::UnaryFunctorImageFilter - <TInputImage, - TOutputImage, - Functor::FCLSUnmixingFunctor< - typename TInputImage::PixelType, - typename TOutputImage::PixelType, - TPrecision> - > Superclass; - typedef itk::SmartPointer<Self> Pointer; - typedef itk::SmartPointer<const Self> ConstPointer; - - typedef Functor::FCLSUnmixingFunctor< - typename TInputImage::PixelType, - typename TOutputImage::PixelType, - TPrecision> FunctorType; - typedef typename FunctorType::MatrixType MatrixType; - - /** Method for creation through the object factory. */ - itkNewMacro(Self); - - /** Run-time type information (and related methods). */ - itkTypeMacro(FCLSUnmixingImageFilter, otb::UnaryFunctorImageFilter); - - /** Pixel types. */ - typedef typename TInputImage::PixelType InputPixelType; - typedef typename TOutputImage::PixelType OutputPixelType; - - void SetEndmembersMatrix(const MatrixType& m); - const MatrixType& GetEndmembersMatrix() const; - - void SetMaxIteration( unsigned int val ) - { - this->GetFunctor().SetMaxIteration(val); - this->Modified(); - } - - unsigned int GetMaxIteration() const - { - return this->GetFunctor().GetMaxIteration(); - } - -protected: - FCLSUnmixingImageFilter(); - - virtual ~FCLSUnmixingImageFilter(); - - void PrintSelf(std::ostream& os, itk::Indent indent) const; - -private: - FCLSUnmixingImageFilter(const Self &); //purposely not implemented - void operator =(const Self&); //purposely not implemented - -}; - -} // end namespace otb - -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbFCLSUnmixingImageFilter.txx" -#endif - -#endif - diff --git a/Code/Hyperspectral/otbFCLSUnmixingImageFilter.txx b/Code/Hyperspectral/otbFCLSUnmixingImageFilter.txx deleted file mode 100644 index f880fded15..0000000000 --- a/Code/Hyperspectral/otbFCLSUnmixingImageFilter.txx +++ /dev/null @@ -1,188 +0,0 @@ -/*========================================================================= - - Program: ORFEO Toolbox - Language: C++ - Date: $Date$ - Version: $Revision$ - - - Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. - See OTBCopyright.txt for details. - - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ -#ifndef __otbFCLSUnmixingImageFilter_txx -#define __otbFCLSUnmixingImageFilter_txx - -#include "otbFCLSUnmixingImageFilter.h" -#include <algorithm> - -namespace otb -{ - -namespace Functor -{ - -template <class TInput, class TOutput, class TPrecision> -FCLSUnmixingFunctor<TInput, TOutput, TPrecision> -::FCLSUnmixingFunctor() - : m_OutputSize(0), - m_MaxIteration(10) -{ -} - -template <class TInput, class TOutput, class TPrecision> -FCLSUnmixingFunctor<TInput, TOutput, TPrecision> -::~FCLSUnmixingFunctor() -{ -} - -template <class TInput, class TOutput, class TPrecision> -unsigned int -FCLSUnmixingFunctor<TInput, TOutput, TPrecision> -::GetOutputSize() const -{ - return m_OutputSize; -} - -template <class TInput, class TOutput, class TPrecision> -bool -FCLSUnmixingFunctor<TInput, TOutput, TPrecision> -::operator != (const Self& other) const -{ - return true; -} - -template <class TInput, class TOutput, class TPrecision> -bool -FCLSUnmixingFunctor<TInput, TOutput, TPrecision> -::operator == (const Self& other) const -{ - return false; -} - -template <class TInput, class TOutput, class TPrecision> -void -FCLSUnmixingFunctor<TInput, TOutput, TPrecision> -::SetEndmembersMatrix(const MatrixType& U) -{ - //const double Delta = 1.0E-6; - m_U = U; - m_N.set_size(U.rows() + 1, U.cols()); - for (unsigned int r = 0; r < U.rows(); ++r) - { - m_N.set_row(r, U.get_row(r)); - } - m_N.set_row(U.rows(), 1.0E6); - - m_Nt = m_N.transpose(); - - MatrixType NtN = m_Nt * m_N; - m_NtNinv = SVDType(NtN).inverse(); - - m_OutputSize = m_N.cols(); - m_Svd.reset( new SVDType(m_U) ); -} - - -template <class TInput, class TOutput, class TPrecision> -const typename FCLSUnmixingFunctor<TInput, TOutput, TPrecision>::MatrixType& -FCLSUnmixingFunctor<TInput, TOutput, TPrecision> -::GetEndmembersMatrix() const -{ - return m_U; -} - -template <class TInput, class TOutput, class TPrecision> -typename FCLSUnmixingFunctor<TInput, TOutput, TPrecision>::OutputType -FCLSUnmixingFunctor<TInput, TOutput, TPrecision> -::operator ()(const InputType& in) const -{ - // TODO : support different types between input and output ? - VectorType inVector(in.Size()); - for (unsigned int i = 0; i < in.GetSize(); ++i ) - { - inVector[i] = in[i]; - } - - // Initialize with Unconstrained Least Square solution - VectorType uclsVector = m_Svd->solve(inVector); - - unsigned int nbEndmembers = m_OutputSize; - unsigned int nbBands = in.Size(); - - // Apply FCLS iterations - //const double Delta = 1.0E-6; - VectorType s(nbBands + 1); - for (unsigned int r = 0; r < nbBands; ++r) - { - s[r] = inVector[r]; - } - s[nbBands] = 1.0E6; - - VectorType lambda(nbEndmembers); - VectorType fclsVector = uclsVector; - VectorType correction(uclsVector.size()); - for (unsigned int i = 0; i < m_MaxIteration; ++i) - { - // Error in original paper : divergence - // lambda = m_Nt * (s - m_N * fclsVector); - lambda = m_Nt * (m_N * fclsVector - s); - correction = m_NtNinv * lambda; - fclsVector -= correction; - } - - OutputType out(fclsVector.size()); - for (unsigned int i = 0; i < out.GetSize(); ++i ) - { - out[i] = fclsVector[i]; - } - return out; -} - -} - -template <class TInputImage, class TOutputImage, class TPrecision> -FCLSUnmixingImageFilter<TInputImage, TOutputImage, TPrecision> -::FCLSUnmixingImageFilter() -{ -} - -template <class TInputImage, class TOutputImage, class TPrecision> -FCLSUnmixingImageFilter<TInputImage, TOutputImage, TPrecision> -::~FCLSUnmixingImageFilter() -{ -} - -template <class TInputImage, class TOutputImage, class TPrecision> -void -FCLSUnmixingImageFilter<TInputImage, TOutputImage, TPrecision> -::SetEndmembersMatrix(const MatrixType& m) -{ - this->GetFunctor().SetEndmembersMatrix(m); - this->Modified(); -} - -template <class TInputImage, class TOutputImage, class TPrecision> -const typename FCLSUnmixingImageFilter<TInputImage, TOutputImage, TPrecision>::MatrixType& -FCLSUnmixingImageFilter<TInputImage, TOutputImage, TPrecision> -::GetEndmembersMatrix() const -{ - return this->GetFunctor().GetEndmembersMatrix(); -} - -template <class TInputImage, class TOutputImage, class TPrecision> -void -FCLSUnmixingImageFilter<TInputImage, TOutputImage, TPrecision> -::PrintSelf(std::ostream& os, itk::Indent indent) const -{ - Superclass::PrintSelf(os, indent); -} - -} // end namespace - -#endif diff --git a/Testing/Code/Hyperspectral/CMakeLists.txt b/Testing/Code/Hyperspectral/CMakeLists.txt index 7948e160a9..da4d99d0e0 100644 --- a/Testing/Code/Hyperspectral/CMakeLists.txt +++ b/Testing/Code/Hyperspectral/CMakeLists.txt @@ -121,22 +121,6 @@ ADD_TEST(hyTvISRAUnmixingImageFilterTest ${TEMP}/hyTvISRAUnmixingImageFilterTest.tif 10) - -ADD_TEST(hyTuFCLSUnmixingImageFilterNew - ${Hyperspectral_TESTS1} - otbFCLSUnmixingImageFilterNewTest) - -ADD_TEST(hyTvFCLSUnmixingImageFilterTest - ${Hyperspectral_TESTS1} - --compare-image ${EPSILON_9} - ${BASELINE_FILES}/hyTvFCLSUnmixingImageFilterTest.tif - ${TEMP}/hyTvFCLSUnmixingImageFilterTest.tif - otbFCLSUnmixingImageFilterTest - ${INPUTDATA}/Hyperspectral/synthetic/hsi_cube.tif - ${INPUTDATA}/Hyperspectral/synthetic/endmembers.tif - ${TEMP}/hyTvFCLSUnmixingImageFilterTest.tif - 10) - # HyperspectralTests3 ADD_TEST(hyTuMDMDNMFImageFilterNew ${Hyperspectral_TESTS3} @@ -165,7 +149,6 @@ SET(Hyperspectral_SRCS1 otbHyperspectralTests1.cxx otbEigenvalueLikelihoodMaximization.cxx otbUnConstrainedLeastSquareImageFilter.cxx -otbFCLSUnmixingImageFilter.cxx otbISRAUnmixingImageFilter.cxx otbNCLSUnmixingImageFilter.cxx otbSparseUnmixingImageFilterNew.cxx diff --git a/Testing/Code/Hyperspectral/otbCLSPSTOUnmixingImageFilter.cxx b/Testing/Code/Hyperspectral/otbCLSPSTOUnmixingImageFilter.cxx deleted file mode 100644 index 7da420e04a..0000000000 --- a/Testing/Code/Hyperspectral/otbCLSPSTOUnmixingImageFilter.cxx +++ /dev/null @@ -1,80 +0,0 @@ -/*========================================================================= - - Program: ORFEO Toolbox - Language: C++ - Date: $Date$ - Version: $Revision$ - - - Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. - See OTBCopyright.txt for details. - - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ -#include "otbCLSPSTOUnmixingImageFilter.h" - -#include "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbStreamingImageFileWriter.h" -#include "otbVectorImageToMatrixImageFilter.h" -#include "otbStandardWriterWatcher.h" - -const unsigned int Dimension = 2; -typedef float PixelType; - -typedef otb::VectorImage<PixelType, Dimension> ImageType; -typedef otb::ImageFileReader<ImageType> ReaderType; -typedef otb::CLSPSTOUnmixingImageFilter<ImageType, ImageType, float> UnmixingImageFilterType; -typedef otb::VectorImageToMatrixImageFilter<ImageType> VectorImageToMatrixImageFilterType; -typedef otb::StreamingImageFileWriter<ImageType> WriterType; - -int otbCLSPSTOUnmixingImageFilterNewTest(int argc, char * argv[]) -{ - UnmixingImageFilterType::Pointer filter = UnmixingImageFilterType::New(); - std::cout << filter << std::endl; - return EXIT_SUCCESS; -} - -int otbCLSPSTOUnmixingImageFilterTest(int argc, char * argv[]) -{ - const char * inputImage = argv[1]; - const char * inputEndmembers = argv[2]; - const char * outputImage = argv[3]; - int maxIter = atoi(argv[4]); - - ReaderType::Pointer readerImage = ReaderType::New(); - readerImage->SetFileName(inputImage); - - ReaderType::Pointer readerEndMembers = ReaderType::New(); - readerEndMembers->SetFileName(inputEndmembers); - VectorImageToMatrixImageFilterType::Pointer endMember2Matrix = VectorImageToMatrixImageFilterType::New(); - endMember2Matrix->SetInput(readerEndMembers->GetOutput()); - - endMember2Matrix->Update(); - - typedef VectorImageToMatrixImageFilterType::MatrixType MatrixType; - MatrixType endMembers = endMember2Matrix->GetMatrix(); - MatrixType pinv = vnl_matrix_inverse<PixelType>(endMembers); - - UnmixingImageFilterType::Pointer unmixer = UnmixingImageFilterType::New(); - - unmixer->SetInput(readerImage->GetOutput()); - unmixer->SetMaxIteration(maxIter); - //unmixer->SetNumberOfThreads(1); - unmixer->SetEndmembersMatrix(endMember2Matrix->GetMatrix()); - - WriterType::Pointer writer = WriterType::New(); - writer->SetFileName(outputImage); - writer->SetInput(unmixer->GetOutput()); - writer->SetNumberOfDivisionsStrippedStreaming(10); - - otb::StandardWriterWatcher w4(writer, unmixer,"CLSPSTOUnmixingImageFilter"); - - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Testing/Code/Hyperspectral/otbFCLSUnmixingImageFilter.cxx b/Testing/Code/Hyperspectral/otbFCLSUnmixingImageFilter.cxx deleted file mode 100644 index 0b91ef8f8e..0000000000 --- a/Testing/Code/Hyperspectral/otbFCLSUnmixingImageFilter.cxx +++ /dev/null @@ -1,80 +0,0 @@ -/*========================================================================= - - Program: ORFEO Toolbox - Language: C++ - Date: $Date$ - Version: $Revision$ - - - Copyright (c) Centre National d'Etudes Spatiales. All rights reserved. - See OTBCopyright.txt for details. - - - This software is distributed WITHOUT ANY WARRANTY; without even - the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR - PURPOSE. See the above copyright notices for more information. - -=========================================================================*/ -#include "otbFCLSUnmixingImageFilter.h" - -#include "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbStreamingImageFileWriter.h" -#include "otbVectorImageToMatrixImageFilter.h" -#include "otbStandardWriterWatcher.h" - -const unsigned int Dimension = 2; -typedef double PixelType; - -typedef otb::VectorImage<PixelType, Dimension> ImageType; -typedef otb::ImageFileReader<ImageType> ReaderType; -typedef otb::FCLSUnmixingImageFilter<ImageType, ImageType, PixelType> UnmixingImageFilterType; -typedef otb::VectorImageToMatrixImageFilter<ImageType> VectorImageToMatrixImageFilterType; -typedef otb::StreamingImageFileWriter<ImageType> WriterType; - -int otbFCLSUnmixingImageFilterNewTest(int argc, char * argv[]) -{ - UnmixingImageFilterType::Pointer filter = UnmixingImageFilterType::New(); - std::cout << filter << std::endl; - return EXIT_SUCCESS; -} - -int otbFCLSUnmixingImageFilterTest(int argc, char * argv[]) -{ - const char * inputImage = argv[1]; - const char * inputEndmembers = argv[2]; - const char * outputImage = argv[3]; - int maxIter = atoi(argv[4]); - - ReaderType::Pointer readerImage = ReaderType::New(); - readerImage->SetFileName(inputImage); - - ReaderType::Pointer readerEndMembers = ReaderType::New(); - readerEndMembers->SetFileName(inputEndmembers); - VectorImageToMatrixImageFilterType::Pointer endMember2Matrix = VectorImageToMatrixImageFilterType::New(); - endMember2Matrix->SetInput(readerEndMembers->GetOutput()); - - endMember2Matrix->Update(); - - typedef VectorImageToMatrixImageFilterType::MatrixType MatrixType; - MatrixType endMembers = endMember2Matrix->GetMatrix(); - MatrixType pinv = vnl_matrix_inverse<PixelType>(endMembers); - - UnmixingImageFilterType::Pointer unmixer = UnmixingImageFilterType::New(); - - unmixer->SetInput(readerImage->GetOutput()); - unmixer->SetMaxIteration(maxIter); - //unmixer->SetNumberOfThreads(1); - unmixer->SetEndmembersMatrix(endMember2Matrix->GetMatrix()); - - WriterType::Pointer writer = WriterType::New(); - writer->SetFileName(outputImage); - writer->SetInput(unmixer->GetOutput()); - writer->SetNumberOfDivisionsStrippedStreaming(10); - - otb::StandardWriterWatcher w4(writer, unmixer,"FCLSUnmixingImageFilter"); - - writer->Update(); - - return EXIT_SUCCESS; -} diff --git a/Testing/Code/Hyperspectral/otbHyperspectralTests1.cxx b/Testing/Code/Hyperspectral/otbHyperspectralTests1.cxx index 6d26e86ee9..91dd48dc90 100644 --- a/Testing/Code/Hyperspectral/otbHyperspectralTests1.cxx +++ b/Testing/Code/Hyperspectral/otbHyperspectralTests1.cxx @@ -33,8 +33,6 @@ void RegisterTests() REGISTER_TEST(otbISRAUnmixingImageFilterTest); REGISTER_TEST(otbNCLSUnmixingImageFilterNewTest); REGISTER_TEST(otbNCLSUnmixingImageFilterTest); - REGISTER_TEST(otbFCLSUnmixingImageFilterNewTest); - REGISTER_TEST(otbFCLSUnmixingImageFilterTest); REGISTER_TEST(otbVCAImageFilterNew); REGISTER_TEST(otbVCAImageFilterTestHighSNR); REGISTER_TEST(otbSparseUnmixingImageFilterNew); -- GitLab