From f91b964b05cf959f587fe1dd70f06c1cbc97b6e8 Mon Sep 17 00:00:00 2001
From: Arnaud Jaen <arnaud.jaen@c-s.fr>
Date: Tue, 12 Jun 2012 16:31:43 +0200
Subject: [PATCH] ENH: rename an move conversion filters from OBIA to Common

---
 .../otbLabelImageToOGRDataSourceFilter.h      |   0
 .../otbLabelImageToOGRDataSourceFilter.txx    |   0
 .../otbLabelImageToVectorDataFilter.h         |   0
 .../otbLabelImageToVectorDataFilter.txx       |   1 -
 .../otbPersistentImageToOGRDataSourceFilter.h | 149 +++++++++++++
 ...tbPersistentImageToOGRDataSourceFilter.txx | 200 ++++++++++++++++++
 ...ngImageToOGRDataSourceSegmentationFilter.h |   6 +-
 .../otbWatershedSegmentationFilter.h          |   0
 .../otbWatershedSegmentationFilter.txx        |   0
 Testing/Code/BasicFilters/CMakeLists.txt      |  80 -------
 .../BasicFilters/otbBasicFiltersTests15.cxx   |   7 -
 Testing/Code/Common/CMakeLists.txt            | 112 ++++++++++
 Testing/Code/Common/otbCommonTests14.cxx      |  38 ++++
 .../otbLabelImageToOGRDataSourceFilter.cxx    |   0
 .../otbLabelImageToVectorDataFilter.cxx       |   0
 .../otbLabelImageToVectorDataFilterNew.cxx    |   0
 .../otbOGRDataSourceToLabelImageFilter.cxx    |   0
 .../otbPolygonizationRasterizationTest.cxx    |   0
 .../otbVectorDataRasterizeFilter.cxx          |   0
 .../otbVectorDataToLabelImageFilter.cxx       |   0
 Testing/Code/OBIA/CMakeLists.txt              |  59 ------
 Testing/Code/OBIA/otbOBIATests1.cxx           |   6 -
 Testing/Code/Segmentation/CMakeLists.txt      |  44 +++-
 .../otbMeanShiftSegmentationFilter.cxx        |   0
 .../Segmentation/otbSegmentationTests1.cxx    |   2 +
 .../otbWatershedSegmentationFilter.cxx        |   0
 26 files changed, 544 insertions(+), 160 deletions(-)
 rename Code/{OBIA => Common}/otbLabelImageToOGRDataSourceFilter.h (100%)
 rename Code/{OBIA => Common}/otbLabelImageToOGRDataSourceFilter.txx (100%)
 rename Code/{OBIA => Common}/otbLabelImageToVectorDataFilter.h (100%)
 rename Code/{OBIA => Common}/otbLabelImageToVectorDataFilter.txx (99%)
 create mode 100644 Code/Common/otbPersistentImageToOGRDataSourceFilter.h
 create mode 100644 Code/Common/otbPersistentImageToOGRDataSourceFilter.txx
 rename Code/{OBIA => Segmentation}/otbWatershedSegmentationFilter.h (100%)
 rename Code/{OBIA => Segmentation}/otbWatershedSegmentationFilter.txx (100%)
 create mode 100644 Testing/Code/Common/otbCommonTests14.cxx
 rename Testing/Code/{OBIA => Common}/otbLabelImageToOGRDataSourceFilter.cxx (100%)
 rename Testing/Code/{OBIA => Common}/otbLabelImageToVectorDataFilter.cxx (100%)
 rename Testing/Code/{OBIA => Common}/otbLabelImageToVectorDataFilterNew.cxx (100%)
 rename Testing/Code/{BasicFilters => Common}/otbOGRDataSourceToLabelImageFilter.cxx (100%)
 rename Testing/Code/{BasicFilters => Common}/otbPolygonizationRasterizationTest.cxx (100%)
 rename Testing/Code/{BasicFilters => Common}/otbVectorDataRasterizeFilter.cxx (100%)
 rename Testing/Code/{BasicFilters => Common}/otbVectorDataToLabelImageFilter.cxx (100%)
 rename Testing/Code/{OBIA => Segmentation}/otbMeanShiftSegmentationFilter.cxx (100%)
 rename Testing/Code/{OBIA => Segmentation}/otbWatershedSegmentationFilter.cxx (100%)

diff --git a/Code/OBIA/otbLabelImageToOGRDataSourceFilter.h b/Code/Common/otbLabelImageToOGRDataSourceFilter.h
similarity index 100%
rename from Code/OBIA/otbLabelImageToOGRDataSourceFilter.h
rename to Code/Common/otbLabelImageToOGRDataSourceFilter.h
diff --git a/Code/OBIA/otbLabelImageToOGRDataSourceFilter.txx b/Code/Common/otbLabelImageToOGRDataSourceFilter.txx
similarity index 100%
rename from Code/OBIA/otbLabelImageToOGRDataSourceFilter.txx
rename to Code/Common/otbLabelImageToOGRDataSourceFilter.txx
diff --git a/Code/OBIA/otbLabelImageToVectorDataFilter.h b/Code/Common/otbLabelImageToVectorDataFilter.h
similarity index 100%
rename from Code/OBIA/otbLabelImageToVectorDataFilter.h
rename to Code/Common/otbLabelImageToVectorDataFilter.h
diff --git a/Code/OBIA/otbLabelImageToVectorDataFilter.txx b/Code/Common/otbLabelImageToVectorDataFilter.txx
similarity index 99%
rename from Code/OBIA/otbLabelImageToVectorDataFilter.txx
rename to Code/Common/otbLabelImageToVectorDataFilter.txx
index a6a0c26422..9451cc2087 100644
--- a/Code/OBIA/otbLabelImageToVectorDataFilter.txx
+++ b/Code/Common/otbLabelImageToVectorDataFilter.txx
@@ -29,7 +29,6 @@
 #include "cpl_conv.h"
 #include "gdal_alg.h"
 
