Commit 6b53742d authored by Romain Garrigues's avatar Romain Garrigues
Browse files

MàJ de commentaires sur la partie Orthorectification

parent fb3a4718
/*=========================================================================
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 __otbDEMReaderFilter_h
#define __otbDEMReaderFilter_h
#include "itkIndent.h"
#include "itkImageSource.h"
#include "otbImage.h"
#include <iostream>
#include <stdio.h>
#include "elevation/ossimElevManager.h"
#include "base/ossimFilename.h"
#include "itkImageRegionIteratorWithIndex.h"
#include "itkIndent.h"
namespace otb
{
/** \class DEMReaderFilter
*
* \brief Class for Reading a DEM data
*
* This class is based on ossimElevManager. It takes in input the UL and LR geographic coordinates and the spacing.
* Handle DTED and SRTM formats.
* \ingroup Images
*
*/
template <class TDEMImage>
class ITK_EXPORT DEMReaderFilter:
public itk::ImageSource<Image<typename TDEMImage::PixelType,2, 0> >
{
public :
/** Standard class typedefs. */
typedef itk::Indent Indent;
typedef TDEMImage DEMImageType;
typedef typename DEMImageType::Pointer DEMImagePointerType;
typedef typename DEMImageType::PixelType PixelType;
typedef DEMReaderFilter Self;
typedef itk::ImageSource<Image<typename DEMImageType::PixelType,2, 0> > Superclass;
typedef itk::SmartPointer<Self> Pointer;
typedef itk::SmartPointer<const Self> ConstPointer;
typedef Image<PixelType,2> OutputImageType;
typedef typename Superclass::Pointer OutputImagePointer;
typedef typename OutputImageType::SpacingType SpacingType;
typedef typename OutputImageType::SizeType SizeType;
typedef typename OutputImageType::PointType PointType;
typedef typename OutputImageType::IndexType IndexType;
typedef typename Superclass::OutputImageRegionType OutputImageRegionType;
typedef itk::ImageRegionIteratorWithIndex< Image<PixelType,2, 0> > ImageIteratorType;
/** Method for creation through the object factory. */
itkNewMacro(Self);
/** Run-time type information (and related methods). */
itkTypeMacro(DEMReader,ImageSource);
/** Set the spacing. */
itkSetMacro(Spacing,SpacingType);
itkGetConstReferenceMacro(Spacing,SpacingType);
/** Set the Upper Left coordinates. */
itkSetMacro(Ul,PointType);
itkGetConstReferenceMacro(Ul,PointType);
/** Set the Lower Right coordinates. */
itkSetMacro(Lr,PointType);
itkGetConstReferenceMacro(Lr,PointType);
/** Set the spacing. */
void SetSpacing(const double* spacing);
/** Try to open the DEM directory. */
bool OpenDEMDirectory(char* &DEMDirectory);
/** Compute the height above MSL(Mean Sea Level) of the point. */
virtual double GetHeightAboveMSL(const PointType& worldPoint);
protected:
DEMReaderFilter();
~DEMReaderFilter();
void PrintSelf(std::ostream& os, Indent indent) const;
void GenerateData();
virtual void GenerateOutputInformation();
ossimElevManager* m_ElevManager;
//DEMImagePointerType m_DEMImage;
SpacingType m_Spacing;
PointType m_Ul;
PointType m_Lr;
};
} // namespace otb
#ifndef OTB_MANUAL_INSTANTIATION
#include "otbDEMReaderFilter.txx"
#endif
#endif
/*=========================================================================
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 __otbDEMReaderFilter_txx
#define __otbDEMReaderFilter_txx
#include "otbDEMReaderFilter.h"
#include "otbMacro.h"
namespace otb
{
template<class TDEMImage>
DEMReaderFilter<TDEMImage>
::DEMReaderFilter()
{
m_ElevManager=ossimElevManager::instance();
//m_DEMImage = DEMImageType::New();
m_Spacing[0]=0;
m_Spacing[1]=0;
m_Ul[0]=0;
m_Ul[1]=0;
m_Lr[0]=0;
m_Lr[1]=0;
}
template<class TDEMImage>
DEMReaderFilter<TDEMImage>
::~DEMReaderFilter()
{
delete m_ElevManager;
}
///Methode pour specifier un dossier contenant des DEM
template<class TDEMImage>
bool
DEMReaderFilter<TDEMImage>::
OpenDEMDirectory(char* &DEMDirectory)
{
ossimFilename ossimDEMDir;
ossimDEMDir=ossimFilename(DEMDirectory);
bool result= false;
if (m_ElevManager->openDirectory(ossimDEMDir))
{
result= true;
}
return result;
}
///Methode pour calculer l'altitude d'un point geographique
template<class TDEMImage>
double
DEMReaderFilter<TDEMImage>::
GetHeightAboveMSL(const PointType& worldPoint)
{
float height;
ossimGpt ossimWorldPoint;
ossimWorldPoint.lat=worldPoint[0];
ossimWorldPoint.lon=worldPoint[1];
height=m_ElevManager->getHeightAboveMSL(ossimWorldPoint);
return height;
}
///Methode SetSpacing
template<class TDEMImage>
void DEMReaderFilter<TDEMImage>
::SetSpacing( const double* spacing)
{
SpacingType s(spacing);
this->SetSpacing(s);
}
///Methode GenerateOutputInformation
template <class TDEMImage>
void DEMReaderFilter<TDEMImage>
::GenerateOutputInformation()
{
DEMImageType *output;
IndexType start;
start[0]=0;
start[1]=0;
PointType origin;
origin[0]=m_Ul[0]; //latitude de l'origine.
origin[1]=m_Ul[1]; //longitude de l'origine.
output = this->GetOutput(0);
// Calcul de la taille de l'image:
SizeType size;
size[0]=int (abs(((m_Lr[0]-m_Ul[0])/m_Spacing[0]))+1.5);
size[1]=int (abs(((m_Lr[1]-m_Ul[1])/m_Spacing[1]))+1.5);
// On specifie les parametres de la region
OutputImageRegionType largestPossibleRegion;
largestPossibleRegion.SetSize( size );
largestPossibleRegion.SetIndex( start );
output->SetLargestPossibleRegion( largestPossibleRegion );
output->SetSpacing(m_Spacing);
output->SetOrigin(m_Ul);
}
///Methode GenerateData
template <class TDEMImage>
void
DEMReaderFilter<TDEMImage>
::GenerateData()
{
DEMImagePointerType m_DEMImage = this->GetOutput();
// allocate the output buffer
m_DEMImage->SetBufferedRegion( m_DEMImage->GetRequestedRegion() );
m_DEMImage->Allocate();
// Create an iterator that will walk the output region
ImageIteratorType outIt = ImageIteratorType(m_DEMImage,m_DEMImage->GetRequestedRegion());
// Walk the output image, evaluating the height at each pixel
IndexType currentindex;
PointType phyPoint;
double height;
for (outIt.GoToBegin(); !outIt.IsAtEnd(); ++outIt)
{
currentindex=outIt.GetIndex();
m_DEMImage->TransformIndexToPhysicalPoint(currentindex, phyPoint);
ossimGpt ossimWorldPoint;
ossimWorldPoint.lat=phyPoint[0];
ossimWorldPoint.lon=phyPoint[1];
height=m_ElevManager->getHeightAboveMSL(ossimWorldPoint); //Calcul de l'altitude
otbMsgDebugMacro(<<" HeightAboveMSL: "<<height);
if (height>-static_cast<double>(32768)) //On teste si les fichiers MNT recouvre la zone g�ographique demand�e (-32768 = theNullHeightValue)
{
m_DEMImage->SetPixel(currentindex, static_cast<PixelType>(height) );
} //On remplit l'image
else
{
m_DEMImage->SetPixel(currentindex, static_cast<PixelType>(0) );
}
}
}
template <class TDEMImage>
void
DEMReaderFilter<TDEMImage>
::PrintSelf(std::ostream& os, Indent indent) const
{
Superclass::PrintSelf(os,indent);
os << indent << "Spacing:"<< m_Spacing[0] << ","<< m_Spacing[1] << std::endl;
os << indent << "Lr:"<< m_Lr[0] << ","<< m_Lr[1] << std::endl;
os << indent << "Ul:"<< m_Ul[0] << ","<< m_Ul[1] << std::endl;
}
} // namespace otb
#endif
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