MaximumAutocorrelationFactor.cxx 4.95 KB
 Sébastien Dinot committed Mar 08, 2017 1 /*  Julien Michel committed Jan 14, 2019 2  * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)  Sébastien Dinot committed Mar 08, 2017 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19  * * This file is part of Orfeo Toolbox * * https://www.orfeo-toolbox.org/ * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */  Julien Michel committed Jan 26, 2012 20 21 22  #include "otbVectorImage.h" #include "otbImageFileReader.h"  23 #include "otbImageFileWriter.h"  Julien Michel committed Jan 26, 2012 24 25 #include "otbPrintableImageFilter.h"  Victor Poughon committed Feb 20, 2019 26 27 28 29 /* Example usage: ./MaximumAutocorrelationFactor Input/wv2_cannes_8bands.tif Output/MAFOutput.tif Output/maf-input.png Output/maf-output.png */  Julien Michel committed Jan 26, 2012 30 31  // This example illustrates the class  Julien Michel committed Jan 27, 2012 32 33 34 // \doxygen{otb}{MaximumAutocorrelationFactorImageFilter}, which // performs a Maximum Autocorrelation Factor transform \cite{nielsen2011kernel}. Like // PCA, MAF tries to find a set of orthogonal linear transform, but  Julien Malik committed Jan 28, 2012 35 // the criterion to maximize is the spatial auto-correlation rather than the  Julien Michel committed Jan 27, 2012 36 37 38 39 // variance. // // Auto-correlation is the correlation between the component and a // unitary shifted version of the component.  OTB Bot committed Jan 27, 2012 40 //  Julien Michel committed Jan 27, 2012 41 // Please note that the inverse transform is not implemented yet.  Julien Michel committed Jan 26, 2012 42 43 44 45 46 // // We start by including the corresponding header file. #include "otbMaximumAutocorrelationFactorImageFilter.h"  47 int main(int itkNotUsed(argc), char* argv[])  Julien Michel committed Jan 26, 2012 48 {  Victor Poughon committed Feb 20, 2019 49 50 51 52  char* infname = argv[1]; char* outfname = argv[2]; char* inpretty = argv[3]; char* outpretty = argv[4];  Julien Malik committed Nov 15, 2013 53   Julien Michel committed Jan 26, 2012 54 55  // We then define the types for the input image and the // output image.  Julien Malik committed Nov 15, 2013 56   Victor Poughon committed May 16, 2019 57 58  using InputImageType = otb::VectorImage; using OutputImageType = otb::VectorImage;  Julien Michel committed Jan 26, 2012 59 60 61  // We can now declare the types for the reader. Since the images  Jonathan Guinet committed Jan 31, 2012 62  // can be very large, we will force the pipeline to use  Julien Michel committed Jan 26, 2012 63 64  // streaming. For this purpose, the file writer will be // streamed. This is achieved by using the  65  // \doxygen{otb}{ImageFileWriter} class.  Julien Michel committed Jan 26, 2012 66   Victor Poughon committed May 16, 2019 67 68  using ReaderType = otb::ImageFileReader; using WriterType = otb::ImageFileWriter;  Julien Michel committed Jan 26, 2012 69 70 71 72 73  // The \doxygen{otb}{MultivariateAlterationDetectorImageFilter} is templated over // the type of the input images and the type of the generated change // image.  Victor Poughon committed May 16, 2019 74  using FilterType = otb::MaximumAutocorrelationFactorImageFilter;  Julien Michel committed Jan 26, 2012 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93  // The different elements of the pipeline can now be instantiated. ReaderType::Pointer reader = ReaderType::New(); WriterType::Pointer writer = WriterType::New(); FilterType::Pointer filter = FilterType::New(); // We set the parameters of the different elements of the pipeline. reader->SetFileName(infname); writer->SetFileName(outfname); // We build the pipeline by plugging all the elements together. filter->SetInput(reader->GetOutput()); writer->SetInput(filter->GetOutput()); // And then we can trigger the pipeline update, as usual.  Julien Malik committed Nov 15, 2013 94   Julien Michel committed Jan 26, 2012 95 96 97  writer->Update(); // This is for rendering in software guide  Victor Poughon committed May 16, 2019 98 99 100 101  using InputPrintFilterType = otb::PrintableImageFilter; using OutputPrintFilterType = otb::PrintableImageFilter; using VisuImageType = InputPrintFilterType::OutputImageType; using VisuWriterType = otb::ImageFileWriter;  Julien Michel committed Jan 26, 2012 102   Victor Poughon committed Feb 20, 2019 103  InputPrintFilterType::Pointer inputPrintFilter = InputPrintFilterType::New();  Julien Michel committed Jan 26, 2012 104  OutputPrintFilterType::Pointer outputPrintFilter = OutputPrintFilterType::New();  Victor Poughon committed Feb 20, 2019 105 106  VisuWriterType::Pointer inputVisuWriter = VisuWriterType::New(); VisuWriterType::Pointer outputVisuWriter = VisuWriterType::New();  Julien Michel committed Jan 26, 2012 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127  inputPrintFilter->SetInput(reader->GetOutput()); inputPrintFilter->SetChannel(5); inputPrintFilter->SetChannel(3); inputPrintFilter->SetChannel(2); outputPrintFilter->SetInput(filter->GetOutput()); outputPrintFilter->SetChannel(1); outputPrintFilter->SetChannel(2); outputPrintFilter->SetChannel(3); inputVisuWriter->SetInput(inputPrintFilter->GetOutput()); outputVisuWriter->SetInput(outputPrintFilter->GetOutput()); inputVisuWriter->SetFileName(inpretty); outputVisuWriter->SetFileName(outpretty); inputVisuWriter->Update(); outputVisuWriter->Update(); // Figure \ref{fig:MAFFIG} shows the // results of Maximum Autocorrelation Factor applied to an 8 bands  OTB Bot committed Jan 27, 2012 128  // Worldview2 image.  Julien Michel committed Jan 26, 2012 129  // \begin{figure}  Julien Michel committed Jan 26, 2012 130 131  // \center \includegraphics[width=0.32\textwidth]{maf-input.eps} // \includegraphics[width=0.32\textwidth]{maf-output.eps}  Julien Michel committed Jan 26, 2012 132 133 134  // \itkcaption[Maximum Autocorrelation Factor results]{Results of the // Maximum Autocorrelation Factor algorithm applied to a 8 bands // Worldview2 image (3 first components).} \label{fig:MAFFIG}  OTB Bot committed Jan 27, 2012 135  // \end{figure}  Julien Michel committed Jan 26, 2012 136 137 138  return EXIT_SUCCESS; }