-#include <typeinfo>
 namespace otb
 {
 
diff --git a/Code/Common/otbPersistentImageToOGRDataSourceFilter.h b/Code/Common/otbPersistentImageToOGRDataSourceFilter.h
new file mode 100644
index 0000000000..1197ace819
--- /dev/null
+++ b/Code/Common/otbPersistentImageToOGRDataSourceFilter.h
@@ -0,0 +1,149 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt for details.
+
+  Some parts of this code are derived from ITK. See ITKCopyright.txt
+  for details.
+
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#ifndef __otbPersistentImageToOGRDataSourceFilter_h
+#define __otbPersistentImageToOGRDataSourceFilter_h
+
+#include "otbPersistentImageFilter.h"
+
+#include "otbLabelImageToOGRDataSourceFilter.h"
+#include "otbOGRDataSourceWrapper.h"
+
+#include "itkMacro.h"
+#include <string>
+
+namespace otb
+{
+
+/** \class PersistentImageToOGRDataSourceFilter
+ *  \brief Perform vectorization in a persistent way.
+ *
+ *  This filter is a generic filter. It is the base class of the Large scale segmentation framework.
+ *  The \c Initialize() method is used to create the new layer (LayerName) in the input \c OGRDataSource,
+ *  and the field (FieldName) in the layer. This field will contain the label of the polygon in the input image.
+ *  The \c ProcessTile() method is pure virtual and is implemented in sub class
+ *  (@see \c PersistentStreamingLabelImageToOGRDataFilter). It returns a "memory" DataSource.
+ *  This filter only copy each feature of the layer in the "memory" DataSource into the LayerName layer in the
+ *  input \c OGRDataSource set by \c SetOGRDataSource() method.
+ *
+ * \sa PersistentImageFilter
+ *
+ */
+template<class TImage>
+class ITK_EXPORT PersistentImageToOGRDataSourceFilter :
+  public PersistentImageFilter<TImage, TImage>
+{
+public:
+  /** Standard Self typedef */
+  typedef PersistentImageToOGRDataSourceFilter                  Self;
+  typedef PersistentImageFilter<TImage, TImage>           Superclass;
+  typedef itk::SmartPointer<Self>                         Pointer;
+  typedef itk::SmartPointer<const Self>                   ConstPointer;
+
+  /** Runtime information support. */
+  itkTypeMacro(PersistentImageToOGRDataSourceFilter, PersistentImageFilter);
+
+  typedef TImage                                     InputImageType;
+  typedef typename InputImageType::Pointer           InputImagePointer;
+  typedef typename InputImageType::RegionType        RegionType;
+  typedef typename InputImageType::SizeType          SizeType;
+  typedef typename InputImageType::IndexType         IndexType;
+  typedef typename InputImageType::PixelType         PixelType;
+  typedef typename InputImageType::InternalPixelType InternalPixelType;
+
+  typedef ogr::DataSource                            OGRDataSourceType;
+  typedef typename OGRDataSourceType::Pointer        OGRDataSourcePointerType;
+  typedef ogr::Layer                                 OGRLayerType;
+  typedef ogr::Feature                               OGRFeatureType;
+
+
+  void AllocateOutputs();
+  virtual void Reset(void);
+  virtual void Synthetize(void);
+  
+  /** This method creates the output layer in the OGRDataSource set by the user.
+   * The name of the layer is set by \c SetLayerName .
+   * \note This methode must be called before the call of Update .
+   */
+  virtual void Initialize(void);
+  
+  /** Set/Get the name of the output layer to write in the \c ogr::DataSource. */
+  itkSetStringMacro(LayerName);
+  itkGetStringMacro(LayerName);
+  
+  /** Set the Field Name in which labels will be written. (default is "DN")
+   * A field FieldName is created in the output layer LayerName. The Field type is Integer.
+   */
+  itkSetMacro(FieldName, std::string);
+  
+  /**
+   * Return the Field name in which labels have been written.
+   */
+  itkGetMacro(FieldName, std::string);
+  
+  /** Get the size of the tile used for streaming.
+   * This is useful if you use for example the \c OGRFusionTileFilter
+   * for fusioning streaming tiles.
+   */
+  itkGetMacro(StreamSize, SizeType);
+  
+  /** Set the \c ogr::DataSource in which the layer LayerName will be created. */
+  void SetOGRDataSource( OGRDataSourcePointerType ogrDS );
+  /** Get the \c ogr::DataSource output. */
+  OGRDataSourceType * GetOGRDataSource( void );
+
+  /** Add one option for OGR layer creation */
+  void AddOGRLayerCreationOption(const std::string& option);
+
+  /** Clear all OGR layer creation options */
+  void ClearOGRLayerCreationOptions();
+  
+  /** Set the OGR layer creation options */
+  void SetOGRLayerCreationOptions(const std::vector<std::string> & options);
+
+protected:
+  PersistentImageToOGRDataSourceFilter();
+  virtual ~PersistentImageToOGRDataSourceFilter();
+
+  void PrintSelf(std::ostream& os, itk::Indent indent) const;
+
+  virtual void GenerateData();
+
+
+private:
+  PersistentImageToOGRDataSourceFilter(const Self &); //purposely not implemented
+  void operator =(const Self&); //purposely not implemented
+
+  virtual OGRDataSourcePointerType ProcessTile() = 0;
+  
+  std::string m_FieldName;
+  std::string m_LayerName;
+  OGRwkbGeometryType m_GeometryType;
+  SizeType m_StreamSize;
+  std::vector<std::string> m_OGRLayerCreationOptions;
+
+}; // end of class
+} // end namespace otb
+
+#ifndef OTB_MANUAL_INSTANTIATION
+#include "otbPersistentImageToOGRDataSourceFilter.txx"
+#endif
+
+#endif
diff --git a/Code/Common/otbPersistentImageToOGRDataSourceFilter.txx b/Code/Common/otbPersistentImageToOGRDataSourceFilter.txx
new file mode 100644
index 0000000000..21a9a119bf
--- /dev/null
+++ b/Code/Common/otbPersistentImageToOGRDataSourceFilter.txx
@@ -0,0 +1,200 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt for details.
+
+  Some parts of this code are derived from ITK. See ITKCopyright.txt
+  for details.
+
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+#ifndef __otbPersistentImageToOGRDataSourceFilter_txx
+#define __otbPersistentImageToOGRDataSourceFilter_txx
+
+#include "otbPersistentImageToOGRDataSourceFilter.h"
+#include "itkTimeProbe.h"
+#include <boost/foreach.hpp>
+#include <stdio.h>
+#include "otbMacro.h"
+#include "otbOGRHelpers.h"
+
+namespace otb
+{
+
+template<class TImage>
+PersistentImageToOGRDataSourceFilter<TImage>
+::PersistentImageToOGRDataSourceFilter() : m_FieldName("DN"), m_LayerName("Layer"), m_GeometryType(wkbMultiPolygon)
+{
+   this->SetNumberOfInputs(2);
+   this->SetNumberOfRequiredInputs(2);
+   m_StreamSize.Fill(0);
+}
+
+template<class TImage>
+PersistentImageToOGRDataSourceFilter<TImage>
+::~PersistentImageToOGRDataSourceFilter()
+{
+}
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::SetOGRDataSource( OGRDataSourcePointerType ogrDS )
+{
+   this->itk::ProcessObject::SetNthInput(1, ogrDS);
+}
+
+template<class TImage>
+typename PersistentImageToOGRDataSourceFilter<TImage>::OGRDataSourceType *
+PersistentImageToOGRDataSourceFilter<TImage>
+::GetOGRDataSource( void )
+{
+   return static_cast<OGRDataSourceType *> (this->itk::ProcessObject::GetInput(1));
+}
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::AddOGRLayerCreationOption(const std::string& option)
+{
+  m_OGRLayerCreationOptions.push_back(option);
+  this->Modified();
+}
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::ClearOGRLayerCreationOptions()
+{
+  m_OGRLayerCreationOptions.clear();
+  this->Modified();
+}
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::SetOGRLayerCreationOptions(const std::vector<std::string>&  options)
+{
+  m_OGRLayerCreationOptions = options;
+  this->Modified();
+}
+
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::AllocateOutputs()
+{
+  // Nothing that needs to be allocated for the outputs : the output is not meant to be used
+}
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::Reset()
+{
+}
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::Synthetize()
+{
+}
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::Initialize()
+{
+   
+   std::string projectionRefWkt = this->GetInput()->GetProjectionRef();
+   bool projectionInformationAvailable = !projectionRefWkt.empty();
+   OGRSpatialReference * oSRS = NULL;
+   if(projectionInformationAvailable)
+   {
+      oSRS = static_cast<OGRSpatialReference *>(OSRNewSpatialReference(projectionRefWkt.c_str()));
+   }
+   
+   
+   OGRDataSourcePointerType ogrDS = this->GetOGRDataSource();
+
+   ogrDS->CreateLayer(m_LayerName, oSRS ,m_GeometryType, otb::ogr::StringListConverter(m_OGRLayerCreationOptions).to_ogr());
+   OGRFieldDefn field(m_FieldName.c_str(),OFTInteger);
+   
+   //Handle the case of shapefile. A shapefile is a layer and not a datasource.
+   //The layer name in a shapefile is the shapefile's name.
+   //This is not the case for a database as sqlite or PG.
+   if (ogrDS->GetLayersCount() == 1)
+   {
+      ogrDS->GetLayer(0).CreateField(field, true);
+   }
+   else
+   {
+      ogrDS->GetLayer(m_LayerName).CreateField(field, true);
+   }
+
+   //CSLDestroy( options );
+
+}
+
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::GenerateData()
+{
+  
+  if (this->GetStreamSize()[0]==0 && this->GetStreamSize()[1]==0)
+  {
+     this->m_StreamSize = this->GetInput()->GetRequestedRegion().GetSize();
+  }
+  
+  // call the processing function for this tile
+  OGRDataSourcePointerType currentTileVD = this->ProcessTile();
+  OGRLayerType srcLayer = currentTileVD->GetLayerChecked(0);
+
+  OGRDataSourcePointerType ogrDS = this->GetOGRDataSource();
+  OGRLayerType dstLayer = ogrDS->GetLayersCount() == 1
+                          ? ogrDS->GetLayer(0)
+                          : ogrDS->GetLayer(m_LayerName);
+  
+  
+  //Copy features contained in the memory layer (srcLayer) in the output layer
+  itk::TimeProbe chrono;
+  chrono.Start();
+  dstLayer.ogr().StartTransaction();
+  OGRLayerType::const_iterator featIt = srcLayer.begin();
+  for(; featIt!=srcLayer.end(); ++featIt)
+  {
+      OGRFeatureType dstFeature(dstLayer.GetLayerDefn());
+      dstFeature.SetFrom( *featIt, TRUE );
+      dstLayer.CreateFeature( dstFeature );
+  }
+  
+  dstLayer.ogr().CommitTransaction();
+  chrono.Stop();
+  otbMsgDebugMacro(<< "write ogr tile took " << chrono.GetTotal() << " sec");
+  
+}
+
+template<class TImage>
+void
+PersistentImageToOGRDataSourceFilter<TImage>
+::PrintSelf(std::ostream& os, itk::Indent indent) const
+{
+  Superclass::PrintSelf(os, indent);
+}
+
+} // end namespace otb
+#endif
diff --git a/Code/Segmentation/otbStreamingImageToOGRDataSourceSegmentationFilter.h b/Code/Segmentation/otbStreamingImageToOGRDataSourceSegmentationFilter.h
index ac2d26ba8b..25592161cd 100644
--- a/Code/Segmentation/otbStreamingImageToOGRDataSourceSegmentationFilter.h
+++ b/Code/Segmentation/otbStreamingImageToOGRDataSourceSegmentationFilter.h
@@ -25,7 +25,7 @@
 
 #include "otbPersistentImageFilter.h"
 #include "otbPersistentFilterStreamingDecorator.h"
-#include "otbPersistentImageToOGRDataFilter.h"
+#include "otbPersistentImageToOGRDataSourceFilter.h"
 #include "otbRelabelComponentImageFilter.h"
 #include "itkMultiplyImageFilter.h"
 
@@ -93,12 +93,12 @@ class LabeledOutputAccessor<MeanShiftSmoothingImageFilter<TInputImage, TOutputIm
  */
 template <class TImageType,  class TSegmentationFilter>
 class PersistentStreamingLabelImageToOGRDataSourceFilter
-  : public otb::PersistentImageToOGRDataFilter<TImageType>
+  : public otb::PersistentImageToOGRDataSourceFilter<TImageType>
 {
 public:
   /** Standard Self typedef */
   typedef PersistentStreamingLabelImageToOGRDataSourceFilter     Self;
-  typedef PersistentImageToOGRDataFilter<TImageType>             Superclass;
+  typedef PersistentImageToOGRDataSourceFilter<TImageType>             Superclass;
   typedef itk::SmartPointer<Self>                          Pointer;
   typedef itk::SmartPointer<const Self>                    ConstPointer;
 
diff --git a/Code/OBIA/otbWatershedSegmentationFilter.h b/Code/Segmentation/otbWatershedSegmentationFilter.h
similarity index 100%
rename from Code/OBIA/otbWatershedSegmentationFilter.h
rename to Code/Segmentation/otbWatershedSegmentationFilter.h
diff --git a/Code/OBIA/otbWatershedSegmentationFilter.txx b/Code/Segmentation/otbWatershedSegmentationFilter.txx
similarity index 100%
rename from Code/OBIA/otbWatershedSegmentationFilter.txx
rename to Code/Segmentation/otbWatershedSegmentationFilter.txx
diff --git a/Testing/Code/BasicFilters/CMakeLists.txt b/Testing/Code/BasicFilters/CMakeLists.txt
index 1c4d93b341..74247d1550 100644
--- a/Testing/Code/BasicFilters/CMakeLists.txt
+++ b/Testing/Code/BasicFilters/CMakeLists.txt
@@ -2781,82 +2781,6 @@ ADD_TEST(bfTvClampImageFilterTest ${BASICFILTERS_TESTS15}
 )
 
 
-# ---------------------    otbRasterizeVectorDataFilter---------------------
-ADD_TEST(bfTuVectorDataRasterizeFilterNew ${BASICFILTERS_TESTS15}
-  otbVectorDataRasterizeFilterNew
-)
-
-ADD_TEST(bfTvVectorDataRasterizeFilterSHP ${BASICFILTERS_TESTS15}
-  --compare-image 0.0001
-   ${BASELINE}/bfTvVectorDataRasterizeFilter_OutputSHP.tif
-   ${TEMP}/bfTvVectorDataRasterizeFilter_OutputSHP.tif
-  otbVectorDataRasterizeFilter
-  ${INPUTDATA}/QB_Toulouse_Ortho_XS.tif
-  ${INPUTDATA}/Capitole-Shadows.shp
-  ${TEMP}/bfTvVectorDataRasterizeFilter_OutputSHP.tif
-)
-
-ADD_TEST(bfTvVectorDataRasterizeFilterKML ${BASICFILTERS_TESTS15}
-  --compare-image 0.0001
-   ${BASELINE}/bfTvVectorDataRasterizeFilter_OutputKML.tif
-   ${TEMP}/bfTvVectorDataRasterizeFilter_OutputKML.tif
-  otbVectorDataRasterizeFilter
-  ${INPUTDATA}/QB_Toulouse_Ortho_XS.tif
-  ${INPUTDATA}/Capitole-Shadows.kml
-  ${TEMP}/bfTvVectorDataRasterizeFilter_OutputKML.tif
-)
-
-# ---------------------    otbRasterizeVectorDataFilter---------------------
-ADD_TEST(bfTuVectorDataToLabelImageFilterNew ${BASICFILTERS_TESTS15}
-  otbVectorDataToLabelImageFilterNew
-)
-
-ADD_TEST(bfTvVectorDataToLabelImageFilterSHP ${BASICFILTERS_TESTS15}
-  --compare-image 0.0
-  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
-  ${TEMP}/bfTvVectorDataToLabelImageFilter_Output.tif
-  otbVectorDataToLabelImageFilter
-  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
-  ${INPUTDATA}/QB_Toulouse_ortho.shp
-  ${TEMP}/bfTvVectorDataToLabelImageFilter_Output.tif
-)
-
-# ---------------------    otbOGRDataSourceToLabelImageFilter---------------------
-ADD_TEST(bfTuOGRDataSourceToLabelImageFilterNew ${BASICFILTERS_TESTS15}
-  otbOGRDataSourceToLabelImageFilterNew
-)
-
-ADD_TEST(bfTvOGRDataSourceToLabelImageFilterSHP ${BASICFILTERS_TESTS15}
-  --compare-image 0.0
-  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
-  ${TEMP}/bfTvOGRDataSourceToLabelImageFilter_Output.tif
-  otbOGRDataSourceToLabelImageFilter
-  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
-  ${INPUTDATA}/QB_Toulouse_ortho.shp
-  ${TEMP}/bfTvOGRDataSourceToLabelImageFilter_Output.tif
-)
-
-# ---------------------    otbPolygonizationRasterizationTest  ---------------------
-# bijectivity tests
-ADD_TEST(bfTvPolygonizationRasterization_UTM ${BASICFILTERS_TESTS15}
-  otbPolygonizationRasterizationTest
-  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
-)
-
-ADD_TEST(bfTvPolygonizationRasterization_WGS84 ${BASICFILTERS_TESTS15}
-  otbPolygonizationRasterizationTest
-  ${INPUTDATA}/QB_Toulouse_ortho_labelImage_WGS84.tif
-)
-ADD_TEST(bfTvPolygonizationRasterization_SensorModel ${BASICFILTERS_TESTS15}
-  otbPolygonizationRasterizationTest
-  ${INPUTDATA}/QB_Toulouse_SensorModel_labelImage.tif
-)
-
-ADD_TEST(bfTvPolygonizationRasterization_Index ${BASICFILTERS_TESTS15}
-  otbPolygonizationRasterizationTest
-  ${INPUTDATA}/QB_Toulouse_labelImage_Index.tif
-)
-
 #-------- TileImageFilter --------------------------
 ADD_TEST(bfTuTileImageFilterNew ${BASICFILTERS_TESTS15}
   otbTileImageFilterNew
@@ -3169,10 +3093,6 @@ otbMaximumAutocorrelationFactorImageFilter.cxx
 otbThresholdVectorImageFilter.cxx
 otbClampVectorImageFilter.cxx
 otbClampImageFilter.cxx
-otbVectorDataRasterizeFilter.cxx
-otbVectorDataToLabelImageFilter.cxx
-otbOGRDataSourceToLabelImageFilter.cxx
-otbPolygonizationRasterizationTest.cxx
 otbTileImageFilter.cxx
 )
 
diff --git a/Testing/Code/BasicFilters/otbBasicFiltersTests15.cxx b/Testing/Code/BasicFilters/otbBasicFiltersTests15.cxx
index ef350b3133..5166937e8d 100644
--- a/Testing/Code/BasicFilters/otbBasicFiltersTests15.cxx
+++ b/Testing/Code/BasicFilters/otbBasicFiltersTests15.cxx
@@ -43,13 +43,6 @@ void RegisterTests()
   REGISTER_TEST(otbClampVectorImageFilterTest);
   REGISTER_TEST(otbClampImageFilterNew);
   REGISTER_TEST(otbClampImageFilterTest);
-  REGISTER_TEST(otbVectorDataRasterizeFilterNew);
-  REGISTER_TEST(otbVectorDataRasterizeFilter);
-  REGISTER_TEST(otbVectorDataToLabelImageFilterNew);
-  REGISTER_TEST(otbVectorDataToLabelImageFilter);
-  REGISTER_TEST(otbOGRDataSourceToLabelImageFilterNew);
-  REGISTER_TEST(otbOGRDataSourceToLabelImageFilter);
-  REGISTER_TEST(otbPolygonizationRasterizationTest);
   REGISTER_TEST(otbTileImageFilterNew);
   REGISTER_TEST(otbTileImageFilter);
 }
diff --git a/Testing/Code/Common/CMakeLists.txt b/Testing/Code/Common/CMakeLists.txt
index 5554ed8f54..d3a2ee6ea2 100644
--- a/Testing/Code/Common/CMakeLists.txt
+++ b/Testing/Code/Common/CMakeLists.txt
@@ -1135,6 +1135,106 @@ ADD_TEST(coTvImageRegionAdaptativeSplitterStripSmallStream ${COMMON_TESTS13}
 
 
 
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ otbCommonTests14 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+ADD_TEST(obTuLabelImageToVectorDataFilterNew ${COMMON_TESTS14}
+    otbLabelImageToVectorDataFilterNew)
+
+ADD_TEST(obTvLabelImageToVectorDataFilter ${COMMON_TESTS14}
+    --compare-ogr ${NOTOL}
+    ${BASELINE_FILES}/obTuLabelImageToVectorDataFilter.shp
+    ${TEMP}/obTuLabelImageToVectorDataFilter.shp
+    otbLabelImageToVectorDataFilter
+    ${INPUTDATA}/labelImage_UnsignedChar.tif
+    ${TEMP}/obTuLabelImageToVectorDataFilter.shp
+    )
+
+ADD_TEST(obTuLabelImageToOGRDataSourceFilterNew ${COMMON_TESTS14}
+    otbLabelImageToOGRDataSourceFilterNew)
+
+ADD_TEST(obTvLabelImageToOGRDataSourceFilter ${COMMON_TESTS14}
+    otbLabelImageToOGRDataSourceFilter
+    ${INPUTDATA}/labelImage_UnsignedChar.tif
+    )
+
+# ---------------------    otbRasterizeVectorDataFilter---------------------
+ADD_TEST(bfTuVectorDataRasterizeFilterNew ${COMMON_TESTS14}
+  otbVectorDataRasterizeFilterNew
+)
+
+ADD_TEST(bfTvVectorDataRasterizeFilterSHP ${COMMON_TESTS14}
+  --compare-image 0.0001
+   ${BASELINE}/bfTvVectorDataRasterizeFilter_OutputSHP.tif
+   ${TEMP}/bfTvVectorDataRasterizeFilter_OutputSHP.tif
+  otbVectorDataRasterizeFilter
+  ${INPUTDATA}/QB_Toulouse_Ortho_XS.tif
+  ${INPUTDATA}/Capitole-Shadows.shp
+  ${TEMP}/bfTvVectorDataRasterizeFilter_OutputSHP.tif
+)
+
+ADD_TEST(bfTvVectorDataRasterizeFilterKML ${COMMON_TESTS14}
+  --compare-image 0.0001
+   ${BASELINE}/bfTvVectorDataRasterizeFilter_OutputKML.tif
+   ${TEMP}/bfTvVectorDataRasterizeFilter_OutputKML.tif
+  otbVectorDataRasterizeFilter
+  ${INPUTDATA}/QB_Toulouse_Ortho_XS.tif
+  ${INPUTDATA}/Capitole-Shadows.kml
+  ${TEMP}/bfTvVectorDataRasterizeFilter_OutputKML.tif
+)
+
+# ---------------------    otbRasterizeVectorDataFilter---------------------
+ADD_TEST(bfTuVectorDataToLabelImageFilterNew ${COMMON_TESTS14}
+  otbVectorDataToLabelImageFilterNew
+)
+
+ADD_TEST(bfTvVectorDataToLabelImageFilterSHP ${COMMON_TESTS14}
+  --compare-image 0.0
+  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
+  ${TEMP}/bfTvVectorDataToLabelImageFilter_Output.tif
+  otbVectorDataToLabelImageFilter
+  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
+  ${INPUTDATA}/QB_Toulouse_ortho.shp
+  ${TEMP}/bfTvVectorDataToLabelImageFilter_Output.tif
+)
+
+# ---------------------    otbOGRDataSourceToLabelImageFilter---------------------
+ADD_TEST(bfTuOGRDataSourceToLabelImageFilterNew ${COMMON_TESTS14}
+  otbOGRDataSourceToLabelImageFilterNew
+)
+
+ADD_TEST(bfTvOGRDataSourceToLabelImageFilterSHP ${COMMON_TESTS14}
+  --compare-image 0.0
+  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
+  ${TEMP}/bfTvOGRDataSourceToLabelImageFilter_Output.tif
+  otbOGRDataSourceToLabelImageFilter
+  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
+  ${INPUTDATA}/QB_Toulouse_ortho.shp
+  ${TEMP}/bfTvOGRDataSourceToLabelImageFilter_Output.tif
+)
+
+# ---------------------    otbPolygonizationRasterizationTest  ---------------------
+# bijectivity tests
+ADD_TEST(bfTvPolygonizationRasterization_UTM ${COMMON_TESTS14}
+  otbPolygonizationRasterizationTest
+  ${INPUTDATA}/QB_Toulouse_ortho_labelImage.tif
+)
+
+ADD_TEST(bfTvPolygonizationRasterization_WGS84 ${COMMON_TESTS14}
+  otbPolygonizationRasterizationTest
+  ${INPUTDATA}/QB_Toulouse_ortho_labelImage_WGS84.tif
+)
+ADD_TEST(bfTvPolygonizationRasterization_SensorModel ${COMMON_TESTS14}
+  otbPolygonizationRasterizationTest
+  ${INPUTDATA}/QB_Toulouse_SensorModel_labelImage.tif
+)
+
+ADD_TEST(bfTvPolygonizationRasterization_Index ${COMMON_TESTS14}
+  otbPolygonizationRasterizationTest
+  ${INPUTDATA}/QB_Toulouse_labelImage_Index.tif
+)
+
 # -------       Fichiers sources CXX -----------------------------------
 SET(BasicCommon_SRCS1
 otbCommonTests1.cxx
@@ -1301,6 +1401,17 @@ otbStreamingManager.cxx
 otbImageRegionAdaptativeSplitter.cxx
 )
 
+SET(BasicCommon_SRCS14
+otbCommonTests14.cxx
+otbLabelImageToVectorDataFilterNew.cxx
+otbLabelImageToVectorDataFilter.cxx
+otbLabelImageToOGRDataSourceFilter.cxx
+otbVectorDataRasterizeFilter.cxx
+otbVectorDataToLabelImageFilter.cxx
+otbOGRDataSourceToLabelImageFilter.cxx
+otbPolygonizationRasterizationTest.cxx
+)
+
 OTB_ADD_EXECUTABLE(otbCommonTests1 "${BasicCommon_SRCS1}" "OTBIO;OTBTesting")
 OTB_ADD_EXECUTABLE(otbCommonTests2 "${BasicCommon_SRCS2}" "OTBIO;OTBTesting")
 OTB_ADD_EXECUTABLE(otbCommonTests3 "${BasicCommon_SRCS3}" "OTBIO;OTBTesting")
@@ -1322,5 +1433,6 @@ TARGET_LINK_LIBRARIES(otbCommonTests11 OTBIO  OTBTesting itkvcl)
 
 OTB_ADD_EXECUTABLE(otbCommonTests12 "${BasicCommon_SRCS12}" "OTBIO;OTBTesting")
 OTB_ADD_EXECUTABLE(otbCommonTests13 "${BasicCommon_SRCS13}" "OTBIO;OTBTesting")
+OTB_ADD_EXECUTABLE(otbCommonTests14 "${BasicCommon_SRCS14}" "OTBIO;OTBTesting;OTBOGRAdapters")
 
 ENDIF( NOT OTB_DISABLE_CXX_TESTING AND BUILD_TESTING )
diff --git a/Testing/Code/Common/otbCommonTests14.cxx b/Testing/Code/Common/otbCommonTests14.cxx
new file mode 100644
index 0000000000..2d36a4fe72
--- /dev/null
+++ b/Testing/Code/Common/otbCommonTests14.cxx
@@ -0,0 +1,38 @@
+/*=========================================================================
+
+  Program:   ORFEO Toolbox
+  Language:  C++
+  Date:      $Date$
+  Version:   $Revision$
+
+
+  Copyright (c) Centre National d'Etudes Spatiales. All rights reserved.
+  See OTBCopyright.txt for details.
+
+
+     This software is distributed WITHOUT ANY WARRANTY; without even
+     the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+     PURPOSE.  See the above copyright notices for more information.
+
+=========================================================================*/
+
+// this file defines the otbCommonTest for the test driver
+// and all it expects is that you have a function called RegisterTests
+
+
+#include "otbTestMain.h"
+
+void RegisterTests()
+{
+   REGISTER_TEST(otbLabelImageToVectorDataFilterNew);
+   REGISTER_TEST(otbLabelImageToVectorDataFilter);
+   REGISTER_TEST(otbLabelImageToOGRDataSourceFilterNew);
+   REGISTER_TEST(otbLabelImageToOGRDataSourceFilter);
+   REGISTER_TEST(otbVectorDataRasterizeFilterNew);
+   REGISTER_TEST(otbVectorDataRasterizeFilter);
+   REGISTER_TEST(otbVectorDataToLabelImageFilterNew);
+   REGISTER_TEST(otbVectorDataToLabelImageFilter);
+   REGISTER_TEST(otbOGRDataSourceToLabelImageFilterNew);
+   REGISTER_TEST(otbOGRDataSourceToLabelImageFilter);
+   REGISTER_TEST(otbPolygonizationRasterizationTest);
+}
diff --git a/Testing/Code/OBIA/otbLabelImageToOGRDataSourceFilter.cxx b/Testing/Code/Common/otbLabelImageToOGRDataSourceFilter.cxx
similarity index 100%
rename from Testing/Code/OBIA/otbLabelImageToOGRDataSourceFilter.cxx
rename to Testing/Code/Common/otbLabelImageToOGRDataSourceFilter.cxx
diff --git a/Testing/Code/OBIA/otbLabelImageToVectorDataFilter.cxx b/Testing/Code/Common/otbLabelImageToVectorDataFilter.cxx
similarity index 100%
rename from Testing/Code/OBIA/otbLabelImageToVectorDataFilter.cxx
rename to Testing/Code/Common/otbLabelImageToVectorDataFilter.cxx
diff --git a/Testing/Code/OBIA/otbLabelImageToVectorDataFilterNew.cxx b/Testing/Code/Common/otbLabelImageToVectorDataFilterNew.cxx
similarity index 100%
rename from Testing/Code/OBIA/otbLabelImageToVectorDataFilterNew.cxx
rename to Testing/Code/Common/otbLabelImageToVectorDataFilterNew.cxx
diff --git a/Testing/Code/BasicFilters/otbOGRDataSourceToLabelImageFilter.cxx b/Testing/Code/Common/otbOGRDataSourceToLabelImageFilter.cxx
similarity index 100%
rename from Testing/Code/BasicFilters/otbOGRDataSourceToLabelImageFilter.cxx
rename to Testing/Code/Common/otbOGRDataSourceToLabelImageFilter.cxx
diff --git a/Testing/Code/BasicFilters/otbPolygonizationRasterizationTest.cxx b/Testing/Code/Common/otbPolygonizationRasterizationTest.cxx
similarity index 100%
rename from Testing/Code/BasicFilters/otbPolygonizationRasterizationTest.cxx
rename to Testing/Code/Common/otbPolygonizationRasterizationTest.cxx
diff --git a/Testing/Code/BasicFilters/otbVectorDataRasterizeFilter.cxx b/Testing/Code/Common/otbVectorDataRasterizeFilter.cxx
similarity index 100%
rename from Testing/Code/BasicFilters/otbVectorDataRasterizeFilter.cxx
rename to Testing/Code/Common/otbVectorDataRasterizeFilter.cxx
diff --git a/Testing/Code/BasicFilters/otbVectorDataToLabelImageFilter.cxx b/Testing/Code/Common/otbVectorDataToLabelImageFilter.cxx
similarity index 100%
rename from Testing/Code/BasicFilters/otbVectorDataToLabelImageFilter.cxx
rename to Testing/Code/Common/otbVectorDataToLabelImageFilter.cxx
diff --git a/Testing/Code/OBIA/CMakeLists.txt b/Testing/Code/OBIA/CMakeLists.txt
index deecaa3e46..5dbed702f4 100644
--- a/Testing/Code/OBIA/CMakeLists.txt
+++ b/Testing/Code/OBIA/CMakeLists.txt
@@ -175,40 +175,6 @@ ADD_TEST(obTuMeanShiftConnectedComponentSegmentationFilter ${OBIA_TESTS1}
       "distance<0.2"
       50)
 
-ADD_TEST(obTuMeanShiftSegmentationFilter ${OBIA_TESTS1}
-      otbMeanShiftSegmentationFilter
-      ${INPUTDATA}/ROI_QB_MUL_4.tif
-      ${TEMP}/obTuMeanShiftSegmentationFilterLabelImage.tif
-      ${TEMP}/obTuMeanShiftSegmentationFilterClusteredImage.tif
-      4
-      25
-      100
-      0.1
-      )
-
-ADD_TEST(obTuMeanShiftSegmentationFilterPruning ${OBIA_TESTS1}
-      otbMeanShiftSegmentationFilter
-      ${INPUTDATA}/ROI_QB_MUL_4.tif
-      ${TEMP}/obTuMeanShiftSegmentationFilterLabelImagePruning.tif
-      ${TEMP}/obTuMeanShiftSegmentationFilterClusteredImagePruning.tif
-      4
-      25
-      100
-      0.1
-      20
-      )  
-      
-
-ADD_TEST(obTuWatershedSegmentationFilter ${OBIA_TESTS1}
-      --compare-image ${NOTOL}
-      ${BASELINE}/obTuWatershedSegmentationFilterLabelImage.tif
-      ${TEMP}/obTuWatershedSegmentationFilterLabelImage.tif
-      otbWatershedSegmentationFilter
-      ${EXAMPLEDATA}/ROI_QB_PAN_1.tif
-      ${TEMP}/obTuWatershedSegmentationFilterLabelImage.tif
-      0.01
-      0.2
-      )
 
 ADD_TEST(obTuLabelImageToLabelMapWithAdjacencyFilterNew ${OBIA_TESTS3}
   otbLabelImageToLabelMapWithAdjacencyFilterNew)
@@ -225,26 +191,6 @@ ADD_TEST(obTvLabelImageToLabelMapWithAdjacencyFilter ${OBIA_TESTS3}
 ADD_TEST(obTuLabelMapToAttributeImageFilterNew ${OBIA_TESTS1}
     otbLabelMapToAttributeImageFilterNew)
 
-ADD_TEST(obTuLabelImageToVectorDataFilterNew ${OBIA_TESTS1}
-    otbLabelImageToVectorDataFilterNew)
-
-ADD_TEST(obTvLabelImageToVectorDataFilter ${OBIA_TESTS1}
-    --compare-ogr ${NOTOL}
-    ${BASELINE_FILES}/obTuLabelImageToVectorDataFilter.shp
-    ${TEMP}/obTuLabelImageToVectorDataFilter.shp
-    otbLabelImageToVectorDataFilter
-    ${INPUTDATA}/labelImage_UnsignedChar.tif
-    ${TEMP}/obTuLabelImageToVectorDataFilter.shp
-    )
-
-ADD_TEST(obTuLabelImageToOGRDataSourceFilterNew ${OBIA_TESTS1}
-    otbLabelImageToOGRDataSourceFilterNew)
-
-ADD_TEST(obTvLabelImageToOGRDataSourceFilter ${OBIA_TESTS1}
-    otbLabelImageToOGRDataSourceFilter
-    ${INPUTDATA}/labelImage_UnsignedChar.tif
-    )
-
 
 # OBIATests2 (need PQXX)
 IF(OTB_USE_PQXX)
@@ -301,12 +247,7 @@ otbVectorDataToLabelMapFilterNew.cxx
 otbStreamingConnectedComponentOBIATest.cxx
 otbMeanShiftStreamingConnectedComponentOBIATest.cxx
 otbMeanShiftConnectedComponentSegmentationFilterTest.cxx
-otbMeanShiftSegmentationFilter.cxx
-otbWatershedSegmentationFilter.cxx
 otbLabelMapToAttributeImageFilterNew.cxx
-otbLabelImageToVectorDataFilterNew.cxx
-otbLabelImageToVectorDataFilter.cxx
-otbLabelImageToOGRDataSourceFilter.cxx
 )
 
 
diff --git a/Testing/Code/OBIA/otbOBIATests1.cxx b/Testing/Code/OBIA/otbOBIATests1.cxx
index 764959e86e..236a2b80f8 100644
--- a/Testing/Code/OBIA/otbOBIATests1.cxx
+++ b/Testing/Code/OBIA/otbOBIATests1.cxx
@@ -56,11 +56,5 @@ REGISTER_TEST(otbStreamingConnectedComponentSegmentationOBIAToVectorDataFilterNe
 REGISTER_TEST(otbStreamingConnectedComponentSegmentationOBIAToVectorDataFilter);
 REGISTER_TEST(otbMeanShiftStreamingConnectedComponentSegmentationOBIAToVectorDataFilter);
 REGISTER_TEST(otbMeanShiftConnectedComponentSegmentationFilter);
-REGISTER_TEST(otbMeanShiftSegmentationFilter);
-REGISTER_TEST(otbWatershedSegmentationFilter);
 REGISTER_TEST(otbLabelMapToAttributeImageFilterNew);
-REGISTER_TEST(otbLabelImageToVectorDataFilterNew);
-REGISTER_TEST(otbLabelImageToVectorDataFilter);
-REGISTER_TEST(otbLabelImageToOGRDataSourceFilterNew);
-REGISTER_TEST(otbLabelImageToOGRDataSourceFilter);
 }
diff --git a/Testing/Code/Segmentation/CMakeLists.txt b/Testing/Code/Segmentation/CMakeLists.txt
index b4133d6e6f..e444307399 100644
--- a/Testing/Code/Segmentation/CMakeLists.txt
+++ b/Testing/Code/Segmentation/CMakeLists.txt
@@ -8,10 +8,10 @@ ENDIF( NOT OTB_DISABLE_CXX_TESTING AND BUILD_TESTING )
 
 # -------  otb::HooverMatrix &  otb::HooverInstance -------------
 
-ADD_TEST(obTuHooverMatrixFilterNew ${OBIA_TESTS1}
+ADD_TEST(obTuHooverMatrixFilterNew ${SEGMENTATION_TESTS1}
     otbHooverMatrixFilterNew)
 
-ADD_TEST(obTvHooverMatrixFilter ${OBIA_TESTS1}
+ADD_TEST(obTvHooverMatrixFilter ${SEGMENTATION_TESTS1}
     --compare-ascii ${NOTOL}
     ${BASELINE_FILES}/obTvHooverMatrixFilter.txt
     ${TEMP}/obTvHooverMatrixFilter.txt
@@ -21,10 +21,10 @@ ADD_TEST(obTvHooverMatrixFilter ${OBIA_TESTS1}
     ${TEMP}/obTvHooverMatrixFilter.txt
     )
 
-ADD_TEST(obTuHooverInstanceFilterNew ${OBIA_TESTS1}
+ADD_TEST(obTuHooverInstanceFilterNew ${SEGMENTATION_TESTS1}
     otbHooverInstanceFilterNew)
 
-ADD_TEST(obTvHooverInstanceFilterToAttributeImage ${OBIA_TESTS1}
+ADD_TEST(obTvHooverInstanceFilterToAttributeImage ${SEGMENTATION_TESTS1}
     --compare-image ${EPSILON_9}
     ${BASELINE}/obTvHooverInstanceFilterToAttributeImage.tif
     ${TEMP}/obTvHooverInstanceFilterToAttributeImage.tif
@@ -34,6 +34,40 @@ ADD_TEST(obTvHooverInstanceFilterToAttributeImage ${OBIA_TESTS1}
     ${TEMP}/obTvHooverInstanceFilterToAttributeImage.tif
     )
 
+ADD_TEST(obTuWatershedSegmentationFilter ${SEGMENTATION_TESTS1}
+      --compare-image ${NOTOL}
+      ${BASELINE}/obTuWatershedSegmentationFilterLabelImage.tif
+      ${TEMP}/obTuWatershedSegmentationFilterLabelImage.tif
+      otbWatershedSegmentationFilter
+      ${EXAMPLEDATA}/ROI_QB_PAN_1.tif
+      ${TEMP}/obTuWatershedSegmentationFilterLabelImage.tif
+      0.01
+      0.2
+      )
+
+ADD_TEST(obTuMeanShiftSegmentationFilter ${SEGMENTATION_TESTS1}
+      otbMeanShiftSegmentationFilter
+      ${INPUTDATA}/ROI_QB_MUL_4.tif
+      ${TEMP}/obTuMeanShiftSegmentationFilterLabelImage.tif
+      ${TEMP}/obTuMeanShiftSegmentationFilterClusteredImage.tif
+      4
+      25
+      100
+      0.1
+      )
+
+ADD_TEST(obTuMeanShiftSegmentationFilterPruning ${SEGMENTATION_TESTS1}
+      otbMeanShiftSegmentationFilter
+      ${INPUTDATA}/ROI_QB_MUL_4.tif
+      ${TEMP}/obTuMeanShiftSegmentationFilterLabelImagePruning.tif
+      ${TEMP}/obTuMeanShiftSegmentationFilterClusteredImagePruning.tif
+      4
+      25
+      100
+      0.1
+      20
+      )
+
 # -------            otb::StreamingVectorizedSegmentation   -------------
 ADD_TEST(obTuStreamingImageToOGRDataSourceSegmentationFilterNew ${SEGMENTATION_TESTS1}
     otbStreamingImageToOGRDataSourceSegmentationFilterNew)
@@ -97,6 +131,8 @@ otbHooverMatrixFilterNew.cxx
 otbHooverMatrixFilter.cxx
 otbHooverInstanceFilterNew.cxx
 otbHooverInstanceFilterToAttributeImage.cxx
+otbWatershedSegmentationFilter.cxx
+otbMeanShiftSegmentationFilter.cxx
 otbStreamingImageToOGRDataSourceSegmentationFilter.cxx
 otbOGRDataSourceStreamStitchingFilter.cxx
 )
diff --git a/Testing/Code/OBIA/otbMeanShiftSegmentationFilter.cxx b/Testing/Code/Segmentation/otbMeanShiftSegmentationFilter.cxx
similarity index 100%
rename from Testing/Code/OBIA/otbMeanShiftSegmentationFilter.cxx
rename to Testing/Code/Segmentation/otbMeanShiftSegmentationFilter.cxx
diff --git a/Testing/Code/Segmentation/otbSegmentationTests1.cxx b/Testing/Code/Segmentation/otbSegmentationTests1.cxx
index 2e08643da5..c4d0ba09dc 100644
--- a/Testing/Code/Segmentation/otbSegmentationTests1.cxx
+++ b/Testing/Code/Segmentation/otbSegmentationTests1.cxx
@@ -32,4 +32,6 @@ REGISTER_TEST(otbHooverMatrixFilterNew);
 REGISTER_TEST(otbHooverMatrixFilter);
 REGISTER_TEST(otbHooverInstanceFilterNew);
 REGISTER_TEST(otbHooverInstanceFilterToAttributeImage);
+REGISTER_TEST(otbWatershedSegmentationFilter);
+REGISTER_TEST(otbMeanShiftSegmentationFilter);
 }
diff --git a/Testing/Code/OBIA/otbWatershedSegmentationFilter.cxx b/Testing/Code/Segmentation/otbWatershedSegmentationFilter.cxx
similarity index 100%
rename from Testing/Code/OBIA/otbWatershedSegmentationFilter.cxx
rename to Testing/Code/Segmentation/otbWatershedSegmentationFilter.cxx
-- 
GitLab