Commit 81d5287a authored by Christophe Palmann's avatar Christophe Palmann

Merge branch 'develop' into ENH-FineRegistration

parents 7bff4ba9 6c1b6324
......@@ -68,7 +68,7 @@ set(main_project_name ${_OTBModuleMacros_DEFAULT_LABEL})
#-----------------------------------------------------------------------------
# OTB version number.
set(OTB_VERSION_MAJOR "5")
set(OTB_VERSION_MINOR "3")
set(OTB_VERSION_MINOR "5")
set(OTB_VERSION_PATCH "0")
set(OTB_VERSION_STRING "${OTB_VERSION_MAJOR}.${OTB_VERSION_MINOR}.${OTB_VERSION_PATCH}")
......
......@@ -330,7 +330,7 @@ OTB's version numbers have 3 digits. The first one is for major
versions, the second one is for minor versions and the last one is for
bugfixes.
The first version was 1.0.0 in July 2006.The current one is 5.2.1.
The first version was 1.0.0 in July 2006.The current one is 5.5.0.
\subsubsection{What is a major version?}
A major version of the library implies the addition of high-level
......
......@@ -44,7 +44,7 @@
\title{ORFEO Toolbox (OTB) Frequently Asked Questions (FAQ).\\ Updated
for OTB-5.2.1}
for OTB-5.5.0}
\author{OTB Development Team}
......
......@@ -133,7 +133,7 @@ colorlinks,linkcolor={blue},citecolor={blue},urlcolor={blue},
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\title{The ORFEO Tool Box Software Guide\\ Updated
for OTB-5.2.1}
for OTB-5.5.0}
\author{OTB Development Team}
......
......@@ -27,7 +27,7 @@
#endif
#ifdef _MSC_VER
// warning convertion int -> bool
// warning conversion int -> bool
#pragma warning ( disable : 4800 )
#endif
/*===========================================================================*/
......
......@@ -88,7 +88,7 @@ private:
" the first is the full mode where keypoints are extracted from the full extent of both images"
" (please note that in this mode large image file are not supported). "
"The second mode, called geobins, allows one to set-up spatial binning to get fewer points"
" spread accross the entire image. "
" spread across the entire image. "
"In this mode, the corresponding spatial bin in the second image is estimated using geographical"
" transform or sensor modelling, and is padded according to the user defined precision. Last, in"
" both modes the application can filter matches whose colocalisation in first image exceed this precision. "
......@@ -142,8 +142,8 @@ private:
AddChoice("mode.full","Extract and match all keypoints (no streaming)");
SetParameterDescription("mode.full","Extract and match all keypoints, loading both images entirely into memory");
AddChoice("mode.geobins","Search keypoints in small spatial bins regularly spread accross first image");
SetParameterDescription("mode.geobins","This method allows retrieving a set of tie points regulary spread accross image 1. Corresponding bins in image 2 are retrieved using sensor and geographical information if available. The first bin position takes into account the margin parameter. Bins are cropped to the largest image region shrinked by the margin parameter for both in1 and in2 images.");
AddChoice("mode.geobins","Search keypoints in small spatial bins regularly spread across first image");
SetParameterDescription("mode.geobins","This method allows retrieving a set of tie points regulary spread across image 1. Corresponding bins in image 2 are retrieved using sensor and geographical information if available. The first bin position takes into account the margin parameter. Bins are cropped to the largest image region shrinked by the margin parameter for both in1 and in2 images.");
AddParameter(ParameterType_Int,"mode.geobins.binsize","Size of bin");
SetParameterDescription("mode.geobins.binsize","Radius of the spatial bin in pixels");
......
......@@ -22,7 +22,7 @@
#include <fstream>
#include <map>
// Include differents method for color mapping
// Include different method for color mapping
#include "otbChangeLabelImageFilter.h"
#include "itkLabelToRGBImageFilter.h"
#include "itkScalarToRGBColormapImageFilter.h"
......
......@@ -205,7 +205,7 @@ void DoExecute()
// deformation grid, which is the only type handled by StreamingWarpImageFilter
if(GetParameterString("grid.type") == "loc")
{
GetLogger()->Info("Grid intepreted as a location grid.");
GetLogger()->Info("Grid interpreted as a location grid.");
m_ExtractX->SetInput(inGrid);
m_ExtractX->SetChannel(1);
m_BandMathX->SetNthInput(0,m_ExtractX->GetOutput(),"locX");
......@@ -222,7 +222,7 @@ void DoExecute()
}
else
{
GetLogger()->Info("Grid intepreted as a deformation grid.");
GetLogger()->Info("Grid interpreted as a deformation grid.");
m_DisplacementFieldCaster->SetInput(inGrid);
}
......
......@@ -20,10 +20,17 @@
#include "otbReciprocalHAlphaImageFilter.h"
#include "otbReciprocalBarnesDecompImageFilter.h"
#include "otbReciprocalHuynenDecompImageFilter.h"
#include "otbReciprocalPauliDecompImageFilter.h"
#include "otbSinclairReciprocalImageFilter.h"
#include "otbSinclairToReciprocalCoherencyMatrixFunctor.h"
#include "otbPerBandVectorImageFilter.h"
#include "itkMeanImageFilter.h"
#include "otbNRIBandImagesToOneNComplexBandsImage.h"
#include "otbImageListToVectorImageFilter.h"
#include "otbImageList.h"
namespace otb
......@@ -52,15 +59,21 @@ public:
ComplexDoubleImageType,
ComplexDoubleImageType,
ComplexDoubleVectorImageType,
FunctorType > SRFilterType;
FunctorType > SRFilterType;
typedef otb::ReciprocalHAlphaImageFilter<ComplexDoubleVectorImageType, DoubleVectorImageType> HAFilterType;
typedef itk::MeanImageFilter<ComplexDoubleImageType, ComplexDoubleImageType> MeanFilterType;
typedef otb::PerBandVectorImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType, MeanFilterType> PerBandMeanFilterType;
//typedef otb::NRIBandImagesToOneNComplexBandsImage<DoubleVectorImageType, ComplexDoubleVectorImageType> NRITOOneCFilterType;
typedef otb::ImageList<ComplexDoubleImageType> ImageListType;
typedef ImageListToVectorImageFilter<ImageListType, ComplexDoubleVectorImageType > ListConcatenerFilterType;
typedef itk::MeanImageFilter<ComplexDoubleImageType, ComplexDoubleImageType> MeanFilterType;
typedef otb::PerBandVectorImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType, MeanFilterType> PerBandMeanFilterType;
//FloatImageType
typedef otb::ReciprocalHAlphaImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType> HAFilterType;
typedef otb::ReciprocalBarnesDecompImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType> BarnesFilterType;
typedef otb::ReciprocalHuynenDecompImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType> HuynenFilterType;
typedef otb::ReciprocalPauliDecompImageFilter<ComplexDoubleVectorImageType, ComplexDoubleVectorImageType> PauliFilterType;
/** Standard macro */
itkNewMacro(Self);
......@@ -76,14 +89,18 @@ private:
// Documentation
SetDocName("SARDecompositions");
SetDocLongDescription("From one-band complex images (HH, HV, VH, VV), returns the selected decomposition.\n \n"
"The H-alpha-A decomposition is currently the only one available; it is implemented for the monostatic case (transmitter and receiver are co-located).\n"
"User must provide three one-band complex images HH, HV or VH, and VV (monostatic case <=> HV = VH).\n"
"The H-alpha-A decomposition consists in averaging 3x3 complex coherency matrices (incoherent analysis); the user must provide the size of the averaging window, thanks to the parameter inco.kernelsize.\n "
"The applications returns a float vector image, made up of three channels : H (entropy), Alpha, A (Anisotropy)." );
"All the decompositions implemented are intended for the mono-static case (transmitter and receiver are co-located).\n"
"There are two kinds of decomposition : coherent ones and incoherent ones.\n"
"In the coherent case, only the Pauli decomposition is available.\n"
"In the incoherent case, there the decompositions available : Huynen, Barnes, and H-alpha-A.\n"
"User must provide three one-band complex images HH, HV or VH, and VV (mono-static case <=> HV = VH).\n"
"Incoherent decompositions consist in averaging 3x3 complex coherency/covariance matrices; the user must provide the size of the averaging window, thanks to the parameter inco.kernelsize.\n "
);
SetDocLimitations("None");
SetDocLimitations("Some decompositions output real images, while this application outputs complex images for general purpose.\n"
"Users should pay attention to extract the real part of the results provided by this application.\n");
SetDocAuthors("OTB-Team");
SetDocSeeAlso("SARPolarMatrixConvert, SARPolarSynth");
......@@ -103,15 +120,21 @@ private:
AddParameter(ParameterType_ComplexInputImage, "invv", "Input Image");
SetParameterDescription("invv", "Input image (VV)");
AddParameter(ParameterType_OutputImage, "out", "Output Image");
AddParameter(ParameterType_ComplexOutputImage, "out", "Output Image");
SetParameterDescription("out", "Output image");
AddParameter(ParameterType_Choice, "decomp", "Decompositions");
AddChoice("decomp.haa","H-alpha-A decomposition");
SetParameterDescription("decomp.haa","H-alpha-A decomposition");
AddChoice("decomp.haa","H-alpha-A incoherent decomposition");
SetParameterDescription("decomp.haa","H-alpha-A incoherent decomposition");
AddChoice("decomp.barnes","Barnes incoherent decomposition");
SetParameterDescription("decomp.barnes","Barnes incoherent decomposition");
AddChoice("decomp.huynen","Huynen incoherent decomposition");
SetParameterDescription("decomp.huynen","Huynen incoherent decomposition");
AddChoice("decomp.pauli","Pauli coherent decomposition");
SetParameterDescription("decomp.pauli","Pauli coherent decomposition");
AddParameter(ParameterType_Group,"inco","Incoherent decompositions");
SetParameterDescription("inco","This group allows setting parameters related to the incoherent decompositions.");
SetParameterDescription("inco","This group allows to set parameters related to the incoherent decompositions.");
AddParameter(ParameterType_Int, "inco.kernelsize", "Kernel size for spatial incoherent averaging.");
SetParameterDescription("inco.kernelsize", "Minute (0-59)");
......@@ -146,14 +169,39 @@ private:
if ( (!inhv) && (!invh) )
otbAppLogFATAL( << "Parameter inhv or invh not set. Please provide a HV or a VH complex image.");
m_SRFilter = SRFilterType::New();
m_HAFilter = HAFilterType::New();
m_MeanFilter = PerBandMeanFilterType::New();
MeanFilterType::InputSizeType radius;
m_BarnesFilter = BarnesFilterType::New();
m_HuynenFilter = HuynenFilterType::New();
m_PauliFilter = PauliFilterType::New();
m_Concatener = ListConcatenerFilterType::New();
m_ImageList = ImageListType::New();
switch (GetParameterInt("decomp"))
{
case 0: // H-alpha-A
m_SRFilter = SRFilterType::New();
m_HAFilter = HAFilterType::New();
m_MeanFilter = PerBandMeanFilterType::New();
if (inhv)
m_SRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("inhv"));
else if (invh)
m_SRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("invh"));
m_SRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
m_SRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
radius.Fill( GetParameterInt("inco.kernelsize") );
m_MeanFilter->GetFilter()->SetRadius(radius);
m_MeanFilter->SetInput(m_SRFilter->GetOutput());
m_HAFilter->SetInput(m_MeanFilter->GetOutput());
SetParameterComplexOutputImage("out", m_HAFilter->GetOutput() );
break;
case 1: // Barnes
if (inhv)
m_SRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("inhv"));
else if (invh)
......@@ -162,14 +210,49 @@ private:
m_SRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
m_SRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
MeanFilterType::InputSizeType radius;
radius.Fill( GetParameterInt("inco.kernelsize") );
m_MeanFilter->GetFilter()->SetRadius(radius);
m_MeanFilter->SetInput(m_SRFilter->GetOutput());
m_BarnesFilter->SetInput(m_MeanFilter->GetOutput());
SetParameterComplexOutputImage("out", m_BarnesFilter->GetOutput() );
break;
case 2: // Huynen
if (inhv)
m_SRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("inhv"));
else if (invh)
m_SRFilter->SetInputHV_VH(GetParameterComplexDoubleImage("invh"));
m_SRFilter->SetInputHH(GetParameterComplexDoubleImage("inhh"));
m_SRFilter->SetInputVV(GetParameterComplexDoubleImage("invv"));
radius.Fill( GetParameterInt("inco.kernelsize") );
m_MeanFilter->GetFilter()->SetRadius(radius);
m_MeanFilter->SetInput(m_SRFilter->GetOutput());
m_HAFilter->SetInput(m_MeanFilter->GetOutput());
SetParameterOutputImage("out", m_HAFilter->GetOutput() );
m_HuynenFilter->SetInput(m_MeanFilter->GetOutput());
SetParameterComplexOutputImage("out", m_HuynenFilter->GetOutput() );
break;
case 3: // Pauli
m_ImageList->PushBack(GetParameterComplexDoubleImage("inhh"));
if (inhv)
m_ImageList->PushBack(GetParameterComplexDoubleImage("inhv"));
else if (invh)
m_ImageList->PushBack(GetParameterComplexDoubleImage("invh"));
m_ImageList->PushBack(GetParameterComplexDoubleImage("invv"));
m_Concatener->SetInput( m_ImageList );
m_PauliFilter->SetInput(m_Concatener->GetOutput());
SetParameterComplexOutputImage("out", m_PauliFilter->GetOutput() );
break;
}
......@@ -179,7 +262,12 @@ private:
//MCPSFilterType::Pointer m_MCPSFilter;
SRFilterType::Pointer m_SRFilter;
HAFilterType::Pointer m_HAFilter;
BarnesFilterType::Pointer m_BarnesFilter;
HuynenFilterType::Pointer m_HuynenFilter;
PauliFilterType::Pointer m_PauliFilter;
PerBandMeanFilterType::Pointer m_MeanFilter;
ListConcatenerFilterType::Pointer m_Concatener;
ImageListType::Pointer m_ImageList;
};
......
otb_module_test()
#----------- SARDecompositions TESTS ----------------
otb_test_application(NAME apTvSARDecompositions
otb_test_application(NAME apTvSARDecompositionsHAAlpha
APP SARDecompositions
OPTIONS
-inhh ${INPUTDATA}/RSAT_imageryC_HH.tif
......@@ -11,4 +11,37 @@ otb_test_application(NAME apTvSARDecompositions
-out ${TEMP}/apTvReciprocalHAlpha.tif
)
otb_test_application(NAME apTvSARDecompositionsBarnes
APP SARDecompositions
OPTIONS
-inhh ${INPUTDATA}/RSAT_imageryC_HH.tif
-inhv ${INPUTDATA}/RSAT_imageryC_HV.tif
-invv ${INPUTDATA}/RSAT_imageryC_VV.tif
-decomp barnes
-out ${TEMP}/apTvReciprocalBarnes.tif
)
otb_test_application(NAME apTvSARDecompositionsHuynen
APP SARDecompositions
OPTIONS
-inhh ${INPUTDATA}/RSAT_imageryC_HH.tif
-inhv ${INPUTDATA}/RSAT_imageryC_HV.tif
-invv ${INPUTDATA}/RSAT_imageryC_VV.tif
-decomp huynen
-out ${TEMP}/apTvReciprocalHuynen.tif
)
otb_test_application(NAME apTvSARDecompositionsPauli
APP SARDecompositions
OPTIONS
-inhh ${INPUTDATA}/RSAT_imageryC_HH.tif
-inhv ${INPUTDATA}/RSAT_imageryC_HV.tif
-invv ${INPUTDATA}/RSAT_imageryC_VV.tif
-decomp pauli
-out ${TEMP}/apTvReciprocalPauli.tif
)
......@@ -264,7 +264,7 @@ private:
AddParameter(ParameterType_Choice, "conv", "Convertion");
AddParameter(ParameterType_Choice, "conv", "Conversion");
//Monostatic case
......
......@@ -319,7 +319,7 @@ private:
SetDocName("Stereo Framework");
SetDocLongDescription("Compute the ground elevation with a stereo block matching algorithm "
"between one or mulitple stereo pair in sensor geometry. The output is projected in "
"between one or multiple stereo pair in sensor geometry. The output is projected in "
"desired geographic or cartographic map projection (UTM by default). The pipeline is made of the following steps:\n"
"for each sensor pair :\n"
"\t- compute the epipolar displacement grids from the stereo pair (direct and inverse)\n"
......
......@@ -56,7 +56,7 @@ private:
SetDocLongDescription("Generate a vector data from Open Street Map data. A DEM could be use. By default, the entire layer is downloaded, an image can be use as support for the OSM data. The application can provide also available classes in layers . This application required an Internet access. Information about the OSM project : http://www.openstreetmap.fr/");
SetDocLimitations("None");
SetDocAuthors("OTB-Team");
SetDocSeeAlso("Convertion");
SetDocSeeAlso("Conversion");
AddDocTag(Tags::Meta);
......
......@@ -30,7 +30,7 @@ namespace otb
* \brief Convert an itk::RGBApixel<InternalType> into another pixel
* type
*
* To be usable, the desired convertion must be implemented through
* To be usable, the desired conversion must be implemented through
* partial specialisation mecanism.
*
*
......
......@@ -31,7 +31,7 @@ namespace otb
* \class VariableLengthVectorConverter
* \brief Convert any data container type into a VariableLengthVector.
*
* To be usable, the desired convertion must be implemented through
* To be usable, the desired conversion must be implemented through
* partial specialisation mecanism.
*
*
......
......@@ -66,7 +66,7 @@ public:
OutputPixelType* outputData , size_t size);
protected:
/** Convertions related to complex */
/** Conversions related to complex */
static void ConvertGrayToComplex(InputPixelType * inputData,
OutputPixelType * OutputData, size_t size);
......
......@@ -61,14 +61,14 @@ KullbackLeiblerSupervizedDistance<TInput1, TInput2, TInputROIImage, TOutput>
typedef itk::ConstNeighborhoodIterator<
typename ROIConversionType1::OutputImageType> ROIInputType1;
typename ROIConversionType1::Pointer convertion1 = ROIConversionType1::New();
convertion1->SetInputImage(img1);
convertion1->SetROIImage(imgROI);
convertion1->Update();
typename ROIConversionType1::Pointer conversion1 = ROIConversionType1::New();
conversion1->SetInputImage(img1);
conversion1->SetROIImage(imgROI);
conversion1->Update();
if (m_CumROI1 != NULL) delete m_CumROI1;
m_CumROI1 = new CumulantsForEdgeworth<ROIInputType1> (convertion1->GetOutput());
m_CumROI1 = new CumulantsForEdgeworth<ROIInputType1> (conversion1->GetOutput());
if (!m_CumROI1->IsDataAvailable())
{
......@@ -84,14 +84,14 @@ KullbackLeiblerSupervizedDistance<TInput1, TInput2, TInputROIImage, TOutput>
typedef itk::ConstNeighborhoodIterator<
typename ROIConversionType2::OutputImageType> ROIInputType2;
typename ROIConversionType2::Pointer convertion2 = ROIConversionType2::New();
convertion2->SetInputImage(img2);
convertion2->SetROIImage(imgROI);
convertion2->Update();
typename ROIConversionType2::Pointer conversion2 = ROIConversionType2::New();
conversion2->SetInputImage(img2);
conversion2->SetROIImage(imgROI);
conversion2->Update();
if (m_CumROI2 != NULL) delete m_CumROI2;
m_CumROI2 = new CumulantsForEdgeworth<ROIInputType2> (convertion2->GetOutput());
m_CumROI2 = new CumulantsForEdgeworth<ROIInputType2> (conversion2->GetOutput());
if (!m_CumROI2->IsDataAvailable())
{
......
......@@ -50,7 +50,7 @@ namespace otb
* - Each change map is orthogonal to the others.
*
* This is a statistical method which can handle different modalities
* and even differents bands and number of bands between images.
* and even different bands and number of bands between images.
*
* If numbers of bands in image 1 and 2 are equal, then change maps
* are sorted by increasing correlation. If number of bands is
......
/*=========================================================================
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.
=========================================================================*/
#ifndef __ReciprocalBarnesDecompImageFilter_h
#define __ReciprocalBarnesDecompImageFilter_h
#include "otbUnaryFunctorImageFilter.h"
#include "otbMath.h"
#include "vnl/algo/vnl_complex_eigensystem.h"
#include <algorithm>
namespace otb
{
namespace Functor {
/** \class otbBarnesDecompFunctor
*
* \brief Evaluate the Huynen decomposition from the reciprocal Sinclair matrix image.
*
* \ingroup OTBPolarimetry
*/
template< class TInput, class TOutput>
class ReciprocalBarnesDecompFunctor
{
public:
typedef typename std::complex<double> ComplexType;
typedef vnl_matrix<ComplexType> VNLMatrixType;
typedef vnl_vector<ComplexType> VNLVectorType;
typedef vnl_vector<double> VNLDoubleVectorType;
typedef std::vector<double> VectorType;
typedef typename TOutput::ValueType OutputValueType;
inline TOutput operator()( const TInput & Covariance ) const
{
TOutput result;
result.SetSize(m_NumberOfComponentsPerPixel);
VNLMatrixType qi(3,1);
VNLMatrixType cov(3, 3);
cov[0][0] = ComplexType(Covariance[0]);
cov[0][1] = ComplexType(Covariance[1]);
cov[0][2] = ComplexType(Covariance[2]);
cov[1][0] = std::conj(ComplexType(Covariance[1]));
cov[1][1] = ComplexType(Covariance[3]);
cov[1][2] = ComplexType(Covariance[4]);
cov[2][0] = std::conj(ComplexType(Covariance[2]));
cov[2][1] = std::conj(ComplexType(Covariance[4]));
cov[2][2] = ComplexType(Covariance[5]);
qi[0][0]=ComplexType(1.,0.);
qi[1][0]=ComplexType(0.,0.);
qi[2][0]=ComplexType(0.,0.);
ComplexType norm = (qi.conjugate_transpose()*cov*qi)[0][0];
VNLMatrixType ki = cov*qi / std::sqrt(norm);
result[0] = static_cast<OutputValueType>(ki[0][0]);
result[1] = static_cast<OutputValueType>(ki[1][0]);
result[2] = static_cast<OutputValueType>(ki[2][0]);
qi[0][0]=ComplexType(0.,0.);
qi[1][0]=ComplexType(1./std::sqrt(2.),0.);
qi[2][0]=ComplexType(0.,1./std::sqrt(2.));
norm = (qi.conjugate_transpose()*cov*qi)[0][0];
ki = cov*qi / std::sqrt(norm);
result[3] = static_cast<OutputValueType>(ki[0][0]);
result[4] = static_cast<OutputValueType>(ki[1][0]);
result[5] = static_cast<OutputValueType>(ki[2][0]);
qi[0][0]=ComplexType(0.,0.);
qi[1][0]=ComplexType(0.,1./std::sqrt(2.));
qi[2][0]=ComplexType(1./std::sqrt(2.),0.);
norm = (qi.conjugate_transpose()*cov*qi)[0][0];
ki = cov*qi / std::sqrt(norm);
result[6] = static_cast<OutputValueType>(ki[0][0]);
result[7] = static_cast<OutputValueType>(ki[1][0]);
result[8] = static_cast<OutputValueType>(ki[2][0]);
return result;
}
unsigned int GetOutputSize()
{
return m_NumberOfComponentsPerPixel;
}
/** Constructor */
ReciprocalBarnesDecompFunctor() : m_Epsilon(1e-6) {}
/** Destructor */
virtual ~ReciprocalBarnesDecompFunctor() {}
private:
itkStaticConstMacro(m_NumberOfComponentsPerPixel, unsigned int, 9);
const double m_Epsilon;
};
}
/** \class otbBarnesDecompImageFilter
* \brief Compute the Barnes decomposition image (9 complex channels)
* from the Reciprocal Covariance image (6 complex channels)
*
* For more details, please refer to the class ReciprocalBarnesDecompFunctor.
*
* \ingroup OTBPolarimetry
* \sa ReciprocalBarnesDecompFunctor
*/
template <class TInputImage, class TOutputImage>
class ITK_EXPORT ReciprocalBarnesDecompImageFilter :
public otb::UnaryFunctorImageFilter<TInputImage, TOutputImage, Functor::ReciprocalBarnesDecompFunctor<
typename TInputImage::PixelType, typename TOutputImage::PixelType> >
{
public:
/** Standard class typedefs. */
typedef ReciprocalBarnesDecompImageFilter Self;
typedef typename Functor::ReciprocalBarnesDecompFunctor<
typename TInputImage::PixelType, typename TOutputImage::PixelType> FunctionType;
typedef otb::UnaryFunctorImageFilter<TInputImage, TOutputImage, FunctionType> Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Runtime information support. */
itkTypeMacro(ReciprocalBarnesDecompImageFilter, UnaryFunctorImageFilter);
protected:
ReciprocalBarnesDecompImageFilter() {}
virtual ~ReciprocalBarnesDecompImageFilter() {}
private:
ReciprocalBarnesDecompImageFilter(const Self&); //purposely not implemented
void operator=(const Self&); //purposely not implemented
};
} // end namespace otb
#endif
......@@ -50,9 +50,6 @@ namespace Functor {
* - \f$ if p[i] > 1, p[i]=1 \f$
* - \f$ if \alpha_{i} > 90, \alpha_{i}=90 \f$
*
* \ingroup SARPolarimetry
*
*
* \ingroup OTBPolarimetry
*/
template< class TInput, class TOutput>
......@@ -194,10 +191,9 @@ private:
*
* For more details, please refer to the class ReciprocalHAlphaFunctor.
*
* \ingroup SARPOlarimetry
* \ingroup OTBPolarimetry
* \sa ReciprocalHAlphaFunctor
*
* \ingroup OTBPolarimetry
*/
template <class TInputImage, class TOutputImage>
class ITK_EXPORT ReciprocalHAlphaImageFilter :
......
/*=========================================================================
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.
=========================================================================*/
#ifndef __ReciprocalHuynenDecompImageFilter_h
#define __ReciprocalHuynenDecompImageFilter_h
#include "otbUnaryFunctorImageFilter.h"
namespace otb
{
namespace Functor {
/** \class ReciprocalHuynenDecompFunctor
*
* \brief Evaluate the Huynen decomposition from the reciprocal Sinclair matrix image.
*
* \ingroup OTBPolarimetry
*/
template< class TInput, class TOutput>
class ReciprocalHuynenDecompFunctor
{
public:
typedef typename TOutput::ValueType OutputValueType;