diff --git a/Code/IO/otbImage.h b/Code/IO/otbImage.h index 7b017afe54452f3dec426d57f8c19c17e27a1b16..c195513938500bc46248669a5b5525fc00a36fd2 100755 --- a/Code/IO/otbImage.h +++ b/Code/IO/otbImage.h @@ -31,7 +31,7 @@ namespace otb */ template <class TPixel, unsigned int VImageDimension=2> class ITK_EXPORT Image : public itk::Image<TPixel, VImageDimension>, - public ImageBase + public otb::ImageBase { public: @@ -53,31 +53,31 @@ public: itkTypeMacro(Image, itk::Image); /** Get the projection coordinate system of the image. */ - std::string GetProjectionRef( void ); + virtual std::string GetProjectionRef( void ); /** Get the GCP projection coordinates of the image. */ - std::string GetGCPProjection( void ); + virtual std::string GetGCPProjection( void ); - unsigned int GetGCPCount( void ); + virtual unsigned int GetGCPCount( void ); - OTB_GCP & GetGCPs ( unsigned int GCPnum ); + virtual OTB_GCP & GetGCPs ( unsigned int GCPnum ); - std::string GetGCPId( unsigned int GCPnum ); - std::string GetGCPInfo( unsigned int GCPnum ); - double GetGCPRow( unsigned int GCPnum ); - double GetGCPCol( unsigned int GCPnum ); - double GetGCPX( unsigned int GCPnum ); - double GetGCPY( unsigned int GCPnum ); - double GetGCPZ( unsigned int GCPnum ); + virtual std::string GetGCPId( unsigned int GCPnum ); + virtual std::string GetGCPInfo( unsigned int GCPnum ); + virtual double GetGCPRow( unsigned int GCPnum ); + virtual double GetGCPCol( unsigned int GCPnum ); + virtual double GetGCPX( unsigned int GCPnum ); + virtual double GetGCPY( unsigned int GCPnum ); + virtual double GetGCPZ( unsigned int GCPnum ); /** Get the six coefficients of affine geoTtransform. */ - VectorType GetGeoTransform( void ); + virtual VectorType GetGeoTransform( void ); /** Get image corners. */ - VectorType GetUpperLeftCorner( void ); - VectorType GetUpperRightCorner( void ); - VectorType GetLowerLeftCorner( void ); - VectorType GetLowerRightCorner( void ); + virtual VectorType GetUpperLeftCorner( void ); + virtual VectorType GetUpperRightCorner( void ); + virtual VectorType GetLowerLeftCorner( void ); + virtual VectorType GetLowerRightCorner( void ); void PrintSelf(std::ostream& os, Indent indent) const; diff --git a/Code/IO/otbImage.txx b/Code/IO/otbImage.txx index e6a8a0ce3d02ee38e38f116bd9b34ae5811916d7..cc1fd1f1bc15bfee394e9186caa33b0dbb904780 100755 --- a/Code/IO/otbImage.txx +++ b/Code/IO/otbImage.txx @@ -9,7 +9,8 @@ $Id: $ =========================================================================*/ - +#ifndef __otbImage_txx +#define __otbImage_txx #ifdef _MSC_VER #pragma warning ( disable : 4786 ) @@ -98,25 +99,25 @@ ImageBase::VectorType Image<TPixel, VImageDimension>::GetGeoTransform( void ) } template <class TPixel, unsigned int VImageDimension> -ImageBase:: VectorType Image<TPixel, VImageDimension>::GetUpperLeftCorner( void ) +ImageBase::VectorType Image<TPixel, VImageDimension>::GetUpperLeftCorner( void ) { return ( this->ImageBase::GetUpperLeftCorner( this->GetMetaDataDictionary() ) ); } template <class TPixel, unsigned int VImageDimension> -ImageBase:: VectorType Image<TPixel, VImageDimension>::GetUpperRightCorner( void ) +ImageBase::VectorType Image<TPixel, VImageDimension>::GetUpperRightCorner( void ) { return ( this->ImageBase::GetUpperRightCorner( this->GetMetaDataDictionary() ) ); } template <class TPixel, unsigned int VImageDimension> -ImageBase:: VectorType Image<TPixel, VImageDimension>::GetLowerLeftCorner( void ) +ImageBase::VectorType Image<TPixel, VImageDimension>::GetLowerLeftCorner( void ) { return ( this->ImageBase::GetLowerLeftCorner( this->GetMetaDataDictionary() ) ); } template <class TPixel, unsigned int VImageDimension> -ImageBase:: VectorType Image<TPixel, VImageDimension>::GetLowerRightCorner( void ) +ImageBase::VectorType Image<TPixel, VImageDimension>::GetLowerRightCorner( void ) { return ( this->ImageBase::GetLowerRightCorner( this->GetMetaDataDictionary() ) ); } @@ -133,4 +134,4 @@ Image<TPixel, VImageDimension>::PrintSelf(std::ostream& os, Indent indent) const } // end namespace otb - +#endif diff --git a/Code/IO/otbImageBase.txx b/Code/IO/otbImageBase.cxx similarity index 98% rename from Code/IO/otbImageBase.txx rename to Code/IO/otbImageBase.cxx index 3a27d9769e736be166159d40e7498cd870a4c5a4..80c3082e376f285784541caecd423b232925cf94 100755 --- a/Code/IO/otbImageBase.txx +++ b/Code/IO/otbImageBase.cxx @@ -75,7 +75,7 @@ OTB_GCP & ImageBase::GetGCPs(MetaDataDictionaryType & dict, unsigned int GCPnum std::string key; ::itk::OStringStream lStream; - lStream << MetaDataKey::m_GCPParametersKey << GCPnum; + lStream << MetaDataKey::m_GCPParametersKey << GCPnum; key = lStream.str(); if(dict.HasKey(key)) @@ -91,7 +91,7 @@ std::string ImageBase::GetGCPId(MetaDataDictionaryType & dict, unsigned int GCPn std::string key; ::itk::OStringStream lStream; - lStream << MetaDataKey::m_GCPParametersKey << GCPnum; + lStream << MetaDataKey::m_GCPParametersKey << GCPnum; key = lStream.str(); if(dict.HasKey(key)) @@ -108,7 +108,7 @@ std::string ImageBase::GetGCPInfo(MetaDataDictionaryType & dict, unsigned int GC std::string key; ::itk::OStringStream lStream; - lStream << MetaDataKey::m_GCPParametersKey << GCPnum; + lStream << MetaDataKey::m_GCPParametersKey << GCPnum; key = lStream.str(); if(dict.HasKey(key)) @@ -125,7 +125,7 @@ double ImageBase::GetGCPRow(MetaDataDictionaryType & dict, unsigned int GCPnum ) std::string key; ::itk::OStringStream lStream; - lStream << MetaDataKey::m_GCPParametersKey << GCPnum; + lStream << MetaDataKey::m_GCPParametersKey << GCPnum; key = lStream.str(); @@ -143,7 +143,7 @@ double ImageBase::GetGCPCol(MetaDataDictionaryType & dict, unsigned int GCPnum ) std::string key; ::itk::OStringStream lStream; - lStream << MetaDataKey::m_GCPParametersKey << GCPnum; + lStream << MetaDataKey::m_GCPParametersKey << GCPnum; key = lStream.str(); @@ -161,7 +161,7 @@ double ImageBase::GetGCPX(MetaDataDictionaryType & dict, unsigned int GCPnum ) std::string key; ::itk::OStringStream lStream; - lStream << MetaDataKey::m_GCPParametersKey << GCPnum; + lStream << MetaDataKey::m_GCPParametersKey << GCPnum; key = lStream.str(); if(dict.HasKey(key)) @@ -178,7 +178,7 @@ double ImageBase::GetGCPY(MetaDataDictionaryType & dict, unsigned int GCPnum ) std::string key; ::itk::OStringStream lStream; - lStream << MetaDataKey::m_GCPParametersKey << GCPnum; + lStream << MetaDataKey::m_GCPParametersKey << GCPnum; key = lStream.str(); if(dict.HasKey(key)) @@ -195,7 +195,7 @@ double ImageBase::GetGCPZ(MetaDataDictionaryType & dict, unsigned int GCPnum ) std::string key; ::itk::OStringStream lStream; - lStream << MetaDataKey::m_GCPParametersKey << GCPnum; + lStream << MetaDataKey::m_GCPParametersKey << GCPnum; key = lStream.str(); if(dict.HasKey(key)) @@ -263,7 +263,7 @@ ImageBase::VectorType ImageBase::GetLowerRightCorner( MetaDataDictionaryType & d } void -ImageBase::PrintSelf(std::ostream& os, Indent indent, const MetaDataDictionaryType & dict) const +ImageBase::PrintSelf(std::ostream& os, itk::Indent indent, const MetaDataDictionaryType & dict) const { std::vector<std::string> keys = dict.GetKeys(); diff --git a/Code/IO/otbImageBase.h b/Code/IO/otbImageBase.h index 2dee98e9d50fa94c98087a196f803015f9c4465c..30e8534fe9c00fe18fec906fe742ee22caa2b7c8 100755 --- a/Code/IO/otbImageBase.h +++ b/Code/IO/otbImageBase.h @@ -16,11 +16,9 @@ #pragma warning ( disable : 4786 ) #endif -#include "itkImageBase.h" -#include "itkIndent.h" +#include "itkMetaDataDictionary.h" #include "otbMetaDataKey.h" -#include <gdal.h> #include <iostream> #include <string> @@ -103,7 +101,6 @@ public: void PrintSelf(std::ostream& os, Indent indent, const MetaDataDictionaryType & dict) const; -protected: ImageBase(); virtual ~ImageBase(){}; @@ -114,12 +111,8 @@ private: OTB_GCP m_GCP; }; - + } // end namespace otb -#ifndef OTB_MANUAL_INSTANTIATION -#include "otbImageBase.txx" -#endif - #endif diff --git a/Code/IO/otbMetaDataKey.h b/Code/IO/otbMetaDataKey.h index 387500138d760e2f5f85396354b0366e3fc0a01b..854f6f2ba7f8c806f92e3c5a8bbbd68bf3adeb71 100755 --- a/Code/IO/otbMetaDataKey.h +++ b/Code/IO/otbMetaDataKey.h @@ -31,7 +31,7 @@ namespace otb * key of metadata used in the metadata dictionary. * */ -class /*ITK_EXPORT*/ MetaDataKey +class ITK_EXPORT MetaDataKey { public: diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt index 25d6e42bd3fcaa0cfa7c0f4c83066ba80716ca20..487910430ff36baee92c531ccd33bf17d8282899 100755 --- a/Testing/Code/IO/CMakeLists.txt +++ b/Testing/Code/IO/CMakeLists.txt @@ -3,6 +3,7 @@ IF( NOT OTB_DISABLE_CXX_TESTING ) SET(BASELINE ${OTB_DATA_ROOT}/Baseline/Images) +SET(BASELINE_FILES ${OTB_DATA_ROOT}/Baseline/Files) SET(INPUTDATA ${OTB_DATA_ROOT}/Input) SET(TEMP ${OTBTesting_BINARY_DIR}/Temporary) #Images de teledetection (grosses images ) @@ -304,11 +305,6 @@ ADD_TEST(ioTvMultiChannelROI_SPOT52PNG_5 ${COMMON_TESTS} -startX 700 -startY 700 -sizeX 1000 -sizeY 1000 -channels 4 ) -ADD_TEST(ioTuotbImageTest ${IO_TESTS} - otbImageTest - ${IMAGEDATA}/SAR_ERS2_SLCI_SCENE1/DAT_01.001 - ) - # --- Ikonos PAN --- ADD_TEST(ioTvMultiChannelROI_IkonosPAN2PNG ${COMMON_TESTS} # --compare-image ${TOL} ${BASELINE}/ioExtractROI_IkonosPAN2PNG_100_100_77_300.png @@ -349,9 +345,39 @@ ADD_TEST(ioTvMultiChannelROI_QuickbirdXS2PNG ${COMMON_TESTS} -startX 100 -startY 100 -sizeX 77 -sizeY 300 -channels 1 2 3) - - - +ADD_TEST(ioTuOtbImageTestSAR_ERS ${IO_TESTS} + --compare-ascii ${BASELINE_FILES}/ioOtbImageTestSAR_ERS.txt + ${TEMP}/ioOtbImageTestSAR_ERS.txt + otbImageTest + ${IMAGEDATA}/SAR_ERS2_SLCI_SCENE1/DAT_01.001 + ${TEMP}/ioOtbImageTestSAR_ERS.txt) + +# --- Otb::Image Test --- +ADD_TEST(ioTuOtbImageTestRadarsat ${IO_TESTS} + --compare-ascii ${BASELINE_FILES}/ioOtbImageTestRadarsat.txt + ${TEMP}/ioOtbImageTestRadarsat.txt + otbImageTest + ${IMAGEDATA}/RADARSAT1/SCENE01/ + ${TEMP}/ioOtbImageTestRadarsat.txt) + +# --- Otb::VectorImage Test --- +ADD_TEST(ioTuOtbVectorImageTestRadarsat ${IO_TESTS} + --compare-ascii ${BASELINE_FILES}/ioOtbVectorImageTestRadarsat.txt + ${TEMP}/ioOtbVectorImageTestRadarsat.txt + otbVectorImageTest + ${IMAGEDATA}/RADARSAT1/SCENE01/ + ${TEMP}/ioOtbVectorImageTestRadarsat.txt) + + +# --- Otb::VectorImage Test --- +ADD_TEST(ioTuOtbVectorImageTestSpot5 ${IO_TESTS} + --compare-ascii ${BASELINE_FILES}/ioOtbVectorImageTestSpot5.txt + ${TEMP}/ioOtbVectorImageTestSpot5.txt + otbVectorImageTest + ${IMAGEDATA}/SPOT5_SCENE01/IMAGERY.TIF + ${TEMP}/ioOtbVectorImageTestSpot5.txt) + + SET(BasicIO_SRCS otbGDALImageIOTestCanRead.cxx otbCAIImageIOTestCanRead.cxx @@ -361,10 +387,11 @@ otbImageFileWriterTest.cxx otbVectorImageFileReaderWriterTest.cxx otbImageFileReaderRGBTest.cxx otbImageFileWriterRGBTest.cxx -otbImageTest.cxx otbMultiToMonoChannelExtractROISAR.cxx otbImageFileReaderERS.cxx otbStreamingImageFilterTest.cxx +otbImageTest.cxx +otbVectorImageTest.cxx ) INCLUDE_DIRECTORIES("${OTBTesting_BINARY_DIR}") diff --git a/Testing/Code/IO/otbIOTests.cxx b/Testing/Code/IO/otbIOTests.cxx index 5592b6c520136ec95a64f927905666a649ac6552..35108488425e14c3d5834f409e01858600c1bb24 100755 --- a/Testing/Code/IO/otbIOTests.cxx +++ b/Testing/Code/IO/otbIOTests.cxx @@ -23,4 +23,5 @@ REGISTER_TEST(otbImageTest); REGISTER_TEST(otbMultiToMonoChannelExtractROISAR); REGISTER_TEST(otbImageFileReaderERS); REGISTER_TEST(otbStreamingImageFilterTest); +REGISTER_TEST(otbVectorImageTest); } diff --git a/Testing/Code/IO/otbImageTest.cxx b/Testing/Code/IO/otbImageTest.cxx index 10d4e5ab699eeb2ded5a229c90895e87c8863cff..12e4a606dcc9a9b6ca168c8eb9fa3ddac0e93d59 100755 --- a/Testing/Code/IO/otbImageTest.cxx +++ b/Testing/Code/IO/otbImageTest.cxx @@ -18,11 +18,11 @@ #include "itkExceptionObject.h" #include <iostream> +#include <fstream> #include <string> #include "otbImage.h" #include "otbImageFileReader.h" -#include "otbMetaDataKey.h" int otbImageTest(int argc, char* argv[]) @@ -31,11 +31,16 @@ int otbImageTest(int argc, char* argv[]) { // Verify the number of parameters in the command line const char * inputFilename = argv[1]; + const char * outputAsciiFilename = argv[2]; // unsigned int GCPnum((unsigned int)::atoi(argv[2])); typedef unsigned char InputPixelType; const unsigned int Dimension = 2; + std::ofstream file; + + file.open(outputAsciiFilename); + typedef otb::Image< InputPixelType, Dimension > InputImageType; InputImageType::Pointer image = InputImageType::New(); @@ -50,70 +55,74 @@ int otbImageTest(int argc, char* argv[]) image = reader->GetOutput(); + file << "------ IMAGE --------" << std::endl; std::cout << "------ IMAGE --------" << std::endl; +// Image n'est pas ecrit dans le fichier car des pointeurs sont affichés, donc la valeur dépend de l'instanciation +// -> pour pouvoir faire de tests de non regression sur la sortie ecrite dans le fichier ASCII std::cout << image << std::endl; std::cout << "---------------------" << std::endl; - std::cout << "Spacing " << image->GetSpacing() << std::endl; - std::cout << "Origin " << image->GetOrigin() << std::endl; + file << "Spacing " << image->GetSpacing() << std::endl; + file << "Origin " << image->GetOrigin() << std::endl; - std::cout << "Projection REF " << image->GetProjectionRef() << std::endl; + file << "Projection REF " << image->GetProjectionRef() << std::endl; - std::cout << "GCP Projection " << image->GetGCPProjection() << std::endl; + file << "GCP Projection " << image->GetGCPProjection() << std::endl; unsigned int GCPCount = image->GetGCPCount(); - std::cout << "GCP Count " << image->GetGCPCount() << std::endl; + file << "GCP Count " << image->GetGCPCount() << std::endl; for(unsigned int GCPnum = 0 ; GCPnum < GCPCount ; GCPnum++ ) { - std::cout << "GCP[" << GCPnum << "] Id " << image->GetGCPId(GCPnum) << std::endl; - std::cout << "GCP[" << GCPnum << "] Info " << image->GetGCPInfo(GCPnum) << std::endl; - std::cout << "GCP[" << GCPnum << "] Row " << image->GetGCPRow(GCPnum) << std::endl; - std::cout << "GCP[" << GCPnum << "] Col " << image->GetGCPCol(GCPnum) << std::endl; - std::cout << "GCP[" << GCPnum << "] X " << image->GetGCPX(GCPnum) << std::endl; - std::cout << "GCP[" << GCPnum << "] Y " << image->GetGCPY(GCPnum) << std::endl; - std::cout << "GCP[" << GCPnum << "] Z " << image->GetGCPZ(GCPnum) << std::endl; - std::cout << "----------------" << std::endl; + file << "GCP[" << GCPnum << "] Id " << image->GetGCPId(GCPnum) << std::endl; + file << "GCP[" << GCPnum << "] Info " << image->GetGCPInfo(GCPnum) << std::endl; + file << "GCP[" << GCPnum << "] Row " << image->GetGCPRow(GCPnum) << std::endl; + file << "GCP[" << GCPnum << "] Col " << image->GetGCPCol(GCPnum) << std::endl; + file << "GCP[" << GCPnum << "] X " << image->GetGCPX(GCPnum) << std::endl; + file << "GCP[" << GCPnum << "] Y " << image->GetGCPY(GCPnum) << std::endl; + file << "GCP[" << GCPnum << "] Z " << image->GetGCPZ(GCPnum) << std::endl; + file << "----------------" << std::endl; } InputImageType::VectorType tab = image->GetGeoTransform(); - std::cout << "Geo Transform " << std::endl; + file << "Geo Transform " << std::endl; for(int i = 0 ; i < tab.size() ; i++ ) { - std::cout << " " <<i<<" -> "<<tab[i]<< std::endl; + file << " " <<i<<" -> "<<tab[i]<< std::endl; } tab.clear(); tab = image->GetUpperLeftCorner(); - std::cout << "Corners " << std::endl; + file << "Corners " << std::endl; for(int i = 0 ; i < tab.size() ; i++ ) { - std::cout << " UL[" <<i<<"] -> "<<tab[i]<< std::endl; + file << " UL[" <<i<<"] -> "<<tab[i]<< std::endl; } tab.clear(); tab = image->GetUpperRightCorner(); for(int i = 0 ; i < tab.size() ; i++ ) { - std::cout << " UR[" <<i<<"] -> "<<tab[i]<< std::endl; + file << " UR[" <<i<<"] -> "<<tab[i]<< std::endl; } tab.clear(); tab = image->GetLowerLeftCorner(); for(int i = 0 ; i < tab.size() ; i++ ) { - std::cout << " LL[" <<i<<"] -> "<<tab[i]<< std::endl; + file << " LL[" <<i<<"] -> "<<tab[i]<< std::endl; } tab.clear(); tab = image->GetLowerRightCorner(); for(int i = 0 ; i < tab.size() ; i++ ) { - std::cout << " LR[" <<i<<"] -> "<<tab[i]<< std::endl; + file << " LR[" <<i<<"] -> "<<tab[i]<< std::endl; } tab.clear(); + file.close(); } catch( itk::ExceptionObject & err )