diff --git a/Examples/Data/ROISpot5.png b/Examples/Data/ROISpot5.png new file mode 100644 index 0000000000000000000000000000000000000000..be1914a46acd9818fc1e44c39b742b5ea2f6c15a Binary files /dev/null and b/Examples/Data/ROISpot5.png differ diff --git a/Examples/FeatureExtraction/CMakeLists.txt b/Examples/FeatureExtraction/CMakeLists.txt index 4928cfa7074b739ea3169a00b1bbc891f658cf5d..61949f407803bbae9cc70c01eb9b86a4dfd4ebf3 100644 --- a/Examples/FeatureExtraction/CMakeLists.txt +++ b/Examples/FeatureExtraction/CMakeLists.txt @@ -7,4 +7,7 @@ TARGET_LINK_LIBRARIES(AlignmentsExample OTBCommon OTBIO ITKCommon ITKIO ITKNumer ADD_EXECUTABLE(TouziEdgeDetectorExample TouziEdgeDetectorExample.cxx ) TARGET_LINK_LIBRARIES(TouziEdgeDetectorExample OTBCommon OTBIO ITKCommon ITKIO ITKNumerics ITKBasicFilters ITKCommon ITKStatistics itkvnl_inst itkvnl_algo itkvnl itkvcl itknetlib itksys ITKNrrdIO itkpng itktiff itkjpeg8 itkjpeg12 itkjpeg16 ITKMetaIO itkzlib ITKDICOMParser ITKEXPAT ) +ADD_EXECUTABLE(HarrisExample HarrisExample.cxx ) +TARGET_LINK_LIBRARIES(HarrisExample OTBCommon OTBIO ITKCommon ITKIO ITKNumerics ITKBasicFilters ITKCommon ITKStatistics itkvnl_inst itkvnl_algo itkvnl itkvcl itknetlib itksys ITKNrrdIO itkpng itktiff itkjpeg8 itkjpeg12 itkjpeg16 ITKMetaIO itkzlib ITKDICOMParser ITKEXPAT ) + diff --git a/Examples/FeatureExtraction/HarrisExample.cxx b/Examples/FeatureExtraction/HarrisExample.cxx new file mode 100644 index 0000000000000000000000000000000000000000..9c94cd5af42028945212b0eefbbdb81af354d53e --- /dev/null +++ b/Examples/FeatureExtraction/HarrisExample.cxx @@ -0,0 +1,143 @@ +/*========================================================================= + + Program : OTB (ORFEO ToolBox) + Authors : CNES - J. Inglada + Language : C++ + Date : 29 march 2006 + Version : + Role : + $Id:$ + +=========================================================================*/ +#if defined(_MSC_VER) +#pragma warning ( disable : 4786 ) +#endif + +#include "itkExceptionObject.h" +#include "itkImage.h" + +#include "otbImageFileReader.h" +#include "otbImageFileWriter.h" + +// Software Guide : BeginCommandLineArgs +// INPUTS: {ROISpot5.png} +// OUTPUTS: {ROISpot5Harris.png} +// 1.5 2 0.1 +// Software Guide : EndCommandLineArgs + +// Software Guide : BeginLatex +// +// This example illustrates the use of the \doxygen{HarrisImageFilter}. +// +// The first step required to use this filter is to include its header file. +// +// Software Guide : EndLatex + +// Software Guide : BeginCodeSnippet +#include "otbHarrisImageFilter.h" +// Software Guide : EndCodeSnippet +#include "itkRescaleIntensityImageFilter.h" + +int main(int argc, char ** argv ) +{ + if( argc != 6 ) + { + std::cerr << "Usage: " << argv[0] << " inputImageFile "; + std::cerr << " outputHarrisImageFile sigmaD sigmaI alpha" << std::endl; + return EXIT_FAILURE; + } + + const char * inputFilename = argv[1]; + const char * outputFilename = argv[2]; + + double SigmaD((double)::atof(argv[3])); + double SigmaI((double)::atof(argv[4])); + double Alpha((double)::atof(argv[5])); + + typedef float InputPixelType; + const unsigned int Dimension = 2; + typedef unsigned char OutputPixelType; + + typedef itk::Image< InputPixelType, Dimension > InputImageType; + typedef itk::Image< OutputPixelType, Dimension > OutputImageType; + + typedef otb::ImageFileReader< InputImageType > ReaderType; + + // Software Guide : BeginLatex + // + // The \doxygen{HarrisImageFilter} is templated over the + // input and output image types, so we start by + // defining: + // + // Software Guide : EndLatex + + // Software Guide : BeginCodeSnippet + typedef otb::HarrisImageFilter<InputImageType, + InputImageType> HarrisFilterType; + + // Software Guide : EndCodeSnippet + typedef itk::RescaleIntensityImageFilter + < InputImageType, OutputImageType > RescalerType; + + typedef otb::ImageFileWriter< OutputImageType > WriterType; + + + ReaderType::Pointer reader = ReaderType::New(); + WriterType::Pointer writer = WriterType::New(); + HarrisFilterType::Pointer harris = HarrisFilterType::New(); + RescalerType::Pointer rescaler = RescalerType::New(); + + reader->SetFileName( inputFilename ); + writer->SetFileName( outputFilename ); + + harris->SetInput( reader->GetOutput() ); + + // Software Guide : BeginLatex + // + // The \doxygen{HarrisImageFilter} needs some parameters to + // operate. The derivative computation is performed by a + // convolution with the derivative of a Gaussian kernel of + // variance $\sigma_D$ (derivation scale) and + // the smoothing of the image is performed by convolving with a + // Gaussian kernel of variance $\sigma_I$ (integration + // scale). This allows the coputation of the following matrix: + // \begin{equation} + // \mu(\mathbf{x},\sigma_I,\sigma_D) = \sigma_D^2 g(\sigma_I)\star + // \left[\begin{array}{cc} L_x^2(\mathbf{x},\sigma_D) & + // L_xL_y^2(\mathbf{x},\sigma_D)\\ L_xL_y^2(\mathbf{x},\sigma_D)& + // L_y^2(\mathbf{x},\sigma_D) \end{array}\right] \end{equation} + // The output of the detector is $$det(\mu) - \alpha trace^2(\mu)$$. + // + // Software Guide : EndLatex + + // Software Guide : BeginCodeSnippet + harris->SetSigmaD( SigmaD ); + harris->SetSigmaI( SigmaI ); + harris->SetAlpha( Alpha ); + // Software Guide : EndCodeSnippet + + rescaler->SetOutputMinimum( itk::NumericTraits< OutputPixelType >::min()); + rescaler->SetOutputMaximum( itk::NumericTraits< OutputPixelType >::max()); + + rescaler->SetInput( harris->GetOutput() ); + writer->SetInput( rescaler->GetOutput() ); + writer->Update(); + + // Software Guide : BeginLatex + // Figure~\ref{fig:Harris} shows the result of applying the interest + // point detector to a small patch extracted from a Spot 5 image. + // \begin{figure} + // \center + // \includegraphics[width=0.25\textwidth]{ROISpot5.eps} + // \includegraphics[width=0.25\textwidth]{ROISpot5Harris.eps} + // \itkcaption[Lee Filter Application]{Result of applying the + // \doxygen{HarrisImageFilter} to a Spot 5 image.} + // \label{fig:Harris} + // \end{figure} + // + // Software Guide : EndLatex + + + return EXIT_SUCCESS; +} +