From 3e8b4c661faa2c1fb5c645b00b8a9d14cf36873c Mon Sep 17 00:00:00 2001
From: Thomas Feuvrier <thomas.feuvrier@c-s.fr>
Date: Fri, 10 Apr 2009 17:12:40 +0200
Subject: [PATCH] TEST: Add new testing for ChangeLabelImageFilter class.
 Probleme with the ITK base class, the output is false, the test failed. A ITK
 message will be reported.

---
 Testing/Code/BasicFilters/CMakeLists.txt      | 21 +++-
 .../BasicFilters/otbBasicFiltersTests12.cxx   |  2 +
 .../otbChangeLabelImageFilter.cxx             | 99 +++++--------------
 3 files changed, 48 insertions(+), 74 deletions(-)

diff --git a/Testing/Code/BasicFilters/CMakeLists.txt b/Testing/Code/BasicFilters/CMakeLists.txt
index 0114e5e871..988ad59033 100644
--- a/Testing/Code/BasicFilters/CMakeLists.txt
+++ b/Testing/Code/BasicFilters/CMakeLists.txt
@@ -1451,7 +1451,7 @@ ADD_TEST(bfTvListSampleToHistogramListGenerator ${BASICFILTERS_TESTS11}
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 # -------     otbEdgeDetectorImageFilter   ----------------------------
-ADD_TEST(bfTvEdgeDetectorImageFilterNew ${BASICFILTERS_TESTS12}
+ADD_TEST(bfTuEdgeDetectorImageFilterNew ${BASICFILTERS_TESTS12}
 	 otbEdgeDetectorImageFilterNew
 	 )
 
@@ -1466,6 +1466,23 @@ ADD_TEST(bfTvEdgeDetectorImageFilter ${BASICFILTERS_TESTS12}
 	 255 # upper  threshold
 )
 
+# -------     otbChangeLabelImageFilter   ----------------------------
+ADD_TEST(bfTuChangeLabelImageFilterNew ${BASICFILTERS_TESTS12}
+   otbChangeLabelImageFilterNew
+   )
+
+ADD_TEST(bfTvChangeLabelImageFilter ${BASICFILTERS_TESTS12}
+--compare-image ${TOL}
+      ${BASELINE}/bfChangeLabelImageFilter.tif
+      ${TEMP}/bfChangeLabelImageFilter.tif
+   otbChangeLabelImageFilter
+ ${INPUTDATA}/QB_Toulouse_Ortho_PAN.tif
+ #  ${INPUTDATA}/poupees_sub_c1.png
+  ${TEMP}/bfChangeLabelImageFilter.tif
+  255   # Mask value
+  100   # lower threshold
+  200   # upper  threshold
+)
 
 
 
@@ -1662,6 +1679,8 @@ otbListSampleToHistogramListGenerator.cxx
 SET(BasicFilters_SRCS12
 otbEdgeDetectorImageFilter.cxx
 otbEdgeDetectorImageFilterNew.cxx
+otbChangeLabelImageFilterNew.cxx
+otbChangeLabelImageFilter.cxx
 )
 
 INCLUDE_DIRECTORIES("${OTBTesting_BINARY_DIR}")
diff --git a/Testing/Code/BasicFilters/otbBasicFiltersTests12.cxx b/Testing/Code/BasicFilters/otbBasicFiltersTests12.cxx
index 7818a2bfbe..7b2c8d9093 100644
--- a/Testing/Code/BasicFilters/otbBasicFiltersTests12.cxx
+++ b/Testing/Code/BasicFilters/otbBasicFiltersTests12.cxx
@@ -29,4 +29,6 @@ void RegisterTests()
 {
 REGISTER_TEST(otbEdgeDetectorImageFilter);
 REGISTER_TEST(otbEdgeDetectorImageFilterNew);
+REGISTER_TEST(otbChangeLabelImageFilterNew);
+REGISTER_TEST(otbChangeLabelImageFilter);
 }
diff --git a/Testing/Code/BasicFilters/otbChangeLabelImageFilter.cxx b/Testing/Code/BasicFilters/otbChangeLabelImageFilter.cxx
index ad1ddd47d9..1036c0a6c4 100644
--- a/Testing/Code/BasicFilters/otbChangeLabelImageFilter.cxx
+++ b/Testing/Code/BasicFilters/otbChangeLabelImageFilter.cxx
@@ -22,101 +22,54 @@
 #include "itkRandomImageSource.h"
 #include "otbChangeLabelImageFilter.h"
 #include "itkImageRegionIteratorWithIndex.h"
+#include "otbImageFileWriter.h"
+#include "otbImageFileReader.h"
 
-int otbChangeLabelImageFilterTest(int argc, char * argv[])
+int otbChangeLabelImageFilter(int argc, char * argv[])
 {
-  const unsigned int ImageDimension = 3;
-
-  typedef otb::Image<unsigned short, ImageDimension>                   InputImageType;
-  typedef otb::VectorImage<unsigned char, ImageDimension>              OutputImageType;
+  const unsigned int ImageDimension = 2;
+  const char * inputFilename(argv[1]);
+  const char * outFilename(argv[2]);
+  typedef unsigned short PixelType;
+  typedef otb::Image<PixelType, ImageDimension>                   InputImageType;
+  typedef otb::VectorImage<PixelType, ImageDimension>             OutputImageType;
   typedef InputImageType::PixelType                                    InputPixelType;
   typedef OutputImageType::PixelType                                   OutputPixelType;
   typedef itk::ImageRegionIteratorWithIndex<InputImageType>            InputIteratorType;
   typedef itk::ImageRegionIteratorWithIndex<OutputImageType>           OutputIteratorType;
   typedef itk::RandomImageSource<InputImageType>                       SourceType;
   typedef otb::ChangeLabelImageFilter<InputImageType, OutputImageType> FilterType;
+  typedef otb::ImageFileWriter<OutputImageType> WriterType;
+  typedef otb::ImageFileReader<InputImageType> ReaderType;
 
   SourceType::Pointer source = SourceType::New();
   FilterType::Pointer filter = FilterType::New();
   InputImageType::Pointer  vectImage  = InputImageType::New();
 
-  unsigned long sizeArray[ImageDimension] = { 3,3,3 };
+  WriterType::Pointer writer = WriterType::New();
+  ReaderType::Pointer reader = ReaderType::New();
 
-  InputPixelType upper = 10;
-  source->SetMin( itk::NumericTraits<InputPixelType>::Zero );
-  source->SetMax( upper );
-  source->SetSize( sizeArray );
-  source->SetNumberOfThreads(1);
 
-  filter->SetNumberOfComponentsPerPixel(5);
+  reader->SetFileName( inputFilename  );
+  writer->SetFileName( outFilename );
+  PixelType maskValue =  static_cast<PixelType>(atoi(argv[3]));
+  InputPixelType lower = static_cast<PixelType>(atoi(argv[4]));
+  InputPixelType upper = static_cast<PixelType>(atoi(argv[5]));
 
-  // Eliminate most labels
+  filter->SetNumberOfComponentsPerPixel(3);
   OutputPixelType background;
   background.SetSize( filter->GetNumberOfComponentsPerPixel() );
-  background.Fill(1);
-  InputPixelType maxRemainingLabel = 2;
-  for (InputPixelType i = maxRemainingLabel; i <= upper; i++)
-  {
-    filter->SetChange( i, background );
-  }
+  background.Fill(maskValue);
 
-  filter->Print( std::cout );
-  filter->SetInput( source->GetOutput() );
-
-  OutputImageType::Pointer outputImage = filter->GetOutput();
-
-  // Execute the filter
-  try
-  {
-    filter->Update();
-    filter->SetFunctor(filter->GetFunctor());
-  }
-  catch (...)
+  filter->SetChange( 0,0 );
+  for (InputPixelType i = lower; i <= upper; i++)
   {
-    std::cerr << "Caught an unexpected exception. " << std::endl;
-    std::cerr << "Test failed. " << std::endl;
-    return EXIT_FAILURE;
+    filter->SetChange( i, background );
   }
 
-  // Create an iterator for going through the image output
-  InputIteratorType  it( source->GetOutput(), source->GetOutput()->GetRequestedRegion() );
-  OutputIteratorType ot(outputImage, outputImage->GetRequestedRegion());
-
-  bool pass = true;
-
-  //  Check the content of the result image
-  std::cout << "Verification of the output " << std::endl;
-
-  ot.GoToBegin();
-  it.GoToBegin();
-  while ( !ot.IsAtEnd() )
-  {
-    const InputPixelType  input  = it.Get();
-    const OutputPixelType output = ot.Get();
-    std::cout <<  (double) input<<": ";
-    for (unsigned int j=0; j<filter->GetNumberOfComponentsPerPixel(); j++)
-    {
-      std::cout<< " " << (double)output[j];
-      if ( (double)output[j] > (double)maxRemainingLabel )
-      {
-        pass = false;
-      }
-    }
-    std::cout<<std::endl;
-
-    if ( !pass )
-    {
-      std::cerr << "Error in otbChangeLabelImageFilterTest " << std::endl;
-      std::cerr << " input = " << input;
-      std::cerr << " output = " << output;
-      std::cerr << std::endl;
-
-      return EXIT_FAILURE;
-    }
-
-    ++ot;
-    ++it;
-  }
+  filter->SetInput( reader->GetOutput() );
+  writer->SetInput(filter->GetOutput());
+  writer->Update();
 
   return EXIT_SUCCESS;
 }
-- 
GitLab