Commit eae92b91 authored by Cyrille Valladeau's avatar Cyrille Valladeau
Browse files

ENH : add test on complex reading

parent ad09bd63
......@@ -2709,12 +2709,12 @@ ADD_TEST(ioTvTileMapImageIOHelperTest ${IO_TESTS21}
ADD_TEST(ioTvImageDoubleToImageComplex ${IO_TESTS21}
otbImageDoubleToImageComplex
${INPUTDATA}/monobandunsignedchar.png
${INPUTDATA}/monobandUnsignedInt.tif
)
ADD_TEST(ioTvImageComplexToImageDouble ${IO_TESTS21}
otbImageComplexToImageDouble
${INPUTDATA}/monobandComplexDouble.hdr
${INPUTDATA}/monobandComplexDouble
)
ADD_TEST(ioTvImageComplexToImageComplex ${IO_TESTS21}
......@@ -2732,7 +2732,30 @@ ADD_TEST(ioTvImageComplexToVectorImageComplex ${IO_TESTS21}
${INPUTDATA}/monobandComplexDouble.hdr
)
ADD_TEST(ioTvVectorImageDoubleToImageComplex ${IO_TESTS21}
otbVectorImageDoubleToImageComplex
${INPUTDATA}/multibandUnsignedInt.tif
)
ADD_TEST(ioTvVectorImageDoubleToVectorImageComplex ${IO_TESTS21}
otbVectorImageDoubleToVectorImageComplex
${INPUTDATA}/multibandUnsignedInt.tif
)
ADD_TEST(ioTvVectorImageComplexToVectorImageDouble ${IO_TESTS21}
otbVectorImageComplexToVectorImageDouble
${INPUTDATA}/multibandComplexDouble.hdr
)
ADD_TEST(ioTvVectorImageComplexToVectorImageComplex ${IO_TESTS21}
otbVectorImageComplexToVectorImageComplex
${INPUTDATA}/multibandComplexDouble.hdr
)
ADD_TEST(ioTvImageDoubleToVectorImageComplex ${IO_TESTS21}
otbImageDoubleToVectorImageComplex
${INPUTDATA}/monobandUnsignedInt.tif
)
#----------------------------------------------------------------------------------
SET(BasicIO_SRCS1
......
......@@ -18,7 +18,6 @@
#include <complex>
#include "otbImageFileReader.h"
//#include "otbImageFileWriter.h"
#include "otbImage.h"
#include "otbVectorImage.h"
#include "otbMacro.h"
......@@ -28,13 +27,10 @@
int otbImageDoubleToImageComplex(int argc, char * argv[])
{
typedef double RealType;
typedef std::complex<RealType> PixelType;
typedef otb::Image<PixelType, 2> CplxImageType;
//typedef otb::Image<RealType, 2> ScalImageType;
typedef otb::ImageFileReader<CplxImageType> ReaderType;
typedef double RealType;
typedef std::complex<RealType> PixelType;
typedef otb::Image<PixelType, 2> CplxImageType;
typedef otb::ImageFileReader<CplxImageType> ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(argv[1]);
......@@ -55,26 +51,20 @@ int otbImageDoubleToImageComplex(int argc, char * argv[])
itk::ImageRegionIteratorWithIndex<CplxImageType> it( reader->GetOutput(), region );
unsigned int count = 0;
it.GoToBegin();
while( it.IsAtEnd()==false )
{
if(it.Get().real() != static_cast<RealType>(it.GetIndex()[0]))
if( (it.Get().real() != static_cast<RealType>(count)) || (it.Get().imag() != static_cast<RealType>(0)) )
{
std::cout<<"Image double read as Image complex error : read real part "<<it.Get().real()<<", waited for "<<it.GetIndex()[0]<<"."<<std::endl;
std::cout<<"Image double read as Image complex error : "<<it.Get()<<", waited for ("<<count<<", 0)"<<std::endl;
return EXIT_FAILURE;
}
else if(it.Get().imag() != static_cast<RealType>(0))
{
std::cout<<"Image double read as Image complex error : read imaginary part "<<it.Get().imag()<<", waited for "<<0<<"."<<std::endl;
return EXIT_FAILURE;
}
count++;
++it;
}
return EXIT_SUCCESS;
}
......@@ -159,21 +149,14 @@ int otbImageComplexToImageComplex(int argc, char * argv[])
it.GoToBegin();
while( it.IsAtEnd()==false )
{
if(it.Get().real() != static_cast<RealType>(count))
{
std::cout<<"Image double read as Image complex error in real part: "<<it.Get()<<", waited for ("<<count<<", "<<count+1<<")"<<std::endl;
return EXIT_FAILURE;
}
else if(it.Get().imag() != static_cast<RealType>(count+1) )
if( (it.Get().real() != static_cast<RealType>(count)) || ( it.Get().imag() != static_cast<RealType>(count+1) ) )
{
std::cout<<"Image double read as Image complex error in imaginary part: "<<it.Get()<<", waited for ("<<count<<", "<<count+1<<")"<<std::endl;
std::cout<<"Image complex read as Image complex error: "<<it.Get()<<", waited for ("<<count<<", "<<count+1<<")"<<std::endl;
return EXIT_FAILURE;
}
count += 2;
++it;
}
......@@ -187,7 +170,6 @@ int otbImageComplexToVectorImageDouble(int argc, char * argv[])
{
typedef double RealType;
typedef otb::VectorImage<RealType, 2> ScalVectorImageType;
typedef otb::ImageFileReader<ScalVectorImageType> ReaderType;
......@@ -214,15 +196,103 @@ int otbImageComplexToVectorImageDouble(int argc, char * argv[])
it.GoToBegin();
while( it.IsAtEnd()==false )
{
if(it.Get()[0] != static_cast<RealType>(count))
if( (it.Get()[0] != static_cast<RealType>(count)) || (it.Get()[1] != static_cast<RealType>(count+1)) )
{
std::cout<<"Image double read as Image complex error read real part: "<<it.Get()[0]<<", waited for "<<count<<"."<<std::endl;
std::cout<<"Image complex read as Vector Image double error: "<<it.Get()<<", waited for ("<<count<<", "<<count+1<<")"<<std::endl;
return EXIT_FAILURE;
}
else if(it.Get()[1] != static_cast<RealType>(count+1))
count += 2;
++it;
}
return EXIT_SUCCESS;
}
int otbImageComplexToVectorImageComplex(int argc, char * argv[])
{
typedef double RealType;
typedef std::complex<RealType> PixelType;
typedef otb::VectorImage<PixelType, 2> CmplxVectorImageType;
typedef otb::ImageFileReader<CmplxVectorImageType> ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(argv[1]);
CmplxVectorImageType::IndexType id;
CmplxVectorImageType::SizeType size;
CmplxVectorImageType::RegionType region;
id.Fill(0);
size[0] = 10;
size[1] = 1;
region.SetSize( size );
region.SetIndex( id );
reader->GetOutput()->SetRequestedRegion(region);
reader->Update();
itk::ImageRegionIterator<CmplxVectorImageType> it( reader->GetOutput(), region );
unsigned int count = 0;
it.GoToBegin();
while( it.IsAtEnd()==false )
{
if( (it.Get()[0].real() != static_cast<RealType>(count)) || ( it.Get()[0].imag() != static_cast<RealType>(count+1) ) )
{
std::cout<<"Image double read as Image complex error : read imaginary part: "<<it.Get()[1]<<", waited for "<<count<<"."<<std::endl;
std::cout<<"Image complex read as Vector Image complex error: "<<it.Get()[0]<<", waited for ("<<count<<", "<<count+1<<")"<<std::endl;
return EXIT_FAILURE;
}
count += 2;
++it;
}
return EXIT_SUCCESS;
}
int otbVectorImageDoubleToImageComplex(int argc, char * argv[])
{
typedef double RealType;
typedef std::complex<RealType> PixelType;
typedef otb::Image<PixelType, 2> CmplxImageType;
typedef otb::ImageFileReader<CmplxImageType> ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(argv[1]);
CmplxImageType::IndexType id;
CmplxImageType::SizeType size;
CmplxImageType::RegionType region;
id.Fill(0);
size[0] = 10;
size[1] = 1;
region.SetSize( size );
region.SetIndex( id );
reader->GetOutput()->SetRequestedRegion(region);
reader->Update();
itk::ImageRegionIterator<CmplxImageType> it( reader->GetOutput(), region );
unsigned int count = 0;
it.GoToBegin();
while( it.IsAtEnd()==false )
{
if(it.Get().real() != static_cast<RealType>(count) || (it.Get().imag() != static_cast<RealType>(count+1)) )
{
std::cout<<"Vector Image double read as Image double error: "<<it.Get()<<", waited for ("<<count<<", "<<count+1<<")"<<std::endl;
return EXIT_FAILURE;
}
......@@ -236,7 +306,7 @@ int otbImageComplexToVectorImageDouble(int argc, char * argv[])
}
int otbImageComplexToVectorImageComplex(int argc, char * argv[])
int otbVectorImageDoubleToVectorImageComplex(int argc, char * argv[])
{
typedef double RealType;
typedef std::complex<RealType> PixelType;
......@@ -267,15 +337,56 @@ int otbImageComplexToVectorImageComplex(int argc, char * argv[])
it.GoToBegin();
while( it.IsAtEnd()==false )
{
if(it.Get()[0].real() != static_cast<RealType>(count))
if(it.Get()[0].real() != static_cast<RealType>(count) || (it.Get()[0].imag() != static_cast<RealType>(0)) )
{
std::cout<<"Image double read as Image complex error : read real part "<<it.Get()[0].real()<<", waited for "<<count<<"."<<std::endl;
std::cout<<"Vector Image double read as Vector Image complex error: "<<it.Get()[0]<<", waited for ("<<count<<", 0)."<<std::endl;
return EXIT_FAILURE;
}
else if(it.Get()[0].imag() != static_cast<RealType>(count+1))
count += 2;
++it;
}
return EXIT_SUCCESS;
}
int otbVectorImageComplexToVectorImageDouble(int argc, char * argv[])
{
typedef double RealType;
typedef otb::VectorImage<RealType, 2> ScalVectorImageType;
typedef otb::ImageFileReader<ScalVectorImageType> ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(argv[1]);
ScalVectorImageType::IndexType id;
SccalVectorImageType::SizeType size;
ScalVectorImageType::RegionType region;
id.Fill(0);
size[0] = 10;
size[1] = 1;
region.SetSize( size );
region.SetIndex( id );
reader->GetOutput()->SetRequestedRegion(region);
reader->Update();
itk::ImageRegionIterator<ScalVectorImageType> it( reader->GetOutput(), region );
unsigned int l_Size = reader->GetOutpuGetOutput()->GetLargetPossibleRegion().GetSize()[0]* reader->GetOutpuGetOutput()->GetLargetPossibleRegion().GetSize()[1];
unsigned int count = 0;
it.GoToBegin();
while( it.IsAtEnd()==false )
{
RealType norm1 = static_cast<double>( vcl_sqrt( static_cast<double>( (count*count)+((count+1)*(count+1)) ) ) );
RealType norm2 = static_cast<double>( vcl_sqrt( static_cast<double>( ((l_size+count)*(l_Size+count))+((l_Size+count+1)*(l_Size+count+1)) ) ) );
if( (it.Get()[0] != norm1) || (it.Get()[1] != norm2) )
{
std::cout<<"Image double read as Image complex error : read imaginary part "<<it.Get()[0].imag()<<", waited for "<<count<<"."<<std::endl;
std::cout<<"Vector Image complex read as Vector Image double error: "<<it.Get()<<", waited for ("<<norm1<<", "<<norm2<<")."<<std::endl;
return EXIT_FAILURE;
}
......@@ -287,3 +398,59 @@ int otbImageComplexToVectorImageComplex(int argc, char * argv[])
return EXIT_SUCCESS;
}
int otbImageDoubleToVectorImageComplex(int argc, char * argv[])
{
typedef double RealType;
typedef std::complex<RealType> PixelType;
typedef otb::VectorImage<PixelType, 2> CmplxVectorImageType;
typedef otb::ImageFileReader<CmplxVectorImageType> ReaderType;
ReaderType::Pointer reader = ReaderType::New();
reader->SetFileName(argv[1]);
CmplxVectorImageType::IndexType id;
CmplxVectorImageType::SizeType size;
CmplxVectorImageType::RegionType region;
id.Fill(0);
size[0] = 10;
size[1] = 1;
region.SetSize( size );
region.SetIndex( id );
reader->GetOutput()->SetRequestedRegion(region);
reader->Update();
if(reader->GetOutput()->GetNumberOfComponentsPerPixel() != 1)
{
std::cout<<"Invalid image size, should be 1, no "<<reader->GetOutput()->GetNumberOfComponentsPerPixel()<<"."<<std::endl;
return EXIT_FAILURE;
}
itk::ImageRegionIterator<CmplxVectorImageType> it( reader->GetOutput(), region );
unsigned int l_Size = reader->GetOutpuGetOutput()->GetLargetPossibleRegion().GetSize()[0]* reader->GetOutpuGetOutput()->GetLargetPossibleRegion().GetSize()[1];
unsigned int count = 0;
it.GoToBegin();
while( it.IsAtEnd()==false )
{
if( (it.Get()[0].real() != static_cast<RealType>(count)) || (it.Get()[0].imag() != 0) )
{
std::cout<<"Image double read as Vector Image complex error: "<<it.Get()[0]<<", waited for ("<<count<<", 0)."<<std::endl;
return EXIT_FAILURE;
}
count++;
++it;
}
return EXIT_SUCCESS;
}
......@@ -36,4 +36,8 @@ void RegisterTests()
REGISTER_TEST(otbImageComplexToImageComplex);
REGISTER_TEST(otbImageComplexToVectorImageDouble);
REGISTER_TEST(otbImageComplexToVectorImageComplex);
REGISTER_TEST(otbVectorImageDoubleToImageComplex);
REGISTER_TEST(otbVectorImageDoubleToVectorImageComplex);
REGISTER_TEST(otbVectorImageComplexToVectorImageComplex);
REGISTER_TEST(otbImageDoubleToVectorImageComplex);
}
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