diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt index 4b89ca0b525791df4c2f8da51c2352fc44301f18..0e1940787c593f991976cf2f9a42103489ccc1f1 100755 --- a/Testing/Code/IO/CMakeLists.txt +++ b/Testing/Code/IO/CMakeLists.txt @@ -141,6 +141,13 @@ ADD_TEST(ioTvONERAImageFileReader ${IO_TESTS} ${IMAGEDATA}/ONERA/spa3_0215_rad.ent ${TEMP}/ioImageFileReaderONERA.png ) +ADD_TEST(ioTvONERAImageFileReaderComplex ${IO_TESTS} +# --compare-image ${TOL} ${BASELINE}/ioImageFileReaderPNG2PNG_cthead1.png +# ${TEMP}/ioImageFileReaderPNG2PNG_cthead1.png + otbImageFileReaderONERAComplex + ${IMAGEDATA}/ONERA/spa3_0215_rad.ent + ${TEMP}/ioImageFileReaderONERAComplex.hd ) + # ------- otb::ImageFileReader pour CAI ------------------------------ # Niveau de Gris ADD_TEST(ioTvImageFileReaderPNG2PNG ${IO_TESTS} @@ -496,6 +503,7 @@ otbGDALImageIOTestCanRead.cxx otbCAIImageIOTestCanRead.cxx otbONERAImageIOTestCanRead.cxx otbImageFileReaderONERA.cxx +otbImageFileReaderONERAComplex.cxx otbCAIImageIOTestCanWrite.cxx otbImageFileReaderTest.cxx otbImageFileWriterTest.cxx diff --git a/Testing/Code/IO/otbIOTests.cxx b/Testing/Code/IO/otbIOTests.cxx index e9aa9b29290d4e6920aa3312afca8d3b219007fe..a9f7fd1e298e0679cd0d5a4ca892b361a52a73a7 100755 --- a/Testing/Code/IO/otbIOTests.cxx +++ b/Testing/Code/IO/otbIOTests.cxx @@ -24,6 +24,7 @@ REGISTER_TEST(otbImageTest); REGISTER_TEST(otbMultiToMonoChannelExtractROISAR); REGISTER_TEST(otbImageFileReaderERS); REGISTER_TEST(otbImageFileReaderONERATest); +REGISTER_TEST(otbImageFileReaderONERAComplex); REGISTER_TEST(otbStreamingImageFilterTest); REGISTER_TEST(otbStreamingImageFileWriterTest); REGISTER_TEST(otbVectorImageTest); diff --git a/Testing/Code/IO/otbImageFileReaderONERAComplex.cxx b/Testing/Code/IO/otbImageFileReaderONERAComplex.cxx new file mode 100644 index 0000000000000000000000000000000000000000..8291711a9b68e35598355cce0b42cc88d7e03a37 --- /dev/null +++ b/Testing/Code/IO/otbImageFileReaderONERAComplex.cxx @@ -0,0 +1,104 @@ +// $Id$ +#if defined(_MSC_VER) +#pragma warning ( disable : 4786 ) +#endif + +//#define MAIN + + +#include "itkImage.h" +#include "itkVectorImage.h" +#include "itkExceptionObject.h" +#include <iostream> +#include "itkComplexToModulusImageFilter.h" +#include "itkStreamingImageFilter.h" +#include "otbImageFileReader.h" +#include "otbImageFileWriter.h" + +int otbImageFileReaderONERAComplex(int argc, char* argv[]) +{ + try + { + // Verify the number of parameters in the command line + const char * inputFilename = argv[1]; + const char * outputFilename = argv[2]; + + typedef std::complex<float> InputPixelType; + typedef float OutputPixelType; + const unsigned int Dimension = 2; + + typedef itk::Image< InputPixelType, Dimension > InputImageType; + typedef itk::Image< OutputPixelType, Dimension > OutputImageType; + + typedef otb::ImageFileReader< InputImageType > ReaderType; + typedef otb::ImageFileWriter< OutputImageType > WriterType; + + typedef itk::StreamingImageFilter< InputImageType, InputImageType > StreamingType; + + StreamingType::Pointer streaming = StreamingType::New(); + ReaderType::Pointer complexReader = ReaderType::New(); + + complexReader->SetFileName( inputFilename ); + streaming->SetNumberOfStreamDivisions(100); + streaming->SetInput(complexReader->GetOutput()); + streaming->Update(); + + + InputImageType::Pointer image = streaming->GetOutput(); + InputImageType::IndexType pixelIndex; + InputImageType::PixelType pixelValue; + pixelIndex[0] = 0; // x position of the pixel + pixelIndex[1] = 0; // y position of the pixel + pixelValue = image->GetPixel( pixelIndex ); + std::cout << " PixelValue : ("<< pixelIndex[0]<<" , "<< pixelIndex[1]<<" ) = "<< pixelValue << std::endl; + + typedef itk::ComplexToModulusImageFilter< + InputImageType, OutputImageType > ModulusFilterType; + + ModulusFilterType::Pointer modulusFilter = ModulusFilterType::New(); + modulusFilter->SetInput( complexReader->GetOutput() ); +// modulusFilter->Update(); + modulusFilter->Update(); + + OutputImageType::Pointer module = modulusFilter->GetOutput(); + + InputImageType::PixelType complexValue; + OutputImageType::PixelType modulusValue; + + for(unsigned int x = 100 ; x < 200 ; x++ ) + { + for(unsigned int y = 100 ; y < 200 ; y++ ) + { + pixelIndex[0] = x; // x position of the pixel + pixelIndex[1] = y; // y position of the pixel + + complexValue = image->GetPixel( pixelIndex ); + modulusValue = module->GetPixel( pixelIndex ); + std::cout << " PixelValue : ("<< pixelIndex[0]<<" , "<< pixelIndex[1]<<" ) = "<< complexValue << std::endl; + std::cout << " PixelValue : ("<< pixelIndex[0]<<" , "<< pixelIndex[1]<<" ) = "<< modulusValue << std::endl; + } + } + + + WriterType::Pointer writer = WriterType::New(); + + writer->SetFileName( outputFilename ); + writer->SetInput( modulusFilter->GetOutput() ); + writer->Update(); + + } + catch( itk::ExceptionObject & err ) + { + std::cerr << "Exception OTB attrappee dans exception ITK !" << std::endl; + std::cerr << err << std::endl; + return EXIT_FAILURE; + } + catch( ... ) + { + std::cerr << "Exception OTB non attrappee !" << std::endl; + return EXIT_FAILURE; + } + + return EXIT_SUCCESS; +} +