diff --git a/Testing/Code/IO/CMakeLists.txt b/Testing/Code/IO/CMakeLists.txt
index 433b57a506070f5de101c3855dcee692c8115a8c..e21735c17e525fb6713c6ea4f7034faef9ec221a 100644
--- a/Testing/Code/IO/CMakeLists.txt
+++ b/Testing/Code/IO/CMakeLists.txt
@@ -2734,12 +2734,12 @@ ADD_TEST(ioTvImageComplexToVectorImageComplex ${IO_TESTS21}
 
 ADD_TEST(ioTvVectorImageDoubleToImageComplex ${IO_TESTS21}
          otbVectorImageDoubleToImageComplex
-              ${INPUTDATA}/multibandUnsignedInt.tif
+              ${INPUTDATA}/multibandDouble.tif
 )
 
 ADD_TEST(ioTvVectorImageDoubleToVectorImageComplex ${IO_TESTS21}
          otbVectorImageDoubleToVectorImageComplex
-              ${INPUTDATA}/multibandUnsignedInt.tif
+              ${INPUTDATA}/multibandDouble.tif
 )
 
 ADD_TEST(ioTvVectorImageComplexToVectorImageDouble ${IO_TESTS21}
@@ -2757,6 +2757,21 @@ ADD_TEST(ioTvImageDoubleToVectorImageComplex ${IO_TESTS21}
               ${INPUTDATA}/monobandDouble.tif
 )
 
+ADD_TEST(ioTvVectorImageComplexToImageDouble_2bands ${IO_TESTS21}
+         otbVectorImageComplexToImageDouble
+              ${INPUTDATA}/multibandComplexDouble.hdr
+)
+
+ADD_TEST(ioTvVectorImageComplexToImageDouble_3bands ${IO_TESTS21}
+         otbVectorImageComplexToImageDouble
+              ${INPUTDATA}/multi3bandsDouble.hdr
+)
+
+ADD_TEST(ioTvVectorImageComplexToImageDouble_4bands ${IO_TESTS21}
+         otbVectorImageComplexToImageDouble
+              ${INPUTDATA}/mono3bandsDouble.hdr
+)
+
 #----------------------------------------------------------------------------------
 SET(BasicIO_SRCS1
 otbIOTests1.cxx
diff --git a/Testing/Code/IO/otbComplexImageManipulationTest.cxx b/Testing/Code/IO/otbComplexImageManipulationTest.cxx
index 79986253072207a2bc301cf8c24a31c6ddd08746..40b66d51fde2ad8f410982a783a77c08b023272e 100644
--- a/Testing/Code/IO/otbComplexImageManipulationTest.cxx
+++ b/Testing/Code/IO/otbComplexImageManipulationTest.cxx
@@ -565,3 +565,102 @@ int otbImageDoubleToVectorImageComplex(int argc, char * argv[])
   return EXIT_SUCCESS;
 }
 
+/***********
+ * 11.
+ * Read VectorImage<complex> as Image<double>
+ * out : Amplitude(norm(in[0]), norm(in[1], ...)
+ * Amplitude is defined as in itkConvertPixelBuffer
+ ***********/
+int otbVectorImageComplexToImageDouble(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 greater than 1."<<std::endl;
+
+      return EXIT_FAILURE;
+    }
+
+  itk::ImageRegionIteratorWithIndex<CmplxVectorImageType> it( reader->GetOutput(), region );
+  unsigned int l_Size = reader->GetOutput()->GetLargestPossibleRegion().GetSize()[0]* reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1];
+
+  unsigned int count = 0;
+  it.GoToBegin();
+  while( it.IsAtEnd()==false )
+    {
+      count = 2*(it.GetIndex()[1]*reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1]+it.GetIndex()[0]);
+
+      if(reader->GetOutput()->GetNumberOfComponentsPerPixel() == 2)
+	{
+	  // Amplitude = input[0] norm * input[1] norm
+	  double norm1 = vcl_sqrt(static_cast<double>( (count*count) + (count+1)*(count+1)));
+	  double norm2 = vcl_sqrt(static_cast<double>( ((2*l_Size+count)*(2*l_Size+count)) + (2*l_Size+count+1)*(2*l_Size+count+1)));	  
+
+	  if( it.Get() != static_cast<RealType>(norm1*norm2)) 
+	    {
+	      std::cout<<"Vector Image complex with 2 bands read as Image double error: "<<it.Get()<<", waited for norm value: "<<norm1*norm2<<"."<<std::endl;
+	      
+	      return EXIT_FAILURE;
+	    }
+	}
+      else if(reader->GetOutput()->GetNumberOfComponentsPerPixel() == 3)
+	{
+	  // Amplitude = (2125*norm(input[0]) + 7154*norm(input[1]) + 721*norm(input[2])) / 10000
+	  double norm1 = vcl_sqrt(static_cast<double>( (count*count) + (count+1)*(count+1)));
+	  double norm2 = vcl_sqrt(static_cast<double>( ((2*l_Size+count)*(2*l_Size+count)) + (2*l_Size+count+1)*(2*l_Size+count+1)));	  
+	  double norm3 = vcl_sqrt(static_cast<double>( ((4*l_Size+count)*(4*l_Size+count)) + (4*l_Size+count+1)*(4*l_Size+count+1)));	  
+
+	  if( it.Get() != static_cast<RealType>( (2125*norm1+7154*norm2+721*norm3)/10000 ) )
+	    {
+	      std::cout<<"Vector Image complex with 3 bands read as Image double error: "<<it.Get()<<", waited for norm value: "<<(2125*norm1+7154*norm2+721*norm3)/10000<<"."<<std::endl;
+	      std::cout<<"With: norm1="<<norm1<<", norm2=: "<<norm2<<", norm3= "<<norm3<<"."<<std::endl;
+
+	      return EXIT_FAILURE;
+	    }
+	}
+      else
+	{
+	  // Amplitude = (2125*norm(input[0]) + 7154*norm(input[1]) + 721*norm(input[2])) / 10000
+	  double norm1 = vcl_sqrt(static_cast<double>( (count*count) + (count+1)*(count+1)));
+	  double norm2 = vcl_sqrt(static_cast<double>( ((2*l_Size+count)*(2*l_Size+count)) + (2*l_Size+count+1)*(2*l_Size+count+1)));	  
+	  double norm3 = vcl_sqrt(static_cast<double>( ((4*l_Size+count)*(4*l_Size+count)) + (4*l_Size+count+1)*(4*l_Size+count+1)));	  
+	  double norm4 = vcl_sqrt(static_cast<double>( ((6*l_Size+count)*(6*l_Size+count)) + (6*l_Size+count+1)*(6*l_Size+count+1)));	  
+
+	  if( it.Get() != static_cast<RealType>( (2125*norm1+7154*norm2+721*norm3)/10000 * norm4 ) )
+	    {
+	      std::cout<<"Vector Image complex with 4 bands read as Image double error: "<<it.Get()<<", waited for norm value: "<<(2125*norm1+7154*norm2+721*norm3)/10000*norm4<<"."<<std::endl;
+	      std::cout<<"With: norm1="<<norm1<<", norm2=: "<<norm2<<", norm3= "<<norm3<<", norm4= "<<norm4<<"."<<std::endl;
+	      
+	      return EXIT_FAILURE;
+	    }
+	       
+	    ++it;
+	    }
+	}
+  
+  
+  return EXIT_SUCCESS;
+}
+
diff --git a/Testing/Code/IO/otbIOTests21.cxx b/Testing/Code/IO/otbIOTests21.cxx
index 495663ce640507f2d35e006f5127f962b10a36ca..964dd2df95be43dfd70482739ba55a295708b91d 100644
--- a/Testing/Code/IO/otbIOTests21.cxx
+++ b/Testing/Code/IO/otbIOTests21.cxx
@@ -38,7 +38,8 @@ void RegisterTests()
   REGISTER_TEST(otbImageComplexToVectorImageComplex);
   REGISTER_TEST(otbVectorImageDoubleToImageComplex);
   REGISTER_TEST(otbVectorImageDoubleToVectorImageComplex);
- REGISTER_TEST(otbVectorImageComplexToVectorImageDouble);
+  REGISTER_TEST(otbVectorImageComplexToVectorImageDouble);
   REGISTER_TEST(otbVectorImageComplexToVectorImageComplex);
   REGISTER_TEST(otbImageDoubleToVectorImageComplex);
+  REGISTER_TEST(otbVectorImageComplexToImageDouble);
 }