Skip to content
Snippets Groups Projects
Commit 24221156 authored by Jordi Inglada's avatar Jordi Inglada
Browse files

Complex Moment Paths

parent 7b8929e7
No related branches found
No related tags found
No related merge requests found
......@@ -13,4 +13,7 @@ TARGET_LINK_LIBRARIES(HarrisExample OTBCommon OTBIO ITKCommon ITKIO ITKNumerics
ADD_EXECUTABLE(ComplexMomentImageExample ComplexMomentImageExample.cxx )
TARGET_LINK_LIBRARIES(ComplexMomentImageExample 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(ComplexMomentPathExample ComplexMomentPathExample.cxx )
TARGET_LINK_LIBRARIES(ComplexMomentPathExample 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 )
/*=========================================================================
Program : OTB (ORFEO ToolBox)
Authors : CNES - J. Inglada
Language : C++
Date : 7 April 2006
Version :
Role :
$Id:$
=========================================================================*/
#if defined(_MSC_VER)
#pragma warning ( disable : 4786 )
#endif
#include "itkExceptionObject.h"
#include "itkImage.h"
#include "otbImageFileReader.h"
// Software Guide : BeginCommandLineArgs
// 1 1
// Software Guide : EndCommandLineArgs
// Software Guide : BeginLatex
//
// The complex moments can be computed on images, but sometimes we are
// interested in computing them on shapes extracted from images by
// segmentation algorithms. These shapes can be represented by
// \doxygen{itk::Path}s. This example illustrates the use of the
// \doxygen{otb::ComplexMomentPathFunction} for the computation of
// complex geometric moments on ITK paths.
//
// The first step required to use this filter is to include its header file.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
#include "otbComplexMomentPathFunction.h"
// Software Guide : EndCodeSnippet
#include "itkPolyLineParametricPath.h"
int main(int argc, char ** argv )
{
if( argc != 3 )
{
std::cerr << "Usage: " << argv[0];
std::cerr << " p q" << std::endl;
return EXIT_FAILURE;
}
unsigned int P((unsigned char)::atoi(argv[2]));
unsigned int Q((unsigned char)::atoi(argv[3]));
typedef unsigned char InputPixelType;
// Software Guide : BeginLatex
//
// The \doxygen{otb::ComplexMomentPathFunction} is templated over the
// input path type and the output complex type value, so we start by
// defining:
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
const unsigned int Dimension = 2;
typedef itk::PolyLineParametricPath< Dimension > PathType;
typedef std::complex<double> ComplexType;
typedef otb::ComplexMomentPathFunction<PathType,ComplexType> CMType;
CMType::Pointer cmFunction =CMType::New();
// Software Guide : EndCodeSnippet
PathType::Pointer path = PathType::New();
path->Initialize();
typedef PathType::ContinuousIndexType ContinuousIndexType;
ContinuousIndexType cindex;
// Dessiner un carré:
path->Initialize();
cindex[0]=30;
cindex[1]=30;
path->AddVertex(cindex);
cindex[0]= 30;
cindex[1]=130;
path->AddVertex(cindex);
cindex[0]=130;
cindex[1]=130;
path->AddVertex(cindex);
cindex[0]=130;
cindex[1]= 30;
path->AddVertex(cindex);
// Software Guide : BeginLatex
//
// Next, we set the parameters of the plug the input path into the complex moment function
// and we set its parameters. \textbf{Fixme : SetInputPath a
// corriger dans la classe!!!}
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
//cmFunction->SetInputPath( path );
cmFunction->SetQ(Q);
cmFunction->SetP(P);
// Software Guide : EndCodeSnippet
// Software Guide : BeginLatex
// Since the paths are defined in physical coordinates, we do not
// need to set the center for the moment computation as we did
// with the \doxygen{otb::ComplexMomentImageFunction}. The same
// applies for the size of the neighborhood around the
// center pixel for the moment computation. The moment computation
// is triggered by calling the \code{Evaluate} method.
//
// Software Guide : EndLatex
// Software Guide : BeginCodeSnippet
//ComplexType Result = cmFunction->Evaluate();
ComplexType Result = cmFunction->Evaluate( *path );
std::cout << "The moment of order (" << P << "," << Q << ") is equal to " << Result << std:: endl;
// Software Guide : EndCodeSnippet
return EXIT_SUCCESS;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment