Commit 7c4c61cc authored by Victor Poughon's avatar Victor Poughon

DOC: review example RatioChDet

parent e809f104
Pipeline #1544 failed with stages
in 88 minutes and 39 seconds
......@@ -23,34 +23,7 @@
./RatioChDet Input/GomaAvant.png Input/GomaApres.png Output/RatioChDet.tif 3
*/
// This example illustrates the class
// \doxygen{otb}{MeanRatioImageFilter} for detecting changes
// between pairs of images. This filter computes the mean intensity in
// the neighborhood of each pixel of the pair of images to be compared
// and uses the ratio of means as a change indicator. This change
// indicator is then normalized between 0 and 1 by using the classical
// \begin{equation}
// r = 1 - min\{\frac{\mu_A}{\mu_B},\frac{\mu_B}{\mu_A} \},
// \end{equation}
// where $\mu_A$ and $\mu_B$ are the local means. This
// example will use the images shown in
// figure ~\ref{fig:RATCHDETINIM}. These correspond to 2 Radarsat fine
// mode acquisitions before and after a lava flow resulting from a
// volcanic eruption.
// \begin{figure}
// \center
// \includegraphics[width=0.35\textwidth]{GomaAvant.eps}
// \includegraphics[width=0.35\textwidth]{GomaApres.eps}
// \itkcaption[Radarsat Images for Change Detection]{Images used for the
// change detection. Left: Before the eruption. Right: after the eruption.}
// \label{fig:RATCHDETINIM}
// \end{figure}
//
// We start by including the corresponding header file.
#include "otbMeanRatioImageFilter.h"
#include "otbImageFileReader.h"
#include "otbImageFileWriter.h"
#include "otbImage.h"
......@@ -72,7 +45,6 @@ int main(int argc, char* argv[])
// We start by declaring the types for the two input images, the
// change image and the image to be stored in a file for visualization.
using InternalPixelType = float;
using OutputPixelType = unsigned char;
using InputImageType1 = otb::Image<InternalPixelType, Dimension>;
......@@ -80,34 +52,27 @@ int main(int argc, char* argv[])
using ChangeImageType = otb::Image<InternalPixelType, Dimension>;
using OutputImageType = otb::Image<OutputPixelType, Dimension>;
// We can now declare the types for the readers. 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.
// We can now declare the types for the readers. 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
// ImageFileWriter class.
using ReaderType1 = otb::ImageFileReader<InputImageType1>;
using ReaderType2 = otb::ImageFileReader<InputImageType2>;
using WriterType = otb::ImageFileWriter<OutputImageType>;
// The change detector will give a normalized result between 0 and
// 1. In order to store the result in PNG format we will
// rescale the results of the change detection in order to use all
// the output pixel type range of values.
// The change detector will give a normalized result between 0 and
// 1. In order to store the result in PNG format we will
// rescale the results of the change detection in order to use all
// the output pixel type range of values.
using RescalerType = itk::ShiftScaleImageFilter<ChangeImageType, OutputImageType>;
// The \doxygen{otb}{MeanRatioImageFilter} is templated over
// the types of the two input images and the type of the generated change
// image.
// The MeanRatioImageFilter is templated over
// the types of the two input images and the type of the generated change
// image.
using FilterType = otb::MeanRatioImageFilter<InputImageType1, InputImageType2, ChangeImageType>;
// The different elements of the pipeline can now be instantiated.
// The different elements of the pipeline can now be instantiated.
ReaderType1::Pointer reader1 = ReaderType1::New();
ReaderType2::Pointer reader2 = ReaderType2::New();
WriterType::Pointer writer = WriterType::New();
......@@ -117,21 +82,19 @@ int main(int argc, char* argv[])
const char* inputFilename1 = argv[1];
const char* inputFilename2 = argv[2];
const char* outputFilename = argv[3];
// We set the parameters of the different elements of the pipeline.
// We set the parameters of the different elements of the pipeline.
reader1->SetFileName(inputFilename1);
reader2->SetFileName(inputFilename2);
writer->SetFileName(outputFilename);
float scale = itk::NumericTraits<OutputPixelType>::max();
rescaler->SetScale(scale);
// The only parameter for this change detector is the radius of
// the window used for computing the mean of the intensities.
// The only parameter for this change detector is the radius of
// the window used for computing the mean of the intensities.
filter->SetRadius(atoi(argv[4]));
// We build the pipeline by plugging all the elements together.
// We build the pipeline by plugging all the elements together.
filter->SetInput1(reader1->GetOutput());
filter->SetInput2(reader2->GetOutput());
......@@ -143,26 +106,5 @@ int main(int argc, char* argv[])
CommandType::Pointer observer = CommandType::New();
filter->AddObserver(itk::ProgressEvent(), observer);
try
{
writer->Update();
}
catch (itk::ExceptionObject& err)
{
std::cout << "ExceptionObject caught !" << std::endl;
std::cout << err << std::endl;
return -1;
}
// Figure \ref{fig:RESRATCHDET} shows the result of the change
// detection by ratio of local means.
// \begin{figure}
// \center
// \includegraphics[width=0.35\textwidth]{RatioChDet.eps}
// \itkcaption[Ratio Change Detection Results]{Result of the
// ratio of means change detector}
// \label{fig:RESRATCHDET}
// \end{figure}
return EXIT_SUCCESS;
writer->Update();
}
This example illustrates the class
:doxygen:`MeanRatioImageFilter` for detecting changes
between pairs of images. This filter computes the mean intensity in
the neighborhood of each pixel of the pair of images to be compared
and uses the ratio of means as a change indicator. This change
indicator is then normalized between 0 and 1 by using the classical
.. math::
r = 1 - min\{\frac{\mu_A}{\mu_B},\frac{\mu_B}{\mu_A} \}
where :math:`\mu_A` and :math:`\mu_B` are the local means.
.. |image1| image:: /Input/GomaAvant.png
.. |image2| image:: /Input/GomaApres.png
.. |image3| image:: /Output/RatioChDet.png
.. _Figure1:
+--------------------------+-------------------------+-------------------------+
| |image1| | |image2| | |image3| |
+--------------------------+-------------------------+-------------------------+
Radarsat fine mode acquisitions before (left) and after (middle) a lava flow
resulting from a volcanic eruption. On the right is the result of the change
detection by ratio of local means.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment