diff --git a/Examples/ChangeDetection/otbMultivariateAlterationDetectorExample.cxx b/Examples/ChangeDetection/otbMultivariateAlterationDetectorExample.cxx deleted file mode 100644 index 9ffda2592754fbf839cf1dfec01a9ebb781d0845..0000000000000000000000000000000000000000 --- a/Examples/ChangeDetection/otbMultivariateAlterationDetectorExample.cxx +++ /dev/null @@ -1,235 +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 "otbVectorImage.h" -#include "otbImageFileReader.h" -#include "otbImageFileWriter.h" -#include "otbPrintableImageFilter.h" - - -// Software Guide : BeginCommandLineArgs -// INPUTS: {Spot5-Gloucester-before.tif}, {Spot5-Gloucester-after.tif} -// OUTPUTS: {MADOutput.tif}, {mad-input1.png}, {mad-input2.png}, {mad-output.png} -// -// Software Guide : EndCommandLineArgs - -// Software Guide : BeginLatex -// This example illustrates the class -// \doxygen{otb}{MultivariateAlterationChangeDetectorImageFilter}, -// which implements the Multivariate Alteration Change Detector -// algorithm (TODO: Add citation). This algorihtm allows to perform -// change detection from a pair multi-band images, including images -// with different number of bands or modalities. Its output is a a -// multi-band image of change maps, each one being unccorrelated with -// the remaining. The number of bands of the output image is the -// minimum number of bands between the two input images. -// -// The algorithm works as follows. It tries to find two linear -// combinations of bands (one for each input images) which maximize -// correlation, and subtract these two linear combinitation, leading -// to the first change map. Then, it looks for a second set of linear -// combinations which are orthogonal to the first ones, a which -// maximize correlation, and use it as the second change map. This -// process is iterated until no more orthogonal linear combinations -// can be found. -// -// This algorithms has numerous advantages, such as radiometry scaling -// and shifting invariance and absence of parameters, but it can not -// be used on a pair of single band images (in this case the output is -// simply the difference between the two images). -// -// We start by including the corresponding header file. -// -// Software Guide : EndLatex - -// Software Guide : BeginCodeSnippet -#include "otbMultivariateAlterationDetectorImageFilter.h" -// Software Guide : EndCodeSnippet - -int main(int argc, char* argv[]) -{ - - if (argc < 6) - { - std::cerr << "Usage: " << std::endl; - std::cerr << argv[0] << " inputImageFile1 inputImageFile2 outIn1Pretty outIn2Pretty outPretty" - << "outputImageFile" << std::endl; - return -1; - } - - // Define the dimension of the images - const unsigned int Dimension = 2; - - // Software Guide : BeginLatex - // We then define the types for the input images, of the - // change image and of the image to be stored in a file for visualization. - // - // Software Guide : EndLatex - - // Software Guide : BeginCodeSnippet - typedef unsigned short InputPixelType; - typedef float OutputPixelType; - typedef otb::VectorImage<InputPixelType, Dimension> InputImageType; - typedef otb::VectorImage<OutputPixelType, Dimension> OutputImageType; - // Software Guide : EndCodeSnippet - - // Software Guide : BeginLatex - // - // We can now declare the types for the reader. Since the images - // can be vey large, we will force the pipeline to use - // streaming. For this purpose, the file writer will be - // streamed. This is achieved by using the - // \doxygen{otb}{ImageFileWriter} class. - // - // Software Guide : EndLatex - - // Software Guide : BeginCodeSnippet - typedef otb::ImageFileReader<InputImageType> ReaderType; - typedef otb::ImageFileWriter<OutputImageType> WriterType; - // Software Guide : EndCodeSnippet - - - // This is for rendering in software guide - typedef otb::PrintableImageFilter<InputImageType,InputImageType> InputPrintFilterType; - typedef otb::PrintableImageFilter<OutputImageType,OutputImageType> OutputPrintFilterType; - typedef InputPrintFilterType::OutputImageType VisuImageType; - typedef otb::ImageFileWriter<VisuImageType> VisuWriterType; - - // The \doxygen{otb}{MultivariateAlterationDetectorImageFilter} is templated over - // the type of the input images and the type of the generated change - // image. - // - // Software Guide : EndLatex - - // Software Guide : BeginCodeSnippet - typedef otb::MultivariateAlterationDetectorImageFilter< - InputImageType,OutputImageType> MADFilterType; - // Software Guide : EndCodeSnippet - - // Software Guide : BeginLatex - // - // The different elements of the pipeline can now be instantiated. - // - // Software Guide : EndLatex - - // Software Guide : BeginCodeSnippet - ReaderType::Pointer reader1 = ReaderType::New(); - ReaderType::Pointer reader2 = ReaderType::New(); - WriterType::Pointer writer = WriterType::New(); - MADFilterType::Pointer madFilter = MADFilterType::New(); - - // Software Guide : EndCodeSnippet - const char * inputFilename1 = argv[1]; - const char * inputFilename2 = argv[2]; - const char * outputFilename = argv[3]; - const char * in1pretty = argv[4]; - const char * in2pretty = argv[5]; - const char * outpretty = argv[6]; - // Software Guide : BeginLatex - // - // We set the parameters of the different elements of the pipeline. - // - // Software Guide : EndLatex - - // Software Guide : BeginCodeSnippet - reader1->SetFileName(inputFilename1); - reader2->SetFileName(inputFilename2); - writer->SetFileName(outputFilename); - // Software Guide : EndCodeSnippet - - // Software Guide : BeginLatex - // - // We build the pipeline by plugging all the elements together. - // - // Software Guide : EndLatex - - // Software Guide : BeginCodeSnippet - madFilter->SetInput1(reader1->GetOutput()); - madFilter->SetInput2(reader2->GetOutput()); - writer->SetInput(madFilter->GetOutput()); - // Software Guide : EndCodeSnippet - - try - { - // Software Guide : BeginLatex - // - // And then we can trigger the pipeline update, as usual. - // - // Software Guide : EndLatex - - // Software Guide : BeginCodeSnippet - writer->Update(); - // Software Guide : EndCodeSnippet - - } - catch (itk::ExceptionObject& err) - { - std::cout << "ExceptionObject caught !" << std::endl; - std::cout << err << std::endl; - return -1; - } - - // Here we generate the figures - InputPrintFilterType::Pointer input1PrintFilter = InputPrintFilterType::New(); - InputPrintFilterType::Pointer input2PrintFilter = InputPrintFilterType::New(); - OutputPrintFilterType::Pointer outputPrintFilter = OutputPrintFilterType::New(); - VisuWriterType::Pointer input1VisuWriter = VisuWriterType::New(); - VisuWriterType::Pointer input2VisuWriter = VisuWriterType::New(); - VisuWriterType::Pointer outputVisuWriter = VisuWriterType::New(); - - input1PrintFilter->SetInput(reader1->GetOutput()); - input1PrintFilter->SetChannel(3); - input1PrintFilter->SetChannel(2); - input1PrintFilter->SetChannel(1); - input2PrintFilter->SetInput(reader2->GetOutput()); - input2PrintFilter->SetChannel(3); - input2PrintFilter->SetChannel(2); - input2PrintFilter->SetChannel(1); - outputPrintFilter->SetInput(madFilter->GetOutput()); - outputPrintFilter->SetChannel(3); - outputPrintFilter->SetChannel(2); - outputPrintFilter->SetChannel(1); - - input1VisuWriter->SetInput(input1PrintFilter->GetOutput()); - input2VisuWriter->SetInput(input2PrintFilter->GetOutput()); - outputVisuWriter->SetInput(outputPrintFilter->GetOutput()); - - input1VisuWriter->SetFileName(in1pretty); - input2VisuWriter->SetFileName(in2pretty); - outputVisuWriter->SetFileName(outpretty); - - input1VisuWriter->Update(); - input2VisuWriter->Update(); - outputVisuWriter->Update(); - -// Software Guide : BeginLatex Figure \ref{fig:MADCHDET} shows the -// result of applying the Multivariate Alteration Detector to detect -// changes in a pair of SPOT5 images before and after a flooding -// event. -// \begin{figure} \center -// \includegraphics[width=0.32\textwidth]{mad-input1.png} -// \includegraphics[width=0.32\textwidth]{mad-input2.png} -// \includegraphics[width=0.32\textwidth]{mad-output.png} -// \itkcaption[CorrelationMultivariate Alteration Detection -// Results]{Result of the Multivariate Alteration Detector results on -// SPOT5 data before and after flooding.} \label{fig:RESCORRCHDET} -// \end{figure} Software Guide : EndLatex - - return EXIT_SUCCESS; - -}