diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 1f9f33ee14cb4fa876bb02a205e26d3eb307f45d..71e44a17c842598098919b36d9f937434a8917b8 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,10 +25,10 @@ before_script:
   # Provision efficiently the local LFS cache before checkout
   - git lfs fetch origin $CI_COMMIT_SHA
   # Checkout the expected branch
-  - git checkout $CI_COMMIT_REF_NAME
+  - git checkout -f -q $CI_COMMIT_SHA
 
 after_script:
-  - python3 CI/cdash_handler.py $CI_COMMIT_SHA $CI_PROJECT_ID $CI_PROJECT_DIR $K8S_SECRET_CDASH
+  - python3 CI/cdash_handler.py $CI_COMMIT_SHA $CI_PROJECT_ID $CI_PROJECT_DIR $K8S_SECRET_API_TOKEN
 
 stages:
   - precheck
diff --git a/CI/check_twin_pipelines.py b/CI/check_twin_pipelines.py
index d2a6113924677266de8cf30f8d35debc8ee2c3ea..7f05c1809cf02ae3d37b8bfd984a4bbf24756906 100644
--- a/CI/check_twin_pipelines.py
+++ b/CI/check_twin_pipelines.py
@@ -64,25 +64,29 @@ if __name__ == "__main__":
   sha1 = env['CI_COMMIT_SHA']
   # are we in a merge_request pipeline ?
   if 'CI_MERGE_REQUEST_IID' in env.keys():
-    if not CheckEnvParameters(['K8S_SECRET_TWIN_PIPELINE','CI_PROJECT_ID','CI_PIPELINE_ID']):
+    if not CheckEnvParameters(['K8S_SECRET_API_TOKEN']):
+      print("Make sure you have set a valid acces token for Gitlab API")
+      print("The K8S_SECRET_API_TOKEN environment variable should be set in 'Settings -> CI/CD -> Variables'")
       sys.exit(1)
-    mrInfo = GitlabRequest('merge_requests/'+env['CI_MERGE_REQUEST_IID'],token=env['K8S_SECRET_TWIN_PIPELINE'])
+    if not CheckEnvParameters(['CI_PROJECT_ID','CI_PIPELINE_ID']):
+      sys.exit(1)
+    mrInfo = GitlabRequest('merge_requests/'+env['CI_MERGE_REQUEST_IID'],token=env['K8S_SECRET_API_TOKEN'])
     wip_regex = re.compile("^[Ww][Ii][Pp]:")
     # is it a "WIP" merge request ?
     if wip_regex.search(mrInfo["title"]):
       # Yes: cancel the current pipeline
       print("Cancel current pipeline "+env['CI_PIPELINE_ID'])
       GitlabRequest('pipelines/'+env['CI_PIPELINE_ID']+'/cancel', data={}, \
-        project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_TWIN_PIPELINE'])
+        project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_API_TOKEN'])
       time.sleep(180)
       print("Error: this pipeline should have been canceled")
       sys.exit(1)
     else:
       # No: cancel any previous "normal" pipeline on the same SHA1
-      jres = GitlabRequest('pipelines?sha='+sha1, project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_TWIN_PIPELINE'])
+      jres = GitlabRequest('pipelines?sha='+sha1, project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_API_TOKEN'])
       for item in jres:
         if item["id"] < int(env['CI_PIPELINE_ID']) and item["status"] == "running":
           print("Cancel pipeline "+str(item["id"]))
           jres2 = GitlabRequest('pipelines/'+str(item["id"])+'/cancel', data={}, \
-            project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_TWIN_PIPELINE'])
+            project=env['CI_PROJECT_ID'], token=env['K8S_SECRET_API_TOKEN'])
 
diff --git a/CI/configure_option.cmake b/CI/configure_options.cmake
similarity index 97%
rename from CI/configure_option.cmake
rename to CI/configure_options.cmake
index d0b41c6adc0fe7546fecfbb698a5710cf849755d..861e24eeccea3d816cdb31da419ef6fda03459af 100644
--- a/CI/configure_option.cmake
+++ b/CI/configure_options.cmake
@@ -55,8 +55,7 @@ OTB_USE_SSE_FLAGS:BOOL=ON
 OTB_MPIEXEC_OPT:STRING=--allow-run-as-root")
 
 set (otb_wrap_option
-"OTB_WRAP_JAVA:BOOL=ON
-OTB_WRAP_PYTHON:BOOL=ON")
+"OTB_WRAP_PYTHON:BOOL=ON")
 
 set (otb_data_option
 "OTB_DATA_USE_LARGEINPUT:BOOL=OFF
diff --git a/CI/main_ci.cmake b/CI/main_ci.cmake
index eba3829c5017383a253e86a2d197ec0f1b860f1a..052fae88822b9b6d4d20b435f55bfb1090990b33 100644
--- a/CI/main_ci.cmake
+++ b/CI/main_ci.cmake
@@ -84,7 +84,7 @@ message(STATUS "CI profile : ${ci_profile}")
 #The following file set the CONFIGURE_OPTIONS variable
 set (ENABLE_DOXYGEN OFF)
 set (CONFIGURE_OPTIONS  "")
-include ( "${CMAKE_CURRENT_LIST_DIR}/configure_option.cmake" )
+include ( "${CMAKE_CURRENT_LIST_DIR}/configure_options.cmake" )
 
 # Sources are already checked out : do nothing for update
 set(CTEST_GIT_UPDATE_CUSTOM echo No update)
diff --git a/CI/main_superbuild.cmake b/CI/main_superbuild.cmake
index 7697f95fd7c69c72704af2e2da4dbb9b2c2f9fce..b969dc6a0346c2099ea241d4fbe16ae84523d5f5 100644
--- a/CI/main_superbuild.cmake
+++ b/CI/main_superbuild.cmake
@@ -17,14 +17,12 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 #
+# This script is a prototype for the future CI, it may evolve rapidly in a near future
 
 include( "${CMAKE_CURRENT_LIST_DIR}/macros.cmake" )
 
-# This script is a prototype for the future CI, it may evolve rapidly in a near future
 set (ENV{LANG} "C") # Only ascii output
 get_filename_component(OTB_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)
-get_filename_component(CI_PROJ_DIR ${OTB_SOURCE_DIR} DIRECTORY)
-get_filename_component(CI_ROOT_DIR ${CI_PROJ_DIR} DIRECTORY)
 
 ###########################################################################
 ###########################################################################
@@ -56,7 +54,7 @@ set( GIT "${CTEST_GIT_COMMAND}" )
 execute_process(
   COMMAND ${GIT} "clone" "${REMOTE}" "--branch" "${BRANCH_NAME}"
   "--depth" "1" "superbuild-artifact"
-  WORKING_DIRECTORY ${CI_PROJ_DIR}
+  WORKING_DIRECTORY ${OTB_SOURCE_DIR}
   RESULT_VARIABLE clone_res
   OUTPUT_VARIABLE clone_out
   ERROR_VARIABLE clone_err
@@ -83,17 +81,17 @@ endif()
 set (CMAKE_COMMAND "cmake")
 execute_process(
   COMMAND ${CMAKE_COMMAND} "-E" "tar" "xf"
-  "${CI_PROJ_DIR}/superbuild-artifact/SuperBuild_Install.tar"
-  WORKING_DIRECTORY ${CI_ROOT_DIR}
+  "${OTB_SOURCE_DIR}/superbuild-artifact/SuperBuild_Install.tar"
+  WORKING_DIRECTORY ${OTB_SOURCE_DIR}
   )
 
-set( XDK_PATH "${CI_ROOT_DIR}/xdk")
+set( XDK_PATH "${OTB_SOURCE_DIR}/xdk")
 
 if ( DEBUG )
   if ( EXISTS "${XDK_PATH}")
-    message("Tar file exists at ${XDK_PATH}")
+    message("Xdk folder exists at ${XDK_PATH}")
   else()
-    message("Something went wrong no tar file in ${XDK_PATH}")
+    message("Something went wrong no folder in ${XDK_PATH}")
   endif()
 endif()
 
@@ -118,7 +116,7 @@ set ( CTEST_INSTALL_DIRECTORY "${OTB_SOURCE_DIR}/install/" )
 set ( PROJECT_SOURCE_DIR "${OTB_SOURCE_DIR}" )
 
 set (CONFIGURE_OPTIONS  "")
-include ( "${CMAKE_CURRENT_LIST_DIR}/configure_option.cmake" )
+include ( "${CMAKE_CURRENT_LIST_DIR}/configure_options.cmake" )
 # SuperBuild case : one more configure option
 set ( CONFIGURE_OPTIONS
   "${CONFIGURE_OPTIONS}-DCMAKE_PREFIX_PATH=${XDK_PATH};")
@@ -133,10 +131,11 @@ set( GEOTIFF_CSV "${XDK_PATH}/share/epsg_csv" )
 set( PROJ_LIB "${XDK_PATH}/share" )
 set( CTEST_ENVIRONMENT
 "PATH=${XDK_PATH}/lib:${XDK_PATH}/bin:$ENV{PATH}
-GDAL_DATA= GDAL_DATA
-GEOTIFF_CSV= GEOTIFF_CSV
-PROJ_LIB= PROJ_LIB
 ")
+# It seems that we do not need that
+# GDAL_DATA= GDAL_DATA
+# GEOTIFF_CSV= GEOTIFF_CSV
+# PROJ_LIB= PROJ_LIB
 
 # Sources are already checked out : do nothing for update
 set(CTEST_GIT_UPDATE_CUSTOM echo No update)
diff --git a/CI/prepare_superbuild.cmake b/CI/prepare_superbuild.cmake
index 016c7825e0c4d4ac7c81d5ccccdb704898ca4ae3..169e612394f8e9c0bd616e4ab8f80a759a401d33 100644
--- a/CI/prepare_superbuild.cmake
+++ b/CI/prepare_superbuild.cmake
@@ -23,13 +23,6 @@ include( "${CMAKE_CURRENT_LIST_DIR}/macros.cmake" )
 
 set (ENV{LANG} "C") # Only ascii output
 get_filename_component(OTB_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR} DIRECTORY)
-get_filename_component(CI_PROJ_DIR ${OTB_SOURCE_DIR} DIRECTORY)
-get_filename_component(CI_ROOT_DIR ${CI_PROJ_DIR} DIRECTORY)
-
-# In GitLab we have :
-#   OTB_SOURCE_DIR=/builds/{project_dir}/otb
-#   CI_PROJ_DIR=/builds/{project_dir}
-#   CI_ROOT_DIR=/builds
 
 set ( DEBUG "1" )
 
@@ -52,7 +45,7 @@ set_dash_build_name()
 # This is platform dependent, and the next step (build) also
 # depends on that, as some paths are hardcoded
 # This can be fixed with a packaging of OTB_DEPENDS
-set (CTEST_INSTALL_DIRECTORY "${CI_ROOT_DIR}/xdk/")
+set (CTEST_INSTALL_DIRECTORY "${OTB_SOURCE_DIR}/xdk/")
 
 # HACK
 # This is needed because when using return() function ctest is trying
@@ -82,7 +75,7 @@ ctest_update( SOURCE "${OTB_SOURCE_DIR}" )
 set(CTEST_BUILD_FLAGS "-j16")
 
 set ( SB_CONFIGURE_OPTIONS "")
-include( "${CMAKE_CURRENT_LIST_DIR}/../SuperBuild/CI/configure_options.cmake" )
+include( "${CMAKE_CURRENT_LIST_DIR}/sb_configure_options.cmake" )
 
 ctest_configure(BUILD "${CTEST_BINARY_DIRECTORY}"
     SOURCE "${SUPERBUILD_SOURCE_DIR}"
@@ -116,8 +109,7 @@ foreach(sb_file  ${sb_file_list})
   file(APPEND ${SB_TXT} "${sb_file}${CONTENTS}")
 endforeach(sb_file)
 file(READ "${CTEST_BINARY_DIRECTORY}/CMakeCache.txt" CMAKE_ORIG)
-string(REPLACE "${CI_PROJ_DIR}" "" CMAKE_UNIFIED ${CMAKE_ORIG})
-file(APPEND ${SB_TXT} "CMakeCache.txt${CMAKE_UNIFIED}")
+file(APPEND ${SB_TXT} "CMakeCache.txt${CMAKE_ORIG}")
 file ( MD5 "${SB_TXT}" SB_MD5)
 message ( "SB_MD5 = ${SB_MD5}" )
 file (REMOVE ${SB_TXT})
@@ -180,7 +172,6 @@ ctest_submit()
 # TODO right now we rely on ctest_build to know whether there has been an error
 # in build, whereas SuperBuild does not necessarily return an error if something
 # goes wrong
-set ( SB_ARTIFACT_GIT "${CI_PROJ_DIR}/superbuild-artifact" )
 
 # REPOSITORY_GIT_URL and REMOTE whould be the same. Right now there are
 # different because one is https and one is ssh. Both should be ssh.
@@ -190,8 +181,9 @@ set( REPOSITORY_GIT_URL "git@gitlab.orfeo-toolbox.org:gbonnefille/superbuild-art
 execute_process(
   COMMAND ${GIT} "clone" "${REPOSITORY_GIT_URL}"
   "--branch" "master" "--depth" "1" "superbuild-artifact"
-  WORKING_DIRECTORY "${CI_PROJ_DIR}"
+  WORKING_DIRECTORY "${OTB_SOURCE_DIR}"
   )
+set ( SB_ARTIFACT_GIT "${OTB_SOURCE_DIR}/superbuild-artifact" )
 
 # setting up the repo
 # StrictHostKeyChecking so we don't have to add the host as a known key
@@ -260,24 +252,15 @@ endif()
 
 set ( SB_TAR_NAME "SuperBuild_Install.tar" )
 
-# create the tar
-# We need to create tar in its directory to avoid weird name in file
-# "tar: Removing leading `../../' from member names"
-# WARNING
-# We are creating a tar containing xdk/.., so when extracting the archive in
-# an other environment the output file will be xdk... Obvious isn't it?
-# Well... Not for everyone...
+# Creating the tar
 # May be for easier maintainability the tar name should be the same as the
 # file inside.
 execute_process(
-  COMMAND ${CMAKE_COMMAND} "-E" "tar" "cf" "${SB_TAR_NAME}"
+  COMMAND ${CMAKE_COMMAND} "-E" "tar" "cf" "${SB_ARTIFACT_GIT}/${SB_TAR_NAME}"
   -- "${CTEST_INSTALL_DIRECTORY}"
-  WORKING_DIRECTORY ${CI_ROOT_DIR}
+  WORKING_DIRECTORY ${OTB_SOURCE_DIR}
   )
 
-# We need to copy the tar file, as it is on a different partition in the gitlab
-# context
-file ( COPY "${CI_ROOT_DIR}/${SB_TAR_NAME}" DESTINATION "${SB_ARTIFACT_GIT}")
 
 # In a near futur it might be nice to clean up the mess we made...
 
diff --git a/SuperBuild/CI/configure_options.cmake b/CI/sb_configure_options.cmake
similarity index 100%
rename from SuperBuild/CI/configure_options.cmake
rename to CI/sb_configure_options.cmake
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 8ffe654ab3f8e0b5a2892cc95206595e3b23f1f8..c162d39a17e6c8203d186fdad434ae93a651dc74 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -165,9 +165,6 @@ endif()
 if(NOT OTB_INSTALL_PYTHON_DIR)
   set(OTB_INSTALL_PYTHON_DIR "${OTB_INSTALL_LIBRARY_DIR}/otb/python")
 endif()
-if(NOT OTB_INSTALL_JAVA_DIR)
-  set(OTB_INSTALL_JAVA_DIR "${OTB_INSTALL_LIBRARY_DIR}/otb/java")
-endif()
 if(NOT OTB_INSTALL_DATA_DIR)
   set(OTB_INSTALL_DATA_DIR "share/otb")
 endif()
@@ -533,7 +530,6 @@ foreach(otb_option
     CMAKE_CXX_FLAGS
     ${option_list}
     OTB_WRAP_PYTHON
-    OTB_WRAP_JAVA
     OTB_DATA_ROOT
     OTB_USE_OPENMP
     OTB_USE_SSE_FLAGS
diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.1.png b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.1.png
deleted file mode 100644
index 21b0d0b017d140ad17456c384e583e7cf308297a..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.1.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:34a5f9e6daad51f0e614fe07e4755422c8420fda029e7ad7302de31a92535982
-size 1340160
diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png
deleted file mode 100644
index c2d86e289fa134625e4e008e8b5765201acd9478..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:870c0d619c315c9843cd9a5aedc44a34471d5fecbc9306a492efbb47c19530b9
-size 1340628
diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png.aux.xml b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png.aux.xml
deleted file mode 100644
index 761fbb2f643719fcae011bda40747b745e89f458..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadByStepsExampleOutput.png.aux.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<PAMDataset>
-  <SRS>PROJCS["WGS 84 / UTM zone 32N",
-    GEOGCS["WGS 84",
-        DATUM["WGS_1984",
-            SPHEROID["WGS 84",6378137,298.257223563,
-                AUTHORITY["EPSG","7030"]],
-            AUTHORITY["EPSG","6326"]],
-        PRIMEM["Greenwich",0],
-        UNIT["degree",0.0174532925199433],
-        AUTHORITY["EPSG","4326"]],
-    PROJECTION["Transverse_Mercator"],
-    PARAMETER["latitude_of_origin",0],
-    PARAMETER["central_meridian",9],
-    PARAMETER["scale_factor",0.9996],
-    PARAMETER["false_easting",500000],
-    PARAMETER["false_northing",0],
-    UNIT["metre",1,
-        AUTHORITY["EPSG","9001"]],
-    AUTHORITY["EPSG","32632"]]</SRS>
-  <GeoTransform>  4.3913640000000002e+05,  5.9999999999999998e-01,  0.0000000000000000e+00,  5.2737065999999996e+06,  0.0000000000000000e+00, -5.9999999999999998e-01</GeoTransform>
-  <Metadata domain="IMAGE_STRUCTURE">
-    <MDI key="INTERLEAVE">PIXEL</MDI>
-  </Metadata>
-  <Metadata>
-    <MDI key="AREA_OR_POINT">Area</MDI>
-  </Metadata>
-</PAMDataset>
diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.1.png b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.1.png
deleted file mode 100644
index 3bb75ceacc22bea2c6e5b72383c4b972febd74fa..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.1.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b68d89bfa22c07d91a304ff20c04aa4c242197a66cf24b4f7957cc863c1fd2f7
-size 15199
diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png
deleted file mode 100644
index bb6e778dc5e12c0296d21e697596fa5ea9eb8c0d..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:079e3734a9c954f76d4b58596b0ffe9b0bbecb92958774bb7b6c433cb9b7a36d
-size 15220
diff --git a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png.aux.xml b/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png.aux.xml
deleted file mode 100644
index 21ce935f9d0862129f77af6bd48d60cba2eabf67..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/ExtractRoadExampleOutput.png.aux.xml
+++ /dev/null
@@ -1,24 +0,0 @@
-<PAMDataset>
-  <SRS>PROJCS["WGS 84 / UTM zone 32N",
-    GEOGCS["WGS 84",
-        DATUM["WGS_1984",
-            SPHEROID["WGS 84",6378137,298.257223563,
-                AUTHORITY["EPSG","7030"]],
-            AUTHORITY["EPSG","6326"]],
-        PRIMEM["Greenwich",0],
-        UNIT["degree",0.0174532925199433],
-        AUTHORITY["EPSG","4326"]],
-    PROJECTION["Transverse_Mercator"],
-    PARAMETER["latitude_of_origin",0],
-    PARAMETER["central_meridian",9],
-    PARAMETER["scale_factor",0.9996],
-    PARAMETER["false_easting",500000],
-    PARAMETER["false_northing",0],
-    UNIT["metre",1,
-        AUTHORITY["EPSG","9001"]],
-    AUTHORITY["EPSG","32632"]]</SRS>
-  <GeoTransform>  4.3913640000000002e+05,  5.9999999999999998e-01,  0.0000000000000000e+00,  5.2737065999999996e+06,  0.0000000000000000e+00, -5.9999999999999998e-01</GeoTransform>
-  <Metadata>
-    <MDI key="AREA_OR_POINT">Area</MDI>
-  </Metadata>
-</PAMDataset>
diff --git a/Data/Baseline/Examples/FeatureExtraction/SeamCarvingExampleOutput.png b/Data/Baseline/Examples/FeatureExtraction/SeamCarvingExampleOutput.png
deleted file mode 100644
index 426eb10b3d9e1e644289252ae467dbd16d37a9ee..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/SeamCarvingExampleOutput.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4015aa8e7dcf8993def02252301d5f91eb73b970fecd277f799194551bc99ce0
-size 35299
diff --git a/Data/Baseline/Examples/FeatureExtraction/SeamCarvingOtherExampleOutput.png b/Data/Baseline/Examples/FeatureExtraction/SeamCarvingOtherExampleOutput.png
deleted file mode 100644
index eed540571c0e9fe756b6835a6a8782e25d6da40e..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/SeamCarvingOtherExampleOutput.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:da8f331a2806a0c06405abcd7806ebdb668e13a74457151313f13a5ed7c57a32
-size 45234
diff --git a/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png.aux.xml b/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png.aux.xml
deleted file mode 100644
index 761fbb2f643719fcae011bda40747b745e89f458..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png.aux.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<PAMDataset>
-  <SRS>PROJCS["WGS 84 / UTM zone 32N",
-    GEOGCS["WGS 84",
-        DATUM["WGS_1984",
-            SPHEROID["WGS 84",6378137,298.257223563,
-                AUTHORITY["EPSG","7030"]],
-            AUTHORITY["EPSG","6326"]],
-        PRIMEM["Greenwich",0],
-        UNIT["degree",0.0174532925199433],
-        AUTHORITY["EPSG","4326"]],
-    PROJECTION["Transverse_Mercator"],
-    PARAMETER["latitude_of_origin",0],
-    PARAMETER["central_meridian",9],
-    PARAMETER["scale_factor",0.9996],
-    PARAMETER["false_easting",500000],
-    PARAMETER["false_northing",0],
-    UNIT["metre",1,
-        AUTHORITY["EPSG","9001"]],
-    AUTHORITY["EPSG","32632"]]</SRS>
-  <GeoTransform>  4.3913640000000002e+05,  5.9999999999999998e-01,  0.0000000000000000e+00,  5.2737065999999996e+06,  0.0000000000000000e+00, -5.9999999999999998e-01</GeoTransform>
-  <Metadata domain="IMAGE_STRUCTURE">
-    <MDI key="INTERLEAVE">PIXEL</MDI>
-  </Metadata>
-  <Metadata>
-    <MDI key="AREA_OR_POINT">Area</MDI>
-  </Metadata>
-</PAMDataset>
diff --git a/Data/Baseline/Examples/Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndex.tif b/Data/Baseline/Examples/Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndex.tif
index 0225c9d196f05cec5b484ecdcc45a096f2f3ce03..4361cfbb8aafbcc98f9c8ac99e40739f62f9aaf1 100644
--- a/Data/Baseline/Examples/Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndex.tif
+++ b/Data/Baseline/Examples/Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndex.tif
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:42df562a687bdf13d65cacc6da48666b28da72efa79d7d668e607cf82eba4c11
-size 68855
+oid sha256:91667b86ce412524444bde780eee2c7f0baff0c05ecdc5b66a49aca39bc60dda
+size 65842
diff --git a/Data/Baseline/Examples/Radiometry/NDVIRAndNIRVegetationIndex.tif b/Data/Baseline/Examples/Radiometry/NDVIRAndNIRVegetationIndex.tif
deleted file mode 100644
index 0882267d3bfa84e1cf7089f0f6f7aeb50c632151..0000000000000000000000000000000000000000
--- a/Data/Baseline/Examples/Radiometry/NDVIRAndNIRVegetationIndex.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5727e5525e7597823337b25ca4a86b18f96606d68a8fd8b624c6d3a8796372b4
-size 63578
diff --git a/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.1.txt b/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.1.txt
new file mode 100644
index 0000000000000000000000000000000000000000..20e589ba2a9407e406e8511baf12a44bc63c2a43
--- /dev/null
+++ b/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.1.txt
@@ -0,0 +1 @@
+io.mse: 0.003289417131
diff --git a/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.txt b/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.txt
new file mode 100644
index 0000000000000000000000000000000000000000..aec10cefd80236745402a3c392cbc9590a666de6
--- /dev/null
+++ b/Data/Baseline/OTB-Applications/Files/apTvClTrainVectorRegressionModel.txt
@@ -0,0 +1 @@
+io.mse: 0.001359587419
diff --git a/Data/Baseline/OTB-Applications/Files/apTvTestApplicationOutputXML_All.xml b/Data/Baseline/OTB-Applications/Files/apTvTestApplicationOutputXML_All.xml
index 1c1803f11a3e483a5a25f2ef137c8cfca743b4b0..df8aac655e0b4d274795174d53e1cb443eebac8e 100644
--- a/Data/Baseline/OTB-Applications/Files/apTvTestApplicationOutputXML_All.xml
+++ b/Data/Baseline/OTB-Applications/Files/apTvTestApplicationOutputXML_All.xml
@@ -5,7 +5,6 @@
         <name>TestApplication</name>
         <descr>This application helps developers to test parameters types</descr>
         <doc>
-            <name>Test</name>
             <longdescr>The purpose of this application is to test parameters types.</longdescr>
             <authors>OTB-Team</authors>
             <limitations>None</limitations>
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.dbf
deleted file mode 100644
index 872a668071680090e04ee4154d26d68b18630e90..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f9d6c2cacc6b2947ee21de06212d8456f1ad1dd817eb08f0cca74a461982e6fc
-size 13050
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shp
deleted file mode 100644
index 0ae7cfbd6a7bb8fd9ede0766fb817fafdaef3a1b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:03dc018b3fda6afc76870dbb82d43cf954b483d451a44bc9609547a646cd5f69
-size 17244
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shx
deleted file mode 100644
index d7d3c02a05f660729a7ea7f614bb249b23c8dfdb..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:9ddb05befb0e32de1d63c65853967329a2e279c8b47ead80a68e659a11f2d692
-size 1516
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.dbf
deleted file mode 100644
index 872a668071680090e04ee4154d26d68b18630e90..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f9d6c2cacc6b2947ee21de06212d8456f1ad1dd817eb08f0cca74a461982e6fc
-size 13050
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.prj
deleted file mode 100644
index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.prj
+++ /dev/null
@@ -1 +0,0 @@
-PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp
deleted file mode 100644
index d989282e41d5a15672cd37b1ec88f1cf38868494..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a761c4931a9325ce306da5c82f1be3c709ab0f888aeab4a412932872c3e8d79d
-size 23692
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shx
deleted file mode 100644
index de9ebdc4ff20d670b2fcea817a3e9ffc5835fb36..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1f99f80a26a8df140d6cdb44d9ed2f1a32a2477927138eca8c5aec56b9ab66e9
-size 1516
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.dbf
deleted file mode 100644
index 0a7f2145c124cc5de965a72bb2b58d5209ddb9ca..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c11d7da214ea38b7c3c0083a92ee13467c13dca735075c01d8ddb73124bc4437
-size 1881
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.prj
deleted file mode 100644
index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.prj
+++ /dev/null
@@ -1 +0,0 @@
-PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shp
deleted file mode 100644
index f4493a2480785e067a59ea8563bff53f69594f84..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f6b7569316bbb6954532949243743a6a02bf59b8e6f15e8768ab74cd49d18ff9
-size 2948
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shx
deleted file mode 100644
index 902c5a761865f19597c28d48f90b02dccbb32fcf..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.1.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bd87422448e1242a1b30eb69ae88d4a36a96bfc2d00764a8ec3c35e02063a1c7
-size 292
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.dbf
deleted file mode 100644
index 0a7f2145c124cc5de965a72bb2b58d5209ddb9ca..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c11d7da214ea38b7c3c0083a92ee13467c13dca735075c01d8ddb73124bc4437
-size 1881
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.prj
deleted file mode 100644
index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.prj
+++ /dev/null
@@ -1 +0,0 @@
-PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp
deleted file mode 100644
index e549ed0a01f161cd1bb1e48d37d67a1bb984818c..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c1a477f4f647ebb0feff76da6fe3b92adcac25972372a94e5fa9b5db4b3be02d
-size 4084
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shx
deleted file mode 100644
index 911a74cdb5a4c9e5647301206e325a1f1f2192cf..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:956ffd6cbb30ed2bc8c585e8c938477943d920f7309981a9864bf8f98ae3f992
-size 292
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.dbf
deleted file mode 100644
index 9254d4d3c5008b4dff3d1cd4653a1c8e3d6820c2..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:970b377a49bf3308da27de62de02dc2000e666a4cc49a220023e212cc5082896
-size 713
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.prj
deleted file mode 100644
index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.prj
+++ /dev/null
@@ -1 +0,0 @@
-PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shp
deleted file mode 100644
index b8d4601a93154c3eb59f2a18c30d1e4c224a4af5..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6e9dbd487f0d15fc07a187b9e38649eaef4829ff8a64ffbbe0ebf59c0ced2848
-size 1172
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shx
deleted file mode 100644
index b7889485ca6f854bec6f1120cc7157177b7d3062..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.1.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:eade214003f288170371c708073838963df379c9d55bfb68b77c488c94d10b7e
-size 164
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.dbf
deleted file mode 100644
index 9254d4d3c5008b4dff3d1cd4653a1c8e3d6820c2..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:970b377a49bf3308da27de62de02dc2000e666a4cc49a220023e212cc5082896
-size 713
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.prj b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.prj
deleted file mode 100644
index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.prj
+++ /dev/null
@@ -1 +0,0 @@
-PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp
deleted file mode 100644
index b3b4cc6c6425eb929a2a6fe0b4c3611afb8e04ca..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3b83881bd76b1347059066ae1057d27cf0497cb92ac6cb16e07ec3d5ee29f5bd
-size 1172
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shx b/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shx
deleted file mode 100644
index 1b5b61f68e07a0b7e530125c3df3fe5484a228cd..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:78741d544b7ebd7211d6f2655d31b801443f6a60a75ec18a1dfe94e80f51852c
-size 164
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.dbf
deleted file mode 100644
index 1227f9a239e9e54e85d947eb4eee51ed810d3fe4..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5e98e653523faa8868276d04332dc8a207b8e99bb2e86814c2ecf3e71f64184d
-size 3097
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.prj b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.prj
deleted file mode 100644
index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.prj
+++ /dev/null
@@ -1 +0,0 @@
-PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shp b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shp
deleted file mode 100644
index f4493a2480785e067a59ea8563bff53f69594f84..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f6b7569316bbb6954532949243743a6a02bf59b8e6f15e8768ab74cd49d18ff9
-size 2948
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shx b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shx
deleted file mode 100644
index 902c5a761865f19597c28d48f90b02dccbb32fcf..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.1.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bd87422448e1242a1b30eb69ae88d4a36a96bfc2d00764a8ec3c35e02063a1c7
-size 292
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.dbf
deleted file mode 100644
index 1227f9a239e9e54e85d947eb4eee51ed810d3fe4..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5e98e653523faa8868276d04332dc8a207b8e99bb2e86814c2ecf3e71f64184d
-size 3097
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.prj b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.prj
deleted file mode 100644
index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.prj
+++ /dev/null
@@ -1 +0,0 @@
-PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shp b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shp
deleted file mode 100644
index e549ed0a01f161cd1bb1e48d37d67a1bb984818c..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c1a477f4f647ebb0feff76da6fe3b92adcac25972372a94e5fa9b5db4b3be02d
-size 4084
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shx b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shx
deleted file mode 100644
index 911a74cdb5a4c9e5647301206e325a1f1f2192cf..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_gt.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:956ffd6cbb30ed2bc8c585e8c938477943d920f7309981a9864bf8f98ae3f992
-size 292
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.dbf b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.dbf
deleted file mode 100644
index 9ba00259ac7d3effd149c9bde7c15def5fb69d93..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6ac3987c4408a1c86528898189249cc26502b02b536a0e64a5106f0d230b3a8b
-size 33
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.prj b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.prj
deleted file mode 100644
index da98376fa44ea626ab3c6ca1debe4660482e548b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.prj
+++ /dev/null
@@ -1 +0,0 @@
-PROJCS["WGS_1984_UTM_Zone_31N",GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",3],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0],UNIT["Meter",1]]
\ No newline at end of file
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shp b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shp
deleted file mode 100644
index f970b67678a899f87859859d3bcb35a9b4c6c525..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:926401bfc2997f7c001f827859a1281ceb6f688660720f605f14f3e54207568e
-size 100
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shx b/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shx
deleted file mode 100644
index f970b67678a899f87859859d3bcb35a9b4c6c525..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB-Applications/Files/cdbTvVectorDataDSValidationOutpout_LI_wr.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:926401bfc2997f7c001f827859a1281ceb6f688660720f605f14f3e54207568e
-size 100
diff --git a/Data/Baseline/OTB-Applications/Images/apTvClKMeansImageClassificationInputCentroids.tif b/Data/Baseline/OTB-Applications/Images/apTvClKMeansImageClassificationInputCentroids.tif
new file mode 100644
index 0000000000000000000000000000000000000000..ce0ecbe5e6e8ea678c4ce3a6e7701d725de1658a
--- /dev/null
+++ b/Data/Baseline/OTB-Applications/Images/apTvClKMeansImageClassificationInputCentroids.tif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:28427a2e951d1b56636568b966922a2d99f68c8e3f477aab99904fa5971fc42d
+size 66540
diff --git a/Data/Baseline/OTB/Files/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt b/Data/Baseline/OTB/Files/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt
deleted file mode 100644
index 4a22e8ff04fcc5b9c47c42cd28b5191c0977cbc6..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt
+++ /dev/null
@@ -1,18048 +0,0 @@
----
-Label        : 1
-Position     : [244.61, 1.64508]
-Measurements : [1399.95, 310113, 0.266257, -0.476478]
----
-Label        : 1
-Position     : [241.128, 6.12]
-Measurements : [1466.45, 487704, 0.232991, -1.2636]
----
-Label        : 1
-Position     : [145.371, 6.6365]
-Measurements : [1208.23, 386771, 0.401874, -0.981297]
----
-Label        : 1
-Position     : [633.408, 8.68]
-Measurements : [1465.12, 382959, 0.372033, -1.244]
----
-Label        : 1
-Position     : [250.856, 9.192]
-Measurements : [993.262, 136479, 0.278658, -0.930991]
----
-Label        : 1
-Position     : [255.214, 10.1541]
-Measurements : [1078.76, 119096, 0.313496, -0.642462]
----
-Label        : 1
-Position     : [390.951, 10.5048]
-Measurements : [1572.18, 315723, -0.278482, -0.414006]
----
-Label        : 1
-Position     : [243.582, 10.5278]
-Measurements : [1045.65, 500117, 1.10216, -0.141367]
----
-Label        : 1
-Position     : [732.736, 10.728]
-Measurements : [1762.88, 822066, -0.103484, -1.57081]
----
-Label        : 1
-Position     : [137.973, 11.0771]
-Measurements : [1256.87, 159712, 0.616424, 0.726392]
----
-Label        : 1
-Position     : [141.8, 11.24]
-Measurements : [1091.2, 260850, 0.559676, -0.294604]
----
-Label        : 1
-Position     : [731.097, 11.4464]
-Measurements : [1592.97, 893144, 0.148556, -1.60652]
----
-Label        : 1
-Position     : [633.484, 11.7069]
-Measurements : [1417.94, 406889, 0.473387, -1.23179]
----
-Label        : 1
-Position     : [631.412, 12.0436]
-Measurements : [1338.02, 330638, 0.756367, -0.51725]
----
-Label        : 1
-Position     : [388.688, 12.264]
-Measurements : [1610.63, 268830, -0.15682, -0.3936]
----
-Label        : 1
-Position     : [255.69, 13.11]
-Measurements : [1106.66, 105507, 0.132854, -0.843231]
----
-Label        : 1
-Position     : [632.879, 13.4648]
-Measurements : [1188.96, 285530, 1.08638, 0.33468]
----
-Label        : 1
-Position     : [636.692, 13.4681]
-Measurements : [1033.69, 268840, 1.51544, 1.83386]
----
-Label        : 1
-Position     : [736.543, 13.4748]
-Measurements : [1164.8, 883154, 1.1134, -0.431529]
----
-Label        : 1
-Position     : [390.222, 13.9819]
-Measurements : [1660.22, 229802, 0.0782276, -0.814122]
----
-Label        : 1
-Position     : [632.384, 14.312]
-Measurements : [1012.4, 177711, 0.772086, 0.107333]
----
-Label        : 1
-Position     : [21.4766, 14.8077]
-Measurements : [795.261, 357152, 1.18748, 0.459446]
----
-Label        : 1
-Position     : [392.641, 16.0582]
-Measurements : [1638.22, 226522, 0.14735, -0.93468]
----
-Label        : 1
-Position     : [249.832, 17.896]
-Measurements : [1307.62, 466036, 1.02525, 0.247706]
----
-Label        : 1
-Position     : [392.272, 17.896]
-Measurements : [1615.52, 211561, 0.107659, -0.903024]
----
-Label        : 1
-Position     : [463.44, 17.896]
-Measurements : [1208.43, 545199, 0.88799, -0.0947112]
----
-Label        : 1
-Position     : [24.0958, 18.4597]
-Measurements : [1141.29, 306141, 1.15167, 1.3369]
----
-Label        : 1
-Position     : [245.902, 18.73]
-Measurements : [1440.71, 720124, 0.354696, -1.28161]
----
-Label        : 1
-Position     : [22.504, 19.432]
-Measurements : [1278.26, 415437, 0.803853, -0.10986]
----
-Label        : 1
-Position     : [514.821, 20.527]
-Measurements : [1898.42, 453807, 0.1057, -1.21854]
----
-Label        : 1
-Position     : [463.682, 20.8592]
-Measurements : [1761.42, 608797, 0.142866, -1.24805]
----
-Label        : 1
-Position     : [516.176, 20.968]
-Measurements : [1914.58, 572565, -0.0181663, -1.35972]
----
-Label        : 1
-Position     : [153.662, 21.1989]
-Measurements : [1506.15, 580964, -0.152713, -1.35291]
----
-Label        : 1
-Position     : [388.377, 21.2292]
-Measurements : [1267.5, 207452, 0.360062, -0.744269]
----
-Label        : 1
-Position     : [250.729, 22.2607]
-Measurements : [1073.09, 473769, 1.24396, 0.868018]
----
-Label        : 1
-Position     : [516.187, 22.3915]
-Measurements : [2146.87, 480967, -0.342337, -1.23822]
----
-Label        : 1
-Position     : [462.482, 22.4791]
-Measurements : [2129.57, 517522, -0.267177, -1.15811]
----
-Label        : 1
-Position     : [506.96, 22.504]
-Measurements : [1908.17, 249995, 0.161354, -0.726865]
----
-Label        : 1
-Position     : [398.494, 22.8755]
-Measurements : [1657.21, 181656, 0.00827773, -0.871096]
----
-Label        : 1
-Position     : [737.143, 23.0831]
-Measurements : [783.959, 227622, 1.37876, 0.616613]
----
-Label        : 1
-Position     : [465.466, 23.1043]
-Measurements : [2152.34, 547081, -0.158895, -1.23519]
----
-Label        : 1
-Position     : [509.553, 23.3008]
-Measurements : [1965.67, 280987, 0.0783567, -1.00579]
----
-Label        : 1
-Position     : [732.224, 24.04]
-Measurements : [1025.3, 238485, 0.672238, -0.889804]
----
-Label        : 1
-Position     : [781.738, 24.5256]
-Measurements : [464.236, 23392.7, 1.45716, 0.94265]
----
-Label        : 1
-Position     : [501.188, 24.5512]
-Measurements : [1608.93, 167753, 0.226801, -0.447532]
----
-Label        : 1
-Position     : [468.56, 24.552]
-Measurements : [2138.24, 554036, -0.226939, -0.996085]
----
-Label        : 1
-Position     : [151.016, 25.064]
-Measurements : [1748.73, 214056, 0.0103525, -0.888018]
----
-Label        : 1
-Position     : [399.44, 25.064]
-Measurements : [1504.12, 316982, -0.312925, -0.924175]
----
-Label        : 1
-Position     : [26.6549, 26.0814]
-Measurements : [1091.79, 305305, 0.576538, -0.74217]
----
-Label        : 1
-Position     : [28.136, 26.6]
-Measurements : [1120.4, 265311, 0.662549, -0.538509]
----
-Label        : 1
-Position     : [511.833, 26.6849]
-Measurements : [1906.72, 445497, -0.27535, -1.01516]
----
-Label        : 1
-Position     : [499.28, 27.624]
-Measurements : [1507.84, 123543, -0.351548, -0.862913]
----
-Label        : 1
-Position     : [398.49, 27.822]
-Measurements : [1379.79, 415076, -0.0775959, -1.37466]
----
-Label        : 1
-Position     : [736.674, 28.041]
-Measurements : [684.173, 210658, 1.89014, 2.60705]
----
-Label        : 1
-Position     : [785.231, 28.2292]
-Measurements : [779.812, 223683, 1.6827, 2.81675]
----
-Label        : 1
-Position     : [785.984, 29.16]
-Measurements : [790.413, 215790, 1.75073, 3.0408]
----
-Label        : 1
-Position     : [503.064, 29.2999]
-Measurements : [1488.67, 276999, -0.132504, -0.813677]
----
-Label        : 1
-Position     : [467.211, 29.4727]
-Measurements : [2357.58, 460440, -0.774753, -0.199534]
----
-Label        : 1
-Position     : [154.914, 29.6333]
-Measurements : [1296.44, 486853, 0.554433, -0.211259]
----
-Label        : 1
-Position     : [33.1288, 31.4463]
-Measurements : [709.888, 109907, 0.782466, 0.0455805]
----
-Label        : 1
-Position     : [474.192, 32.744]
-Measurements : [2346.91, 320418, -1.04922, 0.608591]
----
-Label        : 1
-Position     : [474.373, 35.4507]
-Measurements : [2561.21, 202660, -0.843659, 0.465157]
----
-Label        : 1
-Position     : [469.383, 36.2274]
-Measurements : [2513.07, 331345, -1.47677, 2.25475]
----
-Label        : 1
-Position     : [477.776, 38.888]
-Measurements : [2501.1, 299662, -0.407297, -0.786396]
----
-Label        : 1
-Position     : [476.508, 40.2221]
-Measurements : [2547.82, 277359, -0.337944, -0.875621]
----
-Label        : 1
-Position     : [481.204, 41.0933]
-Measurements : [2436.21, 246087, -0.848396, -0.195383]
----
-Label        : 1
-Position     : [146.811, 42.9006]
-Measurements : [651.591, 127745, 1.1435, 0.595122]
----
-Label        : 1
-Position     : [480.125, 44.6418]
-Measurements : [2439.53, 235119, -0.839143, -0.361184]
----
-Label        : 1
-Position     : [150.438, 44.8023]
-Measurements : [786.291, 238061, 0.976615, 0.295175]
----
-Label        : 1
-Position     : [639.04, 45.032]
-Measurements : [1011.28, 306948, 0.537234, -0.97489]
----
-Label        : 1
-Position     : [401.488, 45.544]
-Measurements : [1072.85, 211038, 0.179089, -1.22378]
----
-Label        : 1
-Position     : [396.788, 46.1598]
-Measurements : [938.122, 220132, 0.588968, -0.970861]
----
-Label        : 1
-Position     : [482.896, 46.568]
-Measurements : [2462.39, 198571, -0.789782, -0.439342]
----
-Label        : 1
-Position     : [478.701, 46.9408]
-Measurements : [2528.31, 225390, -0.654415, -0.417266]
----
-Label        : 1
-Position     : [30.696, 47.08]
-Measurements : [1279.16, 397520, 0.40258, -1.13234]
----
-Label        : 1
-Position     : [148.456, 47.08]
-Measurements : [1060.5, 232907, 0.789113, 0.21222]
----
-Label        : 1
-Position     : [636.712, 47.2538]
-Measurements : [993.879, 330254, 0.537125, -1.12924]
----
-Label        : 1
-Position     : [399.698, 47.6833]
-Measurements : [1003.16, 238939, 0.366465, -1.29767]
----
-Label        : 1
-Position     : [32.0718, 48.8004]
-Measurements : [1227.68, 366444, 0.396699, -1.1008]
----
-Label        : 1
-Position     : [483.182, 48.8229]
-Measurements : [2470.79, 165384, -0.700125, -0.47963]
----
-Label        : 1
-Position     : [146.13, 48.9529]
-Measurements : [1140.38, 163198, 0.522848, -0.842353]
----
-Label        : 1
-Position     : [280.813, 49.2236]
-Measurements : [942.677, 241572, 0.526166, -0.794988]
----
-Label        : 1
-Position     : [639.248, 49.3982]
-Measurements : [833.569, 350365, 1.02295, -0.452583]
----
-Label        : 1
-Position     : [32.9101, 51.4564]
-Measurements : [914.108, 389934, 1.14525, 0.0384974]
----
-Label        : 1
-Position     : [481.821, 51.4818]
-Measurements : [2514.74, 201478, -0.496563, -0.814439]
----
-Label        : 1
-Position     : [281.576, 53.224]
-Measurements : [982.418, 185655, 0.818729, -0.322751]
----
-Label        : 1
-Position     : [150.504, 53.736]
-Measurements : [1613.92, 300809, -0.104234, -0.926321]
----
-Label        : 1
-Position     : [485.968, 53.736]
-Measurements : [2291.15, 219738, -0.0303204, -0.791027]
----
-Label        : 1
-Position     : [408.469, 54.7806]
-Measurements : [1503.82, 414269, 0.102071, -0.983995]
----
-Label        : 1
-Position     : [485.552, 55.1294]
-Measurements : [2260.99, 198482, -0.173856, -0.770322]
----
-Label        : 1
-Position     : [512.892, 55.3723]
-Measurements : [1247.32, 321649, -0.307241, -1.43016]
----
-Label        : 1
-Position     : [406.096, 55.784]
-Measurements : [1487.85, 324277, 0.0955268, -0.564059]
----
-Label        : 1
-Position     : [402.194, 56.0926]
-Measurements : [1173.87, 227091, -0.0469741, -1.26695]
----
-Label        : 1
-Position     : [487.202, 56.3229]
-Measurements : [2209.63, 203604, -0.0750906, -0.907866]
----
-Label        : 1
-Position     : [146.981, 56.3887]
-Measurements : [1464.68, 161968, -0.540099, -0.799225]
----
-Label        : 1
-Position     : [147.923, 56.7645]
-Measurements : [1574.03, 169744, -0.52637, -0.269704]
----
-Label        : 1
-Position     : [646.398, 57.769]
-Measurements : [1019.1, 248626, 0.220451, -0.359875]
----
-Label        : 1
-Position     : [514.128, 57.832]
-Measurements : [1207.79, 357121, -0.139803, -1.63507]
----
-Label        : 1
-Position     : [286.376, 57.8966]
-Measurements : [762.626, 160955, 1.02396, -0.0826948]
----
-Label        : 1
-Position     : [149.827, 57.9983]
-Measurements : [1734.81, 223766, -0.145279, -0.214388]
----
-Label        : 1
-Position     : [512.777, 58.3428]
-Measurements : [1407.02, 230704, -0.777545, -0.589553]
----
-Label        : 1
-Position     : [410.743, 59.3163]
-Measurements : [1466.21, 370036, 0.00546922, -1.14312]
----
-Label        : 1
-Position     : [489.552, 59.88]
-Measurements : [2206.16, 199262, 0.139083, -0.632729]
----
-Label        : 1
-Position     : [150.504, 60.392]
-Measurements : [1564.09, 285351, 0.00264356, -0.629832]
----
-Label        : 1
-Position     : [641.343, 61.6995]
-Measurements : [1123.44, 401059, 0.127394, -1.27937]
----
-Label        : 1
-Position     : [524.025, 62.343]
-Measurements : [678.39, 220280, 1.76188, 2.84388]
----
-Label        : 1
-Position     : [642.624, 62.44]
-Measurements : [1281.61, 341332, -0.199448, -1.04494]
----
-Label        : 1
-Position     : [526.376, 63.0292]
-Measurements : [755.474, 235552, 1.2852, 1.36501]
----
-Label        : 1
-Position     : [409.68, 63.464]
-Measurements : [1344.05, 363137, 0.32516, -1.07766]
----
-Label        : 1
-Position     : [489.304, 64.2746]
-Measurements : [2550.7, 245615, -0.353762, -0.684571]
----
-Label        : 1
-Position     : [153.747, 64.3541]
-Measurements : [1127.62, 387477, 0.528247, -0.89447]
----
-Label        : 1
-Position     : [528.797, 65.0709]
-Measurements : [923.884, 206711, 0.785987, 0.772355]
----
-Label        : 1
-Position     : [411.712, 65.1208]
-Measurements : [1195.28, 444668, 0.501999, -1.10361]
----
-Label        : 1
-Position     : [736.373, 65.2588]
-Measurements : [925.973, 569079, 0.923134, -0.82582]
----
-Label        : 1
-Position     : [526.416, 66.024]
-Measurements : [937.748, 200420, 0.787841, 0.832355]
----
-Label        : 1
-Position     : [634.566, 66.0589]
-Measurements : [1107.19, 437732, 0.288566, -0.990485]
----
-Label        : 1
-Position     : [408.468, 66.9523]
-Measurements : [1271.67, 345809, 0.447664, -0.87485]
----
-Label        : 1
-Position     : [493.648, 67.048]
-Measurements : [2565.87, 318345, -0.862812, 0.120293]
----
-Label        : 1
-Position     : [489.309, 67.1856]
-Measurements : [2778.19, 156517, -0.590919, -0.103957]
----
-Label        : 1
-Position     : [151.016, 67.56]
-Measurements : [951.112, 257371, 0.707459, -0.969823]
----
-Label        : 1
-Position     : [494.365, 68.7431]
-Measurements : [2469.63, 425073, -0.873973, -0.285714]
----
-Label        : 1
-Position     : [531.024, 69.096]
-Measurements : [1060.1, 152696, 0.894956, 1.33329]
----
-Label        : 1
-Position     : [532.841, 69.2365]
-Measurements : [1031.55, 152734, 0.893183, 1.52887]
----
-Label        : 1
-Position     : [731.712, 69.608]
-Measurements : [1750.46, 494126, -0.476515, -0.796277]
----
-Label        : 1
-Position     : [639.552, 70.12]
-Measurements : [1435.04, 407739, -0.113456, -1.35784]
----
-Label        : 1
-Position     : [151.236, 71.2708]
-Measurements : [651.874, 196335, 1.62119, 1.23144]
----
-Label        : 1
-Position     : [407.12, 71.656]
-Measurements : [1190.02, 321318, 0.830741, -0.0541515]
----
-Label        : 1
-Position     : [501.307, 71.8869]
-Measurements : [1765.1, 370415, 0.368729, -0.5675]
----
-Label        : 1
-Position     : [724.253, 72.0387]
-Measurements : [1547.51, 427895, 0.253832, -0.914729]
----
-Label        : 1
-Position     : [38.4345, 72.907]
-Measurements : [1163, 314130, 0.310145, -0.713743]
----
-Label        : 1
-Position     : [299.15, 73.1046]
-Measurements : [973.079, 407487, 0.788035, -0.760626]
----
-Label        : 1
-Position     : [497.744, 73.192]
-Measurements : [2045.32, 569107, -0.0844212, -1.21743]
----
-Label        : 1
-Position     : [730.479, 73.5615]
-Measurements : [1501, 609631, 0.0505779, -1.44031]
----
-Label        : 1
-Position     : [530.782, 73.6834]
-Measurements : [992.847, 70865.1, -0.139589, -0.777455]
----
-Label        : 1
-Position     : [534.608, 74.728]
-Measurements : [1076.39, 54277.8, -0.0403846, -0.619779]
----
-Label        : 1
-Position     : [722.496, 74.728]
-Measurements : [1309.99, 278624, 0.633246, -0.191714]
----
-Label        : 1
-Position     : [637.029, 74.9055]
-Measurements : [1013.84, 510831, 0.825043, -0.926402]
----
-Label        : 1
-Position     : [534.278, 75.1308]
-Measurements : [1098.33, 55019.9, 0.384065, 0.538966]
----
-Label        : 1
-Position     : [35.304, 75.24]
-Measurements : [1287.51, 361736, 0.298422, -1.14136]
----
-Label        : 1
-Position     : [297.825, 75.3346]
-Measurements : [986.428, 433855, 0.69096, -0.968558]
----
-Label        : 1
-Position     : [411.711, 75.5489]
-Measurements : [1704.36, 500308, -0.110353, -1.16457]
----
-Label        : 1
-Position     : [300.112, 75.752]
-Measurements : [1106.38, 364343, 0.585591, -0.972097]
----
-Label        : 1
-Position     : [40.0663, 75.8806]
-Measurements : [1062.4, 201917, 0.444531, -0.966213]
----
-Label        : 1
-Position     : [725.415, 76.5828]
-Measurements : [1286.91, 369058, 0.39385, -0.929769]
----
-Label        : 1
-Position     : [415.312, 76.776]
-Measurements : [1848.33, 716938, -0.219702, -1.43866]
----
-Label        : 1
-Position     : [537.68, 77.8]
-Measurements : [1196.33, 128090, 0.647327, 0.501685]
----
-Label        : 1
-Position     : [534.852, 78.2465]
-Measurements : [1133.03, 99343, 0.339302, 0.434633]
----
-Label        : 0
-Position     : [92.1127, 78.4374]
-Measurements : [1109.44, 7506.35, -1.04267, 1.00777]
----
-Label        : 1
-Position     : [411.345, 78.5972]
-Measurements : [1717.57, 450220, 0.0725332, -1.28834]
----
-Label        : 1
-Position     : [533.148, 78.6543]
-Measurements : [1080.99, 84062.9, -0.0894858, -0.408748]
----
-Label        : 0
-Position     : [95.3936, 78.7711]
-Measurements : [1108.25, 13396.4, 0.482908, 2.23481]
----
-Label        : 0
-Position     : [109.322, 79.1238]
-Measurements : [1071.97, 37925.4, 0.685131, 0.956957]
----
-Label        : 0
-Position     : [87.738, 80.0104]
-Measurements : [1150.49, 9287.65, -2.39312, 5.91688]
----
-Label        : 1
-Position     : [499.792, 80.36]
-Measurements : [2213.86, 503045, -0.259567, -1.03712]
----
-Label        : 1
-Position     : [418.984, 80.6891]
-Measurements : [1368.77, 549868, 0.845426, -0.36176]
----
-Label        : 1
-Position     : [723.008, 80.872]
-Measurements : [1358.47, 349551, 0.640774, -0.592525]
----
-Label        : 1
-Position     : [411.116, 81.0041]
-Measurements : [1510.43, 419937, 0.407037, -0.773012]
----
-Label        : 1
-Position     : [720.457, 81.2607]
-Measurements : [1383.69, 273300, 0.731504, -0.0320697]
----
-Label        : 1
-Position     : [230.957, 81.8943]
-Measurements : [1454.9, 546540, 0.382177, -1.32888]
----
-Label        : 1
-Position     : [541.264, 81.896]
-Measurements : [1450.31, 245132, 0.273894, -0.251411]
----
-Label        : 1
-Position     : [231.437, 82.1053]
-Measurements : [1430.38, 486833, 0.534145, -1.08849]
----
-Label        : 1
-Position     : [310.374, 82.6047]
-Measurements : [971.624, 327632, 0.823834, -0.376812]
----
-Label        : 1
-Position     : [536.303, 82.9859]
-Measurements : [1378.75, 215446, 0.727624, 0.327514]
----
-Label        : 1
-Position     : [313.09, 83.2544]
-Measurements : [1152.17, 286801, 0.79644, 0.0569467]
----
-Label        : 1
-Position     : [505.03, 83.2899]
-Measurements : [1781.76, 209495, 0.398465, -0.453074]
----
-Label        : 1
-Position     : [720.173, 83.6023]
-Measurements : [1486.33, 258472, 0.324757, -0.256891]
----
-Label        : 1
-Position     : [502.527, 84.2095]
-Measurements : [1706.72, 379939, 0.435575, -0.540791]
----
-Label        : 1
-Position     : [545.971, 84.3644]
-Measurements : [1502.72, 189370, 0.597719, 0.193823]
----
-Label        : 1
-Position     : [500.389, 84.472]
-Measurements : [1762.43, 576006, 0.400357, -0.902264]
----
-Label        : 1
-Position     : [247.76, 84.5176]
-Measurements : [1046.37, 432718, 0.45893, -1.19884]
----
-Label        : 1
-Position     : [508.496, 84.968]
-Measurements : [1742.37, 188795, -0.0165191, -0.493912]
----
-Label        : 1
-Position     : [234.984, 85.992]
-Measurements : [1204.86, 228773, 0.848148, 0.435681]
----
-Label        : 1
-Position     : [415.824, 85.992]
-Measurements : [1133.36, 175910, 0.251633, -1.14509]
----
-Label        : 1
-Position     : [643.648, 85.992]
-Measurements : [1312.1, 349484, 0.214303, -0.569861]
----
-Label        : 1
-Position     : [793.834, 86.3359]
-Measurements : [1049.86, 177361, 0.109025, -1.09353]
----
-Label        : 1
-Position     : [641.83, 86.7441]
-Measurements : [1244.36, 350427, 0.403563, -0.466927]
----
-Label        : 1
-Position     : [545.977, 86.789]
-Measurements : [1617.33, 249607, 0.533211, -0.250782]
----
-Label        : 1
-Position     : [227.816, 87.016]
-Measurements : [1616.24, 348367, -0.0880458, -1.27861]
----
-Label        : 1
-Position     : [311.376, 87.016]
-Measurements : [1637.86, 483075, 0.141674, -0.8608]
----
-Label        : 1
-Position     : [793.152, 87.016]
-Measurements : [994.897, 211129, 0.201361, -1.31052]
----
-Label        : 1
-Position     : [234.962, 87.1838]
-Measurements : [1255.91, 256777, 0.748086, 0.224963]
----
-Label        : 1
-Position     : [251.155, 87.3764]
-Measurements : [1410.69, 266279, -0.0403681, -0.772312]
----
-Label        : 1
-Position     : [647.236, 87.4288]
-Measurements : [1342.99, 275609, 0.507612, -0.116743]
----
-Label        : 1
-Position     : [512.434, 88.3334]
-Measurements : [1930.01, 222004, -0.329513, -0.876027]
----
-Label        : 1
-Position     : [220.961, 88.5146]
-Measurements : [1387.2, 218699, -0.310078, -1.0715]
----
-Label        : 1
-Position     : [250.344, 88.552]
-Measurements : [1371.55, 260591, -0.0649667, -0.638483]
----
-Label        : 1
-Position     : [508.06, 88.9408]
-Measurements : [1737.51, 353590, -0.341023, -0.77548]
----
-Label        : 1
-Position     : [513.104, 89.064]
-Measurements : [1953.25, 243690, -0.482045, -0.747181]
----
-Label        : 1
-Position     : [514.67, 89.8881]
-Measurements : [1926.18, 238072, -0.35238, -0.936509]
----
-Label        : 1
-Position     : [544.848, 90.088]
-Measurements : [1625.45, 328196, 0.343572, -0.436161]
----
-Label        : 1
-Position     : [722.496, 90.088]
-Measurements : [1379.22, 213429, -0.901277, -0.752079]
----
-Label        : 1
-Position     : [645.793, 90.2686]
-Measurements : [1288.29, 169307, 0.171626, 0.355703]
----
-Label        : 1
-Position     : [208.699, 90.2753]
-Measurements : [974.846, 163077, -0.0711373, -1.42608]
----
-Label        : 1
-Position     : [416.173, 90.3642]
-Measurements : [813.742, 220021, 1.01131, -0.443239]
----
-Label        : 1
-Position     : [789.228, 90.7935]
-Measurements : [717.319, 255956, 1.15583, -0.290952]
----
-Label        : 1
-Position     : [541.634, 90.8781]
-Measurements : [1618.67, 263329, 0.568741, 0.274917]
----
-Label        : 1
-Position     : [229.384, 91.0036]
-Measurements : [1566.22, 295184, 0.0635331, -1.00503]
----
-Label        : 1
-Position     : [314.538, 91.1327]
-Measurements : [1477.03, 507536, 0.697796, -0.781491]
----
-Label        : 1
-Position     : [510.1, 91.1933]
-Measurements : [1862.81, 416812, -0.734054, -0.438029]
----
-Label        : 1
-Position     : [219.112, 91.624]
-Measurements : [1330.96, 264912, -0.198132, -1.41048]
----
-Label        : 1
-Position     : [646.208, 91.624]
-Measurements : [1225.45, 143585, -0.386217, -0.99674]
----
-Label        : 1
-Position     : [312.4, 92.136]
-Measurements : [1530.97, 560692, 0.338826, -1.08327]
----
-Label        : 1
-Position     : [516.458, 92.2009]
-Measurements : [1770.19, 312177, 0.040679, -1.30023]
----
-Label        : 1
-Position     : [726.724, 92.3023]
-Measurements : [1237.89, 272684, -0.37824, -1.59925]
----
-Label        : 1
-Position     : [719.156, 92.5538]
-Measurements : [1067.91, 339129, 0.110837, -1.81924]
----
-Label        : 1
-Position     : [209.896, 93.16]
-Measurements : [979.264, 145084, -0.0279663, -1.22398]
----
-Label        : 1
-Position     : [645.654, 93.3011]
-Measurements : [1147.74, 144378, -0.25268, -1.09159]
----
-Label        : 1
-Position     : [255.976, 93.672]
-Measurements : [1574.34, 174765, -0.433033, -0.118507]
----
-Label        : 1
-Position     : [516.176, 94.184]
-Measurements : [1704.18, 339435, 0.0761093, -1.13292]
----
-Label        : 1
-Position     : [215.59, 94.2739]
-Measurements : [1138.59, 256619, 0.291274, -1.27282]
----
-Label        : 1
-Position     : [310.847, 95.7036]
-Measurements : [1171.76, 652815, 0.7876, -0.659716]
----
-Label        : 1
-Position     : [208.894, 95.9693]
-Measurements : [900.298, 165919, 0.0614197, -1.36078]
----
-Label        : 1
-Position     : [317.024, 97.5957]
-Measurements : [1090.27, 343145, 0.700512, -0.545723]
----
-Label        : 1
-Position     : [259.572, 97.6378]
-Measurements : [1136.85, 270942, 0.24863, -0.766387]
----
-Label        : 1
-Position     : [522.782, 98.1872]
-Measurements : [1734.26, 206765, -0.3432, -0.991281]
----
-Label        : 1
-Position     : [252.666, 98.5213]
-Measurements : [1171.93, 215554, 0.310786, -1.03181]
----
-Label        : 1
-Position     : [523.087, 98.5224]
-Measurements : [1729.93, 210981, -0.348607, -1.00413]
----
-Label        : 1
-Position     : [715.883, 98.8042]
-Measurements : [888.529, 233329, 0.476561, -1.30497]
----
-Label        : 1
-Position     : [520.272, 99.304]
-Measurements : [1806.94, 192973, -0.680368, -0.0148814]
----
-Label        : 1
-Position     : [527.616, 99.4919]
-Measurements : [1637.93, 233703, -0.216636, -0.989002]
----
-Label        : 1
-Position     : [158.965, 100.627]
-Measurements : [1057.99, 576974, 0.506057, -1.36932]
----
-Label        : 1
-Position     : [319.424, 101.19]
-Measurements : [1289, 357238, 0.00683936, -1.27157]
----
-Label        : 1
-Position     : [518.634, 101.39]
-Measurements : [1690.59, 367844, -0.604401, -0.491386]
----
-Label        : 1
-Position     : [257.705, 101.623]
-Measurements : [1051.64, 198055, 0.185547, -1.15064]
----
-Label        : 1
-Position     : [714.293, 101.693]
-Measurements : [1210.87, 228499, -0.287881, -0.99352]
----
-Label        : 1
-Position     : [167.379, 101.709]
-Measurements : [955.185, 446514, 1.0842, -0.413929]
----
-Label        : 1
-Position     : [716.352, 101.864]
-Measurements : [1162.44, 277330, -0.218701, -1.30119]
----
-Label        : 1
-Position     : [162.792, 102.376]
-Measurements : [1307.06, 507986, 0.191174, -1.53486]
----
-Label        : 1
-Position     : [318.032, 102.376]
-Measurements : [1422.34, 334825, -0.446, -0.904958]
----
-Label        : 1
-Position     : [523.344, 102.888]
-Measurements : [1894.2, 194640, -0.749489, -0.154715]
----
-Label        : 1
-Position     : [261.826, 103.644]
-Measurements : [1160.42, 144003, -0.371143, -0.82547]
----
-Label        : 1
-Position     : [262.12, 103.912]
-Measurements : [1183.55, 151938, -0.242121, -0.650662]
----
-Label        : 1
-Position     : [557.136, 103.912]
-Measurements : [1492.43, 305852, -0.200073, -0.403389]
----
-Label        : 0
-Position     : [118.265, 104.411]
-Measurements : [1242.47, 30363.2, 3.0769, 10.8863]
----
-Label        : 1
-Position     : [667.802, 105.478]
-Measurements : [988.599, 207015, 0.450568, -0.583402]
----
-Label        : 1
-Position     : [528.325, 105.5]
-Measurements : [1643.96, 309566, -0.205076, -1.30918]
----
-Label        : 1
-Position     : [712.708, 105.576]
-Measurements : [1529.85, 199512, -0.446041, -0.403548]
----
-Label        : 1
-Position     : [552.95, 105.776]
-Measurements : [1457.92, 306223, -0.28068, -0.184712]
----
-Label        : 1
-Position     : [318.374, 106.244]
-Measurements : [1380.64, 286111, -0.334023, -0.932676]
----
-Label        : 1
-Position     : [319.056, 107.496]
-Measurements : [1257.26, 294835, -0.104061, -1.29524]
----
-Label        : 1
-Position     : [263.398, 107.806]
-Measurements : [1323.32, 141925, 0.548271, 1.09352]
----
-Label        : 1
-Position     : [267.24, 108.008]
-Measurements : [1297.52, 289741, 0.367777, -0.55024]
----
-Label        : 1
-Position     : [669.76, 108.008]
-Measurements : [1096.11, 207340, 0.330401, -0.997764]
----
-Label        : 1
-Position     : [266.811, 108.092]
-Measurements : [1317.16, 247175, 0.400011, -0.191347]
----
-Label        : 1
-Position     : [712.768, 108.52]
-Measurements : [1649.63, 164183, -0.465255, -0.542033]
----
-Label        : 1
-Position     : [560.955, 108.68]
-Measurements : [1783.91, 228472, -0.233207, -0.411194]
----
-Label        : 1
-Position     : [715.55, 108.875]
-Measurements : [1505.38, 281221, -0.452804, -1.02453]
----
-Label        : 1
-Position     : [320.201, 109.112]
-Measurements : [1094.93, 289132, 0.307046, -1.16672]
----
-Label        : 1
-Position     : [524.368, 109.544]
-Measurements : [1682.74, 307050, -0.41468, -0.57049]
----
-Label        : 1
-Position     : [565.896, 109.876]
-Measurements : [1602.1, 208530, 0.235627, -0.639146]
----
-Label        : 1
-Position     : [703.909, 110.454]
-Measurements : [1554.45, 180969, -0.292626, -0.692169]
----
-Label        : 1
-Position     : [666.324, 110.829]
-Measurements : [953.362, 231893, 0.559366, -0.695741]
----
-Label        : 1
-Position     : [710.066, 110.97]
-Measurements : [1638.12, 226903, -0.642881, -0.373772]
----
-Label        : 1
-Position     : [561.232, 111.592]
-Measurements : [1847.63, 154407, 0.0181275, -0.555982]
----
-Label        : 1
-Position     : [706.624, 111.592]
-Measurements : [1599.78, 168121, -0.300517, -0.586663]
----
-Label        : 0
-Position     : [111.176, 111.596]
-Measurements : [1132.23, 45687.3, -0.693308, 1.8718]
----
-Label        : 1
-Position     : [526.561, 112.25]
-Measurements : [1579.72, 235304, -0.244512, -0.651862]
----
-Label        : 1
-Position     : [699.749, 112.672]
-Measurements : [1251.2, 255559, -0.0256705, -0.969806]
----
-Label        : 1
-Position     : [563.428, 112.678]
-Measurements : [1795.67, 165651, 0.152948, -0.511471]
----
-Label        : 1
-Position     : [167.335, 113.116]
-Measurements : [769.335, 232433, 1.19259, 0.182167]
----
-Label        : 1
-Position     : [325.712, 113.128]
-Measurements : [979.65, 157331, 0.858817, 0.281219]
----
-Label        : 1
-Position     : [523.294, 113.255]
-Measurements : [1442.84, 351951, -0.308333, -0.896829]
----
-Label        : 1
-Position     : [162.792, 113.56]
-Measurements : [923.253, 210067, 0.779048, -0.527959]
----
-Label        : 1
-Position     : [164.882, 113.932]
-Measurements : [894.756, 219335, 0.809942, -0.485659]
----
-Label        : 1
-Position     : [321.412, 114.382]
-Measurements : [729.804, 160832, 1.59829, 2.50418]
----
-Label        : 1
-Position     : [700.48, 114.664]
-Measurements : [1297.14, 241601, 0.141907, -0.876793]
----
-Label        : 1
-Position     : [528.992, 115.24]
-Measurements : [1439.84, 214192, -0.0367069, -0.966983]
----
-Label        : 1
-Position     : [683.072, 115.688]
-Measurements : [1369.02, 382654, 0.110694, -1.30542]
----
-Label        : 1
-Position     : [787.649, 116.056]
-Measurements : [1069.04, 298355, 0.349867, -1.02274]
----
-Label        : 1
-Position     : [282.045, 116.276]
-Measurements : [888.759, 514390, 1.21048, -0.158209]
----
-Label        : 1
-Position     : [703.015, 116.342]
-Measurements : [1255.66, 230138, 0.165227, -0.861112]
----
-Label        : 1
-Position     : [532.728, 116.619]
-Measurements : [1301.11, 192281, 0.316429, -0.825745]
----
-Label        : 1
-Position     : [328.936, 117.268]
-Measurements : [899.582, 131603, 0.749477, 0.890214]
----
-Label        : 1
-Position     : [786.872, 117.296]
-Measurements : [1271.02, 329826, 0.083441, -0.856405]
----
-Label        : 1
-Position     : [784.771, 117.505]
-Measurements : [1346.42, 300073, -0.0267144, -0.645099]
----
-Label        : 1
-Position     : [686.252, 117.957]
-Measurements : [986.837, 440009, 1.04617, -0.347022]
----
-Label        : 1
-Position     : [787.104, 119.325]
-Measurements : [1331.1, 302350, 0.178207, -0.702826]
----
-Label        : 1
-Position     : [279.016, 119.704]
-Measurements : [1349.87, 654100, 0.242578, -1.36819]
----
-Label        : 1
-Position     : [425.724, 119.956]
-Measurements : [928.918, 279548, 0.342888, -1.45729]
----
-Label        : 1
-Position     : [534.518, 119.975]
-Measurements : [1287.76, 203152, 0.38779, -0.597426]
----
-Label        : 1
-Position     : [679.096, 120.442]
-Measurements : [1277.73, 392586, 0.0631674, -1.13376]
----
-Label        : 0
-Position     : [111.436, 121.004]
-Measurements : [973.243, 48617, -0.721266, -0.840469]
----
-Label        : 0
-Position     : [81.0551, 121.076]
-Measurements : [1105.47, 10824.7, 0.584296, 0.979848]
----
-Label        : 0
-Position     : [129.052, 121.197]
-Measurements : [760.452, 15625.3, 0.0282606, 1.66524]
----
-Label        : 1
-Position     : [425.568, 121.384]
-Measurements : [966.733, 244442, 0.385685, -1.39025]
----
-Label        : 1
-Position     : [530.528, 121.384]
-Measurements : [1425.93, 204361, -0.0090095, -0.614752]
----
-Label        : 1
-Position     : [282.599, 121.848]
-Measurements : [1174.81, 688615, 0.662836, -1.10586]
----
-Label        : 1
-Position     : [784.312, 121.904]
-Measurements : [1460.44, 284210, 0.116577, -0.888131]
----
-Label        : 1
-Position     : [41.9856, 122.153]
-Measurements : [783.859, 240284, 0.783098, -0.674306]
----
-Label        : 0
-Position     : [95.8715, 122.848]
-Measurements : [897.204, 40152.7, 0.103602, -1.7928]
----
-Label        : 1
-Position     : [787.268, 123.75]
-Measurements : [1288.25, 293997, 0.573319, -0.808307]
----
-Label        : 1
-Position     : [275.095, 123.757]
-Measurements : [1673.88, 435774, -0.0841427, -0.793278]
----
-Label        : 1
-Position     : [530.447, 123.991]
-Measurements : [1404.69, 249970, 0.0651425, -0.575455]
----
-Label        : 1
-Position     : [44.52, 124.312]
-Measurements : [1072.95, 256575, 0.527127, -0.594927]
----
-Label        : 1
-Position     : [278.504, 125.336]
-Measurements : [1561.76, 478849, 0.0748846, -0.945546]
----
-Label        : 1
-Position     : [778.168, 126]
-Measurements : [1290.07, 281976, 0.14496, -0.793504]
----
-Label        : 1
-Position     : [429.459, 126.113]
-Measurements : [499.872, 76914.2, 3.16918, 10.2205]
----
-Label        : 1
-Position     : [279.561, 127.608]
-Measurements : [1526.21, 498000, 0.116888, -0.971512]
----
-Label        : 1
-Position     : [776.613, 127.692]
-Measurements : [1048.91, 274883, 0.0767666, -1.46346]
----
-Label        : 1
-Position     : [583.501, 127.812]
-Measurements : [630.413, 101710, 1.0013, -0.341788]
----
-Label        : 1
-Position     : [165.864, 127.896]
-Measurements : [1046.98, 195802, 0.375744, -0.594556]
----
-Label        : 1
-Position     : [535.648, 128.552]
-Measurements : [1884.15, 177643, -0.521138, -0.0654111]
----
-Label        : 1
-Position     : [45.4843, 128.665]
-Measurements : [1155.56, 186924, 0.370493, -0.529542]
----
-Label        : 1
-Position     : [168.958, 128.857]
-Measurements : [1124.04, 244409, 0.047706, -1.13973]
----
-Label        : 1
-Position     : [583.459, 129.25]
-Measurements : [739.246, 115252, 0.379303, -1.31422]
----
-Label        : 1
-Position     : [535.975, 129.426]
-Measurements : [1867.47, 209846, -0.799698, 0.459274]
----
-Label        : 1
-Position     : [164.638, 129.947]
-Measurements : [951.631, 191198, 0.365229, -0.689925]
----
-Label        : 1
-Position     : [780.877, 130.637]
-Measurements : [909.113, 222529, 0.69993, -0.85232]
----
-Label        : 1
-Position     : [532.503, 130.641]
-Measurements : [1613.34, 345253, -0.412173, -0.812511]
----
-Label        : 1
-Position     : [280.552, 130.968]
-Measurements : [1328.1, 409007, 0.231777, -0.884732]
----
-Label        : 1
-Position     : [581.184, 132.352]
-Measurements : [959.499, 83611.4, -0.632973, -0.573179]
----
-Label        : 1
-Position     : [276.709, 132.601]
-Measurements : [1227.19, 254635, 0.547162, -0.808944]
----
-Label        : 1
-Position     : [46.568, 133.528]
-Measurements : [1344.19, 255406, 0.319402, -0.901558]
----
-Label        : 1
-Position     : [287.255, 134.418]
-Measurements : [767.178, 207829, 1.15703, 0.124504]
----
-Label        : 1
-Position     : [282.831, 134.513]
-Measurements : [1130.19, 295781, 0.431002, -1.03989]
----
-Label        : 1
-Position     : [51.3268, 134.638]
-Measurements : [1256.62, 200843, 0.550443, -0.672985]
----
-Label        : 1
-Position     : [325.728, 135.72]
-Measurements : [1343.55, 563424, 0.181802, -1.46002]
----
-Label        : 1
-Position     : [42.7433, 136.251]
-Measurements : [1155.67, 347608, 0.508557, -1.01234]
----
-Label        : 1
-Position     : [321.8, 137.406]
-Measurements : [1200.88, 639851, 0.479749, -1.38497]
----
-Label        : 1
-Position     : [559.277, 138.527]
-Measurements : [1579.95, 149686, -0.143497, -0.535129]
----
-Label        : 0
-Position     : [126.879, 138.925]
-Measurements : [971.829, 62864.1, -0.530778, -1.04523]
----
-Label        : 1
-Position     : [322.458, 138.968]
-Measurements : [1192.2, 684416, 0.461354, -1.47774]
----
-Label        : 1
-Position     : [284.136, 139.16]
-Measurements : [807.465, 100527, 0.496844, -0.935616]
----
-Label        : 1
-Position     : [285.511, 139.706]
-Measurements : [771.995, 106183, 0.644265, -0.823326]
----
-Label        : 1
-Position     : [560.704, 140.544]
-Measurements : [1612.83, 142992, -0.239338, -0.434783]
----
-Label        : 1
-Position     : [206.54, 142.21]
-Measurements : [793.994, 101125, 0.191725, -1.34298]
----
-Label        : 1
-Position     : [427.788, 142.527]
-Measurements : [611.776, 111051, 1.26625, 0.671914]
----
-Label        : 1
-Position     : [555.427, 142.816]
-Measurements : [1617.08, 150326, -0.177052, -1.05987]
----
-Label        : 1
-Position     : [164.84, 144.28]
-Measurements : [966.97, 277437, 0.962301, -0.230972]
----
-Label        : 1
-Position     : [556.096, 145.152]
-Measurements : [1678.88, 200841, -0.329494, -0.882302]
----
-Label        : 1
-Position     : [163.359, 145.282]
-Measurements : [1006.48, 258708, 0.930751, -0.241716]
----
-Label        : 1
-Position     : [564.854, 145.326]
-Measurements : [1175.97, 251257, 0.558618, -0.630028]
----
-Label        : 1
-Position     : [54.9896, 145.451]
-Measurements : [640.903, 61901.6, 0.849688, -0.31097]
----
-Label        : 1
-Position     : [168.815, 145.821]
-Measurements : [760.356, 243685, 1.40623, 0.849425]
----
-Label        : 1
-Position     : [432.736, 145.96]
-Measurements : [871.897, 200631, 0.417074, -0.772109]
----
-Label        : 1
-Position     : [202.216, 146.328]
-Measurements : [735.998, 77507.3, 0.486003, -1.20397]
----
-Label        : 1
-Position     : [199.37, 147.35]
-Measurements : [718.547, 93630.1, 0.353925, -1.40405]
----
-Label        : 1
-Position     : [439.491, 147.445]
-Measurements : [708.74, 207666, 1.36753, 0.801427]
----
-Label        : 1
-Position     : [288.658, 147.677]
-Measurements : [820.014, 405995, 1.28555, 0.346208]
----
-Label        : 1
-Position     : [293.013, 147.905]
-Measurements : [689.878, 362867, 1.92391, 2.28359]
----
-Label        : 1
-Position     : [555.565, 148.116]
-Measurements : [1626, 177019, 0.0103185, -1.14299]
----
-Label        : 1
-Position     : [435.109, 149.683]
-Measurements : [1119.72, 281166, 0.430565, -0.748525]
----
-Label        : 1
-Position     : [50.664, 150.424]
-Measurements : [987.126, 342024, 0.981039, 9.90691e-05]
----
-Label        : 0
-Position     : [100.443, 151.887]
-Measurements : [964.573, 24883.9, 0.241763, -1.53948]
----
-Label        : 1
-Position     : [288.864, 152.104]
-Measurements : [1148.26, 381276, 0.332974, -0.883249]
----
-Label        : 1
-Position     : [435.296, 152.104]
-Measurements : [1228.6, 368882, 0.566702, -0.73073]
----
-Label        : 1
-Position     : [548.117, 152.945]
-Measurements : [1248.03, 146106, -0.718104, -0.195879]
----
-Label        : 1
-Position     : [437.238, 153.945]
-Measurements : [1162.21, 400716, 0.603825, -0.726079]
----
-Label        : 1
-Position     : [49.582, 154.739]
-Measurements : [952.488, 406598, 1.13155, -0.0186492]
----
-Label        : 0
-Position     : [93.9722, 154.808]
-Measurements : [1190, 42335.4, 0.741809, -0.136511]
----
-Label        : 1
-Position     : [549.952, 155.904]
-Measurements : [1215.97, 145716, -0.712105, -0.179858]
----
-Label        : 1
-Position     : [437.856, 157.736]
-Measurements : [1194.07, 376919, 0.749542, -0.509319]
----
-Label        : 1
-Position     : [290.912, 158.76]
-Measurements : [1105.7, 220256, 0.171187, -1.18595]
----
-Label        : 1
-Position     : [286.405, 158.931]
-Measurements : [1013.65, 174437, 0.530106, -0.759662]
----
-Label        : 0
-Position     : [116.922, 158.994]
-Measurements : [1020.36, 27234.7, -1.59742, 1.84507]
----
-Label        : 1
-Position     : [548.215, 159]
-Measurements : [1010.95, 229876, -0.162641, -1.4615]
----
-Label        : 1
-Position     : [435.795, 159.645]
-Measurements : [1084.69, 319821, 1.08762, 0.482812]
----
-Label        : 1
-Position     : [173.172, 160.418]
-Measurements : [910.603, 360753, 0.92316, -0.711811]
----
-Label        : 1
-Position     : [434.626, 161.185]
-Measurements : [991.996, 185225, 1.224, 1.78436]
----
-Label        : 1
-Position     : [296.135, 161.251]
-Measurements : [1171.76, 456721, 0.430665, -1.07225]
----
-Label        : 1
-Position     : [288.841, 161.311]
-Measurements : [1144.47, 257208, 0.493746, -0.647602]
----
-Label        : 1
-Position     : [439.961, 161.588]
-Measurements : [1235, 383454, 0.625274, -0.770277]
----
-Label        : 1
-Position     : [170.472, 161.688]
-Measurements : [1108.1, 440775, 0.496568, -1.33749]
----
-Label        : 1
-Position     : [51.24, 162.517]
-Measurements : [721.785, 254747, 1.65975, 1.89345]
----
-Label        : 1
-Position     : [439.392, 163.368]
-Measurements : [1222.62, 298314, 0.82134, -0.208641]
----
-Label        : 1
-Position     : [169.046, 163.37]
-Measurements : [1166.61, 393993, 0.507265, -1.33034]
----
-Label        : 1
-Position     : [439.227, 163.469]
-Measurements : [1222.62, 298314, 0.82134, -0.208641]
----
-Label        : 0
-Position     : [80.6968, 163.915]
-Measurements : [1146.21, 8771.87, 0.102303, -1.03749]
----
-Label        : 1
-Position     : [53.736, 165.272]
-Measurements : [800.873, 221357, 1.64339, 2.1331]
----
-Label        : 1
-Position     : [293.165, 165.495]
-Measurements : [1445.16, 315696, 0.193153, -0.948964]
----
-Label        : 0
-Position     : [85.073, 165.554]
-Measurements : [1088.24, 17474.6, -1.2738, 1.97941]
----
-Label        : 1
-Position     : [293.984, 165.928]
-Measurements : [1445.16, 315696, 0.193153, -0.948964]
----
-Label        : 1
-Position     : [51.1578, 167.01]
-Measurements : [763.843, 231835, 1.73052, 2.19185]
----
-Label        : 1
-Position     : [343.648, 169]
-Measurements : [928.066, 235749, 0.533846, -1.16419]
----
-Label        : 1
-Position     : [346.821, 169.459]
-Measurements : [840.941, 229802, 0.898385, -0.643969]
----
-Label        : 1
-Position     : [200.924, 169.571]
-Measurements : [1027.23, 540995, 0.645869, -1.15679]
----
-Label        : 0
-Position     : [115.217, 169.683]
-Measurements : [846.398, 16393.4, 0.466025, -0.546362]
----
-Label        : 1
-Position     : [343.379, 169.888]
-Measurements : [928.066, 235749, 0.533846, -1.16419]
----
-Label        : 1
-Position     : [202.371, 170.412]
-Measurements : [1227.81, 562870, 0.311362, -1.45724]
----
-Label        : 0
-Position     : [87.0626, 170.842]
-Measurements : [904.53, 31835.2, -0.157591, -1.63508]
----
-Label        : 1
-Position     : [458.099, 171.513]
-Measurements : [1748.77, 230032, -0.80657, -0.0312607]
----
-Label        : 0
-Position     : [100.77, 171.907]
-Measurements : [752.345, 4246.94, 0.00409903, 1.81988]
----
-Label        : 1
-Position     : [205.288, 171.928]
-Measurements : [1381.38, 545814, 0.219604, -1.5491]
----
-Label        : 1
-Position     : [172.454, 172.899]
-Measurements : [769.186, 229563, 1.00374, -0.192638]
----
-Label        : 0
-Position     : [130.268, 173.077]
-Measurements : [1041.78, 13687.9, -1.06755, 0.613121]
----
-Label        : 1
-Position     : [453.728, 174.12]
-Measurements : [1576.33, 275832, -0.406668, -0.164106]
----
-Label        : 1
-Position     : [466.46, 174.791]
-Measurements : [1265.68, 242176, 0.590304, -0.316957]
----
-Label        : 1
-Position     : [452.318, 175.335]
-Measurements : [1454.43, 318888, -0.35921, -0.585877]
----
-Label        : 0
-Position     : [118.619, 176.382]
-Measurements : [947.783, 25016.6, 1.87238, 9.26613]
----
-Label        : 1
-Position     : [175.785, 176.617]
-Measurements : [1179.15, 363424, -0.0431143, -1.2454]
----
-Label        : 1
-Position     : [459.36, 176.68]
-Measurements : [1814.73, 239735, -0.461905, -0.741981]
----
-Label        : 1
-Position     : [718.776, 176.688]
-Measurements : [1344.26, 143039, -0.283975, -0.23451]
----
-Label        : 1
-Position     : [174.568, 177.048]
-Measurements : [1301.67, 324422, -0.302307, -0.943574]
----
-Label        : 1
-Position     : [172.228, 177.982]
-Measurements : [1196.49, 338762, -0.117432, -1.20676]
----
-Label        : 1
-Position     : [463.593, 177.989]
-Measurements : [1584.79, 262685, 0.139275, -1.06502]
----
-Label        : 1
-Position     : [469.066, 178.497]
-Measurements : [1225.01, 192878, 0.14609, -0.472889]
----
-Label        : 1
-Position     : [457.188, 178.617]
-Measurements : [1739.82, 252758, -0.392531, -0.697884]
----
-Label        : 1
-Position     : [468.064, 178.728]
-Measurements : [1205.72, 165909, 0.0544097, -0.530043]
----
-Label        : 1
-Position     : [179.848, 179.5]
-Measurements : [1073.83, 372779, 0.505805, -1.2185]
----
-Label        : 1
-Position     : [472.734, 179.848]
-Measurements : [1420.95, 280567, -0.215442, -1.17759]
----
-Label        : 0
-Position     : [84.4024, 180.274]
-Measurements : [962.054, 19438, -0.666317, -1.0598]
----
-Label        : 1
-Position     : [721.135, 180.474]
-Measurements : [1119.45, 175922, 0.651067, -0.624889]
----
-Label        : 1
-Position     : [715.191, 181.662]
-Measurements : [1145.86, 190723, 0.308976, -1.0098]
----
-Label        : 1
-Position     : [176.104, 182.168]
-Measurements : [1168.06, 351181, 0.24595, -1.3993]
----
-Label        : 1
-Position     : [476.256, 182.312]
-Measurements : [1413.98, 381507, -0.104882, -1.43638]
----
-Label        : 0
-Position     : [119.927, 182.936]
-Measurements : [1034.32, 35375, 2.20187, 6.84498]
----
-Label        : 1
-Position     : [480.888, 183.168]
-Measurements : [993.334, 432702, 0.897719, -0.792276]
----
-Label        : 0
-Position     : [87.6863, 183.363]
-Measurements : [1015.35, 69459.9, 0.914419, 0.550633]
----
-Label        : 0
-Position     : [78.6616, 183.498]
-Measurements : [1011.36, 3655.02, 0.373185, -0.928352]
----
-Label        : 0
-Position     : [124.706, 185.457]
-Measurements : [1051.73, 78638.7, 0.59633, 0.921091]
----
-Label        : 1
-Position     : [875.834, 190.969]
-Measurements : [1006.11, 50158.9, -1.03185, 0.406372]
----
-Label        : 1
-Position     : [24.0479, 194.139]
-Measurements : [511.819, 36538.6, 1.00629, -0.471377]
----
-Label        : 1
-Position     : [28.4819, 194.312]
-Measurements : [587.787, 94716.6, 2.0327, 5.3558]
----
-Label        : 1
-Position     : [210.686, 194.708]
-Measurements : [1081.93, 616511, 0.465294, -1.48121]
----
-Label        : 1
-Position     : [883.424, 194.798]
-Measurements : [890.391, 102875, -0.151164, -1.5192]
----
-Label        : 1
-Position     : [880.712, 195.648]
-Measurements : [824.918, 104315, 0.0428919, -1.56379]
----
-Label        : 1
-Position     : [206.437, 195.744]
-Measurements : [1013.23, 662647, 0.759068, -1.05212]
----
-Label        : 1
-Position     : [28.648, 199.064]
-Measurements : [654.467, 82489.4, 2.02281, 5.76205]
----
-Label        : 1
-Position     : [211.432, 199.064]
-Measurements : [1510.98, 504539, -0.00991282, -1.47667]
----
-Label        : 0
-Position     : [64.8357, 200.144]
-Measurements : [1033.71, 10272.1, 0.797339, 4.29059]
----
-Label        : 0
-Position     : [106.807, 200.498]
-Measurements : [1029.8, 16500.3, -1.30319, 1.23472]
----
-Label        : 1
-Position     : [711.024, 201.745]
-Measurements : [859.114, 162654, 0.969496, 0.252542]
----
-Label        : 0
-Position     : [108.755, 201.787]
-Measurements : [1033.13, 17517, -1.16156, 1.03798]
----
-Label        : 1
-Position     : [706.632, 202.304]
-Measurements : [909.044, 205380, 0.669954, -0.913504]
----
-Label        : 1
-Position     : [862.044, 202.522]
-Measurements : [1090.65, 501719, 0.629952, -1.05298]
----
-Label        : 0
-Position     : [133.631, 203.069]
-Measurements : [1015.21, 19261.5, -2.2191, 4.98905]
----
-Label        : 1
-Position     : [176.3, 203.428]
-Measurements : [1100.39, 432746, 0.522518, -1.20115]
----
-Label        : 1
-Position     : [891.78, 203.667]
-Measurements : [891.333, 421627, 0.970045, -0.602316]
----
-Label        : 1
-Position     : [357.984, 204.328]
-Measurements : [1249.78, 497817, 0.531452, -0.822011]
----
-Label        : 1
-Position     : [889.843, 204.868]
-Measurements : [785.969, 382163, 1.34655, 0.298143]
----
-Label        : 1
-Position     : [360.317, 205.079]
-Measurements : [1113.8, 357503, 0.535817, -1.1484]
----
-Label        : 1
-Position     : [179.176, 205.208]
-Measurements : [1108.75, 417131, 0.654059, -1.15038]
----
-Label        : 1
-Position     : [176.006, 206.321]
-Measurements : [1168.34, 376583, 0.497907, -1.13431]
----
-Label        : 1
-Position     : [863.816, 206.912]
-Measurements : [1183.23, 443396, 0.635468, -1.05555]
----
-Label        : 1
-Position     : [703.397, 207.005]
-Measurements : [556.119, 75660.8, 1.9211, 2.94926]
----
-Label        : 1
-Position     : [894.536, 207.424]
-Measurements : [984.415, 380697, 0.85635, -0.735312]
----
-Label        : 1
-Position     : [301.117, 207.52]
-Measurements : [1469.09, 244028, -0.346245, -0.798871]
----
-Label        : 1
-Position     : [361.807, 208.293]
-Measurements : [1054.72, 357596, 0.695484, -1.06173]
----
-Label        : 1
-Position     : [305.152, 208.656]
-Measurements : [1062.9, 253742, 0.257437, -1.23242]
----
-Label        : 0
-Position     : [103.974, 208.707]
-Measurements : [1044.9, 5652.95, -1.27797, 4.6118]
----
-Label        : 0
-Position     : [65.0811, 209.122]
-Measurements : [1141.98, 18419.1, 1.57678, 2.24398]
----
-Label        : 1
-Position     : [861.112, 210.405]
-Measurements : [1267.54, 360823, 0.35263, -1.10572]
----
-Label        : 1
-Position     : [308.787, 210.95]
-Measurements : [793.141, 216224, 0.916479, -0.735237]
----
-Label        : 1
-Position     : [862.601, 211.896]
-Measurements : [1143.86, 404827, 0.63832, -0.810785]
----
-Label        : 1
-Position     : [719.041, 213.273]
-Measurements : [1026.08, 78610.5, 0.290094, -0.7538]
----
-Label        : 1
-Position     : [860.232, 214.592]
-Measurements : [1031.01, 233719, 0.582786, -0.737979]
----
-Label        : 1
-Position     : [860.301, 216.547]
-Measurements : [1022.67, 230172, 0.624532, -0.629547]
----
-Label        : 1
-Position     : [363.225, 216.858]
-Measurements : [1988.31, 684467, -0.379378, -1.06607]
----
-Label        : 1
-Position     : [364.128, 217.64]
-Measurements : [1897.61, 738105, -0.237603, -1.31869]
----
-Label        : 1
-Position     : [714.824, 218.176]
-Measurements : [821.876, 154001, 0.536069, -0.777765]
----
-Label        : 1
-Position     : [715.735, 218.326]
-Measurements : [890.303, 150882, 0.244042, -0.991735]
----
-Label        : 0
-Position     : [88.1349, 218.534]
-Measurements : [1005.05, 11746.3, 3.01618, 13.4804]
----
-Label        : 1
-Position     : [867.549, 218.703]
-Measurements : [697.238, 154574, 0.835332, -0.779369]
----
-Label        : 1
-Position     : [181.278, 218.732]
-Measurements : [1296.75, 706447, 0.139058, -1.41445]
----
-Label        : 0
-Position     : [108.14, 218.817]
-Measurements : [1065.29, 12187.3, -0.513496, 0.415816]
----
-Label        : 1
-Position     : [863.377, 219.477]
-Measurements : [891.208, 233894, 0.672972, -0.61997]
----
-Label        : 0
-Position     : [133.607, 219.558]
-Measurements : [915.083, 13643.5, -0.846548, 1.17435]
----
-Label        : 1
-Position     : [362.863, 219.67]
-Measurements : [1842.68, 942342, -0.175373, -1.51707]
----
-Label        : 1
-Position     : [182.248, 220.056]
-Measurements : [1535.29, 537093, -0.166385, -1.12571]
----
-Label        : 1
-Position     : [911.873, 220.529]
-Measurements : [981.263, 152723, -0.273252, -1.40202]
----
-Label        : 1
-Position     : [182.637, 220.599]
-Measurements : [1535.29, 537093, -0.166385, -1.12571]
----
-Label        : 0
-Position     : [128.703, 221.589]
-Measurements : [951.459, 16191.8, -0.296294, -0.532626]
----
-Label        : 1
-Position     : [308.951, 222.08]
-Measurements : [802.338, 214555, 0.903603, -0.0462955]
----
-Label        : 1
-Position     : [184.7, 222.318]
-Measurements : [1566.67, 404076, 0.0908016, -0.81289]
----
-Label        : 1
-Position     : [867.4, 223.296]
-Measurements : [1096.75, 236870, 0.240736, -0.759973]
----
-Label        : 1
-Position     : [907.336, 223.296]
-Measurements : [755.819, 144529, 0.752759, -0.785582]
----
-Label        : 1
-Position     : [31.72, 223.64]
-Measurements : [1053.28, 328868, 0.739464, -0.768644]
----
-Label        : 1
-Position     : [908.159, 223.694]
-Measurements : [807.086, 151692, 0.501415, -1.17477]
----
-Label        : 0
-Position     : [67.2161, 223.945]
-Measurements : [1176.23, 47964.9, 1.78288, 3.78042]
----
-Label        : 1
-Position     : [310.272, 224.016]
-Measurements : [1111.51, 495259, 0.570385, -0.92457]
----
-Label        : 1
-Position     : [182.76, 224.152]
-Measurements : [1647.78, 296626, 0.42371, -0.782878]
----
-Label        : 1
-Position     : [310.937, 224.798]
-Measurements : [1111.51, 495259, 0.570385, -0.92457]
----
-Label        : 1
-Position     : [30.803, 225.572]
-Measurements : [1017.8, 355643, 0.745761, -0.834526]
----
-Label        : 1
-Position     : [183.029, 225.933]
-Measurements : [1579.74, 304237, 0.664633, -0.598438]
----
-Label        : 0
-Position     : [123.133, 226.472]
-Measurements : [1068.52, 3217.49, -1.00626, 3.16216]
----
-Label        : 1
-Position     : [869.224, 226.677]
-Measurements : [1015.9, 256264, 0.58223, -0.843968]
----
-Label        : 1
-Position     : [864.84, 226.88]
-Measurements : [1052.3, 226196, 0.529199, -0.607237]
----
-Label        : 1
-Position     : [710.279, 227.086]
-Measurements : [792.157, 134777, 0.50578, -1.19546]
----
-Label        : 1
-Position     : [862.126, 227.76]
-Measurements : [897.374, 215853, 0.983941, 0.153139]
----
-Label        : 1
-Position     : [33.1171, 227.914]
-Measurements : [953.108, 238848, 1.13436, 0.817858]
----
-Label        : 1
-Position     : [710.216, 228.416]
-Measurements : [825.895, 135704, 0.384101, -1.28101]
----
-Label        : 0
-Position     : [60.2701, 228.586]
-Measurements : [1064.9, 6211.3, 0.60023, -0.0306526]
----
-Label        : 1
-Position     : [311.296, 230.672]
-Measurements : [1409.32, 536504, 0.104209, -1.54309]
----
-Label        : 1
-Position     : [715.214, 231.314]
-Measurements : [1009.83, 170971, 0.706218, -0.136483]
----
-Label        : 1
-Position     : [313.87, 231.412]
-Measurements : [1305.46, 574078, 0.335705, -1.51573]
----
-Label        : 1
-Position     : [906.824, 232]
-Measurements : [1111.36, 291222, 0.176541, -1.13685]
----
-Label        : 0
-Position     : [56.9019, 233.286]
-Measurements : [986.829, 7168.76, 0.00846685, -0.22224]
----
-Label        : 1
-Position     : [908.439, 234.492]
-Measurements : [1340.28, 250918, 0.0879431, -0.964828]
----
-Label        : 1
-Position     : [16.2852, 234.852]
-Measurements : [710.914, 168826, 0.682616, -0.931927]
----
-Label        : 1
-Position     : [904.699, 234.95]
-Measurements : [1288.72, 315961, -0.0711211, -1.09406]
----
-Label        : 1
-Position     : [714.312, 235.072]
-Measurements : [1209.51, 258403, 0.177586, -1.38318]
----
-Label        : 1
-Position     : [863.816, 235.072]
-Measurements : [766.333, 86142.7, 0.605089, -0.663795]
----
-Label        : 1
-Position     : [309.719, 235.559]
-Measurements : [835.819, 436572, 1.32409, 0.251109]
----
-Label        : 1
-Position     : [902.899, 235.683]
-Measurements : [1206.66, 332303, 0.0196027, -1.31272]
----
-Label        : 1
-Position     : [712.613, 237.484]
-Measurements : [1349.88, 286555, -0.357925, -1.10482]
----
-Label        : 1
-Position     : [712.354, 237.977]
-Measurements : [1349.88, 286555, -0.357925, -1.10482]
----
-Label        : 1
-Position     : [20.5315, 238.029]
-Measurements : [999.687, 183217, 0.0516971, -1.25309]
----
-Label        : 1
-Position     : [712.214, 238.36]
-Measurements : [1449.11, 265176, -0.603101, -0.696948]
----
-Label        : 1
-Position     : [865.587, 239.052]
-Measurements : [956.124, 120560, 0.0173135, -0.96128]
----
-Label        : 1
-Position     : [908.872, 239.168]
-Measurements : [1200.91, 308237, 0.290084, -1.18105]
----
-Label        : 1
-Position     : [864.745, 239.275]
-Measurements : [985.691, 99090.4, 0.117515, -0.727384]
----
-Label        : 1
-Position     : [16.872, 239.4]
-Measurements : [1051.28, 134981, 0.16584, -0.893489]
----
-Label        : 1
-Position     : [904.082, 241.154]
-Measurements : [985.929, 314813, 0.739275, -0.681034]
----
-Label        : 1
-Position     : [709.237, 241.399]
-Measurements : [1246.95, 290046, -0.0863159, -1.28883]
----
-Label        : 1
-Position     : [859.941, 241.414]
-Measurements : [999.436, 118709, -0.0629683, -1.29704]
----
-Label        : 1
-Position     : [1265.2, 241.432]
-Measurements : [1182.54, 392403, 0.261345, -1.10779]
----
-Label        : 1
-Position     : [712.264, 241.728]
-Measurements : [1372.76, 262720, -0.233318, -1.27239]
----
-Label        : 1
-Position     : [908.5, 241.804]
-Measurements : [1162.23, 266354, 0.359413, -0.89179]
----
-Label        : 1
-Position     : [1258.66, 241.961]
-Measurements : [1380.11, 132033, -0.161983, -0.62962]
----
-Label        : 1
-Position     : [864.84, 242.752]
-Measurements : [868.386, 132788, 0.518228, -0.988712]
----
-Label        : 0
-Position     : [60.1129, 242.932]
-Measurements : [971.734, 29827.2, -0.779773, 0.373738]
----
-Label        : 0
-Position     : [69.4194, 243.353]
-Measurements : [812.667, 19641.8, -0.0692841, -0.810869]
----
-Label        : 1
-Position     : [1261.98, 244.224]
-Measurements : [1464.19, 199725, 0.186734, -0.800198]
----
-Label        : 0
-Position     : [89.3778, 245.656]
-Measurements : [1048.57, 22865.6, 1.52316, 6.60573]
----
-Label        : 0
-Position     : [61.823, 246.283]
-Measurements : [958.351, 50894.5, -0.00415467, -0.677129]
----
-Label        : 1
-Position     : [909.384, 246.336]
-Measurements : [1293.84, 420251, 0.629286, -0.612363]
----
-Label        : 1
-Position     : [317.44, 247.056]
-Measurements : [1159.36, 246411, 0.235154, -0.610881]
----
-Label        : 1
-Position     : [864.598, 247.06]
-Measurements : [762.301, 134820, 0.911803, -0.445678]
----
-Label        : 1
-Position     : [319.013, 247.654]
-Measurements : [1104.21, 250637, 0.397901, -0.618335]
----
-Label        : 1
-Position     : [175.779, 247.798]
-Measurements : [1806.55, 134620, 0.309509, 0.210585]
----
-Label        : 0
-Position     : [56.7737, 248.059]
-Measurements : [1115.22, 21316.3, -1.19701, 3.65595]
----
-Label        : 1
-Position     : [1265.57, 248.32]
-Measurements : [1400.04, 386926, 0.0969364, -1.31645]
----
-Label        : 1
-Position     : [15.7121, 248.405]
-Measurements : [1530.52, 287904, -0.323624, -1.15259]
----
-Label        : 0
-Position     : [148.004, 248.757]
-Measurements : [854.813, 21760, -1.06542, 0.133153]
----
-Label        : 1
-Position     : [1217.95, 248.832]
-Measurements : [1759.71, 361715, -0.213039, -0.93058]
----
-Label        : 1
-Position     : [1264.53, 249.024]
-Measurements : [1379.49, 389613, 0.157555, -1.28122]
----
-Label        : 1
-Position     : [911.806, 249.282]
-Measurements : [1679.18, 384588, 0.282877, -1.10675]
----
-Label        : 1
-Position     : [865.553, 249.663]
-Measurements : [807.124, 204699, 1.02958, -0.302475]
----
-Label        : 1
-Position     : [1261.11, 249.752]
-Measurements : [1404.83, 235070, 0.0643815, -0.710326]
----
-Label        : 1
-Position     : [177.146, 249.785]
-Measurements : [1549.26, 315187, 0.0983008, -0.594274]
----
-Label        : 0
-Position     : [109.77, 249.914]
-Measurements : [1040.92, 10459.9, -1.00389, 0.317522]
----
-Label        : 1
-Position     : [382.501, 250.062]
-Measurements : [1663.87, 892093, 0.0432028, -1.16457]
----
-Label        : 1
-Position     : [15.3317, 250.121]
-Measurements : [1498.05, 334465, -0.36862, -1.2321]
----
-Label        : 1
-Position     : [15.848, 250.152]
-Measurements : [1498.05, 334465, -0.36862, -1.2321]
----
-Label        : 1
-Position     : [178.664, 250.152]
-Measurements : [1327.07, 335769, 0.366534, -0.659771]
----
-Label        : 1
-Position     : [869.147, 250.29]
-Measurements : [684.653, 183146, 1.66781, 1.39747]
----
-Label        : 1
-Position     : [1213.93, 250.322]
-Measurements : [1213.22, 579259, 0.469411, -1.20637]
----
-Label        : 1
-Position     : [1221.8, 250.708]
-Measurements : [1587.12, 604175, -0.00410846, -1.49415]
----
-Label        : 1
-Position     : [310.122, 250.76]
-Measurements : [1212.15, 161163, 0.775936, -0.250635]
----
-Label        : 1
-Position     : [909.279, 251.316]
-Measurements : [1651.8, 443221, 0.0674686, -1.17702]
----
-Label        : 1
-Position     : [315.586, 251.505]
-Measurements : [1322.33, 219288, 0.155867, -0.990853]
----
-Label        : 1
-Position     : [387.072, 251.664]
-Measurements : [1931.64, 390549, 0.0234496, -0.208043]
----
-Label        : 1
-Position     : [910.92, 251.968]
-Measurements : [1668.13, 461662, 0.0513141, -1.22413]
----
-Label        : 0
-Position     : [126.898, 252.351]
-Measurements : [1016.3, 14954.5, -0.048602, -0.46863]
----
-Label        : 1
-Position     : [1250.34, 252.962]
-Measurements : [1247.53, 322880, 0.536272, -0.834595]
----
-Label        : 1
-Position     : [865.352, 253.504]
-Measurements : [853.489, 186985, 0.952944, -0.308027]
----
-Label        : 1
-Position     : [385.403, 253.939]
-Measurements : [2102.93, 424272, 0.0861453, -0.380908]
----
-Label        : 1
-Position     : [865.352, 254.016]
-Measurements : [856.453, 184444, 0.972312, -0.286989]
----
-Label        : 1
-Position     : [1182.35, 254.449]
-Measurements : [1790.33, 484783, 0.0652818, -0.908935]
----
-Label        : 1
-Position     : [867.44, 254.474]
-Measurements : [799.701, 196500, 1.15071, -0.0449687]
----
-Label        : 1
-Position     : [1196.12, 254.549]
-Measurements : [2041.64, 1.02109e+06, -0.411857, -1.54142]
----
-Label        : 1
-Position     : [860.792, 254.757]
-Measurements : [913.826, 138391, 0.559833, -0.863263]
----
-Label        : 1
-Position     : [908.357, 254.809]
-Measurements : [1412.23, 647217, 0.247126, -1.5408]
----
-Label        : 1
-Position     : [1168.67, 254.831]
-Measurements : [1889.79, 719158, 0.194722, -1.24675]
----
-Label        : 1
-Position     : [310.272, 255.248]
-Measurements : [1217.14, 279089, 0.136048, -1.25992]
----
-Label        : 0
-Position     : [128.566, 255.441]
-Measurements : [1109.3, 10061.8, -0.0638821, -1.40931]
----
-Label        : 0
-Position     : [96.3641, 255.457]
-Measurements : [1132.96, 4614.7, -1.08726, 0.881292]
----
-Label        : 1
-Position     : [310.445, 255.895]
-Measurements : [1217.14, 279089, 0.136048, -1.25992]
----
-Label        : 1
-Position     : [388.99, 256.192]
-Measurements : [1854.75, 384452, 0.0546601, -0.696502]
----
-Label        : 0
-Position     : [60.9885, 256.605]
-Measurements : [1113.98, 5532.94, -0.270312, 0.848228]
----
-Label        : 1
-Position     : [392.192, 256.784]
-Measurements : [1501.8, 363354, 0.333766, -0.925513]
----
-Label        : 1
-Position     : [1180.58, 257.024]
-Measurements : [2054.02, 331210, -0.221277, -0.0659788]
----
-Label        : 1
-Position     : [1194.91, 257.024]
-Measurements : [2405.62, 471670, -0.778642, 0.188787]
----
-Label        : 1
-Position     : [1199.29, 257.124]
-Measurements : [1605.35, 1.08056e+06, 0.42958, -1.44912]
----
-Label        : 1
-Position     : [314.796, 257.433]
-Measurements : [1240.97, 511114, 0.392849, -1.28138]
----
-Label        : 1
-Position     : [1247.65, 257.536]
-Measurements : [1223.46, 410436, 0.424089, -1.26315]
----
-Label        : 1
-Position     : [1249.77, 258.028]
-Measurements : [1099.47, 419054, 0.765379, -0.891461]
----
-Label        : 1
-Position     : [1169.31, 258.56]
-Measurements : [2003.74, 564609, 0.333267, -1.26695]
----
-Label        : 0
-Position     : [126.415, 258.636]
-Measurements : [1129.71, 9506.17, -0.0137887, -1.38408]
----
-Label        : 0
-Position     : [121.642, 258.691]
-Measurements : [1088.5, 3613.66, 0.00197447, -0.0827409]
----
-Label        : 1
-Position     : [390.1, 258.793]
-Measurements : [1520, 467194, 0.135573, -1.29076]
----
-Label        : 1
-Position     : [400.896, 258.832]
-Measurements : [1221.76, 239991, 0.442484, -0.513054]
----
-Label        : 1
-Position     : [1183.53, 259.491]
-Measurements : [1973.27, 608379, -0.260823, -1.15329]
----
-Label        : 1
-Position     : [404.432, 259.873]
-Measurements : [1150.14, 189804, 0.76918, 0.402144]
----
-Label        : 1
-Position     : [1152.51, 260.063]
-Measurements : [1204.8, 182669, -0.132697, -0.997134]
----
-Label        : 0
-Position     : [106.77, 261.044]
-Measurements : [1206.28, 1061.79, -0.410888, 0.180622]
----
-Label        : 1
-Position     : [1130.61, 261.144]
-Measurements : [2561.17, 171090, -0.547921, -0.417651]
----
-Label        : 1
-Position     : [401.118, 261.371]
-Measurements : [1123.23, 242041, 0.695339, -0.13039]
----
-Label        : 1
-Position     : [310.784, 261.392]
-Measurements : [1544.54, 506822, -0.163673, -1.30474]
----
-Label        : 1
-Position     : [1143.48, 261.44]
-Measurements : [1644.65, 321743, -0.0512625, -0.222908]
----
-Label        : 0
-Position     : [109.951, 261.974]
-Measurements : [1190.55, 1282.52, -0.0150936, -0.135875]
----
-Label        : 1
-Position     : [913.452, 262.109]
-Measurements : [934.031, 178900, 0.995524, -0.137872]
----
-Label        : 1
-Position     : [910.92, 262.208]
-Measurements : [931.175, 190355, 0.998872, -0.112188]
----
-Label        : 1
-Position     : [311.33, 262.536]
-Measurements : [1620.59, 526601, -0.288033, -1.24224]
----
-Label        : 1
-Position     : [399.863, 262.561]
-Measurements : [1043.41, 249290, 0.564103, -0.323788]
----
-Label        : 1
-Position     : [1156.51, 262.656]
-Measurements : [1462.4, 127159, -0.424693, -0.313032]
----
-Label        : 1
-Position     : [1147.07, 262.849]
-Measurements : [1327.42, 371238, 0.294475, -1.32257]
----
-Label        : 1
-Position     : [1148.14, 262.952]
-Measurements : [1294.73, 319986, 0.319489, -1.14969]
----
-Label        : 1
-Position     : [1167.25, 263.328]
-Measurements : [1410.77, 486064, 1.27753, 0.761903]
----
-Label        : 1
-Position     : [1277.3, 263.8]
-Measurements : [1038.55, 584822, 0.921905, -0.822194]
----
-Label        : 1
-Position     : [1107.2, 264.013]
-Measurements : [2270.68, 226124, 0.0254142, -0.165368]
----
-Label        : 1
-Position     : [1160.18, 264.541]
-Measurements : [1375.61, 208659, -0.14888, -1.05241]
----
-Label        : 1
-Position     : [908.278, 264.649]
-Measurements : [1037.61, 286517, 0.530986, -0.985511]
----
-Label        : 1
-Position     : [313.04, 264.976]
-Measurements : [1618.61, 570162, -0.266746, -1.41386]
----
-Label        : 1
-Position     : [1108.67, 265.389]
-Measurements : [2377.87, 180581, 0.0326631, 0.255546]
----
-Label        : 1
-Position     : [401.408, 265.488]
-Measurements : [947.133, 135441, 0.302264, -1.14469]
----
-Label        : 1
-Position     : [1126.07, 265.536]
-Measurements : [2279.57, 195603, -0.44005, -0.0712758]
----
-Label        : 1
-Position     : [1134.78, 265.536]
-Measurements : [2563.78, 322725, -0.600678, 0.164533]
----
-Label        : 1
-Position     : [1121.19, 266.037]
-Measurements : [1943.03, 310356, -0.431312, -0.823779]
----
-Label        : 1
-Position     : [913.852, 266.153]
-Measurements : [1109.52, 216541, 0.626918, -0.725646]
----
-Label        : 1
-Position     : [649.269, 266.252]
-Measurements : [599.908, 71670.4, 2.3928, 4.93111]
----
-Label        : 1
-Position     : [1102.36, 266.371]
-Measurements : [1796.64, 385031, 0.621278, -0.841863]
----
-Label        : 1
-Position     : [1116.34, 266.56]
-Measurements : [1939.34, 318779, -0.529652, -0.991538]
----
-Label        : 1
-Position     : [731.72, 266.816]
-Measurements : [1678.78, 356094, -0.371261, -1.03643]
----
-Label        : 1
-Position     : [1111.4, 266.824]
-Measurements : [2391.49, 238823, -0.671226, 1.18281]
----
-Label        : 1
-Position     : [215.528, 267.048]
-Measurements : [1048.73, 261716, 0.360984, -1.20366]
----
-Label        : 1
-Position     : [401.209, 267.138]
-Measurements : [848.653, 146968, 0.61596, -0.959477]
----
-Label        : 1
-Position     : [1275.3, 267.264]
-Measurements : [1515.46, 474401, 0.135607, -0.936487]
----
-Label        : 1
-Position     : [310.784, 267.536]
-Measurements : [1784.98, 291353, -0.0732586, -0.961432]
----
-Label        : 1
-Position     : [732.312, 267.725]
-Measurements : [1624.88, 397607, -0.266751, -1.21683]
----
-Label        : 1
-Position     : [737.788, 267.985]
-Measurements : [1495.01, 406252, -0.0158629, -1.35555]
----
-Label        : 1
-Position     : [1106.62, 268.096]
-Measurements : [2313.08, 382844, -0.30995, -0.775084]
----
-Label        : 1
-Position     : [1087.05, 268.174]
-Measurements : [1116.31, 303861, 0.177003, -1.28857]
----
-Label        : 1
-Position     : [1115.53, 268.414]
-Measurements : [2125.92, 383864, -0.4904, -0.522071]
----
-Label        : 1
-Position     : [1011.65, 268.45]
-Measurements : [1449.4, 301681, 0.494051, -0.180817]
----
-Label        : 1
-Position     : [1015.43, 268.595]
-Measurements : [1394.81, 214594, 1.5058, 1.77877]
----
-Label        : 1
-Position     : [735.943, 268.816]
-Measurements : [1467.98, 466659, -0.0267311, -1.39712]
----
-Label        : 1
-Position     : [1126.18, 268.858]
-Measurements : [2266.99, 280026, -0.601528, 0.0327727]
----
-Label        : 1
-Position     : [912.456, 268.864]
-Measurements : [1056.26, 218909, 0.78688, -0.543438]
----
-Label        : 1
-Position     : [218.636, 269.021]
-Measurements : [861.409, 263711, 0.985571, -0.461672]
----
-Label        : 1
-Position     : [1006.08, 269.187]
-Measurements : [1053.38, 498724, 0.880973, -0.493719]
----
-Label        : 1
-Position     : [418.065, 269.348]
-Measurements : [1047.11, 345073, 0.493225, -1.00819]
----
-Label        : 1
-Position     : [737.864, 269.376]
-Measurements : [1377.22, 426667, 0.0218243, -1.34089]
----
-Label        : 0
-Position     : [95.9609, 269.49]
-Measurements : [1213.82, 658.775, -0.438727, 2.60562]
----
-Label        : 0
-Position     : [68.1328, 269.557]
-Measurements : [1072.21, 3184.61, -1.33882, 3.11863]
----
-Label        : 1
-Position     : [1130.29, 269.584]
-Measurements : [2501.73, 275315, -0.678864, 0.10208]
----
-Label        : 1
-Position     : [314.053, 269.852]
-Measurements : [1566.75, 365869, -0.192031, -0.989876]
----
-Label        : 1
-Position     : [1279.13, 269.863]
-Measurements : [1127.24, 620688, 0.865744, -0.656894]
----
-Label        : 1
-Position     : [646.216, 269.888]
-Measurements : [632.767, 85002.5, 1.93003, 2.94433]
----
-Label        : 1
-Position     : [504.57, 269.916]
-Measurements : [1273.55, 200571, 0.942077, 0.818227]
----
-Label        : 1
-Position     : [1101.6, 269.958]
-Measurements : [1666.82, 398976, 0.855085, -0.575542]
----
-Label        : 1
-Position     : [17.5717, 270.067]
-Measurements : [770.188, 189094, 0.675891, -0.738604]
----
-Label        : 1
-Position     : [1011.9, 270.144]
-Measurements : [1379.92, 367636, 0.435525, -0.60348]
----
-Label        : 1
-Position     : [1099.45, 270.144]
-Measurements : [1333.36, 162280, 1.33995, 2.04295]
----
-Label        : 1
-Position     : [1051.49, 270.18]
-Measurements : [877.43, 112723, 0.443687, -1.01122]
----
-Label        : 1
-Position     : [1048.25, 270.656]
-Measurements : [783.695, 115229, 0.976985, -0.304765]
----
-Label        : 1
-Position     : [741.602, 270.67]
-Measurements : [1321.47, 331540, 0.143417, -1.38843]
----
-Label        : 1
-Position     : [214.695, 270.934]
-Measurements : [920.819, 278819, 0.74437, -0.933229]
----
-Label        : 1
-Position     : [17.0385, 270.938]
-Measurements : [770.188, 189094, 0.675891, -0.738604]
----
-Label        : 1
-Position     : [528.172, 270.996]
-Measurements : [886.537, 78060.2, -0.434116, -1.0551]
----
-Label        : 1
-Position     : [430.351, 271.052]
-Measurements : [1192.49, 204780, 0.518345, -0.639888]
----
-Label        : 1
-Position     : [1089.72, 271.168]
-Measurements : [1274.5, 276691, -0.224789, -1.12192]
----
-Label        : 1
-Position     : [1056.66, 271.427]
-Measurements : [1004.53, 125629, 0.209047, -0.959801]
----
-Label        : 1
-Position     : [1063.69, 271.95]
-Measurements : [1199.48, 184916, 0.975555, 0.752526]
----
-Label        : 1
-Position     : [497.964, 271.993]
-Measurements : [1134.95, 141407, 0.251246, 0.0948628]
----
-Label        : 1
-Position     : [648.455, 272.008]
-Measurements : [635.512, 81595.2, 2.05721, 3.32723]
----
-Label        : 1
-Position     : [1008.3, 272.118]
-Measurements : [1108.59, 517710, 0.804248, -0.709147]
----
-Label        : 1
-Position     : [1006.78, 272.192]
-Measurements : [939.057, 480229, 1.2488, 0.245804]
----
-Label        : 1
-Position     : [913.661, 272.262]
-Measurements : [1010.54, 241337, 0.778371, -0.550833]
----
-Label        : 1
-Position     : [1045.81, 272.426]
-Measurements : [687.398, 106725, 1.55161, 1.27755]
----
-Label        : 1
-Position     : [525.824, 272.656]
-Measurements : [779.155, 72012, -0.0877633, -1.51572]
----
-Label        : 1
-Position     : [424.758, 273.124]
-Measurements : [1106.27, 250153, 0.821168, -0.349988]
----
-Label        : 1
-Position     : [420.864, 273.168]
-Measurements : [971.07, 327912, 0.863181, -0.524252]
----
-Label        : 1
-Position     : [178.328, 273.213]
-Measurements : [777.815, 279267, 1.22349, 0.0729725]
----
-Label        : 1
-Position     : [740.122, 273.634]
-Measurements : [1206.5, 377291, 0.275537, -1.35118]
----
-Label        : 0
-Position     : [101.587, 273.676]
-Measurements : [1149.28, 9386.47, -1.92092, 4.36196]
----
-Label        : 1
-Position     : [314.368, 273.68]
-Measurements : [1408.4, 266236, -0.0165045, -1.1435]
----
-Label        : 1
-Position     : [746.324, 273.844]
-Measurements : [1014.73, 264450, 1.02647, 0.13557]
----
-Label        : 1
-Position     : [921.037, 273.907]
-Measurements : [1124.67, 112792, -0.058301, -1.22011]
----
-Label        : 1
-Position     : [422.099, 274.108]
-Measurements : [1027.75, 301602, 0.795925, -0.542135]
----
-Label        : 1
-Position     : [313.585, 274.132]
-Measurements : [1322.23, 249323, -0.0515938, -1.21853]
----
-Label        : 1
-Position     : [425.984, 274.192]
-Measurements : [1051.8, 272227, 0.85042, -0.319709]
----
-Label        : 1
-Position     : [502.272, 274.192]
-Measurements : [1164.56, 304728, 0.669936, -0.490368]
----
-Label        : 1
-Position     : [16.36, 274.216]
-Measurements : [948.219, 141586, 0.406117, -0.555703]
----
-Label        : 1
-Position     : [742.984, 274.496]
-Measurements : [1138.91, 311444, 0.65742, -0.907084]
----
-Label        : 1
-Position     : [432.128, 274.704]
-Measurements : [956.932, 237159, 1.20648, 0.350252]
----
-Label        : 1
-Position     : [1069.08, 274.914]
-Measurements : [1366.27, 660416, 0.487956, -1.31934]
----
-Label        : 1
-Position     : [1087.83, 275.463]
-Measurements : [891.113, 310761, 0.837804, -0.756201]
----
-Label        : 0
-Position     : [90.9274, 275.472]
-Measurements : [1140.01, 16565.8, -1.24683, 1.16419]
----
-Label        : 1
-Position     : [1069.24, 275.776]
-Measurements : [1468.46, 696259, 0.31273, -1.49559]
----
-Label        : 1
-Position     : [317.099, 276.092]
-Measurements : [1457.27, 373348, 0.161787, -0.912438]
----
-Label        : 1
-Position     : [174.568, 276.264]
-Measurements : [1040.6, 268999, 0.436337, -1.16028]
----
-Label        : 1
-Position     : [1059, 276.288]
-Measurements : [1128.86, 172664, 0.185102, -0.839022]
----
-Label        : 1
-Position     : [529.616, 276.682]
-Measurements : [534.419, 52732.9, 1.64724, 1.27171]
----
-Label        : 1
-Position     : [316.416, 276.752]
-Measurements : [1403.25, 359905, 0.222155, -0.835988]
----
-Label        : 1
-Position     : [170.162, 277.019]
-Measurements : [1051.99, 187144, 0.503535, -0.85975]
----
-Label        : 1
-Position     : [427.213, 277.039]
-Measurements : [850.466, 244173, 1.08429, 0.220032]
----
-Label        : 1
-Position     : [916.552, 277.568]
-Measurements : [1408.61, 397947, 0.270215, -1.24312]
----
-Label        : 1
-Position     : [320.447, 278.196]
-Measurements : [1471.97, 415102, 0.120275, -1.11773]
----
-Label        : 1
-Position     : [431.718, 278.245]
-Measurements : [751.49, 200757, 1.53889, 1.33916]
----
-Label        : 1
-Position     : [309.754, 278.32]
-Measurements : [986.378, 229596, 1.05617, 0.135274]
----
-Label        : 1
-Position     : [756.158, 278.327]
-Measurements : [1083.21, 133860, 0.16863, -0.116669]
----
-Label        : 1
-Position     : [748.053, 279.364]
-Measurements : [846.623, 199501, 0.97813, 0.193646]
----
-Label        : 1
-Position     : [458.066, 279.736]
-Measurements : [931.116, 143281, 0.0806578, -1.23171]
----
-Label        : 1
-Position     : [458.24, 279.824]
-Measurements : [931.116, 143281, 0.0806578, -1.23171]
----
-Label        : 1
-Position     : [1064.38, 279.893]
-Measurements : [1477.24, 471231, 0.357937, -1.16676]
----
-Label        : 0
-Position     : [58.0083, 280.441]
-Measurements : [1092.19, 4189, -1.46914, 1.92006]
----
-Label        : 1
-Position     : [920.136, 281.664]
-Measurements : [1413.13, 448823, 0.325568, -1.03628]
----
-Label        : 1
-Position     : [919.335, 281.879]
-Measurements : [1502.83, 404140, 0.210886, -0.979899]
----
-Label        : 1
-Position     : [751.2, 282.04]
-Measurements : [846.636, 179486, 1.11059, 0.34977]
----
-Label        : 1
-Position     : [23.0543, 282.059]
-Measurements : [1060.61, 148375, 0.423553, -1.28133]
----
-Label        : 1
-Position     : [923.619, 283.372]
-Measurements : [936.111, 447133, 1.21034, 0.0298327]
----
-Label        : 1
-Position     : [320, 283.408]
-Measurements : [1223.09, 319019, 0.394555, -1.04137]
----
-Label        : 1
-Position     : [24.04, 283.944]
-Measurements : [1109.57, 185013, 0.71294, -0.317033]
----
-Label        : 1
-Position     : [315.997, 284.254]
-Measurements : [811.549, 105376, 1.51785, 2.92169]
----
-Label        : 1
-Position     : [456.405, 284.475]
-Measurements : [636.738, 126317, 1.13706, -0.175113]
----
-Label        : 1
-Position     : [329.344, 284.507]
-Measurements : [1232.13, 472271, 0.126069, -1.51784]
----
-Label        : 0
-Position     : [99.7498, 285.182]
-Measurements : [1137.23, 5584.55, -1.27538, 1.00551]
----
-Label        : 0
-Position     : [134.817, 285.219]
-Measurements : [881.613, 33029.8, 0.190826, -0.832184]
----
-Label        : 1
-Position     : [920.04, 285.427]
-Measurements : [1098.97, 582074, 0.937742, -0.694146]
----
-Label        : 1
-Position     : [319.756, 285.975]
-Measurements : [1062.69, 245338, 0.659867, -0.730357]
----
-Label        : 1
-Position     : [25.3173, 286.576]
-Measurements : [1390.7, 392585, 0.475601, -0.862898]
----
-Label        : 1
-Position     : [326.144, 286.992]
-Measurements : [1657.95, 321479, -0.262079, -0.556645]
----
-Label        : 1
-Position     : [1266.57, 287.599]
-Measurements : [750.605, 328821, 1.18861, 0.297508]
----
-Label        : 0
-Position     : [82.092, 287.773]
-Measurements : [1124.65, 5412.04, -0.83463, 2.52339]
----
-Label        : 1
-Position     : [327.007, 288.245]
-Measurements : [1677.36, 315908, -0.263151, -0.565996]
----
-Label        : 0
-Position     : [53.4166, 288.46]
-Measurements : [1084.23, 3188.59, -1.87187, 7.62871]
----
-Label        : 0
-Position     : [88.6119, 289.825]
-Measurements : [1087.09, 18243.3, -2.03716, 4.80537]
----
-Label        : 1
-Position     : [241.64, 290.6]
-Measurements : [1209.43, 504772, 0.448527, -1.37282]
----
-Label        : 1
-Position     : [324.126, 291.315]
-Measurements : [1566.78, 298983, -0.0161348, -0.958735]
----
-Label        : 1
-Position     : [328.704, 291.6]
-Measurements : [1633.21, 369999, -0.306372, -0.837135]
----
-Label        : 1
-Position     : [1271.2, 291.84]
-Measurements : [1374.78, 214062, 0.214429, -0.478408]
----
-Label        : 1
-Position     : [302.592, 292.112]
-Measurements : [1169.63, 179053, 0.71615, 0.337299]
----
-Label        : 1
-Position     : [950.114, 292.328]
-Measurements : [1680.49, 291601, 1.32211, 0.949927]
----
-Label        : 1
-Position     : [1301.92, 292.352]
-Measurements : [955.762, 370696, 0.795185, -0.645999]
----
-Label        : 1
-Position     : [1304.67, 292.855]
-Measurements : [979.718, 336644, 0.835387, -0.556105]
----
-Label        : 1
-Position     : [303.353, 292.861]
-Measurements : [1265.01, 181410, 0.710102, 0.106154]
----
-Label        : 1
-Position     : [245.825, 293.012]
-Measurements : [919.762, 436385, 1.24983, 0.0658546]
----
-Label        : 0
-Position     : [107.608, 293.118]
-Measurements : [1138.94, 1207.44, 0.129752, 0.0825713]
----
-Label        : 1
-Position     : [18.3898, 293.199]
-Measurements : [2086.84, 553354, -0.499861, -0.93361]
----
-Label        : 0
-Position     : [103.183, 293.283]
-Measurements : [1152.1, 969.171, 0.477588, 0.25307]
----
-Label        : 1
-Position     : [18.408, 293.672]
-Measurements : [2086.84, 553354, -0.499861, -0.93361]
----
-Label        : 0
-Position     : [88.8033, 294.394]
-Measurements : [1098.51, 11313.5, -3.58635, 13.8647]
----
-Label        : 1
-Position     : [306.176, 294.672]
-Measurements : [1590.16, 252463, -0.0388323, -0.731191]
----
-Label        : 1
-Position     : [237.841, 294.969]
-Measurements : [870.203, 441129, 1.23734, -0.0204835]
----
-Label        : 1
-Position     : [1306.59, 295.279]
-Measurements : [658.351, 211218, 2.04249, 3.60718]
----
-Label        : 0
-Position     : [60.9388, 296.015]
-Measurements : [1116.95, 1229.84, -1.56664, 3.49758]
----
-Label        : 1
-Position     : [299.216, 296.028]
-Measurements : [900.519, 209900, 0.852429, -0.26981]
----
-Label        : 1
-Position     : [325.213, 296.53]
-Measurements : [1405.13, 297875, 0.283657, -0.866397]
----
-Label        : 1
-Position     : [1275.42, 296.595]
-Measurements : [1302.59, 305126, 0.494154, -0.588778]
----
-Label        : 1
-Position     : [1266.34, 296.68]
-Measurements : [1298.97, 495857, 0.221354, -1.40382]
----
-Label        : 1
-Position     : [309.328, 296.733]
-Measurements : [1853.68, 244272, -0.47485, -0.211116]
----
-Label        : 1
-Position     : [307.33, 296.858]
-Measurements : [1784.36, 267463, -0.148655, -0.787287]
----
-Label        : 1
-Position     : [949.856, 296.888]
-Measurements : [1770.62, 407193, 0.170323, -0.727444]
----
-Label        : 1
-Position     : [309.656, 297.175]
-Measurements : [1901.04, 232764, -0.380573, -0.113782]
----
-Label        : 1
-Position     : [920.403, 297.197]
-Measurements : [871.386, 96826.8, 0.503393, 0.0888838]
----
-Label        : 1
-Position     : [331.776, 297.232]
-Measurements : [1420.68, 292436, -0.352953, -1.10581]
----
-Label        : 1
-Position     : [946.274, 297.246]
-Measurements : [1599.99, 398568, -0.00129816, -0.766958]
----
-Label        : 1
-Position     : [251.368, 297.256]
-Measurements : [993.275, 297765, 0.849048, -0.309308]
----
-Label        : 1
-Position     : [334.915, 297.361]
-Measurements : [1084.38, 351454, 0.426584, -1.24256]
----
-Label        : 1
-Position     : [1274.27, 297.984]
-Measurements : [1332.96, 331269, 0.468437, -0.752828]
----
-Label        : 1
-Position     : [22.0759, 297.999]
-Measurements : [1652.09, 1.02569e+06, 0.211875, -1.65132]
----
-Label        : 1
-Position     : [311.296, 298.256]
-Measurements : [1904.36, 261410, -0.702658, 0.32137]
----
-Label        : 1
-Position     : [1279.21, 298.307]
-Measurements : [764.869, 140157, 0.896752, -0.579133]
----
-Label        : 0
-Position     : [69.7364, 298.37]
-Measurements : [1089.44, 758.82, 0.398235, 0.174431]
----
-Label        : 1
-Position     : [917.303, 298.463]
-Measurements : [897.027, 103491, 0.573066, 0.103263]
----
-Label        : 1
-Position     : [760.643, 298.511]
-Measurements : [1266.55, 482232, 0.14761, -1.41716]
----
-Label        : 1
-Position     : [249.713, 298.849]
-Measurements : [923.881, 333406, 0.947606, -0.355207]
----
-Label        : 1
-Position     : [919.136, 298.936]
-Measurements : [946.786, 100771, 0.478163, -0.0212239]
----
-Label        : 1
-Position     : [757.222, 299.487]
-Measurements : [1173.88, 493903, 0.320998, -1.36487]
----
-Label        : 1
-Position     : [248.122, 299.506]
-Measurements : [855.49, 348116, 1.14937, -0.0696434]
----
-Label        : 1
-Position     : [317.066, 300.764]
-Measurements : [1403.29, 280627, 0.168902, -1.20865]
----
-Label        : 1
-Position     : [328.18, 300.867]
-Measurements : [1576.27, 251724, -0.352038, -0.661689]
----
-Label        : 1
-Position     : [760.928, 300.984]
-Measurements : [1313.81, 416547, 0.211536, -1.34137]
----
-Label        : 0
-Position     : [83.0857, 301.136]
-Measurements : [1035.29, 17717.4, -1.12875, -0.0603737]
----
-Label        : 1
-Position     : [313.574, 301.201]
-Measurements : [1721.09, 342123, -0.319195, -0.541381]
----
-Label        : 1
-Position     : [915.915, 301.724]
-Measurements : [788.007, 96760.5, 0.517847, -0.515003]
----
-Label        : 1
-Position     : [314.88, 301.84]
-Measurements : [1661.9, 323981, -0.126379, -0.61667]
----
-Label        : 1
-Position     : [312.988, 301.877]
-Measurements : [1741.87, 349458, -0.422613, -0.414977]
----
-Label        : 1
-Position     : [922.947, 302.058]
-Measurements : [842.803, 140645, 0.708456, -0.642811]
----
-Label        : 1
-Position     : [863.369, 302.592]
-Measurements : [1190.46, 653707, 0.437242, -1.42451]
----
-Label        : 0
-Position     : [73.1564, 302.927]
-Measurements : [1063.72, 1571.58, -1.30126, 2.84423]
----
-Label        : 1
-Position     : [327.977, 303.362]
-Measurements : [1374.89, 362764, -0.025753, -1.1578]
----
-Label        : 1
-Position     : [920.672, 304.056]
-Measurements : [796.024, 135541, 0.988091, -0.0791952]
----
-Label        : 1
-Position     : [329.562, 304.413]
-Measurements : [1460.62, 367780, -0.306666, -0.969825]
----
-Label        : 1
-Position     : [860.914, 304.582]
-Measurements : [1465.11, 534631, -0.0360755, -1.30213]
----
-Label        : 1
-Position     : [858.72, 305.08]
-Measurements : [1509.21, 378380, 0.120227, -0.875933]
----
-Label        : 0
-Position     : [141.946, 305.672]
-Measurements : [1002.69, 8849.39, -0.255284, -1.37972]
----
-Label        : 1
-Position     : [332.288, 305.936]
-Measurements : [1537.35, 457147, -0.304897, -1.12936]
----
-Label        : 0
-Position     : [73.7017, 307.667]
-Measurements : [1036.37, 4929.06, -2.51853, 7.21282]
----
-Label        : 1
-Position     : [274.663, 307.725]
-Measurements : [1783.92, 511878, -0.317551, -1.27095]
----
-Label        : 1
-Position     : [318.464, 308.496]
-Measurements : [1011.89, 221130, 0.296984, -0.978957]
----
-Label        : 0
-Position     : [97.176, 309.451]
-Measurements : [1058.1, 69435.8, 1.18385, 3.79824]
----
-Label        : 1
-Position     : [852.789, 310.726]
-Measurements : [937.268, 343837, 1.06517, 0.251392]
----
-Label        : 1
-Position     : [320.521, 310.807]
-Measurements : [841.622, 155065, 0.508284, -1.18065]
----
-Label        : 1
-Position     : [278.504, 311.08]
-Measurements : [1513.87, 542416, -0.160913, -1.29831]
----
-Label        : 1
-Position     : [855.136, 311.224]
-Measurements : [965.681, 422064, 1.06772, 0.0207412]
----
-Label        : 1
-Position     : [180.397, 311.562]
-Measurements : [878.252, 502288, 1.09733, -0.399046]
----
-Label        : 1
-Position     : [317.416, 313.271]
-Measurements : [676.317, 150744, 1.09745, -0.225275]
----
-Label        : 1
-Position     : [282.503, 313.562]
-Measurements : [1098.62, 561433, 0.660325, -1.02543]
----
-Label        : 0
-Position     : [107.163, 313.761]
-Measurements : [1136.26, 34082.8, 2.67994, 10.7748]
----
-Label        : 0
-Position     : [101.056, 313.921]
-Measurements : [1005.03, 34591.4, -1.2708, 0.688471]
----
-Label        : 1
-Position     : [1292.36, 314.111]
-Measurements : [1329.83, 361625, 0.536734, 0.451267]
----
-Label        : 1
-Position     : [851.409, 315.023]
-Measurements : [518.923, 65611, 3.04831, 8.99739]
----
-Label        : 1
-Position     : [171.161, 315.662]
-Measurements : [1166.81, 347315, 0.114413, -1.49268]
----
-Label        : 1
-Position     : [175.592, 315.688]
-Measurements : [1324.94, 428503, 0.0213319, -1.40666]
----
-Label        : 0
-Position     : [126.002, 316.031]
-Measurements : [1013.5, 6676.78, -0.423331, -0.903568]
----
-Label        : 1
-Position     : [1289.13, 317.056]
-Measurements : [1501.1, 375295, 0.550041, -0.423567]
----
-Label        : 1
-Position     : [36.6487, 318.64]
-Measurements : [892.864, 160753, 0.504941, 0.140527]
----
-Label        : 0
-Position     : [125.931, 319.107]
-Measurements : [1040.87, 4890.14, -0.827509, -0.402262]
----
-Label        : 1
-Position     : [30.0153, 320.214]
-Measurements : [748.116, 203575, 0.936712, 0.052045]
----
-Label        : 1
-Position     : [1287.55, 320.754]
-Measurements : [1689.01, 354636, 0.0633067, -0.810724]
----
-Label        : 1
-Position     : [1297.4, 321.937]
-Measurements : [1304.25, 118013, 0.104143, -0.45438]
----
-Label        : 1
-Position     : [1293.74, 322.688]
-Measurements : [1461.73, 260869, 0.75782, 0.380715]
----
-Label        : 1
-Position     : [32.232, 323.36]
-Measurements : [1124.61, 194880, 0.0505048, -0.763606]
----
-Label        : 0
-Position     : [76.8648, 324.006]
-Measurements : [1036.07, 2884.28, -1.72646, 3.59258]
----
-Label        : 1
-Position     : [1298.34, 324.213]
-Measurements : [1342.83, 161102, 0.218354, -0.630706]
----
-Label        : 1
-Position     : [897.156, 324.979]
-Measurements : [801.316, 273652, 1.11685, 0.472567]
----
-Label        : 1
-Position     : [30.0511, 325.259]
-Measurements : [1221.26, 161346, -0.149396, -0.575983]
----
-Label        : 1
-Position     : [898.656, 327.096]
-Measurements : [900.46, 295303, 0.911096, -0.1566]
----
-Label        : 1
-Position     : [1295.33, 327.368]
-Measurements : [1534.61, 306883, 0.337662, -0.275422]
----
-Label        : 1
-Position     : [28.136, 328.992]
-Measurements : [1137.4, 208439, -0.176804, -1.21257]
----
-Label        : 1
-Position     : [1299.88, 329.856]
-Measurements : [1868.54, 474080, 0.300947, -0.990441]
----
-Label        : 1
-Position     : [1295.53, 330.382]
-Measurements : [1676.95, 511605, 0.300156, -0.778508]
----
-Label        : 1
-Position     : [896.2, 331.308]
-Measurements : [745.264, 314389, 1.45924, 0.790869]
----
-Label        : 1
-Position     : [31.393, 332.068]
-Measurements : [1478.44, 305886, 0.15462, -0.427132]
----
-Label        : 1
-Position     : [24.995, 332.951]
-Measurements : [1004.96, 319137, 0.450735, -1.16757]
----
-Label        : 1
-Position     : [35.304, 333.088]
-Measurements : [1513.98, 266411, 0.837431, -0.169678]
----
-Label        : 1
-Position     : [819.585, 335.624]
-Measurements : [965.229, 172634, 0.236331, -0.664568]
----
-Label        : 1
-Position     : [32.9505, 335.688]
-Measurements : [1660.38, 405910, -0.0888662, -1.11764]
----
-Label        : 1
-Position     : [388.574, 338.077]
-Measurements : [1447.9, 1.08173e+06, 0.354629, -1.54885]
----
-Label        : 1
-Position     : [379.864, 339.331]
-Measurements : [1453.77, 583560, 0.233993, -1.32254]
----
-Label        : 1
-Position     : [30.184, 339.744]
-Measurements : [1722.53, 324170, -0.15393, -0.845581]
----
-Label        : 1
-Position     : [823.904, 339.896]
-Measurements : [1025.37, 218483, 0.41484, -1.05394]
----
-Label        : 1
-Position     : [34.9349, 340.373]
-Measurements : [1653.74, 352450, 0.173884, -1.07396]
----
-Label        : 1
-Position     : [384.512, 341.016]
-Measurements : [1824.12, 664849, -0.0639393, -1.36818]
----
-Label        : 1
-Position     : [828.343, 341.341]
-Measurements : [759.314, 234096, 1.27466, 0.175611]
----
-Label        : 1
-Position     : [31.5786, 342.049]
-Measurements : [1783.36, 255148, -0.283535, -0.372619]
----
-Label        : 1
-Position     : [28.3428, 345.376]
-Measurements : [1622.15, 158889, -0.389945, -0.751115]
----
-Label        : 0
-Position     : [128.417, 347.494]
-Measurements : [966.241, 9470.65, -0.427983, -0.896549]
----
-Label        : 1
-Position     : [27.1152, 347.569]
-Measurements : [1385.11, 243190, -0.218321, -1.37813]
----
-Label        : 1
-Position     : [28.136, 348.448]
-Measurements : [1354.97, 291130, -0.24537, -1.52809]
----
-Label        : 1
-Position     : [225.383, 351.282]
-Measurements : [1295.44, 543542, 0.426287, -1.28963]
----
-Label        : 0
-Position     : [116.786, 352.671]
-Measurements : [1058.12, 12116.4, -2.85104, 9.29506]
----
-Label        : 0
-Position     : [75.7368, 354.428]
-Measurements : [1166.54, 15632.4, 0.894411, 0.616058]
----
-Label        : 1
-Position     : [248.515, 354.812]
-Measurements : [1673.76, 799735, -0.145397, -1.43538]
----
-Label        : 1
-Position     : [494.684, 354.912]
-Measurements : [1102.73, 384686, 0.55021, -0.81691]
----
-Label        : 1
-Position     : [224.232, 355.104]
-Measurements : [1503.57, 547230, 0.0527112, -1.52581]
----
-Label        : 1
-Position     : [1127.2, 355.598]
-Measurements : [2074.99, 518193, -0.127428, -0.528294]
----
-Label        : 1
-Position     : [195.826, 356.224]
-Measurements : [1082.07, 447669, 0.668964, -1.10361]
----
-Label        : 0
-Position     : [116.528, 356.833]
-Measurements : [1029.76, 17913.7, -1.57809, 2.68615]
----
-Label        : 1
-Position     : [491.52, 356.84]
-Measurements : [1473.24, 249410, 0.051303, -0.701314]
----
-Label        : 1
-Position     : [32.7376, 358.172]
-Measurements : [651.011, 91448.5, 1.12431, 0.166156]
----
-Label        : 1
-Position     : [250.856, 358.176]
-Measurements : [1872.36, 643647, -0.398515, -1.24]
----
-Label        : 1
-Position     : [238.575, 358.399]
-Measurements : [971.085, 358901, 0.319499, -1.43387]
----
-Label        : 1
-Position     : [187.979, 358.403]
-Measurements : [978.642, 459926, 0.606149, -1.29002]
----
-Label        : 1
-Position     : [241.14, 359.299]
-Measurements : [1337.75, 254469, -0.313284, -0.814633]
----
-Label        : 1
-Position     : [228.903, 359.66]
-Measurements : [943.164, 542799, 1.27245, 0.224254]
----
-Label        : 1
-Position     : [191.976, 360.224]
-Measurements : [1198.38, 403389, 0.441222, -1.23737]
----
-Label        : 1
-Position     : [1130.68, 360.296]
-Measurements : [2754.45, 546386, -0.828121, -0.255403]
----
-Label        : 1
-Position     : [39.073, 360.72]
-Measurements : [801.782, 71520.4, 0.527475, -0.79077]
----
-Label        : 1
-Position     : [36.328, 360.736]
-Measurements : [740.09, 76900.7, 0.948317, -0.264433]
----
-Label        : 1
-Position     : [207.336, 360.736]
-Measurements : [1083.65, 351551, 0.59436, -0.972166]
----
-Label        : 1
-Position     : [240.616, 360.736]
-Measurements : [1279.16, 259201, -0.336081, -0.905844]
----
-Label        : 1
-Position     : [209.926, 360.996]
-Measurements : [1096.49, 335651, 0.644743, -0.93957]
----
-Label        : 1
-Position     : [255.149, 361.25]
-Measurements : [1025.33, 820394, 1.13797, -0.401646]
----
-Label        : 1
-Position     : [492.046, 361.688]
-Measurements : [1324.93, 304446, 0.359948, -0.787004]
----
-Label        : 1
-Position     : [202.507, 362.779]
-Measurements : [758.795, 326023, 1.61784, 1.14283]
----
-Label        : 1
-Position     : [1125.69, 364.397]
-Measurements : [1748.95, 385271, 1.11641, 0.443763]
----
-Label        : 0
-Position     : [81.9451, 364.568]
-Measurements : [1063.34, 5854.01, 1.05216, 1.8461]
----
-Label        : 1
-Position     : [1178.06, 365.985]
-Measurements : [886.928, 465178, 1.2481, 0.126126]
----
-Label        : 1
-Position     : [273.896, 366.368]
-Measurements : [1143.48, 374598, 0.659708, -0.333251]
----
-Label        : 1
-Position     : [284.648, 367.392]
-Measurements : [954.907, 45656.6, -0.231089, -0.665454]
----
-Label        : 1
-Position     : [1173.93, 367.744]
-Measurements : [1157.86, 403720, 0.581964, -0.807707]
----
-Label        : 1
-Position     : [525.596, 367.949]
-Measurements : [783.268, 364467, 1.24925, 0.334774]
----
-Label        : 1
-Position     : [539.152, 368.117]
-Measurements : [1193.28, 631823, 0.900507, -0.490804]
----
-Label        : 1
-Position     : [278.747, 369.105]
-Measurements : [1012.5, 237941, 1.47042, 2.26681]
----
-Label        : 1
-Position     : [520.393, 369.211]
-Measurements : [1048.66, 416895, 0.492326, -1.15095]
----
-Label        : 1
-Position     : [277.177, 370.136]
-Measurements : [945.034, 189340, 1.48244, 2.90752]
----
-Label        : 1
-Position     : [1171.98, 370.626]
-Measurements : [931.69, 433750, 1.15905, -0.0595133]
----
-Label        : 1
-Position     : [534.528, 370.664]
-Measurements : [1029.14, 364186, 1.57702, 2.36234]
----
-Label        : 1
-Position     : [287.482, 371.23]
-Measurements : [948.184, 59057.7, -0.36291, -0.629689]
----
-Label        : 1
-Position     : [284.838, 372.084]
-Measurements : [899.306, 58401.6, -0.24318, -0.633071]
----
-Label        : 1
-Position     : [524.288, 372.2]
-Measurements : [1197.62, 302897, 0.49929, -1.03499]
----
-Label        : 0
-Position     : [77.9561, 372.201]
-Measurements : [1079.98, 4207.35, 1.0146, 1.71099]
----
-Label        : 1
-Position     : [538.046, 372.35]
-Measurements : [988.993, 339383, 0.971352, -0.151821]
----
-Label        : 0
-Position     : [150.227, 372.757]
-Measurements : [1229.14, 32996.4, 0.494297, -0.745172]
----
-Label        : 1
-Position     : [293.1, 373.368]
-Measurements : [1033.2, 93170.5, -0.255542, -1.0312]
----
-Label        : 1
-Position     : [293.376, 373.784]
-Measurements : [1033.2, 93170.5, -0.255542, -1.0312]
----
-Label        : 1
-Position     : [289.037, 374.518]
-Measurements : [1029.61, 71054.5, -0.145656, -0.636408]
----
-Label        : 0
-Position     : [84.4049, 374.771]
-Measurements : [1094.08, 3891.08, 1.58465, 3.49479]
----
-Label        : 0
-Position     : [120.432, 375.219]
-Measurements : [1059.57, 5005.6, -1.1571, 1.0382]
----
-Label        : 0
-Position     : [78.0707, 375.487]
-Measurements : [1096, 2134.87, 0.634839, 0.533664]
----
-Label        : 0
-Position     : [100.413, 375.896]
-Measurements : [1008.28, 2170.33, -0.190925, 0.356895]
----
-Label        : 0
-Position     : [76.9407, 376.385]
-Measurements : [1086.16, 2849, 0.236747, 0.129677]
----
-Label        : 0
-Position     : [130.29, 377.145]
-Measurements : [803.267, 33189.8, 0.0741495, -1.07347]
----
-Label        : 0
-Position     : [92.1529, 377.833]
-Measurements : [1097.99, 23128, 1.60171, 2.06603]
----
-Label        : 1
-Position     : [342.528, 377.88]
-Measurements : [2102.24, 570240, -0.402955, -0.962667]
----
-Label        : 1
-Position     : [339.165, 379.291]
-Measurements : [1648.96, 1.05003e+06, 0.00722861, -1.66277]
----
-Label        : 1
-Position     : [543.092, 379.536]
-Measurements : [957.537, 484110, 1.15973, -0.240661]
----
-Label        : 1
-Position     : [341.942, 380.04]
-Measurements : [2050.94, 955353, -0.509036, -1.19656]
----
-Label        : 1
-Position     : [302.487, 380.29]
-Measurements : [1173.98, 306768, 0.517941, -0.576989]
----
-Label        : 1
-Position     : [303.104, 380.44]
-Measurements : [1196.92, 304257, 0.46022, -0.652252]
----
-Label        : 1
-Position     : [538.112, 380.904]
-Measurements : [1462.03, 477712, -0.0318375, -1.56297]
----
-Label        : 1
-Position     : [306.948, 381.111]
-Measurements : [1084.41, 333473, 0.793099, -0.507717]
----
-Label        : 0
-Position     : [88.715, 381.723]
-Measurements : [1182.13, 22355.7, 0.821427, 0.160565]
----
-Label        : 0
-Position     : [83.9033, 381.786]
-Measurements : [1159.53, 12281.8, 1.15369, 0.567158]
----
-Label        : 1
-Position     : [306.29, 382.778]
-Measurements : [1067.05, 332709, 0.879665, -0.402924]
----
-Label        : 0
-Position     : [128.7, 383.382]
-Measurements : [964.54, 14395.5, -0.909606, 0.452174]
----
-Label        : 1
-Position     : [307.712, 384.024]
-Measurements : [974.267, 307598, 1.31357, 0.6633]
----
-Label        : 1
-Position     : [542.991, 384.142]
-Measurements : [800.182, 341701, 1.78415, 1.97101]
----
-Label        : 1
-Position     : [33.768, 384.288]
-Measurements : [895.824, 389002, 1.04428, 0.136469]
----
-Label        : 1
-Position     : [536.073, 384.29]
-Measurements : [1412.41, 447854, 0.018311, -1.41854]
----
-Label        : 1
-Position     : [300.132, 384.395]
-Measurements : [1134.16, 182243, 0.36602, -0.510284]
----
-Label        : 0
-Position     : [158.793, 384.688]
-Measurements : [1111.14, 3448.12, 1.253, 2.86972]
----
-Label        : 1
-Position     : [531.32, 385.221]
-Measurements : [1307.26, 334628, 0.361351, -1.09807]
----
-Label        : 1
-Position     : [37.3792, 385.999]
-Measurements : [1415.47, 544143, 0.291589, -1.07497]
----
-Label        : 0
-Position     : [139.365, 386.319]
-Measurements : [947.557, 10998, -0.0164515, 0.296629]
----
-Label        : 1
-Position     : [535.04, 386.536]
-Measurements : [1242.39, 374640, 0.38586, -1.17141]
----
-Label        : 1
-Position     : [36.8771, 386.802]
-Measurements : [1558.57, 639819, 0.534264, -0.486779]
----
-Label        : 1
-Position     : [41.448, 387.872]
-Measurements : [1798.25, 571746, 0.245078, -0.362471]
----
-Label        : 1
-Position     : [38.4414, 389.267]
-Measurements : [1888.62, 689619, 0.227818, -0.778128]
----
-Label        : 0
-Position     : [91.5758, 389.307]
-Measurements : [1046.18, 19292.2, -1.00928, 1.27428]
----
-Label        : 1
-Position     : [42.6246, 391.71]
-Measurements : [1499.46, 652634, 0.552446, -0.592604]
----
-Label        : 1
-Position     : [723.528, 394.24]
-Measurements : [1293.89, 534656, 0.679288, -0.906691]
----
-Label        : 1
-Position     : [728.358, 394.385]
-Measurements : [913.576, 452985, 1.67101, 1.66701]
----
-Label        : 1
-Position     : [540.672, 394.728]
-Measurements : [1036.92, 192689, 0.928732, 0.0844256]
----
-Label        : 0
-Position     : [120.329, 394.979]
-Measurements : [1030.67, 2088.07, -0.00292882, 0.536204]
----
-Label        : 1
-Position     : [53.7728, 396.652]
-Measurements : [1747.54, 297395, -0.0596843, -0.46686]
----
-Label        : 1
-Position     : [535.693, 396.687]
-Measurements : [797.866, 72402.5, 0.441314, -0.190174]
----
-Label        : 1
-Position     : [541.504, 397.342]
-Measurements : [889.472, 163983, 1.30112, 1.33362]
----
-Label        : 1
-Position     : [350.908, 398.532]
-Measurements : [711.83, 191618, 1.49223, 1.16671]
----
-Label        : 1
-Position     : [724.205, 398.75]
-Measurements : [914.407, 561175, 1.41964, 0.668516]
----
-Label        : 1
-Position     : [49.64, 399.136]
-Measurements : [1760.79, 435440, -0.108817, -1.11199]
----
-Label        : 0
-Position     : [154.43, 402.69]
-Measurements : [1092.67, 22119.1, -1.14498, 1.42765]
----
-Label        : 1
-Position     : [353.28, 402.968]
-Measurements : [774.807, 170130, 1.42406, 1.2049]
----
-Label        : 1
-Position     : [51.6486, 403.384]
-Measurements : [1166.88, 578105, 0.863849, -0.616763]
----
-Label        : 0
-Position     : [117.844, 404.396]
-Measurements : [1114.43, 17962.6, -0.886597, 1.18863]
----
-Label        : 1
-Position     : [62.6858, 404.419]
-Measurements : [1178.35, 195504, -0.197495, -1.1333]
----
-Label        : 1
-Position     : [797.47, 406.143]
-Measurements : [507.064, 68048.2, 2.42962, 5.13555]
----
-Label        : 1
-Position     : [916.831, 406.245]
-Measurements : [762.472, 180066, 1.11748, 0.000988982]
----
-Label        : 1
-Position     : [353.501, 407.75]
-Measurements : [553.966, 92119.4, 2.7191, 8.09168]
----
-Label        : 1
-Position     : [62.44, 407.84]
-Measurements : [1245.64, 169765, -0.405401, -0.676118]
----
-Label        : 1
-Position     : [778.594, 407.894]
-Measurements : [837.78, 215531, 0.113253, -1.73944]
----
-Label        : 1
-Position     : [915.08, 408.576]
-Measurements : [807.777, 176175, 0.957463, -0.240786]
----
-Label        : 1
-Position     : [782.408, 409.088]
-Measurements : [933.179, 138430, -0.216412, -1.48188]
----
-Label        : 1
-Position     : [1221.77, 410.184]
-Measurements : [622.695, 204200, 2.32691, 4.57398]
----
-Label        : 1
-Position     : [909.181, 410.456]
-Measurements : [791.064, 183726, 0.602742, -0.857243]
----
-Label        : 1
-Position     : [909.936, 410.463]
-Measurements : [791.064, 183726, 0.602742, -0.857243]
----
-Label        : 1
-Position     : [60.9822, 410.709]
-Measurements : [1115.57, 283113, 0.167235, -0.842756]
----
-Label        : 1
-Position     : [1217.52, 410.993]
-Measurements : [873.734, 255944, 1.00293, 0.00975804]
----
-Label        : 1
-Position     : [792.648, 411.136]
-Measurements : [809.283, 112909, 0.610934, -0.836807]
----
-Label        : 1
-Position     : [797.575, 411.37]
-Measurements : [646.996, 115608, 1.21774, 0.226855]
----
-Label        : 1
-Position     : [68.061, 411.652]
-Measurements : [1527.87, 247014, 0.0294026, -0.994186]
----
-Label        : 1
-Position     : [910.294, 412.547]
-Measurements : [877.468, 169613, 0.63092, -0.651071]
----
-Label        : 1
-Position     : [909.448, 413.184]
-Measurements : [801.535, 146704, 0.620722, -0.356229]
----
-Label        : 1
-Position     : [766.03, 413.862]
-Measurements : [1172.6, 420361, 0.143245, -1.58112]
----
-Label        : 1
-Position     : [786.791, 413.942]
-Measurements : [856.077, 110795, 0.25185, -1.26631]
----
-Label        : 1
-Position     : [1216.94, 414.368]
-Measurements : [899.022, 240505, 1.06321, 0.0829718]
----
-Label        : 1
-Position     : [813.192, 415.232]
-Measurements : [1239.04, 426480, 0.267245, -1.28562]
----
-Label        : 1
-Position     : [930.922, 415.586]
-Measurements : [685.414, 204379, 1.13662, -0.232027]
----
-Label        : 1
-Position     : [768.166, 415.721]
-Measurements : [1317.51, 403060, -0.172306, -1.51637]
----
-Label        : 1
-Position     : [873.984, 415.872]
-Measurements : [590.38, 105650, 1.47544, 0.897345]
----
-Label        : 1
-Position     : [65.512, 416.032]
-Measurements : [1700.58, 290380, -0.00680515, -0.94794]
----
-Label        : 1
-Position     : [768.584, 416.256]
-Measurements : [1324.42, 393554, -0.179794, -1.47335]
----
-Label        : 1
-Position     : [893.119, 416.688]
-Measurements : [939.527, 283659, 0.743562, -0.525585]
----
-Label        : 1
-Position     : [895.112, 417.28]
-Measurements : [1010.12, 246797, 0.683016, -0.43508]
----
-Label        : 1
-Position     : [898.12, 417.804]
-Measurements : [925.398, 290458, 0.789421, -0.527365]
----
-Label        : 1
-Position     : [74.6812, 419.043]
-Measurements : [2073.43, 401342, -0.473729, -0.575139]
----
-Label        : 1
-Position     : [814.578, 419.262]
-Measurements : [1315.69, 325948, 0.0345118, -1.23242]
----
-Label        : 1
-Position     : [871.048, 419.328]
-Measurements : [733.64, 129512, 0.892418, -0.248229]
----
-Label        : 1
-Position     : [933, 419.328]
-Measurements : [809.058, 194305, 0.70812, -0.886597]
----
-Label        : 1
-Position     : [812.492, 419.453]
-Measurements : [1345.87, 287357, 0.113904, -1.18225]
----
-Label        : 1
-Position     : [839.957, 419.915]
-Measurements : [694.174, 213573, 1.54485, 1.61826]
----
-Label        : 1
-Position     : [929.023, 419.974]
-Measurements : [753.367, 175046, 0.94208, -0.369347]
----
-Label        : 1
-Position     : [873.528, 420.529]
-Measurements : [704.959, 134564, 1.02537, -0.144874]
----
-Label        : 1
-Position     : [61.7148, 420.762]
-Measurements : [1297.15, 418280, 0.0260362, -1.39948]
----
-Label        : 1
-Position     : [67.1091, 421.524]
-Measurements : [2090.08, 373632, -0.210323, -0.807548]
----
-Label        : 1
-Position     : [752.214, 421.931]
-Measurements : [537.312, 68072.8, 2.30821, 5.25888]
----
-Label        : 1
-Position     : [70.12, 422.4]
-Measurements : [2191.55, 339292, -0.23023, -0.915324]
----
-Label        : 1
-Position     : [937.318, 423.034]
-Measurements : [695.305, 185857, 1.32909, 0.562202]
----
-Label        : 1
-Position     : [837.256, 423.936]
-Measurements : [925.997, 238192, 1.06973, 0.37556]
----
-Label        : 1
-Position     : [832.613, 425.314]
-Measurements : [875.074, 270150, 1.01821, 0.275156]
----
-Label        : 1
-Position     : [851.894, 425.835]
-Measurements : [832.761, 248294, 0.902637, -0.383226]
----
-Label        : 1
-Position     : [749.64, 425.984]
-Measurements : [948.649, 228955, 0.59698, -0.368217]
----
-Label        : 1
-Position     : [932.488, 425.984]
-Measurements : [900.822, 204635, 0.88108, -0.337504]
----
-Label        : 1
-Position     : [849.053, 426.665]
-Measurements : [897.195, 255519, 0.571282, -0.869123]
----
-Label        : 1
-Position     : [76.264, 428.544]
-Measurements : [2078.04, 544048, -0.674, -0.757565]
----
-Label        : 1
-Position     : [932.095, 428.584]
-Measurements : [975.434, 208625, 0.782362, -0.425091]
----
-Label        : 1
-Position     : [934.89, 428.811]
-Measurements : [1028.9, 241061, 0.446194, -0.928905]
----
-Label        : 1
-Position     : [849.032, 429.056]
-Measurements : [1000.48, 196126, 0.467166, -0.538497]
----
-Label        : 1
-Position     : [77.6479, 429.295]
-Measurements : [1910.85, 706300, -0.350016, -1.35219]
----
-Label        : 1
-Position     : [746.676, 429.75]
-Measurements : [820.053, 132976, 0.335664, -1.09905]
----
-Label        : 1
-Position     : [936.584, 430.08]
-Measurements : [1140.85, 249119, 0.263103, -1.2232]
----
-Label        : 1
-Position     : [928.885, 430.352]
-Measurements : [944.775, 82908.1, 2.11441, 4.56546]
----
-Label        : 1
-Position     : [738.527, 430.575]
-Measurements : [734.847, 139994, 0.397738, -1.51246]
----
-Label        : 1
-Position     : [74.5684, 432.482]
-Measurements : [1827.99, 720857, -0.278373, -1.50905]
----
-Label        : 1
-Position     : [737.864, 435.2]
-Measurements : [1140.51, 105335, -0.643868, 0.011529]
----
-Label        : 1
-Position     : [672.865, 435.417]
-Measurements : [1248.64, 112865, -0.6497, -0.0570891]
----
-Label        : 1
-Position     : [682.741, 436.392]
-Measurements : [898.573, 104883, 0.0898886, -1.54981]
----
-Label        : 1
-Position     : [656.46, 436.438]
-Measurements : [1432.53, 206091, 0.0160037, -0.296242]
----
-Label        : 1
-Position     : [937.347, 437.214]
-Measurements : [1049.51, 321651, 0.84056, -0.508625]
----
-Label        : 1
-Position     : [658.622, 437.368]
-Measurements : [1482.82, 215613, -0.027055, -0.532193]
----
-Label        : 1
-Position     : [640.604, 437.684]
-Measurements : [1082.08, 153135, -0.222277, -0.77468]
----
-Label        : 1
-Position     : [734.722, 437.912]
-Measurements : [1299.21, 171901, 0.266516, -0.402334]
----
-Label        : 1
-Position     : [937.457, 437.972]
-Measurements : [1049.51, 321651, 0.84056, -0.508625]
----
-Label        : 1
-Position     : [939.144, 438.272]
-Measurements : [942.2, 368227, 0.999028, -0.387843]
----
-Label        : 1
-Position     : [672.84, 439.808]
-Measurements : [1341.3, 50934.4, -0.237102, -0.109797]
----
-Label        : 1
-Position     : [731.47, 440.295]
-Measurements : [1543.35, 192591, -0.541051, -0.550148]
----
-Label        : 1
-Position     : [680.008, 440.832]
-Measurements : [1002.36, 81505.6, -0.463097, -0.845906]
----
-Label        : 1
-Position     : [648.203, 441.225]
-Measurements : [1456.05, 76576, -0.301807, -0.307563]
----
-Label        : 1
-Position     : [653.384, 441.344]
-Measurements : [1440.78, 201937, 0.232302, -0.554821]
----
-Label        : 1
-Position     : [663.112, 441.344]
-Measurements : [1519.93, 156782, -0.36463, -0.306364]
----
-Label        : 1
-Position     : [731.351, 441.687]
-Measurements : [1609.03, 156861, -0.587035, -0.233024]
----
-Label        : 1
-Position     : [645.192, 442.368]
-Measurements : [1377.53, 56943.5, -0.341322, -0.169495]
----
-Label        : 1
-Position     : [669.538, 443.666]
-Measurements : [1487.23, 111575, -0.186545, 0.397046]
----
-Label        : 1
-Position     : [735.304, 443.904]
-Measurements : [1497.63, 133602, -0.206007, -0.360222]
----
-Label        : 1
-Position     : [664.384, 444.177]
-Measurements : [1439.95, 157756, -0.514591, -0.0999737]
----
-Label        : 1
-Position     : [110.414, 444.201]
-Measurements : [1226.8, 349611, 0.349913, -1.02005]
----
-Label        : 1
-Position     : [952.316, 444.335]
-Measurements : [1743.24, 866919, -0.137912, -1.48944]
----
-Label        : 1
-Position     : [951.3, 444.617]
-Measurements : [1778.24, 853610, -0.223107, -1.43039]
----
-Label        : 1
-Position     : [676.492, 444.813]
-Measurements : [1270.74, 99444.8, -0.00502241, 0.149872]
----
-Label        : 1
-Position     : [656.548, 445.354]
-Measurements : [1301.54, 217731, 0.0955151, -0.488249]
----
-Label        : 1
-Position     : [947.848, 445.952]
-Measurements : [1813.38, 783301, -0.345384, -1.33575]
----
-Label        : 1
-Position     : [223.344, 446.637]
-Measurements : [1469.86, 350234, 0.777706, -1.01709]
----
-Label        : 1
-Position     : [726.6, 446.976]
-Measurements : [1447.13, 333995, -0.618639, -0.924742]
----
-Label        : 1
-Position     : [639.048, 448]
-Measurements : [1447.78, 182699, -0.258972, -0.39761]
----
-Label        : 1
-Position     : [721.647, 448.221]
-Measurements : [759.222, 356559, 1.21082, -0.230607]
----
-Label        : 1
-Position     : [12.6462, 448.44]
-Measurements : [590.987, 157505, 2.89706, 8.34738]
----
-Label        : 1
-Position     : [107.496, 448.512]
-Measurements : [1167.97, 385140, 0.626117, -1.09912]
----
-Label        : 1
-Position     : [5.97659, 448.64]
-Measurements : [843.677, 310246, 1.22992, 0.562628]
----
-Label        : 1
-Position     : [725.176, 448.99]
-Measurements : [1152.06, 457489, 0.0494439, -1.71895]
----
-Label        : 1
-Position     : [527.264, 449.024]
-Measurements : [1501.23, 430478, 0.240216, -1.26203]
----
-Label        : 1
-Position     : [635.034, 449.472]
-Measurements : [1528.93, 243575, -0.072693, -0.587377]
----
-Label        : 1
-Position     : [126.56, 449.935]
-Measurements : [1001.15, 259217, 0.90875, 0.120479]
----
-Label        : 1
-Position     : [136.162, 450.295]
-Measurements : [1408.87, 289870, 0.156769, -0.651482]
----
-Label        : 1
-Position     : [642.2, 450.737]
-Measurements : [1339.4, 246355, -0.00699209, -1.06775]
----
-Label        : 1
-Position     : [134.958, 451.037]
-Measurements : [1556.1, 207411, 0.488355, -0.699886]
----
-Label        : 1
-Position     : [532.103, 451.064]
-Measurements : [938.794, 438279, 1.3906, 0.723337]
----
-Label        : 1
-Position     : [8.168, 451.072]
-Measurements : [891.489, 271182, 1.42058, 0.888739]
----
-Label        : 1
-Position     : [132.373, 451.389]
-Measurements : [1369.93, 246994, 0.291618, -0.402372]
----
-Label        : 1
-Position     : [528.146, 451.419]
-Measurements : [1457.72, 515785, 0.180012, -1.46798]
----
-Label        : 1
-Position     : [227.304, 451.584]
-Measurements : [1723.93, 415019, -0.421554, -1.04184]
----
-Label        : 1
-Position     : [172.324, 451.762]
-Measurements : [1071.59, 153993, 0.0261246, -1.32803]
----
-Label        : 1
-Position     : [159.783, 451.861]
-Measurements : [1174.08, 384040, 0.389188, -1.10244]
----
-Label        : 1
-Position     : [117.508, 452.061]
-Measurements : [1065.74, 455476, 0.451643, -1.24023]
----
-Label        : 1
-Position     : [120.296, 452.096]
-Measurements : [1142.42, 390763, 0.390965, -1.10479]
----
-Label        : 1
-Position     : [630.835, 452.729]
-Measurements : [1712.56, 204054, -0.083229, -0.749053]
----
-Label        : 1
-Position     : [160.598, 452.779]
-Measurements : [1340.07, 411914, 0.162113, -1.07011]
----
-Label        : 1
-Position     : [103.578, 452.943]
-Measurements : [863.427, 322920, 1.41546, 0.647504]
----
-Label        : 1
-Position     : [130.536, 453.12]
-Measurements : [1207.1, 343233, 0.392211, -0.873326]
----
-Label        : 1
-Position     : [632.392, 453.12]
-Measurements : [1630.88, 310333, -0.208692, -0.798324]
----
-Label        : 1
-Position     : [137.192, 453.632]
-Measurements : [1410.34, 390508, 0.0476933, -1.17026]
----
-Label        : 1
-Position     : [165.352, 454.144]
-Measurements : [1377.33, 358512, 0.106841, -0.794038]
----
-Label        : 1
-Position     : [159.72, 454.656]
-Measurements : [1135.01, 412079, 0.458963, -1.18434]
----
-Label        : 1
-Position     : [627.266, 454.69]
-Measurements : [1813.18, 123260, -0.451422, 0.66334]
----
-Label        : 1
-Position     : [119.219, 454.966]
-Measurements : [1070.43, 393972, 0.613021, -0.87558]
----
-Label        : 1
-Position     : [632.88, 454.968]
-Measurements : [1620.44, 333709, -0.26508, -0.871962]
----
-Label        : 1
-Position     : [170.984, 455.168]
-Measurements : [1154.49, 335000, 0.541179, -0.5096]
----
-Label        : 1
-Position     : [230.572, 455.458]
-Measurements : [1297.81, 720899, 0.302012, -1.66048]
----
-Label        : 1
-Position     : [524.704, 455.68]
-Measurements : [1461.43, 275397, -0.0221619, -1.24211]
----
-Label        : 1
-Position     : [733.529, 456.156]
-Measurements : [985.235, 354557, 1.02509, -0.035532]
----
-Label        : 1
-Position     : [178.399, 456.568]
-Measurements : [901.986, 90239.4, 0.228443, -1.02427]
----
-Label        : 1
-Position     : [168.29, 456.615]
-Measurements : [1219.06, 354372, 0.442171, -0.583136]
----
-Label        : 1
-Position     : [523.599, 456.697]
-Measurements : [1456.96, 276360, -0.184469, -1.43522]
----
-Label        : 1
-Position     : [625.736, 456.704]
-Measurements : [1781.29, 137156, -0.409457, 0.828819]
----
-Label        : 1
-Position     : [158.219, 456.753]
-Measurements : [908.059, 332555, 1.08846, -0.280884]
----
-Label        : 1
-Position     : [167.416, 456.84]
-Measurements : [1223.36, 356828, 0.394666, -0.591263]
----
-Label        : 1
-Position     : [201.192, 457.216]
-Measurements : [933.378, 107552, 0.155343, -1.21194]
----
-Label        : 1
-Position     : [273.116, 457.427]
-Measurements : [848.93, 83433.7, 0.295688, -1.00214]
----
-Label        : 1
-Position     : [629.339, 457.918]
-Measurements : [1686.46, 275729, -0.613071, -0.069262]
----
-Label        : 1
-Position     : [180.712, 458.24]
-Measurements : [876.781, 102409, 0.452063, -1.0902]
----
-Label        : 1
-Position     : [735.922, 459.682]
-Measurements : [1071.95, 321085, 0.857073, -0.0962083]
----
-Label        : 1
-Position     : [526.677, 460.001]
-Measurements : [966.999, 314004, 0.947694, -0.537469]
----
-Label        : 1
-Position     : [205.748, 460.103]
-Measurements : [642.427, 130680, 1.36858, 0.481237]
----
-Label        : 1
-Position     : [625.038, 460.253]
-Measurements : [1676.56, 259427, -0.406202, -0.472816]
----
-Label        : 1
-Position     : [734.28, 460.8]
-Measurements : [1112.77, 301639, 0.829453, -0.103574]
----
-Label        : 1
-Position     : [611.928, 461.373]
-Measurements : [2567.36, 214202, -0.566806, -0.227441]
----
-Label        : 1
-Position     : [271.776, 461.824]
-Measurements : [759.403, 126917, 0.834422, -0.716463]
----
-Label        : 1
-Position     : [518.56, 461.824]
-Measurements : [1307.04, 323766, 0.306164, -1.28303]
----
-Label        : 1
-Position     : [620.616, 461.824]
-Measurements : [2111.78, 217234, -0.248365, -0.0132417]
----
-Label        : 1
-Position     : [659.702, 462.007]
-Measurements : [1248.87, 212375, 0.401319, -0.193886]
----
-Label        : 1
-Position     : [199.358, 462.094]
-Measurements : [748.954, 113780, 0.730454, -0.77978]
----
-Label        : 1
-Position     : [649.759, 462.286]
-Measurements : [1453.68, 237955, 0.186743, -0.814412]
----
-Label        : 1
-Position     : [183.715, 462.562]
-Measurements : [759.815, 116531, 0.787376, -0.591159]
----
-Label        : 1
-Position     : [516.198, 462.776]
-Measurements : [1390.06, 307902, 0.0886769, -1.32882]
----
-Label        : 1
-Position     : [624.499, 462.86]
-Measurements : [1735.56, 265981, -0.143995, -0.538694]
----
-Label        : 1
-Position     : [672.438, 463.223]
-Measurements : [1531.3, 222375, -0.446837, -0.585857]
----
-Label        : 1
-Position     : [667.841, 463.359]
-Measurements : [1589.94, 159504, -0.554411, 0.397613]
----
-Label        : 1
-Position     : [612.936, 463.36]
-Measurements : [2598.89, 156365, -0.283363, -0.214999]
----
-Label        : 1
-Position     : [390.699, 463.9]
-Measurements : [953.982, 240329, 0.61246, -0.859345]
----
-Label        : 1
-Position     : [523.006, 464.194]
-Measurements : [841.746, 288683, 1.57323, 1.47777]
----
-Label        : 1
-Position     : [515.643, 464.224]
-Measurements : [1451.89, 324658, -0.165424, -1.29347]
----
-Label        : 1
-Position     : [281.805, 464.821]
-Measurements : [928.544, 152499, 1.37436, 1.32432]
----
-Label        : 1
-Position     : [653.937, 465.168]
-Measurements : [1389.95, 285490, 0.214694, -0.895179]
----
-Label        : 1
-Position     : [653.384, 465.408]
-Measurements : [1389.95, 285490, 0.214694, -0.895179]
----
-Label        : 1
-Position     : [274.286, 465.806]
-Measurements : [857.849, 226369, 1.49462, 1.87932]
----
-Label        : 1
-Position     : [287.268, 465.866]
-Measurements : [1078.32, 153800, 0.57181, -0.646066]
----
-Label        : 1
-Position     : [611.021, 465.919]
-Measurements : [2485.31, 306380, -0.760804, 0.243711]
----
-Label        : 1
-Position     : [667.72, 465.92]
-Measurements : [1564.51, 137936, -0.497085, 0.0519529]
----
-Label        : 1
-Position     : [674.725, 466.001]
-Measurements : [1530.88, 140729, -0.636649, -0.152479]
----
-Label        : 1
-Position     : [678.056, 466.002]
-Measurements : [1532.06, 83942.1, -0.180043, -0.455521]
----
-Label        : 1
-Position     : [276.016, 466.205]
-Measurements : [952.3, 291512, 1.1692, 0.491303]
----
-Label        : 1
-Position     : [384.456, 466.368]
-Measurements : [1200, 607760, 0.80133, -0.41372]
----
-Label        : 1
-Position     : [386.464, 466.432]
-Measurements : [1125.23, 479432, 1.04214, 0.507311]
----
-Label        : 1
-Position     : [513.44, 466.432]
-Measurements : [1369.01, 301165, -0.0199302, -1.17659]
----
-Label        : 1
-Position     : [661.064, 466.432]
-Measurements : [1260.88, 161930, -0.404024, -1.03649]
----
-Label        : 1
-Position     : [648.776, 466.944]
-Measurements : [1512.77, 152713, -0.139271, -0.353782]
----
-Label        : 1
-Position     : [600.963, 466.963]
-Measurements : [1834.42, 313683, -0.532998, -0.841125]
----
-Label        : 1
-Position     : [684.599, 467.37]
-Measurements : [1694.71, 253093, 0.878805, 0.87761]
----
-Label        : 1
-Position     : [673.864, 467.968]
-Measurements : [1509.78, 182834, -0.878857, -0.121597]
----
-Label        : 1
-Position     : [509.795, 468.69]
-Measurements : [1027.48, 320735, 0.417012, -1.27672]
----
-Label        : 1
-Position     : [286.624, 468.992]
-Measurements : [1206.55, 227639, 0.507718, -0.884645]
----
-Label        : 1
-Position     : [681.544, 468.992]
-Measurements : [1587.81, 80805.8, -0.0797492, -0.512911]
----
-Label        : 1
-Position     : [691.784, 468.992]
-Measurements : [1775.09, 688022, 0.0733174, -1.31853]
----
-Label        : 1
-Position     : [295.159, 469.076]
-Measurements : [1028.37, 293475, 0.537221, -0.974873]
----
-Label        : 1
-Position     : [653.331, 469.441]
-Measurements : [1216.76, 326841, 0.399981, -1.069]
----
-Label        : 1
-Position     : [279.456, 470.016]
-Measurements : [1403.17, 443849, 0.320208, -1.12955]
----
-Label        : 1
-Position     : [696.435, 470.087]
-Measurements : [1156.01, 810201, 0.965591, -0.669568]
----
-Label        : 1
-Position     : [652.34, 470.298]
-Measurements : [1258.21, 328927, 0.285839, -1.17462]
----
-Label        : 1
-Position     : [688.477, 470.455]
-Measurements : [2075.94, 403218, -0.0546087, -0.871039]
----
-Label        : 1
-Position     : [291.232, 470.528]
-Measurements : [1168.67, 287214, 0.341977, -1.23997]
----
-Label        : 1
-Position     : [605.768, 470.528]
-Measurements : [2008.97, 370555, -0.237468, -1.17684]
----
-Label        : 1
-Position     : [946.824, 470.528]
-Measurements : [1182.53, 452263, 0.410711, -1.08387]
----
-Label        : 1
-Position     : [979.08, 470.528]
-Measurements : [1124.51, 172228, 0.00631101, -0.495241]
----
-Label        : 1
-Position     : [663.943, 470.916]
-Measurements : [980.862, 272147, 0.507777, -1.19139]
----
-Label        : 1
-Position     : [278.716, 470.972]
-Measurements : [1345.94, 451075, 0.424035, -1.01057]
----
-Label        : 1
-Position     : [646.216, 471.552]
-Measurements : [1416.11, 135173, -0.516086, 0.147008]
----
-Label        : 1
-Position     : [287.53, 471.65]
-Measurements : [1266.02, 291761, 0.181795, -1.20823]
----
-Label        : 1
-Position     : [305.483, 472.232]
-Measurements : [851.741, 145638, 0.614204, -0.549991]
----
-Label        : 1
-Position     : [942.072, 472.475]
-Measurements : [1080.61, 259532, 0.906377, 0.00731661]
----
-Label        : 1
-Position     : [595.016, 472.576]
-Measurements : [1733.34, 258212, -0.923884, 0.41868]
----
-Label        : 1
-Position     : [674.557, 472.772]
-Measurements : [1178.34, 323354, -0.0910261, -1.57363]
----
-Label        : 1
-Position     : [603.635, 473.302]
-Measurements : [1828.64, 345464, -0.149438, -1.21791]
----
-Label        : 1
-Position     : [596.698, 473.35]
-Measurements : [1801.51, 234249, -0.893691, 0.772139]
----
-Label        : 1
-Position     : [302.496, 473.6]
-Measurements : [770.137, 141844, 0.831649, -0.042973]
----
-Label        : 1
-Position     : [975.604, 473.764]
-Measurements : [734.778, 229011, 1.4425, 0.677822]
----
-Label        : 1
-Position     : [945.652, 474.193]
-Measurements : [1086.58, 408459, 0.865398, -0.512015]
----
-Label        : 1
-Position     : [393.54, 474.219]
-Measurements : [889.456, 175725, 0.398089, -1.348]
----
-Label        : 1
-Position     : [595.621, 474.305]
-Measurements : [1634.54, 332590, -0.780356, -0.443124]
----
-Label        : 1
-Position     : [642.405, 474.507]
-Measurements : [1119.84, 193572, 0.0912902, -1.22246]
----
-Label        : 1
-Position     : [984.041, 474.739]
-Measurements : [1030.24, 67486.9, 1.69136, 5.19346]
----
-Label        : 1
-Position     : [640.473, 475.355]
-Measurements : [1203.43, 284781, 0.363382, -0.937126]
----
-Label        : 1
-Position     : [645.391, 475.639]
-Measurements : [1151.9, 217534, 0.0959684, -1.21377]
----
-Label        : 1
-Position     : [301.851, 477.024]
-Measurements : [618.76, 127621, 1.36534, 0.804601]
----
-Label        : 1
-Position     : [585.007, 477.305]
-Measurements : [1752.69, 854804, -0.271332, -1.66488]
----
-Label        : 1
-Position     : [394.656, 477.696]
-Measurements : [962.181, 163602, 0.16848, -1.41959]
----
-Label        : 1
-Position     : [638.536, 477.696]
-Measurements : [1442.73, 359236, -0.160607, -1.18064]
----
-Label        : 1
-Position     : [637.067, 478.758]
-Measurements : [1573.2, 297211, -0.494839, -0.696645]
----
-Label        : 1
-Position     : [394.519, 478.865]
-Measurements : [949.41, 168507, 0.222663, -1.45861]
----
-Label        : 1
-Position     : [630.498, 479.245]
-Measurements : [1458.34, 210081, -0.662255, -0.293045]
----
-Label        : 1
-Position     : [951.158, 479.53]
-Measurements : [937.038, 530658, 1.27414, 0.101329]
----
-Label        : 1
-Position     : [641.352, 480.053]
-Measurements : [1197.5, 391696, 0.488033, -1.12034]
----
-Label        : 1
-Position     : [731.162, 480.868]
-Measurements : [1263.68, 481731, -0.0628712, -1.36047]
----
-Label        : 1
-Position     : [586.312, 482.304]
-Measurements : [2034.1, 656355, -0.712533, -0.891031]
----
-Label        : 1
-Position     : [632.904, 482.304]
-Measurements : [1578.34, 145295, -0.733559, 0.759693]
----
-Label        : 1
-Position     : [735.304, 482.304]
-Measurements : [1440.9, 344893, -0.171774, -1.07776]
----
-Label        : 1
-Position     : [734.321, 482.861]
-Measurements : [1441.99, 353070, -0.218023, -1.07339]
----
-Label        : 1
-Position     : [585.111, 483.776]
-Measurements : [2245.78, 457103, -0.922618, 0.179196]
----
-Label        : 1
-Position     : [947.848, 484.352]
-Measurements : [1574.49, 715859, -0.0598153, -1.51141]
----
-Label        : 1
-Position     : [8.51251, 485.431]
-Measurements : [1805.83, 466518, -0.142368, -1.41604]
----
-Label        : 1
-Position     : [12.5016, 485.884]
-Measurements : [1478.71, 579231, 0.23233, -1.4544]
----
-Label        : 1
-Position     : [10.216, 486.4]
-Measurements : [1634.46, 592205, 0.0274422, -1.53076]
----
-Label        : 1
-Position     : [499.616, 486.4]
-Measurements : [1222.39, 408170, 1.03882, 0.510449]
----
-Label        : 1
-Position     : [579.144, 486.912]
-Measurements : [2287.17, 292801, -0.0577149, -0.856645]
----
-Label        : 1
-Position     : [583.259, 488.644]
-Measurements : [2202.24, 423646, -0.324615, -0.814626]
----
-Label        : 1
-Position     : [949.453, 488.933]
-Measurements : [1459.24, 867769, 0.210254, -1.74431]
----
-Label        : 1
-Position     : [503.87, 489.373]
-Measurements : [1535.91, 816763, 0.397311, -1.28715]
----
-Label        : 1
-Position     : [576.907, 489.936]
-Measurements : [2092.3, 380156, 0.0469166, -0.749972]
----
-Label        : 1
-Position     : [501.263, 490.444]
-Measurements : [1553.88, 831211, 0.334438, -1.26877]
----
-Label        : 1
-Position     : [623.688, 490.496]
-Measurements : [1385.06, 196047, -0.0627731, -0.31764]
----
-Label        : 1
-Position     : [623.287, 490.496]
-Measurements : [1385.06, 196047, -0.0627731, -0.31764]
----
-Label        : 1
-Position     : [576.157, 490.778]
-Measurements : [2061.91, 415334, -0.00792183, -0.74725]
----
-Label        : 1
-Position     : [572.488, 492.544]
-Measurements : [2011.88, 208174, -0.153713, -0.797107]
----
-Label        : 1
-Position     : [732.061, 492.682]
-Measurements : [1602.18, 476941, -0.00997003, -1.05825]
----
-Label        : 1
-Position     : [618.056, 493.056]
-Measurements : [1788.18, 306689, -0.0969786, -0.420362]
----
-Label        : 1
-Position     : [734.28, 493.056]
-Measurements : [1634.44, 455847, -0.015764, -1.15104]
----
-Label        : 1
-Position     : [603.847, 494.106]
-Measurements : [1298.54, 224126, -0.259836, -1.18882]
----
-Label        : 1
-Position     : [575.65, 494.291]
-Measurements : [1782.06, 330329, -0.130985, -1.03466]
----
-Label        : 1
-Position     : [729.907, 494.373]
-Measurements : [1390.16, 495869, 0.302212, -1.06107]
----
-Label        : 1
-Position     : [611.4, 494.592]
-Measurements : [1885.62, 259295, 0.309637, -0.253785]
----
-Label        : 1
-Position     : [622.606, 494.642]
-Measurements : [1490.11, 334726, 0.188528, -0.605431]
----
-Label        : 1
-Position     : [609.133, 494.79]
-Measurements : [1800.15, 307297, 0.0990803, 0.0708499]
----
-Label        : 1
-Position     : [567.368, 495.104]
-Measurements : [2071.38, 169363, -0.596077, 0.0499229]
----
-Label        : 1
-Position     : [626.27, 495.425]
-Measurements : [906.501, 202015, 0.58991, -1.14779]
----
-Label        : 1
-Position     : [615.016, 496.026]
-Measurements : [2092.95, 284510, -0.48603, -0.207901]
----
-Label        : 1
-Position     : [605.256, 496.64]
-Measurements : [1603.12, 156612, -0.369224, -0.457503]
----
-Label        : 1
-Position     : [563.805, 496.676]
-Measurements : [1945.84, 180293, -0.344369, -0.709229]
----
-Label        : 1
-Position     : [571.648, 497.294]
-Measurements : [1779.53, 314936, -0.102267, -0.873214]
----
-Label        : 1
-Position     : [486.816, 497.664]
-Measurements : [1242.64, 518903, 0.413495, -1.22599]
----
-Label        : 1
-Position     : [618.792, 498.021]
-Measurements : [1743.46, 597174, -0.165338, -1.41454]
----
-Label        : 1
-Position     : [568.863, 498.375]
-Measurements : [1800.74, 318115, -0.2904, -0.817692]
----
-Label        : 1
-Position     : [616.193, 498.896]
-Measurements : [1975.23, 473384, -0.484713, -0.981863]
----
-Label        : 1
-Position     : [561.736, 499.2]
-Measurements : [2045.06, 243167, -0.346029, -0.381696]
----
-Label        : 1
-Position     : [486.047, 500.458]
-Measurements : [1458.84, 576927, -0.040075, -1.43101]
----
-Label        : 1
-Position     : [159.843, 500.629]
-Measurements : [1140.23, 393318, 0.157327, -1.44197]
----
-Label        : 1
-Position     : [483.806, 501.158]
-Measurements : [1033.09, 541746, 0.559267, -1.25066]
----
-Label        : 1
-Position     : [560.411, 502.687]
-Measurements : [2057.6, 381052, -0.540689, -0.812765]
----
-Label        : 1
-Position     : [158.184, 503.416]
-Measurements : [1210.1, 336723, 0.189294, -1.42545]
----
-Label        : 1
-Position     : [157.188, 503.548]
-Measurements : [1223.15, 338510, 0.135225, -1.44452]
----
-Label        : 1
-Position     : [589.887, 507.44]
-Measurements : [1018.12, 368438, 0.551036, -1.37301]
----
-Label        : 1
-Position     : [586.888, 507.744]
-Measurements : [1334.74, 371569, 8.25283e-05, -1.29959]
----
-Label        : 1
-Position     : [547.464, 510.816]
-Measurements : [814.369, 223260, 1.06843, -0.165695]
----
-Label        : 1
-Position     : [584.15, 511.687]
-Measurements : [1687.62, 311475, -0.320604, -0.882119]
----
-Label        : 1
-Position     : [104.747, 511.999]
-Measurements : [1525.06, 391382, -0.381421, -1.1031]
----
-Label        : 1
-Position     : [590.953, 512.092]
-Measurements : [914.364, 335495, 0.938643, -0.64015]
----
-Label        : 1
-Position     : [106.456, 512.57]
-Measurements : [1743.35, 288541, -0.483654, -0.858208]
----
-Label        : 1
-Position     : [581.768, 512.864]
-Measurements : [1607.66, 357197, -0.180509, -1.06948]
----
-Label        : 1
-Position     : [552.257, 512.972]
-Measurements : [945.685, 241239, 1.12092, 1.00038]
----
-Label        : 1
-Position     : [121.482, 513.271]
-Measurements : [1005.89, 316069, 0.404876, -1.07252]
----
-Label        : 1
-Position     : [548.961, 513.526]
-Measurements : [894.349, 216036, 0.758409, -0.657154]
----
-Label        : 1
-Position     : [689.131, 514.299]
-Measurements : [1452.15, 587562, 0.242572, -1.3598]
----
-Label        : 1
-Position     : [356.936, 514.651]
-Measurements : [484.692, 28252.9, 1.48956, 1.46586]
----
-Label        : 1
-Position     : [938.241, 515.137]
-Measurements : [1253.94, 661102, 0.320473, -1.27212]
----
-Label        : 1
-Position     : [96.3726, 515.228]
-Measurements : [1099, 329868, 0.0967388, -1.48977]
----
-Label        : 1
-Position     : [583.944, 516.097]
-Measurements : [1250.48, 528501, 0.63992, -1.22281]
----
-Label        : 1
-Position     : [689.146, 516.399]
-Measurements : [1480.8, 583600, 0.238853, -1.28642]
----
-Label        : 1
-Position     : [575.112, 516.448]
-Measurements : [1470.05, 338931, -0.235598, -1.41402]
----
-Label        : 1
-Position     : [104.424, 516.728]
-Measurements : [1812.31, 242021, -0.118784, -1.00816]
----
-Label        : 1
-Position     : [141.104, 516.996]
-Measurements : [903.29, 272847, 0.848775, -0.00361943]
----
-Label        : 1
-Position     : [115.573, 517.463]
-Measurements : [1559.22, 330148, -0.253316, -0.737935]
----
-Label        : 1
-Position     : [685.886, 517.899]
-Measurements : [2086.71, 401218, -0.515338, -0.744113]
----
-Label        : 1
-Position     : [571.016, 517.984]
-Measurements : [1774.74, 199647, -1.0021, 0.287335]
----
-Label        : 1
-Position     : [98.792, 518.264]
-Measurements : [1252.79, 377801, 0.0753794, -1.02657]
----
-Label        : 1
-Position     : [111.08, 518.264]
-Measurements : [1541.59, 286974, 0.201137, -0.922379]
----
-Label        : 1
-Position     : [122.344, 518.264]
-Measurements : [1257.91, 325551, -0.0265268, -1.46217]
----
-Label        : 1
-Position     : [96.5051, 518.298]
-Measurements : [1002.74, 321256, 0.344161, -1.38253]
----
-Label        : 1
-Position     : [113.021, 518.435]
-Measurements : [1499.71, 270976, 0.198964, -0.59934]
----
-Label        : 1
-Position     : [560.923, 518.462]
-Measurements : [1441.46, 205320, 0.0966524, -0.866899]
----
-Label        : 1
-Position     : [936.288, 518.872]
-Measurements : [1437.21, 480694, 0.251076, -1.00875]
----
-Label        : 1
-Position     : [688.264, 519.008]
-Measurements : [1620.6, 483499, -0.105316, -1.08265]
----
-Label        : 1
-Position     : [570.85, 519.23]
-Measurements : [1756.46, 313467, -0.75002, -0.419572]
----
-Label        : 1
-Position     : [355.264, 519.32]
-Measurements : [503.265, 25277, 1.48944, 1.75196]
----
-Label        : 1
-Position     : [575.022, 519.364]
-Measurements : [1277.05, 407981, 0.283681, -1.59171]
----
-Label        : 1
-Position     : [113.401, 519.512]
-Measurements : [1459.1, 249996, 0.430455, -0.532729]
----
-Label        : 1
-Position     : [674.083, 519.722]
-Measurements : [2350.35, 467233, 0.128373, -0.580424]
----
-Label        : 1
-Position     : [116.712, 519.8]
-Measurements : [1630.29, 236205, -0.106491, -0.682769]
----
-Label        : 1
-Position     : [121.085, 519.846]
-Measurements : [1371.5, 328759, -0.174011, -1.29959]
----
-Label        : 1
-Position     : [574.771, 519.928]
-Measurements : [1365.02, 398939, 0.0656178, -1.66324]
----
-Label        : 1
-Position     : [675.446, 520.461]
-Measurements : [2364.69, 420460, 0.0850419, -0.324506]
----
-Label        : 1
-Position     : [681.096, 520.544]
-Measurements : [2077.24, 277552, -0.133201, -0.951526]
----
-Label        : 1
-Position     : [119.524, 521.265]
-Measurements : [1547.95, 334549, -0.173422, -1.1656]
----
-Label        : 1
-Position     : [671.88, 521.568]
-Measurements : [2196.3, 643005, 0.129993, -1.06851]
----
-Label        : 1
-Position     : [569.104, 521.638]
-Measurements : [1644.6, 400594, -0.341815, -1.17246]
----
-Label        : 1
-Position     : [139.24, 521.848]
-Measurements : [1330.17, 212572, 0.565509, -0.446046]
----
-Label        : 1
-Position     : [358.245, 522.281]
-Measurements : [484.339, 20957.1, 1.95807, 3.62854]
----
-Label        : 1
-Position     : [575.842, 522.293]
-Measurements : [1018.99, 397500, 0.960803, -0.702018]
----
-Label        : 1
-Position     : [932.217, 522.472]
-Measurements : [1170.02, 516493, 0.668956, -0.663862]
----
-Label        : 1
-Position     : [564.872, 522.592]
-Measurements : [1806.28, 211491, -0.39852, -0.0913888]
----
-Label        : 1
-Position     : [82.6851, 522.857]
-Measurements : [1113.26, 218590, 0.076288, -1.28177]
----
-Label        : 1
-Position     : [82.408, 522.872]
-Measurements : [1113.26, 218590, 0.076288, -1.28177]
----
-Label        : 1
-Position     : [73.2248, 523.267]
-Measurements : [1424.03, 296586, -0.29191, -0.568026]
----
-Label        : 1
-Position     : [685.084, 523.582]
-Measurements : [1843.59, 518391, -0.108008, -1.2111]
----
-Label        : 1
-Position     : [668.946, 523.587]
-Measurements : [1680.36, 608905, 0.627474, -0.892091]
----
-Label        : 1
-Position     : [666.248, 524.64]
-Measurements : [1291.07, 555317, 1.14039, 0.50806]
----
-Label        : 1
-Position     : [137.199, 524.875]
-Measurements : [1281.35, 240553, 0.277879, -0.246804]
----
-Label        : 1
-Position     : [555, 524.933]
-Measurements : [1755.88, 349913, -0.0863422, -0.396929]
----
-Label        : 1
-Position     : [561.8, 525.664]
-Measurements : [1811.89, 270634, -0.40539, -0.0551912]
----
-Label        : 1
-Position     : [74.216, 525.944]
-Measurements : [1402.89, 270133, -0.103743, -0.461858]
----
-Label        : 1
-Position     : [76.8979, 526.203]
-Measurements : [1397.18, 224316, 0.126265, -0.257325]
----
-Label        : 1
-Position     : [145.384, 526.456]
-Measurements : [1591.45, 574618, 0.269258, -1.27814]
----
-Label        : 1
-Position     : [555.289, 526.476]
-Measurements : [1992.2, 316911, -0.10351, -0.286562]
----
-Label        : 1
-Position     : [552.298, 526.695]
-Measurements : [2046.1, 402442, -0.394638, -0.639538]
----
-Label        : 1
-Position     : [668.937, 527.078]
-Measurements : [1372.07, 450753, 0.543306, -0.851504]
----
-Label        : 1
-Position     : [79.7832, 527.152]
-Measurements : [1259.84, 186494, 0.798769, 0.262099]
----
-Label        : 1
-Position     : [143.417, 527.593]
-Measurements : [1671.51, 518053, 0.173787, -1.27215]
----
-Label        : 1
-Position     : [561.084, 528.195]
-Measurements : [1596.5, 460391, -0.0946448, -1.12658]
----
-Label        : 1
-Position     : [640.274, 528.224]
-Measurements : [998.217, 148805, 0.513197, -0.15954]
----
-Label        : 1
-Position     : [562.383, 528.385]
-Measurements : [1532.77, 485423, -0.00953177, -1.26468]
----
-Label        : 1
-Position     : [552.584, 528.736]
-Measurements : [2238.68, 247271, -0.482622, 0.00651976]
----
-Label        : 1
-Position     : [555.656, 528.736]
-Measurements : [2080.56, 306242, -0.367825, 0.026926]
----
-Label        : 1
-Position     : [143.943, 529.013]
-Measurements : [1456.08, 638703, 0.444392, -1.24277]
----
-Label        : 1
-Position     : [548.488, 530.784]
-Measurements : [1994.98, 443247, -0.199228, -1.0123]
----
-Label        : 1
-Position     : [549.047, 530.799]
-Measurements : [2049.62, 413702, -0.410612, -0.646898]
----
-Label        : 1
-Position     : [552.159, 531.462]
-Measurements : [1991.5, 603721, -0.622387, -0.859583]
----
-Label        : 1
-Position     : [158.215, 531.896]
-Measurements : [1517.91, 573203, 0.035411, -1.40464]
----
-Label        : 1
-Position     : [859.597, 532.098]
-Measurements : [897.279, 397788, 1.08328, -0.132882]
----
-Label        : 1
-Position     : [856.416, 532.184]
-Measurements : [1075.53, 457210, 0.670769, -1.10685]
----
-Label        : 1
-Position     : [650.888, 532.32]
-Measurements : [1206.69, 211731, -0.230262, -1.15974]
----
-Label        : 1
-Position     : [642.696, 532.832]
-Measurements : [1109.7, 101368, -0.0213611, -1.14778]
----
-Label        : 1
-Position     : [559.738, 532.941]
-Measurements : [1306.38, 586416, 0.431628, -1.36615]
----
-Label        : 1
-Position     : [857.559, 533.069]
-Measurements : [993.012, 443832, 0.896378, -0.736828]
----
-Label        : 1
-Position     : [155.112, 533.112]
-Measurements : [1708.82, 409969, -0.266895, -0.903948]
----
-Label        : 1
-Position     : [632.794, 533.126]
-Measurements : [1260.26, 164790, -0.0556231, -0.775306]
----
-Label        : 1
-Position     : [155.888, 534.121]
-Measurements : [1713.74, 370551, -0.212855, -0.781483]
----
-Label        : 1
-Position     : [653.29, 534.833]
-Measurements : [962.62, 266794, 0.507258, -1.28953]
----
-Label        : 1
-Position     : [652.171, 535.158]
-Measurements : [965.637, 220720, 0.468729, -1.27748]
----
-Label        : 1
-Position     : [634.504, 535.392]
-Measurements : [1224.84, 140926, 0.172546, -0.799324]
----
-Label        : 1
-Position     : [629.701, 535.862]
-Measurements : [1250.58, 117243, 0.0808624, -0.748968]
----
-Label        : 1
-Position     : [638.105, 536.373]
-Measurements : [1177.01, 152568, 0.217958, -0.751288]
----
-Label        : 1
-Position     : [845.715, 536.895]
-Measurements : [972.932, 247036, 0.664486, -0.780894]
----
-Label        : 1
-Position     : [630.584, 537.125]
-Measurements : [1221.53, 145059, 0.291194, -0.854623]
----
-Label        : 1
-Position     : [626.536, 537.176]
-Measurements : [1151.67, 111131, 0.261392, -0.655329]
----
-Label        : 1
-Position     : [154.961, 537.412]
-Measurements : [1580.2, 286988, 0.0357721, -0.632949]
----
-Label        : 1
-Position     : [159.208, 537.72]
-Measurements : [1307.54, 402378, 0.336769, -0.940364]
----
-Label        : 1
-Position     : [739.604, 538.335]
-Measurements : [1008.33, 313859, 0.109282, -1.58644]
----
-Label        : 1
-Position     : [628.36, 538.464]
-Measurements : [1161.36, 122119, 0.38234, -0.75588]
----
-Label        : 1
-Position     : [685.754, 538.863]
-Measurements : [1286.44, 209253, 0.0299302, -0.67024]
----
-Label        : 1
-Position     : [969.568, 539.352]
-Measurements : [1770.55, 329781, -0.214014, -0.797349]
----
-Label        : 1
-Position     : [154.99, 539.973]
-Measurements : [1426.38, 313698, -0.00452222, -1.11009]
----
-Label        : 1
-Position     : [893.28, 540.376]
-Measurements : [1501.89, 665187, 0.164338, -1.44047]
----
-Label        : 1
-Position     : [968.573, 540.837]
-Measurements : [1664.59, 483957, -0.386499, -0.964287]
----
-Label        : 1
-Position     : [850.272, 541.4]
-Measurements : [1215.94, 427054, 0.201133, -1.33611]
----
-Label        : 1
-Position     : [619.656, 541.536]
-Measurements : [1369.65, 227500, 0.62844, 0.175853]
----
-Label        : 1
-Position     : [740.488, 541.536]
-Measurements : [1158.46, 213541, -0.0769387, -1.35516]
----
-Label        : 1
-Position     : [738.541, 541.554]
-Measurements : [1094.43, 228086, 0.0288894, -1.34753]
----
-Label        : 1
-Position     : [620.565, 541.692]
-Measurements : [1301.34, 203838, 0.601099, 0.695094]
----
-Label        : 1
-Position     : [919.392, 541.912]
-Measurements : [1076.82, 127660, -0.465827, -0.285083]
----
-Label        : 1
-Position     : [683.745, 542.12]
-Measurements : [1400.62, 141217, 0.263412, -0.51923]
----
-Label        : 1
-Position     : [847.487, 542.132]
-Measurements : [1152.36, 429045, 0.280138, -1.31061]
----
-Label        : 1
-Position     : [968.737, 542.16]
-Measurements : [1560.14, 540243, -0.191867, -1.24116]
----
-Label        : 1
-Position     : [693.48, 542.19]
-Measurements : [966.508, 423764, 0.948472, -0.766761]
----
-Label        : 1
-Position     : [916.057, 543.093]
-Measurements : [1316.77, 71402.8, 0.0575627, 0.692385]
----
-Label        : 1
-Position     : [897.54, 543.251]
-Measurements : [733.187, 484756, 2.10572, 3.03883]
----
-Label        : 1
-Position     : [689.288, 543.584]
-Measurements : [1394.32, 344312, -0.167991, -1.38606]
----
-Label        : 1
-Position     : [613.512, 544.096]
-Measurements : [1888.24, 314658, -0.583711, -0.672326]
----
-Label        : 1
-Position     : [619.007, 544.412]
-Measurements : [1341.67, 276825, 0.49454, -0.3906]
----
-Label        : 1
-Position     : [68.6158, 545.038]
-Measurements : [988.67, 256931, 1.21836, 0.677322]
----
-Label        : 1
-Position     : [892.053, 545.25]
-Measurements : [996.108, 714571, 1.17468, -0.247991]
----
-Label        : 1
-Position     : [602.542, 545.255]
-Measurements : [1098.34, 463152, 0.443857, -1.44794]
----
-Label        : 1
-Position     : [372.869, 545.29]
-Measurements : [647.698, 162205, 1.54662, 1.56244]
----
-Label        : 1
-Position     : [368.064, 545.432]
-Measurements : [889.225, 194181, 0.667855, -0.706854]
----
-Label        : 1
-Position     : [167.649, 545.473]
-Measurements : [1166.57, 771684, 0.433882, -1.53255]
----
-Label        : 1
-Position     : [171.602, 545.671]
-Measurements : [1186.39, 748694, 0.458735, -1.48851]
----
-Label        : 1
-Position     : [612.092, 545.756]
-Measurements : [1971.11, 274734, -0.802306, -0.182576]
----
-Label        : 1
-Position     : [922.904, 546.419]
-Measurements : [731.19, 136447, 0.710832, -1.14612]
----
-Label        : 1
-Position     : [912.736, 546.52]
-Measurements : [1229.94, 213367, -0.0924437, -0.877466]
----
-Label        : 1
-Position     : [605.257, 546.527]
-Measurements : [1570.41, 602172, -0.372313, -1.4091]
----
-Label        : 1
-Position     : [681.608, 546.656]
-Measurements : [1296.6, 121584, -0.0814027, -0.254927]
----
-Label        : 1
-Position     : [606.856, 547.168]
-Measurements : [1653.51, 567992, -0.466753, -1.22783]
----
-Label        : 1
-Position     : [915.447, 547.538]
-Measurements : [1292.9, 196033, -0.286121, -0.742374]
----
-Label        : 1
-Position     : [674.991, 548.364]
-Measurements : [1440.87, 101237, 0.445724, 2.17182]
----
-Label        : 1
-Position     : [836.785, 548.445]
-Measurements : [847.022, 121326, 0.374717, -0.940934]
----
-Label        : 1
-Position     : [677.95, 548.448]
-Measurements : [1383.8, 90159.1, -0.820815, 0.505858]
----
-Label        : 1
-Position     : [368.574, 548.632]
-Measurements : [897.774, 171249, 0.848018, -0.299431]
----
-Label        : 1
-Position     : [610.801, 548.665]
-Measurements : [1890.6, 333818, -0.660998, -0.598264]
----
-Label        : 1
-Position     : [839.198, 548.815]
-Measurements : [747.295, 157001, 0.689483, -1.03939]
----
-Label        : 1
-Position     : [66.536, 548.984]
-Measurements : [1204.27, 331009, 0.518502, -0.763793]
----
-Label        : 1
-Position     : [585.897, 549.025]
-Measurements : [1470.37, 254436, -0.550692, -0.452917]
----
-Label        : 1
-Position     : [842.535, 549.101]
-Measurements : [630.592, 146847, 1.24269, 0.0450036]
----
-Label        : 1
-Position     : [168.936, 549.496]
-Measurements : [1453.63, 641926, -0.0154559, -1.6177]
----
-Label        : 1
-Position     : [837.472, 549.592]
-Measurements : [832.63, 139672, 0.380043, -1.20935]
----
-Label        : 1
-Position     : [910.551, 549.666]
-Measurements : [1068.28, 361318, 0.116333, -1.5643]
----
-Label        : 1
-Position     : [662.29, 549.743]
-Measurements : [1588.06, 253787, 0.272125, -0.706776]
----
-Label        : 1
-Position     : [685.762, 549.883]
-Measurements : [1281.77, 292865, 0.131181, -1.09337]
----
-Label        : 1
-Position     : [842.293, 549.984]
-Measurements : [630.592, 146847, 1.24269, 0.0450036]
----
-Label        : 1
-Position     : [596.061, 550.501]
-Measurements : [953.189, 151523, -0.126436, -1.40287]
----
-Label        : 1
-Position     : [595.737, 550.569]
-Measurements : [1034.29, 139565, -0.365157, -1.10216]
----
-Label        : 1
-Position     : [595.592, 550.752]
-Measurements : [1034.29, 139565, -0.365157, -1.10216]
----
-Label        : 1
-Position     : [675.464, 550.752]
-Measurements : [1380.79, 112696, -0.562892, 0.967104]
----
-Label        : 1
-Position     : [657.811, 551.747]
-Measurements : [1093.01, 204903, -0.127794, -1.09142]
----
-Label        : 1
-Position     : [68.4228, 552.116]
-Measurements : [1406.42, 258037, 0.349544, -0.802103]
----
-Label        : 1
-Position     : [66.024, 552.568]
-Measurements : [1390.64, 292310, 0.187832, -0.970916]
----
-Label        : 1
-Position     : [659.08, 553.312]
-Measurements : [1192.45, 235697, -0.121543, -1.0075]
----
-Label        : 1
-Position     : [666.76, 553.312]
-Measurements : [1736, 410110, -0.170472, -1.17004]
----
-Label        : 1
-Position     : [587.912, 553.428]
-Measurements : [1762.04, 176261, 0.654696, -0.138235]
----
-Label        : 1
-Position     : [663.729, 553.605]
-Measurements : [1664.34, 365946, -0.0719111, -0.932129]
----
-Label        : 1
-Position     : [839.008, 553.688]
-Measurements : [757.783, 166356, 0.590803, -1.22261]
----
-Label        : 1
-Position     : [584.429, 553.752]
-Measurements : [1920.63, 172586, 0.0358339, -0.551255]
----
-Label        : 1
-Position     : [592.358, 553.79]
-Measurements : [1338.35, 131925, 0.18481, 0.00550019]
----
-Label        : 1
-Position     : [590.472, 553.824]
-Measurements : [1510.32, 182766, 0.214998, 0.0218474]
----
-Label        : 1
-Position     : [662.748, 554.538]
-Measurements : [1457.25, 373951, 0.127051, -0.88248]
----
-Label        : 1
-Position     : [63.8955, 554.694]
-Measurements : [1126.88, 315603, 0.363359, -0.777913]
----
-Label        : 1
-Position     : [584.71, 555.181]
-Measurements : [1974.39, 198851, -0.0698433, -0.841522]
----
-Label        : 1
-Position     : [583.304, 556.384]
-Measurements : [2037.44, 206148, -0.219064, -0.843401]
----
-Label        : 1
-Position     : [68.6961, 557.213]
-Measurements : [1536.18, 171132, 0.0439612, -0.613123]
----
-Label        : 1
-Position     : [580.232, 557.408]
-Measurements : [2125.47, 208773, -0.644862, -0.235574]
----
-Label        : 1
-Position     : [174.719, 557.733]
-Measurements : [898.759, 187005, 0.383145, -1.2097]
----
-Label        : 1
-Position     : [402.869, 557.851]
-Measurements : [1334.78, 720938, 0.0307956, -1.69772]
----
-Label        : 1
-Position     : [384.96, 558.232]
-Measurements : [1402.2, 291162, -0.572213, -0.683802]
----
-Label        : 1
-Position     : [557.563, 558.329]
-Measurements : [1469.41, 146080, 0.0394042, -0.622513]
----
-Label        : 1
-Position     : [578.735, 558.744]
-Measurements : [2063.1, 304911, -0.658747, -0.429547]
----
-Label        : 1
-Position     : [380.415, 559.509]
-Measurements : [1030.78, 387391, 0.189618, -1.72118]
----
-Label        : 1
-Position     : [173.544, 559.608]
-Measurements : [935.883, 178358, 0.323128, -1.25073]
----
-Label        : 1
-Position     : [404.575, 559.807]
-Measurements : [1550.19, 540365, -0.248425, -1.49692]
----
-Label        : 1
-Position     : [574.088, 559.968]
-Measurements : [1726.03, 558886, -0.134103, -1.40458]
----
-Label        : 1
-Position     : [265.694, 560.218]
-Measurements : [1215.62, 396161, 0.385144, -1.13635]
----
-Label        : 1
-Position     : [628.311, 560.542]
-Measurements : [1049.43, 413327, 0.593478, -0.651241]
----
-Label        : 1
-Position     : [560.433, 560.556]
-Measurements : [1323.59, 205601, 0.216717, -0.770939]
----
-Label        : 1
-Position     : [561.288, 560.992]
-Measurements : [1273.38, 238064, 0.245399, -0.938592]
----
-Label        : 1
-Position     : [65.512, 561.144]
-Measurements : [1367.59, 185858, -0.232455, -0.952684]
----
-Label        : 1
-Position     : [833.312, 561.535]
-Measurements : [748.389, 117808, 0.87673, 0.372487]
----
-Label        : 1
-Position     : [174.745, 562.247]
-Measurements : [887.213, 182805, 0.537509, -1.18353]
----
-Label        : 1
-Position     : [751.027, 562.25]
-Measurements : [1129.39, 160728, -0.38824, -1.14525]
----
-Label        : 1
-Position     : [632.968, 562.528]
-Measurements : [1315.61, 443125, 0.279018, -1.09643]
----
-Label        : 1
-Position     : [577.494, 562.593]
-Measurements : [1740.11, 515743, 0.0375038, -1.55101]
----
-Label        : 1
-Position     : [401.856, 562.84]
-Measurements : [1858.27, 373124, -0.72865, -0.387901]
----
-Label        : 1
-Position     : [385.847, 562.841]
-Measurements : [1493.7, 121529, -0.55157, -0.364009]
----
-Label        : 1
-Position     : [266.588, 562.939]
-Measurements : [1385.16, 382181, 0.0929111, -1.15831]
----
-Label        : 1
-Position     : [746.12, 563.04]
-Measurements : [1030.86, 186221, 0.0629092, -1.47482]
----
-Label        : 1
-Position     : [63.9099, 563.448]
-Measurements : [1259.14, 220281, 0.0236837, -1.07392]
----
-Label        : 1
-Position     : [548.352, 563.508]
-Measurements : [1621.1, 186553, -0.408011, -0.233939]
----
-Label        : 1
-Position     : [60.8789, 563.579]
-Measurements : [961.026, 207415, 0.515273, -0.754784]
----
-Label        : 1
-Position     : [637.953, 563.604]
-Measurements : [1077.7, 557523, 0.877909, -0.850592]
----
-Label        : 1
-Position     : [266.728, 563.704]
-Measurements : [1443.75, 340373, -0.00392614, -1.00391]
----
-Label        : 1
-Position     : [511.636, 563.716]
-Measurements : [741.791, 48736.9, 0.0456055, -0.831354]
----
-Label        : 1
-Position     : [389.056, 564.376]
-Measurements : [1552.88, 219631, -0.046529, -0.744055]
----
-Label        : 1
-Position     : [271.17, 564.402]
-Measurements : [1011.81, 458750, 0.876486, -0.545166]
----
-Label        : 1
-Position     : [569.686, 564.755]
-Measurements : [955.968, 348778, 2.13753, 3.77168]
----
-Label        : 1
-Position     : [61.986, 564.807]
-Measurements : [1071.06, 226942, 0.344579, -0.963342]
----
-Label        : 1
-Position     : [835.426, 565.056]
-Measurements : [826.632, 174667, 1.04292, 0.201201]
----
-Label        : 1
-Position     : [543.368, 565.088]
-Measurements : [1550.01, 275781, -0.0652288, -1.07195]
----
-Label        : 1
-Position     : [386.036, 565.286]
-Measurements : [1426.85, 142805, -0.0853821, -0.743422]
----
-Label        : 1
-Position     : [531.431, 566.444]
-Measurements : [1161.49, 436970, 0.42866, -1.35793]
----
-Label        : 1
-Position     : [837.984, 566.488]
-Measurements : [853.543, 217003, 0.844863, -0.525593]
----
-Label        : 1
-Position     : [514.506, 567.217]
-Measurements : [811.119, 30515, 0.131191, -0.529126]
----
-Label        : 1
-Position     : [261.608, 567.288]
-Measurements : [1396.15, 162422, 0.333017, 0.678383]
----
-Label        : 1
-Position     : [514.696, 567.648]
-Measurements : [811.119, 30515, 0.131191, -0.529126]
----
-Label        : 1
-Position     : [388.104, 567.705]
-Measurements : [1402.95, 215284, 0.331956, -0.933168]
----
-Label        : 1
-Position     : [750.551, 567.846]
-Measurements : [783.311, 226485, 0.698776, -0.987802]
----
-Label        : 1
-Position     : [68.072, 568.312]
-Measurements : [1101.56, 234792, 0.320168, -1.23589]
----
-Label        : 1
-Position     : [546.841, 568.539]
-Measurements : [1359.75, 295609, 0.10771, -1.13195]
----
-Label        : 1
-Position     : [977.56, 568.583]
-Measurements : [1460.08, 168090, 0.305359, -1.12439]
----
-Label        : 1
-Position     : [403.547, 568.903]
-Measurements : [1802.22, 320711, -0.394287, -0.573665]
----
-Label        : 1
-Position     : [543.272, 569.248]
-Measurements : [1208.41, 233405, 0.537796, -0.647323]
----
-Label        : 1
-Position     : [261.948, 569.404]
-Measurements : [1237.46, 196129, 0.0414693, -0.258032]
----
-Label        : 1
-Position     : [406.517, 570.499]
-Measurements : [1690.69, 354578, -0.217451, -0.722075]
----
-Label        : 1
-Position     : [530.568, 570.72]
-Measurements : [1551.89, 430978, -0.344007, -1.19749]
----
-Label        : 1
-Position     : [254.952, 570.872]
-Measurements : [854.434, 197704, 0.815986, -0.783936]
----
-Label        : 1
-Position     : [404.416, 571.032]
-Measurements : [1914.2, 278546, -0.454741, -0.0690502]
----
-Label        : 1
-Position     : [505.448, 571.474]
-Measurements : [763.208, 95622.2, 0.199647, -1.07823]
----
-Label        : 1
-Position     : [635.94, 571.514]
-Measurements : [888.983, 142813, 0.347177, -1.11481]
----
-Label        : 1
-Position     : [184.542, 571.529]
-Measurements : [882.651, 320351, 0.668785, -0.916971]
----
-Label        : 1
-Position     : [251.019, 572.145]
-Measurements : [785.131, 188297, 1.19931, 0.112167]
----
-Label        : 1
-Position     : [639.624, 572.256]
-Measurements : [962.002, 145217, 0.253866, -1.05929]
----
-Label        : 1
-Position     : [529.055, 572.424]
-Measurements : [1712.57, 324797, -0.422305, -0.685713]
----
-Label        : 1
-Position     : [254.04, 572.445]
-Measurements : [822.708, 169408, 1.04385, -0.219536]
----
-Label        : 1
-Position     : [978.824, 572.481]
-Measurements : [1556.71, 170622, -0.350726, -0.666874]
----
-Label        : 1
-Position     : [70.6349, 572.587]
-Measurements : [1135.09, 370077, 0.336241, -1.53432]
----
-Label        : 1
-Position     : [978.272, 572.632]
-Measurements : [1556.71, 170622, -0.350726, -0.666874]
----
-Label        : 1
-Position     : [521.382, 572.646]
-Measurements : [1156.46, 187809, 1.03322, 0.140461]
----
-Label        : 1
-Position     : [523.4, 572.768]
-Measurements : [1343.39, 253992, 0.636051, -0.690359]
----
-Label        : 1
-Position     : [539.784, 572.768]
-Measurements : [870.082, 95191, 0.968062, 1.2117]
----
-Label        : 1
-Position     : [509.064, 573.28]
-Measurements : [873.357, 71712.8, 0.234021, -0.551763]
----
-Label        : 1
-Position     : [642.027, 573.887]
-Measurements : [961.326, 156466, 0.453651, -1.2085]
----
-Label        : 1
-Position     : [409.875, 573.926]
-Measurements : [1744.69, 639076, -0.23923, -1.33732]
----
-Label        : 1
-Position     : [542.833, 574.579]
-Measurements : [1007.82, 131515, 1.04116, 1.11113]
----
-Label        : 1
-Position     : [511.082, 574.72]
-Measurements : [884.891, 72490.3, 0.188584, -0.699274]
----
-Label        : 1
-Position     : [179.688, 574.968]
-Measurements : [1170.41, 239662, 0.36655, -0.867454]
----
-Label        : 1
-Position     : [527.026, 575.482]
-Measurements : [1650.04, 269915, 0.116529, -0.938832]
----
-Label        : 1
-Position     : [183.561, 576.483]
-Measurements : [1111.18, 237710, 0.605415, -0.878042]
----
-Label        : 1
-Position     : [406.976, 577.688]
-Measurements : [1732.12, 616186, -0.158667, -1.44916]
----
-Label        : 1
-Position     : [71.3052, 578.356]
-Measurements : [1130.47, 277750, 0.555065, -1.03163]
----
-Label        : 1
-Position     : [71.144, 578.552]
-Measurements : [1130.47, 277750, 0.555065, -1.03163]
----
-Label        : 1
-Position     : [248.241, 578.62]
-Measurements : [1304.08, 408362, 0.135407, -1.33895]
----
-Label        : 1
-Position     : [746.632, 578.912]
-Measurements : [1120.32, 386986, 0.13633, -1.36769]
----
-Label        : 1
-Position     : [245.736, 579.576]
-Measurements : [1616.03, 309322, -0.36443, -0.641314]
----
-Label        : 1
-Position     : [743.621, 579.768]
-Measurements : [1033.71, 372602, 0.40827, -1.20577]
----
-Label        : 1
-Position     : [748.2, 579.824]
-Measurements : [1138.5, 313170, 0.228065, -1.0469]
----
-Label        : 1
-Position     : [493.349, 580.168]
-Measurements : [988.673, 372587, 0.660684, -0.886268]
----
-Label        : 1
-Position     : [926.194, 580.478]
-Measurements : [1023.71, 465297, 0.468546, -1.3932]
----
-Label        : 1
-Position     : [244.925, 580.944]
-Measurements : [1678.39, 316686, -0.375423, -0.631309]
----
-Label        : 1
-Position     : [405.149, 581.285]
-Measurements : [1317.17, 655870, 0.565245, -1.24558]
----
-Label        : 1
-Position     : [839.447, 581.833]
-Measurements : [802.678, 295910, 1.09132, -0.000274494]
----
-Label        : 1
-Position     : [243.287, 582.179]
-Measurements : [1631.35, 381332, -0.294742, -0.978722]
----
-Label        : 1
-Position     : [68.3426, 582.724]
-Measurements : [842.06, 258088, 0.941284, -0.285413]
----
-Label        : 1
-Position     : [495.24, 583.008]
-Measurements : [1205.29, 379650, 0.294275, -1.22413]
----
-Label        : 1
-Position     : [495.224, 583.154]
-Measurements : [1205.29, 379650, 0.294275, -1.22413]
----
-Label        : 1
-Position     : [743.721, 583.698]
-Measurements : [1251.07, 298139, -0.0894589, -1.02486]
----
-Label        : 1
-Position     : [853.971, 583.894]
-Measurements : [710.569, 284400, 1.45034, 0.705734]
----
-Label        : 1
-Position     : [924.738, 584.356]
-Measurements : [1500.64, 279100, -0.714514, -0.373187]
----
-Label        : 1
-Position     : [841.056, 584.408]
-Measurements : [848.275, 265194, 1.14014, 0.165961]
----
-Label        : 1
-Position     : [925.536, 584.408]
-Measurements : [1457.3, 291992, -0.708653, -0.483691]
----
-Label        : 1
-Position     : [837.943, 584.962]
-Measurements : [918.6, 205224, 0.986566, 0.719513]
----
-Label        : 1
-Position     : [246.76, 585.208]
-Measurements : [1561.69, 395193, 0.0846826, -1.27315]
----
-Label        : 1
-Position     : [11.24, 585.72]
-Measurements : [1143.59, 408355, 0.749213, -0.760661]
----
-Label        : 1
-Position     : [11.7226, 585.96]
-Measurements : [1143.59, 408355, 0.749213, -0.760661]
----
-Label        : 1
-Position     : [898.592, 587.811]
-Measurements : [579.844, 176294, 1.89768, 2.30228]
----
-Label        : 1
-Position     : [747.656, 588.128]
-Measurements : [1010.54, 216731, 0.348892, -0.96938]
----
-Label        : 1
-Position     : [851.296, 588.504]
-Measurements : [1151.27, 422687, 0.338834, -1.46978]
----
-Label        : 1
-Position     : [715.921, 588.879]
-Measurements : [701.596, 152342, 1.35382, 0.642622]
----
-Label        : 1
-Position     : [904.458, 589.052]
-Measurements : [1162.55, 285568, -0.31184, -1.37231]
----
-Label        : 1
-Position     : [462.229, 589.187]
-Measurements : [839.65, 121406, 0.483044, -0.0888554]
----
-Label        : 1
-Position     : [233.563, 589.361]
-Measurements : [1622.14, 727175, -0.0163402, -1.34372]
----
-Label        : 1
-Position     : [11.6735, 589.581]
-Measurements : [1086.43, 414430, 0.918486, -0.546414]
----
-Label        : 1
-Position     : [244.748, 589.826]
-Measurements : [1313.36, 449772, 0.537817, -1.04497]
----
-Label        : 1
-Position     : [711.128, 590.216]
-Measurements : [1057.7, 176709, 0.229219, -0.86216]
----
-Label        : 1
-Position     : [749.165, 590.339]
-Measurements : [1017.2, 222417, 0.32214, -1.06224]
----
-Label        : 1
-Position     : [478.928, 590.672]
-Measurements : [1262.51, 320258, 0.0130173, -1.19643]
----
-Label        : 1
-Position     : [902.496, 591.576]
-Measurements : [1277.2, 270413, -0.623602, -0.924674]
----
-Label        : 1
-Position     : [757.32, 591.865]
-Measurements : [843.647, 68779.1, 1.13773, 0.714861]
----
-Label        : 1
-Position     : [461.887, 592.259]
-Measurements : [933.14, 145461, 0.280867, -0.367128]
----
-Label        : 1
-Position     : [463.056, 592.72]
-Measurements : [972.805, 136255, 0.208593, -0.39157]
----
-Label        : 1
-Position     : [854.326, 592.743]
-Measurements : [1046.82, 399715, 0.715332, -1.05331]
----
-Label        : 1
-Position     : [480.773, 593.01]
-Measurements : [1091.26, 361036, 0.615515, -1.08109]
----
-Label        : 1
-Position     : [862.585, 593.05]
-Measurements : [1039.14, 445840, 0.434074, -1.31525]
----
-Label        : 1
-Position     : [482.201, 593.436]
-Measurements : [946.43, 338296, 1.09066, -0.272114]
----
-Label        : 1
-Position     : [237.544, 593.912]
-Measurements : [1775.91, 505416, -0.189363, -0.979268]
----
-Label        : 1
-Position     : [76.7464, 593.912]
-Measurements : [660.127, 151778, 1.05948, -0.202266]
----
-Label        : 1
-Position     : [711.567, 594.355]
-Measurements : [1274.37, 277809, 0.320062, -0.780299]
----
-Label        : 1
-Position     : [72.471, 595.219]
-Measurements : [828.364, 245901, 0.451359, -1.33849]
----
-Label        : 1
-Position     : [754.136, 595.336]
-Measurements : [878.371, 154193, 0.857089, -0.0780638]
----
-Label        : 1
-Position     : [757.393, 596.246]
-Measurements : [981.482, 152651, 0.989848, -0.00492299]
----
-Label        : 1
-Position     : [860.168, 597.073]
-Measurements : [1137.38, 272944, 0.225, -1.17512]
----
-Label        : 1
-Position     : [866.144, 597.208]
-Measurements : [1257.32, 360017, 0.16117, -1.37078]
----
-Label        : 1
-Position     : [647.128, 597.384]
-Measurements : [1561.71, 168324, 0.318716, -1.08179]
----
-Label        : 1
-Position     : [878.693, 597.435]
-Measurements : [550.549, 81253.4, 1.04893, 0.0897637]
----
-Label        : 1
-Position     : [233.886, 597.516]
-Measurements : [1708.33, 525824, 0.250936, -1.02923]
----
-Label        : 1
-Position     : [231.503, 597.681]
-Measurements : [1726.27, 622316, 0.0226395, -1.30381]
----
-Label        : 1
-Position     : [860, 597.72]
-Measurements : [1137.38, 272944, 0.225, -1.17512]
----
-Label        : 1
-Position     : [870.141, 598.328]
-Measurements : [939.392, 446753, 0.893889, -0.854915]
----
-Label        : 1
-Position     : [653.09, 598.483]
-Measurements : [1777.2, 431892, -0.418814, -0.77937]
----
-Label        : 1
-Position     : [74.728, 598.52]
-Measurements : [913.674, 181069, 0.425305, -1.0491]
----
-Label        : 1
-Position     : [402.401, 598.682]
-Measurements : [744.985, 140465, 1.07279, -0.0605856]
----
-Label        : 1
-Position     : [882.528, 598.744]
-Measurements : [582.059, 75458.8, 1.03263, -0.020056]
----
-Label        : 1
-Position     : [650.528, 598.905]
-Measurements : [1828.76, 266579, -0.150144, -0.455498]
----
-Label        : 1
-Position     : [864.829, 599.396]
-Measurements : [1304.75, 320838, 0.0112484, -1.25766]
----
-Label        : 1
-Position     : [643.57, 600.182]
-Measurements : [1354.87, 205802, 0.35983, -0.804705]
----
-Label        : 1
-Position     : [236.008, 600.568]
-Measurements : [1416.61, 340729, 0.36803, -0.68806]
----
-Label        : 1
-Position     : [879.16, 601.397]
-Measurements : [539.633, 67361.4, 1.39999, 1.17747]
----
-Label        : 1
-Position     : [400.08, 601.424]
-Measurements : [928.427, 131395, 0.287644, -1.10852]
----
-Label        : 1
-Position     : [756.696, 601.992]
-Measurements : [965.798, 199167, 0.818095, -0.442147]
----
-Label        : 1
-Position     : [650.2, 602.504]
-Measurements : [1923.79, 198597, 0.00330806, -0.807094]
----
-Label        : 1
-Position     : [757.708, 603.448]
-Measurements : [944.493, 208444, 0.831763, -0.455454]
----
-Label        : 1
-Position     : [956.679, 603.612]
-Measurements : [970.499, 684615, 1.1671, -0.159297]
----
-Label        : 1
-Position     : [401.375, 603.957]
-Measurements : [995.404, 183760, 0.236748, -1.2496]
----
-Label        : 1
-Position     : [461.393, 604.89]
-Measurements : [1021.32, 155816, 0.027004, -1.36898]
----
-Label        : 1
-Position     : [237.863, 604.999]
-Measurements : [1170.57, 213156, 0.0315384, -1.42252]
----
-Label        : 1
-Position     : [459.427, 605.004]
-Measurements : [1051.56, 154372, -0.196236, -1.22849]
----
-Label        : 1
-Position     : [228.235, 605.075]
-Measurements : [941.204, 142612, 0.534915, -0.338781]
----
-Label        : 1
-Position     : [228.844, 605.703]
-Measurements : [941.204, 142612, 0.534915, -0.338781]
----
-Label        : 1
-Position     : [460.496, 606.032]
-Measurements : [1040.11, 157960, -0.139297, -1.28395]
----
-Label        : 1
-Position     : [647.393, 606.296]
-Measurements : [1589.79, 156739, 0.454352, -1.17883]
----
-Label        : 1
-Position     : [952.672, 606.424]
-Measurements : [1622.38, 532442, -0.0479366, -1.22267]
----
-Label        : 0
-Position     : [557.598, 606.698]
-Measurements : [996.762, 12374.8, 1.36408, 1.58708]
----
-Label        : 1
-Position     : [752.5, 606.756]
-Measurements : [644.077, 199924, 1.64222, 1.51838]
----
-Label        : 1
-Position     : [954.957, 607.045]
-Measurements : [1493.77, 706392, 0.0411678, -1.52663]
----
-Label        : 1
-Position     : [402.128, 608.592]
-Measurements : [1131, 191411, -0.0195369, -1.19049]
----
-Label        : 1
-Position     : [625.624, 608.648]
-Measurements : [1661.4, 34736.2, 0.660168, 1.94285]
----
-Label        : 1
-Position     : [687.576, 608.648]
-Measurements : [1257.51, 75274.1, -0.399507, -0.759956]
----
-Label        : 1
-Position     : [231.912, 609.272]
-Measurements : [1164.12, 111774, -0.0561663, -0.94059]
----
-Label        : 1
-Position     : [690.292, 609.977]
-Measurements : [1167.77, 132603, -0.383219, -1.08329]
----
-Label        : 1
-Position     : [400.974, 610.01]
-Measurements : [1307.3, 117289, -0.332864, -0.470128]
----
-Label        : 1
-Position     : [682.408, 610.606]
-Measurements : [1357.08, 104314, 0.429524, 0.249075]
----
-Label        : 1
-Position     : [406.029, 611.106]
-Measurements : [855.939, 211554, 0.773161, -0.739853]
----
-Label        : 1
-Position     : [622.078, 611.881]
-Measurements : [1593.51, 53048.9, -0.411448, 2.05418]
----
-Label        : 1
-Position     : [407.019, 611.953]
-Measurements : [769.182, 192695, 1.10807, -0.0263169]
----
-Label        : 1
-Position     : [627.24, 612.058]
-Measurements : [1469.08, 94869.6, -0.14857, 0.0954542]
----
-Label        : 1
-Position     : [691.021, 612.203]
-Measurements : [1174.15, 157046, 0.0377585, -0.761364]
----
-Label        : 1
-Position     : [618.968, 612.232]
-Measurements : [1518.66, 43584.4, -0.902702, 0.764844]
----
-Label        : 0
-Position     : [553.348, 612.359]
-Measurements : [908.398, 1915.39, -0.588395, 2.46765]
----
-Label        : 1
-Position     : [621.214, 612.44]
-Measurements : [1553.12, 51804.4, -0.32645, 0.803664]
----
-Label        : 1
-Position     : [22.504, 612.856]
-Measurements : [1574.99, 469838, -0.564517, -0.977363]
----
-Label        : 1
-Position     : [677.848, 613.256]
-Measurements : [1339.91, 129476, 0.817102, -0.41253]
----
-Label        : 1
-Position     : [165.443, 614.299]
-Measurements : [914.874, 374348, 1.26298, 0.189669]
----
-Label        : 1
-Position     : [229.864, 614.392]
-Measurements : [1399.63, 94221.3, -0.461732, 0.0481431]
----
-Label        : 1
-Position     : [397.52, 614.736]
-Measurements : [1155.51, 195162, -0.211604, -1.331]
----
-Label        : 1
-Position     : [399.149, 615.156]
-Measurements : [1028.56, 215820, 0.159365, -1.44649]
----
-Label        : 1
-Position     : [160.928, 615.23]
-Measurements : [1209.76, 251965, 0.825494, -0.131135]
----
-Label        : 1
-Position     : [27.0727, 615.61]
-Measurements : [1730.59, 507650, -0.412145, -1.16127]
----
-Label        : 1
-Position     : [162.792, 615.928]
-Measurements : [1132.84, 305035, 0.799962, -0.431372]
----
-Label        : 1
-Position     : [24.9003, 616.489]
-Measurements : [1884.29, 338993, -0.572864, -0.677153]
----
-Label        : 1
-Position     : [620.246, 616.856]
-Measurements : [1399.81, 79414.4, -0.494323, 0.0157049]
----
-Label        : 1
-Position     : [25.064, 617.464]
-Measurements : [1740.64, 474181, -0.301654, -1.28318]
----
-Label        : 1
-Position     : [679.078, 617.517]
-Measurements : [1228.53, 118710, 1.39538, 0.899681]
----
-Label        : 1
-Position     : [763.626, 617.551]
-Measurements : [904.116, 171680, 0.285781, -0.837869]
----
-Label        : 1
-Position     : [449.464, 617.587]
-Measurements : [1007.73, 429732, 0.754016, -0.924057]
----
-Label        : 1
-Position     : [757.66, 617.863]
-Measurements : [715.401, 195274, 0.866902, -0.585923]
----
-Label        : 1
-Position     : [225.465, 618.122]
-Measurements : [1576.52, 140558, -0.51971, 0.515011]
----
-Label        : 0
-Position     : [517.259, 618.376]
-Measurements : [905.346, 10356.9, 1.09423, 6.74397]
----
-Label        : 1
-Position     : [226.963, 619.391]
-Measurements : [1593.66, 122213, -0.346648, -0.566329]
----
-Label        : 1
-Position     : [27.9968, 620.279]
-Measurements : [1347.66, 633807, 0.486464, -1.41245]
----
-Label        : 1
-Position     : [22.8439, 620.437]
-Measurements : [1362.71, 527984, 0.241686, -1.31979]
----
-Label        : 1
-Position     : [227.304, 621.048]
-Measurements : [1500.74, 182489, -0.265723, -1.05499]
----
-Label        : 1
-Position     : [397.74, 621.228]
-Measurements : [1294.33, 608484, 0.435371, -1.35002]
----
-Label        : 1
-Position     : [224.9, 621.331]
-Measurements : [1588.34, 212879, 0.0994024, -0.55914]
----
-Label        : 0
-Position     : [547.315, 621.367]
-Measurements : [858.335, 12813.8, -1.24825, 2.37543]
----
-Label        : 1
-Position     : [630.232, 621.448]
-Measurements : [1653.59, 243765, 0.166521, -0.863138]
----
-Label        : 1
-Position     : [445.648, 621.904]
-Measurements : [1793.47, 249477, -0.341991, -0.941242]
----
-Label        : 1
-Position     : [1005.62, 622.247]
-Measurements : [1290, 558674, 0.089665, -1.45355]
----
-Label        : 1
-Position     : [760.28, 622.472]
-Measurements : [1312.64, 200230, 0.0510056, -1.0254]
----
-Label        : 0
-Position     : [503.897, 622.593]
-Measurements : [1289.92, 77478, 0.527279, -0.703087]
----
-Label        : 1
-Position     : [394.96, 622.928]
-Measurements : [1422.88, 538847, 0.183259, -1.32484]
----
-Label        : 1
-Position     : [438.111, 623.097]
-Measurements : [1093.15, 381161, 0.882787, -0.0819444]
----
-Label        : 1
-Position     : [966.471, 623.478]
-Measurements : [1008.86, 339500, 0.264693, -1.43376]
----
-Label        : 1
-Position     : [1008.55, 623.648]
-Measurements : [1514.1, 375138, -0.128177, -0.92859]
----
-Label        : 1
-Position     : [223.525, 623.759]
-Measurements : [1628.24, 297663, 0.401837, -0.302095]
----
-Label        : 1
-Position     : [393.035, 623.839]
-Measurements : [1374.65, 553140, 0.235271, -1.24485]
----
-Label        : 0
-Position     : [547.771, 624.497]
-Measurements : [838.306, 16471.2, -0.594663, 0.551508]
----
-Label        : 1
-Position     : [634.282, 624.588]
-Measurements : [1429.07, 187364, 0.614137, -0.202062]
----
-Label        : 1
-Position     : [439.392, 624.681]
-Measurements : [1146.97, 307115, 0.7285, -0.0404627]
----
-Label        : 1
-Position     : [1012.4, 624.732]
-Measurements : [1424.75, 329039, 0.62268, -0.974572]
----
-Label        : 1
-Position     : [449.939, 624.807]
-Measurements : [1480.06, 291421, -0.161697, -1.38779]
----
-Label        : 1
-Position     : [225.674, 624.859]
-Measurements : [1495.61, 236804, 0.610501, 0.709149]
----
-Label        : 1
-Position     : [632.719, 625.139]
-Measurements : [1538.43, 244454, 0.493099, -0.61549]
----
-Label        : 1
-Position     : [225.969, 625.226]
-Measurements : [1448.69, 236898, 0.744014, 0.995808]
----
-Label        : 1
-Position     : [78.7339, 625.981]
-Measurements : [1050.8, 606251, 0.572999, -1.08684]
----
-Label        : 1
-Position     : [87.1652, 625.993]
-Measurements : [862.626, 242984, 2.05207, 4.50996]
----
-Label        : 1
-Position     : [83.432, 626.68]
-Measurements : [1136.01, 516264, 0.740574, -0.643966]
----
-Label        : 1
-Position     : [963.496, 626.72]
-Measurements : [1209.7, 261596, 0.0189527, -1.39528]
----
-Label        : 1
-Position     : [635.963, 626.817]
-Measurements : [1394.26, 175477, 0.622809, -0.210303]
----
-Label        : 1
-Position     : [761.875, 626.825]
-Measurements : [1599.66, 226034, -0.28443, -0.746557]
----
-Label        : 1
-Position     : [224.232, 627.192]
-Measurements : [1511.04, 270670, 0.76139, 0.454238]
----
-Label        : 1
-Position     : [966.576, 627.42]
-Measurements : [1038.25, 308571, 0.312293, -1.42961]
----
-Label        : 0
-Position     : [515.403, 628.015]
-Measurements : [879.467, 5137.89, 1.44959, 7.48975]
----
-Label        : 1
-Position     : [442.576, 628.048]
-Measurements : [1210.42, 127373, 0.50762, 0.935571]
----
-Label        : 1
-Position     : [650.696, 628.182]
-Measurements : [1123.87, 49497.6, -0.17434, -0.770055]
----
-Label        : 1
-Position     : [652.76, 628.616]
-Measurements : [1155.73, 53051.8, -0.286533, -0.816427]
----
-Label        : 0
-Position     : [515.568, 628.895]
-Measurements : [879.467, 5137.89, 1.44959, 7.48975]
----
-Label        : 1
-Position     : [759.256, 629.128]
-Measurements : [1422.45, 342307, 0.0222468, -1.29925]
----
-Label        : 1
-Position     : [657.442, 629.734]
-Measurements : [1198.25, 50291.5, -0.26236, -0.802717]
----
-Label        : 1
-Position     : [80.3839, 629.97]
-Measurements : [1577.12, 441700, -0.0447074, -1.22484]
----
-Label        : 1
-Position     : [80.36, 630.264]
-Measurements : [1578.59, 429767, 0.0344501, -1.3347]
----
-Label        : 1
-Position     : [79.8048, 630.576]
-Measurements : [1586.45, 443481, -0.0441499, -1.3246]
----
-Label        : 0
-Position     : [527.556, 630.69]
-Measurements : [838.26, 11052.5, -0.579509, 0.0756377]
----
-Label        : 1
-Position     : [635.352, 631.688]
-Measurements : [1494.18, 177045, 0.113623, -0.553691]
----
-Label        : 1
-Position     : [763.164, 631.767]
-Measurements : [1168.13, 466586, 0.570538, -1.34331]
----
-Label        : 1
-Position     : [18.92, 631.8]
-Measurements : [991.241, 285977, 0.742128, -0.833555]
----
-Label        : 1
-Position     : [220.508, 632.123]
-Measurements : [1796.79, 199863, -0.200005, 0.62394]
----
-Label        : 1
-Position     : [20.5197, 632.497]
-Measurements : [933.061, 287088, 0.961963, -0.518892]
----
-Label        : 1
-Position     : [959.4, 633.376]
-Measurements : [899.198, 208629, 0.690542, -0.496948]
----
-Label        : 1
-Position     : [719.32, 633.736]
-Measurements : [1354.96, 147443, -0.106377, -0.998034]
----
-Label        : 0
-Position     : [527.043, 633.867]
-Measurements : [809.132, 12263.1, -0.249287, -0.605208]
----
-Label        : 1
-Position     : [963.67, 633.894]
-Measurements : [683.155, 178853, 1.46831, 1.35291]
----
-Label        : 1
-Position     : [19.7224, 634.069]
-Measurements : [900.164, 311706, 0.949301, -0.563988]
----
-Label        : 1
-Position     : [718.006, 634.517]
-Measurements : [1284.63, 177830, -0.0829044, -1.11961]
----
-Label        : 0
-Position     : [540.648, 634.618]
-Measurements : [953.967, 12861.9, 0.655317, -0.783391]
----
-Label        : 1
-Position     : [689.461, 635.13]
-Measurements : [962.756, 73066.3, 1.23401, 1.33694]
----
-Label        : 1
-Position     : [636.717, 635.378]
-Measurements : [1767.92, 224343, -0.00251318, -0.939323]
----
-Label        : 1
-Position     : [220.136, 635.896]
-Measurements : [1851.48, 216171, -1.1947, 1.02695]
----
-Label        : 1
-Position     : [638.717, 636.163]
-Measurements : [1830.87, 257753, -0.200122, -1.08728]
----
-Label        : 1
-Position     : [693.72, 636.296]
-Measurements : [1169.43, 154007, 0.853101, -0.184185]
----
-Label        : 1
-Position     : [78.312, 636.408]
-Measurements : [1254.12, 337591, 0.914237, -0.500015]
----
-Label        : 1
-Position     : [716.984, 636.418]
-Measurements : [1056.63, 183055, 0.551762, -0.683357]
----
-Label        : 1
-Position     : [691.927, 636.819]
-Measurements : [1062.01, 102471, 0.95495, -0.0353323]
----
-Label        : 1
-Position     : [79.7674, 636.826]
-Measurements : [1269.06, 357447, 0.850762, -0.718324]
----
-Label        : 1
-Position     : [638.936, 637.832]
-Measurements : [1840.86, 258591, -0.283776, -1.00201]
----
-Label        : 1
-Position     : [658.176, 637.861]
-Measurements : [1511.8, 191555, -0.180277, -1.022]
----
-Label        : 1
-Position     : [955.556, 637.937]
-Measurements : [736.643, 96568.3, 0.53228, -0.945341]
----
-Label        : 1
-Position     : [224.634, 638.018]
-Measurements : [1553.21, 383484, -0.176531, -1.49962]
----
-Label        : 1
-Position     : [660.782, 638.093]
-Measurements : [1584.1, 160129, -0.305115, -0.649177]
----
-Label        : 1
-Position     : [78.7125, 638.388]
-Measurements : [1077.97, 164820, 1.10866, 0.606104]
----
-Label        : 1
-Position     : [661.464, 638.856]
-Measurements : [1571.78, 150928, -0.285468, -0.612174]
----
-Label        : 1
-Position     : [367.348, 639.047]
-Measurements : [969.606, 336796, 0.849322, 0.144531]
----
-Label        : 1
-Position     : [639.406, 639.134]
-Measurements : [1864.95, 246250, -0.0962476, -0.97583]
----
-Label        : 1
-Position     : [215.9, 640.49]
-Measurements : [891.219, 491725, 1.09034, -0.512876]
----
-Label        : 1
-Position     : [217.138, 640.535]
-Measurements : [1124.14, 627990, 0.534546, -1.48007]
----
-Label        : 1
-Position     : [719.32, 641.416]
-Measurements : [1052.48, 162883, 0.627541, -0.31508]
----
-Label        : 1
-Position     : [220.648, 641.528]
-Measurements : [1223.89, 581861, 0.3473, -1.58541]
----
-Label        : 1
-Position     : [371.92, 641.872]
-Measurements : [1371.47, 628345, 0.335862, -1.28753]
----
-Label        : 1
-Position     : [164.925, 642.383]
-Measurements : [997.215, 332672, 0.447158, -1.20729]
----
-Label        : 0
-Position     : [487.669, 643.062]
-Measurements : [872.865, 130906, 0.678553, -0.488235]
----
-Label        : 1
-Position     : [72.68, 643.064]
-Measurements : [1370.61, 174143, 0.412515, -0.152904]
----
-Label        : 1
-Position     : [71.1286, 643.487]
-Measurements : [1363.65, 159548, 0.516921, 0.155043]
----
-Label        : 1
-Position     : [721.987, 643.529]
-Measurements : [1151.98, 186851, 0.602096, -0.273056]
----
-Label        : 0
-Position     : [481.56, 643.934]
-Measurements : [1278.77, 75714.6, 0.499343, -0.533136]
----
-Label        : 1
-Position     : [345.932, 643.965]
-Measurements : [898.039, 109657, 0.293744, -0.800513]
----
-Label        : 0
-Position     : [526.188, 644.129]
-Measurements : [800.554, 7117.08, -1.27835, 1.38297]
----
-Label        : 1
-Position     : [17.5728, 644.171]
-Measurements : [784.825, 151363, 0.590761, -0.902371]
----
-Label        : 1
-Position     : [14.824, 644.6]
-Measurements : [887.17, 130667, 0.193671, -0.962131]
----
-Label        : 1
-Position     : [68.6911, 644.736]
-Measurements : [1438.19, 306986, 0.809448, 0.131956]
----
-Label        : 1
-Position     : [375.677, 646.253]
-Measurements : [1160.14, 710975, 0.786928, -1.10194]
----
-Label        : 1
-Position     : [715.046, 646.263]
-Measurements : [1019.72, 75845.4, 0.954942, 2.73266]
----
-Label        : 1
-Position     : [68.3374, 646.365]
-Measurements : [1720.93, 455144, 0.476677, -0.793437]
----
-Label        : 1
-Position     : [646.903, 646.556]
-Measurements : [2221.57, 434222, -0.264716, -0.912646]
----
-Label        : 1
-Position     : [666.584, 647.048]
-Measurements : [1246.22, 122547, 0.136985, -0.769833]
----
-Label        : 1
-Position     : [767.949, 647.067]
-Measurements : [743.155, 147586, 1.46344, 2.33072]
----
-Label        : 1
-Position     : [167.912, 647.16]
-Measurements : [1545.59, 352033, 0.124075, -0.683738]
----
-Label        : 1
-Position     : [646.616, 647.56]
-Measurements : [2209.56, 442573, -0.202485, -1.07395]
----
-Label        : 1
-Position     : [19.2643, 647.622]
-Measurements : [725.527, 126482, 1.09316, -0.0232116]
----
-Label        : 1
-Position     : [425.173, 647.85]
-Measurements : [1161.71, 463657, 0.197698, -1.6399]
----
-Label        : 1
-Position     : [350.928, 648.528]
-Measurements : [982.83, 225073, 0.652522, -0.376124]
----
-Label        : 1
-Position     : [667.803, 648.61]
-Measurements : [1294.38, 127354, 0.258762, -0.450068]
----
-Label        : 1
-Position     : [348.665, 649.488]
-Measurements : [906.754, 267424, 0.902725, -0.104222]
----
-Label        : 1
-Position     : [646.31, 649.623]
-Measurements : [2089.38, 509254, 0.0794223, -1.32463]
----
-Label        : 1
-Position     : [666.352, 649.786]
-Measurements : [1253.58, 111373, 0.299511, -0.699559]
----
-Label        : 1
-Position     : [428.24, 650.576]
-Measurements : [1481.36, 351115, -0.356533, -1.06592]
----
-Label        : 1
-Position     : [166.567, 650.653]
-Measurements : [1549.69, 340416, -0.105348, -0.760685]
----
-Label        : 1
-Position     : [71.656, 650.744]
-Measurements : [1988.6, 427646, 0.196713, -1.2895]
----
-Label        : 1
-Position     : [69.8398, 650.968]
-Measurements : [1962.14, 468000, 0.119201, -1.24634]
----
-Label        : 1
-Position     : [764.888, 651.144]
-Measurements : [1163.79, 318225, 0.551722, -0.860368]
----
-Label        : 1
-Position     : [424.362, 652.544]
-Measurements : [1749.67, 347800, -0.614633, -0.673145]
----
-Label        : 1
-Position     : [760.961, 652.765]
-Measurements : [1084.96, 348471, 0.60671, -0.862569]
----
-Label        : 1
-Position     : [337.464, 653.225]
-Measurements : [1154.71, 184391, -0.160176, -0.523177]
----
-Label        : 1
-Position     : [968.483, 654.121]
-Measurements : [761.38, 227911, 0.923138, -0.448279]
----
-Label        : 1
-Position     : [726.114, 654.151]
-Measurements : [1745.4, 689909, 0.0751936, -1.6574]
----
-Label        : 1
-Position     : [336.08, 654.16]
-Measurements : [1144.03, 180941, -0.409782, -0.920301]
----
-Label        : 1
-Position     : [1017.77, 654.368]
-Measurements : [1214.95, 241826, -0.380885, -0.958212]
----
-Label        : 1
-Position     : [335.701, 654.57]
-Measurements : [1115.77, 188132, -0.314346, -1.09653]
----
-Label        : 1
-Position     : [162.28, 654.84]
-Measurements : [1295.62, 216478, 0.161164, -1.08242]
----
-Label        : 1
-Position     : [665.715, 654.854]
-Measurements : [1262.22, 90788.8, 0.0866523, -0.832344]
----
-Label        : 1
-Position     : [1020.47, 654.876]
-Measurements : [1352.78, 96442.4, 0.458003, -0.821514]
----
-Label        : 1
-Position     : [651.771, 655.597]
-Measurements : [1336.6, 52841.8, -0.173577, -0.896528]
----
-Label        : 1
-Position     : [722.657, 655.597]
-Measurements : [1649.8, 515605, 0.0252072, -1.561]
----
-Label        : 1
-Position     : [70.3483, 655.777]
-Measurements : [1849.38, 489910, 0.204139, -0.945411]
----
-Label        : 1
-Position     : [645.958, 655.794]
-Measurements : [1404.18, 94598.8, 1.04068, 1.87631]
----
-Label        : 0
-Position     : [538.063, 656.278]
-Measurements : [877.367, 68801.9, 1.44427, 3.37491]
----
-Label        : 0
-Position     : [556.593, 656.368]
-Measurements : [795.135, 39279.8, 1.82693, 7.55009]
----
-Label        : 1
-Position     : [1021.26, 656.547]
-Measurements : [1240.64, 137130, 0.375484, -0.4541]
----
-Label        : 1
-Position     : [961.58, 657.077]
-Measurements : [921.766, 190029, 0.170197, -1.06815]
----
-Label        : 1
-Position     : [766.413, 657.165]
-Measurements : [1197.69, 410140, 0.437892, -1.31718]
----
-Label        : 1
-Position     : [665.048, 657.288]
-Measurements : [1204.65, 67675.6, 0.879421, -0.115793]
----
-Label        : 1
-Position     : [422.608, 657.744]
-Measurements : [1596.29, 549647, -0.345803, -1.2793]
----
-Label        : 1
-Position     : [162.151, 657.783]
-Measurements : [1068.91, 340271, 0.452176, -1.23948]
----
-Label        : 1
-Position     : [649.176, 657.8]
-Measurements : [1294.57, 60500.7, -0.229286, -1.02879]
----
-Label        : 1
-Position     : [769.496, 657.8]
-Measurements : [1112.1, 356364, 0.716973, -1.06177]
----
-Label        : 1
-Position     : [72.168, 657.912]
-Measurements : [1648.33, 355796, 0.463576, -0.237449]
----
-Label        : 1
-Position     : [965.032, 657.952]
-Measurements : [922.708, 217739, 0.337217, -1.14451]
----
-Label        : 0
-Position     : [483.084, 658.044]
-Measurements : [854.813, 3977.18, -0.266403, -0.294176]
----
-Label        : 1
-Position     : [327.57, 658.195]
-Measurements : [837.054, 108616, 0.42112, -0.807673]
----
-Label        : 1
-Position     : [764.587, 658.316]
-Measurements : [1001.37, 406383, 0.71888, -1.00224]
----
-Label        : 1
-Position     : [422.673, 658.76]
-Measurements : [1481.02, 644628, -0.112398, -1.5576]
----
-Label        : 1
-Position     : [724.952, 658.824]
-Measurements : [2079.1, 431633, -0.646768, -0.357068]
----
-Label        : 1
-Position     : [167.184, 659.083]
-Measurements : [627.541, 154888, 1.80979, 2.8991]
----
-Label        : 1
-Position     : [205.567, 659.474]
-Measurements : [651.925, 146220, 1.19523, 0.194839]
----
-Label        : 0
-Position     : [518.574, 660.945]
-Measurements : [783.345, 17212.2, -0.228475, -1.30841]
----
-Label        : 1
-Position     : [72.7293, 661.025]
-Measurements : [1441.44, 331111, 0.107511, -1.00881]
----
-Label        : 1
-Position     : [421.074, 661.214]
-Measurements : [957.763, 588225, 1.00047, -0.617813]
----
-Label        : 1
-Position     : [668.466, 661.664]
-Measurements : [1138.64, 63929.5, 1.33893, 0.921879]
----
-Label        : 0
-Position     : [537.113, 661.682]
-Measurements : [790.204, 19786, -0.135555, 0.571849]
----
-Label        : 1
-Position     : [325.84, 662.352]
-Measurements : [985.124, 93874.5, -0.279558, -0.827325]
----
-Label        : 0
-Position     : [536.07, 662.384]
-Measurements : [797.187, 14836.7, -0.85645, 0.644137]
----
-Label        : 1
-Position     : [209.384, 663.032]
-Measurements : [772.789, 133137, 0.821945, -0.533571]
----
-Label        : 1
-Position     : [213.506, 663.095]
-Measurements : [689.269, 115301, 1.32993, 0.721288]
----
-Label        : 1
-Position     : [73.192, 664.056]
-Measurements : [1245.63, 312267, 0.50745, -0.608178]
----
-Label        : 1
-Position     : [655.963, 664.085]
-Measurements : [1458.53, 143172, 0.548294, 0.220907]
----
-Label        : 1
-Position     : [77.8493, 665.478]
-Measurements : [1116.62, 214089, 1.50817, 1.70207]
----
-Label        : 1
-Position     : [621.528, 665.992]
-Measurements : [1799.15, 149477, 0.423776, -0.610854]
----
-Label        : 1
-Position     : [651.224, 666.504]
-Measurements : [1556.11, 163002, 0.247162, -0.496522]
----
-Label        : 1
-Position     : [618.79, 666.802]
-Measurements : [1766.73, 195275, 0.604378, -0.214534]
----
-Label        : 1
-Position     : [321.858, 666.888]
-Measurements : [655.148, 144978, 0.794163, -0.989915]
----
-Label        : 1
-Position     : [1016.38, 667.902]
-Measurements : [1286.93, 587223, 0.282382, -1.19698]
----
-Label        : 1
-Position     : [410.125, 668.006]
-Measurements : [1083.49, 320184, 0.43898, -1.02464]
----
-Label        : 1
-Position     : [77.7727, 668.073]
-Measurements : [1009.71, 241215, 1.43994, 1.92425]
----
-Label        : 1
-Position     : [653.23, 668.291]
-Measurements : [1681.02, 206143, 0.176655, -0.784201]
----
-Label        : 0
-Position     : [515.781, 668.499]
-Measurements : [883.445, 8828.79, -0.8104, -0.0532019]
----
-Label        : 1
-Position     : [616.685, 668.705]
-Measurements : [1728.95, 215951, 0.392863, -0.847413]
----
-Label        : 1
-Position     : [968.773, 669.793]
-Measurements : [934.552, 257789, 0.524287, -1.14392]
----
-Label        : 1
-Position     : [1013.61, 670.298]
-Measurements : [1234.39, 684096, 0.306861, -1.45858]
----
-Label        : 0
-Position     : [588.996, 670.617]
-Measurements : [1422.8, 29963.7, 2.69111, 11.7876]
----
-Label        : 1
-Position     : [973.736, 670.752]
-Measurements : [1520.1, 278319, -0.516057, -0.285793]
----
-Label        : 0
-Position     : [579.748, 671.414]
-Measurements : [1431.96, 106078, 2.46061, 6.13458]
----
-Label        : 1
-Position     : [972.275, 671.734]
-Measurements : [1490.81, 277405, -0.266265, -0.31192]
----
-Label        : 0
-Position     : [547.265, 672.059]
-Measurements : [778.818, 37190.3, -0.0268415, -0.167969]
----
-Label        : 1
-Position     : [655.444, 672.47]
-Measurements : [1908.63, 351348, -0.181535, -1.13199]
----
-Label        : 1
-Position     : [622.04, 672.648]
-Measurements : [2141.65, 148466, 0.248506, -0.988989]
----
-Label        : 1
-Position     : [413.272, 672.656]
-Measurements : [1135.69, 307467, 0.510597, -0.642238]
----
-Label        : 1
-Position     : [1018.28, 672.8]
-Measurements : [1856.35, 259595, 0.156641, -1.14678]
----
-Label        : 1
-Position     : [620.299, 673.163]
-Measurements : [2093.52, 175901, 0.0830093, -0.786095]
----
-Label        : 1
-Position     : [622.065, 673.247]
-Measurements : [2112.96, 147719, 0.390355, -0.875959]
----
-Label        : 1
-Position     : [688.381, 673.909]
-Measurements : [1205.05, 119376, 0.00799213, -1.24933]
----
-Label        : 0
-Position     : [534.536, 674.111]
-Measurements : [919.752, 4337.91, 0.87782, 2.11114]
----
-Label        : 0
-Position     : [527.383, 674.5]
-Measurements : [1096.82, 117395, 1.82919, 2.56327]
----
-Label        : 1
-Position     : [653.784, 675.208]
-Measurements : [1890.34, 311800, 0.0807829, -1.1148]
----
-Label        : 1
-Position     : [690.648, 675.208]
-Measurements : [1286.24, 100594, -0.176539, -0.686918]
----
-Label        : 1
-Position     : [693.533, 675.27]
-Measurements : [1304.31, 78387.3, 0.229361, -0.822617]
----
-Label        : 1
-Position     : [975.774, 675.582]
-Measurements : [1929.67, 134623, 0.0651155, -0.819899]
----
-Label        : 0
-Position     : [515.307, 675.665]
-Measurements : [943.436, 54382.4, 2.37623, 6.52189]
----
-Label        : 1
-Position     : [407.64, 675.728]
-Measurements : [1320.52, 304427, 0.147623, -1.17011]
----
-Label        : 1
-Position     : [622.12, 675.976]
-Measurements : [2115.05, 146358, 0.425116, -0.960373]
----
-Label        : 0
-Position     : [534.066, 676.051]
-Measurements : [936.045, 5261.81, 0.805183, 1.68575]
----
-Label        : 1
-Position     : [406.791, 676.117]
-Measurements : [1314.99, 364777, 0.149226, -1.20072]
----
-Label        : 0
-Position     : [517.311, 676.278]
-Measurements : [1079.21, 166704, 1.74736, 2.69667]
----
-Label        : 1
-Position     : [649.626, 676.426]
-Measurements : [1551.55, 277559, 0.683601, -0.796943]
----
-Label        : 1
-Position     : [416.29, 677.167]
-Measurements : [950.588, 113002, 0.397363, -0.430585]
----
-Label        : 1
-Position     : [977.832, 677.408]
-Measurements : [2012.3, 168949, 0.0242875, -0.752349]
----
-Label        : 1
-Position     : [405.518, 677.462]
-Measurements : [1348.23, 425943, 0.170571, -1.16512]
----
-Label        : 1
-Position     : [621.528, 678.792]
-Measurements : [1901.38, 149894, 0.692104, -0.182475]
----
-Label        : 0
-Position     : [574.408, 679.108]
-Measurements : [1168.51, 40995.7, -0.122898, -0.763841]
----
-Label        : 0
-Position     : [576.008, 679.187]
-Measurements : [1225.92, 27986.3, 0.01316, -1.15928]
----
-Label        : 1
-Position     : [616.812, 679.71]
-Measurements : [1531.25, 168993, 1.15595, 0.159621]
----
-Label        : 1
-Position     : [407.84, 680.184]
-Measurements : [1199.85, 485625, 0.779406, -0.83389]
----
-Label        : 1
-Position     : [982.286, 680.676]
-Measurements : [1718.36, 187728, -0.105281, -0.680188]
----
-Label        : 0
-Position     : [487.025, 680.714]
-Measurements : [906.276, 4556.15, -0.882028, 0.577918]
----
-Label        : 1
-Position     : [650.951, 680.747]
-Measurements : [1500.31, 229516, 1.0241, 0.26796]
----
-Label        : 1
-Position     : [402.038, 680.978]
-Measurements : [1215.16, 449075, 0.66182, -0.729854]
----
-Label        : 1
-Position     : [978.217, 681.305]
-Measurements : [1859.57, 134594, 0.480071, -0.713095]
----
-Label        : 1
-Position     : [402.52, 681.36]
-Measurements : [1196.93, 425444, 0.760612, -0.485687]
----
-Label        : 1
-Position     : [725.531, 681.621]
-Measurements : [1202.61, 67219.6, -0.122566, -0.647671]
----
-Label        : 1
-Position     : [658.167, 682.413]
-Measurements : [1695.73, 147622, 0.607021, -0.154088]
----
-Label        : 1
-Position     : [980.904, 682.528]
-Measurements : [1767.16, 144774, -0.0258514, -0.405201]
----
-Label        : 1
-Position     : [390.15, 684.46]
-Measurements : [1117.16, 507760, 0.367595, -1.535]
----
-Label        : 1
-Position     : [737.24, 684.936]
-Measurements : [1320.38, 42841.3, -0.2018, -0.224263]
----
-Label        : 1
-Position     : [387.16, 684.944]
-Measurements : [1321.3, 447000, -0.0174756, -1.54706]
----
-Label        : 1
-Position     : [736.083, 685.06]
-Measurements : [1356.46, 37994.9, -0.310419, -0.145552]
----
-Label        : 1
-Position     : [739.274, 685.082]
-Measurements : [1299.13, 47068.5, -0.184465, -0.579972]
----
-Label        : 1
-Position     : [654.296, 685.448]
-Measurements : [1673.69, 194879, 0.246342, -0.327918]
----
-Label        : 1
-Position     : [55.272, 685.536]
-Measurements : [838.736, 170550, 0.679353, -0.423567]
----
-Label        : 1
-Position     : [49.5741, 685.626]
-Measurements : [901.655, 111832, 0.557721, 0.103901]
----
-Label        : 1
-Position     : [56.8424, 685.661]
-Measurements : [807.758, 161795, 0.781385, -0.132215]
----
-Label        : 0
-Position     : [548.86, 685.866]
-Measurements : [980.933, 42147.1, 1.13393, 3.13981]
----
-Label        : 1
-Position     : [49.64, 686.048]
-Measurements : [928.037, 101081, 0.61425, 0.203384]
----
-Label        : 0
-Position     : [485.44, 686.102]
-Measurements : [887.81, 19268.9, 0.995044, 2.67467]
----
-Label        : 0
-Position     : [543.41, 686.241]
-Measurements : [1041.13, 52347.5, 1.95783, 4.51984]
----
-Label        : 0
-Position     : [524.397, 686.464]
-Measurements : [1162.19, 101653, 2.18648, 6.96006]
----
-Label        : 1
-Position     : [682.968, 686.472]
-Measurements : [1222.65, 98592.7, 0.160611, -0.661722]
----
-Label        : 1
-Position     : [727, 686.472]
-Measurements : [1356.1, 57905.2, -0.57116, -0.0947079]
----
-Label        : 1
-Position     : [978.983, 686.91]
-Measurements : [1613.2, 163208, -0.22867, 0.642146]
----
-Label        : 1
-Position     : [713.863, 687.646]
-Measurements : [1451.33, 140160, 0.00523052, -1.12502]
----
-Label        : 1
-Position     : [206.972, 687.695]
-Measurements : [983.275, 355616, 0.789767, -0.482866]
----
-Label        : 1
-Position     : [206.566, 687.709]
-Measurements : [983.275, 355616, 0.789767, -0.482866]
----
-Label        : 1
-Position     : [723.544, 687.898]
-Measurements : [1297.93, 69015.3, 0.276871, -0.616712]
----
-Label        : 1
-Position     : [686.711, 688.307]
-Measurements : [1377.23, 77359.3, 0.895343, 1.77447]
----
-Label        : 0
-Position     : [571.043, 688.738]
-Measurements : [901.792, 4547.6, -0.731337, 1.4039]
----
-Label        : 1
-Position     : [719.579, 688.845]
-Measurements : [1393.49, 144740, 0.696712, -0.663996]
----
-Label        : 1
-Position     : [164.969, 688.965]
-Measurements : [715.536, 325148, 1.52069, 0.96285]
----
-Label        : 1
-Position     : [715.736, 689.032]
-Measurements : [1542.32, 151163, 0.153088, -0.905249]
----
-Label        : 1
-Position     : [54.8825, 689.621]
-Measurements : [1011.74, 114194, 0.406325, -0.163878]
----
-Label        : 1
-Position     : [391.765, 689.631]
-Measurements : [1081.16, 376163, 0.707204, -0.953504]
----
-Label        : 0
-Position     : [551.418, 689.811]
-Measurements : [884.593, 30976, 1.06188, 3.67884]
----
-Label        : 1
-Position     : [708.545, 690.159]
-Measurements : [1726.49, 235613, 0.0238457, -1.00875]
----
-Label        : 1
-Position     : [983.464, 690.208]
-Measurements : [1331.81, 367534, -0.0399181, -1.23515]
----
-Label        : 1
-Position     : [47.6013, 690.502]
-Measurements : [856.738, 146734, 0.692348, -0.287713]
----
-Label        : 1
-Position     : [703.96, 690.568]
-Measurements : [1779.34, 256063, -0.276257, -1.10143]
----
-Label        : 0
-Position     : [477.421, 690.616]
-Measurements : [798.826, 8898.81, 0.203135, 0.557101]
----
-Label        : 0
-Position     : [490.179, 690.819]
-Measurements : [989.34, 15028.7, 0.0997386, 1.83382]
----
-Label        : 0
-Position     : [524.779, 690.85]
-Measurements : [1113.43, 104904, 2.49195, 7.80539]
----
-Label        : 1
-Position     : [206.824, 691.168]
-Measurements : [1355.14, 281065, 0.155999, -0.747438]
----
-Label        : 1
-Position     : [685.015, 691.303]
-Measurements : [1412.51, 70869.9, 0.99385, 1.72712]
----
-Label        : 0
-Position     : [469.71, 691.368]
-Measurements : [856.655, 9324.99, -1.14346, 0.142251]
----
-Label        : 0
-Position     : [505.637, 691.796]
-Measurements : [1017.56, 93842.1, 3.18601, 10.3167]
----
-Label        : 0
-Position     : [448.147, 691.965]
-Measurements : [1044.07, 17306.6, 0.694973, -0.20513]
----
-Label        : 1
-Position     : [701.035, 692.544]
-Measurements : [1724.98, 298547, -0.054249, -1.47061]
----
-Label        : 1
-Position     : [630.264, 693.2]
-Measurements : [1801.23, 94509.7, 0.18025, -0.41504]
----
-Label        : 1
-Position     : [163.816, 693.216]
-Measurements : [1430.95, 600693, 0.0389097, -1.39027]
----
-Label        : 1
-Position     : [983.618, 693.519]
-Measurements : [1098.45, 345384, 0.535119, -0.963905]
----
-Label        : 0
-Position     : [503.696, 693.567]
-Measurements : [956.55, 54666.3, 3.53276, 13.4114]
----
-Label        : 1
-Position     : [982.624, 693.645]
-Measurements : [1145.16, 334227, 0.389084, -1.02992]
----
-Label        : 1
-Position     : [47.3356, 693.752]
-Measurements : [886.538, 138820, 0.746525, -0.023753]
----
-Label        : 1
-Position     : [46.8316, 693.921]
-Measurements : [861.162, 136460, 0.719406, -0.0108743]
----
-Label        : 1
-Position     : [165.907, 695.516]
-Measurements : [1514.23, 699505, 0.108439, -1.49279]
----
-Label        : 1
-Position     : [30.5928, 696.046]
-Measurements : [812.548, 105313, 0.29701, -1.10928]
----
-Label        : 1
-Position     : [42.984, 696.288]
-Measurements : [720.49, 107204, 1.23598, 1.21211]
----
-Label        : 1
-Position     : [633.507, 696.501]
-Measurements : [1730.11, 73242.4, 1.22178, 0.729323]
----
-Label        : 1
-Position     : [211.513, 696.641]
-Measurements : [1484.06, 184561, -0.0754644, -1.38894]
----
-Label        : 0
-Position     : [440.551, 697.159]
-Measurements : [1089.97, 25064.2, 0.78966, -0.1101]
----
-Label        : 1
-Position     : [299.608, 697.232]
-Measurements : [794.254, 213956, 1.26757, 0.359448]
----
-Label        : 0
-Position     : [490.757, 697.281]
-Measurements : [1123.08, 113316, 1.94013, 3.9328]
----
-Label        : 1
-Position     : [30.696, 697.312]
-Measurements : [855.093, 101910, 0.396883, -0.694619]
----
-Label        : 1
-Position     : [364.632, 697.744]
-Measurements : [989.14, 197569, 0.23462, -1.34218]
----
-Label        : 1
-Position     : [634.847, 697.976]
-Measurements : [1628.92, 74376.4, 0.984118, 1.91579]
----
-Label        : 1
-Position     : [161.256, 698.336]
-Measurements : [2052.31, 332781, -0.612827, -0.186191]
----
-Label        : 1
-Position     : [164.181, 698.869]
-Measurements : [1811.12, 580326, -0.282066, -1.27242]
----
-Label        : 1
-Position     : [158.924, 698.901]
-Measurements : [2032.69, 246344, -0.385655, 0.209423]
----
-Label        : 1
-Position     : [299.17, 698.99]
-Measurements : [837.191, 227512, 1.06925, -0.197763]
----
-Label        : 1
-Position     : [164.612, 699.103]
-Measurements : [1729.77, 648245, -0.137421, -1.44267]
----
-Label        : 0
-Position     : [488.985, 699.288]
-Measurements : [1108.09, 122490, 1.81843, 3.34549]
----
-Label        : 1
-Position     : [367.681, 699.56]
-Measurements : [987.821, 191059, 0.243993, -1.24114]
----
-Label        : 1
-Position     : [205.788, 699.67]
-Measurements : [1275.03, 447995, 0.21942, -1.51897]
----
-Label        : 1
-Position     : [209.384, 699.872]
-Measurements : [1357.6, 398827, -0.00553489, -1.47772]
----
-Label        : 1
-Position     : [349.034, 700.386]
-Measurements : [708.733, 135316, 0.638928, -1.19979]
----
-Label        : 1
-Position     : [981.928, 700.448]
-Measurements : [949.902, 103593, 0.402101, 0.0802957]
----
-Label        : 1
-Position     : [979.481, 700.679]
-Measurements : [995.192, 101721, 0.236388, -0.0629493]
----
-Label        : 1
-Position     : [360.412, 700.9]
-Measurements : [853.195, 166116, 0.566104, -0.899401]
----
-Label        : 1
-Position     : [353.368, 701.328]
-Measurements : [819.785, 124189, 0.12974, -1.48596]
----
-Label        : 1
-Position     : [300.57, 701.388]
-Measurements : [1008.2, 441653, 0.94759, -0.383009]
----
-Label        : 1
-Position     : [154.947, 701.613]
-Measurements : [1868.02, 288631, -0.285888, -0.699148]
----
-Label        : 1
-Position     : [32.7158, 701.613]
-Measurements : [815.192, 74028.6, 0.59833, -0.330883]
----
-Label        : 0
-Position     : [498.827, 701.643]
-Measurements : [868.608, 8156.59, 0.150489, -0.898373]
----
-Label        : 1
-Position     : [24.5461, 701.854]
-Measurements : [1030.43, 225769, 0.325376, -1.01796]
----
-Label        : 0
-Position     : [574.13, 702.349]
-Measurements : [905.362, 28444.8, 3.08757, 9.50173]
----
-Label        : 1
-Position     : [25.576, 703.456]
-Measurements : [1099.73, 182046, 0.412705, -0.961149]
----
-Label        : 1
-Position     : [155.112, 703.456]
-Measurements : [1785.8, 404679, -0.276363, -0.775961]
----
-Label        : 1
-Position     : [978.969, 703.885]
-Measurements : [1095.63, 44329.1, 0.997515, 2.32127]
----
-Label        : 1
-Position     : [299.717, 704.649]
-Measurements : [1367.15, 628364, 0.342345, -1.0069]
----
-Label        : 0
-Position     : [520.946, 705.086]
-Measurements : [871.161, 8660.73, -0.560863, 0.205994]
----
-Label        : 0
-Position     : [519.869, 705.272]
-Measurements : [873.83, 8245.93, -0.699065, 0.38047]
----
-Label        : 1
-Position     : [150.78, 705.75]
-Measurements : [1483.63, 272587, 0.280781, -0.730247]
----
-Label        : 1
-Position     : [299.096, 705.936]
-Measurements : [1483.34, 557034, 0.114789, -0.854361]
----
-Label        : 1
-Position     : [350.728, 706.152]
-Measurements : [500.694, 68732.8, 2.36473, 4.51725]
----
-Label        : 1
-Position     : [21.8929, 706.172]
-Measurements : [808.934, 280206, 0.923856, -0.651785]
----
-Label        : 0
-Position     : [546.041, 707.56]
-Measurements : [927.314, 878.759, 0.900077, 0.942395]
----
-Label        : 0
-Position     : [542.421, 708.379]
-Measurements : [955.462, 8109.82, 3.30465, 15.8433]
----
-Label        : 1
-Position     : [153.064, 710.112]
-Measurements : [1490.61, 162933, -0.374763, -0.439229]
----
-Label        : 1
-Position     : [157.228, 710.235]
-Measurements : [1216.04, 314988, 0.162348, -1.26141]
----
-Label        : 1
-Position     : [302.798, 710.389]
-Measurements : [1823.33, 579270, -0.287856, -0.998621]
----
-Label        : 1
-Position     : [294.963, 710.607]
-Measurements : [1455.99, 239799, -0.230773, -0.575386]
----
-Label        : 0
-Position     : [536.318, 710.642]
-Measurements : [1029.55, 50313.8, 1.05986, 2.76013]
----
-Label        : 0
-Position     : [533.06, 710.674]
-Measurements : [1010.07, 54411.4, 1.10119, 2.35511]
----
-Label        : 0
-Position     : [546.055, 711.866]
-Measurements : [912.763, 631.624, 0.515326, 0.425384]
----
-Label        : 0
-Position     : [510.557, 712.676]
-Measurements : [951.179, 9523.27, 0.350709, 1.27443]
----
-Label        : 1
-Position     : [297.56, 713.104]
-Measurements : [1457.39, 438392, -0.0212596, -1.09904]
----
-Label        : 1
-Position     : [18.916, 714.461]
-Measurements : [876.194, 266915, 0.718832, -1.08181]
----
-Label        : 1
-Position     : [14.7209, 715.368]
-Measurements : [1370.26, 497980, 0.5686, -0.134113]
----
-Label        : 0
-Position     : [452.911, 715.449]
-Measurements : [1007.5, 3226.47, -0.743682, 6.73847]
----
-Label        : 1
-Position     : [149.48, 715.744]
-Measurements : [1520.04, 119428, 0.040345, -1.16042]
----
-Label        : 1
-Position     : [148.225, 715.854]
-Measurements : [1474.07, 113152, 0.106992, -1.10525]
----
-Label        : 0
-Position     : [463.798, 716.417]
-Measurements : [917.118, 6401.58, -2.20401, 5.22719]
----
-Label        : 1
-Position     : [300.191, 716.606]
-Measurements : [1025.55, 487672, 1.02716, -0.499084]
----
-Label        : 1
-Position     : [16.872, 717.28]
-Measurements : [1305.97, 363071, 0.378194, -0.247805]
----
-Label        : 0
-Position     : [479.692, 717.48]
-Measurements : [887.859, 3070.38, 0.126614, -0.179796]
----
-Label        : 1
-Position     : [144.227, 717.49]
-Measurements : [1216.61, 99596, -0.1486, 0.192024]
----
-Label        : 1
-Position     : [14.807, 717.57]
-Measurements : [1564.15, 447249, 0.4224, -0.257984]
----
-Label        : 0
-Position     : [398.984, 718.227]
-Measurements : [1079.88, 9404.83, -0.785823, 3.18214]
----
-Label        : 0
-Position     : [435.373, 718.349]
-Measurements : [946.567, 4530.59, 0.241578, 0.757157]
----
-Label        : 0
-Position     : [479.643, 718.359]
-Measurements : [888.926, 3277.37, 0.109919, -0.451952]
----
-Label        : 1
-Position     : [150.555, 719.225]
-Measurements : [1350.55, 203038, -0.398947, -0.835851]
----
-Label        : 1
-Position     : [143.848, 719.84]
-Measurements : [1126.2, 105042, -0.601984, -0.0887272]
----
-Label        : 1
-Position     : [149.746, 720.238]
-Measurements : [1288.84, 217938, -0.18522, -1.0689]
----
-Label        : 0
-Position     : [483.335, 720.341]
-Measurements : [864.603, 4307.41, 0.452438, -0.605493]
----
-Label        : 1
-Position     : [10.728, 720.352]
-Measurements : [1959.16, 289383, 0.202743, -0.765113]
----
-Label        : 1
-Position     : [6.76788, 720.422]
-Measurements : [1990.33, 305216, -0.220494, -0.268993]
----
-Label        : 0
-Position     : [426.593, 720.486]
-Measurements : [902.532, 3949.37, 0.506826, 2.43821]
----
-Label        : 0
-Position     : [516.346, 721.2]
-Measurements : [919.769, 1646.43, -4.1801, 19.9773]
----
-Label        : 0
-Position     : [407.554, 722.727]
-Measurements : [1074.67, 14572.7, 0.539467, 0.894414]
----
-Label        : 0
-Position     : [396.521, 722.912]
-Measurements : [1089.46, 18536.5, 1.01886, 5.31848]
----
-Label        : 1
-Position     : [301.133, 723.324]
-Measurements : [1082.89, 452901, 0.630436, -1.28609]
----
-Label        : 1
-Position     : [208.593, 723.495]
-Measurements : [792.26, 264020, 1.46991, 1.21366]
----
-Label        : 0
-Position     : [400.205, 723.766]
-Measurements : [1081.19, 16669.1, 0.725756, 4.98747]
----
-Label        : 0
-Position     : [539.691, 723.831]
-Measurements : [883.911, 3124.93, -0.836513, 1.71221]
----
-Label        : 1
-Position     : [343.64, 724.368]
-Measurements : [1363.48, 319999, 0.0557857, -0.395136]
----
-Label        : 0
-Position     : [554.138, 725.039]
-Measurements : [837.309, 7230.07, -1.25863, 1.34441]
----
-Label        : 0
-Position     : [466.075, 725.567]
-Measurements : [877.945, 9238.56, -0.168896, 1.45514]
----
-Label        : 1
-Position     : [296.536, 725.904]
-Measurements : [1303.35, 326101, 0.119228, -1.40762]
----
-Label        : 1
-Position     : [340.171, 725.939]
-Measurements : [1436.62, 265703, 0.131347, -0.25]
----
-Label        : 1
-Position     : [205.288, 726.496]
-Measurements : [1142.84, 346413, 0.331069, -1.15071]
----
-Label        : 1
-Position     : [340.615, 726.943]
-Measurements : [1450.16, 258917, 0.131909, -0.263018]
----
-Label        : 1
-Position     : [200.867, 727.247]
-Measurements : [1373.48, 291841, 0.0125284, -0.975884]
----
-Label        : 0
-Position     : [581.972, 727.627]
-Measurements : [923.717, 56879, 2.01018, 4.93828]
----
-Label        : 1
-Position     : [339.315, 727.777]
-Measurements : [1387.39, 306196, 0.0890325, -0.480073]
----
-Label        : 0
-Position     : [402.263, 727.829]
-Measurements : [1049.48, 22114.9, 0.479931, 0.00627351]
----
-Label        : 0
-Position     : [472.937, 727.956]
-Measurements : [887.559, 14798.6, 1.63847, 4.70775]
----
-Label        : 0
-Position     : [567.791, 728.593]
-Measurements : [821.142, 12877.4, -0.094109, 0.473949]
----
-Label        : 0
-Position     : [610.329, 728.81]
-Measurements : [1068.94, 9102.36, 0.0778781, -0.422164]
----
-Label        : 1
-Position     : [131.786, 730.118]
-Measurements : [645.702, 136877, 1.89997, 2.78578]
----
-Label        : 1
-Position     : [296.239, 730.356]
-Measurements : [933.382, 413438, 0.865803, -0.800469]
----
-Label        : 0
-Position     : [404.326, 730.402]
-Measurements : [987.636, 11928.6, 1.2798, 1.84055]
----
-Label        : 1
-Position     : [125.004, 731.019]
-Measurements : [948.202, 145777, 1.04496, 0.252978]
----
-Label        : 1
-Position     : [339.032, 732.56]
-Measurements : [1107.89, 243406, -0.151434, -1.39355]
----
-Label        : 1
-Position     : [126.952, 733.152]
-Measurements : [932.05, 182010, 0.897258, -0.44654]
----
-Label        : 0
-Position     : [441.692, 733.191]
-Measurements : [917.017, 7418.56, -1.11122, 1.63796]
----
-Label        : 1
-Position     : [340.749, 733.652]
-Measurements : [1075.76, 262199, -0.110577, -1.50152]
----
-Label        : 1
-Position     : [200.13, 734.259]
-Measurements : [1648.39, 145918, -0.613778, -0.147282]
----
-Label        : 1
-Position     : [202.216, 734.688]
-Measurements : [1646.15, 127933, -0.421052, -0.373464]
----
-Label        : 0
-Position     : [449.489, 735.474]
-Measurements : [785.06, 7171.23, 1.24803, 1.18435]
----
-Label        : 0
-Position     : [404.214, 736.317]
-Measurements : [934.788, 2440.22, 0.395013, 2.19353]
----
-Label        : 1
-Position     : [197.596, 736.869]
-Measurements : [1530.75, 371290, -0.359357, -0.891723]
----
-Label        : 1
-Position     : [128.925, 737.457]
-Measurements : [880.94, 293498, 1.08283, -0.349099]
----
-Label        : 0
-Position     : [566.236, 739.33]
-Measurements : [756.121, 8821.46, 0.228477, 0.574167]
----
-Label        : 1
-Position     : [204.4, 740.441]
-Measurements : [1680.24, 279485, -0.341007, -0.554946]
----
-Label        : 0
-Position     : [527.65, 741.596]
-Measurements : [770.698, 8427.35, 0.645325, -0.762257]
----
-Label        : 0
-Position     : [555.308, 741.75]
-Measurements : [745.614, 14617.6, -0.559165, -0.338662]
----
-Label        : 0
-Position     : [406.845, 741.877]
-Measurements : [951.874, 1633.05, -0.336642, 0.0556783]
----
-Label        : 1
-Position     : [207.293, 741.999]
-Measurements : [1367.88, 267306, 0.347429, -0.853305]
----
-Label        : 1
-Position     : [124.904, 742.368]
-Measurements : [1436.05, 245284, -0.0935654, -0.463012]
----
-Label        : 1
-Position     : [202.728, 742.368]
-Measurements : [1941.4, 210551, -0.477076, -0.338577]
----
-Label        : 0
-Position     : [436.442, 742.88]
-Measurements : [929.375, 3476.89, -2.89425, 9.90368]
----
-Label        : 0
-Position     : [608.333, 743.344]
-Measurements : [676.344, 20690.8, 1.16242, 1.8409]
----
-Label        : 0
-Position     : [377.893, 744.509]
-Measurements : [795.482, 8235.47, 0.619007, 0.212924]
----
-Label        : 0
-Position     : [448.467, 744.899]
-Measurements : [916.978, 55301.6, 3.14786, 11.2395]
----
-Label        : 1
-Position     : [126.058, 745.517]
-Measurements : [1303.37, 299609, 0.267953, -0.787432]
----
-Label        : 1
-Position     : [124.491, 746.281]
-Measurements : [1358.46, 230129, 0.481434, -0.372796]
----
-Label        : 0
-Position     : [409.131, 746.994]
-Measurements : [965.738, 13623.5, 0.15015, 7.06839]
----
-Label        : 0
-Position     : [405.584, 747.124]
-Measurements : [968.589, 828.08, -0.212032, 0.319205]
----
-Label        : 1
-Position     : [123.368, 747.488]
-Measurements : [1268.68, 236351, 0.613354, -0.0155157]
----
-Label        : 1
-Position     : [202.531, 749.362]
-Measurements : [1550.72, 538206, -0.17467, -1.50601]
----
-Label        : 1
-Position     : [202.216, 749.536]
-Measurements : [1550.72, 538206, -0.17467, -1.50601]
----
-Label        : 1
-Position     : [126.543, 750.378]
-Measurements : [870.957, 174961, 0.776442, -0.0393626]
----
-Label        : 1
-Position     : [206.858, 750.895]
-Measurements : [1323.48, 374871, 0.666633, -0.960716]
----
-Label        : 0
-Position     : [572.392, 751.168]
-Measurements : [868.874, 42944, -0.252169, -1.00631]
----
-Label        : 1
-Position     : [111.08, 756.704]
-Measurements : [682.166, 115105, 1.50987, 1.34086]
----
-Label        : 1
-Position     : [112.859, 758.152]
-Measurements : [637.038, 116498, 1.7813, 2.06441]
----
-Label        : 1
-Position     : [190.72, 760.326]
-Measurements : [1756.4, 804807, -0.336199, -1.44325]
----
-Label        : 1
-Position     : [109.278, 761.408]
-Measurements : [518.056, 47028.6, 2.73031, 7.31028]
----
-Label        : 1
-Position     : [191.976, 762.848]
-Measurements : [1929.87, 611779, -0.689289, -0.802071]
----
-Label        : 1
-Position     : [184.296, 765.408]
-Measurements : [1980.57, 434789, -0.789138, -0.09661]
----
-Label        : 0
-Position     : [453.542, 765.888]
-Measurements : [770.904, 4723.78, 1.27278, 0.867494]
----
-Label        : 1
-Position     : [182.834, 767.159]
-Measurements : [1517.09, 731151, 0.0485414, -1.54421]
----
-Label        : 1
-Position     : [194.997, 767.624]
-Measurements : [1576.76, 503234, 0.35626, -1.25176]
----
-Label        : 0
-Position     : [430.101, 767.938]
-Measurements : [891.728, 9875.54, 0.0311174, -1.52266]
----
-Label        : 1
-Position     : [101.864, 768.48]
-Measurements : [1253.94, 214279, -0.156842, -0.85546]
----
-Label        : 1
-Position     : [183.079, 770.282]
-Measurements : [1145.28, 603485, 0.708353, -0.974022]
----
-Label        : 0
-Position     : [411.914, 770.36]
-Measurements : [816.374, 7840.96, -0.848821, 0.660832]
----
-Label        : 1
-Position     : [103.579, 770.97]
-Measurements : [1180.54, 197496, -0.144821, -1.14796]
----
-Label        : 1
-Position     : [98.8285, 771.336]
-Measurements : [1330.28, 228535, -0.0586775, -0.898468]
----
-Label        : 0
-Position     : [398.203, 773.414]
-Measurements : [891.812, 4488.79, -0.721596, -0.157861]
----
-Label        : 1
-Position     : [175.723, 774.71]
-Measurements : [1351.99, 448310, -0.114202, -1.65025]
----
-Label        : 1
-Position     : [727.647, 776.137]
-Measurements : [1361.34, 220402, 0.453899, -0.274435]
----
-Label        : 1
-Position     : [177.128, 777.184]
-Measurements : [1542.77, 366358, -0.648092, -0.983654]
----
-Label        : 1
-Position     : [688.828, 778.215]
-Measurements : [993.332, 69085.1, -0.464187, -0.403541]
----
-Label        : 0
-Position     : [423.556, 778.671]
-Measurements : [873.206, 9689.22, 0.719962, -0.391072]
----
-Label        : 1
-Position     : [702.725, 780.122]
-Measurements : [987.145, 235863, 0.622212, -0.818241]
----
-Label        : 1
-Position     : [725.208, 780.552]
-Measurements : [1177.82, 331716, 0.617446, -0.759791]
----
-Label        : 1
-Position     : [178.707, 781.444]
-Measurements : [1406.65, 350074, -0.116546, -1.37383]
----
-Label        : 1
-Position     : [643.8, 782.6]
-Measurements : [837.502, 131171, 0.876622, 0.412439]
----
-Label        : 1
-Position     : [687.832, 782.6]
-Measurements : [747.243, 106233, 0.728561, -0.706801]
----
-Label        : 1
-Position     : [647.243, 782.658]
-Measurements : [894.672, 147214, 0.50246, -0.537846]
----
-Label        : 0
-Position     : [398.736, 782.81]
-Measurements : [750.757, 3018.91, -0.243828, 3.54585]
----
-Label        : 1
-Position     : [173.429, 783.826]
-Measurements : [1151.13, 361522, 0.388328, -1.18903]
----
-Label        : 1
-Position     : [728.049, 784.078]
-Measurements : [776.553, 355639, 1.67998, 1.40744]
----
-Label        : 1
-Position     : [702.168, 784.136]
-Measurements : [1045.13, 293026, 0.516226, -1.16655]
----
-Label        : 1
-Position     : [685.987, 784.181]
-Measurements : [630.937, 107448, 1.47644, 0.762472]
----
-Label        : 1
-Position     : [698.181, 784.234]
-Measurements : [915.99, 278636, 0.744965, -0.898467]
----
-Label        : 1
-Position     : [715.132, 785.009]
-Measurements : [917.661, 246715, 0.828443, -0.633303]
----
-Label        : 1
-Position     : [753.989, 785.83]
-Measurements : [953.973, 291075, 0.731503, -0.970358]
----
-Label        : 1
-Position     : [716.054, 786.124]
-Measurements : [769.879, 190007, 1.34962, 0.560458]
----
-Label        : 1
-Position     : [755.699, 786.407]
-Measurements : [828.681, 273702, 1.13027, -0.261738]
----
-Label        : 1
-Position     : [647.418, 786.811]
-Measurements : [626.344, 124163, 1.98432, 3.64173]
----
-Label        : 1
-Position     : [167.663, 787.376]
-Measurements : [1214.17, 374087, 0.247525, -1.3402]
----
-Label        : 1
-Position     : [711.384, 788.232]
-Measurements : [1246.33, 514960, 0.692925, -0.79513]
----
-Label        : 1
-Position     : [169.448, 788.448]
-Measurements : [1175.54, 368199, 0.390895, -1.21202]
----
-Label        : 1
-Position     : [87.2985, 788.683]
-Measurements : [1396.07, 335246, -0.33232, -1.00375]
----
-Label        : 1
-Position     : [750.808, 788.744]
-Measurements : [1078.01, 292720, 0.235907, -1.35835]
----
-Label        : 1
-Position     : [839.488, 788.81]
-Measurements : [1014.05, 248274, 0.000140983, -1.46939]
----
-Label        : 1
-Position     : [92.136, 789.984]
-Measurements : [1610.89, 669868, -0.161827, -1.0152]
----
-Label        : 1
-Position     : [841.374, 790.788]
-Measurements : [934.327, 255970, 0.326117, -1.42665]
----
-Label        : 1
-Position     : [95.5657, 791.06]
-Measurements : [2041.53, 828238, -0.326321, -0.996807]
----
-Label        : 1
-Position     : [842.968, 791.304]
-Measurements : [871.098, 238724, 0.528133, -1.28029]
----
-Label        : 1
-Position     : [92.5887, 791.677]
-Measurements : [2049.67, 547736, -0.181618, -0.257574]
----
-Label        : 1
-Position     : [600.916, 794.077]
-Measurements : [660.541, 98200, 1.48347, 1.53605]
----
-Label        : 1
-Position     : [93.16, 795.104]
-Measurements : [2123.82, 623187, -0.254688, -0.876846]
----
-Label        : 1
-Position     : [94.588, 795.95]
-Measurements : [2146.49, 678407, -0.344582, -0.953312]
----
-Label        : 1
-Position     : [600.792, 796.424]
-Measurements : [683.142, 117605, 1.41414, 1.15]
----
-Label        : 1
-Position     : [157.36, 799.948]
-Measurements : [628.692, 221438, 2.03286, 2.85365]
----
-Label        : 1
-Position     : [598.809, 800.246]
-Measurements : [651.803, 100101, 1.8684, 2.77073]
----
-Label        : 1
-Position     : [153.064, 803.8]
-Measurements : [1235.38, 347266, -0.0708498, -1.4657]
----
-Label        : 1
-Position     : [582.033, 803.973]
-Measurements : [1541.09, 669227, -0.189835, -1.27048]
----
-Label        : 1
-Position     : [583.896, 804.616]
-Measurements : [1716.45, 635471, -0.308924, -1.05274]
----
-Label        : 1
-Position     : [583.731, 808.164]
-Measurements : [1896.01, 789177, -0.135868, -1.35621]
----
-Label        : 1
-Position     : [153.003, 808.514]
-Measurements : [1008.08, 348311, 0.510919, -1.24226]
----
-Label        : 1
-Position     : [1121.2, 809.614]
-Measurements : [1393.42, 631285, 1.06351, -0.317079]
----
-Label        : 1
-Position     : [927.864, 810.944]
-Measurements : [922.958, 219204, 0.729247, -0.639748]
----
-Label        : 1
-Position     : [1124.02, 814.52]
-Measurements : [2098.79, 779215, -0.205201, -1.42675]
----
-Label        : 1
-Position     : [983.643, 814.68]
-Measurements : [1406.45, 349006, 0.0679644, -0.7236]
----
-Label        : 1
-Position     : [504.817, 815.373]
-Measurements : [1010.51, 273922, 0.254172, -1.4478]
----
-Label        : 1
-Position     : [927.928, 815.544]
-Measurements : [1004.66, 237640, 0.332741, -1.12483]
----
-Label        : 1
-Position     : [526.689, 815.604]
-Measurements : [1760.95, 600355, -0.540524, -0.951703]
----
-Label        : 1
-Position     : [923.869, 815.796]
-Measurements : [852.063, 252255, 0.626028, -0.878785]
----
-Label        : 1
-Position     : [980.005, 815.833]
-Measurements : [1171.83, 429539, 0.40623, -0.989969]
----
-Label        : 1
-Position     : [984.76, 816.568]
-Measurements : [1251.43, 490108, 0.220337, -1.26225]
----
-Label        : 1
-Position     : [508.696, 818.136]
-Measurements : [1017.42, 245081, 0.400866, -1.30747]
----
-Label        : 1
-Position     : [1126.45, 818.502]
-Measurements : [1594.38, 1.16569e+06, 0.369868, -1.59389]
----
-Label        : 1
-Position     : [525.592, 819.16]
-Measurements : [1939.86, 697908, -0.499201, -1.08774]
----
-Label        : 1
-Position     : [1011.67, 820.962]
-Measurements : [699.013, 81657.6, 0.551357, -1.1875]
----
-Label        : 1
-Position     : [1091.68, 821.026]
-Measurements : [1000.83, 398136, 1.14559, -0.118122]
----
-Label        : 1
-Position     : [522.719, 821.123]
-Measurements : [1917.55, 882256, -0.451932, -1.08717]
----
-Label        : 1
-Position     : [508.462, 822.044]
-Measurements : [839.852, 222281, 0.979814, -0.367721]
----
-Label        : 1
-Position     : [1010.62, 822.244]
-Measurements : [693.392, 87487, 0.535667, -1.30036]
----
-Label        : 1
-Position     : [1012.41, 822.712]
-Measurements : [706.398, 81647, 0.553716, -1.28203]
----
-Label        : 1
-Position     : [1096.6, 823.242]
-Measurements : [1166.25, 478414, 0.61613, -1.1612]
----
-Label        : 1
-Position     : [1076.83, 824.726]
-Measurements : [1101, 481090, 0.364083, -1.35838]
----
-Label        : 1
-Position     : [1096.72, 824.918]
-Measurements : [1122.23, 469781, 0.733959, -1.00201]
----
-Label        : 1
-Position     : [1078.97, 827.32]
-Measurements : [1418.91, 502602, 0.0250882, -1.28341]
----
-Label        : 1
-Position     : [1392.91, 829.002]
-Measurements : [1066.29, 262211, 0.601476, -0.641817]
----
-Label        : 1
-Position     : [1390.94, 829.202]
-Measurements : [1005.35, 265933, 0.610088, -0.575108]
----
-Label        : 1
-Position     : [1390.7, 829.344]
-Measurements : [1005.35, 265933, 0.610088, -0.575108]
----
-Label        : 1
-Position     : [488.216, 829.912]
-Measurements : [1675.12, 615787, -0.00773813, -1.42912]
----
-Label        : 1
-Position     : [486.43, 830.311]
-Measurements : [1635.72, 765951, -0.15554, -1.46854]
----
-Label        : 1
-Position     : [1075.93, 831.578]
-Measurements : [1252.62, 648251, 0.284949, -1.4399]
----
-Label        : 1
-Position     : [1389.76, 832.043]
-Measurements : [944.15, 382907, 0.950516, -0.234103]
----
-Label        : 1
-Position     : [656.414, 832.214]
-Measurements : [1014.19, 216866, 0.193605, -1.22599]
----
-Label        : 1
-Position     : [661.203, 832.696]
-Measurements : [934.508, 187096, 0.403865, -1.17238]
----
-Label        : 1
-Position     : [657.112, 833.8]
-Measurements : [1131.95, 224355, 0.191712, -1.08847]
----
-Label        : 1
-Position     : [1394.55, 834.327]
-Measurements : [1207.62, 339921, 0.450709, -0.80088]
----
-Label        : 1
-Position     : [465.381, 834.549]
-Measurements : [1269.39, 560439, 0.483274, -1.30411]
----
-Label        : 1
-Position     : [486.064, 834.81]
-Measurements : [1472.21, 840553, 0.180824, -1.56869]
----
-Label        : 1
-Position     : [682.025, 836.066]
-Measurements : [831.306, 369037, 1.16729, 0.119046]
----
-Label        : 1
-Position     : [461.08, 838.616]
-Measurements : [1540.14, 621071, 0.0158363, -1.6649]
----
-Label        : 1
-Position     : [1393.74, 838.732]
-Measurements : [1243.49, 422273, 0.134774, -1.22674]
----
-Label        : 1
-Position     : [745.941, 839.601]
-Measurements : [721.25, 148263, 0.476498, -1.29222]
----
-Label        : 1
-Position     : [750.808, 839.944]
-Measurements : [876.858, 171370, 0.0564525, -1.37813]
----
-Label        : 1
-Position     : [460.526, 840.057]
-Measurements : [1461.23, 614667, 0.236308, -1.59414]
----
-Label        : 1
-Position     : [706.264, 840.456]
-Measurements : [1518.17, 235134, 0.357997, -0.361697]
----
-Label        : 1
-Position     : [685.272, 840.968]
-Measurements : [1410.48, 351858, -0.15485, -1.17376]
----
-Label        : 1
-Position     : [751.871, 841.211]
-Measurements : [961.414, 123696, 0.00551949, -1.07051]
----
-Label        : 1
-Position     : [662.744, 841.48]
-Measurements : [1760.19, 362517, -0.253148, -0.549244]
----
-Label        : 1
-Position     : [659.618, 841.535]
-Measurements : [1759.12, 386165, -0.341652, -0.636809]
----
-Label        : 1
-Position     : [1394.55, 841.7]
-Measurements : [1318.22, 289341, -0.0578254, -0.768137]
----
-Label        : 1
-Position     : [1393.92, 843.227]
-Measurements : [1114.5, 316590, 0.0662469, -1.37404]
----
-Label        : 1
-Position     : [689.976, 844.064]
-Measurements : [1713.82, 213085, -0.192337, -0.0320576]
----
-Label        : 1
-Position     : [664.721, 844.966]
-Measurements : [1639.19, 328917, 0.0605871, -1.04421]
----
-Label        : 1
-Position     : [707.341, 845.123]
-Measurements : [1566.02, 156165, 0.552855, -0.00697981]
----
-Label        : 1
-Position     : [1396.99, 845.125]
-Measurements : [1255.95, 271208, -0.0655448, -0.837552]
----
-Label        : 1
-Position     : [706.142, 845.203]
-Measurements : [1592.19, 147406, 0.544595, 0.237633]
----
-Label        : 1
-Position     : [13.5127, 847.721]
-Measurements : [1584.98, 367069, -0.152733, -1.35335]
----
-Label        : 1
-Position     : [590.132, 847.762]
-Measurements : [1044.98, 643190, 0.355244, -1.64142]
----
-Label        : 1
-Position     : [8.68, 848.856]
-Measurements : [1711.14, 345707, -0.859543, -0.394889]
----
-Label        : 1
-Position     : [110.354, 849.309]
-Measurements : [853.596, 335338, 1.12422, -0.017195]
----
-Label        : 1
-Position     : [595.049, 849.98]
-Measurements : [1348, 508362, -0.109955, -1.45194]
----
-Label        : 1
-Position     : [993.792, 850.122]
-Measurements : [915.718, 401442, 0.637145, -0.859409]
----
-Label        : 1
-Position     : [12.6837, 851.051]
-Measurements : [2003.24, 168964, -1.29156, 1.49374]
----
-Label        : 1
-Position     : [593.112, 851.208]
-Measurements : [1606.55, 308071, -0.57708, -0.623877]
----
-Label        : 1
-Position     : [104.202, 851.349]
-Measurements : [1353.46, 410771, 0.113735, -0.935532]
----
-Label        : 1
-Position     : [11.2482, 852.281]
-Measurements : [2060.85, 120579, -1.17542, 1.54768]
----
-Label        : 1
-Position     : [990.073, 852.401]
-Measurements : [934.613, 391474, 0.823001, -0.501332]
----
-Label        : 1
-Position     : [106.984, 852.44]
-Measurements : [1316.43, 304185, -0.13726, -1.05284]
----
-Label        : 1
-Position     : [421.144, 852.952]
-Measurements : [779.29, 192547, 1.11826, -0.228148]
----
-Label        : 1
-Position     : [420.158, 853.031]
-Measurements : [727.772, 192207, 1.28991, 0.219668]
----
-Label        : 1
-Position     : [993.976, 853.432]
-Measurements : [959.583, 355747, 0.700384, -0.692653]
----
-Label        : 1
-Position     : [90.1196, 854.567]
-Measurements : [1225.8, 242224, -0.00433429, -1.09973]
----
-Label        : 1
-Position     : [403.868, 854.704]
-Measurements : [1012.63, 294462, 1.27885, 0.230693]
----
-Label        : 1
-Position     : [417.957, 855.686]
-Measurements : [592.937, 187145, 1.79708, 1.78397]
----
-Label        : 1
-Position     : [14.312, 856.024]
-Measurements : [1516.56, 502317, -0.10657, -1.62387]
----
-Label        : 1
-Position     : [94.696, 858.072]
-Measurements : [1256.24, 233511, -0.0519922, -1.26718]
----
-Label        : 1
-Position     : [402.712, 858.584]
-Measurements : [1140.94, 365857, 0.646759, -1.17146]
----
-Label        : 1
-Position     : [1088.95, 858.617]
-Measurements : [639.46, 320670, 1.53932, 0.754779]
----
-Label        : 1
-Position     : [9.61627, 858.619]
-Measurements : [1362.01, 538862, 0.0774656, -1.71921]
----
-Label        : 1
-Position     : [407.178, 858.736]
-Measurements : [813.824, 358104, 1.40807, 0.538078]
----
-Label        : 1
-Position     : [86.9959, 859.599]
-Measurements : [1315.49, 208442, -0.100612, -1.31077]
----
-Label        : 1
-Position     : [1350.27, 860.121]
-Measurements : [1360.53, 466743, 0.31565, -1.10715]
----
-Label        : 1
-Position     : [87.528, 861.144]
-Measurements : [1347.13, 190787, -0.0978204, -1.34031]
----
-Label        : 1
-Position     : [398.699, 861.411]
-Measurements : [1127.94, 390716, 0.556052, -1.20021]
----
-Label        : 1
-Position     : [90.8185, 862.803]
-Measurements : [1308.74, 218087, 0.116613, -1.41721]
----
-Label        : 1
-Position     : [84.8054, 863.139]
-Measurements : [1304.88, 270682, -0.0658039, -1.12477]
----
-Label        : 1
-Position     : [1092.28, 863.16]
-Measurements : [1103.4, 429164, 0.566091, -1.0663]
----
-Label        : 1
-Position     : [1351.54, 863.777]
-Measurements : [1657.46, 491844, -0.343795, -1.09062]
----
-Label        : 1
-Position     : [536.344, 864.216]
-Measurements : [1392.48, 504212, 0.0501853, -1.06102]
----
-Label        : 1
-Position     : [539.136, 864.336]
-Measurements : [1301.44, 342270, 0.253072, -0.751042]
----
-Label        : 1
-Position     : [394.52, 865.24]
-Measurements : [813.826, 242964, 1.46898, 1.19216]
----
-Label        : 1
-Position     : [536.249, 865.286]
-Measurements : [1466.3, 423626, 0.0638285, -0.940062]
----
-Label        : 1
-Position     : [1351.97, 865.334]
-Measurements : [1792.51, 366586, -0.637944, -0.320197]
----
-Label        : 1
-Position     : [1352.46, 866.495]
-Measurements : [1969.74, 227778, -0.660137, 0.632833]
----
-Label        : 1
-Position     : [1089.01, 866.649]
-Measurements : [915.721, 348570, 0.910774, -0.729368]
----
-Label        : 1
-Position     : [378.455, 867.208]
-Measurements : [797.688, 131558, 0.693292, -0.00532097]
----
-Label        : 1
-Position     : [390.851, 867.792]
-Measurements : [739.163, 253963, 1.71448, 1.76073]
----
-Label        : 1
-Position     : [1354.82, 868.282]
-Measurements : [2085.98, 96248.3, -0.541486, 0.804039]
----
-Label        : 1
-Position     : [374.459, 869.947]
-Measurements : [601.646, 103520, 1.39887, 1.23019]
----
-Label        : 1
-Position     : [1357.82, 870.712]
-Measurements : [1951.38, 255655, -0.930187, 0.0135338]
----
-Label        : 1
-Position     : [1356.31, 871.223]
-Measurements : [1937.93, 217556, -0.733659, -0.458504]
----
-Label        : 1
-Position     : [378.648, 871.384]
-Measurements : [913.122, 213766, 0.454937, -0.925105]
----
-Label        : 1
-Position     : [1357.28, 874.426]
-Measurements : [1755.66, 243534, -0.137658, -1.21485]
----
-Label        : 1
-Position     : [1359.45, 874.506]
-Measurements : [1714.99, 247016, -0.354065, -0.706264]
----
-Label        : 1
-Position     : [1335.43, 876.67]
-Measurements : [977.106, 190180, 0.805482, -0.0668259]
----
-Label        : 1
-Position     : [1331.47, 878.522]
-Measurements : [1113.42, 217978, 0.398027, -0.938594]
----
-Label        : 1
-Position     : [1360.14, 879.342]
-Measurements : [1504.3, 286266, -0.261859, -0.748138]
----
-Label        : 1
-Position     : [1360.6, 881.598]
-Measurements : [1308.77, 363854, -0.0981414, -1.35151]
----
-Label        : 1
-Position     : [1327.44, 882.36]
-Measurements : [1021.71, 186068, 0.622267, -0.562923]
----
-Label        : 1
-Position     : [1358.69, 884.162]
-Measurements : [1018.02, 366700, 0.663221, -0.834437]
----
-Label        : 1
-Position     : [1323.72, 885.397]
-Measurements : [987.997, 131056, 0.672591, 0.258901]
----
-Label        : 1
-Position     : [1370.23, 887.491]
-Measurements : [1196.16, 483304, 0.395851, -1.30308]
----
-Label        : 1
-Position     : [1321.64, 889.991]
-Measurements : [952.203, 119131, 0.526279, -0.42824]
----
-Label        : 1
-Position     : [1367.11, 891.22]
-Measurements : [1581.9, 379109, -0.371943, -0.742567]
----
-Label        : 1
-Position     : [1370.21, 892.802]
-Measurements : [1749.54, 333167, -0.436785, -0.755464]
----
-Label        : 1
-Position     : [1317.4, 894.677]
-Measurements : [987.684, 163583, 0.974074, 0.672006]
----
-Label        : 1
-Position     : [441.28, 896.605]
-Measurements : [754.039, 266570, 1.07992, -0.415476]
----
-Label        : 1
-Position     : [1338.58, 897.148]
-Measurements : [844.142, 370783, 0.866646, -0.887677]
----
-Label        : 1
-Position     : [310.051, 897.317]
-Measurements : [1642.91, 450312, 0.431277, -1.30074]
----
-Label        : 1
-Position     : [443.73, 897.595]
-Measurements : [970.346, 372047, 0.597941, -0.922058]
----
-Label        : 1
-Position     : [1370.38, 897.774]
-Measurements : [1736.55, 252793, -0.153219, -0.612233]
----
-Label        : 1
-Position     : [1338.95, 899.334]
-Measurements : [929.947, 377326, 0.609126, -1.17868]
----
-Label        : 1
-Position     : [1372.53, 899.488]
-Measurements : [1617.85, 327265, -0.166481, -0.959381]
----
-Label        : 1
-Position     : [311.118, 899.598]
-Measurements : [1694.55, 458203, 0.145349, -1.2514]
----
-Label        : 1
-Position     : [311.576, 900.056]
-Measurements : [1649.26, 509218, 0.147253, -1.31435]
----
-Label        : 1
-Position     : [1340.89, 900.231]
-Measurements : [1210.14, 396268, 0.0399636, -1.22353]
----
-Label        : 1
-Position     : [1365.84, 900.386]
-Measurements : [1347.79, 226145, 0.0430409, -0.888964]
----
-Label        : 1
-Position     : [1370.8, 901.031]
-Measurements : [1654.92, 207509, -0.217958, -0.353529]
----
-Label        : 1
-Position     : [444.184, 901.08]
-Measurements : [1408.5, 249528, 0.00859062, -0.0444654]
----
-Label        : 1
-Position     : [1371.71, 901.885]
-Measurements : [1669.16, 227071, -0.334292, -0.384933]
----
-Label        : 1
-Position     : [1313.45, 902.279]
-Measurements : [1155.08, 263720, 0.734679, -0.573918]
----
-Label        : 1
-Position     : [1344.99, 903.918]
-Measurements : [1664.24, 131069, -0.158953, -0.355933]
----
-Label        : 1
-Position     : [1369.98, 903.918]
-Measurements : [1552.83, 228220, -0.40741, -0.663213]
----
-Label        : 1
-Position     : [1347.3, 904.789]
-Measurements : [1647.86, 194091, -0.571519, 0.058703]
----
-Label        : 1
-Position     : [1312.19, 905.26]
-Measurements : [1214.92, 320095, 0.599268, -0.947832]
----
-Label        : 1
-Position     : [1381.36, 905.843]
-Measurements : [1433.63, 366810, 0.00304647, -1.13223]
----
-Label        : 1
-Position     : [1311.4, 906.375]
-Measurements : [1288.25, 352475, 0.512827, -1.00289]
----
-Label        : 1
-Position     : [1317.99, 906.767]
-Measurements : [802.219, 244578, 1.82594, 2.25175]
----
-Label        : 1
-Position     : [1377.76, 907.194]
-Measurements : [1812.67, 202106, -0.490066, -0.456009]
----
-Label        : 1
-Position     : [1344.2, 908.08]
-Measurements : [1801.69, 247778, -0.207808, -0.247204]
----
-Label        : 1
-Position     : [1309.77, 909.028]
-Measurements : [1503.32, 365710, 0.132882, -1.26226]
----
-Label        : 1
-Position     : [1304.98, 909.298]
-Measurements : [1114.62, 257036, 1.48359, 0.992389]
----
-Label        : 1
-Position     : [1349.09, 909.652]
-Measurements : [1808.35, 187628, 0.409092, -0.203753]
----
-Label        : 1
-Position     : [1314.06, 910.128]
-Measurements : [1241.28, 552366, 0.560998, -1.12998]
----
-Label        : 1
-Position     : [278.78, 910.639]
-Measurements : [1052.43, 198290, 0.709195, -0.44075]
----
-Label        : 1
-Position     : [1377.47, 910.662]
-Measurements : [1805.52, 205937, -0.4432, -0.489332]
----
-Label        : 1
-Position     : [1310.99, 910.881]
-Measurements : [1555.26, 428401, 0.0515261, -1.12426]
----
-Label        : 1
-Position     : [1344.38, 911.067]
-Measurements : [1705.3, 348722, -0.280617, -0.572913]
----
-Label        : 1
-Position     : [1355.08, 911.266]
-Measurements : [1334.08, 178895, 0.38702, -0.0808079]
----
-Label        : 1
-Position     : [1308.34, 912.263]
-Measurements : [1651.1, 417759, -0.106689, -1.06493]
----
-Label        : 1
-Position     : [1380.88, 912.322]
-Measurements : [1863.7, 217354, 0.09701, -0.801904]
----
-Label        : 1
-Position     : [1313.28, 912.39]
-Measurements : [1374.87, 603493, 0.303465, -1.39198]
----
-Label        : 1
-Position     : [1379.81, 912.929]
-Measurements : [1826.95, 207047, -0.0182558, -0.835847]
----
-Label        : 1
-Position     : [1315.99, 912.974]
-Measurements : [1089.22, 523414, 0.905834, -0.723987]
----
-Label        : 1
-Position     : [1345.1, 913.112]
-Measurements : [1656.43, 375478, -0.134821, -0.708498]
----
-Label        : 1
-Position     : [1309.8, 913.827]
-Measurements : [1653.29, 424036, -0.168739, -0.998167]
----
-Label        : 1
-Position     : [1378.64, 914.07]
-Measurements : [1754.65, 315330, -0.149315, -0.606496]
----
-Label        : 1
-Position     : [1347.47, 914.105]
-Measurements : [1662.43, 324659, 0.123628, -0.606828]
----
-Label        : 1
-Position     : [1307.72, 914.158]
-Measurements : [1562.79, 476833, 0.0181253, -1.19859]
----
-Label        : 1
-Position     : [279.009, 914.3]
-Measurements : [1366.56, 388548, 0.0890594, -0.935212]
----
-Label        : 1
-Position     : [282.6, 915.312]
-Measurements : [1487.31, 361021, -0.119785, -0.958643]
----
-Label        : 1
-Position     : [1350.72, 916.206]
-Measurements : [1543.63, 247092, 0.268943, 0.293164]
----
-Label        : 1
-Position     : [1304.13, 916.83]
-Measurements : [1185.31, 464956, 0.684796, -0.723125]
----
-Label        : 1
-Position     : [1384.22, 917.527]
-Measurements : [2022.49, 317242, -0.743431, 0.0562226]
----
-Label        : 1
-Position     : [1380.29, 917.839]
-Measurements : [1892.03, 310838, -0.269586, -0.727556]
----
-Label        : 1
-Position     : [9.704, 917.872]
-Measurements : [1677.17, 344801, -0.0800956, -0.979602]
----
-Label        : 1
-Position     : [1306.08, 918.254]
-Measurements : [1153.55, 579639, 0.70006, -0.88961]
----
-Label        : 1
-Position     : [1382.67, 918.254]
-Measurements : [2033.86, 258517, -0.378087, -0.504246]
----
-Label        : 1
-Position     : [254.44, 918.896]
-Measurements : [981.842, 225045, 1.12517, 0.722067]
----
-Label        : 1
-Position     : [1357.82, 919.479]
-Measurements : [1411.59, 169269, 0.291539, -0.443166]
----
-Label        : 1
-Position     : [14.2546, 919.735]
-Measurements : [1422.03, 435005, 0.445337, -1.21085]
----
-Label        : 1
-Position     : [258.811, 920.619]
-Measurements : [755.978, 264977, 1.76497, 2.00019]
----
-Label        : 1
-Position     : [13.3561, 920.786]
-Measurements : [1410.39, 378258, 0.446486, -1.14964]
----
-Label        : 1
-Position     : [396.701, 921.349]
-Measurements : [851.464, 159996, 0.111258, -1.57735]
----
-Label        : 1
-Position     : [1386.77, 921.53]
-Measurements : [1922.41, 233572, -0.216135, -0.277221]
----
-Label        : 1
-Position     : [250.275, 922.04]
-Measurements : [749.487, 219285, 1.70187, 2.12975]
----
-Label        : 1
-Position     : [1388.03, 923.141]
-Measurements : [1829.97, 211304, -0.81067, 0.407732]
----
-Label        : 1
-Position     : [396.742, 923.556]
-Measurements : [975.906, 122734, -0.467624, -1.0378]
----
-Label        : 1
-Position     : [1358.51, 923.596]
-Measurements : [1653.38, 168150, -0.316608, -0.74935]
----
-Label        : 1
-Position     : [1382.68, 923.698]
-Measurements : [1621.07, 399783, -0.189171, -0.914576]
----
-Label        : 1
-Position     : [229.496, 924.766]
-Measurements : [1467.21, 151784, 0.642844, 0.124609]
----
-Label        : 1
-Position     : [11.752, 926.064]
-Measurements : [1088.83, 195833, 0.53577, -0.345884]
----
-Label        : 1
-Position     : [399.622, 926.262]
-Measurements : [1108.24, 36530.4, -0.225094, 1.15346]
----
-Label        : 1
-Position     : [1362.37, 926.38]
-Measurements : [1777.85, 323361, -0.187217, -0.537177]
----
-Label        : 1
-Position     : [11.9413, 926.939]
-Measurements : [1088.83, 195833, 0.53577, -0.345884]
----
-Label        : 1
-Position     : [1360.68, 926.962]
-Measurements : [1885.33, 225604, -0.252562, 0.534732]
----
-Label        : 1
-Position     : [1391.23, 928.576]
-Measurements : [1614.94, 223249, -0.809094, -0.155135]
----
-Label        : 1
-Position     : [233.448, 928.624]
-Measurements : [1379.28, 368824, 0.168835, -0.869992]
----
-Label        : 1
-Position     : [1388.41, 928.903]
-Measurements : [1734.74, 137741, -0.727034, 0.556726]
----
-Label        : 1
-Position     : [387.983, 929.422]
-Measurements : [1005.45, 195362, 0.856133, 0.591008]
----
-Label        : 1
-Position     : [383.225, 929.7]
-Measurements : [1030.51, 271277, 0.571568, -0.601491]
----
-Label        : 1
-Position     : [15.453, 930.93]
-Measurements : [597.419, 50386.3, 1.79512, 2.64196]
----
-Label        : 1
-Position     : [1385.97, 930.933]
-Measurements : [1451.7, 250329, -0.40493, -0.896998]
----
-Label        : 1
-Position     : [1297.31, 930.943]
-Measurements : [1085.54, 297588, 0.51451, -0.775278]
----
-Label        : 1
-Position     : [1359.33, 930.969]
-Measurements : [2006.63, 187830, 0.129712, -0.113602]
----
-Label        : 1
-Position     : [383.201, 931.922]
-Measurements : [1073.06, 230781, 0.71069, -0.323576]
----
-Label        : 1
-Position     : [1298.97, 932.232]
-Measurements : [1287.64, 316610, 0.190588, -1.00842]
----
-Label        : 1
-Position     : [1392.48, 932.37]
-Measurements : [1624.03, 205862, -0.994572, 0.209212]
----
-Label        : 1
-Position     : [231.717, 933.143]
-Measurements : [788.692, 261960, 1.41576, 0.912168]
----
-Label        : 1
-Position     : [1392.09, 933.409]
-Measurements : [1553.88, 228873, -0.832886, -0.297996]
----
-Label        : 1
-Position     : [1299.93, 933.836]
-Measurements : [1336.81, 307293, 0.193923, -1.00883]
----
-Label        : 1
-Position     : [1364.15, 934.026]
-Measurements : [1727.94, 239776, 0.582757, 0.0616711]
----
-Label        : 1
-Position     : [1358.67, 935.089]
-Measurements : [1746.49, 301812, 0.425325, -0.322816]
----
-Label        : 1
-Position     : [1363.01, 936.294]
-Measurements : [1740.47, 206841, 0.742914, 0.547904]
----
-Label        : 1
-Position     : [1367.89, 936.402]
-Measurements : [1474.94, 214456, 0.291324, -0.240963]
----
-Label        : 1
-Position     : [1364.93, 936.909]
-Measurements : [1681.28, 189985, 0.793199, 0.552424]
----
-Label        : 1
-Position     : [1295.84, 937.113]
-Measurements : [1744.59, 254166, -0.655035, -0.0659341]
----
-Label        : 1
-Position     : [238.568, 937.328]
-Measurements : [1752.95, 727925, -0.113518, -1.42252]
----
-Label        : 1
-Position     : [1395.21, 937.415]
-Measurements : [960.416, 374398, 0.723517, -1.18658]
----
-Label        : 1
-Position     : [1292.5, 937.881]
-Measurements : [1576.62, 342358, -0.162155, -1.15955]
----
-Label        : 1
-Position     : [1296.9, 937.911]
-Measurements : [1757.45, 240680, -0.642067, -0.0605149]
----
-Label        : 1
-Position     : [1291.66, 939.699]
-Measurements : [1655.87, 350009, -0.244849, -1.13558]
----
-Label        : 1
-Position     : [241.941, 940.249]
-Measurements : [1421.3, 1.00111e+06, 0.39758, -1.49566]
----
-Label        : 1
-Position     : [1297.07, 940.39]
-Measurements : [1764.71, 371315, -0.408776, -0.837409]
----
-Label        : 1
-Position     : [1290.94, 940.608]
-Measurements : [1631.15, 359476, 0.051328, -1.16273]
----
-Label        : 1
-Position     : [235.818, 940.667]
-Measurements : [1632.58, 957543, -0.0286218, -1.57044]
----
-Label        : 1
-Position     : [1293.96, 941.008]
-Measurements : [1935.94, 255872, -0.38041, -0.147309]
----
-Label        : 1
-Position     : [1366.7, 941.209]
-Measurements : [1621, 164736, 0.254338, -0.470992]
----
-Label        : 1
-Position     : [1368.61, 944.387]
-Measurements : [1918.95, 264503, -0.491088, -0.661444]
----
-Label        : 1
-Position     : [1292.15, 944.486]
-Measurements : [1936.13, 239531, -0.431684, 0.297378]
----
-Label        : 1
-Position     : [208.076, 945.005]
-Measurements : [1776.23, 544390, -0.392976, -1.29132]
----
-Label        : 1
-Position     : [207.848, 946.032]
-Measurements : [1730.32, 584975, -0.313938, -1.3991]
----
-Label        : 1
-Position     : [1369.11, 946.276]
-Measurements : [2064.8, 199610, -0.540836, -0.163299]
----
-Label        : 1
-Position     : [1296.95, 946.402]
-Measurements : [1611.98, 575976, -0.136454, -1.35887]
----
-Label        : 1
-Position     : [203.292, 947]
-Measurements : [1529.59, 464873, 0.166712, -1.19976]
----
-Label        : 1
-Position     : [1369.16, 947.353]
-Measurements : [2093.44, 168690, -0.366583, -0.451855]
----
-Label        : 1
-Position     : [195.048, 947.568]
-Measurements : [1291.4, 320011, 0.34542, -0.736432]
----
-Label        : 1
-Position     : [1371.11, 947.7]
-Measurements : [1976.45, 191598, -0.399862, -0.502816]
----
-Label        : 1
-Position     : [1290.92, 948.582]
-Measurements : [1703.03, 435514, -0.361576, -0.8701]
----
-Label        : 1
-Position     : [196.05, 950.246]
-Measurements : [1044.09, 406448, 0.725438, -0.619105]
----
-Label        : 1
-Position     : [1295.56, 950.571]
-Measurements : [1245.72, 645404, 0.651453, -1.13169]
----
-Label        : 1
-Position     : [1372.97, 951.201]
-Measurements : [1922.69, 219277, -0.27453, -0.934681]
----
-Label        : 1
-Position     : [1372.43, 951.858]
-Measurements : [1922.69, 219277, -0.27453, -0.934681]
----
-Label        : 1
-Position     : [191.506, 951.889]
-Measurements : [878.1, 319047, 1.26602, 0.503631]
----
-Label        : 1
-Position     : [1287.53, 952.088]
-Measurements : [1048.82, 407059, 0.767239, -0.977461]
----
-Label        : 1
-Position     : [1376.4, 954.064]
-Measurements : [1582.31, 246184, 0.125043, -0.313266]
----
-Label        : 1
-Position     : [888.663, 954.188]
-Measurements : [1159.73, 23273.9, -1.05327, 2.42529]
----
-Label        : 1
-Position     : [841.554, 954.816]
-Measurements : [979.789, 365070, 0.734822, -1.08396]
----
-Label        : 1
-Position     : [840.209, 956.297]
-Measurements : [1253.09, 441696, 0.242059, -1.40154]
----
-Label        : 1
-Position     : [885.606, 956.63]
-Measurements : [1239.21, 116137, 1.15831, 2.26557]
----
-Label        : 1
-Position     : [839.67, 957.321]
-Measurements : [1475.47, 409509, -0.0776988, -1.14681]
----
-Label        : 1
-Position     : [1374.89, 957.593]
-Measurements : [1540.92, 273953, 0.168189, -0.634327]
----
-Label        : 1
-Position     : [839.73, 957.858]
-Measurements : [1475.47, 409509, -0.0776988, -1.14681]
----
-Label        : 1
-Position     : [883.191, 958.106]
-Measurements : [1226.58, 281657, 0.36399, -0.120447]
----
-Label        : 1
-Position     : [1287.83, 958.414]
-Measurements : [1188.42, 392427, 0.451114, -1.15636]
----
-Label        : 1
-Position     : [1285.41, 958.77]
-Measurements : [1244.06, 390274, 0.293909, -1.26782]
----
-Label        : 1
-Position     : [1379.02, 958.919]
-Measurements : [1452.55, 212764, -0.0662891, -0.542317]
----
-Label        : 1
-Position     : [887.32, 959.206]
-Measurements : [1289.12, 175148, 1.253, 1.39717]
----
-Label        : 1
-Position     : [178.678, 959.246]
-Measurements : [727.864, 115788, 0.698264, -0.893239]
----
-Label        : 1
-Position     : [834.72, 959.368]
-Measurements : [1473.53, 282455, 0.17718, -0.792214]
----
-Label        : 1
-Position     : [281.167, 959.472]
-Measurements : [1384.4, 574360, 0.148977, -1.39461]
----
-Label        : 1
-Position     : [1287.24, 960.05]
-Measurements : [1363.4, 399184, 0.197987, -1.29322]
----
-Label        : 1
-Position     : [180.867, 960.145]
-Measurements : [811.565, 147067, 0.572313, -0.79385]
----
-Label        : 1
-Position     : [1375.51, 960.314]
-Measurements : [1477.23, 297461, 0.16776, -0.117573]
----
-Label        : 1
-Position     : [836.454, 960.316]
-Measurements : [1604.09, 255789, 0.0548937, -0.684292]
----
-Label        : 1
-Position     : [883.967, 960.726]
-Measurements : [1184.06, 320393, 0.364136, -0.490117]
----
-Label        : 1
-Position     : [1372.55, 960.819]
-Measurements : [1213.1, 317284, 0.225814, -0.76732]
----
-Label        : 1
-Position     : [181.736, 960.88]
-Measurements : [821.101, 138823, 0.610745, -0.6679]
----
-Label        : 1
-Position     : [287.251, 961.625]
-Measurements : [1045.38, 721053, 0.987592, -0.6074]
----
-Label        : 1
-Position     : [839.617, 962.3]
-Measurements : [1505.98, 347870, -0.10427, -0.87655]
----
-Label        : 1
-Position     : [880.215, 962.714]
-Measurements : [917.971, 314032, 0.904646, -0.121773]
----
-Label        : 1
-Position     : [1377.76, 962.918]
-Measurements : [1717.5, 287861, -0.0890835, -0.53074]
----
-Label        : 1
-Position     : [897.49, 963.068]
-Measurements : [992.493, 123270, 0.677473, 0.387253]
----
-Label        : 1
-Position     : [1282.73, 963.327]
-Measurements : [1352.54, 433273, -0.0321354, -1.3333]
----
-Label        : 1
-Position     : [283.624, 963.44]
-Measurements : [1629.07, 593929, -0.104435, -1.32794]
----
-Label        : 1
-Position     : [1289.06, 964.131]
-Measurements : [1147.7, 498800, 0.581777, -1.20601]
----
-Label        : 1
-Position     : [1382.68, 964.62]
-Measurements : [1762.07, 247023, -0.242182, -0.021285]
----
-Label        : 1
-Position     : [281.159, 964.684]
-Measurements : [1806.79, 393250, -0.267757, -0.7197]
----
-Label        : 1
-Position     : [885.074, 965.368]
-Measurements : [1194.36, 303639, 0.605657, -0.551981]
----
-Label        : 1
-Position     : [267.288, 965.647]
-Measurements : [1212.79, 606103, 0.615202, -1.18908]
----
-Label        : 1
-Position     : [1385.18, 966.271]
-Measurements : [1618.88, 280590, -0.349398, -0.812694]
----
-Label        : 1
-Position     : [834.815, 966.46]
-Measurements : [1318.66, 255139, 0.780854, 0.11283]
----
-Label        : 1
-Position     : [906.39, 966.591]
-Measurements : [927.715, 215368, 0.761438, -0.607984]
----
-Label        : 1
-Position     : [279.652, 966.659]
-Measurements : [1697.84, 399210, 0.00594428, -0.716991]
----
-Label        : 1
-Position     : [1280.94, 966.849]
-Measurements : [1116.31, 445566, 0.535014, -1.16033]
----
-Label        : 1
-Position     : [1380.52, 967.415]
-Measurements : [1941.89, 153684, -0.157177, 0.0782797]
----
-Label        : 1
-Position     : [901.58, 967.689]
-Measurements : [1237.3, 315334, -0.00845597, -1.41541]
----
-Label        : 1
-Position     : [277.992, 968.56]
-Measurements : [1393.87, 376511, 0.354448, -0.664421]
----
-Label        : 1
-Position     : [881.1, 968.918]
-Measurements : [990.499, 202267, 0.648434, -0.236861]
----
-Label        : 1
-Position     : [834.601, 968.95]
-Measurements : [1321.05, 194508, 0.335078, -0.528258]
----
-Label        : 1
-Position     : [1381.85, 969.062]
-Measurements : [1861.88, 218240, -0.470967, 0.388907]
----
-Label        : 1
-Position     : [832.242, 969.803]
-Measurements : [1405.66, 195558, 0.164312, -0.749677]
----
-Label        : 1
-Position     : [1390.21, 969.824]
-Measurements : [1251.35, 199288, 0.139184, -0.902565]
----
-Label        : 1
-Position     : [881.902, 969.851]
-Measurements : [993.101, 152971, 0.309769, -0.891556]
----
-Label        : 1
-Position     : [1279.41, 970.221]
-Measurements : [1112.48, 367915, 0.449666, -1.15283]
----
-Label        : 1
-Position     : [266.216, 970.608]
-Measurements : [1597.04, 574038, -0.0380824, -1.50985]
----
-Label        : 1
-Position     : [1381.49, 970.79]
-Measurements : [1810.97, 259356, -0.737676, 0.505784]
----
-Label        : 1
-Position     : [834.041, 970.855]
-Measurements : [1349.53, 218768, 0.114165, -0.795617]
----
-Label        : 1
-Position     : [832.358, 971.375]
-Measurements : [1525.59, 227676, -0.0261145, -0.698119]
----
-Label        : 1
-Position     : [899.122, 971.785]
-Measurements : [1452.86, 159947, -0.238656, -0.489898]
----
-Label        : 1
-Position     : [829.576, 972.77]
-Measurements : [1547.52, 250192, 0.311495, -0.308267]
----
-Label        : 1
-Position     : [1282.32, 973.977]
-Measurements : [1526.38, 469876, -0.0336208, -0.84676]
----
-Label        : 1
-Position     : [896.581, 974.116]
-Measurements : [1309.6, 196984, 0.247839, -0.938235]
----
-Label        : 1
-Position     : [1385.54, 974.386]
-Measurements : [1645.3, 162172, -0.0592037, -0.591863]
----
-Label        : 1
-Position     : [270.791, 974.484]
-Measurements : [1152.94, 508081, 0.989463, -0.385044]
----
-Label        : 1
-Position     : [253.969, 974.856]
-Measurements : [1318.6, 512263, 0.413012, -1.39054]
----
-Label        : 1
-Position     : [831.129, 975.062]
-Measurements : [1679.04, 241175, 0.0265257, -0.246265]
----
-Label        : 1
-Position     : [897.535, 976.112]
-Measurements : [1358.78, 196563, 0.12645, -0.830182]
----
-Label        : 1
-Position     : [901.227, 976.191]
-Measurements : [1295.93, 264711, -0.0760443, -0.968626]
----
-Label        : 1
-Position     : [877.004, 976.29]
-Measurements : [1116.66, 225062, 0.377058, -0.670743]
----
-Label        : 1
-Position     : [826.286, 976.862]
-Measurements : [1351.26, 220933, 0.177212, -0.944346]
----
-Label        : 1
-Position     : [1284.15, 977.551]
-Measurements : [1821.92, 280682, 0.200975, -0.625485]
----
-Label        : 1
-Position     : [248.008, 978.166]
-Measurements : [1499.06, 699766, -0.0514878, -1.65725]
----
-Label        : 1
-Position     : [251.88, 978.288]
-Measurements : [1656.71, 488833, -0.117968, -1.45545]
----
-Label        : 1
-Position     : [876.193, 978.927]
-Measurements : [1149.59, 303422, 0.32204, -1.08348]
----
-Label        : 1
-Position     : [881.111, 979.819]
-Measurements : [1152.07, 218253, 1.06564, 0.74056]
----
-Label        : 1
-Position     : [897.484, 979.977]
-Measurements : [1162.16, 247030, 0.114829, -1.09992]
----
-Label        : 1
-Position     : [1386.36, 980.121]
-Measurements : [1369.07, 133664, 0.511641, 0.451447]
----
-Label        : 1
-Position     : [827.852, 980.386]
-Measurements : [1476.57, 191894, 0.0869782, -0.389603]
----
-Label        : 1
-Position     : [897.272, 980.399]
-Measurements : [1101.28, 259293, 0.35185, -1.09649]
----
-Label        : 1
-Position     : [955.127, 980.592]
-Measurements : [1214.9, 107748, 0.988645, 1.16339]
----
-Label        : 1
-Position     : [1281.46, 981.162]
-Measurements : [1485.92, 231315, 0.493536, 0.599135]
----
-Label        : 1
-Position     : [1392.4, 981.27]
-Measurements : [1260.96, 204932, 0.415416, 0.168656]
----
-Label        : 1
-Position     : [828.196, 981.294]
-Measurements : [1546.73, 213615, 0.311081, -0.251995]
----
-Label        : 1
-Position     : [1280.27, 981.759]
-Measurements : [1411.94, 194601, 0.310734, 0.383798]
----
-Label        : 1
-Position     : [1284.51, 982.712]
-Measurements : [1447.79, 338113, 0.547702, 0.110556]
----
-Label        : 1
-Position     : [1385.26, 983.696]
-Measurements : [1180.72, 177156, 0.0379326, -0.378221]
----
-Label        : 1
-Position     : [955.177, 983.774]
-Measurements : [1075.65, 180390, 0.709784, -0.102524]
----
-Label        : 1
-Position     : [829.41, 983.858]
-Measurements : [1389.14, 227555, -0.177149, -0.992502]
----
-Label        : 1
-Position     : [875.366, 984.073]
-Measurements : [1417.13, 539295, 0.154007, -1.31158]
----
-Label        : 1
-Position     : [897.658, 984.445]
-Measurements : [1169.97, 385368, 0.303398, -1.46837]
----
-Label        : 1
-Position     : [1384.29, 984.45]
-Measurements : [1051.99, 197370, 0.288829, -0.769384]
----
-Label        : 1
-Position     : [1392.5, 984.626]
-Measurements : [1346.61, 203993, 0.329467, -0.366172]
----
-Label        : 1
-Position     : [953.055, 984.735]
-Measurements : [1021.22, 203614, 0.831625, -0.242744]
----
-Label        : 1
-Position     : [820.918, 984.776]
-Measurements : [987.366, 151414, 0.459284, -0.507995]
----
-Label        : 1
-Position     : [831.953, 985.012]
-Measurements : [1129.68, 334292, 0.341506, -1.41518]
----
-Label        : 1
-Position     : [1400.35, 985.37]
-Measurements : [1050.77, 156916, 0.13651, -1.14777]
----
-Label        : 1
-Position     : [825.394, 985.711]
-Measurements : [1158.59, 302558, 0.171643, -1.38353]
----
-Label        : 1
-Position     : [1390.67, 986.844]
-Measurements : [1335.72, 231852, 0.10142, -0.421343]
----
-Label        : 1
-Position     : [874.373, 986.901]
-Measurements : [1497.22, 455005, 0.125584, -1.17985]
----
-Label        : 1
-Position     : [235.056, 987.666]
-Measurements : [823.383, 260125, 1.37442, 0.455146]
----
-Label        : 1
-Position     : [928.821, 987.682]
-Measurements : [864.292, 283639, 1.0375, -0.290745]
----
-Label        : 1
-Position     : [875.401, 988.633]
-Measurements : [1458.98, 484773, 0.172421, -1.21011]
----
-Label        : 1
-Position     : [876.574, 988.663]
-Measurements : [1443.8, 471873, 0.304372, -1.19915]
----
-Label        : 1
-Position     : [892.875, 988.736]
-Measurements : [1313.69, 352399, 0.0736347, -1.20572]
----
-Label        : 1
-Position     : [873.727, 988.988]
-Measurements : [1417.67, 548627, 0.119971, -1.31317]
----
-Label        : 1
-Position     : [895.436, 988.988]
-Measurements : [1323.42, 403326, -0.0106431, -1.40192]
----
-Label        : 1
-Position     : [1400.65, 988.995]
-Measurements : [1094.77, 157604, 0.125781, -1.12968]
----
-Label        : 1
-Position     : [1275.77, 989.542]
-Measurements : [957.331, 78178.5, 0.979546, 0.153178]
----
-Label        : 1
-Position     : [931.077, 989.802]
-Measurements : [976.837, 240082, 0.840538, -0.420916]
----
-Label        : 1
-Position     : [931.071, 989.807]
-Measurements : [976.837, 240082, 0.840538, -0.420916]
----
-Label        : 1
-Position     : [950.401, 990.117]
-Measurements : [1090.42, 340565, 0.620222, -1.06339]
----
-Label        : 1
-Position     : [1395.78, 990.361]
-Measurements : [1336.31, 173508, 0.508083, -0.226791]
----
-Label        : 1
-Position     : [823.788, 990.474]
-Measurements : [947.459, 263002, 0.662846, -0.981008]
----
-Label        : 1
-Position     : [877.057, 991.052]
-Measurements : [1147.23, 351626, 0.910869, -0.253719]
----
-Label        : 1
-Position     : [894.207, 991.446]
-Measurements : [1506.11, 233771, -0.0437177, -0.863989]
----
-Label        : 1
-Position     : [1271.75, 991.563]
-Measurements : [1068.1, 111909, 0.507661, -0.757213]
----
-Label        : 1
-Position     : [337.038, 991.959]
-Measurements : [1843.31, 597338, -0.380222, -1.28537]
----
-Label        : 1
-Position     : [234.472, 992.112]
-Measurements : [1199.61, 359850, 0.665756, -0.847942]
----
-Label        : 1
-Position     : [927.804, 992.513]
-Measurements : [905.049, 259122, 0.880369, -0.410013]
----
-Label        : 1
-Position     : [953.538, 992.785]
-Measurements : [1000.68, 358701, 0.877751, -0.825523]
----
-Label        : 1
-Position     : [890.335, 992.952]
-Measurements : [1244.63, 203391, 0.478306, -0.77062]
----
-Label        : 1
-Position     : [336.288, 993.472]
-Measurements : [1966.99, 667634, -0.431387, -1.31037]
----
-Label        : 1
-Position     : [228.84, 993.648]
-Measurements : [888.157, 219491, 0.977918, 0.430083]
----
-Label        : 1
-Position     : [338.687, 993.799]
-Measurements : [1777.53, 868985, -0.192584, -1.643]
----
-Label        : 1
-Position     : [1273.19, 993.931]
-Measurements : [1297.16, 227104, 0.700475, -0.527313]
----
-Label        : 1
-Position     : [1275.78, 994.132]
-Measurements : [1424.22, 238687, 0.447421, -0.910747]
----
-Label        : 1
-Position     : [822.937, 994.722]
-Measurements : [1076.47, 241128, 0.311301, -1.01506]
----
-Label        : 1
-Position     : [894.384, 995.16]
-Measurements : [1165.59, 344817, 0.441789, -1.02893]
----
-Label        : 1
-Position     : [899.112, 995.171]
-Measurements : [874.958, 377127, 1.30061, 0.185286]
----
-Label        : 1
-Position     : [236.654, 995.231]
-Measurements : [1108.41, 333085, 1.03938, -0.106948]
----
-Label        : 1
-Position     : [890.93, 995.542]
-Measurements : [1033.65, 241372, 0.688002, -0.503646]
----
-Label        : 1
-Position     : [891.275, 995.774]
-Measurements : [1090.8, 285980, 0.641451, -0.636577]
----
-Label        : 1
-Position     : [231.86, 996.209]
-Measurements : [1120.07, 309761, 1.00491, 0.103579]
----
-Label        : 1
-Position     : [1271.67, 996.505]
-Measurements : [1435.34, 134651, 0.466114, -0.459477]
----
-Label        : 1
-Position     : [950.422, 996.827]
-Measurements : [896.464, 380539, 1.05439, -0.539485]
----
-Label        : 1
-Position     : [224.103, 996.846]
-Measurements : [647.548, 91030.6, 0.941581, -0.386955]
----
-Label        : 1
-Position     : [931.881, 996.897]
-Measurements : [1069.97, 301124, 0.975649, 0.108209]
----
-Label        : 1
-Position     : [929.433, 997.18]
-Measurements : [1190.73, 388327, 0.616594, -0.605661]
----
-Label        : 1
-Position     : [1269.47, 998.164]
-Measurements : [1441.64, 93522.6, 0.56024, -0.13933]
----
-Label        : 1
-Position     : [923.878, 998.225]
-Measurements : [948.878, 366884, 0.777027, -0.704832]
----
-Label        : 1
-Position     : [1022.12, 999.198]
-Measurements : [1219.98, 493217, 0.551643, -1.08479]
----
-Label        : 1
-Position     : [213.992, 999.28]
-Measurements : [1030.47, 342705, 0.50527, -1.21772]
----
-Label        : 1
-Position     : [1392.66, 999.361]
-Measurements : [987.046, 257082, 0.705102, -0.484276]
----
-Label        : 1
-Position     : [995.609, 999.441]
-Measurements : [1377.52, 500426, 0.492417, -1.0831]
----
-Label        : 1
-Position     : [824.318, 999.503]
-Measurements : [1141.09, 178572, 0.568994, -0.35397]
----
-Label        : 1
-Position     : [1394.14, 1000.19]
-Measurements : [1184.25, 301255, 0.41854, -0.942255]
----
-Label        : 1
-Position     : [1392.1, 1000.64]
-Measurements : [984.914, 275909, 0.697065, -0.681816]
----
-Label        : 1
-Position     : [886.747, 1000.76]
-Measurements : [1089.03, 408982, 0.974528, -0.390945]
----
-Label        : 1
-Position     : [926.975, 1000.87]
-Measurements : [1275.47, 390118, 0.353751, -0.819639]
----
-Label        : 1
-Position     : [1267.72, 1000.92]
-Measurements : [1410.81, 161462, 0.262529, -0.405459]
----
-Label        : 1
-Position     : [1015.1, 1001.07]
-Measurements : [1273.03, 279041, 0.329967, -0.609171]
----
-Label        : 1
-Position     : [888.128, 1001.33]
-Measurements : [1127.05, 486644, 0.726622, -1.00996]
----
-Label        : 1
-Position     : [1019.48, 1001.39]
-Measurements : [1442.73, 360975, 0.00625498, -0.806646]
----
-Label        : 1
-Position     : [216.181, 1001.43]
-Measurements : [1105.2, 314518, 0.451184, -1.31583]
----
-Label        : 1
-Position     : [926.778, 1001.76]
-Measurements : [1284.46, 379248, 0.369351, -0.787604]
----
-Label        : 1
-Position     : [869.934, 1002.46]
-Measurements : [1390.57, 575316, 0.1615, -1.34199]
----
-Label        : 1
-Position     : [217.249, 1002.78]
-Measurements : [1067.01, 328301, 0.513509, -1.24531]
----
-Label        : 1
-Position     : [992.86, 1003.43]
-Measurements : [1779.6, 399661, -0.564617, -0.692851]
----
-Label        : 1
-Position     : [870.077, 1003.45]
-Measurements : [1440.52, 504865, 0.209036, -1.25108]
----
-Label        : 1
-Position     : [1269.21, 1003.88]
-Measurements : [1459.03, 128136, 0.663002, -0.357936]
----
-Label        : 0
-Position     : [282.567, 1003.91]
-Measurements : [1252.8, 25843.1, -0.0383469, 0.362406]
----
-Label        : 1
-Position     : [703.424, 1004.03]
-Measurements : [1048.61, 243968, 0.763644, -0.436417]
----
-Label        : 1
-Position     : [709.977, 1004.48]
-Measurements : [1061.13, 206013, 0.896454, 0.163068]
----
-Label        : 1
-Position     : [888.882, 1004.55]
-Measurements : [1141.59, 522293, 0.615074, -1.24156]
----
-Label        : 1
-Position     : [867.877, 1004.69]
-Measurements : [1655.86, 395553, -0.341958, -0.729228]
----
-Label        : 1
-Position     : [868.94, 1004.78]
-Measurements : [1633.78, 403401, -0.217203, -0.946224]
----
-Label        : 1
-Position     : [699.718, 1005.26]
-Measurements : [1138.25, 139985, 0.205838, -0.342353]
----
-Label        : 1
-Position     : [991.52, 1005.97]
-Measurements : [1882.88, 257856, -0.595033, -0.113627]
----
-Label        : 1
-Position     : [870.117, 1006.2]
-Measurements : [1621.85, 380527, 0.147772, -1.32299]
----
-Label        : 1
-Position     : [696.433, 1006.28]
-Measurements : [1140.91, 203703, 1.55049, 4.04098]
----
-Label        : 1
-Position     : [816.972, 1006.32]
-Measurements : [817.865, 171304, 0.782614, -0.658862]
----
-Label        : 1
-Position     : [995.586, 1006.45]
-Measurements : [1817.98, 382625, -0.518557, -0.947025]
----
-Label        : 1
-Position     : [867.066, 1006.56]
-Measurements : [1794.13, 276251, -0.372612, -0.366228]
----
-Label        : 1
-Position     : [712.407, 1006.69]
-Measurements : [1010.34, 158028, 0.929452, 0.548854]
----
-Label        : 1
-Position     : [696.714, 1006.9]
-Measurements : [1140.91, 203703, 1.55049, 4.04098]
----
-Label        : 1
-Position     : [946.753, 1006.9]
-Measurements : [1082.25, 462942, 0.647338, -1.08076]
----
-Label        : 1
-Position     : [710.077, 1007.22]
-Measurements : [1227.13, 301506, 0.866963, -0.1058]
----
-Label        : 1
-Position     : [1019.48, 1007.53]
-Measurements : [1693.31, 251576, -0.0321073, -0.569145]
----
-Label        : 1
-Position     : [693.992, 1007.61]
-Measurements : [1565.98, 376726, 0.746471, -0.134896]
----
-Label        : 1
-Position     : [924.927, 1007.83]
-Measurements : [1200.83, 331153, 0.368665, -0.861583]
----
-Label        : 1
-Position     : [704.215, 1007.92]
-Measurements : [1282.04, 377201, 0.612415, -0.585596]
----
-Label        : 1
-Position     : [947.394, 1007.94]
-Measurements : [1187.06, 489086, 0.440758, -1.25083]
----
-Label        : 1
-Position     : [1265.95, 1008.18]
-Measurements : [1211.42, 202578, 0.746548, 0.0767465]
----
-Label        : 1
-Position     : [992.45, 1008.35]
-Measurements : [1838.33, 274682, -0.375355, -0.516956]
----
-Label        : 1
-Position     : [1273.46, 1008.42]
-Measurements : [1608.58, 302901, -0.015788, -1.12544]
----
-Label        : 1
-Position     : [824.096, 1008.47]
-Measurements : [773.892, 144827, 1.03437, -0.0792007]
----
-Label        : 1
-Position     : [335.85, 1009.13]
-Measurements : [704.709, 180870, 1.46501, 0.967326]
----
-Label        : 1
-Position     : [80.4177, 1009.16]
-Measurements : [1237.15, 164794, 0.687169, -0.0888316]
----
-Label        : 1
-Position     : [987.753, 1009.31]
-Measurements : [1416.1, 393782, -0.182936, -1.09392]
----
-Label        : 1
-Position     : [918.862, 1009.34]
-Measurements : [851.816, 240039, 0.707326, -0.93859]
----
-Label        : 1
-Position     : [79.336, 1009.52]
-Measurements : [1249.22, 159618, 0.804945, -0.0250845]
----
-Label        : 1
-Position     : [186.436, 1009.55]
-Measurements : [1508.42, 512819, -0.437206, -1.35607]
----
-Label        : 1
-Position     : [1014.54, 1010.22]
-Measurements : [1347.25, 325720, 0.553551, -0.607395]
----
-Label        : 1
-Position     : [865.651, 1010.22]
-Measurements : [1790.28, 360478, -0.303782, -0.551975]
----
-Label        : 1
-Position     : [195.171, 1010.32]
-Measurements : [1209.92, 481432, 0.606674, -0.833103]
----
-Label        : 1
-Position     : [689.47, 1010.38]
-Measurements : [1805.01, 636897, 0.0295537, -1.13368]
----
-Label        : 1
-Position     : [673.432, 1010.39]
-Measurements : [1336.94, 384086, 0.00522749, -1.45692]
----
-Label        : 1
-Position     : [699.446, 1010.49]
-Measurements : [1230.52, 246358, 0.699893, 0.429139]
----
-Label        : 1
-Position     : [197.516, 1010.57]
-Measurements : [1007.05, 491115, 1.05784, -0.0912116]
----
-Label        : 0
-Position     : [284.955, 1010.59]
-Measurements : [1175.09, 34992.5, 0.439273, -0.52895]
----
-Label        : 1
-Position     : [1020.54, 1010.65]
-Measurements : [1638.64, 299475, 0.0354473, -0.446996]
----
-Label        : 1
-Position     : [819.962, 1010.66]
-Measurements : [1000.88, 192175, 0.401885, -0.845193]
----
-Label        : 1
-Position     : [865.838, 1010.66]
-Measurements : [1790.28, 360478, -0.303782, -0.551975]
----
-Label        : 1
-Position     : [1019.11, 1010.79]
-Measurements : [1665.97, 261209, 0.207698, -0.410138]
----
-Label        : 1
-Position     : [1021.94, 1010.79]
-Measurements : [1572.58, 380566, -0.0685909, -0.775831]
----
-Label        : 1
-Position     : [667.983, 1010.87]
-Measurements : [1403.72, 281906, 0.0296296, -0.897928]
----
-Label        : 1
-Position     : [984.209, 1011.02]
-Measurements : [1070.4, 341697, 0.165734, -1.55756]
----
-Label        : 1
-Position     : [949.623, 1011.02]
-Measurements : [1477.17, 489272, 0.202019, -1.11097]
----
-Label        : 1
-Position     : [925.642, 1011.05]
-Measurements : [1355, 168027, -0.0345495, -0.550903]
----
-Label        : 1
-Position     : [672.676, 1011.2]
-Measurements : [1410.35, 344015, -0.060858, -1.30959]
----
-Label        : 1
-Position     : [56.4424, 1011.35]
-Measurements : [1359.7, 108998, 0.983302, 0.0592867]
----
-Label        : 1
-Position     : [1266.52, 1011.39]
-Measurements : [1336.94, 247599, 1.14334, 0.649429]
----
-Label        : 1
-Position     : [949.78, 1011.48]
-Measurements : [1477.17, 489272, 0.202019, -1.11097]
----
-Label        : 1
-Position     : [986.242, 1011.82]
-Measurements : [1340.04, 355859, -0.313639, -1.18363]
----
-Label        : 1
-Position     : [1063.72, 1012.04]
-Measurements : [1334.52, 218216, 0.43014, -0.821782]
----
-Label        : 1
-Position     : [673.82, 1012.06]
-Measurements : [1313.82, 381209, 0.120558, -1.46653]
----
-Label        : 1
-Position     : [685.148, 1012.22]
-Measurements : [1354.64, 892285, 0.370112, -1.52039]
----
-Label        : 1
-Position     : [331.168, 1012.42]
-Measurements : [872.201, 167807, 0.808887, -0.581203]
----
-Label        : 1
-Position     : [186.477, 1012.43]
-Measurements : [1958.34, 311656, -0.87901, 0.25566]
----
-Label        : 1
-Position     : [945.756, 1012.45]
-Measurements : [1621.86, 332817, 0.286001, -0.772931]
----
-Label        : 1
-Position     : [195.048, 1012.59]
-Measurements : [1341.3, 493984, 0.368361, -1.10725]
----
-Label        : 1
-Position     : [922.879, 1012.74]
-Measurements : [1397.02, 194509, -0.394176, -0.492827]
----
-Label        : 1
-Position     : [927.255, 1012.75]
-Measurements : [1319.35, 168888, 0.345695, -0.781819]
----
-Label        : 1
-Position     : [870.076, 1012.77]
-Measurements : [1362.65, 346276, 0.995693, -0.378502]
----
-Label        : 1
-Position     : [944.969, 1012.9]
-Measurements : [1553.33, 335442, 0.422129, -0.641062]
----
-Label        : 1
-Position     : [1268.01, 1012.91]
-Measurements : [1505.08, 357987, 0.837311, -0.471997]
----
-Label        : 1
-Position     : [670.942, 1013.03]
-Measurements : [1398.96, 363892, -0.0279529, -1.35289]
----
-Label        : 1
-Position     : [720.199, 1013.06]
-Measurements : [2089.01, 248990, -0.384212, 0.283971]
----
-Label        : 1
-Position     : [721.875, 1013.18]
-Measurements : [2198.27, 219843, -0.155778, -0.182142]
----
-Label        : 1
-Position     : [184.294, 1013.21]
-Measurements : [1974.89, 352723, -0.964301, 0.507504]
----
-Label        : 1
-Position     : [1017.44, 1013.26]
-Measurements : [1531.1, 381005, 0.247374, -0.963339]
----
-Label        : 1
-Position     : [1088.62, 1013.6]
-Measurements : [930.082, 333463, 0.503889, -1.31492]
----
-Label        : 1
-Position     : [666.532, 1013.66]
-Measurements : [1087.4, 355167, 0.615583, -0.850368]
----
-Label        : 1
-Position     : [718.961, 1013.66]
-Measurements : [1858.75, 360391, -0.482358, -0.52879]
----
-Label        : 1
-Position     : [77.8269, 1013.67]
-Measurements : [1090.83, 296080, 0.508568, -1.00207]
----
-Label        : 1
-Position     : [186.856, 1014.13]
-Measurements : [2101.7, 221535, -0.704568, 0.395886]
----
-Label        : 1
-Position     : [1135.61, 1014.8]
-Measurements : [1228.02, 201853, 0.404409, -0.332593]
----
-Label        : 1
-Position     : [59.1503, 1014.96]
-Measurements : [1362.87, 193627, 0.434068, -0.849415]
----
-Label        : 1
-Position     : [1133.21, 1014.99]
-Measurements : [1159.18, 249625, 0.367655, -0.651623]
----
-Label        : 1
-Position     : [182.248, 1015.15]
-Measurements : [1803.83, 444958, -0.550203, -0.577508]
----
-Label        : 1
-Position     : [864.199, 1015.16]
-Measurements : [1580.98, 309313, 0.230618, -0.634304]
----
-Label        : 1
-Position     : [921.54, 1015.26]
-Measurements : [1374.97, 170005, -0.306728, -0.351232]
----
-Label        : 0
-Position     : [295.886, 1015.38]
-Measurements : [942.082, 26170.4, -1.51034, 2.19124]
----
-Label        : 1
-Position     : [333.215, 1015.51]
-Measurements : [657.631, 129639, 1.62728, 1.56926]
----
-Label        : 1
-Position     : [924.758, 1015.53]
-Measurements : [1375.63, 122818, 0.388242, -0.525013]
----
-Label        : 1
-Position     : [1086.67, 1015.6]
-Measurements : [1155.62, 297921, -0.082828, -1.31987]
----
-Label        : 1
-Position     : [55.272, 1015.66]
-Measurements : [1421.39, 228913, 0.114756, -1.18742]
----
-Label        : 1
-Position     : [988.764, 1015.72]
-Measurements : [1747, 192495, -0.70219, 0.628138]
----
-Label        : 1
-Position     : [916.676, 1015.95]
-Measurements : [873.293, 253077, 0.619499, -1.04358]
----
-Label        : 1
-Position     : [814.228, 1015.98]
-Measurements : [1596.2, 484646, -0.0122618, -1.15247]
----
-Label        : 1
-Position     : [1065.29, 1016.05]
-Measurements : [1479.7, 227645, -0.0332878, -1.08239]
----
-Label        : 1
-Position     : [1062.34, 1016.09]
-Measurements : [1544.05, 173198, -0.395395, -0.837399]
----
-Label        : 1
-Position     : [726.612, 1016.1]
-Measurements : [2505.57, 215771, -0.443571, -1.00279]
----
-Label        : 1
-Position     : [863.672, 1016.26]
-Measurements : [1480.3, 366424, 0.198295, -0.682477]
----
-Label        : 1
-Position     : [810.009, 1016.4]
-Measurements : [1611.51, 482474, 0.121139, -1.10883]
----
-Label        : 1
-Position     : [1135.03, 1016.42]
-Measurements : [1132.47, 264809, 0.479531, -0.858834]
----
-Label        : 1
-Position     : [882.738, 1016.43]
-Measurements : [808.791, 183831, 1.08666, -0.122231]
----
-Label        : 1
-Position     : [1012.11, 1016.54]
-Measurements : [1075.15, 284075, 0.640175, -0.200572]
----
-Label        : 1
-Position     : [1088.45, 1016.72]
-Measurements : [1174.37, 332319, -0.0538544, -1.48596]
----
-Label        : 1
-Position     : [1059.02, 1016.84]
-Measurements : [1415.14, 253189, -0.398233, -1.02097]
----
-Label        : 1
-Position     : [1007.46, 1017.03]
-Measurements : [808.232, 152855, 1.05815, 1.12507]
----
-Label        : 1
-Position     : [946.022, 1017.22]
-Measurements : [1264.41, 466567, 0.695817, -0.526606]
----
-Label        : 1
-Position     : [882.754, 1017.57]
-Measurements : [809.583, 181378, 1.1162, -0.0656009]
----
-Label        : 1
-Position     : [726.009, 1017.64]
-Measurements : [2507.08, 224688, -0.455013, -0.97684]
----
-Label        : 1
-Position     : [920.831, 1017.66]
-Measurements : [1313.54, 199176, -0.484826, -0.416592]
----
-Label        : 1
-Position     : [941.66, 1017.77]
-Measurements : [1053.78, 276813, 0.701267, -0.5894]
----
-Label        : 1
-Position     : [1062.49, 1017.77]
-Measurements : [1555.64, 169523, -0.333063, -0.878641]
----
-Label        : 1
-Position     : [736.771, 1017.96]
-Measurements : [2099.71, 384312, 0.314329, -0.894207]
----
-Label        : 1
-Position     : [738.224, 1018.28]
-Measurements : [1970.34, 390868, 0.566064, -0.615688]
----
-Label        : 1
-Position     : [886.533, 1018.6]
-Measurements : [718.274, 164740, 1.5961, 1.2792]
----
-Label        : 1
-Position     : [984.698, 1018.64]
-Measurements : [1664.76, 442059, -0.603316, -0.580731]
----
-Label        : 1
-Position     : [187.35, 1018.84]
-Measurements : [1859.34, 464470, -0.307346, -1.12286]
----
-Label        : 1
-Position     : [862.151, 1018.85]
-Measurements : [1264.47, 439200, 0.571673, -0.639777]
----
-Label        : 1
-Position     : [989.174, 1019]
-Measurements : [1744.47, 314479, -0.364403, -0.523934]
----
-Label        : 1
-Position     : [1264.32, 1019.05]
-Measurements : [1342.94, 74487.3, 0.300554, 0.745904]
----
-Label        : 1
-Position     : [1087.69, 1019.52]
-Measurements : [1344.85, 209870, -0.381023, -0.823602]
----
-Label        : 1
-Position     : [867.407, 1019.66]
-Measurements : [1107.94, 285563, 1.4988, 1.83825]
----
-Label        : 1
-Position     : [738.195, 1019.91]
-Measurements : [1991.97, 398039, 0.687494, -0.573591]
----
-Label        : 1
-Position     : [936.976, 1020.05]
-Measurements : [1033.79, 219848, 0.759106, -0.407318]
----
-Label        : 1
-Position     : [721.718, 1020.26]
-Measurements : [2227.96, 470670, -0.909593, -0.0630635]
----
-Label        : 1
-Position     : [738.533, 1020.27]
-Measurements : [2003.48, 415460, 0.699372, -0.6297]
----
-Label        : 1
-Position     : [1085.44, 1020.51]
-Measurements : [1376.22, 163704, -0.358114, -0.831619]
----
-Label        : 1
-Position     : [812.46, 1020.57]
-Measurements : [2077.83, 216722, -0.575687, 0.558243]
----
-Label        : 1
-Position     : [813.409, 1020.9]
-Measurements : [2067, 279280, -0.671777, 0.218464]
----
-Label        : 1
-Position     : [984.081, 1020.91]
-Measurements : [1795.22, 411441, -0.670199, -0.264932]
----
-Label        : 1
-Position     : [1016.45, 1020.92]
-Measurements : [854.084, 249593, 1.17708, 0.201372]
----
-Label        : 1
-Position     : [170.763, 1020.97]
-Measurements : [734.544, 129177, 0.817929, -0.615007]
----
-Label        : 1
-Position     : [986.102, 1020.99]
-Measurements : [1942.9, 225167, -0.391199, 0.0327143]
----
-Label        : 1
-Position     : [861.695, 1021.2]
-Measurements : [1126.9, 344118, 0.630967, -0.611473]
----
-Label        : 1
-Position     : [733.575, 1021.42]
-Measurements : [2325.61, 338787, 0.0441115, -1.03222]
----
-Label        : 1
-Position     : [741.358, 1021.42]
-Measurements : [1600.48, 132763, 0.217706, 0.087064]
----
-Label        : 1
-Position     : [1064.32, 1022.06]
-Measurements : [1382.81, 205260, 0.142206, -1.26915]
----
-Label        : 1
-Position     : [1268.34, 1022.33]
-Measurements : [1330.16, 197968, -0.223445, -0.612095]
----
-Label        : 1
-Position     : [1131.8, 1022.61]
-Measurements : [1085.66, 390413, 0.43084, -1.36876]
----
-Label        : 1
-Position     : [175.08, 1022.78]
-Measurements : [1166.78, 167020, -0.319599, -0.729617]
----
-Label        : 1
-Position     : [986.325, 1022.91]
-Measurements : [1866.08, 355468, -0.67631, -0.244939]
----
-Label        : 1
-Position     : [1009.93, 1022.98]
-Measurements : [1031.95, 522264, 0.837611, -0.843353]
----
-Label        : 1
-Position     : [986.306, 1023.1]
-Measurements : [1751.63, 460529, -0.473679, -0.913764]
----
-Label        : 1
-Position     : [1060.85, 1023.1]
-Measurements : [1576.69, 157170, -0.641684, -0.343446]
----
-Label        : 1
-Position     : [815.865, 1023.23]
-Measurements : [1805.28, 582916, -0.302783, -1.32167]
----
-Label        : 1
-Position     : [653.921, 1023.46]
-Measurements : [1388.13, 586669, 0.153146, -1.53759]
----
-Label        : 1
-Position     : [655.063, 1023.49]
-Measurements : [1428.91, 551402, 0.102909, -1.50477]
----
-Label        : 1
-Position     : [855.637, 1023.5]
-Measurements : [1093.63, 423964, 0.488439, -1.04901]
----
-Label        : 1
-Position     : [862.968, 1023.55]
-Measurements : [1119.25, 357591, 0.897059, -0.252146]
----
-Label        : 1
-Position     : [1267.46, 1023.56]
-Measurements : [1384.85, 187349, -0.237141, -0.541418]
----
-Label        : 1
-Position     : [1131.76, 1023.79]
-Measurements : [1121.9, 387088, 0.377765, -1.41704]
----
-Label        : 1
-Position     : [656.101, 1024.08]
-Measurements : [1418.41, 575588, 0.154365, -1.577]
----
-Label        : 1
-Position     : [749.55, 1024.29]
-Measurements : [2003.47, 254689, 0.190488, -0.639311]
----
-Label        : 1
-Position     : [1080.88, 1024.32]
-Measurements : [1165.23, 164307, 0.160771, -0.914066]
----
-Label        : 1
-Position     : [814.771, 1024.45]
-Measurements : [1751.83, 639973, -0.275082, -1.37547]
----
-Label        : 1
-Position     : [756.95, 1024.53]
-Measurements : [1505.41, 270464, -0.0122335, -1.01706]
----
-Label        : 1
-Position     : [1057.35, 1024.58]
-Measurements : [1583.02, 131644, -0.981531, 0.853314]
----
-Label        : 1
-Position     : [656.443, 1024.59]
-Measurements : [1418.41, 575588, 0.154365, -1.577]
----
-Label        : 1
-Position     : [761.921, 1024.92]
-Measurements : [1373.73, 222951, 0.158324, -0.943853]
----
-Label        : 1
-Position     : [1060.18, 1024.96]
-Measurements : [1554.76, 156984, -0.766471, -0.197774]
----
-Label        : 1
-Position     : [941.525, 1025]
-Measurements : [1312.09, 517932, 0.252852, -1.452]
----
-Label        : 1
-Position     : [940.841, 1025.14]
-Measurements : [1504.59, 491499, -0.129409, -1.33678]
----
-Label        : 1
-Position     : [1262.27, 1025.2]
-Measurements : [1701.02, 157066, -0.030413, -1.02152]
----
-Label        : 1
-Position     : [326.048, 1025.22]
-Measurements : [980.903, 218349, 0.906212, -0.191418]
----
-Label        : 1
-Position     : [1133.28, 1025.3]
-Measurements : [1191.19, 328797, 0.343022, -1.34542]
----
-Label        : 1
-Position     : [810.542, 1025.4]
-Measurements : [1539.92, 573228, -0.0647194, -1.34218]
----
-Label        : 1
-Position     : [1082.96, 1025.52]
-Measurements : [1277.9, 187131, -0.0419008, -1.03164]
----
-Label        : 1
-Position     : [642.366, 1025.53]
-Measurements : [1360.34, 487289, 0.210597, -1.41078]
----
-Label        : 1
-Position     : [880.863, 1025.66]
-Measurements : [1131.23, 314135, 0.380774, -1.07941]
----
-Label        : 1
-Position     : [762.185, 1025.69]
-Measurements : [1523.17, 215515, 0.0387865, -0.51673]
----
-Label        : 1
-Position     : [1083.4, 1025.84]
-Measurements : [1309.23, 185522, -0.123782, -1.0246]
----
-Label        : 1
-Position     : [177.093, 1025.86]
-Measurements : [1210.52, 113802, -0.172761, -0.929843]
----
-Label        : 1
-Position     : [944.637, 1025.93]
-Measurements : [1107.62, 572645, 0.802953, -0.963507]
----
-Label        : 1
-Position     : [328.101, 1026.07]
-Measurements : [843.462, 252753, 1.24953, 0.263152]
----
-Label        : 1
-Position     : [1257.29, 1026.1]
-Measurements : [1615.18, 266341, -0.198848, -1.00919]
----
-Label        : 1
-Position     : [858.874, 1026.22]
-Measurements : [1459.64, 420848, -0.0181147, -1.26278]
----
-Label        : 1
-Position     : [815.491, 1026.28]
-Measurements : [1355.87, 674522, 0.453067, -1.3458]
----
-Label        : 1
-Position     : [644.935, 1026.34]
-Measurements : [1294.27, 573366, 0.480333, -1.17723]
----
-Label        : 1
-Position     : [1057.99, 1026.37]
-Measurements : [1542.85, 137728, -0.791577, 0.323243]
----
-Label        : 1
-Position     : [935.254, 1026.67]
-Measurements : [1476.71, 354669, 0.173339, -1.11225]
----
-Label        : 1
-Position     : [1007.2, 1026.78]
-Measurements : [1350.49, 363882, 0.0987247, -0.793205]
----
-Label        : 1
-Position     : [812.409, 1026.82]
-Measurements : [1430.55, 598980, 0.169515, -1.4309]
----
-Label        : 0
-Position     : [272.167, 1027.14]
-Measurements : [1038.38, 48306.7, 0.966819, 0.267208]
----
-Label        : 1
-Position     : [756.103, 1027.16]
-Measurements : [1731.74, 230366, -0.0394879, -0.223761]
----
-Label        : 1
-Position     : [1064.07, 1027.57]
-Measurements : [1167.02, 145886, 0.587079, -0.65369]
----
-Label        : 0
-Position     : [257.6, 1027.78]
-Measurements : [1244.32, 27589.8, -0.135492, -0.0876443]
----
-Label        : 1
-Position     : [882.117, 1027.78]
-Measurements : [1285.63, 493198, 0.446053, -0.904536]
----
-Label        : 1
-Position     : [640.762, 1027.88]
-Measurements : [1659.11, 430891, -0.0117133, -0.967989]
----
-Label        : 1
-Position     : [1060.53, 1028.02]
-Measurements : [1464.46, 197097, -0.474405, -0.804553]
----
-Label        : 1
-Position     : [655.379, 1028.06]
-Measurements : [1125.46, 628663, 0.801665, -1.02351]
----
-Label        : 1
-Position     : [749.852, 1028.2]
-Measurements : [2075.55, 282163, -0.0782922, -0.504301]
----
-Label        : 0
-Position     : [251.691, 1028.21]
-Measurements : [1301.12, 23487.7, -0.680369, 0.843609]
----
-Label        : 1
-Position     : [860.775, 1028.35]
-Measurements : [1402.43, 398964, 0.309612, -1.18305]
----
-Label        : 1
-Position     : [754.064, 1028.61]
-Measurements : [1832.58, 232607, -0.0412702, 0.161256]
----
-Label        : 1
-Position     : [1080.66, 1028.79]
-Measurements : [1290.42, 163005, 0.151376, -0.800647]
----
-Label        : 1
-Position     : [324.001, 1028.87]
-Measurements : [997.57, 206857, 0.829232, 0.116221]
----
-Label        : 1
-Position     : [883.836, 1028.89]
-Measurements : [1301.99, 537376, 0.407466, -1.08298]
----
-Label        : 1
-Position     : [941.932, 1029.02]
-Measurements : [1701.05, 509993, -0.448159, -1.15055]
----
-Label        : 1
-Position     : [856.671, 1029.06]
-Measurements : [1398.6, 473694, 0.0240091, -1.35056]
----
-Label        : 1
-Position     : [763.886, 1029.21]
-Measurements : [1895.26, 241352, 0.54383, -0.635985]
----
-Label        : 1
-Position     : [940.022, 1029.24]
-Measurements : [1814.52, 390505, -0.638647, -0.609735]
----
-Label        : 1
-Position     : [880.454, 1029.34]
-Measurements : [1686.67, 360723, 0.0448314, -0.593499]
----
-Label        : 1
-Position     : [856.826, 1029.5]
-Measurements : [1398.6, 473694, 0.0240091, -1.35056]
----
-Label        : 1
-Position     : [1005.78, 1029.5]
-Measurements : [1460.45, 253642, 0.0529343, -0.417337]
----
-Label        : 1
-Position     : [1260.13, 1029.62]
-Measurements : [1903.15, 202993, -1.15059, 0.948008]
----
-Label        : 1
-Position     : [167.4, 1029.94]
-Measurements : [1184.95, 299723, 0.890291, -0.132169]
----
-Label        : 1
-Position     : [877.518, 1029.95]
-Measurements : [1681.92, 292992, 0.11127, -0.448425]
----
-Label        : 0
-Position     : [269.418, 1029.99]
-Measurements : [1007.05, 33156.2, 1.00998, 0.401464]
----
-Label        : 0
-Position     : [242.957, 1030.17]
-Measurements : [1255, 17424.4, 0.972226, 1.28589]
----
-Label        : 1
-Position     : [1085.1, 1030.21]
-Measurements : [1213.74, 312211, 0.187014, -1.36812]
----
-Label        : 1
-Position     : [1082.17, 1030.22]
-Measurements : [1386.25, 206264, -0.0311393, -0.962463]
----
-Label        : 1
-Position     : [857.55, 1030.27]
-Measurements : [1387.95, 471130, 0.100029, -1.37031]
----
-Label        : 1
-Position     : [1080.94, 1030.34]
-Measurements : [1387.24, 180290, 0.0585538, -0.683365]
----
-Label        : 1
-Position     : [935.021, 1030.51]
-Measurements : [1781.97, 356160, -0.486212, -0.757765]
----
-Label        : 1
-Position     : [159.303, 1030.58]
-Measurements : [1594.29, 338365, -0.0868325, -0.801627]
----
-Label        : 1
-Position     : [1265.33, 1030.69]
-Measurements : [1695.76, 273317, -0.462513, -0.875079]
----
-Label        : 1
-Position     : [1077.03, 1031.25]
-Measurements : [1282.05, 192334, 0.626232, 0.0199522]
----
-Label        : 0
-Position     : [238.223, 1031.41]
-Measurements : [1242.49, 20201.5, 1.26403, 1.00798]
----
-Label        : 1
-Position     : [1133.58, 1031.57]
-Measurements : [1138.15, 219688, 0.795919, -0.185524]
----
-Label        : 1
-Position     : [1007.2, 1031.7]
-Measurements : [1587, 215822, -0.011973, -0.360132]
----
-Label        : 1
-Position     : [1053.89, 1031.7]
-Measurements : [1632.77, 177635, -0.646424, 0.16489]
----
-Label        : 1
-Position     : [1261.45, 1031.75]
-Measurements : [1730.4, 392720, -0.76864, -0.749569]
----
-Label        : 1
-Position     : [935.162, 1031.77]
-Measurements : [1837.56, 326526, -0.571069, -0.575642]
----
-Label        : 1
-Position     : [987.652, 1031.91]
-Measurements : [1094.94, 289525, 0.761332, -0.686408]
----
-Label        : 0
-Position     : [286.021, 1032.02]
-Measurements : [809.406, 62497.4, -0.102264, -1.50675]
----
-Label        : 1
-Position     : [760.207, 1032.15]
-Measurements : [1838.53, 420923, -0.207162, -0.858116]
----
-Label        : 1
-Position     : [875.645, 1032.28]
-Measurements : [1668.09, 400150, -0.100869, -0.837956]
----
-Label        : 1
-Position     : [912.242, 1032.29]
-Measurements : [1383.41, 495121, -0.0460259, -1.38845]
----
-Label        : 1
-Position     : [146.655, 1032.44]
-Measurements : [976.944, 414042, 0.830243, -0.821906]
----
-Label        : 1
-Position     : [881.681, 1032.46]
-Measurements : [1866.71, 517759, -0.461058, -0.74473]
----
-Label        : 1
-Position     : [770.849, 1032.48]
-Measurements : [1482.36, 236619, -0.306471, -1.02113]
----
-Label        : 1
-Position     : [165.265, 1032.68]
-Measurements : [1441.79, 419345, 0.471949, -1.10492]
----
-Label        : 1
-Position     : [1054.74, 1032.72]
-Measurements : [1669.25, 137403, -0.218256, -0.588729]
----
-Label        : 1
-Position     : [167.408, 1032.75]
-Measurements : [1186.03, 287936, 1.0184, -0.0205003]
----
-Label        : 1
-Position     : [983.03, 1032.93]
-Measurements : [1266.25, 393476, 0.0919286, -1.56161]
----
-Label        : 1
-Position     : [1082.36, 1032.97]
-Measurements : [1400.67, 269406, 0.146483, -0.878449]
----
-Label        : 1
-Position     : [160.744, 1033.02]
-Measurements : [1654.36, 371864, -0.0919938, -1.01792]
----
-Label        : 1
-Position     : [641.956, 1033.32]
-Measurements : [1798.7, 652497, -0.262156, -1.22929]
----
-Label        : 1
-Position     : [150.804, 1033.44]
-Measurements : [1500.68, 423158, -0.400539, -0.989649]
----
-Label        : 1
-Position     : [913.804, 1033.56]
-Measurements : [1552.28, 446671, -0.225919, -1.07268]
----
-Label        : 1
-Position     : [1126.38, 1033.72]
-Measurements : [1046.26, 131728, -0.0776579, -1.03481]
----
-Label        : 1
-Position     : [915.27, 1033.85]
-Measurements : [1469.71, 511551, -0.0580154, -1.31591]
----
-Label        : 1
-Position     : [938.285, 1033.87]
-Measurements : [1870.49, 422287, -0.774424, -0.493746]
----
-Label        : 1
-Position     : [1129.3, 1034.03]
-Measurements : [1170.67, 120077, 0.0862773, -0.443696]
----
-Label        : 1
-Position     : [155.112, 1034.04]
-Measurements : [1866.39, 233003, -0.627476, 0.160293]
----
-Label        : 1
-Position     : [852.409, 1034.04]
-Measurements : [896.976, 279769, 1.03476, 0.430181]
----
-Label        : 1
-Position     : [637.977, 1034.07]
-Measurements : [1287.39, 779676, 0.484678, -1.39557]
----
-Label        : 1
-Position     : [1011.28, 1034.07]
-Measurements : [1293.2, 338822, 0.0345925, -1.18182]
----
-Label        : 1
-Position     : [813.164, 1034.09]
-Measurements : [975.84, 428454, 1.19036, -0.0895063]
----
-Label        : 1
-Position     : [1054.49, 1034.15]
-Measurements : [1674.4, 160525, -0.293266, -0.353772]
----
-Label        : 1
-Position     : [937.974, 1034.15]
-Measurements : [1875.16, 377493, -0.676508, -0.513657]
----
-Label        : 1
-Position     : [883.58, 1034.17]
-Measurements : [1658.68, 762804, -0.0607206, -1.51013]
----
-Label        : 1
-Position     : [1080.12, 1034.44]
-Measurements : [1502.55, 215302, -0.00869173, -0.625372]
----
-Label        : 1
-Position     : [1056.53, 1034.79]
-Measurements : [1610.14, 153409, -0.0891148, -0.630557]
----
-Label        : 1
-Position     : [807.369, 1034.87]
-Measurements : [1442.14, 509837, -0.0458841, -1.32057]
----
-Label        : 1
-Position     : [153.259, 1034.89]
-Measurements : [1870.4, 198087, -0.768268, 0.704529]
----
-Label        : 1
-Position     : [1005.16, 1035.2]
-Measurements : [1482.87, 282322, -0.213725, -0.869752]
----
-Label        : 1
-Position     : [929.824, 1035.22]
-Measurements : [1538.04, 338878, 0.272465, -1.4371]
----
-Label        : 1
-Position     : [808.494, 1035.23]
-Measurements : [1543.7, 523076, -0.0880556, -1.07464]
----
-Label        : 1
-Position     : [774.828, 1035.69]
-Measurements : [969.554, 332057, 1.07781, -0.334684]
----
-Label        : 1
-Position     : [1260.87, 1035.75]
-Measurements : [1154.42, 711934, 0.434936, -1.60446]
----
-Label        : 1
-Position     : [879.225, 1035.9]
-Measurements : [1967.05, 492325, -0.558617, -0.502236]
----
-Label        : 1
-Position     : [638.094, 1035.98]
-Measurements : [1348.38, 858416, 0.438947, -1.44851]
----
-Label        : 1
-Position     : [148.968, 1036.09]
-Measurements : [1426.17, 489730, -0.176841, -1.53226]
----
-Label        : 1
-Position     : [912.592, 1036.42]
-Measurements : [1529.38, 475893, -0.18154, -1.23275]
----
-Label        : 1
-Position     : [934.287, 1036.61]
-Measurements : [1907.55, 314310, -0.838271, -0.0506724]
----
-Label        : 1
-Position     : [770.767, 1036.78]
-Measurements : [1281.68, 328566, 0.208758, -1.37306]
----
-Label        : 0
-Position     : [239.025, 1036.85]
-Measurements : [1293.66, 16028.4, 1.08529, 0.360448]
----
-Label        : 1
-Position     : [911.26, 1037.02]
-Measurements : [1361.74, 564362, 0.162223, -1.46272]
----
-Label        : 1
-Position     : [913.631, 1037.12]
-Measurements : [1528.85, 468633, -0.0826088, -1.29753]
----
-Label        : 1
-Position     : [983.695, 1037.27]
-Measurements : [1497.89, 280322, -0.229051, -1.21935]
----
-Label        : 1
-Position     : [854.778, 1037.28]
-Measurements : [795.104, 129969, 0.519423, -1.2366]
----
-Label        : 1
-Position     : [158.596, 1037.38]
-Measurements : [1512.37, 464476, 0.205104, -1.25934]
----
-Label        : 1
-Position     : [627.62, 1037.41]
-Measurements : [1154.03, 300318, -0.0207254, -1.47387]
----
-Label        : 1
-Position     : [981.554, 1037.71]
-Measurements : [1611.52, 221362, -0.560527, -0.604136]
----
-Label        : 1
-Position     : [631.524, 1037.74]
-Measurements : [1015.36, 333822, 0.481501, -1.47823]
----
-Label        : 1
-Position     : [979.753, 1037.84]
-Measurements : [1644.13, 214514, -0.536419, -0.433746]
----
-Label        : 1
-Position     : [1055.53, 1038.25]
-Measurements : [1397.33, 349448, -0.0910156, -1.19059]
----
-Label        : 1
-Position     : [155.898, 1038.33]
-Measurements : [1628.8, 421966, -0.151455, -1.27603]
----
-Label        : 1
-Position     : [322.976, 1038.53]
-Measurements : [1139.71, 247121, 0.663428, -0.28784]
----
-Label        : 1
-Position     : [1080.92, 1038.65]
-Measurements : [1707.92, 285089, -0.225023, -0.595941]
----
-Label        : 0
-Position     : [289.017, 1038.73]
-Measurements : [1082.72, 22752.4, -2.76782, 7.6198]
----
-Label        : 1
-Position     : [1007.61, 1039.07]
-Measurements : [1363.53, 271353, 0.377418, -0.884089]
----
-Label        : 1
-Position     : [125.861, 1039.14]
-Measurements : [651.268, 187701, 2.35487, 4.8285]
----
-Label        : 1
-Position     : [321.93, 1039.41]
-Measurements : [1155.02, 217567, 0.711923, 0.0246444]
----
-Label        : 1
-Position     : [321.633, 1039.68]
-Measurements : [1155.02, 217567, 0.711923, 0.0246444]
----
-Label        : 1
-Position     : [622.903, 1040.3]
-Measurements : [713.301, 212250, 1.3097, 0.285215]
----
-Label        : 1
-Position     : [135.026, 1040.52]
-Measurements : [1656.79, 358402, -0.325768, -0.925886]
----
-Label        : 1
-Position     : [806.446, 1040.97]
-Measurements : [1907.42, 332193, 0.273794, -0.395531]
----
-Label        : 1
-Position     : [1079.3, 1040.99]
-Measurements : [1769.55, 232067, -0.216072, -0.34918]
----
-Label        : 1
-Position     : [1129.3, 1040.99]
-Measurements : [1334.24, 161281, 0.198236, -0.875272]
----
-Label        : 1
-Position     : [976.563, 1041.09]
-Measurements : [1606.62, 295623, -0.690447, -0.437781]
----
-Label        : 1
-Position     : [1051.44, 1041.11]
-Measurements : [1048.97, 312331, 0.602824, -0.978273]
----
-Label        : 1
-Position     : [1131.81, 1041.21]
-Measurements : [1272.24, 167795, 0.541475, -0.911862]
----
-Label        : 1
-Position     : [853.113, 1041.47]
-Measurements : [695.979, 130009, 0.928513, -0.739818]
----
-Label        : 1
-Position     : [138.728, 1041.72]
-Measurements : [1528.77, 400717, -0.0632972, -1.30892]
----
-Label        : 1
-Position     : [932.269, 1041.78]
-Measurements : [1658.61, 355829, -0.0486442, -0.947067]
----
-Label        : 1
-Position     : [1082.81, 1042.25]
-Measurements : [1521.01, 459423, -0.109999, -1.35876]
----
-Label        : 1
-Position     : [617.439, 1042.25]
-Measurements : [683.637, 107433, 1.58998, 3.88638]
----
-Label        : 1
-Position     : [1050.53, 1042.3]
-Measurements : [1041.54, 326445, 0.664316, -0.842964]
----
-Label        : 1
-Position     : [805.073, 1042.66]
-Measurements : [1821.69, 329339, 0.399071, -0.209585]
----
-Label        : 1
-Position     : [1003.57, 1042.9]
-Measurements : [1194.3, 219613, 0.969682, 0.253967]
----
-Label        : 1
-Position     : [1006.7, 1042.96]
-Measurements : [1234.41, 231249, 0.697452, -0.182632]
----
-Label        : 1
-Position     : [905.134, 1043.02]
-Measurements : [855.489, 273619, 0.9507, -0.646299]
----
-Label        : 1
-Position     : [1126.51, 1043.19]
-Measurements : [1514.7, 189144, -0.227025, -0.440306]
----
-Label        : 1
-Position     : [978.948, 1043.45]
-Measurements : [1564.47, 298323, -0.429589, -0.908748]
----
-Label        : 1
-Position     : [1258.19, 1043.57]
-Measurements : [867.112, 505976, 1.11019, -0.0693125]
----
-Label        : 1
-Position     : [129, 1043.77]
-Measurements : [813.898, 180564, 0.982528, -0.177614]
----
-Label        : 1
-Position     : [800.931, 1043.81]
-Measurements : [1365.89, 243373, 0.684081, 0.0443715]
----
-Label        : 1
-Position     : [809.213, 1044.01]
-Measurements : [1440.64, 670291, 0.518934, -0.90807]
----
-Label        : 1
-Position     : [872.671, 1044.09]
-Measurements : [1045.58, 211320, 0.219806, -0.887694]
----
-Label        : 1
-Position     : [1074.61, 1044.52]
-Measurements : [1560.07, 251991, -0.761766, -0.360482]
----
-Label        : 1
-Position     : [865.912, 1044.84]
-Measurements : [968.715, 60020.7, 0.143519, 0.358597]
----
-Label        : 1
-Position     : [1077.25, 1045.09]
-Measurements : [1772.23, 238859, -0.522419, -0.0823446]
----
-Label        : 1
-Position     : [617.38, 1045.19]
-Measurements : [954.533, 398827, 1.36306, 0.764816]
----
-Label        : 1
-Position     : [870.265, 1045.34]
-Measurements : [1098.49, 168294, 0.155758, -0.537022]
----
-Label        : 1
-Position     : [907.724, 1045.44]
-Measurements : [1015.01, 282826, 0.536376, -1.17681]
----
-Label        : 1
-Position     : [932.663, 1045.5]
-Measurements : [1180.45, 349897, 0.663551, -0.326637]
----
-Label        : 1
-Position     : [1127.43, 1045.54]
-Measurements : [1517.45, 179369, 0.137356, -0.868399]
----
-Label        : 1
-Position     : [982.624, 1045.68]
-Measurements : [1229.86, 235079, 0.368175, -1.04298]
----
-Label        : 1
-Position     : [909.126, 1045.73]
-Measurements : [1056.16, 263460, 0.519544, -1.18938]
----
-Label        : 1
-Position     : [134.316, 1045.82]
-Measurements : [1433.67, 392368, 0.120719, -1.12437]
----
-Label        : 1
-Position     : [803.169, 1045.88]
-Measurements : [1528.5, 261624, 0.239072, 0.147247]
----
-Label        : 1
-Position     : [871.946, 1045.89]
-Measurements : [1121.3, 183930, 0.051699, -0.663256]
----
-Label        : 1
-Position     : [1126.84, 1045.91]
-Measurements : [1542.98, 183047, 0.00208728, -0.749214]
----
-Label        : 1
-Position     : [937.331, 1046]
-Measurements : [842.393, 271272, 1.59062, 1.84349]
----
-Label        : 1
-Position     : [1007.36, 1046.25]
-Measurements : [1027.95, 126471, 0.395127, 0.0841846]
----
-Label        : 1
-Position     : [129.758, 1046.26]
-Measurements : [835.443, 191020, 0.735665, -0.829876]
----
-Label        : 1
-Position     : [1050.22, 1046.32]
-Measurements : [1166.11, 280870, 0.366481, -0.873089]
----
-Label        : 1
-Position     : [977.763, 1046.59]
-Measurements : [1381.23, 416021, 0.00481041, -1.44734]
----
-Label        : 1
-Position     : [1051.71, 1046.62]
-Measurements : [1128.98, 271536, 0.485715, -0.689879]
----
-Label        : 1
-Position     : [617.04, 1046.74]
-Measurements : [1071.1, 491430, 1.08382, -0.103324]
----
-Label        : 1
-Position     : [317.32, 1047.15]
-Measurements : [1051.57, 119132, 1.19844, 2.23283]
----
-Label        : 1
-Position     : [1079.83, 1047.45]
-Measurements : [1709.19, 330201, -0.498402, -0.741726]
----
-Label        : 1
-Position     : [316.186, 1047.52]
-Measurements : [1088.32, 93810.7, 1.79004, 3.65468]
----
-Label        : 1
-Position     : [1003.52, 1047.54]
-Measurements : [1304.44, 198918, 0.956867, 0.606773]
----
-Label        : 1
-Position     : [615.033, 1047.83]
-Measurements : [1035.56, 387285, 1.27463, 0.513677]
----
-Label        : 1
-Position     : [1256.13, 1048.14]
-Measurements : [1293.1, 506495, 0.514867, -0.861389]
----
-Label        : 1
-Position     : [870.214, 1048.59]
-Measurements : [1022.73, 216333, 0.219913, -0.987739]
----
-Label        : 1
-Position     : [1008.35, 1048.69]
-Measurements : [957.903, 178701, 0.957115, 1.44583]
----
-Label        : 1
-Position     : [1046.83, 1049.01]
-Measurements : [1520.06, 183308, -0.391479, -0.4481]
----
-Label        : 1
-Position     : [1079.76, 1049.24]
-Measurements : [1565.78, 348606, -0.172452, -1.18587]
----
-Label        : 1
-Position     : [925.042, 1049.38]
-Measurements : [987.199, 173607, 0.761037, -0.00246961]
----
-Label        : 1
-Position     : [997.141, 1049.77]
-Measurements : [1508.23, 214924, 0.0442669, -0.34706]
----
-Label        : 1
-Position     : [1121.95, 1050.21]
-Measurements : [1586.91, 392851, -0.360307, -0.806532]
----
-Label        : 1
-Position     : [910.547, 1050.22]
-Measurements : [1105.9, 189706, 0.586327, -0.596418]
----
-Label        : 1
-Position     : [318.88, 1050.3]
-Measurements : [952.444, 145415, 1.00934, 1.53209]
----
-Label        : 1
-Position     : [975.208, 1050.47]
-Measurements : [1533.34, 656235, 0.105515, -1.41531]
----
-Label        : 1
-Position     : [798.224, 1050.5]
-Measurements : [1153.53, 233636, 0.770138, -0.127555]
----
-Label        : 0
-Position     : [258.748, 1050.65]
-Measurements : [1095.94, 8304.45, -0.799745, 0.674058]
----
-Label        : 1
-Position     : [803.218, 1050.67]
-Measurements : [1384.5, 329222, 0.187012, -1.15357]
----
-Label        : 1
-Position     : [797.255, 1050.72]
-Measurements : [1074.87, 174195, 0.767915, -0.0886368]
----
-Label        : 1
-Position     : [1121.3, 1050.76]
-Measurements : [1586.91, 392851, -0.360307, -0.806532]
----
-Label        : 1
-Position     : [801.53, 1051.21]
-Measurements : [1281.85, 334847, 0.510889, -0.923391]
----
-Label        : 1
-Position     : [1048.99, 1051.23]
-Measurements : [1639.05, 160186, -0.186034, -0.907807]
----
-Label        : 1
-Position     : [1075.2, 1051.23]
-Measurements : [1777.11, 225173, -0.42666, -0.343258]
----
-Label        : 1
-Position     : [1125.61, 1051.23]
-Measurements : [1680.33, 256829, 0.313642, -0.747994]
----
-Label        : 0
-Position     : [288.453, 1051.36]
-Measurements : [1109.3, 5293.05, -0.468844, -0.386417]
----
-Label        : 1
-Position     : [998.609, 1051.64]
-Measurements : [1716.58, 219349, -0.309246, 0.065714]
----
-Label        : 1
-Position     : [115.87, 1051.99]
-Measurements : [799.408, 133161, 0.768401, -0.92898]
----
-Label        : 1
-Position     : [610.417, 1052.16]
-Measurements : [1142.33, 363484, 0.792953, -0.683519]
----
-Label        : 1
-Position     : [930.143, 1052.23]
-Measurements : [1134.03, 277817, 0.422687, -1.06236]
----
-Label        : 1
-Position     : [906.668, 1052.28]
-Measurements : [1341.53, 402028, 0.576998, -0.385132]
----
-Label        : 1
-Position     : [111.592, 1052.47]
-Measurements : [1077.79, 205038, 0.550374, -0.120052]
----
-Label        : 1
-Position     : [1076.54, 1052.6]
-Measurements : [1719.44, 267034, -0.481618, -0.39879]
----
-Label        : 1
-Position     : [928.127, 1052.67]
-Measurements : [1100.97, 257146, 0.569195, -0.773579]
----
-Label        : 1
-Position     : [846.177, 1052.84]
-Measurements : [964.73, 380438, 0.969626, -0.105411]
----
-Label        : 1
-Position     : [974.442, 1052.87]
-Measurements : [1697.81, 604654, -0.248171, -1.27509]
----
-Label        : 1
-Position     : [865.223, 1052.9]
-Measurements : [732.874, 61694.9, 0.568375, -0.298471]
----
-Label        : 1
-Position     : [1256.8, 1052.9]
-Measurements : [1059.92, 589559, 0.929202, -0.525249]
----
-Label        : 1
-Position     : [972.573, 1053.33]
-Measurements : [1837.58, 448769, -0.418098, -0.807762]
----
-Label        : 1
-Position     : [905.387, 1053.35]
-Measurements : [1505.94, 495612, 0.458989, -0.72498]
----
-Label        : 1
-Position     : [972.479, 1053.35]
-Measurements : [1837.58, 448769, -0.418098, -0.807762]
----
-Label        : 1
-Position     : [1070.35, 1053.57]
-Measurements : [1412.66, 299370, 0.0755788, -1.06022]
----
-Label        : 1
-Position     : [1001.8, 1053.9]
-Measurements : [1623.29, 318967, -0.107101, -0.908495]
----
-Label        : 1
-Position     : [1046.03, 1053.96]
-Measurements : [1738.85, 193868, -0.540937, -0.185425]
----
-Label        : 1
-Position     : [929.796, 1054.1]
-Measurements : [1217.79, 261489, 0.358849, -1.12273]
----
-Label        : 1
-Position     : [337.332, 1054.88]
-Measurements : [850.507, 324075, 1.46102, 1.45049]
----
-Label        : 1
-Position     : [844.012, 1055]
-Measurements : [1419.14, 510664, 0.266561, -1.12152]
----
-Label        : 1
-Position     : [105.448, 1055.03]
-Measurements : [1094.18, 181039, 1.02743, 0.853446]
----
-Label        : 1
-Position     : [1127.23, 1055.08]
-Measurements : [1594.68, 350975, 0.602476, -1.09504]
----
-Label        : 1
-Position     : [106.684, 1055.2]
-Measurements : [1111.09, 176408, 0.994577, 0.791618]
----
-Label        : 1
-Position     : [1117.07, 1055.26]
-Measurements : [1654.44, 484840, -0.658031, -0.876579]
----
-Label        : 1
-Position     : [1072.75, 1055.33]
-Measurements : [1546.28, 313498, -0.0150045, -0.962835]
----
-Label        : 1
-Position     : [611.919, 1055.36]
-Measurements : [1528.36, 490826, 0.133547, -1.3979]
----
-Label        : 1
-Position     : [850.808, 1055.79]
-Measurements : [1153.16, 505734, 1.02158, -0.149594]
----
-Label        : 1
-Position     : [1049, 1055.81]
-Measurements : [1702.35, 225970, -0.417514, -0.487913]
----
-Label        : 0
-Position     : [289.116, 1055.85]
-Measurements : [1135.28, 5788.38, -0.00519308, -0.0597098]
----
-Label        : 1
-Position     : [1046.3, 1055.85]
-Measurements : [1659.61, 300955, -0.571582, -0.577136]
----
-Label        : 1
-Position     : [997.856, 1055.89]
-Measurements : [1727.6, 268656, -0.353362, -0.680182]
----
-Label        : 1
-Position     : [1048.17, 1056.15]
-Measurements : [1632.04, 305645, -0.488434, -0.701371]
----
-Label        : 1
-Position     : [1068.69, 1056.52]
-Measurements : [1336.91, 292278, 0.0955927, -1.21503]
----
-Label        : 1
-Position     : [997.79, 1056.56]
-Measurements : [1748.74, 289518, -0.449271, -0.697178]
----
-Label        : 1
-Position     : [105.819, 1056.7]
-Measurements : [1066.3, 142990, 1.07015, 1.20709]
----
-Label        : 1
-Position     : [98.792, 1057.08]
-Measurements : [802.419, 177501, 1.07965, 0.648146]
----
-Label        : 1
-Position     : [904.654, 1057.1]
-Measurements : [2022.07, 438824, -0.296728, -1.06199]
----
-Label        : 1
-Position     : [101.372, 1057.14]
-Measurements : [974.655, 130285, 0.97067, 0.635444]
----
-Label        : 1
-Position     : [906.668, 1057.19]
-Measurements : [1966.3, 443170, -0.0517302, -1.31557]
----
-Label        : 1
-Position     : [976.976, 1057.22]
-Measurements : [1785.62, 347067, 0.0505175, -0.760573]
----
-Label        : 1
-Position     : [911.113, 1057.25]
-Measurements : [1420.77, 441843, 1.32058, 0.458534]
----
-Label        : 1
-Position     : [926.929, 1057.38]
-Measurements : [1042.01, 234798, 0.758304, -0.471581]
----
-Label        : 1
-Position     : [973.214, 1057.38]
-Measurements : [2010.68, 228552, -0.293219, -0.0684569]
----
-Label        : 1
-Position     : [1121.93, 1057.38]
-Measurements : [2000.37, 242978, -0.753109, -0.0060464]
----
-Label        : 1
-Position     : [339.872, 1057.47]
-Measurements : [1148.04, 340716, 1.04136, 0.425993]
----
-Label        : 1
-Position     : [868.985, 1057.6]
-Measurements : [784.432, 182482, 1.81052, 2.81234]
----
-Label        : 1
-Position     : [102.221, 1057.61]
-Measurements : [1025.33, 125675, 0.91573, 0.506751]
----
-Label        : 1
-Position     : [841.688, 1057.8]
-Measurements : [1294.57, 649347, 0.262355, -1.28919]
----
-Label        : 1
-Position     : [1126.57, 1057.87]
-Measurements : [1595.36, 347265, 0.588473, -1.04231]
----
-Label        : 1
-Position     : [607.171, 1057.95]
-Measurements : [1565.33, 337078, 0.124421, -0.827565]
----
-Label        : 1
-Position     : [868.796, 1058.07]
-Measurements : [845.924, 203528, 1.6002, 1.73355]
----
-Label        : 1
-Position     : [993.941, 1058.13]
-Measurements : [1508.46, 327185, 0.0190726, -1.05082]
----
-Label        : 1
-Position     : [924.641, 1058.15]
-Measurements : [925.107, 153068, 1.08353, 0.886399]
----
-Label        : 0
-Position     : [207.424, 1058.21]
-Measurements : [962.915, 7884.55, 0.396345, 0.364765]
----
-Label        : 1
-Position     : [340.703, 1058.28]
-Measurements : [1207.9, 284350, 1.29453, 0.898262]
----
-Label        : 1
-Position     : [1069.29, 1058.31]
-Measurements : [1519.54, 322567, -0.203577, -1.13118]
----
-Label        : 1
-Position     : [846.059, 1058.41]
-Measurements : [1712.39, 476106, -0.0555056, -1.10709]
----
-Label        : 1
-Position     : [905.675, 1058.44]
-Measurements : [2100.28, 379834, -0.342308, -1.08011]
----
-Label        : 1
-Position     : [800.302, 1058.58]
-Measurements : [1219.53, 356753, 0.833432, -0.54805]
----
-Label        : 1
-Position     : [846.996, 1058.58]
-Measurements : [1712.39, 476106, -0.0555056, -1.10709]
----
-Label        : 1
-Position     : [1121.44, 1058.67]
-Measurements : [1911.98, 346773, -0.678545, -0.581628]
----
-Label        : 1
-Position     : [103.624, 1059.05]
-Measurements : [994.706, 129850, 1.05942, 0.690652]
----
-Label        : 1
-Position     : [606.321, 1059.12]
-Measurements : [1773.98, 283211, 0.150544, -0.804767]
----
-Label        : 1
-Position     : [996.486, 1059.13]
-Measurements : [1671.17, 282950, -0.0334571, -0.997012]
----
-Label        : 1
-Position     : [968.705, 1059.56]
-Measurements : [1725.68, 370500, -0.532943, -0.693264]
----
-Label        : 1
-Position     : [1119.06, 1059.83]
-Measurements : [1708.38, 483007, -0.4506, -1.11343]
----
-Label        : 1
-Position     : [866.25, 1059.97]
-Measurements : [867.421, 177349, 1.68383, 2.31091]
----
-Label        : 1
-Position     : [804.462, 1059.99]
-Measurements : [1359.06, 438861, 0.542758, -1.20987]
----
-Label        : 1
-Position     : [999.118, 1060.01]
-Measurements : [1454.32, 434362, 0.182151, -1.27538]
----
-Label        : 1
-Position     : [924.319, 1060.19]
-Measurements : [970.069, 166881, 0.714521, -0.267998]
----
-Label        : 1
-Position     : [1071.11, 1060.24]
-Measurements : [1524.65, 352321, -0.203653, -1.27576]
----
-Label        : 1
-Position     : [863.633, 1060.45]
-Measurements : [780.231, 91256.6, 2.29349, 7.20465]
----
-Label        : 1
-Position     : [1069.23, 1060.56]
-Measurements : [1477.95, 387995, -0.225492, -1.27019]
----
-Label        : 1
-Position     : [921.279, 1060.58]
-Measurements : [885.65, 105641, 0.800119, 0.599259]
----
-Label        : 1
-Position     : [312.71, 1060.64]
-Measurements : [1365.12, 221263, 0.879898, -0.505644]
----
-Label        : 1
-Position     : [849.731, 1060.8]
-Measurements : [1515.81, 526526, 0.576047, -1.1026]
----
-Label        : 1
-Position     : [866.118, 1060.88]
-Measurements : [864.166, 178458, 1.68781, 2.29674]
----
-Label        : 1
-Position     : [995.332, 1061.06]
-Measurements : [1497.22, 291500, 0.422557, -0.754634]
----
-Label        : 1
-Position     : [903.559, 1061.06]
-Measurements : [2125.98, 400561, -0.77346, -0.27881]
----
-Label        : 1
-Position     : [319.267, 1061.85]
-Measurements : [971.91, 434783, 0.907669, -0.7131]
----
-Label        : 1
-Position     : [605.555, 1061.85]
-Measurements : [1930.81, 240604, 0.0233634, -0.761725]
----
-Label        : 1
-Position     : [314.784, 1062.08]
-Measurements : [1351.44, 315591, 0.322096, -1.01958]
----
-Label        : 1
-Position     : [799.932, 1062.09]
-Measurements : [1679.64, 467193, 0.090277, -1.34986]
----
-Label        : 1
-Position     : [1119.52, 1062.16]
-Measurements : [1320.5, 535895, 0.262037, -1.4792]
----
-Label        : 0
-Position     : [264.919, 1062.22]
-Measurements : [947.521, 9754.69, -2.22606, 6.17138]
----
-Label        : 1
-Position     : [845.358, 1062.26]
-Measurements : [1857.4, 361084, -0.216791, -0.73041]
----
-Label        : 1
-Position     : [610.995, 1062.44]
-Measurements : [1566.65, 553475, 0.164027, -1.41697]
----
-Label        : 1
-Position     : [971.166, 1063.11]
-Measurements : [1648.51, 277050, -0.0587585, -0.892408]
----
-Label        : 1
-Position     : [903.391, 1063.34]
-Measurements : [2034.85, 437816, -0.604398, -0.73877]
----
-Label        : 1
-Position     : [1259.12, 1063.4]
-Measurements : [1408, 480784, 0.0517758, -0.955122]
----
-Label        : 1
-Position     : [869.884, 1063.41]
-Measurements : [859.995, 206160, 1.54423, 1.43863]
----
-Label        : 1
-Position     : [600.996, 1063.63]
-Measurements : [1561.85, 299040, -0.108586, -0.62191]
----
-Label        : 1
-Position     : [792.851, 1063.67]
-Measurements : [1300.18, 343930, 0.587613, -0.640732]
----
-Label        : 1
-Position     : [905.344, 1063.86]
-Measurements : [1980.23, 477944, -0.338716, -1.22766]
----
-Label        : 1
-Position     : [866.677, 1064.28]
-Measurements : [925.403, 225097, 1.11015, 0.174159]
----
-Label        : 1
-Position     : [925.29, 1064.75]
-Measurements : [1024.01, 258943, 0.593828, -0.984644]
----
-Label        : 1
-Position     : [796.615, 1065.13]
-Measurements : [1758.95, 279434, 0.159316, -0.738881]
----
-Label        : 1
-Position     : [845.523, 1065.26]
-Measurements : [1644.56, 338287, 0.065939, -0.726038]
----
-Label        : 1
-Position     : [1260.22, 1065.34]
-Measurements : [1726.87, 382837, 0.238911, -0.796858]
----
-Label        : 1
-Position     : [966.954, 1065.73]
-Measurements : [1330.81, 283578, 0.341488, -0.602699]
----
-Label        : 1
-Position     : [1116.6, 1065.83]
-Measurements : [1212.69, 517389, 0.32524, -1.53127]
----
-Label        : 1
-Position     : [994.103, 1065.98]
-Measurements : [1482.39, 234906, 0.460918, -0.489004]
----
-Label        : 0
-Position     : [231.642, 1066.08]
-Measurements : [848.298, 35588, 0.140787, -0.506194]
----
-Label        : 1
-Position     : [1264.43, 1066.37]
-Measurements : [1894.16, 431908, -0.152023, -1.14118]
----
-Label        : 1
-Position     : [992.488, 1066.51]
-Measurements : [1469.24, 246718, 0.326009, -0.548977]
----
-Label        : 1
-Position     : [902.572, 1066.62]
-Measurements : [1937.24, 395620, -0.648701, -0.727676]
----
-Label        : 1
-Position     : [842.49, 1066.77]
-Measurements : [1637.13, 347456, -0.126214, -0.368328]
----
-Label        : 0
-Position     : [289.664, 1066.88]
-Measurements : [1471.52, 60326.6, 0.474587, -1.09782]
----
-Label        : 1
-Position     : [602.315, 1067]
-Measurements : [1699.82, 300423, -0.113697, -0.517193]
----
-Label        : 1
-Position     : [998.833, 1067.04]
-Measurements : [1295.64, 399196, 0.467405, -0.87565]
----
-Label        : 1
-Position     : [1068.52, 1067.27]
-Measurements : [1026.09, 352227, 0.795086, -0.529614]
----
-Label        : 1
-Position     : [335.48, 1067.6]
-Measurements : [1001.06, 223427, 0.538648, -0.846757]
----
-Label        : 1
-Position     : [898.804, 1067.67]
-Measurements : [1749.79, 509874, -0.613197, -0.866149]
----
-Label        : 1
-Position     : [844.011, 1067.84]
-Measurements : [1588.18, 319056, 0.176613, -0.452007]
----
-Label        : 1
-Position     : [968.298, 1068.02]
-Measurements : [1186.48, 319544, 0.971109, 0.500699]
----
-Label        : 1
-Position     : [794.383, 1068.1]
-Measurements : [1531.21, 369563, -0.146678, -0.79932]
----
-Label        : 1
-Position     : [862.431, 1068.25]
-Measurements : [1164.19, 327143, 0.40999, -0.918946]
----
-Label        : 1
-Position     : [790.878, 1068.61]
-Measurements : [1062.67, 268315, 0.437988, -0.950832]
----
-Label        : 0
-Position     : [180.523, 1068.69]
-Measurements : [1071.55, 18919.2, 0.469124, -0.0707115]
----
-Label        : 1
-Position     : [844.631, 1068.79]
-Measurements : [1465.66, 323926, 0.0957246, -0.738181]
----
-Label        : 1
-Position     : [600.989, 1069.08]
-Measurements : [1365.89, 411326, 0.227273, -1.10557]
----
-Label        : 1
-Position     : [995.106, 1069.22]
-Measurements : [1603.19, 308413, 0.183582, -1.20052]
----
-Label        : 1
-Position     : [860.674, 1069.33]
-Measurements : [1285.42, 343648, 0.320842, -0.878393]
----
-Label        : 1
-Position     : [600.586, 1069.36]
-Measurements : [1365.89, 411326, 0.227273, -1.10557]
----
-Label        : 0
-Position     : [276.915, 1069.5]
-Measurements : [1030.63, 44566, -1.1906, 0.792699]
----
-Label        : 1
-Position     : [1116.19, 1069.66]
-Measurements : [1524.84, 521870, -0.300372, -1.50815]
----
-Label        : 1
-Position     : [332.784, 1069.77]
-Measurements : [857.081, 262337, 0.870197, -0.727657]
----
-Label        : 1
-Position     : [900.114, 1069.89]
-Measurements : [1881.1, 263231, -0.563128, -0.26125]
----
-Label        : 1
-Position     : [794.567, 1070.05]
-Measurements : [1281.75, 396428, 0.132021, -1.19865]
----
-Label        : 1
-Position     : [922.189, 1070.08]
-Measurements : [1289, 453605, 0.249878, -1.479]
----
-Label        : 1
-Position     : [1112.63, 1070.3]
-Measurements : [1687.14, 348641, -0.606228, -0.744031]
----
-Label        : 1
-Position     : [1114.23, 1070.35]
-Measurements : [1746.72, 349510, -0.801723, -0.467484]
----
-Label        : 1
-Position     : [1114.58, 1070.41]
-Measurements : [1746.72, 349510, -0.801723, -0.467484]
----
-Label        : 1
-Position     : [896.297, 1070.56]
-Measurements : [1574.03, 471911, -0.441687, -1.05252]
----
-Label        : 1
-Position     : [843.719, 1070.87]
-Measurements : [1229.55, 349929, 0.214774, -1.21616]
----
-Label        : 1
-Position     : [1040.39, 1070.89]
-Measurements : [1013.16, 322562, 0.523158, -0.729431]
----
-Label        : 1
-Position     : [1066.19, 1070.89]
-Measurements : [931.271, 200962, 0.558388, -1.13704]
----
-Label        : 1
-Position     : [967.427, 1071.23]
-Measurements : [941.259, 131265, -0.0610348, -1.39455]
----
-Label        : 1
-Position     : [842.918, 1071.57]
-Measurements : [1110.06, 378066, 0.457115, -1.1367]
----
-Label        : 1
-Position     : [338.822, 1071.67]
-Measurements : [1018.08, 119680, 1.3749, 0.611555]
----
-Label        : 1
-Position     : [1253.36, 1071.74]
-Measurements : [1539.84, 421758, -0.0912068, -1.44408]
----
-Label        : 1
-Position     : [1068.76, 1071.76]
-Measurements : [830.833, 161066, 0.85298, -0.748251]
----
-Label        : 1
-Position     : [596.732, 1072.26]
-Measurements : [1088.59, 238493, 0.256296, -1.36753]
----
-Label        : 1
-Position     : [970.785, 1072.27]
-Measurements : [894.876, 123202, 0.502103, -0.646614]
----
-Label        : 1
-Position     : [994.922, 1072.53]
-Measurements : [1782.24, 231276, -0.343096, -0.735451]
----
-Label        : 1
-Position     : [895.714, 1072.61]
-Measurements : [1489.41, 469906, -0.35282, -1.16363]
----
-Label        : 1
-Position     : [866.36, 1072.77]
-Measurements : [1229.22, 471682, 0.455838, -1.23022]
----
-Label        : 1
-Position     : [916.774, 1072.95]
-Measurements : [1281.79, 415539, 0.486748, -1.14991]
----
-Label        : 0
-Position     : [286.474, 1073.27]
-Measurements : [1494.5, 107251, 0.528237, -1.1887]
----
-Label        : 1
-Position     : [921.604, 1073.35]
-Measurements : [1560.31, 507638, -0.086204, -1.25262]
----
-Label        : 1
-Position     : [960.695, 1073.5]
-Measurements : [857.156, 267104, 0.795523, -0.712916]
----
-Label        : 1
-Position     : [842.382, 1073.51]
-Measurements : [901.878, 272405, 0.770158, -0.837331]
----
-Label        : 1
-Position     : [861.612, 1073.58]
-Measurements : [1770.69, 275464, -0.415215, -0.684394]
----
-Label        : 1
-Position     : [1257.74, 1073.64]
-Measurements : [1933.22, 374694, -0.434486, -0.630972]
----
-Label        : 1
-Position     : [899.759, 1073.76]
-Measurements : [1838.89, 257462, -0.325163, -0.402379]
----
-Label        : 1
-Position     : [1044.41, 1073.9]
-Measurements : [1175.24, 465016, 0.940931, 0.0780993]
----
-Label        : 1
-Position     : [600.686, 1074.13]
-Measurements : [1241.33, 275759, 0.0843598, -1.2792]
----
-Label        : 1
-Position     : [991.703, 1074.41]
-Measurements : [1747.47, 203351, -0.254667, -0.48618]
----
-Label        : 1
-Position     : [1113.74, 1074.58]
-Measurements : [1940.71, 182133, -1.0065, 0.714931]
----
-Label        : 1
-Position     : [792.051, 1074.67]
-Measurements : [715.469, 228424, 1.44681, 0.596601]
----
-Label        : 1
-Position     : [899.295, 1074.81]
-Measurements : [1835.52, 268824, -0.262589, -0.454564]
----
-Label        : 1
-Position     : [599.746, 1074.88]
-Measurements : [1220.5, 269013, 0.0416882, -1.30075]
----
-Label        : 1
-Position     : [1038.78, 1075.17]
-Measurements : [1631.37, 426967, 0.0229473, -0.664653]
----
-Label        : 1
-Position     : [966.322, 1075.34]
-Measurements : [1158.12, 439663, 0.487083, -1.21011]
----
-Label        : 1
-Position     : [1037.3, 1075.37]
-Measurements : [1547.85, 496089, 0.0398388, -0.83847]
----
-Label        : 1
-Position     : [1042.74, 1075.57]
-Measurements : [1506.97, 438894, 0.491883, -0.674477]
----
-Label        : 1
-Position     : [1256.57, 1075.64]
-Measurements : [1985.18, 305919, -0.749865, -0.148024]
----
-Label        : 1
-Position     : [315.651, 1075.87]
-Measurements : [596.397, 101244, 2.07012, 3.22618]
----
-Label        : 1
-Position     : [77.8, 1076.02]
-Measurements : [1929.62, 458453, -0.111483, -1.18215]
----
-Label        : 1
-Position     : [896.631, 1076.25]
-Measurements : [1699.78, 271108, -0.550469, 0.140458]
----
-Label        : 1
-Position     : [916.334, 1076.8]
-Measurements : [1403.13, 391279, 0.346963, -1.17856]
----
-Label        : 1
-Position     : [894.636, 1076.99]
-Measurements : [1412.66, 425870, -0.290103, -1.1361]
----
-Label        : 1
-Position     : [965.431, 1077.04]
-Measurements : [1439.73, 533332, -0.0946199, -1.43516]
----
-Label        : 1
-Position     : [993.069, 1077.31]
-Measurements : [1643.59, 327515, -0.463382, -0.770623]
----
-Label        : 1
-Position     : [310.904, 1077.33]
-Measurements : [927.341, 162883, 0.594919, -0.649925]
----
-Label        : 1
-Position     : [77.286, 1077.38]
-Measurements : [1945.15, 439803, -0.099796, -1.20879]
----
-Label        : 1
-Position     : [333.001, 1077.42]
-Measurements : [1039.98, 270648, 0.813768, -0.396275]
----
-Label        : 1
-Position     : [991.236, 1077.45]
-Measurements : [1650.33, 249390, -0.382364, -0.559288]
----
-Label        : 1
-Position     : [987.44, 1077.69]
-Measurements : [1573.01, 233269, -0.163239, -0.518413]
----
-Label        : 1
-Position     : [73.2249, 1077.84]
-Measurements : [1438.74, 626886, 0.307536, -1.11043]
----
-Label        : 1
-Position     : [920.375, 1077.86]
-Measurements : [1738.94, 342593, -0.0267431, -0.827248]
----
-Label        : 1
-Position     : [1039.16, 1077.86]
-Measurements : [1547.48, 514159, 0.0941747, -1.05196]
----
-Label        : 1
-Position     : [920.966, 1077.86]
-Measurements : [1738.94, 342593, -0.0267431, -0.827248]
----
-Label        : 1
-Position     : [599.358, 1077.96]
-Measurements : [966.224, 232590, 0.643817, -1.08672]
----
-Label        : 0
-Position     : [214.447, 1078.07]
-Measurements : [721.977, 29834.3, -0.0459263, -1.38373]
----
-Label        : 1
-Position     : [311.36, 1078.2]
-Measurements : [866.952, 197828, 0.939155, -0.265792]
----
-Label        : 1
-Position     : [967.904, 1078.26]
-Measurements : [1397.09, 541304, 0.181655, -1.38845]
----
-Label        : 1
-Position     : [860.383, 1078.49]
-Measurements : [1567.44, 521605, -0.154939, -1.54392]
----
-Label        : 1
-Position     : [861.111, 1078.54]
-Measurements : [1595.14, 513244, -0.210322, -1.52303]
----
-Label        : 1
-Position     : [894.835, 1078.89]
-Measurements : [1437.07, 431862, -0.355293, -1.14035]
----
-Label        : 1
-Position     : [896.018, 1078.9]
-Measurements : [1690.76, 263301, -0.484804, -0.0525624]
----
-Label        : 1
-Position     : [1257.2, 1078.93]
-Measurements : [2076.1, 359988, -0.501825, -0.368702]
----
-Label        : 1
-Position     : [840.602, 1079.54]
-Measurements : [755.837, 189173, 1.54833, 1.52975]
----
-Label        : 1
-Position     : [920.037, 1079.92]
-Measurements : [1582.08, 431210, 0.214176, -1.04835]
----
-Label        : 1
-Position     : [331.896, 1080.4]
-Measurements : [1079.64, 292382, 0.545597, -0.813138]
----
-Label        : 1
-Position     : [837.166, 1080.7]
-Measurements : [869.584, 259128, 1.00008, -0.32103]
----
-Label        : 1
-Position     : [917.098, 1080.72]
-Measurements : [1234.31, 458614, 0.707147, -0.681752]
----
-Label        : 1
-Position     : [858.3, 1081.12]
-Measurements : [1244.4, 442540, 0.652034, -0.968102]
----
-Label        : 1
-Position     : [1111.28, 1081.13]
-Measurements : [1994.06, 277345, -0.218568, -0.189735]
----
-Label        : 1
-Position     : [857.654, 1081.17]
-Measurements : [1188.35, 401978, 0.80195, -0.655809]
----
-Label        : 1
-Position     : [987.55, 1081.54]
-Measurements : [1686.29, 203534, -0.465899, -0.140304]
----
-Label        : 1
-Position     : [920.487, 1082.01]
-Measurements : [1183.15, 471970, 1.06077, 0.191637]
----
-Label        : 0
-Position     : [257.478, 1082.03]
-Measurements : [1124.28, 24691.8, -0.74802, 1.9546]
----
-Label        : 1
-Position     : [1258.56, 1082.25]
-Measurements : [1682.68, 660515, 0.225929, -1.26408]
----
-Label        : 1
-Position     : [987.201, 1082.33]
-Measurements : [1754.46, 190202, -0.0437528, -0.751095]
----
-Label        : 1
-Position     : [1114.23, 1082.56]
-Measurements : [1754.38, 495281, -0.0284473, -1.2201]
----
-Label        : 1
-Position     : [990.889, 1082.89]
-Measurements : [1656.11, 317262, -0.523784, -0.681794]
----
-Label        : 1
-Position     : [896.428, 1083]
-Measurements : [1336.07, 490480, 0.171446, -1.22902]
----
-Label        : 1
-Position     : [963.383, 1083.18]
-Measurements : [2234.85, 198235, -0.567996, 0.269718]
----
-Label        : 1
-Position     : [894.069, 1083.46]
-Measurements : [1033.45, 480487, 0.688529, -0.967521]
----
-Label        : 1
-Position     : [900.901, 1083.68]
-Measurements : [1317.95, 372376, 0.568797, -0.575312]
----
-Label        : 1
-Position     : [1254.56, 1083.89]
-Measurements : [1192.77, 386288, 0.857423, -0.620612]
----
-Label        : 1
-Position     : [331.163, 1084.4]
-Measurements : [1143.3, 249384, 0.579623, -0.684709]
----
-Label        : 1
-Position     : [967.159, 1084.82]
-Measurements : [1895.45, 510439, -0.0225459, -1.42963]
----
-Label        : 1
-Position     : [963.393, 1084.97]
-Measurements : [2306.45, 209188, -0.657404, 0.575012]
----
-Label        : 1
-Position     : [1110.05, 1085.23]
-Measurements : [1925.52, 361631, -0.28424, -0.484604]
----
-Label        : 1
-Position     : [839.129, 1085.34]
-Measurements : [863.717, 179706, 1.10735, 0.620948]
----
-Label        : 1
-Position     : [1115.81, 1085.36]
-Measurements : [1520.48, 515730, 0.589413, -1.0736]
----
-Label        : 0
-Position     : [219.044, 1085.89]
-Measurements : [1206.72, 30036.2, -0.773169, -0.764504]
----
-Label        : 1
-Position     : [1105.82, 1085.89]
-Measurements : [1409.69, 559898, 0.0741824, -1.21507]
----
-Label        : 1
-Position     : [858.335, 1086.28]
-Measurements : [1309.72, 398950, 0.703431, -0.444962]
----
-Label        : 1
-Position     : [914.356, 1086.63]
-Measurements : [1140.36, 355302, 0.590514, -0.980791]
----
-Label        : 1
-Position     : [1111.94, 1086.98]
-Measurements : [1880.54, 396975, -0.210773, -0.79487]
----
-Label        : 1
-Position     : [310.231, 1087.07]
-Measurements : [1009.42, 515162, 1.00145, -0.545091]
----
-Label        : 1
-Position     : [1105, 1087.36]
-Measurements : [1260.09, 549398, 0.27972, -1.21554]
----
-Label        : 1
-Position     : [307.832, 1087.57]
-Measurements : [1279.73, 432804, 0.57088, -0.97877]
----
-Label        : 1
-Position     : [989.188, 1087.69]
-Measurements : [1723.64, 349520, -0.349601, -0.572529]
----
-Label        : 1
-Position     : [962.154, 1088.1]
-Measurements : [2283.52, 271865, -0.59973, -0.166411]
----
-Label        : 0
-Position     : [192.306, 1088.22]
-Measurements : [928.518, 48296.5, 0.110534, -0.0699811]
----
-Label        : 1
-Position     : [1027.18, 1088.36]
-Measurements : [775.299, 246501, 0.794162, -0.850706]
----
-Label        : 1
-Position     : [856.069, 1088.57]
-Measurements : [1638.53, 389914, 0.132686, -0.915477]
----
-Label        : 1
-Position     : [913.822, 1089.32]
-Measurements : [1025.2, 385520, 0.833213, -0.806066]
----
-Label        : 1
-Position     : [994.122, 1089.91]
-Measurements : [1095.31, 549862, 0.982881, -0.422543]
----
-Label        : 1
-Position     : [988.788, 1089.99]
-Measurements : [1689.6, 319573, -0.0963518, -0.663632]
----
-Label        : 1
-Position     : [309.636, 1090.01]
-Measurements : [1036.69, 511944, 1.00362, -0.492388]
----
-Label        : 1
-Position     : [957.325, 1090.26]
-Measurements : [1818.3, 586214, -0.51928, -0.803871]
----
-Label        : 1
-Position     : [861.099, 1090.5]
-Measurements : [1317.37, 630893, 0.594882, -1.03761]
----
-Label        : 1
-Position     : [856.483, 1090.61]
-Measurements : [1793.77, 390805, -0.0429731, -0.853561]
----
-Label        : 1
-Position     : [1032.9, 1090.67]
-Measurements : [900.749, 498700, 1.15203, -0.130886]
----
-Label        : 1
-Position     : [3.83146, 1091.01]
-Measurements : [1331.57, 196835, 1.24546, 0.672271]
----
-Label        : 1
-Position     : [1028.51, 1091.37]
-Measurements : [1172.9, 513420, 0.428752, -1.01562]
----
-Label        : 1
-Position     : [1108.41, 1091.37]
-Measurements : [1351.51, 535827, 0.399753, -0.853249]
----
-Label        : 0
-Position     : [142.98, 1091.38]
-Measurements : [1070, 9078.42, -0.88087, 0.923298]
----
-Label        : 1
-Position     : [856.697, 1091.6]
-Measurements : [1807.37, 393397, -0.0973794, -0.900549]
----
-Label        : 1
-Position     : [985.092, 1091.78]
-Measurements : [1734.76, 265564, -0.221991, -0.595334]
----
-Label        : 1
-Position     : [607.864, 1091.89]
-Measurements : [880.579, 542044, 0.951025, -0.64557]
----
-Label        : 1
-Position     : [1262.18, 1091.98]
-Measurements : [548.588, 93782.4, 1.38609, 1.61379]
----
-Label        : 1
-Position     : [1055.57, 1092.17]
-Measurements : [1272.1, 344471, 0.139039, -1.47984]
----
-Label        : 1
-Position     : [991.827, 1092.28]
-Measurements : [1418.46, 580540, 0.232185, -1.37755]
----
-Label        : 1
-Position     : [964.894, 1093.12]
-Measurements : [1877.96, 578463, 0.104338, -1.51049]
----
-Label        : 1
-Position     : [960.106, 1093.42]
-Measurements : [2092.33, 391258, -0.450804, -0.445903]
----
-Label        : 1
-Position     : [916.242, 1093.78]
-Measurements : [1121.09, 348810, 0.533025, -1.0389]
----
-Label        : 1
-Position     : [854.581, 1093.88]
-Measurements : [1592.07, 604030, 0.00240911, -1.34817]
----
-Label        : 1
-Position     : [958.886, 1094.17]
-Measurements : [2009.72, 343332, -0.533888, -0.0558652]
----
-Label        : 1
-Position     : [892.169, 1094.2]
-Measurements : [1186.33, 351057, 0.134356, -1.35697]
----
-Label        : 1
-Position     : [985.902, 1094.38]
-Measurements : [1843.62, 222345, -0.128628, -0.414821]
----
-Label        : 0
-Position     : [259.044, 1094.82]
-Measurements : [753.567, 68497.3, 0.272122, -1.48026]
----
-Label        : 1
-Position     : [853.83, 1094.88]
-Measurements : [1409.6, 714758, 0.297433, -1.47687]
----
-Label        : 1
-Position     : [1269.54, 1094.96]
-Measurements : [976.922, 240002, 0.417818, -0.905896]
----
-Label        : 1
-Position     : [7.656, 1094.97]
-Measurements : [1485.79, 395766, 0.0283435, -1.18202]
----
-Label        : 1
-Position     : [855.503, 1095.08]
-Measurements : [1441.48, 743631, 0.256967, -1.49925]
----
-Label        : 1
-Position     : [1107.51, 1095.19]
-Measurements : [814.851, 377390, 1.44917, 0.534495]
----
-Label        : 1
-Position     : [888.779, 1095.35]
-Measurements : [1335.52, 308509, -0.323976, -1.03263]
----
-Label        : 1
-Position     : [1267.17, 1095.35]
-Measurements : [967.295, 218363, 0.461424, -0.676289]
----
-Label        : 1
-Position     : [613.408, 1095.48]
-Measurements : [1703.96, 613294, -0.213562, -1.43754]
----
-Label        : 1
-Position     : [1058.41, 1095.88]
-Measurements : [1524.43, 347279, -0.191113, -1.3013]
----
-Label        : 0
-Position     : [96.7612, 1096.08]
-Measurements : [1269.01, 17415.6, 0.752649, 1.23866]
----
-Label        : 1
-Position     : [986.304, 1096.55]
-Measurements : [1694.49, 375471, -0.272519, -0.83505]
----
-Label        : 1
-Position     : [609.918, 1096.6]
-Measurements : [1610.28, 542468, -0.270672, -1.13973]
----
-Label        : 0
-Position     : [247.757, 1096.94]
-Measurements : [1293.76, 71110.3, 0.607419, -0.764484]
----
-Label        : 1
-Position     : [327, 1097]
-Measurements : [784.893, 157105, 1.30623, 1.11276]
----
-Label        : 1
-Position     : [1030.27, 1097.32]
-Measurements : [1681.5, 376593, -0.320268, -1.04321]
----
-Label        : 1
-Position     : [984.682, 1097.52]
-Measurements : [1761.07, 329786, -0.474931, -0.382438]
----
-Label        : 1
-Position     : [6.47254, 1097.54]
-Measurements : [1484.49, 401640, 0.00481478, -1.20688]
----
-Label        : 1
-Position     : [326.734, 1097.57]
-Measurements : [750.509, 165709, 1.39889, 1.17512]
----
-Label        : 1
-Position     : [912.622, 1097.71]
-Measurements : [1143.47, 359919, 0.249579, -1.42336]
----
-Label        : 1
-Position     : [889.055, 1097.74]
-Measurements : [1456.72, 196778, -0.348067, -0.47207]
----
-Label        : 1
-Position     : [303.904, 1097.82]
-Measurements : [1087.77, 189526, 0.66936, -0.24755]
----
-Label        : 0
-Position     : [253.41, 1098.11]
-Measurements : [895.033, 67286.7, -0.435044, -1.11304]
----
-Label        : 1
-Position     : [956.83, 1098.34]
-Measurements : [1539.5, 616414, 0.00355931, -1.40037]
----
-Label        : 0
-Position     : [168.583, 1098.67]
-Measurements : [752.491, 43880, 0.0205883, -1.39981]
----
-Label        : 1
-Position     : [985.723, 1098.98]
-Measurements : [1657.69, 404132, -0.281057, -0.918316]
----
-Label        : 1
-Position     : [913.822, 1099.15]
-Measurements : [1163.75, 338017, 0.246734, -1.38487]
----
-Label        : 0
-Position     : [270.11, 1099.24]
-Measurements : [1096.86, 10493.4, 0.281709, 0.572445]
----
-Label        : 1
-Position     : [858.791, 1099.45]
-Measurements : [787.524, 428708, 2.04554, 3.10989]
----
-Label        : 1
-Position     : [1060.11, 1099.56]
-Measurements : [1514.94, 429286, -0.074932, -1.28052]
----
-Label        : 0
-Position     : [134.613, 1099.81]
-Measurements : [973.458, 6331.39, -0.52856, -0.335983]
----
-Label        : 1
-Position     : [917.793, 1100.11]
-Measurements : [1094.8, 299121, 0.518578, -1.10227]
----
-Label        : 1
-Position     : [890.983, 1100.11]
-Measurements : [1400.35, 161844, 0.074681, -0.84253]
----
-Label        : 1
-Position     : [1359.6, 1100.5]
-Measurements : [1774.64, 377057, -0.788745, -0.456058]
----
-Label        : 1
-Position     : [309.43, 1100.51]
-Measurements : [559.242, 82491, 2.59435, 6.89053]
----
-Label        : 1
-Position     : [975.45, 1100.52]
-Measurements : [1073.3, 233622, 0.609561, -0.584929]
----
-Label        : 1
-Position     : [324.58, 1100.56]
-Measurements : [537.909, 48414.5, 2.28277, 5.78213]
----
-Label        : 1
-Position     : [978.538, 1100.79]
-Measurements : [1282.55, 392357, 0.334611, -0.943155]
----
-Label        : 1
-Position     : [1029.74, 1100.79]
-Measurements : [1784.61, 332989, -0.481679, -0.8367]
----
-Label        : 1
-Position     : [1055.13, 1100.79]
-Measurements : [1793.87, 165248, -0.0695641, -0.163157]
----
-Label        : 1
-Position     : [958.643, 1101.01]
-Measurements : [1300.85, 551935, 0.485265, -1.15511]
----
-Label        : 1
-Position     : [1374.05, 1101.19]
-Measurements : [1659.42, 357622, -0.350888, -0.380255]
----
-Label        : 1
-Position     : [304.76, 1101.39]
-Measurements : [1006.51, 251423, 0.519497, -1.10284]
----
-Label        : 1
-Position     : [887.826, 1101.43]
-Measurements : [1458.54, 187384, -0.414354, -0.208829]
----
-Label        : 1
-Position     : [1366.24, 1101.9]
-Measurements : [1712.72, 299374, -0.212772, -0.633687]
----
-Label        : 1
-Position     : [974.083, 1101.96]
-Measurements : [959.43, 184929, 0.758253, -0.131308]
----
-Label        : 1
-Position     : [1370.64, 1101.99]
-Measurements : [1396.58, 248339, -0.316641, -0.334658]
----
-Label        : 1
-Position     : [1058.75, 1102.49]
-Measurements : [1628.46, 302853, -0.188964, -0.753754]
----
-Label        : 1
-Position     : [1.57639, 1102.61]
-Measurements : [1601.33, 289616, -0.219549, -0.721911]
----
-Label        : 1
-Position     : [1351.91, 1102.71]
-Measurements : [1484.21, 352827, -0.0893716, -0.946487]
----
-Label        : 1
-Position     : [1374.8, 1102.88]
-Measurements : [1738.75, 288032, -0.372391, -0.0228555]
----
-Label        : 1
-Position     : [953.439, 1103.15]
-Measurements : [984.832, 346054, 0.856744, -0.588939]
----
-Label        : 0
-Position     : [160.971, 1103.19]
-Measurements : [724.351, 44779.5, -0.059758, -1.40541]
----
-Label        : 0
-Position     : [207.841, 1103.28]
-Measurements : [1796.71, 54799.9, -0.671429, -0.369486]
----
-Label        : 0
-Position     : [108.015, 1103.47]
-Measurements : [1269.7, 112492, 1.16842, 0.816407]
----
-Label        : 0
-Position     : [107.22, 1103.59]
-Measurements : [1285.44, 109878, 1.12114, 0.730062]
----
-Label        : 1
-Position     : [1026.96, 1103.87]
-Measurements : [1777.23, 320502, -0.294373, -0.329193]
----
-Label        : 1
-Position     : [890.33, 1104.27]
-Measurements : [1299.04, 187758, 0.438932, -0.610869]
----
-Label        : 1
-Position     : [1362.6, 1104.36]
-Measurements : [1950.16, 219665, -0.46113, -0.819057]
----
-Label        : 1
-Position     : [1383.49, 1104.36]
-Measurements : [1244.92, 331576, 1.1062, 0.490336]
----
-Label        : 1
-Position     : [1382.66, 1104.39]
-Measurements : [1401.5, 352386, 0.886507, -0.481211]
----
-Label        : 1
-Position     : [1354.91, 1104.62]
-Measurements : [1682.52, 273612, -0.373785, -0.51851]
----
-Label        : 1
-Position     : [1059.7, 1104.76]
-Measurements : [1350.82, 406200, 0.37374, -1.02033]
----
-Label        : 1
-Position     : [1368.34, 1104.77]
-Measurements : [1691.7, 200827, 0.368456, -0.26652]
----
-Label        : 1
-Position     : [1023.87, 1104.96]
-Measurements : [1458, 389818, -0.209666, -0.829614]
----
-Label        : 1
-Position     : [1025.89, 1105.49]
-Measurements : [1756.79, 279987, -0.117236, -0.0488144]
----
-Label        : 1
-Position     : [8.95123, 1105.63]
-Measurements : [1303.79, 454884, 0.291148, -1.36364]
----
-Label        : 1
-Position     : [1358.7, 1105.7]
-Measurements : [2031.7, 158278, -0.423964, -0.477682]
----
-Label        : 1
-Position     : [5.096, 1105.72]
-Measurements : [1570.48, 340261, -0.103748, -1.17403]
----
-Label        : 1
-Position     : [906.602, 1105.98]
-Measurements : [964.055, 268656, 0.725827, -0.919944]
----
-Label        : 1
-Position     : [1376.12, 1106]
-Measurements : [1828.25, 224641, -0.0527603, -0.740408]
----
-Label        : 1
-Position     : [1027.23, 1106.06]
-Measurements : [1864.37, 211691, 0.211352, -0.57113]
----
-Label        : 1
-Position     : [1054.68, 1106.47]
-Measurements : [1572.47, 307838, -0.072663, -0.763482]
----
-Label        : 1
-Position     : [1343.89, 1106.63]
-Measurements : [981.832, 344030, 0.488675, -1.10683]
----
-Label        : 1
-Position     : [1347.04, 1106.82]
-Measurements : [1366.16, 267692, -0.259933, -0.695874]
----
-Label        : 1
-Position     : [1101.96, 1107.06]
-Measurements : [693.533, 246960, 1.72661, 1.89091]
----
-Label        : 1
-Position     : [1297.39, 1107.21]
-Measurements : [1697.71, 187214, -0.204008, -0.379521]
----
-Label        : 1
-Position     : [1366.5, 1107.48]
-Measurements : [1897.71, 183652, 0.0371842, -1.19696]
----
-Label        : 1
-Position     : [1280.99, 1107.58]
-Measurements : [1486.57, 370590, -0.40729, -0.873565]
----
-Label        : 1
-Position     : [956.079, 1107.69]
-Measurements : [1066.09, 285122, 0.601048, -0.64029]
----
-Label        : 1
-Position     : [1388.23, 1107.98]
-Measurements : [735.539, 93974.7, 0.727868, -1.10259]
----
-Label        : 1
-Position     : [1286.68, 1108]
-Measurements : [1931.54, 412761, -0.216404, -1.05659]
----
-Label        : 1
-Position     : [1278.63, 1108.05]
-Measurements : [1336.12, 378464, -0.312573, -1.35284]
----
-Label        : 1
-Position     : [1354, 1108.05]
-Measurements : [1738.64, 198563, -0.142728, -0.353238]
----
-Label        : 1
-Position     : [1045.38, 1108.09]
-Measurements : [1177.11, 274813, 0.64846, -0.664975]
----
-Label        : 1
-Position     : [1286.83, 1108.46]
-Measurements : [1931.06, 413266, -0.226095, -1.04297]
----
-Label        : 1
-Position     : [1053.66, 1108.46]
-Measurements : [1422.39, 325971, 0.100455, -1.05721]
----
-Label        : 1
-Position     : [1104.34, 1108.46]
-Measurements : [575.281, 57501.1, 1.22683, 1.04365]
----
-Label        : 1
-Position     : [946.603, 1108.5]
-Measurements : [782.057, 193687, 1.07718, 0.646128]
----
-Label        : 1
-Position     : [1054.17, 1108.78]
-Measurements : [1383.63, 338687, 0.129883, -1.06391]
----
-Label        : 1
-Position     : [1333.11, 1108.87]
-Measurements : [1033.58, 287961, 0.39674, -1.13897]
----
-Label        : 1
-Position     : [10.8959, 1108.96]
-Measurements : [1170.48, 463215, 0.493087, -1.38174]
----
-Label        : 1
-Position     : [1028.03, 1108.97]
-Measurements : [1773.71, 216997, 0.405007, -0.17]
----
-Label        : 1
-Position     : [1052.52, 1109.13]
-Measurements : [1367.04, 357078, 0.155066, -1.24615]
----
-Label        : 1
-Position     : [956.372, 1109.34]
-Measurements : [1172.45, 242434, 0.337028, -0.490947]
----
-Label        : 1
-Position     : [1289.57, 1109.87]
-Measurements : [1979.6, 404496, -0.406364, -0.864684]
----
-Label        : 1
-Position     : [978.567, 1109.96]
-Measurements : [1150.55, 377732, 0.396928, -1.21534]
----
-Label        : 1
-Position     : [911.574, 1110.01]
-Measurements : [845.849, 213549, 1.41013, 0.460357]
----
-Label        : 1
-Position     : [908.039, 1110.16]
-Measurements : [945.205, 241040, 0.875315, -0.74]
----
-Label        : 1
-Position     : [1049.76, 1110.16]
-Measurements : [1329.51, 413382, 0.208955, -1.4339]
----
-Label        : 1
-Position     : [1101.37, 1110.57]
-Measurements : [995.652, 389863, 0.814415, -0.643937]
----
-Label        : 1
-Position     : [1324.85, 1110.69]
-Measurements : [884.812, 314874, 1.11923, -0.151081]
----
-Label        : 1
-Position     : [1337.67, 1110.81]
-Measurements : [957.856, 354605, 0.610579, -1.23341]
----
-Label        : 1
-Position     : [7.656, 1110.84]
-Measurements : [1562, 411152, -0.244827, -1.25374]
----
-Label        : 1
-Position     : [978.49, 1110.98]
-Measurements : [1232.67, 377358, 0.163689, -1.34218]
----
-Label        : 1
-Position     : [612.892, 1111.5]
-Measurements : [864.653, 307860, 0.687751, -1.14504]
----
-Label        : 1
-Position     : [1096.4, 1111.57]
-Measurements : [1354.82, 395499, 0.0452553, -1.24968]
----
-Label        : 1
-Position     : [951.457, 1111.8]
-Measurements : [1278.37, 129893, 0.122527, 0.827308]
----
-Label        : 1
-Position     : [1025.59, 1111.8]
-Measurements : [1434.87, 383222, 0.206401, -0.280155]
----
-Label        : 1
-Position     : [1307.06, 1112.04]
-Measurements : [1687.16, 264750, 0.130994, -1.141]
----
-Label        : 1
-Position     : [2.80576, 1112.05]
-Measurements : [1442.89, 286329, 0.0951319, -1.16083]
----
-Label        : 1
-Position     : [1293.79, 1112.15]
-Measurements : [1753.35, 306211, -0.230339, -0.333576]
----
-Label        : 1
-Position     : [1280.12, 1112.24]
-Measurements : [1545.92, 294644, -0.352696, -0.902354]
----
-Label        : 1
-Position     : [618.399, 1112.39]
-Measurements : [1400.61, 378591, -0.269551, -1.18181]
----
-Label        : 1
-Position     : [1328.58, 1112.93]
-Measurements : [796.678, 196306, 1.02998, -0.154111]
----
-Label        : 1
-Position     : [617.7, 1113.39]
-Measurements : [1425.42, 362603, -0.337889, -1.06499]
----
-Label        : 0
-Position     : [130.119, 1113.8]
-Measurements : [984.168, 59335, 0.30838, -1.12156]
----
-Label        : 1
-Position     : [8.58797, 1113.86]
-Measurements : [1536.36, 404599, -0.164655, -1.29883]
----
-Label        : 1
-Position     : [956.635, 1113.88]
-Measurements : [1268.47, 153921, 0.618902, -0.11014]
----
-Label        : 1
-Position     : [984.364, 1114.12]
-Measurements : [1046.4, 337437, 0.667562, -0.749976]
----
-Label        : 0
-Position     : [248.516, 1114.17]
-Measurements : [1113.12, 11579.1, -1.39855, 3.19304]
----
-Label        : 1
-Position     : [1101.55, 1114.5]
-Measurements : [1282.52, 374272, 0.506245, -0.888592]
----
-Label        : 1
-Position     : [1320.41, 1114.6]
-Measurements : [1032.15, 270371, 0.861253, -0.49313]
----
-Label        : 1
-Position     : [948.112, 1114.65]
-Measurements : [1270.24, 179928, -0.104498, -0.519677]
----
-Label        : 1
-Position     : [891.655, 1114.67]
-Measurements : [1530.64, 390562, -0.0528693, -1.10978]
----
-Label        : 1
-Position     : [1295.07, 1114.68]
-Measurements : [1653.16, 179768, -0.267496, -0.691445]
----
-Label        : 1
-Position     : [1302.8, 1115.01]
-Measurements : [1648.35, 236677, -0.464077, -1.00253]
----
-Label        : 1
-Position     : [1098.09, 1115.08]
-Measurements : [1475.44, 305910, 0.0457305, -0.926588]
----
-Label        : 1
-Position     : [1302.74, 1115.3]
-Measurements : [1648.35, 236677, -0.464077, -1.00253]
----
-Label        : 1
-Position     : [296.146, 1115.3]
-Measurements : [1233.36, 173292, 0.214674, -0.832506]
----
-Label        : 0
-Position     : [260.476, 1115.4]
-Measurements : [823.993, 24804.4, -0.332099, -0.353432]
----
-Label        : 1
-Position     : [894.226, 1115.45]
-Measurements : [1443.88, 406293, 0.214301, -1.19304]
----
-Label        : 1
-Position     : [320.12, 1115.73]
-Measurements : [1070.28, 292634, 0.670746, -0.554849]
----
-Label        : 1
-Position     : [1302.22, 1115.74]
-Measurements : [1648.35, 236677, -0.464077, -1.00253]
----
-Label        : 1
-Position     : [974.292, 1115.86]
-Measurements : [1336.8, 240706, -0.242379, -0.928976]
----
-Label        : 1
-Position     : [1310.58, 1116.24]
-Measurements : [1252.35, 204340, 0.579078, -0.194194]
----
-Label        : 1
-Position     : [1024.84, 1116.43]
-Measurements : [925.682, 275505, 0.602451, -1.18428]
----
-Label        : 1
-Position     : [953.459, 1116.57]
-Measurements : [1343.78, 154165, 0.183803, -0.887349]
----
-Label        : 1
-Position     : [1315.21, 1116.59]
-Measurements : [1089.48, 148798, 0.326079, -0.771989]
----
-Label        : 1
-Position     : [621.295, 1116.65]
-Measurements : [1077.61, 392418, 0.611573, -1.22381]
----
-Label        : 1
-Position     : [950.638, 1116.71]
-Measurements : [1398.97, 142219, -0.0764231, -0.526]
----
-Label        : 1
-Position     : [297.592, 1116.75]
-Measurements : [1148.73, 207589, 0.288315, -1.13186]
----
-Label        : 1
-Position     : [7.144, 1116.98]
-Measurements : [1672.28, 250227, -0.613578, -0.382394]
----
-Label        : 1
-Position     : [1315.69, 1117.06]
-Measurements : [1052.25, 128330, 0.30612, -0.789024]
----
-Label        : 1
-Position     : [322.204, 1117.2]
-Measurements : [1072.93, 231534, 1.07337, 0.251528]
----
-Label        : 1
-Position     : [976.936, 1117.26]
-Measurements : [1466.07, 232995, 0.150008, -0.445359]
----
-Label        : 1
-Position     : [980.538, 1117.53]
-Measurements : [1380.98, 200485, 0.198664, -0.4273]
----
-Label        : 1
-Position     : [318.379, 1117.76]
-Measurements : [922.922, 330255, 0.989479, -0.28201]
----
-Label        : 1
-Position     : [293.031, 1118.43]
-Measurements : [1183.39, 110523, 0.586584, -0.21553]
----
-Label        : 1
-Position     : [896.518, 1118.63]
-Measurements : [1135.73, 502124, 0.773855, -0.946832]
----
-Label        : 0
-Position     : [162.013, 1118.89]
-Measurements : [1046.11, 3723.81, -0.18434, -0.555536]
----
-Label        : 1
-Position     : [947.969, 1119.13]
-Measurements : [1296.02, 313995, -0.281319, -1.34654]
----
-Label        : 1
-Position     : [1040.98, 1119.33]
-Measurements : [817.424, 132441, 0.391018, -0.924471]
----
-Label        : 0
-Position     : [107.701, 1119.51]
-Measurements : [1004.92, 15855.4, -0.504019, 1.26513]
----
-Label        : 1
-Position     : [617.7, 1119.53]
-Measurements : [1110.42, 314501, 0.461469, -1.24448]
----
-Label        : 1
-Position     : [954.222, 1119.68]
-Measurements : [1350.9, 197683, 0.187335, -1.30852]
----
-Label        : 1
-Position     : [979.157, 1120.44]
-Measurements : [1218.54, 187873, 0.34507, 0.00234448]
----
-Label        : 1
-Position     : [1022.52, 1120.46]
-Measurements : [1025.14, 321899, 0.33598, -1.43068]
----
-Label        : 1
-Position     : [1095.19, 1120.64]
-Measurements : [1535.75, 232272, -0.142176, -0.500953]
----
-Label        : 1
-Position     : [1097.72, 1120.92]
-Measurements : [1554.26, 258599, 0.0481866, -0.942775]
----
-Label        : 0
-Position     : [224.089, 1120.93]
-Measurements : [1030.74, 2676.05, -2.31253, 8.00231]
----
-Label        : 1
-Position     : [1019.45, 1121.22]
-Measurements : [1185.69, 358416, -0.0286825, -1.36273]
----
-Label        : 1
-Position     : [1095.64, 1121.22]
-Measurements : [1529.92, 191916, -0.126115, -0.578863]
----
-Label        : 1
-Position     : [6.71789, 1121.62]
-Measurements : [1591.16, 264087, -0.287199, -1.10858]
----
-Label        : 1
-Position     : [949.825, 1121.73]
-Measurements : [1363.53, 299022, -0.430466, -1.25047]
----
-Label        : 1
-Position     : [1021.64, 1122.08]
-Measurements : [1250.54, 324483, -0.13649, -1.24278]
----
-Label        : 0
-Position     : [230.059, 1122.35]
-Measurements : [929.305, 11586.8, -0.75956, -0.103885]
----
-Label        : 1
-Position     : [974.394, 1123.27]
-Measurements : [1524.68, 369930, 0.49282, -0.548381]
----
-Label        : 1
-Position     : [1044.44, 1123.27]
-Measurements : [1032.55, 276660, -0.0447536, -1.51575]
----
-Label        : 1
-Position     : [1022.65, 1123.3]
-Measurements : [1290.52, 294234, -0.0652611, -1.0898]
----
-Label        : 1
-Position     : [968.949, 1123.43]
-Measurements : [1471.81, 415163, 0.457305, -0.784827]
----
-Label        : 1
-Position     : [624.191, 1124]
-Measurements : [890.2, 244990, 1.03644, -0.172235]
----
-Label        : 1
-Position     : [621.857, 1124.07]
-Measurements : [696.259, 94737.2, 2.18233, 5.84234]
----
-Label        : 1
-Position     : [949.818, 1124.09]
-Measurements : [1065.72, 362022, 0.449653, -1.43843]
----
-Label        : 1
-Position     : [631.038, 1124.12]
-Measurements : [1591.81, 319505, -0.41229, -0.844146]
----
-Label        : 1
-Position     : [9.704, 1124.15]
-Measurements : [1231.3, 422557, 0.200027, -1.68301]
----
-Label        : 0
-Position     : [157.119, 1124.41]
-Measurements : [1056.4, 38740.7, 0.247114, 1.08397]
----
-Label        : 1
-Position     : [626.302, 1124.45]
-Measurements : [1135.07, 375979, 0.387306, -1.30277]
----
-Label        : 1
-Position     : [1018.56, 1124.71]
-Measurements : [1454.8, 237028, -0.350559, -0.532075]
----
-Label        : 1
-Position     : [1018.22, 1124.91]
-Measurements : [1454.8, 237028, -0.350559, -0.532075]
----
-Label        : 1
-Position     : [978.837, 1125.23]
-Measurements : [1029.9, 317605, 1.10817, 0.583133]
----
-Label        : 1
-Position     : [1091.56, 1125.33]
-Measurements : [1160.73, 394681, 0.120183, -1.66112]
----
-Label        : 1
-Position     : [10.8516, 1125.62]
-Measurements : [1072.72, 420117, 0.609403, -1.38314]
----
-Label        : 1
-Position     : [1094, 1125.73]
-Measurements : [1281.12, 329526, -0.17595, -1.51126]
----
-Label        : 1
-Position     : [1047.27, 1125.95]
-Measurements : [1123.06, 295589, 0.135125, -1.40774]
----
-Label        : 1
-Position     : [744.838, 1126.11]
-Measurements : [1022.72, 313192, 0.0629765, -1.35426]
----
-Label        : 1
-Position     : [969.889, 1126.14]
-Measurements : [1628.39, 366728, 0.126048, -0.745168]
----
-Label        : 1
-Position     : [295.032, 1126.48]
-Measurements : [1047.8, 249877, 0.483722, -1.19177]
----
-Label        : 1
-Position     : [291.874, 1126.57]
-Measurements : [1226.69, 138531, 0.392667, -0.314183]
----
-Label        : 1
-Position     : [292.404, 1126.67]
-Measurements : [1184.46, 174180, 0.208548, -0.657442]
----
-Label        : 1
-Position     : [969.433, 1126.79]
-Measurements : [1628.39, 366728, 0.126048, -0.745168]
----
-Label        : 0
-Position     : [151.959, 1126.84]
-Measurements : [1303.66, 157811, 0.0185304, -1.25052]
----
-Label        : 0
-Position     : [120.577, 1127.36]
-Measurements : [928.118, 13857.8, -1.64526, 1.98989]
----
-Label        : 1
-Position     : [1039.26, 1127.91]
-Measurements : [1241.12, 142161, -0.0150767, -0.759667]
----
-Label        : 1
-Position     : [5.30779, 1128.1]
-Measurements : [944.431, 304391, 1.04353, -0.335558]
----
-Label        : 1
-Position     : [1044.95, 1128.21]
-Measurements : [1454.37, 136002, -0.408306, -0.050401]
----
-Label        : 1
-Position     : [311.796, 1128.43]
-Measurements : [516.136, 43139.8, 1.83871, 2.18098]
----
-Label        : 1
-Position     : [746.724, 1128.54]
-Measurements : [1272.59, 222451, -0.216323, -0.631394]
----
-Label        : 0
-Position     : [100.428, 1128.93]
-Measurements : [969.132, 17879.2, -1.87672, 3.23088]
----
-Label        : 1
-Position     : [629.988, 1128.95]
-Measurements : [1700.89, 271813, -0.587899, -0.553474]
----
-Label        : 1
-Position     : [1086.68, 1129]
-Measurements : [787.301, 243765, 0.993342, -0.472551]
----
-Label        : 1
-Position     : [317.693, 1129]
-Measurements : [683.774, 58613.4, 0.188041, -0.887551]
----
-Label        : 1
-Position     : [971.558, 1129.4]
-Measurements : [1583.45, 291772, 0.569015, -0.192093]
----
-Label        : 1
-Position     : [969.959, 1129.88]
-Measurements : [1568.55, 315171, 0.451701, -0.295612]
----
-Label        : 1
-Position     : [1093.55, 1130.14]
-Measurements : [1096.95, 319763, 0.296364, -1.56766]
----
-Label        : 0
-Position     : [159.72, 1130.31]
-Measurements : [1085.67, 24078.9, -1.41563, 0.937455]
----
-Label        : 1
-Position     : [632.224, 1130.54]
-Measurements : [1875.29, 224853, -0.527495, -0.187398]
----
-Label        : 1
-Position     : [36.0026, 1130.6]
-Measurements : [1136.47, 392664, 0.141498, -1.26417]
----
-Label        : 1
-Position     : [1042.8, 1130.64]
-Measurements : [1521.63, 124932, -0.389979, -0.22042]
----
-Label        : 1
-Position     : [758.59, 1130.77]
-Measurements : [1512.8, 209622, -0.204781, -0.762893]
----
-Label        : 1
-Position     : [744.207, 1130.96]
-Measurements : [1195.6, 321731, -0.103009, -1.15426]
----
-Label        : 1
-Position     : [972.346, 1131.46]
-Measurements : [1481.66, 277398, 0.499083, 0.146027]
----
-Label        : 1
-Position     : [1091.02, 1131.51]
-Measurements : [1122.69, 319490, 0.114157, -1.64666]
----
-Label        : 0
-Position     : [205.482, 1131.59]
-Measurements : [1024.32, 12456.4, -2.56799, 8.61018]
----
-Label        : 1
-Position     : [43.844, 1131.87]
-Measurements : [1165.39, 284950, 0.863729, -0.753485]
----
-Label        : 1
-Position     : [39.4, 1131.9]
-Measurements : [1323.52, 251333, 0.317063, -1.07014]
----
-Label        : 1
-Position     : [314.488, 1132.62]
-Measurements : [766.555, 98758.9, 0.502569, -0.347876]
----
-Label        : 1
-Position     : [755.735, 1132.64]
-Measurements : [1504.91, 199923, 0.0839969, -1.0132]
----
-Label        : 1
-Position     : [631.11, 1133.04]
-Measurements : [1912.48, 211997, -0.537191, -0.172032]
----
-Label        : 1
-Position     : [1013.17, 1133.05]
-Measurements : [894.744, 184817, 0.300538, -1.50086]
----
-Label        : 1
-Position     : [1091.54, 1133.92]
-Measurements : [1186.44, 283275, -0.077929, -1.60438]
----
-Label        : 1
-Position     : [636.554, 1134.26]
-Measurements : [1660.44, 458292, -0.295868, -1.13566]
----
-Label        : 1
-Position     : [763.518, 1134.28]
-Measurements : [1230.6, 175525, 0.292462, -0.451196]
----
-Label        : 1
-Position     : [632.855, 1134.69]
-Measurements : [1893.81, 243747, -0.403782, -0.526413]
----
-Label        : 0
-Position     : [138.906, 1135.02]
-Measurements : [853.322, 12556.1, -1.76641, 2.77119]
----
-Label        : 0
-Position     : [200.477, 1135.77]
-Measurements : [828.799, 54698.7, -0.23034, -1.74816]
----
-Label        : 0
-Position     : [108.981, 1135.89]
-Measurements : [983.519, 5901.38, 0.460685, -1.0713]
----
-Label        : 1
-Position     : [1041.57, 1135.97]
-Measurements : [1251.27, 327451, -0.15749, -1.4196]
----
-Label        : 1
-Position     : [627.992, 1135.99]
-Measurements : [1501.21, 319429, 0.354041, -1.01453]
----
-Label        : 1
-Position     : [291.948, 1136.01]
-Measurements : [932.205, 216500, 0.937441, 0.266747]
----
-Label        : 1
-Position     : [1014.94, 1136.38]
-Measurements : [1153.14, 210896, -0.307712, -1.17327]
----
-Label        : 1
-Position     : [751.069, 1136.78]
-Measurements : [1308.03, 278297, 0.186299, -1.09681]
----
-Label        : 1
-Position     : [653.314, 1136.83]
-Measurements : [1675.46, 782722, -0.111543, -1.20664]
----
-Label        : 1
-Position     : [964.966, 1136.94]
-Measurements : [896.149, 238106, 0.953832, -0.326273]
----
-Label        : 0
-Position     : [132.735, 1137.13]
-Measurements : [872.972, 4561.19, -0.534553, -0.715854]
----
-Label        : 1
-Position     : [969.07, 1137.19]
-Measurements : [1169.75, 268077, 0.0518946, -1.35931]
----
-Label        : 1
-Position     : [756.638, 1137.43]
-Measurements : [1260.57, 167288, 0.543398, -0.0136713]
----
-Label        : 0
-Position     : [141.091, 1137.53]
-Measurements : [1042.07, 130453, 0.966673, -0.26523]
----
-Label        : 1
-Position     : [636.132, 1137.97]
-Measurements : [1670.41, 480113, -0.268542, -1.1685]
----
-Label        : 1
-Position     : [1042.9, 1138.02]
-Measurements : [1005.13, 312595, 0.562031, -1.28514]
----
-Label        : 1
-Position     : [289.4, 1138.26]
-Measurements : [1010.6, 192603, 0.756089, 0.267923]
----
-Label        : 1
-Position     : [634.692, 1138.36]
-Measurements : [1785.04, 378250, -0.29383, -1.0051]
----
-Label        : 1
-Position     : [637.73, 1138.36]
-Measurements : [1490.32, 572827, -0.012165, -1.43545]
----
-Label        : 1
-Position     : [767.328, 1138.98]
-Measurements : [714.19, 180572, 1.65842, 1.85807]
----
-Label        : 1
-Position     : [1087.85, 1139.65]
-Measurements : [1557.74, 150628, -0.833591, 0.385313]
----
-Label        : 1
-Position     : [1044.49, 1139.7]
-Measurements : [926.791, 294133, 0.952724, -0.73062]
----
-Label        : 1
-Position     : [286.235, 1139.74]
-Measurements : [1169.68, 114625, 0.984141, 1.90722]
----
-Label        : 1
-Position     : [1092.81, 1139.97]
-Measurements : [1459.3, 216384, -0.329166, -1.1956]
----
-Label        : 0
-Position     : [228.639, 1140.23]
-Measurements : [1232.22, 46859.2, 0.371178, -1.35799]
----
-Label        : 1
-Position     : [1017.97, 1140.42]
-Measurements : [1381.77, 200423, -0.277902, -0.420345]
----
-Label        : 1
-Position     : [651.697, 1140.42]
-Measurements : [1749.46, 814711, -0.220851, -1.42414]
----
-Label        : 0
-Position     : [156.826, 1140.82]
-Measurements : [1283.51, 161811, 0.675848, -0.56946]
----
-Label        : 1
-Position     : [1013.54, 1141.32]
-Measurements : [1565.07, 120026, -0.53445, 1.17169]
----
-Label        : 1
-Position     : [647.501, 1141.55]
-Measurements : [1495.26, 867369, 0.101414, -1.50972]
----
-Label        : 1
-Position     : [1014.54, 1141.7]
-Measurements : [1576.32, 107979, -0.135096, 0.499446]
----
-Label        : 1
-Position     : [721.202, 1141.72]
-Measurements : [956.677, 196307, 0.142456, -0.763618]
----
-Label        : 1
-Position     : [964.79, 1141.74]
-Measurements : [625.868, 172911, 2.54853, 5.27219]
----
-Label        : 0
-Position     : [169.854, 1141.85]
-Measurements : [1308.13, 58658.9, 0.526328, -0.868855]
----
-Label        : 0
-Position     : [171.863, 1141.92]
-Measurements : [1435.59, 59089.7, 0.149777, -1.40351]
----
-Label        : 1
-Position     : [1088.57, 1142.41]
-Measurements : [1621.93, 137380, -0.648513, -0.0471067]
----
-Label        : 0
-Position     : [129.945, 1142.46]
-Measurements : [919.733, 933.24, -0.472886, 0.434218]
----
-Label        : 1
-Position     : [1009.14, 1143.37]
-Measurements : [1468.03, 216957, -0.476265, -0.181204]
----
-Label        : 0
-Position     : [240.962, 1143.41]
-Measurements : [843.451, 43046.5, -0.0668802, -1.1608]
----
-Label        : 1
-Position     : [1088.97, 1143.47]
-Measurements : [1593.35, 153600, -0.526202, -0.464171]
----
-Label        : 1
-Position     : [1012.99, 1144.63]
-Measurements : [1660.72, 121411, -0.0882883, -0.218307]
----
-Label        : 0
-Position     : [126.5, 1144.64]
-Measurements : [918.687, 3970.85, -0.876945, 3.51086]
----
-Label        : 1
-Position     : [6.632, 1144.7]
-Measurements : [2221.2, 349450, -0.814199, 0.21863]
----
-Label        : 1
-Position     : [720.51, 1144.93]
-Measurements : [1024.62, 192598, -0.0422643, -0.732742]
----
-Label        : 1
-Position     : [1038.29, 1145.39]
-Measurements : [1146.85, 292515, 0.493896, -0.273585]
----
-Label        : 0
-Position     : [136.404, 1145.43]
-Measurements : [905.554, 1004.83, 0.788542, -0.0894318]
----
-Label        : 1
-Position     : [1010.03, 1145.8]
-Measurements : [1591.95, 179658, -0.444554, 0.0879009]
----
-Label        : 1
-Position     : [1085.4, 1145.8]
-Measurements : [1588.85, 150307, -0.56307, -0.154259]
----
-Label        : 1
-Position     : [722.799, 1146]
-Measurements : [1136.63, 106376, 0.292177, 0.284196]
----
-Label        : 1
-Position     : [287.199, 1146.22]
-Measurements : [1101.02, 247833, 0.400411, -1.08682]
----
-Label        : 1
-Position     : [1088.31, 1146.43]
-Measurements : [1467.95, 222410, -0.324458, -1.12877]
----
-Label        : 1
-Position     : [1041.03, 1146.46]
-Measurements : [1114.59, 438922, 0.88341, -0.170194]
----
-Label        : 0
-Position     : [165.737, 1146.89]
-Measurements : [1149.03, 11686.3, 0.378348, -0.73669]
----
-Label        : 1
-Position     : [3.14686, 1147.61]
-Measurements : [2315.14, 211255, -0.643725, 0.380212]
----
-Label        : 1
-Position     : [1006.06, 1147.66]
-Measurements : [1407.08, 273096, -0.286826, -0.823738]
----
-Label        : 1
-Position     : [5.76968, 1147.75]
-Measurements : [2361.71, 192047, -0.574013, 0.0944329]
----
-Label        : 0
-Position     : [95.8535, 1148.89]
-Measurements : [1043.14, 4039.13, 0.34265, -0.976442]
----
-Label        : 1
-Position     : [286.84, 1149.01]
-Measurements : [1117.53, 249389, 0.324471, -1.20021]
----
-Label        : 1
-Position     : [1086.57, 1149.1]
-Measurements : [1433.75, 258862, -0.295462, -1.1583]
----
-Label        : 1
-Position     : [314.043, 1149.17]
-Measurements : [826.213, 111604, 2.41388, 5.83775]
----
-Label        : 0
-Position     : [192.486, 1149.6]
-Measurements : [1209.73, 54018, 0.352959, -1.42971]
----
-Label        : 1
-Position     : [1003.13, 1149.7]
-Measurements : [1219.37, 389379, 0.0325397, -1.45289]
----
-Label        : 1
-Position     : [1034.21, 1149.78]
-Measurements : [1454.99, 245800, 0.853194, 0.595]
----
-Label        : 1
-Position     : [1035.42, 1149.89]
-Measurements : [1502.71, 269280, 0.806998, 0.273687]
----
-Label        : 1
-Position     : [309.224, 1150.05]
-Measurements : [953.735, 197743, 1.02165, 0.178332]
----
-Label        : 0
-Position     : [230.115, 1150.06]
-Measurements : [1163.99, 13498.4, 0.267976, 0.623753]
----
-Label        : 1
-Position     : [1007.35, 1150.61]
-Measurements : [1595.08, 253254, -0.341438, -0.521532]
----
-Label        : 1
-Position     : [1084.17, 1150.71]
-Measurements : [1475.29, 253947, -0.285451, -1.11393]
----
-Label        : 0
-Position     : [220.38, 1150.72]
-Measurements : [1406.21, 45677.3, -0.887135, -0.654873]
----
-Label        : 1
-Position     : [6.64686, 1150.84]
-Measurements : [2067.21, 313072, -0.488555, -0.721966]
----
-Label        : 1
-Position     : [774.755, 1151.02]
-Measurements : [905.172, 304152, 0.737353, -0.883288]
----
-Label        : 0
-Position     : [91.127, 1151.09]
-Measurements : [1173.03, 21051.2, 1.37188, 2.70561]
----
-Label        : 1
-Position     : [6.12, 1151.35]
-Measurements : [1990.35, 281745, -0.410493, -0.84822]
----
-Label        : 1
-Position     : [1037.28, 1151.55]
-Measurements : [1595.3, 336847, 0.242418, -0.754099]
----
-Label        : 0
-Position     : [227.787, 1151.76]
-Measurements : [1181.88, 21940.6, 0.713167, 0.331678]
----
-Label        : 1
-Position     : [666.065, 1151.78]
-Measurements : [1255.1, 705566, 0.311059, -1.2594]
----
-Label        : 1
-Position     : [1080.88, 1152.84]
-Measurements : [1460.67, 278986, -0.15895, -0.692329]
----
-Label        : 1
-Position     : [1110.92, 1152.98]
-Measurements : [1654.6, 296910, 0.40103, -1.11604]
----
-Label        : 1
-Position     : [1007.16, 1153.17]
-Measurements : [1409.85, 367620, 0.140601, -1.3886]
----
-Label        : 0
-Position     : [229.56, 1153.27]
-Measurements : [1206.73, 15553.6, -0.114988, 1.07142]
----
-Label        : 1
-Position     : [1037.59, 1153.44]
-Measurements : [1598.85, 354198, 0.19774, -0.92183]
----
-Label        : 1
-Position     : [288.516, 1153.69]
-Measurements : [772.077, 259186, 1.52119, 0.813144]
----
-Label        : 1
-Position     : [776.225, 1153.75]
-Measurements : [1026.53, 339644, 0.545387, -1.15853]
----
-Label        : 1
-Position     : [2.78325, 1153.99]
-Measurements : [1864.55, 216033, -0.0864642, -1.06612]
----
-Label        : 1
-Position     : [1087.3, 1154.25]
-Measurements : [1103.6, 225363, 0.64597, -0.747493]
----
-Label        : 1
-Position     : [1110.26, 1154.52]
-Measurements : [1739.89, 238706, 0.335358, -0.886881]
----
-Label        : 0
-Position     : [174.137, 1154.67]
-Measurements : [1427.73, 47665.8, -0.630245, 0.509506]
----
-Label        : 0
-Position     : [145.05, 1154.7]
-Measurements : [1221.8, 217789, 0.157037, -1.34233]
----
-Label        : 1
-Position     : [308.506, 1154.71]
-Measurements : [940.75, 113844, 0.931214, 0.922325]
----
-Label        : 0
-Position     : [146.191, 1154.85]
-Measurements : [1310.59, 242056, -0.125762, -1.39595]
----
-Label        : 0
-Position     : [102.193, 1155.2]
-Measurements : [1118.24, 13183, 2.62639, 11.1511]
----
-Label        : 1
-Position     : [666.852, 1155.58]
-Measurements : [1504.53, 639924, 0.0798386, -1.17231]
----
-Label        : 1
-Position     : [1034.2, 1155.63]
-Measurements : [1637.8, 254615, 0.313633, -0.432779]
----
-Label        : 1
-Position     : [45.6109, 1155.75]
-Measurements : [950.641, 388082, 0.550202, -1.27312]
----
-Label        : 1
-Position     : [1037.82, 1155.83]
-Measurements : [1584.5, 376728, 0.0635747, -0.84991]
----
-Label        : 1
-Position     : [46.8161, 1156.08]
-Measurements : [1136.68, 416802, 0.115468, -1.46727]
----
-Label        : 1
-Position     : [1032.58, 1157.1]
-Measurements : [1525.62, 196565, -0.348416, -0.261578]
----
-Label        : 1
-Position     : [10.4649, 1157.13]
-Measurements : [1282.26, 370987, 0.432619, -0.768665]
----
-Label        : 1
-Position     : [775.569, 1157.18]
-Measurements : [1327.56, 259850, -0.136, -1.26029]
----
-Label        : 1
-Position     : [1081.8, 1157.22]
-Measurements : [1610.31, 315715, 0.163968, -0.849958]
----
-Label        : 1
-Position     : [774.257, 1157.31]
-Measurements : [1382.79, 219603, -0.214492, -1.06328]
----
-Label        : 1
-Position     : [1105, 1157.62]
-Measurements : [1425.5, 190806, 0.0835614, -0.512457]
----
-Label        : 1
-Position     : [1080.89, 1157.67]
-Measurements : [1666.01, 289439, 0.0934961, -0.818089]
----
-Label        : 0
-Position     : [171.875, 1157.77]
-Measurements : [1355.3, 47895.1, -0.920909, 0.891197]
----
-Label        : 1
-Position     : [1111.32, 1157.98]
-Measurements : [1760.22, 302281, -0.161825, -0.755027]
----
-Label        : 0
-Position     : [115.068, 1158.51]
-Measurements : [994.761, 21197.4, -1.6234, 1.83583]
----
-Label        : 1
-Position     : [7.656, 1159.03]
-Measurements : [1305.08, 295855, -0.0831315, -1.50138]
----
-Label        : 1
-Position     : [774.586, 1159.08]
-Measurements : [1431.5, 203821, -0.396619, -0.917594]
----
-Label        : 1
-Position     : [769.236, 1159.26]
-Measurements : [1335.92, 164932, 0.319891, -1.04671]
----
-Label        : 1
-Position     : [1034.28, 1159.48]
-Measurements : [1450.07, 277183, -0.222387, -1.00844]
----
-Label        : 1
-Position     : [44.52, 1159.54]
-Measurements : [1239.65, 490685, -0.0903567, -1.46974]
----
-Label        : 0
-Position     : [179.332, 1159.58]
-Measurements : [1205.49, 43796.6, -0.0434319, -0.203013]
----
-Label        : 1
-Position     : [1037.62, 1159.82]
-Measurements : [1319.67, 355350, 0.0921585, -1.41574]
----
-Label        : 1
-Position     : [671.115, 1160.14]
-Measurements : [855.894, 444276, 1.88032, 2.42662]
----
-Label        : 1
-Position     : [1106.98, 1160.26]
-Measurements : [1417.53, 144462, 0.596014, 0.463787]
----
-Label        : 1
-Position     : [305.64, 1160.29]
-Measurements : [914.347, 122039, 0.866925, 0.920378]
----
-Label        : 1
-Position     : [1032.97, 1160.95]
-Measurements : [1314, 325452, -0.0550434, -1.31711]
----
-Label        : 1
-Position     : [50.5872, 1160.97]
-Measurements : [1673.48, 106613, -0.250052, 0.330115]
----
-Label        : 0
-Position     : [118.672, 1161.44]
-Measurements : [943.731, 18417.6, -1.08217, -0.117994]
----
-Label        : 1
-Position     : [1081.16, 1161.54]
-Measurements : [1778.86, 359125, 0.0385953, -0.998229]
----
-Label        : 1
-Position     : [306.024, 1161.67]
-Measurements : [957.765, 98584.5, 1.28924, 1.91503]
----
-Label        : 1
-Position     : [48.798, 1161.95]
-Measurements : [1687.78, 173141, -0.453277, 1.15164]
----
-Label        : 1
-Position     : [306.365, 1162.03]
-Measurements : [967.185, 101075, 1.47147, 2.27644]
----
-Label        : 0
-Position     : [93.0062, 1162.4]
-Measurements : [1360.46, 232997, 0.935395, -0.174343]
----
-Label        : 1
-Position     : [12.2981, 1162.52]
-Measurements : [894.349, 254483, 1.09828, -0.34333]
----
-Label        : 1
-Position     : [679.14, 1162.95]
-Measurements : [1225.94, 277101, 0.162187, -0.65047]
----
-Label        : 1
-Position     : [1078.84, 1163]
-Measurements : [1769.8, 333630, -0.0293483, -0.710707]
----
-Label        : 1
-Position     : [282.684, 1163.14]
-Measurements : [1146.41, 459797, 0.384399, -1.49957]
----
-Label        : 1
-Position     : [281.166, 1163.16]
-Measurements : [1227.07, 403801, 0.23897, -1.44882]
----
-Label        : 1
-Position     : [775.34, 1163.24]
-Measurements : [1368.95, 322228, -0.187189, -1.3608]
----
-Label        : 1
-Position     : [774.177, 1163.99]
-Measurements : [1458.28, 268717, -0.362289, -1.03724]
----
-Label        : 1
-Position     : [678.286, 1164.26]
-Measurements : [1244.35, 241009, -0.0883215, -0.634315]
----
-Label        : 1
-Position     : [280.552, 1164.38]
-Measurements : [1255.74, 352484, 0.247431, -1.28641]
----
-Label        : 1
-Position     : [770.095, 1164.39]
-Measurements : [1449.94, 272127, -0.241911, -0.944929]
----
-Label        : 1
-Position     : [1082.31, 1164.49]
-Measurements : [1629.05, 450304, 0.211624, -1.18485]
----
-Label        : 1
-Position     : [682.569, 1164.63]
-Measurements : [1591.97, 263869, 0.0242676, -0.852369]
----
-Label        : 1
-Position     : [53.736, 1164.66]
-Measurements : [1796.13, 157909, 0.450942, -0.454492]
----
-Label        : 1
-Position     : [707.639, 1165.03]
-Measurements : [1271.67, 634350, 0.194827, -1.31768]
----
-Label        : 1
-Position     : [1107.74, 1165.1]
-Measurements : [1294.07, 183733, -0.123783, -0.809899]
----
-Label        : 1
-Position     : [1080.77, 1165.63]
-Measurements : [1773.51, 357820, -0.043212, -0.953411]
----
-Label        : 1
-Position     : [776.707, 1165.82]
-Measurements : [1175.26, 343226, 0.274219, -1.43895]
----
-Label        : 1
-Position     : [1103.3, 1165.99]
-Measurements : [1388.72, 111477, 0.094887, -0.0160851]
----
-Label        : 0
-Position     : [178.895, 1166.25]
-Measurements : [1201.14, 27570.1, 1.00641, 1.99209]
----
-Label        : 1
-Position     : [302.207, 1166.63]
-Measurements : [1052.22, 283675, 0.725463, -0.484432]
----
-Label        : 1
-Position     : [686.513, 1166.64]
-Measurements : [1588.11, 374684, -0.160246, -1.22808]
----
-Label        : 1
-Position     : [61.2249, 1166.72]
-Measurements : [1381.32, 483799, 0.404876, -1.14896]
----
-Label        : 1
-Position     : [1100.73, 1166.73]
-Measurements : [1330.61, 135362, 0.478571, 0.565417]
----
-Label        : 1
-Position     : [1078.02, 1167.1]
-Measurements : [1667.27, 358577, 0.223234, -0.891751]
----
-Label        : 1
-Position     : [689.403, 1167.11]
-Measurements : [1324.63, 501103, 0.433018, -1.4523]
----
-Label        : 1
-Position     : [771.719, 1167.27]
-Measurements : [1276.21, 392712, 0.0712801, -1.50023]
----
-Label        : 1
-Position     : [1073.6, 1167.6]
-Measurements : [1424.16, 411550, -0.282248, -1.18686]
----
-Label        : 1
-Position     : [708.044, 1168]
-Measurements : [1499.85, 524059, -0.165003, -0.937737]
----
-Label        : 1
-Position     : [709.86, 1168.28]
-Measurements : [1627.81, 372373, -0.135262, -0.359293]
----
-Label        : 1
-Position     : [304.408, 1168.35]
-Measurements : [1142.16, 211147, 1.00798, 0.0174553]
----
-Label        : 1
-Position     : [302.568, 1168.99]
-Measurements : [1102.22, 259636, 0.694823, -0.419347]
----
-Label        : 1
-Position     : [689.815, 1169.03]
-Measurements : [1196.13, 470720, 0.763316, -0.956375]
----
-Label        : 1
-Position     : [60.904, 1169.27]
-Measurements : [1368.07, 562764, 0.498212, -1.17687]
----
-Label        : 1
-Position     : [1097.62, 1169.43]
-Measurements : [1213.18, 201338, 0.523949, 0.112324]
----
-Label        : 0
-Position     : [166.876, 1169.93]
-Measurements : [1096.64, 6676.84, 1.02148, 1.16828]
----
-Label        : 1
-Position     : [1104.49, 1170]
-Measurements : [1626.49, 183840, -0.02518, -0.151867]
----
-Label        : 1
-Position     : [806.033, 1170.33]
-Measurements : [1158.68, 355309, 0.0438268, -1.25804]
----
-Label        : 1
-Position     : [278.397, 1170.37]
-Measurements : [1205.98, 347297, 0.444187, -1.05963]
----
-Label        : 1
-Position     : [1100.84, 1170.5]
-Measurements : [1525.53, 171933, 0.236063, 0.244859]
----
-Label        : 0
-Position     : [139.794, 1170.86]
-Measurements : [930.684, 4478.8, 0.844888, -0.191425]
----
-Label        : 1
-Position     : [4.93162, 1171.5]
-Measurements : [1118.23, 221427, 0.238215, -1.23187]
----
-Label        : 1
-Position     : [771.066, 1171.65]
-Measurements : [830.07, 360156, 1.38665, 0.414918]
----
-Label        : 1
-Position     : [808.583, 1171.77]
-Measurements : [1239.92, 313375, -0.109397, -1.03812]
----
-Label        : 0
-Position     : [118.333, 1171.89]
-Measurements : [1020.45, 12099.2, -0.818138, 1.12655]
----
-Label        : 1
-Position     : [55.9968, 1172.8]
-Measurements : [1544.15, 681175, 0.189277, -1.53925]
----
-Label        : 1
-Position     : [8.68, 1172.86]
-Measurements : [1303.49, 426137, 0.651849, -0.78275]
----
-Label        : 1
-Position     : [1076.35, 1172.94]
-Measurements : [1655.4, 363428, -0.100214, -1.25256]
----
-Label        : 1
-Position     : [1099.97, 1173.19]
-Measurements : [1568.65, 202352, -0.171849, -0.172079]
----
-Label        : 1
-Position     : [5.95018, 1173.32]
-Measurements : [1141.07, 267697, 0.616905, -0.542866]
----
-Label        : 1
-Position     : [272.168, 1173.36]
-Measurements : [1493.27, 200158, 0.957997, -0.386417]
----
-Label        : 1
-Position     : [1074.75, 1173.65]
-Measurements : [1720.63, 332586, -0.233922, -1.15701]
----
-Label        : 1
-Position     : [809.513, 1174.98]
-Measurements : [1475.58, 172448, -0.12461, -0.319519]
----
-Label        : 1
-Position     : [274.92, 1175.14]
-Measurements : [1414.44, 313497, 0.292329, -0.810036]
----
-Label        : 1
-Position     : [1103.28, 1175.18]
-Measurements : [1840.97, 145460, -0.709086, 0.577184]
----
-Label        : 0
-Position     : [147.316, 1175.59]
-Measurements : [1016.22, 5487.3, -0.104575, 1.26667]
----
-Label        : 1
-Position     : [807.354, 1175.87]
-Measurements : [1582.88, 137255, -0.126631, -0.136175]
----
-Label        : 1
-Position     : [808.479, 1175.91]
-Measurements : [1557.25, 146285, 0.00798069, -0.47452]
----
-Label        : 1
-Position     : [804.68, 1176.08]
-Measurements : [1436.92, 254438, -0.571786, -0.327179]
----
-Label        : 0
-Position     : [173.258, 1176.28]
-Measurements : [1160.75, 9792.88, -0.58472, 0.246237]
----
-Label        : 1
-Position     : [69.4278, 1176.54]
-Measurements : [1811.43, 412728, -0.200677, -0.851505]
----
-Label        : 1
-Position     : [1102.07, 1177.05]
-Measurements : [1789.93, 141051, -0.503698, 0.21021]
----
-Label        : 1
-Position     : [772.021, 1177.11]
-Measurements : [765.338, 332384, 1.60682, 0.936659]
----
-Label        : 1
-Position     : [770.353, 1177.7]
-Measurements : [870.617, 395075, 1.062, -0.561307]
----
-Label        : 1
-Position     : [65, 1177.98]
-Measurements : [1710.7, 431309, -0.195393, -0.948929]
----
-Label        : 1
-Position     : [1150.42, 1178.15]
-Measurements : [951.68, 212839, 0.349942, -0.967092]
----
-Label        : 1
-Position     : [1074.22, 1178.51]
-Measurements : [1714.99, 309998, -0.321104, -0.952352]
----
-Label        : 1
-Position     : [821.954, 1178.58]
-Measurements : [897.679, 150305, 0.42116, -0.794245]
----
-Label        : 1
-Position     : [1150.02, 1179.53]
-Measurements : [996.775, 237733, 0.377424, -0.815537]
----
-Label        : 1
-Position     : [90.1359, 1180.11]
-Measurements : [1068.05, 45901.2, 1.80289, 5.12569]
----
-Label        : 1
-Position     : [804.078, 1180.38]
-Measurements : [1258.64, 277823, 0.00212332, -1.18351]
----
-Label        : 1
-Position     : [1104.13, 1180.45]
-Measurements : [1603.25, 292510, -0.584487, -1.05308]
----
-Label        : 1
-Position     : [1076.57, 1180.46]
-Measurements : [1433.87, 379487, 0.199152, -1.22763]
----
-Label        : 1
-Position     : [1073.93, 1180.61]
-Measurements : [1447.55, 408477, -0.0256431, -1.23079]
----
-Label        : 1
-Position     : [769.262, 1181.19]
-Measurements : [1289.29, 436584, 0.0565775, -1.55561]
----
-Label        : 1
-Position     : [6.12, 1181.56]
-Measurements : [1267.28, 375035, 0.517701, -0.664949]
----
-Label        : 1
-Position     : [803.898, 1181.71]
-Measurements : [1236.23, 307134, 0.0525878, -1.33434]
----
-Label        : 1
-Position     : [75.335, 1181.87]
-Measurements : [1552.96, 800826, 0.402943, -1.29492]
----
-Label        : 1
-Position     : [1074.32, 1181.9]
-Measurements : [1342.13, 373976, 0.146331, -1.28879]
----
-Label        : 1
-Position     : [1153.68, 1181.97]
-Measurements : [1207.04, 246005, 0.0483445, -1.05673]
----
-Label        : 1
-Position     : [762.975, 1181.97]
-Measurements : [1231.07, 278627, 0.389004, -1.07186]
----
-Label        : 1
-Position     : [11.102, 1181.99]
-Measurements : [1413.08, 486277, 0.211868, -1.29281]
----
-Label        : 1
-Position     : [73.192, 1182.07]
-Measurements : [1802.21, 810669, 0.037417, -1.50906]
----
-Label        : 1
-Position     : [66.443, 1182.3]
-Measurements : [2019.14, 590751, -0.524916, -0.643552]
----
-Label        : 1
-Position     : [1097.15, 1182.38]
-Measurements : [1527.3, 221353, -0.175875, -1.04613]
----
-Label        : 1
-Position     : [825.786, 1182.42]
-Measurements : [1182.26, 286006, -0.0928366, -1.23431]
----
-Label        : 1
-Position     : [4.09723, 1182.5]
-Measurements : [1179.43, 295213, 0.545959, -0.490188]
----
-Label        : 1
-Position     : [1151, 1182.52]
-Measurements : [1252.11, 257518, 0.0621691, -0.767241]
----
-Label        : 1
-Position     : [1102.21, 1182.96]
-Measurements : [1655.51, 252755, -0.665866, -0.796063]
----
-Label        : 1
-Position     : [73.1307, 1182.99]
-Measurements : [1802.21, 810669, 0.037417, -1.50906]
----
-Label        : 1
-Position     : [825.112, 1183.15]
-Measurements : [1271.38, 244428, -0.315896, -0.939105]
----
-Label        : 1
-Position     : [1097.56, 1183.19]
-Measurements : [1487.83, 213545, 0.0659557, -1.1985]
----
-Label        : 1
-Position     : [1154.09, 1183.6]
-Measurements : [1396.51, 230610, 0.187407, -0.703307]
----
-Label        : 1
-Position     : [766.394, 1183.65]
-Measurements : [1588.02, 251511, -0.507433, -0.756907]
----
-Label        : 0
-Position     : [127.434, 1183.75]
-Measurements : [948.533, 20332.5, -0.523438, -0.341544]
----
-Label        : 0
-Position     : [232.217, 1183.76]
-Measurements : [1189.62, 27441.2, 0.0170941, -0.820611]
----
-Label        : 0
-Position     : [185.352, 1183.84]
-Measurements : [1177.2, 5451.08, -0.058732, -0.683641]
----
-Label        : 1
-Position     : [87.528, 1184.12]
-Measurements : [958.423, 119859, 0.322424, 0.165602]
----
-Label        : 1
-Position     : [91.2962, 1184.46]
-Measurements : [1033.72, 33959.5, -0.458446, 1.763]
----
-Label        : 1
-Position     : [1100.25, 1184.95]
-Measurements : [1531.14, 249588, -0.248127, -1.10074]
----
-Label        : 1
-Position     : [1099.03, 1184.95]
-Measurements : [1530.41, 219911, -0.141532, -1.06876]
----
-Label        : 1
-Position     : [1153.44, 1185.01]
-Measurements : [1598.93, 257100, -0.155389, -1.01089]
----
-Label        : 1
-Position     : [762.156, 1185.34]
-Measurements : [1296.5, 340204, 0.0615162, -1.40969]
----
-Label        : 1
-Position     : [803.97, 1185.35]
-Measurements : [1256.88, 326282, 0.10677, -1.45978]
----
-Label        : 1
-Position     : [1092.13, 1185.7]
-Measurements : [1008.44, 171793, 0.79629, -0.0759009]
----
-Label        : 1
-Position     : [1093.23, 1186.01]
-Measurements : [1033.28, 198643, 0.819167, 0.00458842]
----
-Label        : 1
-Position     : [799.162, 1186.11]
-Measurements : [1355, 291078, -0.416914, -1.17096]
----
-Label        : 1
-Position     : [824.558, 1186.11]
-Measurements : [1522.09, 153982, -0.232506, -0.131787]
----
-Label        : 1
-Position     : [1096.06, 1186.86]
-Measurements : [1291.83, 210552, 0.428369, -0.748787]
----
-Label        : 1
-Position     : [798.694, 1186.94]
-Measurements : [1289.91, 322788, -0.271621, -1.37939]
----
-Label        : 1
-Position     : [819.753, 1187.13]
-Measurements : [1269.05, 226137, 0.0833932, -1.1808]
----
-Label        : 1
-Position     : [1097.74, 1187.34]
-Measurements : [1269.99, 226143, 0.560891, -0.55951]
----
-Label        : 0
-Position     : [107.795, 1187.46]
-Measurements : [974.298, 18497, -0.1773, -0.0338076]
----
-Label        : 1
-Position     : [1095.11, 1187.7]
-Measurements : [1131.48, 221926, 0.653684, -0.257936]
----
-Label        : 1
-Position     : [1095.52, 1187.7]
-Measurements : [1131.48, 221926, 0.653684, -0.257936]
----
-Label        : 1
-Position     : [1156.24, 1188.51]
-Measurements : [1640.19, 261126, -0.23606, -1.13799]
----
-Label        : 1
-Position     : [826.156, 1188.61]
-Measurements : [1394.35, 282487, -0.236088, -0.982104]
----
-Label        : 1
-Position     : [9.192, 1188.73]
-Measurements : [1795.61, 156376, 0.41132, -0.33843]
----
-Label        : 1
-Position     : [766.394, 1189.39]
-Measurements : [1274.08, 326507, 0.286603, -1.30143]
----
-Label        : 1
-Position     : [802.198, 1189.39]
-Measurements : [1440.98, 246023, -0.415642, -1.16846]
----
-Label        : 1
-Position     : [768.045, 1189.66]
-Measurements : [1195.73, 362902, 0.465562, -1.33141]
----
-Label        : 1
-Position     : [1091.93, 1189.68]
-Measurements : [711.534, 82232.5, 0.94323, 0.64927]
----
-Label        : 1
-Position     : [798.879, 1190]
-Measurements : [1584.3, 188729, -1.05308, 0.550662]
----
-Label        : 1
-Position     : [1152.48, 1190.3]
-Measurements : [1672.47, 364311, -0.511787, -1.1885]
----
-Label        : 1
-Position     : [820.502, 1190.42]
-Measurements : [1295, 269247, 0.1181, -1.21844]
----
-Label        : 1
-Position     : [1152.86, 1190.57]
-Measurements : [1672.47, 364311, -0.511787, -1.1885]
----
-Label        : 1
-Position     : [13.8267, 1190.64]
-Measurements : [1710.02, 199292, -0.326539, -0.647723]
----
-Label        : 1
-Position     : [821.69, 1191.02]
-Measurements : [1331.21, 266615, 0.0752261, -1.15059]
----
-Label        : 1
-Position     : [1153.84, 1191.06]
-Measurements : [1622.26, 391575, -0.391323, -1.31254]
----
-Label        : 1
-Position     : [1149.59, 1191.23]
-Measurements : [1375.61, 524379, 0.0222752, -1.71337]
----
-Label        : 1
-Position     : [825.051, 1191.3]
-Measurements : [1306.23, 295348, 0.0187257, -1.17552]
----
-Label        : 1
-Position     : [859.374, 1191.84]
-Measurements : [1304.06, 396412, 0.130115, -1.16986]
----
-Label        : 1
-Position     : [5.81273, 1191.94]
-Measurements : [1492.18, 147510, 0.0304225, -0.833112]
----
-Label        : 0
-Position     : [196.511, 1192.22]
-Measurements : [1607.13, 44011.5, 0.123893, -1.41548]
----
-Label        : 1
-Position     : [761.952, 1192.6]
-Measurements : [1265.09, 402702, 0.0570166, -1.51692]
----
-Label        : 1
-Position     : [1152.86, 1192.62]
-Measurements : [1521.03, 511762, -0.23247, -1.65025]
----
-Label        : 1
-Position     : [75.5997, 1192.84]
-Measurements : [749.381, 215968, 1.15818, 0.410867]
----
-Label        : 1
-Position     : [857.466, 1193.25]
-Measurements : [1407.08, 322798, -0.0847183, -0.998472]
----
-Label        : 1
-Position     : [864.373, 1193.35]
-Measurements : [1257.72, 212586, 0.994952, 0.534599]
----
-Label        : 1
-Position     : [799.162, 1193.48]
-Measurements : [1620.7, 154920, -0.801872, -0.115901]
----
-Label        : 1
-Position     : [795.008, 1193.6]
-Measurements : [1386.23, 330501, -0.58523, -0.985151]
----
-Label        : 1
-Position     : [798.663, 1193.86]
-Measurements : [1609.82, 167327, -0.937791, 0.320673]
----
-Label        : 1
-Position     : [768.778, 1194.21]
-Measurements : [932.05, 300184, 1.09552, -0.281007]
----
-Label        : 1
-Position     : [792.253, 1195.43]
-Measurements : [1055.97, 354882, 0.22741, -1.40818]
----
-Label        : 0
-Position     : [161.728, 1195.56]
-Measurements : [1050.87, 5899.31, -0.303962, -0.044112]
----
-Label        : 1
-Position     : [798.343, 1195.94]
-Measurements : [1594.06, 172516, -0.800125, -0.0638567]
----
-Label        : 1
-Position     : [761.07, 1196.35]
-Measurements : [1432.35, 364425, -0.190549, -1.39131]
----
-Label        : 1
-Position     : [857.326, 1196.35]
-Measurements : [1250.1, 385819, 0.267622, -1.1927]
----
-Label        : 1
-Position     : [79.336, 1196.41]
-Measurements : [1180.75, 443880, 0.317155, -1.13477]
----
-Label        : 1
-Position     : [765.898, 1197.04]
-Measurements : [1071.85, 359810, 0.723553, -1.05485]
----
-Label        : 1
-Position     : [801.746, 1197.09]
-Measurements : [1369.86, 230534, 0.126528, -1.48602]
----
-Label        : 1
-Position     : [294.771, 1197.31]
-Measurements : [924.689, 354266, 0.825889, -0.750758]
----
-Label        : 1
-Position     : [853.573, 1197.33]
-Measurements : [971.671, 333839, 0.739649, -0.695533]
----
-Label        : 1
-Position     : [877.806, 1198.4]
-Measurements : [711.088, 104285, 1.4406, 1.44004]
----
-Label        : 1
-Position     : [10.216, 1198.46]
-Measurements : [1827.32, 240774, 0.0304515, -0.774381]
----
-Label        : 1
-Position     : [818.237, 1198.82]
-Measurements : [1047, 371466, 0.87564, -0.519433]
----
-Label        : 1
-Position     : [289.835, 1199.1]
-Measurements : [718.394, 255371, 1.38507, 0.540872]
----
-Label        : 1
-Position     : [294.376, 1199.2]
-Measurements : [1001.89, 306094, 0.757925, -0.666724]
----
-Label        : 1
-Position     : [795.476, 1199.22]
-Measurements : [1185.12, 365745, 0.0183278, -1.53179]
----
-Label        : 1
-Position     : [757.378, 1199.59]
-Measurements : [1315.24, 408113, 0.0787407, -1.49655]
----
-Label        : 1
-Position     : [80.1549, 1199.7]
-Measurements : [1244.74, 405225, 0.41905, -1.17794]
----
-Label        : 0
-Position     : [132.888, 1200.69]
-Measurements : [1081.44, 27934, 0.356593, 4.06093]
----
-Label        : 1
-Position     : [856.943, 1200.87]
-Measurements : [1099.61, 348047, 0.500254, -1.09179]
----
-Label        : 1
-Position     : [798.717, 1200.99]
-Measurements : [1171.85, 313919, 0.174347, -1.44847]
----
-Label        : 1
-Position     : [8.26564, 1201.04]
-Measurements : [1593.37, 238480, -0.0750373, -0.905243]
----
-Label        : 1
-Position     : [14.6304, 1201.25]
-Measurements : [1989.93, 375142, -0.568585, -0.623087]
----
-Label        : 1
-Position     : [11.872, 1201.47]
-Measurements : [1878.07, 283262, -0.108716, -0.884632]
----
-Label        : 1
-Position     : [757.383, 1201.67]
-Measurements : [1203.89, 346874, 0.377234, -1.15645]
----
-Label        : 1
-Position     : [753.746, 1202.28]
-Measurements : [1018.77, 206945, 0.724485, -0.404962]
----
-Label        : 1
-Position     : [874.79, 1202.42]
-Measurements : [823.945, 180336, 1.15259, 0.370505]
----
-Label        : 1
-Position     : [816.775, 1202.49]
-Measurements : [1277.91, 407298, 0.225137, -1.16466]
----
-Label        : 1
-Position     : [12.264, 1202.55]
-Measurements : [1975.23, 295764, -0.320646, -0.838866]
----
-Label        : 0
-Position     : [186.377, 1202.61]
-Measurements : [1372.58, 147226, -0.363546, -1.33675]
----
-Label        : 1
-Position     : [270.087, 1202.61]
-Measurements : [731.651, 228259, 1.58597, 1.25361]
----
-Label        : 1
-Position     : [878.836, 1203.11]
-Measurements : [848.244, 242834, 1.07867, -0.18974]
----
-Label        : 1
-Position     : [265.192, 1203.3]
-Measurements : [1165.77, 273250, 0.505811, -0.885315]
----
-Label        : 0
-Position     : [162.979, 1204.42]
-Measurements : [812.26, 45876.6, 0.0554185, -1.4658]
----
-Label        : 1
-Position     : [855.278, 1204.54]
-Measurements : [922.078, 166029, 0.900278, -0.257132]
----
-Label        : 0
-Position     : [160.943, 1204.57]
-Measurements : [808.898, 44084.3, 0.00983514, -1.36082]
----
-Label        : 1
-Position     : [811.336, 1204.86]
-Measurements : [1218.67, 233231, 0.778767, -0.254009]
----
-Label        : 1
-Position     : [872.931, 1205.06]
-Measurements : [880.312, 221325, 0.954574, -0.190436]
----
-Label        : 1
-Position     : [8.02011, 1205.07]
-Measurements : [1608.5, 230530, -0.220706, -0.820422]
----
-Label        : 1
-Position     : [818.772, 1205.09]
-Measurements : [1470.3, 357246, -0.0182837, -1.11492]
----
-Label        : 1
-Position     : [813.839, 1205.21]
-Measurements : [1405.77, 289029, 0.283281, -0.859455]
----
-Label        : 1
-Position     : [859.546, 1205.65]
-Measurements : [890.991, 108297, 1.24734, 1.57051]
----
-Label        : 1
-Position     : [11.1202, 1205.67]
-Measurements : [1982.09, 188002, 0.0591524, -0.617607]
----
-Label        : 0
-Position     : [172.906, 1205.7]
-Measurements : [701.565, 6990.93, 2.07489, 5.58847]
----
-Label        : 1
-Position     : [1146.87, 1206.73]
-Measurements : [916.242, 277081, 0.410514, -1.41405]
----
-Label        : 1
-Position     : [79.1713, 1206.84]
-Measurements : [911.106, 310157, 1.20421, 0.573365]
----
-Label        : 1
-Position     : [757.383, 1207]
-Measurements : [1287.94, 379562, 0.422226, -0.753552]
----
-Label        : 1
-Position     : [874.529, 1207.41]
-Measurements : [883.549, 250160, 0.901673, -0.566962]
----
-Label        : 1
-Position     : [266.636, 1207.49]
-Measurements : [973.078, 346547, 0.909499, -0.593301]
----
-Label        : 1
-Position     : [814.727, 1207.82]
-Measurements : [1486.97, 307317, 0.101435, -0.940271]
----
-Label        : 1
-Position     : [1151.88, 1207.93]
-Measurements : [856.073, 274754, 0.639899, -1.25517]
----
-Label        : 1
-Position     : [854.621, 1208.13]
-Measurements : [1060.52, 172373, 0.739862, -0.671865]
----
-Label        : 1
-Position     : [14.824, 1208.7]
-Measurements : [2171.92, 155829, 0.227236, -0.919945]
----
-Label        : 1
-Position     : [758.404, 1208.73]
-Measurements : [1359.35, 521184, 0.589396, -0.784245]
----
-Label        : 1
-Position     : [1146.5, 1208.96]
-Measurements : [1080.61, 235520, -0.0865575, -1.38126]
----
-Label        : 1
-Position     : [1147.94, 1209]
-Measurements : [1084.39, 240852, -0.113844, -1.41867]
----
-Label        : 1
-Position     : [848.343, 1209.1]
-Measurements : [825.078, 217935, 0.86336, -0.354854]
----
-Label        : 1
-Position     : [1147.54, 1209.41]
-Measurements : [1165.1, 205559, -0.350789, -1.13496]
----
-Label        : 1
-Position     : [1146.95, 1209.71]
-Measurements : [1166.03, 199265, -0.338016, -1.08855]
----
-Label        : 1
-Position     : [82.408, 1209.72]
-Measurements : [1303.49, 380234, 0.222019, -0.862375]
----
-Label        : 1
-Position     : [791.848, 1210.35]
-Measurements : [1033.7, 405911, 0.534803, -1.01415]
----
-Label        : 1
-Position     : [759.246, 1210.7]
-Measurements : [1427.21, 542382, 0.482749, -1.06428]
----
-Label        : 1
-Position     : [871.913, 1211.07]
-Measurements : [1151.41, 386125, 0.459999, -1.05337]
----
-Label        : 1
-Position     : [869.578, 1211.09]
-Measurements : [1068.34, 302377, 0.751652, -0.373732]
----
-Label        : 1
-Position     : [847.912, 1211.42]
-Measurements : [742.205, 183218, 1.13478, 0.276318]
----
-Label        : 1
-Position     : [15.8737, 1211.89]
-Measurements : [2343.75, 165428, 0.0743857, -1.45722]
----
-Label        : 1
-Position     : [755.745, 1211.91]
-Measurements : [1817.41, 357409, -0.036646, -0.721701]
----
-Label        : 1
-Position     : [751.627, 1211.99]
-Measurements : [1516.84, 466227, 0.366788, -0.83318]
----
-Label        : 1
-Position     : [871.766, 1212.2]
-Measurements : [1215.53, 441193, 0.350756, -1.28659]
----
-Label        : 1
-Position     : [814.318, 1212.73]
-Measurements : [1191.83, 406019, 0.391043, -1.12124]
----
-Label        : 1
-Position     : [852.001, 1212.73]
-Measurements : [958.28, 155298, 0.944017, 0.0482365]
----
-Label        : 1
-Position     : [909.531, 1212.96]
-Measurements : [884.748, 342927, 0.886771, -0.582627]
----
-Label        : 1
-Position     : [260.584, 1213.02]
-Measurements : [1077.25, 312499, 0.623861, -0.982408]
----
-Label        : 1
-Position     : [284.136, 1213.02]
-Measurements : [1371.41, 329253, -0.091794, -1.14797]
----
-Label        : 1
-Position     : [86.8254, 1213.03]
-Measurements : [1458.97, 325044, 0.0850041, -1.01114]
----
-Label        : 1
-Position     : [9.87187, 1213.4]
-Measurements : [1711.85, 417815, 0.0331565, -0.88982]
----
-Label        : 1
-Position     : [792.199, 1213.55]
-Measurements : [1462.62, 450200, 0.148354, -0.833265]
----
-Label        : 1
-Position     : [871.662, 1213.55]
-Measurements : [1271.39, 476000, 0.308982, -1.25782]
----
-Label        : 1
-Position     : [82.5704, 1213.6]
-Measurements : [1698.48, 184574, 0.0132581, -0.401171]
----
-Label        : 1
-Position     : [282.796, 1213.68]
-Measurements : [1230.26, 412366, 0.164402, -1.39135]
----
-Label        : 1
-Position     : [793.948, 1213.96]
-Measurements : [1421.52, 469665, 0.21813, -0.831042]
----
-Label        : 1
-Position     : [1143.74, 1214.11]
-Measurements : [1133.24, 213930, -0.226796, -1.28842]
----
-Label        : 1
-Position     : [905.413, 1214.14]
-Measurements : [1207.88, 461935, 0.0915895, -1.5239]
----
-Label        : 0
-Position     : [178.36, 1214.28]
-Measurements : [766.149, 4079.33, 1.56613, 1.86491]
----
-Label        : 1
-Position     : [15.336, 1214.33]
-Measurements : [2423.45, 183125, 0.0486293, -1.10514]
----
-Label        : 0
-Position     : [131.742, 1214.34]
-Measurements : [936.518, 20172.8, -0.304679, 1.13836]
----
-Label        : 1
-Position     : [756.203, 1214.35]
-Measurements : [1799.29, 481028, -0.197371, -0.988624]
----
-Label        : 1
-Position     : [1142.67, 1214.61]
-Measurements : [1034.69, 228523, 0.0839063, -1.38911]
----
-Label        : 1
-Position     : [909.78, 1214.87]
-Measurements : [1117.69, 418789, 0.380851, -1.31459]
----
-Label        : 1
-Position     : [258.906, 1214.98]
-Measurements : [1078.44, 277833, 0.53751, -0.890986]
----
-Label        : 1
-Position     : [280.156, 1215.14]
-Measurements : [1027.23, 379387, 0.612957, -1.09361]
----
-Label        : 0
-Position     : [119.654, 1215.16]
-Measurements : [973.622, 44681.7, 0.4596, 0.253037]
----
-Label        : 0
-Position     : [128.804, 1215.37]
-Measurements : [926.183, 28247.1, 0.260325, 2.06074]
----
-Label        : 1
-Position     : [755.335, 1215.6]
-Measurements : [1837.2, 445531, -0.274624, -0.802054]
----
-Label        : 1
-Position     : [759.726, 1215.7]
-Measurements : [1359.43, 705840, 0.650318, -1.11076]
----
-Label        : 1
-Position     : [746.562, 1216.14]
-Measurements : [1225.45, 224906, 0.503518, -0.982275]
----
-Label        : 1
-Position     : [811.113, 1216.19]
-Measurements : [730.386, 246836, 1.74971, 1.85232]
----
-Label        : 1
-Position     : [756.649, 1216.32]
-Measurements : [1703.19, 588354, -0.048937, -1.34199]
----
-Label        : 0
-Position     : [131.871, 1216.33]
-Measurements : [909.844, 13797, -0.984392, 1.27645]
----
-Label        : 1
-Position     : [253.915, 1216.33]
-Measurements : [1080.04, 179154, 0.369279, -0.0178993]
----
-Label        : 1
-Position     : [1146.31, 1216.37]
-Measurements : [1190.47, 158488, -0.554648, -1.05723]
----
-Label        : 1
-Position     : [791.38, 1216.42]
-Measurements : [1755.74, 313424, -0.00816374, -0.518683]
----
-Label        : 1
-Position     : [851.948, 1216.73]
-Measurements : [1177.64, 293207, 0.408663, -1.03527]
----
-Label        : 1
-Position     : [914.089, 1216.85]
-Measurements : [972.153, 207751, 0.844733, 0.167141]
----
-Label        : 1
-Position     : [285.672, 1217.12]
-Measurements : [1415.82, 249102, -0.0727781, -0.674173]
----
-Label        : 1
-Position     : [288.55, 1217.19]
-Measurements : [1322.11, 280795, 0.148007, -0.88388]
----
-Label        : 1
-Position     : [788.228, 1217.69]
-Measurements : [1601.6, 462082, -0.261452, -0.710461]
----
-Label        : 1
-Position     : [812.188, 1217.72]
-Measurements : [701.541, 237729, 1.99031, 2.78772]
----
-Label        : 1
-Position     : [907.322, 1217.74]
-Measurements : [1682.85, 390793, -0.0135373, -0.575758]
----
-Label        : 1
-Position     : [909.516, 1217.75]
-Measurements : [1541, 482589, 0.239899, -0.923021]
----
-Label        : 1
-Position     : [80.36, 1217.91]
-Measurements : [1679.26, 171675, -0.130206, -0.141252]
----
-Label        : 1
-Position     : [259.674, 1217.92]
-Measurements : [758.745, 248822, 1.68135, 1.685]
----
-Label        : 1
-Position     : [17.5562, 1218.03]
-Measurements : [2678.93, 191799, -1.42829, 3.37401]
----
-Label        : 1
-Position     : [793.29, 1218.25]
-Measurements : [1656.77, 333908, 0.463085, -0.929399]
----
-Label        : 1
-Position     : [747.371, 1218.3]
-Measurements : [1298.58, 254042, 0.325729, -1.26416]
----
-Label        : 1
-Position     : [249.182, 1218.5]
-Measurements : [1069.04, 101005, -0.607746, -0.712342]
----
-Label        : 1
-Position     : [1162.5, 1218.76]
-Measurements : [1505.7, 491152, 0.805507, -0.674457]
----
-Label        : 1
-Position     : [871.252, 1218.88]
-Measurements : [1798.52, 387780, -0.338564, -0.862378]
----
-Label        : 1
-Position     : [904.748, 1218.97]
-Measurements : [1768.93, 440880, -0.231233, -0.696289]
----
-Label        : 1
-Position     : [843.182, 1219.1]
-Measurements : [1122.98, 588369, 0.693368, -0.763251]
----
-Label        : 1
-Position     : [11.4749, 1219.13]
-Measurements : [2197.52, 364364, -0.729895, -0.229045]
----
-Label        : 1
-Position     : [287.453, 1219.31]
-Measurements : [1207.18, 282762, 0.341719, -0.770938]
----
-Label        : 1
-Position     : [794.615, 1219.42]
-Measurements : [1572.63, 372173, 0.618228, -0.934499]
----
-Label        : 1
-Position     : [234.885, 1219.54]
-Measurements : [1162.35, 104704, 0.371147, 1.63789]
----
-Label        : 1
-Position     : [846.17, 1219.78]
-Measurements : [1373.06, 541971, 0.217375, -1.04107]
----
-Label        : 1
-Position     : [868.473, 1219.85]
-Measurements : [1724.47, 490118, -0.230996, -1.06146]
----
-Label        : 1
-Position     : [750.83, 1220.11]
-Measurements : [1540.65, 326390, 0.246965, -0.853089]
----
-Label        : 1
-Position     : [290.28, 1220.19]
-Measurements : [967.021, 301911, 0.893497, -0.0993775]
----
-Label        : 1
-Position     : [287.753, 1220.38]
-Measurements : [1118.73, 295328, 0.530871, -0.626394]
----
-Label        : 1
-Position     : [847.905, 1220.52]
-Measurements : [1516.89, 553376, 0.133567, -1.15221]
----
-Label        : 1
-Position     : [866.581, 1220.55]
-Measurements : [1526.49, 467194, 0.12961, -1.24029]
----
-Label        : 1
-Position     : [249.832, 1220.7]
-Measurements : [952.769, 145228, -0.0548567, -1.53415]
----
-Label        : 1
-Position     : [754.386, 1220.73]
-Measurements : [1505.02, 452253, 0.229136, -0.981314]
----
-Label        : 1
-Position     : [790.151, 1220.93]
-Measurements : [1785.59, 310558, -0.0502628, -0.763834]
----
-Label        : 1
-Position     : [807.622, 1221.32]
-Measurements : [878.987, 168161, 0.666003, -0.491093]
----
-Label        : 1
-Position     : [786.966, 1221.57]
-Measurements : [1433.63, 479609, -0.15224, -1.17562]
----
-Label        : 1
-Position     : [78.3397, 1221.58]
-Measurements : [1571.64, 202256, -0.481934, -0.0621826]
----
-Label        : 1
-Position     : [930.767, 1221.62]
-Measurements : [1282.96, 459300, 0.00763679, -1.48934]
----
-Label        : 1
-Position     : [864.789, 1221.62]
-Measurements : [1328.81, 360256, 0.487199, -1.06278]
----
-Label        : 1
-Position     : [867.829, 1221.71]
-Measurements : [1688.18, 461851, -0.229008, -1.0514]
----
-Label        : 1
-Position     : [926.704, 1221.78]
-Measurements : [1113.68, 341650, 0.448803, -1.0555]
----
-Label        : 1
-Position     : [906.094, 1221.84]
-Measurements : [1920.02, 277201, -0.0198953, -0.571137]
----
-Label        : 1
-Position     : [15.336, 1222.01]
-Measurements : [2516.24, 202144, -0.148118, -0.0875051]
----
-Label        : 1
-Position     : [1172.23, 1222.03]
-Measurements : [1599.01, 391892, 0.691466, 0.345097]
----
-Label        : 1
-Position     : [809.838, 1222.25]
-Measurements : [938.059, 224223, 0.483807, -0.898122]
----
-Label        : 1
-Position     : [804.888, 1222.39]
-Measurements : [970.848, 133092, 0.634874, 0.195407]
----
-Label        : 1
-Position     : [238.52, 1222.49]
-Measurements : [1310.99, 195029, 0.0953162, -0.732769]
----
-Label        : 0
-Position     : [140.699, 1222.6]
-Measurements : [967.235, 2961.46, 0.860597, 0.738803]
----
-Label        : 1
-Position     : [931.316, 1222.81]
-Measurements : [1369.78, 434520, -0.191234, -1.43647]
----
-Label        : 1
-Position     : [901.789, 1222.87]
-Measurements : [1458.44, 600982, -0.0139851, -1.27951]
----
-Label        : 1
-Position     : [928.444, 1222.91]
-Measurements : [1346.44, 365050, -0.0697131, -1.29736]
----
-Label        : 1
-Position     : [875.049, 1223]
-Measurements : [1197.35, 653274, 0.837206, -0.80181]
----
-Label        : 1
-Position     : [82.9643, 1223.24]
-Measurements : [1803.34, 134873, 0.1435, -0.49312]
----
-Label        : 1
-Position     : [1164.74, 1223.74]
-Measurements : [2229.77, 575814, -0.292431, -1.11282]
----
-Label        : 1
-Position     : [1170.06, 1223.74]
-Measurements : [1868.77, 549650, 0.385324, -0.908998]
----
-Label        : 1
-Position     : [239.592, 1223.78]
-Measurements : [1251.76, 245777, 0.0664219, -1.06259]
----
-Label        : 1
-Position     : [846.676, 1223.79]
-Measurements : [1905.05, 360387, -0.429257, -0.684733]
----
-Label        : 1
-Position     : [80.872, 1224.06]
-Measurements : [1744.35, 155098, -0.0915156, -0.578833]
----
-Label        : 1
-Position     : [1162.13, 1224.16]
-Measurements : [2096.91, 692154, -0.115876, -1.49859]
----
-Label        : 1
-Position     : [870.023, 1224.2]
-Measurements : [1763.44, 413281, -0.237713, -0.871015]
----
-Label        : 1
-Position     : [863.664, 1224.27]
-Measurements : [1290.95, 276000, 0.48197, -1.03283]
----
-Label        : 1
-Position     : [906.844, 1224.58]
-Measurements : [1845.35, 340240, -0.0395007, -0.766385]
----
-Label        : 1
-Position     : [751.674, 1224.7]
-Measurements : [1371.12, 288650, 0.0519448, -1.0595]
----
-Label        : 1
-Position     : [785.941, 1224.92]
-Measurements : [1133.53, 464075, 0.493464, -1.10058]
----
-Label        : 1
-Position     : [294.499, 1225.02]
-Measurements : [650.489, 96289.7, 1.36371, 1.16223]
----
-Label        : 1
-Position     : [787.284, 1225.02]
-Measurements : [1233.36, 422995, 0.487997, -0.952479]
----
-Label        : 1
-Position     : [843.835, 1225.13]
-Measurements : [1869.01, 452044, -0.751668, -0.379219]
----
-Label        : 1
-Position     : [17.3172, 1225.28]
-Measurements : [2492.97, 143042, 0.321103, -0.0593158]
----
-Label        : 1
-Position     : [844.595, 1225.63]
-Measurements : [1959.6, 360340, -0.785183, 0.0399021]
----
-Label        : 1
-Position     : [296.669, 1225.88]
-Measurements : [742.942, 130932, 0.859113, -0.313118]
----
-Label        : 1
-Position     : [745.869, 1225.97]
-Measurements : [1151.33, 226392, 0.580858, -0.701615]
----
-Label        : 1
-Position     : [1177.05, 1225.98]
-Measurements : [1585.6, 189304, 0.0633345, -0.444408]
----
-Label        : 1
-Position     : [1176.21, 1226.2]
-Measurements : [1633.13, 178764, 0.153143, -0.785366]
----
-Label        : 1
-Position     : [865.927, 1226.25]
-Measurements : [1501.94, 324477, 0.166657, -0.889444]
----
-Label        : 0
-Position     : [150.771, 1226.62]
-Measurements : [945.835, 2810.44, -1.40093, 3.20244]
----
-Label        : 1
-Position     : [904.865, 1226.75]
-Measurements : [1784.36, 410944, -0.0403627, -0.759294]
----
-Label        : 1
-Position     : [748.782, 1226.83]
-Measurements : [1227.29, 257607, 0.375343, -0.911056]
----
-Label        : 1
-Position     : [844.218, 1227.48]
-Measurements : [1991.9, 331418, -0.790508, 0.0393777]
----
-Label        : 1
-Position     : [808.609, 1227.57]
-Measurements : [1098.06, 209074, 0.144377, -1.00202]
----
-Label        : 1
-Position     : [928.31, 1227.76]
-Measurements : [1639.48, 235764, -0.482709, -0.606112]
----
-Label        : 1
-Position     : [747.578, 1227.98]
-Measurements : [1102.9, 237964, 0.540202, -0.77443]
----
-Label        : 1
-Position     : [83.1913, 1228.3]
-Measurements : [1725.95, 168715, -0.143545, -0.522532]
----
-Label        : 1
-Position     : [926.96, 1228.37]
-Measurements : [1537.55, 226853, -0.255072, -0.693078]
----
-Label        : 1
-Position     : [302.761, 1228.43]
-Measurements : [1143.77, 133976, 0.450963, 1.17834]
----
-Label        : 0
-Position     : [156.879, 1228.46]
-Measurements : [946.406, 18109.5, -0.191883, 0.487]
----
-Label        : 1
-Position     : [743.704, 1228.51]
-Measurements : [960.514, 213048, 0.993258, 0.113225]
----
-Label        : 1
-Position     : [1172.41, 1228.64]
-Measurements : [1880.01, 537214, 0.460628, -0.437212]
----
-Label        : 1
-Position     : [905.202, 1228.65]
-Measurements : [1658.58, 325013, 0.0669244, -0.69995]
----
-Label        : 1
-Position     : [845.157, 1228.7]
-Measurements : [1973.87, 354655, -0.675772, -0.538657]
----
-Label        : 1
-Position     : [902.611, 1228.71]
-Measurements : [1599.41, 362335, -0.285628, -0.409707]
----
-Label        : 1
-Position     : [1183.99, 1229.07]
-Measurements : [1416.03, 104399, 0.989837, 1.2258]
----
-Label        : 1
-Position     : [300.52, 1229.41]
-Measurements : [1179.08, 265119, 0.927807, 0.811799]
----
-Label        : 1
-Position     : [1184.65, 1229.41]
-Measurements : [1411.18, 125542, 0.739785, 1.45012]
----
-Label        : 1
-Position     : [904.496, 1229.55]
-Measurements : [1655.59, 291582, -0.126127, -0.620944]
----
-Label        : 1
-Position     : [928.939, 1229.76]
-Measurements : [1552, 222588, -0.27606, -0.609991]
----
-Label        : 1
-Position     : [813.407, 1229.8]
-Measurements : [845.924, 211077, 1.00438, -0.36928]
----
-Label        : 1
-Position     : [805.472, 1229.82]
-Measurements : [874.327, 213249, 0.71872, -0.841291]
----
-Label        : 1
-Position     : [785.645, 1229.82]
-Measurements : [998.748, 287450, 0.755282, -0.432779]
----
-Label        : 1
-Position     : [1172.12, 1230]
-Measurements : [1829.53, 606080, 0.376467, -0.610032]
----
-Label        : 1
-Position     : [1179.78, 1230.02]
-Measurements : [1552.48, 144827, 0.708302, -0.33234]
----
-Label        : 1
-Position     : [294.209, 1230.04]
-Measurements : [1231.29, 558679, 0.475679, -1.1597]
----
-Label        : 0
-Position     : [135.652, 1230.22]
-Measurements : [1132.88, 24218.5, 1.04485, 0.947635]
----
-Label        : 1
-Position     : [871.499, 1230.59]
-Measurements : [1271.54, 387666, 0.228329, -1.38369]
----
-Label        : 1
-Position     : [897.3, 1230.81]
-Measurements : [1107.45, 483480, 0.443123, -1.11515]
----
-Label        : 1
-Position     : [788.412, 1230.85]
-Measurements : [1006.32, 225117, 0.956939, 0.236453]
----
-Label        : 0
-Position     : [172.006, 1231.09]
-Measurements : [764.245, 6700.82, 1.10045, 2.44211]
----
-Label        : 1
-Position     : [925.442, 1231.45]
-Measurements : [1457.06, 201568, -0.0827904, -0.449099]
----
-Label        : 1
-Position     : [901.588, 1231.67]
-Measurements : [1649.82, 432288, -0.393316, -0.599881]
----
-Label        : 1
-Position     : [837.017, 1231.98]
-Measurements : [1234.63, 569450, 0.154681, -1.56023]
----
-Label        : 1
-Position     : [784.852, 1232.08]
-Measurements : [1106.64, 287540, 0.669004, -0.199733]
----
-Label        : 1
-Position     : [840.967, 1232.08]
-Measurements : [1762.09, 384542, -0.961169, -0.191973]
----
-Label        : 1
-Position     : [867.182, 1232.49]
-Measurements : [1359.8, 289117, 0.286787, -0.967843]
----
-Label        : 1
-Position     : [927.035, 1232.5]
-Measurements : [1456.32, 265473, -0.20073, -0.921721]
----
-Label        : 1
-Position     : [215.016, 1232.61]
-Measurements : [1668.05, 361488, -0.212671, -0.527731]
----
-Label        : 1
-Position     : [786.979, 1233.6]
-Measurements : [1154.52, 278076, 0.705189, -0.117734]
----
-Label        : 1
-Position     : [215.742, 1234.14]
-Measurements : [1805.04, 245802, -0.257069, 0.147681]
----
-Label        : 1
-Position     : [863.242, 1234.26]
-Measurements : [1038.03, 202727, 0.760403, -0.245087]
----
-Label        : 1
-Position     : [214.635, 1234.37]
-Measurements : [1854.5, 185586, 0.0271868, 0.552599]
----
-Label        : 1
-Position     : [786.343, 1234.37]
-Measurements : [1197.42, 250329, 0.709552, 0.0957804]
----
-Label        : 1
-Position     : [923.953, 1234.44]
-Measurements : [1447.6, 208263, -0.041822, -0.701972]
----
-Label        : 1
-Position     : [17.896, 1234.66]
-Measurements : [2239.97, 878718, -0.500571, -1.11511]
----
-Label        : 1
-Position     : [16.6519, 1234.82]
-Measurements : [2245.42, 844234, -0.440372, -1.03476]
----
-Label        : 1
-Position     : [900.359, 1234.94]
-Measurements : [1416.86, 551278, 0.11982, -1.18663]
----
-Label        : 1
-Position     : [297.448, 1235.04]
-Measurements : [1814.39, 448896, -0.119873, -1.35972]
----
-Label        : 1
-Position     : [800.13, 1235.18]
-Measurements : [915.996, 184923, 0.49921, -0.877147]
----
-Label        : 1
-Position     : [1184.07, 1235.45]
-Measurements : [1703.55, 224413, 1.11423, 0.171697]
----
-Label        : 1
-Position     : [840.304, 1235.55]
-Measurements : [1828.01, 310526, -1.04268, 0.33815]
----
-Label        : 1
-Position     : [839.32, 1235.63]
-Measurements : [1739.61, 394281, -0.905096, -0.232115]
----
-Label        : 1
-Position     : [863.561, 1235.71]
-Measurements : [1011.11, 195394, 0.886399, 0.0760186]
----
-Label        : 1
-Position     : [898.668, 1235.95]
-Measurements : [1169.53, 518051, 0.545714, -1.00207]
----
-Label        : 1
-Position     : [922.985, 1235.95]
-Measurements : [1329.86, 269506, 0.0793324, -0.969957]
----
-Label        : 1
-Position     : [79.3361, 1236.06]
-Measurements : [1297.88, 329390, 0.257138, -0.939452]
----
-Label        : 1
-Position     : [16.3183, 1236.08]
-Measurements : [1942.73, 1.2736e+06, -0.0682841, -1.64411]
----
-Label        : 1
-Position     : [865.543, 1236.17]
-Measurements : [1090.45, 243359, 0.778857, -0.384085]
----
-Label        : 1
-Position     : [83.944, 1236.19]
-Measurements : [1426.26, 322624, 0.0424581, -1.08061]
----
-Label        : 1
-Position     : [780.375, 1236.46]
-Measurements : [879.165, 325633, 1.00037, 0.109566]
----
-Label        : 1
-Position     : [872.181, 1236.47]
-Measurements : [822.466, 279109, 1.52797, 0.988733]
----
-Label        : 1
-Position     : [79.1963, 1236.51]
-Measurements : [1297.88, 329390, 0.257138, -0.939452]
----
-Label        : 1
-Position     : [746.35, 1236.58]
-Measurements : [1067.85, 313847, 0.780247, -0.470879]
----
-Label        : 1
-Position     : [784.442, 1236.58]
-Measurements : [1171.59, 285270, 0.586534, -0.316596]
----
-Label        : 1
-Position     : [1187.42, 1236.63]
-Measurements : [2030.98, 282792, 0.0142445, -1.23582]
----
-Label        : 1
-Position     : [1188.89, 1236.87]
-Measurements : [2093.61, 240983, -0.0320629, -1.21898]
----
-Label        : 1
-Position     : [213.48, 1237.22]
-Measurements : [1859.73, 217907, -0.13619, 0.0246956]
----
-Label        : 1
-Position     : [212.732, 1237.23]
-Measurements : [1814.92, 211519, -0.129132, -0.14362]
----
-Label        : 0
-Position     : [171.098, 1237.92]
-Measurements : [881.646, 10935, 0.0708465, -1.03185]
----
-Label        : 1
-Position     : [294.482, 1238.02]
-Measurements : [1698.97, 609698, -0.128204, -1.50719]
----
-Label        : 1
-Position     : [841.377, 1238.22]
-Measurements : [1880.89, 254191, -0.636922, -0.557618]
----
-Label        : 1
-Position     : [211.392, 1238.84]
-Measurements : [1747.73, 190447, -0.0580938, -0.171229]
----
-Label        : 1
-Position     : [919.333, 1238.92]
-Measurements : [923.99, 208645, 0.773501, -0.68262]
----
-Label        : 1
-Position     : [802.465, 1239.04]
-Measurements : [1185.7, 306360, 0.16626, -1.08458]
----
-Label        : 1
-Position     : [781.429, 1239.41]
-Measurements : [1023.85, 345005, 0.6991, -0.393158]
----
-Label        : 1
-Position     : [746.759, 1239.49]
-Measurements : [1163.49, 299606, 0.599099, -0.744458]
----
-Label        : 1
-Position     : [213.229, 1239.83]
-Measurements : [1824.79, 233312, -0.0712011, -0.0846081]
----
-Label        : 1
-Position     : [742.467, 1239.94]
-Measurements : [1096.43, 288625, 0.714364, -0.380117]
----
-Label        : 1
-Position     : [901.974, 1240.12]
-Measurements : [1125, 397928, 0.914923, -0.0284579]
----
-Label        : 1
-Position     : [292.84, 1240.67]
-Measurements : [1346.63, 724605, 0.476662, -1.43048]
----
-Label        : 1
-Position     : [743.892, 1240.68]
-Measurements : [1170.87, 291753, 0.547246, -0.677062]
----
-Label        : 1
-Position     : [747.71, 1240.9]
-Measurements : [1118.82, 303959, 0.741731, -0.599327]
----
-Label        : 1
-Position     : [1198.72, 1240.97]
-Measurements : [2259.05, 347432, -0.0445919, -1.06256]
----
-Label        : 1
-Position     : [1196.13, 1241.16]
-Measurements : [2348.43, 326410, -0.205738, -0.877876]
----
-Label        : 1
-Position     : [742.604, 1241.47]
-Measurements : [1123.63, 294928, 0.580539, -0.597594]
----
-Label        : 1
-Position     : [896.742, 1241.99]
-Measurements : [1150.34, 484377, 0.670076, -0.664179]
----
-Label        : 1
-Position     : [806.138, 1242.01]
-Measurements : [1069.13, 337481, 0.676933, -0.867978]
----
-Label        : 1
-Position     : [783.194, 1242.19]
-Measurements : [1060.78, 232843, 0.78743, 0.361256]
----
-Label        : 1
-Position     : [296.008, 1242.3]
-Measurements : [1188.2, 516637, 1.09348, -0.0784587]
----
-Label        : 1
-Position     : [863.905, 1242.32]
-Measurements : [1017.85, 226619, 0.604561, -0.764185]
----
-Label        : 1
-Position     : [216.04, 1242.34]
-Measurements : [1737.25, 425200, -0.407536, -1.10453]
----
-Label        : 1
-Position     : [969.394, 1242.5]
-Measurements : [1244.53, 475935, 0.0207841, -1.55861]
----
-Label        : 0
-Position     : [131.564, 1242.59]
-Measurements : [931.007, 23518.6, -0.398983, -0.302945]
----
-Label        : 1
-Position     : [1223, 1242.7]
-Measurements : [1580.05, 303862, 0.235173, -0.588387]
----
-Label        : 1
-Position     : [801.236, 1242.73]
-Measurements : [1436.53, 186326, -0.0495089, -0.33619]
----
-Label        : 1
-Position     : [898.721, 1242.73]
-Measurements : [1297.07, 548093, 0.576645, -0.684907]
----
-Label        : 1
-Position     : [841.892, 1242.88]
-Measurements : [1765.02, 276807, -0.16917, -1.11542]
----
-Label        : 1
-Position     : [860.555, 1243.01]
-Measurements : [1137.74, 320185, 0.46322, -1.00322]
----
-Label        : 1
-Position     : [1204.87, 1243.02]
-Measurements : [2382.69, 269984, -0.332389, -1.1192]
----
-Label        : 1
-Position     : [861.824, 1243.37]
-Measurements : [1119, 293150, 0.472796, -0.918419]
----
-Label        : 1
-Position     : [1199.67, 1243.59]
-Measurements : [2396.51, 406919, -0.646015, -0.766349]
----
-Label        : 1
-Position     : [915.992, 1243.62]
-Measurements : [908.361, 145896, 0.969562, 0.714171]
----
-Label        : 1
-Position     : [969.679, 1243.74]
-Measurements : [1263.38, 450661, 0.0245447, -1.52338]
----
-Label        : 0
-Position     : [134.449, 1243.89]
-Measurements : [936.617, 24021.8, -0.364755, -0.597952]
----
-Label        : 1
-Position     : [779.527, 1243.95]
-Measurements : [1065.56, 249369, 0.131148, -1.2332]
----
-Label        : 1
-Position     : [1222.44, 1243.99]
-Measurements : [1644.93, 282358, 0.00611915, -0.867025]
----
-Label        : 1
-Position     : [915.266, 1244.21]
-Measurements : [974.785, 182502, 0.897241, 0.38456]
----
-Label        : 1
-Position     : [1214.09, 1244.56]
-Measurements : [2159.01, 165035, 0.208915, -0.211125]
----
-Label        : 1
-Position     : [1207.06, 1244.65]
-Measurements : [2438.12, 240250, -0.469927, -0.684881]
----
-Label        : 1
-Position     : [898.311, 1244.77]
-Measurements : [1520.01, 497180, 0.256235, -0.887349]
----
-Label        : 1
-Position     : [19.432, 1244.9]
-Measurements : [1152.88, 435171, 0.743054, -0.855253]
----
-Label        : 1
-Position     : [863.482, 1244.97]
-Measurements : [1060.45, 262489, 0.596244, -0.994629]
----
-Label        : 1
-Position     : [1211.42, 1245.06]
-Measurements : [2318.13, 238176, -0.118575, -0.564816]
----
-Label        : 1
-Position     : [863.467, 1245.12]
-Measurements : [1110.82, 289337, 0.466025, -1.14926]
----
-Label        : 1
-Position     : [212.377, 1245.14]
-Measurements : [1902.8, 241339, -0.620028, -0.379369]
----
-Label        : 1
-Position     : [898.864, 1245.17]
-Measurements : [1618.2, 435098, 0.190588, -0.806567]
----
-Label        : 0
-Position     : [168.186, 1245.19]
-Measurements : [1064.65, 7322.56, 0.328272, 0.563073]
----
-Label        : 1
-Position     : [291.038, 1245.22]
-Measurements : [984.714, 324931, 1.08294, -0.143452]
----
-Label        : 1
-Position     : [20.5982, 1245.26]
-Measurements : [1322.32, 579161, 0.409905, -1.32241]
----
-Label        : 1
-Position     : [1221.66, 1245.47]
-Measurements : [1699, 251977, -0.222801, -0.634156]
----
-Label        : 1
-Position     : [18.0231, 1245.57]
-Measurements : [1285.78, 541081, 0.506737, -1.17024]
----
-Label        : 1
-Position     : [838.919, 1245.59]
-Measurements : [1833.08, 177023, -0.208719, -0.387439]
----
-Label        : 1
-Position     : [210.799, 1245.61]
-Measurements : [1781, 231927, -0.446551, -0.568587]
----
-Label        : 1
-Position     : [896.627, 1245.69]
-Measurements : [1667.21, 434272, -0.0512293, -0.715904]
----
-Label        : 1
-Position     : [891.224, 1246.27]
-Measurements : [1233.78, 592214, 0.220704, -1.53333]
----
-Label        : 1
-Position     : [776.355, 1246.29]
-Measurements : [1303.16, 248183, -0.365057, -0.864135]
----
-Label        : 1
-Position     : [799.913, 1246.43]
-Measurements : [1366.77, 296133, 0.16384, -0.815227]
----
-Label        : 0
-Position     : [122.155, 1246.45]
-Measurements : [1202.03, 43292.8, -0.825552, 0.087116]
----
-Label        : 1
-Position     : [896.16, 1246.54]
-Measurements : [1767.4, 382927, -0.165061, -0.543131]
----
-Label        : 1
-Position     : [282.127, 1246.67]
-Measurements : [957.635, 257902, 0.414426, -1.20054]
----
-Label        : 1
-Position     : [1209.15, 1246.75]
-Measurements : [2401.75, 303733, -0.453457, -0.588507]
----
-Label        : 1
-Position     : [967.486, 1246.95]
-Measurements : [1160.41, 438712, 0.388608, -1.42383]
----
-Label        : 1
-Position     : [220.081, 1247.15]
-Measurements : [1118.06, 571152, 0.868769, -0.823116]
----
-Label        : 1
-Position     : [288.463, 1247.23]
-Measurements : [1111.55, 288619, 0.522288, -0.920139]
----
-Label        : 1
-Position     : [805.873, 1247.38]
-Measurements : [1109.86, 402200, 0.783666, -0.839501]
----
-Label        : 1
-Position     : [285.672, 1247.46]
-Measurements : [1176.35, 287250, 0.246708, -1.05309]
----
-Label        : 1
-Position     : [834.215, 1247.54]
-Measurements : [1731.9, 256776, -0.627676, 0.146996]
----
-Label        : 1
-Position     : [859.809, 1247.64]
-Measurements : [1383.61, 328618, -0.187224, -1.30354]
----
-Label        : 1
-Position     : [842.102, 1247.76]
-Measurements : [1409.2, 183754, 0.568346, -0.607575]
----
-Label        : 1
-Position     : [742.35, 1248.15]
-Measurements : [1287.64, 318864, -0.0125858, -1.46992]
----
-Label        : 1
-Position     : [919.708, 1248.24]
-Measurements : [1483.8, 322515, -0.102679, -0.438587]
----
-Label        : 1
-Position     : [1228.82, 1248.27]
-Measurements : [2091.18, 397670, -0.606103, -0.961399]
----
-Label        : 1
-Position     : [741.025, 1248.46]
-Measurements : [1323.79, 311335, -0.153769, -1.37594]
----
-Label        : 1
-Position     : [778.298, 1248.46]
-Measurements : [1579.87, 161782, 0.090404, -0.214226]
----
-Label        : 1
-Position     : [998.672, 1248.46]
-Measurements : [684.731, 360047, 2.21223, 3.46351]
----
-Label        : 1
-Position     : [1215.93, 1248.51]
-Measurements : [2010.97, 450985, 0.0196436, -0.435956]
----
-Label        : 1
-Position     : [836.871, 1248.87]
-Measurements : [1821.98, 192820, -0.44287, -0.172729]
----
-Label        : 1
-Position     : [24.9721, 1248.94]
-Measurements : [1711.89, 944472, -0.00861559, -1.56485]
----
-Label        : 1
-Position     : [771.471, 1248.98]
-Measurements : [940.486, 461815, 0.614761, -1.26091]
----
-Label        : 1
-Position     : [213.992, 1248.99]
-Measurements : [1884.12, 234227, -0.706126, 0.348482]
----
-Label        : 1
-Position     : [836.845, 1249.27]
-Measurements : [1823.32, 175264, -0.429781, -0.116832]
----
-Label        : 1
-Position     : [798.778, 1249.28]
-Measurements : [1161.2, 313868, 0.622282, -0.629611]
----
-Label        : 1
-Position     : [964.289, 1249.31]
-Measurements : [1014.56, 301887, 0.484466, -1.17381]
----
-Label        : 0
-Position     : [126.196, 1249.45]
-Measurements : [1154.42, 43557.8, -0.491892, -0.90433]
----
-Label        : 1
-Position     : [1231.46, 1249.66]
-Measurements : [2185.08, 300673, -0.760805, -0.561286]
----
-Label        : 1
-Position     : [774.339, 1249.8]
-Measurements : [1341.07, 479289, -0.206209, -1.28169]
----
-Label        : 1
-Position     : [835.149, 1249.82]
-Measurements : [1842.2, 146143, -0.229768, -0.0816093]
----
-Label        : 1
-Position     : [895.854, 1250.1]
-Measurements : [2043.17, 327401, -0.760018, 0.243777]
----
-Label        : 1
-Position     : [1227.8, 1250.39]
-Measurements : [2035.41, 455928, -0.464992, -1.28888]
----
-Label        : 1
-Position     : [284.829, 1250.43]
-Measurements : [1338.11, 234083, -0.189229, -0.730715]
----
-Label        : 1
-Position     : [795.306, 1250.79]
-Measurements : [1001.59, 182792, 0.542941, -0.786473]
----
-Label        : 1
-Position     : [280.41, 1251.08]
-Measurements : [1279.93, 289634, -0.283567, -1.04502]
----
-Label        : 1
-Position     : [889.134, 1251.5]
-Measurements : [1403.17, 689504, 0.0846717, -1.49233]
----
-Label        : 1
-Position     : [213.231, 1251.51]
-Measurements : [1898.26, 227479, -0.818888, 0.673467]
----
-Label        : 0
-Position     : [131.08, 1251.59]
-Measurements : [1068.91, 54518.2, -0.125231, -1.21105]
----
-Label        : 1
-Position     : [1255.21, 1251.62]
-Measurements : [809.48, 216319, 1.37975, 0.787938]
----
-Label        : 1
-Position     : [741.171, 1251.74]
-Measurements : [1498.39, 164459, -0.205465, -0.77866]
----
-Label        : 1
-Position     : [994.255, 1251.93]
-Measurements : [1353.6, 769906, 0.203548, -1.54386]
----
-Label        : 1
-Position     : [1247.06, 1252.03]
-Measurements : [1352.12, 470873, 0.42204, -1.19798]
----
-Label        : 1
-Position     : [858.17, 1252.15]
-Measurements : [1239.63, 361798, 0.137347, -1.48773]
----
-Label        : 1
-Position     : [739.716, 1252.19]
-Measurements : [1419.02, 171493, 0.0461638, -0.749297]
----
-Label        : 1
-Position     : [20.968, 1252.58]
-Measurements : [2323.47, 397117, -0.570539, -0.34185]
----
-Label        : 1
-Position     : [282.088, 1252.58]
-Measurements : [1425.74, 250745, 0.0803986, -0.622793]
----
-Label        : 1
-Position     : [1245.1, 1252.62]
-Measurements : [1564.4, 393715, -0.0302333, -1.18573]
----
-Label        : 1
-Position     : [776.25, 1252.97]
-Measurements : [1415.54, 343092, 0.00101286, -1.12996]
----
-Label        : 1
-Position     : [796.754, 1253.13]
-Measurements : [1099.52, 346600, 0.669797, -0.738685]
----
-Label        : 1
-Position     : [919.298, 1253.16]
-Measurements : [1740.04, 272901, -0.244013, -0.188017]
----
-Label        : 1
-Position     : [964.764, 1253.16]
-Measurements : [1164.82, 196364, -0.221582, -1.12304]
----
-Label        : 1
-Position     : [800.747, 1253.32]
-Measurements : [1167.87, 386391, 0.685791, -0.814127]
----
-Label        : 1
-Position     : [834.004, 1253.38]
-Measurements : [1808.95, 254158, -0.475557, -0.350112]
----
-Label        : 1
-Position     : [284.78, 1253.45]
-Measurements : [1418.34, 297475, 0.377753, -0.491705]
----
-Label        : 1
-Position     : [212.456, 1253.6]
-Measurements : [1871.4, 149892, -0.658298, 0.660001]
----
-Label        : 1
-Position     : [993.956, 1253.99]
-Measurements : [1546.86, 560871, -0.0527651, -1.22589]
----
-Label        : 1
-Position     : [893.396, 1254.19]
-Measurements : [1960.99, 295063, -0.904191, 0.359902]
----
-Label        : 1
-Position     : [967.939, 1254.24]
-Measurements : [1039.92, 203228, 0.276857, -1.13304]
----
-Label        : 1
-Position     : [855.455, 1254.29]
-Measurements : [1065.32, 284217, 0.395776, -1.15303]
----
-Label        : 1
-Position     : [17.6999, 1254.29]
-Measurements : [2124.75, 311027, -0.0198567, -0.888139]
----
-Label        : 1
-Position     : [963.952, 1254.34]
-Measurements : [1306.4, 168288, -0.21038, -0.309538]
----
-Label        : 1
-Position     : [1397.09, 1254.5]
-Measurements : [1978.58, 475627, 0.527454, -0.552366]
----
-Label        : 1
-Position     : [1253.25, 1254.53]
-Measurements : [873.655, 271370, 1.1682, 0.100972]
----
-Label        : 1
-Position     : [741.025, 1254.6]
-Measurements : [1370.28, 136539, 0.535164, -0.577723]
----
-Label        : 1
-Position     : [894.181, 1254.72]
-Measurements : [1959.17, 293305, -0.815807, -0.0205787]
----
-Label        : 1
-Position     : [994.717, 1254.97]
-Measurements : [1589.52, 539948, -0.0692888, -1.27923]
----
-Label        : 1
-Position     : [280.04, 1255.14]
-Measurements : [1682.6, 238647, -0.393966, 0.256378]
----
-Label        : 1
-Position     : [210.648, 1255.19]
-Measurements : [1632.35, 236906, -0.626587, -0.657645]
----
-Label        : 1
-Position     : [1258.11, 1255.3]
-Measurements : [1033.28, 283631, 0.526914, -0.785717]
----
-Label        : 1
-Position     : [796.73, 1255.42]
-Measurements : [1028.65, 347205, 0.882684, -0.458077]
----
-Label        : 1
-Position     : [215.983, 1255.56]
-Measurements : [1635.83, 315763, -0.599883, -0.900548]
----
-Label        : 1
-Position     : [889.5, 1255.63]
-Measurements : [1567.75, 597446, -0.241598, -1.30015]
----
-Label        : 1
-Position     : [285.139, 1255.73]
-Measurements : [1351.31, 301722, 0.529562, -0.337382]
----
-Label        : 1
-Position     : [861.634, 1255.74]
-Measurements : [865.982, 264823, 1.15112, -0.097197]
----
-Label        : 1
-Position     : [832.775, 1255.83]
-Measurements : [1465.58, 523468, -0.11953, -1.45124]
----
-Label        : 1
-Position     : [1248.58, 1255.88]
-Measurements : [1093.55, 523795, 1.05032, -0.464598]
----
-Label        : 1
-Position     : [834.79, 1255.9]
-Measurements : [1568.81, 441889, -0.295195, -1.21334]
----
-Label        : 1
-Position     : [914.679, 1256.1]
-Measurements : [1550.43, 256988, 0.0884644, -0.328219]
----
-Label        : 1
-Position     : [836.937, 1256.11]
-Measurements : [1464.72, 485482, 0.0467023, -1.49397]
----
-Label        : 1
-Position     : [920.038, 1256.6]
-Measurements : [1415.53, 358529, 0.116888, -0.869241]
----
-Label        : 1
-Position     : [859.898, 1256.64]
-Measurements : [950.642, 273064, 0.700891, -1.03008]
----
-Label        : 1
-Position     : [83.844, 1256.91]
-Measurements : [1098.37, 678677, 0.587056, -1.24661]
----
-Label        : 1
-Position     : [834.932, 1257.2]
-Measurements : [1358.13, 509395, 0.241541, -1.41618]
----
-Label        : 1
-Position     : [916.022, 1257.25]
-Measurements : [1577.41, 261326, -0.104453, -0.318685]
----
-Label        : 1
-Position     : [909.325, 1257.4]
-Measurements : [1132.17, 169953, 0.697982, -0.296762]
----
-Label        : 1
-Position     : [801.6, 1257.46]
-Measurements : [901.677, 294916, 1.53917, 1.18786]
----
-Label        : 1
-Position     : [28.304, 1257.56]
-Measurements : [1911.88, 1.06338e+06, -0.0284124, -1.69962]
----
-Label        : 1
-Position     : [920.38, 1257.56]
-Measurements : [1400.48, 395022, 0.0962397, -1.07264]
----
-Label        : 1
-Position     : [211.47, 1257.56]
-Measurements : [1739.01, 246583, -0.455685, -0.510702]
----
-Label        : 1
-Position     : [778.193, 1257.82]
-Measurements : [1205.55, 300699, 0.847396, -0.256126]
----
-Label        : 1
-Position     : [910.534, 1257.97]
-Measurements : [1227.3, 220119, 0.523979, -0.567578]
----
-Label        : 1
-Position     : [963.535, 1258.07]
-Measurements : [1405.6, 195275, 0.400352, -0.38213]
----
-Label        : 1
-Position     : [1236.49, 1258.13]
-Measurements : [2336.81, 692175, -0.529384, -0.758764]
----
-Label        : 1
-Position     : [85.2091, 1258.16]
-Measurements : [1513.75, 682946, -0.195229, -1.50802]
----
-Label        : 1
-Position     : [916.107, 1258.22]
-Measurements : [1581.97, 261065, -0.121111, -0.336849]
----
-Label        : 1
-Position     : [1272.41, 1258.46]
-Measurements : [1451.77, 342337, 0.413854, -0.932567]
----
-Label        : 1
-Position     : [737.402, 1258.5]
-Measurements : [1069.23, 25067.2, 2.09175, 5.49735]
----
-Label        : 1
-Position     : [831.051, 1258.51]
-Measurements : [1173.1, 472178, 0.526862, -1.06173]
----
-Label        : 1
-Position     : [1392.5, 1258.63]
-Measurements : [2228.93, 326304, -0.0816162, -1.40713]
----
-Label        : 1
-Position     : [890.529, 1258.7]
-Measurements : [1567.02, 604066, -0.162801, -1.3794]
----
-Label        : 1
-Position     : [990.159, 1258.89]
-Measurements : [1689.43, 227558, 0.210985, -0.182801]
----
-Label        : 1
-Position     : [87.528, 1259.23]
-Measurements : [1741.37, 558693, -0.657493, -0.935365]
----
-Label        : 1
-Position     : [212.968, 1259.23]
-Measurements : [1827.59, 242623, -0.094315, -0.435854]
----
-Label        : 1
-Position     : [774.202, 1259.52]
-Measurements : [1064.08, 182308, 0.759521, 0.732401]
----
-Label        : 1
-Position     : [831.235, 1259.84]
-Measurements : [1144.36, 430027, 0.581452, -0.885287]
----
-Label        : 1
-Position     : [770.459, 1259.88]
-Measurements : [948.922, 177271, 0.150379, -0.978193]
----
-Label        : 1
-Position     : [855.713, 1259.93]
-Measurements : [1089.67, 243019, 0.050132, -1.38737]
----
-Label        : 1
-Position     : [961.46, 1259.93]
-Measurements : [1488.74, 245611, 0.335207, -0.882394]
----
-Label        : 1
-Position     : [1277.75, 1259.95]
-Measurements : [1462.48, 212929, 0.561237, -0.302647]
----
-Label        : 1
-Position     : [777.782, 1259.98]
-Measurements : [1052.17, 173258, 1.03168, 1.08609]
----
-Label        : 0
-Position     : [141.864, 1260.11]
-Measurements : [1161.23, 14197.5, -0.856282, 0.146767]
----
-Label        : 1
-Position     : [891.858, 1260.53]
-Measurements : [1371.03, 571419, 0.068168, -1.55675]
----
-Label        : 1
-Position     : [988.008, 1260.63]
-Measurements : [1698.91, 161983, 0.0458537, -0.200945]
----
-Label        : 1
-Position     : [968.25, 1260.74]
-Measurements : [1026.67, 104432, 0.823349, 0.608202]
----
-Label        : 1
-Position     : [24.552, 1260.77]
-Measurements : [1878.79, 902667, -0.0910636, -1.56025]
----
-Label        : 1
-Position     : [1389.15, 1260.93]
-Measurements : [2280.33, 312004, -0.255748, -1.20516]
----
-Label        : 1
-Position     : [776.543, 1260.97]
-Measurements : [1019.25, 122517, 0.488638, -0.334487]
----
-Label        : 1
-Position     : [1262.19, 1261.26]
-Measurements : [1470.99, 306118, 0.474048, -0.398873]
----
-Label        : 1
-Position     : [1233.54, 1261.45]
-Measurements : [2478.92, 755106, -0.435004, -0.86253]
----
-Label        : 0
-Position     : [162.204, 1261.46]
-Measurements : [1024.62, 8851.47, -0.999245, 1.00363]
----
-Label        : 1
-Position     : [962.306, 1261.76]
-Measurements : [1402.54, 251502, 0.618139, -0.659768]
----
-Label        : 1
-Position     : [913.154, 1262.17]
-Measurements : [1471.81, 204942, 0.467327, 0.333337]
----
-Label        : 1
-Position     : [277.992, 1262.3]
-Measurements : [1786.09, 274001, -0.495025, -0.336688]
----
-Label        : 1
-Position     : [276.954, 1262.42]
-Measurements : [1723.27, 321413, -0.710078, -0.23199]
----
-Label        : 1
-Position     : [858.017, 1262.64]
-Measurements : [966.708, 250361, 0.555003, -1.2046]
----
-Label        : 1
-Position     : [1380.62, 1262.73]
-Measurements : [2367.41, 208529, -0.250931, -0.146135]
----
-Label        : 1
-Position     : [279.011, 1262.75]
-Measurements : [1799.52, 301108, -0.466854, -0.633814]
----
-Label        : 1
-Position     : [855.162, 1262.77]
-Measurements : [1215.53, 195811, -0.28758, -1.0922]
----
-Label        : 1
-Position     : [851.069, 1262.93]
-Measurements : [1289.93, 135313, -0.328325, -0.593033]
----
-Label        : 1
-Position     : [961.328, 1263.05]
-Measurements : [1442.31, 229359, 0.425861, -0.617068]
----
-Label        : 1
-Position     : [1261.39, 1263.09]
-Measurements : [1538.63, 348359, 0.114679, -0.898842]
----
-Label        : 1
-Position     : [1276.14, 1263.09]
-Measurements : [1463.62, 225533, 0.491045, -0.586498]
----
-Label        : 1
-Position     : [853.255, 1263.21]
-Measurements : [1320.13, 154674, -0.552602, -0.596894]
----
-Label        : 1
-Position     : [990.159, 1263.4]
-Measurements : [1870.1, 236787, -0.295546, -0.301379]
----
-Label        : 1
-Position     : [22.5714, 1263.57]
-Measurements : [1545.46, 740838, 0.522742, -1.02236]
----
-Label        : 1
-Position     : [1355.8, 1263.8]
-Measurements : [797.289, 65883.1, 0.258388, -1.07459]
----
-Label        : 1
-Position     : [1232.42, 1263.89]
-Measurements : [2440.02, 718967, -0.320991, -0.893494]
----
-Label        : 1
-Position     : [19.8285, 1264.15]
-Measurements : [1283.39, 460026, 0.786823, -0.271953]
----
-Label        : 1
-Position     : [1263.39, 1264.22]
-Measurements : [1746.48, 399371, -0.0778575, -0.905062]
----
-Label        : 1
-Position     : [957.556, 1264.33]
-Measurements : [1537.36, 233231, -0.280746, -0.0402842]
----
-Label        : 1
-Position     : [831.956, 1264.43]
-Measurements : [1095.41, 217123, 0.113882, -1.11371]
----
-Label        : 1
-Position     : [794.669, 1264.59]
-Measurements : [852.248, 248790, 1.14469, -0.174633]
----
-Label        : 1
-Position     : [1358.51, 1264.77]
-Measurements : [927.305, 51318.3, -0.117746, -0.782376]
----
-Label        : 1
-Position     : [770.926, 1264.84]
-Measurements : [1140.39, 125648, -0.177019, 0.274811]
----
-Label        : 1
-Position     : [215.528, 1264.86]
-Measurements : [1940.97, 284119, -0.253913, -0.144384]
----
-Label        : 1
-Position     : [836.597, 1265.02]
-Measurements : [981.066, 140089, 0.629907, -0.361248]
----
-Label        : 1
-Position     : [1372.02, 1265.18]
-Measurements : [1255.18, 275730, 0.221153, -1.24464]
----
-Label        : 1
-Position     : [1374.9, 1265.41]
-Measurements : [1407.62, 410678, 0.292982, -1.04976]
----
-Label        : 1
-Position     : [1267.13, 1265.54]
-Measurements : [1797.68, 347339, -0.0682253, -0.648295]
----
-Label        : 1
-Position     : [909.892, 1265.66]
-Measurements : [1262.16, 190904, -0.236929, -0.991898]
----
-Label        : 1
-Position     : [1356.12, 1265.76]
-Measurements : [828.752, 64321.5, 0.126462, -1.15868]
----
-Label        : 1
-Position     : [848.874, 1265.89]
-Measurements : [1281.12, 148392, -0.17597, -0.815121]
----
-Label        : 1
-Position     : [87.2103, 1266.14]
-Measurements : [1816.03, 371552, -0.583664, -0.689621]
----
-Label        : 1
-Position     : [211.147, 1266.16]
-Measurements : [1463.62, 447437, 0.0565107, -1.24945]
----
-Label        : 1
-Position     : [1371, 1266.57]
-Measurements : [1125.29, 237328, 0.411838, -1.31055]
----
-Label        : 1
-Position     : [911.516, 1266.67]
-Measurements : [1438.42, 170534, -0.275625, -0.264899]
----
-Label        : 1
-Position     : [1384.73, 1266.8]
-Measurements : [2255.6, 452318, -0.187656, -1.04375]
----
-Label        : 1
-Position     : [1326.89, 1266.96]
-Measurements : [1422.6, 356425, 0.90661, 0.245215]
----
-Label        : 1
-Position     : [988.032, 1267.02]
-Measurements : [1720.89, 294120, -0.213187, -0.818371]
----
-Label        : 0
-Position     : [143.171, 1267.03]
-Measurements : [1126.34, 5577.71, 0.00119126, 0.066821]
----
-Label        : 1
-Position     : [276.633, 1267.24]
-Measurements : [1697.35, 293153, -0.316405, -0.794437]
----
-Label        : 1
-Position     : [989.911, 1267.25]
-Measurements : [1739.56, 333620, -0.227823, -0.951713]
----
-Label        : 1
-Position     : [792.634, 1267.3]
-Measurements : [993.373, 277716, 0.672034, -1.04451]
----
-Label        : 1
-Position     : [956.782, 1267.39]
-Measurements : [1493.11, 185979, -0.553917, 0.497812]
----
-Label        : 1
-Position     : [88.04, 1267.42]
-Measurements : [1767.38, 342539, -0.683385, -0.662016]
----
-Label        : 1
-Position     : [276.968, 1267.42]
-Measurements : [1697.35, 293153, -0.316405, -0.794437]
----
-Label        : 1
-Position     : [218.741, 1267.62]
-Measurements : [1396.54, 642949, 0.314594, -1.38164]
----
-Label        : 1
-Position     : [852.026, 1267.71]
-Measurements : [1427.76, 232056, -0.322138, -0.29812]
----
-Label        : 1
-Position     : [1375.94, 1267.72]
-Measurements : [1520.37, 421227, 0.245601, -0.843611]
----
-Label        : 1
-Position     : [851.033, 1267.74]
-Measurements : [1478.78, 203214, -0.30586, -0.020615]
----
-Label        : 1
-Position     : [1264.87, 1267.85]
-Measurements : [1902.4, 311784, -0.272121, -0.387927]
----
-Label        : 1
-Position     : [1337.96, 1267.87]
-Measurements : [1371.52, 495454, 0.828779, -0.641853]
----
-Label        : 1
-Position     : [959.439, 1267.9]
-Measurements : [1518.89, 144257, -0.116293, 0.122405]
----
-Label        : 1
-Position     : [20.968, 1267.94]
-Measurements : [1305.88, 421491, 0.425273, -1.34135]
----
-Label        : 1
-Position     : [770.269, 1268.25]
-Measurements : [1154.15, 61894.7, 0.79354, 3.19206]
----
-Label        : 1
-Position     : [87.3082, 1268.27]
-Measurements : [1643.83, 371150, -0.583751, -0.957718]
----
-Label        : 1
-Position     : [985.029, 1268.52]
-Measurements : [1510.67, 231324, -0.040573, -0.65032]
----
-Label        : 1
-Position     : [831.137, 1268.53]
-Measurements : [1289.83, 128331, -0.0455321, -0.354233]
----
-Label        : 1
-Position     : [829.7, 1268.6]
-Measurements : [1309.19, 144735, -0.394333, -0.229632]
----
-Label        : 1
-Position     : [1318.33, 1268.66]
-Measurements : [1489.87, 430070, 0.558454, -0.690285]
----
-Label        : 1
-Position     : [215.349, 1269.55]
-Measurements : [1348.37, 436328, 0.158105, -1.3495]
----
-Label        : 1
-Position     : [276.067, 1269.73]
-Measurements : [1634.96, 259204, -0.250051, -1.31033]
----
-Label        : 1
-Position     : [913.98, 1269.74]
-Measurements : [1590.94, 303890, 0.268524, -0.436501]
----
-Label        : 1
-Position     : [916.012, 1269.89]
-Measurements : [1322.41, 455273, 0.481862, -0.874612]
----
-Label        : 1
-Position     : [830.664, 1269.9]
-Measurements : [1300.54, 128599, -0.0110866, -0.485615]
----
-Label        : 1
-Position     : [984.425, 1269.95]
-Measurements : [1354.8, 267468, 0.051039, -0.875478]
----
-Label        : 1
-Position     : [274.408, 1269.98]
-Measurements : [1710.64, 220996, -0.607287, -0.680576]
----
-Label        : 1
-Position     : [790.909, 1270.03]
-Measurements : [1009.64, 228475, 0.790661, -0.702848]
----
-Label        : 1
-Position     : [829.089, 1270.17]
-Measurements : [1260.05, 157168, -0.221084, -0.576477]
----
-Label        : 1
-Position     : [1266.47, 1270.31]
-Measurements : [1528.04, 463861, 0.0818214, -0.944515]
----
-Label        : 1
-Position     : [216.552, 1270.5]
-Measurements : [1292.89, 435018, 0.341703, -1.29119]
----
-Label        : 1
-Position     : [980.25, 1270.53]
-Measurements : [971.972, 183987, 0.463825, -0.904142]
----
-Label        : 1
-Position     : [850.388, 1270.58]
-Measurements : [1791.48, 305852, 0.236115, -0.435699]
----
-Label        : 1
-Position     : [272.602, 1270.59]
-Measurements : [1709.99, 221587, -0.83505, 0.0882693]
----
-Label        : 1
-Position     : [1341.51, 1270.61]
-Measurements : [1636.54, 876339, 0.406497, -1.34153]
----
-Label        : 1
-Position     : [1339.22, 1270.87]
-Measurements : [1672.11, 821933, 0.411704, -1.28192]
----
-Label        : 1
-Position     : [882.049, 1270.97]
-Measurements : [730.39, 291352, 1.49659, 0.77032]
----
-Label        : 1
-Position     : [915.274, 1271.38]
-Measurements : [1415.48, 483783, 0.322776, -1.11401]
----
-Label        : 1
-Position     : [1330.2, 1271.69]
-Measurements : [1883.21, 734004, 0.20238, -1.38058]
----
-Label        : 1
-Position     : [87.8088, 1271.74]
-Measurements : [1409.39, 485721, -0.0731958, -1.42397]
----
-Label        : 1
-Position     : [849.929, 1271.89]
-Measurements : [1864.68, 346751, 0.145787, -0.555148]
----
-Label        : 1
-Position     : [843.19, 1271.93]
-Measurements : [1304.97, 427993, 1.18084, 0.251304]
----
-Label        : 1
-Position     : [912.335, 1272]
-Measurements : [1676.71, 318031, 0.0110329, -0.679424]
----
-Label        : 1
-Position     : [833.846, 1272.01]
-Measurements : [1154.08, 111580, 0.451155, 0.0667646]
----
-Label        : 1
-Position     : [217.268, 1272.16]
-Measurements : [1273.29, 497893, 0.610457, -1.01856]
----
-Label        : 1
-Position     : [20.1124, 1272.48]
-Measurements : [1518.92, 434892, -0.0169752, -1.60539]
----
-Label        : 1
-Position     : [824.266, 1272.59]
-Measurements : [843.047, 220276, 0.856368, -0.413498]
----
-Label        : 0
-Position     : [155.044, 1272.63]
-Measurements : [998.884, 9513.87, -0.615159, -1.08871]
----
-Label        : 1
-Position     : [87.7067, 1272.71]
-Measurements : [1258.22, 481950, 0.229136, -1.36867]
----
-Label        : 1
-Position     : [1321.6, 1272.92]
-Measurements : [1535.69, 372124, 0.323465, -0.853967]
----
-Label        : 1
-Position     : [271.795, 1272.92]
-Measurements : [1717.79, 191248, -0.775414, -0.0244705]
----
-Label        : 1
-Position     : [1319.38, 1273.82]
-Measurements : [1733.55, 579491, 0.254928, -1.03958]
----
-Label        : 1
-Position     : [272.18, 1273.97]
-Measurements : [1688.14, 207070, -0.614185, -0.601518]
----
-Label        : 1
-Position     : [956.982, 1274.05]
-Measurements : [1401.2, 322769, -0.458076, -1.20576]
----
-Label        : 1
-Position     : [888.481, 1274.08]
-Measurements : [938.682, 279865, 0.983311, -0.0747808]
----
-Label        : 1
-Position     : [1031.94, 1274.46]
-Measurements : [1513.22, 286206, -0.609127, -0.540951]
----
-Label        : 1
-Position     : [1334.49, 1274.66]
-Measurements : [1957.52, 880910, -0.112217, -1.50568]
----
-Label        : 1
-Position     : [847.111, 1275.08]
-Measurements : [1983.82, 444925, -0.334283, -0.835614]
----
-Label        : 1
-Position     : [884.385, 1275.08]
-Measurements : [1246.37, 323448, 0.0199728, -1.2167]
----
-Label        : 1
-Position     : [91.112, 1275.1]
-Measurements : [1171.22, 397123, 0.631661, -0.986173]
----
-Label        : 1
-Position     : [855.084, 1275.5]
-Measurements : [1314.45, 718846, 0.560956, -1.25662]
----
-Label        : 1
-Position     : [958.968, 1276.2]
-Measurements : [1262.02, 393797, -0.0187911, -1.60684]
----
-Label        : 1
-Position     : [846.588, 1276.28]
-Measurements : [1896.2, 528793, -0.199987, -1.21472]
----
-Label        : 1
-Position     : [1030.64, 1276.46]
-Measurements : [1598.17, 156800, -0.109607, -0.760337]
----
-Label        : 0
-Position     : [128.04, 1276.49]
-Measurements : [991.299, 7790.14, 0.064431, -0.870962]
----
-Label        : 1
-Position     : [270.312, 1276.64]
-Measurements : [1593.83, 167078, -0.457771, -0.818316]
----
-Label        : 1
-Position     : [908.649, 1276.91]
-Measurements : [1711.3, 353313, -0.0488718, -0.944461]
----
-Label        : 1
-Position     : [887.404, 1277.37]
-Measurements : [1249.65, 262145, 0.185639, -0.900697]
----
-Label        : 0
-Position     : [129.743, 1277.84]
-Measurements : [1003.63, 7396.67, -0.209893, -1.03153]
----
-Label        : 1
-Position     : [1030.17, 1277.91]
-Measurements : [1580.75, 146128, 0.0477945, -0.799761]
----
-Label        : 1
-Position     : [274.75, 1277.93]
-Measurements : [1297.25, 250047, 0.484192, -1.08746]
----
-Label        : 1
-Position     : [957.019, 1278.06]
-Measurements : [1040.58, 459401, 0.576061, -1.43294]
----
-Label        : 1
-Position     : [1035.07, 1278.09]
-Measurements : [1308.67, 237155, 0.492969, -0.964064]
----
-Label        : 1
-Position     : [216.04, 1278.18]
-Measurements : [1466.14, 301373, 0.242406, -0.86261]
----
-Label        : 1
-Position     : [845.997, 1278.49]
-Measurements : [1694.7, 656378, 0.0389483, -1.39865]
----
-Label        : 0
-Position     : [147.283, 1278.52]
-Measurements : [1004.62, 10409.4, -0.395005, -0.081651]
----
-Label        : 1
-Position     : [1028.66, 1278.55]
-Measurements : [1501.99, 134401, -0.113138, 0.0213176]
----
-Label        : 1
-Position     : [1312.18, 1278.65]
-Measurements : [2170.1, 460425, 0.00151945, -1.37389]
----
-Label        : 1
-Position     : [220.876, 1279.07]
-Measurements : [1343.88, 464903, 0.384356, -1.15198]
----
-Label        : 1
-Position     : [887.442, 1279.07]
-Measurements : [1373.82, 278442, 0.461498, -0.587649]
----
-Label        : 1
-Position     : [885.585, 1279.15]
-Measurements : [1500.34, 254637, 0.156553, -0.71584]
----
-Label        : 1
-Position     : [268.394, 1279.16]
-Measurements : [1546.53, 177055, -0.0186647, -0.696369]
----
-Label        : 1
-Position     : [211.056, 1279.61]
-Measurements : [1261.95, 131954, 0.423172, -0.969613]
----
-Label        : 1
-Position     : [903.99, 1279.7]
-Measurements : [1184.96, 251650, 0.422302, -0.378776]
----
-Label        : 1
-Position     : [1028.73, 1279.84]
-Measurements : [1498.25, 107090, 0.112483, -0.219468]
----
-Label        : 1
-Position     : [821.212, 1279.97]
-Measurements : [584.705, 75054.7, 2.47731, 5.77632]
----
-Label        : 1
-Position     : [884.794, 1280]
-Measurements : [1551.68, 227235, 0.0728988, -0.574533]
----
-Label        : 1
-Position     : [1027.8, 1280.05]
-Measurements : [1496.35, 79258, -0.183097, 0.0157085]
----
-Label        : 1
-Position     : [1052.41, 1280.26]
-Measurements : [692.831, 123755, 0.87654, -0.506265]
----
-Label        : 1
-Position     : [847.111, 1280.41]
-Measurements : [1675.81, 718393, 0.0118482, -1.38391]
----
-Label        : 1
-Position     : [31.5608, 1280.81]
-Measurements : [1074.84, 519498, 1.13997, -0.281376]
----
-Label        : 1
-Position     : [30.86, 1280.87]
-Measurements : [1158.96, 534948, 0.9088, -0.781694]
----
-Label        : 1
-Position     : [1311.38, 1280.97]
-Measurements : [2190.12, 534243, -0.0713197, -1.45898]
----
-Label        : 1
-Position     : [904.631, 1281.38]
-Measurements : [1110.87, 311620, 0.560807, -0.429911]
----
-Label        : 1
-Position     : [265.704, 1281.76]
-Measurements : [1605.43, 290249, -0.197736, -0.743859]
----
-Label        : 1
-Position     : [980.738, 1281.83]
-Measurements : [1217.45, 301303, -0.0627685, -1.23875]
----
-Label        : 1
-Position     : [263.58, 1281.92]
-Measurements : [1562.99, 354345, -0.324655, -0.787033]
----
-Label        : 1
-Position     : [905.633, 1281.98]
-Measurements : [1198.26, 347487, 0.538262, -0.35413]
----
-Label        : 0
-Position     : [138.748, 1282]
-Measurements : [1078.39, 4122.25, -1.31527, 2.95209]
----
-Label        : 1
-Position     : [845.776, 1282.08]
-Measurements : [1226.5, 593189, 0.744271, -0.893227]
----
-Label        : 1
-Position     : [1053.11, 1282.15]
-Measurements : [883.654, 208383, 0.55272, -0.935005]
----
-Label        : 1
-Position     : [983.482, 1282.32]
-Measurements : [1189.96, 385567, 0.354785, -1.20446]
----
-Label        : 1
-Position     : [905.782, 1282.65]
-Measurements : [1088.53, 308535, 0.641278, -0.167966]
----
-Label        : 1
-Position     : [267.892, 1282.85]
-Measurements : [1587.21, 295656, 0.321701, -0.924107]
----
-Label        : 1
-Position     : [882.746, 1282.87]
-Measurements : [1620.12, 270193, -0.00614568, -0.732935]
----
-Label        : 1
-Position     : [880.472, 1283.03]
-Measurements : [1629.69, 382163, -0.283007, -0.797636]
----
-Label        : 1
-Position     : [979.726, 1283.3]
-Measurements : [1552.01, 289379, -0.0322378, -0.50485]
----
-Label        : 1
-Position     : [1316.15, 1283.34]
-Measurements : [2019.45, 652099, -0.119188, -1.3273]
----
-Label        : 1
-Position     : [1027.43, 1283.88]
-Measurements : [1588.91, 142617, 0.0784781, 0.0895234]
----
-Label        : 1
-Position     : [1052.3, 1284.23]
-Measurements : [1116.56, 250040, 0.359402, -0.953017]
----
-Label        : 1
-Position     : [28.648, 1284.32]
-Measurements : [1369.61, 504197, 0.496128, -1.29258]
----
-Label        : 1
-Position     : [975.996, 1284.45]
-Measurements : [1456.06, 226183, 0.106559, -0.349473]
----
-Label        : 1
-Position     : [824.993, 1284.5]
-Measurements : [777.24, 101012, 0.645523, -0.0665529]
----
-Label        : 1
-Position     : [1051.27, 1284.83]
-Measurements : [1097.76, 250196, 0.450734, -0.915886]
----
-Label        : 1
-Position     : [263.144, 1284.83]
-Measurements : [1797.54, 346579, 0.00165704, -0.597132]
----
-Label        : 1
-Position     : [821.972, 1285.1]
-Measurements : [803.352, 86063, 0.527319, 0.176368]
----
-Label        : 1
-Position     : [849.633, 1285.16]
-Measurements : [969.021, 412674, 1.30352, 0.523496]
----
-Label        : 0
-Position     : [149.084, 1285.89]
-Measurements : [937.225, 14747.5, 0.690499, -0.914493]
----
-Label        : 1
-Position     : [902.142, 1286.4]
-Measurements : [764.617, 134051, 0.805115, -0.849881]
----
-Label        : 1
-Position     : [979.775, 1286.55]
-Measurements : [1692.08, 202153, -0.222333, 0.223186]
----
-Label        : 1
-Position     : [1051.77, 1286.75]
-Measurements : [1197.8, 211037, 0.23475, -0.806127]
----
-Label        : 1
-Position     : [842.606, 1286.96]
-Measurements : [763.475, 108156, 1.50014, 2.19371]
----
-Label        : 1
-Position     : [258.976, 1287.05]
-Measurements : [1336.58, 616761, 0.448759, -1.17947]
----
-Label        : 1
-Position     : [881.824, 1287.12]
-Measurements : [1554.23, 492880, -0.103141, -1.32353]
----
-Label        : 1
-Position     : [1055.29, 1287.86]
-Measurements : [1206.71, 259315, 0.257619, -0.948606]
----
-Label        : 1
-Position     : [979.22, 1288.14]
-Measurements : [1734.56, 221384, -0.481802, 0.104913]
----
-Label        : 1
-Position     : [1052.3, 1288.29]
-Measurements : [1371.44, 218768, 0.402421, -0.376686]
----
-Label        : 1
-Position     : [1029.72, 1288.3]
-Measurements : [1321.65, 313501, 0.272091, -0.930014]
----
-Label        : 1
-Position     : [879.47, 1288.6]
-Measurements : [1362.79, 616098, 0.193422, -1.50539]
----
-Label        : 1
-Position     : [1030.22, 1288.62]
-Measurements : [1263.72, 288958, 0.481594, -0.715563]
----
-Label        : 1
-Position     : [245.326, 1288.87]
-Measurements : [919.186, 242214, 0.262161, -1.57769]
----
-Label        : 1
-Position     : [847.105, 1289.01]
-Measurements : [618.814, 67529.9, 2.39973, 5.69829]
----
-Label        : 1
-Position     : [1026.2, 1289.2]
-Measurements : [1307.15, 419216, 0.134594, -1.27735]
----
-Label        : 1
-Position     : [257.613, 1289.41]
-Measurements : [1213.13, 514020, 0.530758, -1.20613]
----
-Label        : 1
-Position     : [262.12, 1289.44]
-Measurements : [1504.81, 631578, 0.177676, -1.35678]
----
-Label        : 1
-Position     : [1029.37, 1289.65]
-Measurements : [1239.88, 342466, 0.452851, -0.882981]
----
-Label        : 1
-Position     : [883.894, 1291.42]
-Measurements : [1113.42, 481308, 0.955155, -0.43973]
----
-Label        : 1
-Position     : [1050.66, 1291.57]
-Measurements : [1452.92, 269077, -0.0365557, -0.611046]
----
-Label        : 1
-Position     : [1048, 1291.74]
-Measurements : [1332.31, 239550, 0.0927713, -0.789175]
----
-Label        : 1
-Position     : [947.826, 1291.87]
-Measurements : [1284.8, 442684, -0.045098, -1.29949]
----
-Label        : 1
-Position     : [247.784, 1292.51]
-Measurements : [1189.18, 147835, -0.331024, -0.800488]
----
-Label        : 1
-Position     : [234.432, 1292.69]
-Measurements : [784.546, 174269, 0.863796, -0.492083]
----
-Label        : 1
-Position     : [976.908, 1292.69]
-Measurements : [1814.38, 105590, -0.0835875, 0.619116]
----
-Label        : 1
-Position     : [972.332, 1292.73]
-Measurements : [1521.5, 219603, -0.555199, -0.674268]
----
-Label        : 0
-Position     : [129.859, 1292.76]
-Measurements : [1101.52, 4788.56, -0.57896, 2.62287]
----
-Label        : 1
-Position     : [243.619, 1293.22]
-Measurements : [1205.13, 114724, -0.496095, -0.772061]
----
-Label        : 1
-Position     : [952.219, 1293.29]
-Measurements : [1203.54, 372327, 0.325149, -1.04675]
----
-Label        : 1
-Position     : [266.455, 1293.42]
-Measurements : [1091.52, 342609, 1.79936, 3.39022]
----
-Label        : 1
-Position     : [899.823, 1293.5]
-Measurements : [1230.89, 273047, 0.189006, -0.938034]
----
-Label        : 1
-Position     : [981.806, 1293.51]
-Measurements : [1493.08, 358657, -0.161643, -1.11082]
----
-Label        : 1
-Position     : [241.128, 1293.54]
-Measurements : [1189.55, 127694, -0.330533, -0.951602]
----
-Label        : 1
-Position     : [251.88, 1293.54]
-Measurements : [1161.08, 224081, 0.321028, -1.06579]
----
-Label        : 1
-Position     : [904.409, 1293.92]
-Measurements : [1270.29, 332790, 0.0623967, -1.29094]
----
-Label        : 1
-Position     : [1046.2, 1294.07]
-Measurements : [1401.63, 352376, 0.289789, -0.802118]
----
-Label        : 1
-Position     : [231.646, 1294.63]
-Measurements : [625.734, 84893.5, 1.40675, 0.786302]
----
-Label        : 1
-Position     : [242.785, 1295.22]
-Measurements : [1201.73, 114580, -0.222575, -1.07302]
----
-Label        : 1
-Position     : [944.165, 1295.72]
-Measurements : [1274.46, 297008, 0.135623, -0.748177]
----
-Label        : 1
-Position     : [235.496, 1296.1]
-Measurements : [914.635, 160515, 0.579154, -0.723332]
----
-Label        : 1
-Position     : [1052.76, 1296.35]
-Measurements : [1481.06, 484212, 0.189049, -1.26211]
----
-Label        : 1
-Position     : [1020.76, 1296.49]
-Measurements : [1123.55, 275943, 0.0951406, -1.25244]
----
-Label        : 1
-Position     : [1017.42, 1296.52]
-Measurements : [1112.06, 306191, 0.105569, -1.32919]
----
-Label        : 1
-Position     : [1278.33, 1296.57]
-Measurements : [1080.19, 323320, 0.213425, -1.06319]
----
-Label        : 1
-Position     : [943.056, 1296.81]
-Measurements : [1169.21, 294729, 0.372983, -0.743316]
----
-Label        : 1
-Position     : [903.626, 1296.95]
-Measurements : [1500.36, 247677, -0.23278, -0.886629]
----
-Label        : 1
-Position     : [900.722, 1297.2]
-Measurements : [1605.72, 253697, -0.164983, -0.436129]
----
-Label        : 1
-Position     : [1109.2, 1297.33]
-Measurements : [664.282, 220213, 1.26221, 0.033141]
----
-Label        : 1
-Position     : [948.646, 1297.61]
-Measurements : [1424.45, 228712, 0.262428, -0.431817]
----
-Label        : 1
-Position     : [1048.2, 1297.71]
-Measurements : [1635.77, 363263, 0.00734187, -1.0482]
----
-Label        : 1
-Position     : [1024.04, 1297.85]
-Measurements : [942.811, 231741, 0.602363, -1.05447]
----
-Label        : 1
-Position     : [902.728, 1297.86]
-Measurements : [1574.79, 288975, -0.16999, -0.733606]
----
-Label        : 1
-Position     : [980.837, 1298.09]
-Measurements : [1512.38, 290944, -0.262152, -1.09098]
----
-Label        : 1
-Position     : [254.458, 1298.11]
-Measurements : [1016.3, 150699, 1.47541, 1.93021]
----
-Label        : 1
-Position     : [241.451, 1298.22]
-Measurements : [1106.94, 92663.9, 0.389068, -0.54831]
----
-Label        : 1
-Position     : [943.898, 1298.38]
-Measurements : [1312.01, 404374, 0.671227, -0.272285]
----
-Label        : 1
-Position     : [249.409, 1298.41]
-Measurements : [1055.93, 119827, 1.20531, 1.66093]
----
-Label        : 1
-Position     : [876.193, 1298.43]
-Measurements : [1111.02, 375501, 0.251819, -1.26465]
----
-Label        : 1
-Position     : [1095.77, 1298.56]
-Measurements : [868.841, 522024, 1.18092, -0.100358]
----
-Label        : 1
-Position     : [977.318, 1299.25]
-Measurements : [1659.96, 167972, -0.402616, 0.00383845]
----
-Label        : 1
-Position     : [1279, 1299.54]
-Measurements : [1197.4, 312665, 0.201561, -1.01274]
----
-Label        : 1
-Position     : [1016.34, 1299.64]
-Measurements : [1289.29, 259736, -0.126745, -0.912542]
----
-Label        : 1
-Position     : [1107.46, 1299.67]
-Measurements : [973.579, 389147, 0.366617, -1.37815]
----
-Label        : 1
-Position     : [1017.76, 1299.76]
-Measurements : [1340.19, 226188, -0.159394, -0.784173]
----
-Label        : 1
-Position     : [975.329, 1299.96]
-Measurements : [1644.75, 117759, -0.0282118, -0.109477]
----
-Label        : 1
-Position     : [899.731, 1300.02]
-Measurements : [1759.81, 252505, 0.264865, -0.246757]
----
-Label        : 1
-Position     : [876.954, 1300.08]
-Measurements : [1400.31, 402736, -0.0257444, -0.864611]
----
-Label        : 1
-Position     : [1278.17, 1300.19]
-Measurements : [1151.09, 352506, 0.229328, -1.16205]
----
-Label        : 1
-Position     : [1303.35, 1300.31]
-Measurements : [1247.42, 364716, 0.749556, -0.406762]
----
-Label        : 1
-Position     : [1303.03, 1300.68]
-Measurements : [1247.42, 364716, 0.749556, -0.406762]
----
-Label        : 1
-Position     : [873.989, 1300.86]
-Measurements : [1393.78, 402490, -0.0772356, -0.855223]
----
-Label        : 1
-Position     : [872.429, 1301.3]
-Measurements : [1463.42, 392224, -0.185586, -0.916678]
----
-Label        : 1
-Position     : [1106.36, 1301.81]
-Measurements : [1176.02, 329423, -0.0908292, -1.18279]
----
-Label        : 1
-Position     : [1090.74, 1302.65]
-Measurements : [1602.41, 383050, -0.500256, -0.769327]
----
-Label        : 1
-Position     : [978.946, 1302.68]
-Measurements : [1461.16, 276998, -0.0681581, -0.901551]
----
-Label        : 1
-Position     : [1092.44, 1303.04]
-Measurements : [1698.65, 358681, -0.764296, -0.361357]
----
-Label        : 1
-Position     : [901.658, 1303.49]
-Measurements : [1625.82, 458929, -0.151398, -1.01566]
----
-Label        : 1
-Position     : [1287.62, 1303.63]
-Measurements : [1594.12, 405681, -0.0167183, -1.14954]
----
-Label        : 1
-Position     : [1021.17, 1303.73]
-Measurements : [1293.88, 184891, 0.35287, -0.836941]
----
-Label        : 1
-Position     : [1020.76, 1303.86]
-Measurements : [1359.71, 214893, 0.371214, -0.818615]
----
-Label        : 1
-Position     : [64.5144, 1303.97]
-Measurements : [1963.91, 250748, -0.758677, 0.0597732]
----
-Label        : 1
-Position     : [897.036, 1304.16]
-Measurements : [1770.24, 215962, 0.413377, 0.0899878]
----
-Label        : 1
-Position     : [1296.11, 1304.27]
-Measurements : [1932.16, 281025, -0.504242, -0.651714]
----
-Label        : 1
-Position     : [975.679, 1304.57]
-Measurements : [1385.1, 153055, -0.225421, -0.351467]
----
-Label        : 1
-Position     : [1016.08, 1304.8]
-Measurements : [1387.8, 255431, 0.100429, -0.956067]
----
-Label        : 1
-Position     : [876.146, 1304.98]
-Measurements : [1843.93, 315213, 0.0379573, -0.771951]
----
-Label        : 1
-Position     : [69.173, 1305.07]
-Measurements : [2000.06, 395692, -0.428954, -0.505336]
----
-Label        : 1
-Position     : [222.84, 1305.14]
-Measurements : [1075.16, 146844, 0.0414129, -0.744638]
----
-Label        : 1
-Position     : [1307.68, 1305.28]
-Measurements : [938.427, 121598, 0.816699, -0.150508]
----
-Label        : 1
-Position     : [1089.63, 1305.57]
-Measurements : [1678.54, 410824, -0.545004, -0.940127]
----
-Label        : 1
-Position     : [1048.54, 1305.7]
-Measurements : [1792.35, 686658, -0.0542441, -1.33292]
----
-Label        : 1
-Position     : [203.531, 1305.81]
-Measurements : [1279.7, 191392, 0.829117, 0.359532]
----
-Label        : 1
-Position     : [1046.56, 1305.91]
-Measurements : [1773.79, 639600, 0.0380616, -1.24927]
----
-Label        : 1
-Position     : [1287.42, 1306.03]
-Measurements : [1612.31, 414251, 0.00757947, -1.15186]
----
-Label        : 1
-Position     : [898.521, 1306.13]
-Measurements : [1711.11, 311933, -0.0518588, -0.231079]
----
-Label        : 1
-Position     : [1046.17, 1306.74]
-Measurements : [1753.3, 651650, 0.0661669, -1.23661]
----
-Label        : 1
-Position     : [1045.45, 1307.01]
-Measurements : [1700.51, 625055, 0.0962782, -1.19543]
----
-Label        : 1
-Position     : [942.911, 1307.03]
-Measurements : [1821.26, 457168, -0.167818, -1.26576]
----
-Label        : 1
-Position     : [891.46, 1307.07]
-Measurements : [1356.31, 180761, 0.0181037, -1.12644]
----
-Label        : 1
-Position     : [1115.72, 1307.13]
-Measurements : [877.471, 221693, 0.31113, -1.49547]
----
-Label        : 1
-Position     : [1287.2, 1307.32]
-Measurements : [1616.54, 417166, 0.00516001, -1.16522]
----
-Label        : 1
-Position     : [1297.44, 1307.32]
-Measurements : [1844.23, 459064, -0.448991, -1.13823]
----
-Label        : 1
-Position     : [1119.08, 1307.41]
-Measurements : [572.121, 122755, 1.76644, 1.57128]
----
-Label        : 1
-Position     : [968.716, 1307.44]
-Measurements : [1122.78, 243379, -0.082707, -1.55788]
----
-Label        : 1
-Position     : [71.144, 1307.87]
-Measurements : [1874.11, 478684, -0.0578206, -1.00147]
----
-Label        : 1
-Position     : [1019.94, 1307.95]
-Measurements : [1437.86, 287350, 0.344329, -1.03668]
----
-Label        : 1
-Position     : [893.499, 1308.17]
-Measurements : [1601.11, 224758, -0.0473255, -0.164566]
----
-Label        : 1
-Position     : [874.918, 1308.26]
-Measurements : [2001.01, 269378, -0.462906, -0.385251]
----
-Label        : 1
-Position     : [895.398, 1308.26]
-Measurements : [1702.74, 217549, -0.0173452, -0.193424]
----
-Label        : 1
-Position     : [63.464, 1308.38]
-Measurements : [2091.74, 177450, -0.605216, -0.167407]
----
-Label        : 1
-Position     : [52.9436, 1308.58]
-Measurements : [2396.48, 243525, -0.655844, -0.187843]
----
-Label        : 1
-Position     : [977.276, 1308.87]
-Measurements : [947.372, 199620, 0.656709, -1.18114]
----
-Label        : 1
-Position     : [204.776, 1308.9]
-Measurements : [1268.92, 287573, 0.5939, -0.569668]
----
-Label        : 1
-Position     : [205.458, 1309.39]
-Measurements : [1178.51, 355079, 0.601239, -0.811588]
----
-Label        : 1
-Position     : [1300.06, 1309.61]
-Measurements : [1547.19, 606793, 0.180677, -1.66337]
----
-Label        : 1
-Position     : [880.849, 1309.69]
-Measurements : [1446.04, 301160, 1.12097, 0.0218886]
----
-Label        : 1
-Position     : [899.513, 1309.78]
-Measurements : [1554.62, 436688, -0.0295516, -1.01249]
----
-Label        : 1
-Position     : [971.311, 1309.91]
-Measurements : [1020.75, 258859, 0.25137, -1.58033]
----
-Label        : 1
-Position     : [52.712, 1309.92]
-Measurements : [2489.45, 219399, -0.697646, -0.117475]
----
-Label        : 1
-Position     : [221.16, 1309.92]
-Measurements : [1231.95, 319143, 0.184855, -0.929334]
----
-Label        : 1
-Position     : [1092.03, 1310]
-Measurements : [1830.11, 182334, -0.727102, 0.373403]
----
-Label        : 1
-Position     : [944.084, 1310.26]
-Measurements : [1611.3, 361606, 0.112868, -0.98271]
----
-Label        : 1
-Position     : [37.1531, 1310.74]
-Measurements : [1818.07, 347091, -0.0132461, -1.35249]
----
-Label        : 1
-Position     : [944.37, 1311.09]
-Measurements : [1468.89, 326165, 0.26123, -0.97454]
----
-Label        : 1
-Position     : [871.231, 1311.12]
-Measurements : [1917.48, 296230, -0.537008, 0.0507425]
----
-Label        : 1
-Position     : [876.025, 1311.28]
-Measurements : [1741.13, 411771, 0.108182, -1.38274]
----
-Label        : 1
-Position     : [71.9168, 1311.3]
-Measurements : [1754.99, 444855, 0.343359, -0.740937]
----
-Label        : 1
-Position     : [970.319, 1311.52]
-Measurements : [834.653, 246444, 0.989766, -0.631592]
----
-Label        : 1
-Position     : [38.7906, 1311.54]
-Measurements : [1930.26, 331406, -0.187449, -1.26945]
----
-Label        : 1
-Position     : [939.61, 1311.54]
-Measurements : [1132.66, 349886, 0.744953, -0.275352]
----
-Label        : 1
-Position     : [1041.65, 1311.64]
-Measurements : [1359.79, 309708, 0.199126, -0.684238]
----
-Label        : 1
-Position     : [1013.51, 1311.84]
-Measurements : [1400.59, 554639, 0.06974, -1.41732]
----
-Label        : 1
-Position     : [1016.46, 1311.9]
-Measurements : [1577.26, 407891, -0.0390692, -1.13643]
----
-Label        : 1
-Position     : [1116.6, 1312.05]
-Measurements : [1258.37, 364290, 0.0737243, -0.960195]
----
-Label        : 1
-Position     : [1091.4, 1312.26]
-Measurements : [1807.8, 192872, -0.583877, -0.0512258]
----
-Label        : 1
-Position     : [219.056, 1312.27]
-Measurements : [1432.78, 404600, -0.143565, -1.06002]
----
-Label        : 1
-Position     : [870.611, 1312.33]
-Measurements : [1814.56, 390739, -0.452088, -0.499928]
----
-Label        : 1
-Position     : [893.759, 1312.35]
-Measurements : [1780.37, 197400, -0.0722917, 0.448701]
----
-Label        : 1
-Position     : [877.092, 1312.56]
-Measurements : [1562.26, 413992, 0.588014, -1.01357]
----
-Label        : 1
-Position     : [224.568, 1312.62]
-Measurements : [1348.31, 227152, 0.51743, -0.564394]
----
-Label        : 1
-Position     : [60.9692, 1312.65]
-Measurements : [2092.48, 268651, -0.18664, -0.315039]
----
-Label        : 1
-Position     : [1015.43, 1312.87]
-Measurements : [1481.93, 489326, 0.0581409, -1.31392]
----
-Label        : 1
-Position     : [47.6352, 1313.1]
-Measurements : [2422.46, 310526, -1.00005, 0.241473]
----
-Label        : 1
-Position     : [220.108, 1313.97]
-Measurements : [1521.66, 352754, -0.0880711, -0.960449]
----
-Label        : 1
-Position     : [52.4728, 1314.26]
-Measurements : [2257.54, 555768, -0.656299, -0.82843]
----
-Label        : 1
-Position     : [873.182, 1314.51]
-Measurements : [1635.64, 347752, -0.0966372, -1.25582]
----
-Label        : 1
-Position     : [1090.8, 1314.51]
-Measurements : [1759.43, 230099, -0.601054, -0.174954]
----
-Label        : 1
-Position     : [44.52, 1314.53]
-Measurements : [2294.61, 290795, -0.731813, -0.0650435]
----
-Label        : 1
-Position     : [875.18, 1314.79]
-Measurements : [1564.48, 364534, 0.178236, -1.3786]
----
-Label        : 1
-Position     : [941.682, 1314.81]
-Measurements : [981.848, 178299, 0.344346, -1.13886]
----
-Label        : 1
-Position     : [1089.79, 1314.94]
-Measurements : [1709.32, 233326, -0.579034, -0.312489]
----
-Label        : 1
-Position     : [37.352, 1315.04]
-Measurements : [1717.94, 356852, 0.294923, -1.27952]
----
-Label        : 1
-Position     : [220.136, 1315.04]
-Measurements : [1596.44, 320048, -0.0372491, -1.14698]
----
-Label        : 1
-Position     : [892.448, 1315.17]
-Measurements : [1693.19, 281184, -0.209503, -0.33508]
----
-Label        : 1
-Position     : [44.5377, 1315.27]
-Measurements : [2193.27, 419334, -0.689739, -0.504618]
----
-Label        : 1
-Position     : [890.586, 1315.32]
-Measurements : [1556, 302679, -0.00125402, -0.758852]
----
-Label        : 1
-Position     : [1036.08, 1315.38]
-Measurements : [1274.77, 330210, 0.294655, -1.02092]
----
-Label        : 1
-Position     : [870.822, 1315.63]
-Measurements : [1511.51, 445933, -0.225569, -1.3706]
----
-Label        : 1
-Position     : [946.35, 1316]
-Measurements : [914.94, 139810, 0.637199, -0.743085]
----
-Label        : 1
-Position     : [1090.58, 1316.25]
-Measurements : [1717.1, 188884, -0.713842, 0.0164106]
----
-Label        : 1
-Position     : [1042.99, 1316.36]
-Measurements : [1589.96, 257704, -0.350439, -0.670034]
----
-Label        : 1
-Position     : [215.102, 1317.07]
-Measurements : [1697.26, 456729, -0.453818, -0.429782]
----
-Label        : 1
-Position     : [1110.03, 1317.51]
-Measurements : [1078.43, 231753, 0.526966, -0.899589]
----
-Label        : 1
-Position     : [214.016, 1317.56]
-Measurements : [1622, 506725, -0.301859, -0.772521]
----
-Label        : 1
-Position     : [891.302, 1317.68]
-Measurements : [1559.72, 365709, 0.0457323, -0.988123]
----
-Label        : 1
-Position     : [1086.98, 1317.8]
-Measurements : [1552.81, 266504, -0.531659, -0.428131]
----
-Label        : 1
-Position     : [887.466, 1318.56]
-Measurements : [1208.13, 216550, 0.710414, -0.443342]
----
-Label        : 1
-Position     : [1039.6, 1318.6]
-Measurements : [1651.32, 248948, -0.404652, -0.645923]
----
-Label        : 1
-Position     : [941.802, 1318.71]
-Measurements : [913.476, 193404, 0.511469, -1.267]
----
-Label        : 1
-Position     : [941.932, 1319.08]
-Measurements : [924.102, 220751, 0.724954, -0.684596]
----
-Label        : 1
-Position     : [217.576, 1319.65]
-Measurements : [1823.71, 417133, 0.127804, -0.86612]
----
-Label        : 1
-Position     : [869.549, 1319.83]
-Measurements : [1080.1, 369406, 0.874968, -0.571578]
----
-Label        : 1
-Position     : [1087.52, 1320.24]
-Measurements : [1698.86, 201962, -0.15985, -0.337135]
----
-Label        : 1
-Position     : [1043.74, 1320.38]
-Measurements : [1497.44, 401010, -0.21268, -1.3805]
----
-Label        : 1
-Position     : [1114.14, 1321.06]
-Measurements : [1350.95, 181017, -0.14243, -1.10173]
----
-Label        : 1
-Position     : [212.968, 1321.7]
-Measurements : [1776.1, 616859, -0.309671, -0.945149]
----
-Label        : 1
-Position     : [1085.11, 1322.19]
-Measurements : [1645.56, 314442, -0.450896, -0.564527]
----
-Label        : 1
-Position     : [937.586, 1322.59]
-Measurements : [1119.32, 256289, 0.264803, -1.19099]
----
-Label        : 1
-Position     : [220.624, 1322.68]
-Measurements : [1333.74, 331630, 1.023, -0.422394]
----
-Label        : 1
-Position     : [1113.23, 1322.78]
-Measurements : [1356.74, 187156, -0.277567, -1.1924]
----
-Label        : 1
-Position     : [1084.08, 1323.55]
-Measurements : [1543.34, 396985, -0.24635, -1.02168]
----
-Label        : 1
-Position     : [1034.64, 1323.62]
-Measurements : [1247.68, 232300, 0.158599, -0.886861]
----
-Label        : 1
-Position     : [1040.78, 1324.01]
-Measurements : [1646.53, 275005, -0.254766, -0.755246]
----
-Label        : 1
-Position     : [962.501, 1324.12]
-Measurements : [1188.32, 418831, 0.295935, -0.90213]
----
-Label        : 1
-Position     : [885.503, 1324.22]
-Measurements : [1339.04, 335668, 0.646289, -1.07745]
----
-Label        : 1
-Position     : [1036.66, 1324.26]
-Measurements : [1521.52, 249289, 0.155506, -0.6279]
----
-Label        : 1
-Position     : [1038.78, 1324.34]
-Measurements : [1648.71, 228938, 0.0062626, -0.786374]
----
-Label        : 1
-Position     : [1085.06, 1324.34]
-Measurements : [1577.87, 336021, -0.145536, -0.915619]
----
-Label        : 1
-Position     : [1108.77, 1324.37]
-Measurements : [1188.77, 195140, 0.0129395, -1.20501]
----
-Label        : 1
-Position     : [212.055, 1324.41]
-Measurements : [1869.87, 502797, -0.228788, -0.763631]
----
-Label        : 1
-Position     : [1109.74, 1324.93]
-Measurements : [1241.67, 204417, -0.089655, -1.11295]
----
-Label        : 1
-Position     : [959.621, 1325.05]
-Measurements : [1160.3, 227966, -0.113435, -1.1584]
----
-Label        : 1
-Position     : [1109.23, 1325.16]
-Measurements : [1253, 197803, -0.122267, -1.04868]
----
-Label        : 1
-Position     : [212.572, 1325.19]
-Measurements : [1867.71, 479306, -0.119474, -0.837442]
----
-Label        : 1
-Position     : [1082.65, 1325.2]
-Measurements : [1355.99, 379338, 0.252832, -0.797388]
----
-Label        : 1
-Position     : [962.572, 1325.46]
-Measurements : [1301.02, 382402, 0.0394973, -0.819866]
----
-Label        : 1
-Position     : [888.025, 1326.28]
-Measurements : [1691.27, 420564, 0.235849, -0.969007]
----
-Label        : 1
-Position     : [1041.87, 1326.64]
-Measurements : [1583.87, 375788, -0.235487, -1.00124]
----
-Label        : 1
-Position     : [1005.87, 1326.64]
-Measurements : [767.13, 196445, 0.773894, -0.989564]
----
-Label        : 1
-Position     : [890.448, 1327.09]
-Measurements : [1776.79, 420014, 0.15671, -1.06311]
----
-Label        : 1
-Position     : [1010.11, 1328.02]
-Measurements : [1034.87, 208061, -0.161357, -1.38112]
----
-Label        : 1
-Position     : [962.021, 1328.41]
-Measurements : [1687.99, 234360, 0.0141727, -0.411767]
----
-Label        : 1
-Position     : [1036.73, 1328.43]
-Measurements : [1750.04, 259453, 0.0946967, -0.883668]
----
-Label        : 1
-Position     : [203.632, 1328.66]
-Measurements : [1066.95, 434547, 0.302328, -1.57838]
----
-Label        : 1
-Position     : [1005.66, 1328.82]
-Measurements : [927.061, 251058, 0.274468, -1.52142]
----
-Label        : 1
-Position     : [1083.83, 1328.84]
-Measurements : [1453.46, 235202, 0.428073, -0.185369]
----
-Label        : 1
-Position     : [1083.83, 1329.25]
-Measurements : [1472.37, 186843, 0.336424, -0.325738]
----
-Label        : 1
-Position     : [202.951, 1329.32]
-Measurements : [1031.45, 417980, 0.38989, -1.47656]
----
-Label        : 1
-Position     : [210.92, 1329.38]
-Measurements : [1682.02, 403155, 0.0554528, -0.913074]
----
-Label        : 1
-Position     : [205.732, 1329.62]
-Measurements : [1392.06, 421998, -0.342022, -1.27645]
----
-Label        : 1
-Position     : [936.019, 1329.95]
-Measurements : [1037.7, 216098, 0.598226, -0.73039]
----
-Label        : 1
-Position     : [200.546, 1330.55]
-Measurements : [916.041, 389195, 0.73859, -1.00794]
----
-Label        : 1
-Position     : [930.207, 1331.09]
-Measurements : [833.478, 137570, 0.680452, -0.65201]
----
-Label        : 1
-Position     : [961.343, 1331.6]
-Measurements : [1615.36, 216538, 0.267333, -0.630965]
----
-Label        : 1
-Position     : [208.36, 1331.94]
-Measurements : [1533.87, 383342, 0.0817045, -0.981815]
----
-Label        : 1
-Position     : [211.104, 1332]
-Measurements : [1434.25, 382381, 0.528883, -0.908814]
----
-Label        : 1
-Position     : [1107.18, 1332.12]
-Measurements : [1488.82, 182643, -0.128261, -0.592243]
----
-Label        : 1
-Position     : [1082.76, 1332.38]
-Measurements : [1311.58, 166648, -0.0332113, 0.0124142]
----
-Label        : 1
-Position     : [1086.17, 1332.4]
-Measurements : [1306.43, 134188, 0.327458, -0.299825]
----
-Label        : 1
-Position     : [935.129, 1332.42]
-Measurements : [963.229, 116310, 0.44043, -0.954927]
----
-Label        : 1
-Position     : [1088.2, 1332.79]
-Measurements : [1232.9, 107412, 0.599771, 0.0705997]
----
-Label        : 1
-Position     : [1031.61, 1332.82]
-Measurements : [1411.46, 394940, 0.349675, -0.597819]
----
-Label        : 1
-Position     : [204.776, 1332.96]
-Measurements : [1415.48, 312966, -0.393476, -1.11989]
----
-Label        : 1
-Position     : [1081.38, 1333.35]
-Measurements : [1218.72, 202133, -0.297212, -0.809967]
----
-Label        : 1
-Position     : [1086.57, 1333.55]
-Measurements : [1252.11, 148525, 0.174646, -0.431307]
----
-Label        : 1
-Position     : [1010.11, 1333.76]
-Measurements : [1338.37, 142730, -0.37403, -0.740992]
----
-Label        : 1
-Position     : [1035.91, 1333.76]
-Measurements : [1895.88, 379316, 0.0541412, -0.369077]
----
-Label        : 1
-Position     : [1011.92, 1333.77]
-Measurements : [1294.03, 144761, -0.183736, -0.896126]
----
-Label        : 1
-Position     : [1007.17, 1334.09]
-Measurements : [1414.44, 174034, -0.602613, -0.24203]
----
-Label        : 1
-Position     : [1014.34, 1334.09]
-Measurements : [1101.03, 96307.8, 0.189611, -0.766939]
----
-Label        : 1
-Position     : [1082.31, 1334.24]
-Measurements : [1155.18, 199033, -0.324596, -1.3479]
----
-Label        : 1
-Position     : [198.004, 1335.02]
-Measurements : [1176.41, 398729, 0.00739016, -1.51755]
----
-Label        : 1
-Position     : [205.008, 1335.25]
-Measurements : [1347.55, 267229, 0.160481, -1.42401]
----
-Label        : 1
-Position     : [964.443, 1335.33]
-Measurements : [1415.62, 326990, 0.053222, -0.967151]
----
-Label        : 1
-Position     : [954.461, 1335.52]
-Measurements : [1050.63, 98191.3, 0.288471, -0.468764]
----
-Label        : 1
-Position     : [200.68, 1335.52]
-Measurements : [1305.33, 339941, -0.236251, -1.28093]
----
-Label        : 1
-Position     : [1080.43, 1335.71]
-Measurements : [1075.66, 243875, -0.121086, -1.62054]
----
-Label        : 1
-Position     : [202.606, 1335.85]
-Measurements : [1387.93, 284884, -0.262247, -1.21935]
----
-Label        : 1
-Position     : [1010.68, 1336.06]
-Measurements : [1327.47, 167515, -0.237885, -0.913615]
----
-Label        : 1
-Position     : [1104.71, 1336.29]
-Measurements : [1392.99, 213359, -0.331121, -0.548384]
----
-Label        : 1
-Position     : [1037.82, 1336.4]
-Measurements : [1842.17, 531701, -0.167324, -0.914085]
----
-Label        : 1
-Position     : [1111.1, 1336.5]
-Measurements : [1260.47, 387608, 0.214244, -1.4822]
----
-Label        : 1
-Position     : [934.956, 1336.65]
-Measurements : [1130.51, 135065, 0.379975, -0.239017]
----
-Label        : 1
-Position     : [201.317, 1337.28]
-Measurements : [1403.75, 285657, -0.101102, -1.19929]
----
-Label        : 1
-Position     : [1106.36, 1338.26]
-Measurements : [1493.63, 187347, -0.197667, -0.594758]
----
-Label        : 1
-Position     : [198.12, 1338.59]
-Measurements : [1371.62, 364326, -0.196164, -1.18324]
----
-Label        : 1
-Position     : [1007.24, 1338.67]
-Measurements : [1467.74, 159950, -0.324834, -0.785349]
----
-Label        : 1
-Position     : [958.066, 1338.98]
-Measurements : [1468.65, 156102, 0.261484, -0.727416]
----
-Label        : 1
-Position     : [1005.61, 1339.2]
-Measurements : [1522.85, 165111, -0.490292, -0.491183]
----
-Label        : 1
-Position     : [934.31, 1339.39]
-Measurements : [1134.29, 167900, 0.335453, -0.820453]
----
-Label        : 1
-Position     : [1027.08, 1339.54]
-Measurements : [1254.46, 204678, 0.49336, -0.469979]
----
-Label        : 1
-Position     : [961.115, 1339.65]
-Measurements : [1454.56, 179069, -0.115474, -0.587089]
----
-Label        : 1
-Position     : [1030.59, 1339.9]
-Measurements : [1500.28, 282772, 0.373387, -0.581496]
----
-Label        : 1
-Position     : [1076.42, 1340.93]
-Measurements : [1086.82, 424972, 0.495136, -1.06757]
----
-Label        : 1
-Position     : [1101.75, 1341.08]
-Measurements : [1186.92, 234980, 0.0104893, -1.29114]
----
-Label        : 1
-Position     : [1006.9, 1341.49]
-Measurements : [1531.96, 184549, -0.439923, -0.819245]
----
-Label        : 1
-Position     : [1105.19, 1341.53]
-Measurements : [1417.8, 206917, -0.333818, -0.868903]
----
-Label        : 1
-Position     : [196.908, 1341.56]
-Measurements : [1391.56, 379297, -0.315684, -1.1364]
----
-Label        : 1
-Position     : [928.389, 1341.71]
-Measurements : [966.719, 160637, 0.114591, -1.08712]
----
-Label        : 1
-Position     : [931.876, 1341.75]
-Measurements : [1082.87, 152359, 0.0190296, -0.952794]
----
-Label        : 1
-Position     : [956.528, 1341.84]
-Measurements : [1475.74, 214437, -0.0808765, -0.790369]
----
-Label        : 1
-Position     : [958.066, 1341.84]
-Measurements : [1554.55, 200191, -0.203989, -0.838431]
----
-Label        : 1
-Position     : [1104.72, 1342.77]
-Measurements : [1312.89, 258570, -0.215759, -1.22044]
----
-Label        : 1
-Position     : [1003.96, 1343.18]
-Measurements : [1711.76, 219450, -0.653427, 0.101185]
----
-Label        : 1
-Position     : [195.56, 1343.2]
-Measurements : [1430.41, 420351, -0.175269, -1.10667]
----
-Label        : 1
-Position     : [199.066, 1343.26]
-Measurements : [1308.5, 307133, 0.410709, -1.15532]
----
-Label        : 1
-Position     : [1077.28, 1343.59]
-Measurements : [1413.36, 410465, -0.18025, -1.10319]
----
-Label        : 1
-Position     : [1027.78, 1343.75]
-Measurements : [1474.19, 381456, 0.320688, -0.865835]
----
-Label        : 1
-Position     : [931.852, 1344.3]
-Measurements : [1180.13, 86288, 0.300817, -0.455208]
----
-Label        : 1
-Position     : [1029.77, 1344.41]
-Measurements : [1672.23, 368575, 0.10691, -0.97739]
----
-Label        : 1
-Position     : [187.798, 1344.84]
-Measurements : [766.17, 380279, 1.33126, 0.25942]
----
-Label        : 1
-Position     : [1005.35, 1346.01]
-Measurements : [1753.23, 319899, -0.373227, -0.853522]
----
-Label        : 1
-Position     : [1103.55, 1346.15]
-Measurements : [927.715, 322546, 0.700054, -1.08091]
----
-Label        : 1
-Position     : [1030.78, 1346.28]
-Measurements : [1642.54, 377454, 0.153002, -0.963774]
----
-Label        : 1
-Position     : [955.199, 1346.35]
-Measurements : [1677.91, 209809, -0.144251, -0.655183]
----
-Label        : 1
-Position     : [193.757, 1346.38]
-Measurements : [1524.22, 433222, -0.289101, -1.08446]
----
-Label        : 1
-Position     : [194.45, 1346.41]
-Measurements : [1513.46, 423640, -0.172241, -1.20138]
----
-Label        : 1
-Position     : [1079.75, 1346.63]
-Measurements : [1599, 250273, -0.337679, -0.25206]
----
-Label        : 1
-Position     : [962.652, 1346.66]
-Measurements : [1301.35, 487098, 0.25086, -1.44225]
----
-Label        : 1
-Position     : [1026.74, 1346.72]
-Measurements : [1430.11, 284626, 0.481911, -0.219725]
----
-Label        : 1
-Position     : [191.903, 1346.89]
-Measurements : [1414.96, 511919, -0.193563, -1.28437]
----
-Label        : 1
-Position     : [1103.97, 1347.07]
-Measurements : [837.351, 314036, 1.04937, -0.48434]
----
-Label        : 1
-Position     : [953.134, 1347.5]
-Measurements : [1562.99, 234177, -0.184157, -0.84746]
----
-Label        : 1
-Position     : [951.017, 1347.61]
-Measurements : [1334.72, 270887, 0.12313, -1.07814]
----
-Label        : 1
-Position     : [930.032, 1347.76]
-Measurements : [1179.15, 62709, 0.787222, 0.379866]
----
-Label        : 1
-Position     : [1075.06, 1347.83]
-Measurements : [1500.15, 178217, -0.185162, -0.0376738]
----
-Label        : 1
-Position     : [1076.46, 1348.91]
-Measurements : [1552.56, 190178, 0.0781478, -0.0661939]
----
-Label        : 1
-Position     : [998.434, 1349.05]
-Measurements : [1597.79, 478159, -0.318914, -1.16057]
----
-Label        : 1
-Position     : [190.764, 1349.28]
-Measurements : [1468.86, 358433, -0.13488, -0.7986]
----
-Label        : 1
-Position     : [1002.32, 1349.32]
-Measurements : [1964.24, 214191, -0.630874, -0.318155]
----
-Label        : 1
-Position     : [195.151, 1349.72]
-Measurements : [1386.04, 372566, 0.406746, -1.24631]
----
-Label        : 1
-Position     : [1007.11, 1350.31]
-Measurements : [1655.7, 426894, 0.0381281, -1.40369]
----
-Label        : 1
-Position     : [954.79, 1351.26]
-Measurements : [1398.96, 381571, -0.0266855, -1.26696]
----
-Label        : 1
-Position     : [1026.9, 1352.19]
-Measurements : [1502.91, 233766, 0.246975, -0.0219934]
----
-Label        : 1
-Position     : [1022.5, 1352.22]
-Measurements : [1294.98, 184964, 0.0286022, -0.521713]
----
-Label        : 1
-Position     : [1003.58, 1352.48]
-Measurements : [1881.56, 318137, -0.2688, -1.22873]
----
-Label        : 1
-Position     : [188.39, 1352.6]
-Measurements : [1393.1, 310796, 0.168832, -0.630014]
----
-Label        : 1
-Position     : [1000.69, 1352.6]
-Measurements : [1815.09, 350378, -0.300662, -0.902512]
----
-Label        : 1
-Position     : [959.379, 1353]
-Measurements : [1067.63, 408215, 0.761021, -0.893085]
----
-Label        : 1
-Position     : [1072.81, 1353.02]
-Measurements : [1366.2, 189996, -0.764581, -0.391958]
----
-Label        : 1
-Position     : [956.435, 1353.16]
-Measurements : [1196.01, 397855, 0.382504, -1.24667]
----
-Label        : 1
-Position     : [1185.12, 1353.31]
-Measurements : [753.949, 186336, 0.593775, -1.14592]
----
-Label        : 1
-Position     : [1073.18, 1353.42]
-Measurements : [1411.63, 158037, -0.850258, -0.0751179]
----
-Label        : 1
-Position     : [1024.81, 1353.75]
-Measurements : [1455.4, 176964, -0.0422201, -0.470655]
----
-Label        : 1
-Position     : [1149.31, 1354.14]
-Measurements : [821.773, 187973, 0.612616, -0.710248]
----
-Label        : 1
-Position     : [1184.19, 1355.01]
-Measurements : [953.618, 234215, 0.290703, -0.954065]
----
-Label        : 1
-Position     : [182.124, 1355.23]
-Measurements : [842.557, 225318, 0.535452, -1.19607]
----
-Label        : 1
-Position     : [1184.71, 1355.23]
-Measurements : [953.618, 234215, 0.290703, -0.954065]
----
-Label        : 1
-Position     : [1024.92, 1355.93]
-Measurements : [1467.53, 167820, 0.0242755, -0.542963]
----
-Label        : 1
-Position     : [1150.25, 1356.21]
-Measurements : [977.626, 172943, 0.101855, -0.931218]
----
-Label        : 1
-Position     : [184.21, 1356.24]
-Measurements : [968.651, 188089, 0.249335, -0.922126]
----
-Label        : 1
-Position     : [1151.83, 1356.29]
-Measurements : [973.282, 180168, 0.0667811, -0.998109]
----
-Label        : 1
-Position     : [1024.03, 1357.11]
-Measurements : [1484.26, 172589, 0.155084, -0.827578]
----
-Label        : 1
-Position     : [1100.34, 1357.4]
-Measurements : [1106.35, 299674, -0.0810147, -1.52512]
----
-Label        : 1
-Position     : [1097.35, 1357.93]
-Measurements : [1131.1, 260119, -0.198241, -1.29917]
----
-Label        : 1
-Position     : [1075.61, 1357.95]
-Measurements : [1394.87, 236344, -0.254585, -1.133]
----
-Label        : 1
-Position     : [1076.57, 1358.09]
-Measurements : [1297.11, 289487, 0.013206, -1.44407]
----
-Label        : 1
-Position     : [1025.8, 1358.2]
-Measurements : [1494.99, 181646, 0.10445, -0.839606]
----
-Label        : 1
-Position     : [1075.55, 1358.32]
-Measurements : [1331.63, 282864, -0.132641, -1.38113]
----
-Label        : 1
-Position     : [1100.97, 1358.59]
-Measurements : [1208.42, 279292, -0.244758, -1.35779]
----
-Label        : 1
-Position     : [1001.79, 1358.93]
-Measurements : [1690.19, 297700, 0.117575, -0.952567]
----
-Label        : 1
-Position     : [1022.94, 1358.99]
-Measurements : [1385.21, 178032, 0.304549, -0.562026]
----
-Label        : 1
-Position     : [993.733, 1359.47]
-Measurements : [971.489, 414647, 0.842298, -0.664308]
----
-Label        : 1
-Position     : [999.866, 1359.56]
-Measurements : [1631.14, 380547, -0.196531, -0.879983]
----
-Label        : 1
-Position     : [1070.94, 1359.89]
-Measurements : [1100.93, 380884, 0.278185, -1.50769]
----
-Label        : 1
-Position     : [1153.2, 1360.6]
-Measurements : [1205.67, 164683, -0.0187007, -0.817942]
----
-Label        : 1
-Position     : [998.862, 1360.93]
-Measurements : [1607.86, 416249, -0.247642, -0.935206]
----
-Label        : 1
-Position     : [1153.37, 1361.04]
-Measurements : [1277.85, 165326, -0.117376, -0.889717]
----
-Label        : 1
-Position     : [1072.78, 1361.2]
-Measurements : [1088.75, 337198, 0.428055, -1.32598]
----
-Label        : 1
-Position     : [1184.46, 1361.65]
-Measurements : [1803.66, 424299, 0.249264, -0.85302]
----
-Label        : 1
-Position     : [1099.1, 1361.77]
-Measurements : [1505.52, 176025, -0.338427, -0.529592]
----
-Label        : 1
-Position     : [1025.24, 1362.2]
-Measurements : [1418.88, 222432, 0.268715, -0.958194]
----
-Label        : 1
-Position     : [1095.71, 1362.43]
-Measurements : [1481.55, 200900, -0.406638, -0.424187]
----
-Label        : 1
-Position     : [1021.98, 1362.8]
-Measurements : [1327.14, 210877, 0.462766, -0.537684]
----
-Label        : 1
-Position     : [1181.32, 1364.02]
-Measurements : [1878.69, 345188, 0.0477768, -0.566984]
----
-Label        : 1
-Position     : [996.59, 1364.07]
-Measurements : [1720.79, 341476, -0.68393, -0.265323]
----
-Label        : 1
-Position     : [1016.23, 1364.75]
-Measurements : [1096.47, 176590, 0.787439, 0.0655558]
----
-Label        : 1
-Position     : [1302.98, 1364.84]
-Measurements : [867.585, 284755, 1.08671, 0.299825]
----
-Label        : 1
-Position     : [184.644, 1365.19]
-Measurements : [936.212, 120838, 1.53389, 1.92177]
----
-Label        : 1
-Position     : [180.114, 1365.25]
-Measurements : [1142.42, 296578, 0.766775, -0.0976057]
----
-Label        : 1
-Position     : [1149.78, 1365.25]
-Measurements : [1571.08, 192387, -0.0894727, -0.575235]
----
-Label        : 1
-Position     : [177.998, 1365.36]
-Measurements : [1160.89, 370657, 0.354042, -0.803761]
----
-Label        : 1
-Position     : [1017.56, 1365.38]
-Measurements : [1225.36, 226767, 0.314942, -0.853632]
----
-Label        : 1
-Position     : [1307.82, 1365.39]
-Measurements : [822.402, 232789, 1.56415, 1.74868]
----
-Label        : 1
-Position     : [1073.67, 1365.49]
-Measurements : [946.061, 260971, 0.993882, -0.29622]
----
-Label        : 1
-Position     : [1092.71, 1365.8]
-Measurements : [1536.53, 293731, 0.0273829, -0.65317]
----
-Label        : 1
-Position     : [1088.52, 1365.93]
-Measurements : [1219.66, 266961, 0.722213, -0.0842241]
----
-Label        : 1
-Position     : [1020.76, 1366.48]
-Measurements : [1430.08, 214155, -0.117515, -0.672]
----
-Label        : 1
-Position     : [1174, 1366.72]
-Measurements : [1375.9, 345637, 0.113011, -1.06138]
----
-Label        : 1
-Position     : [1067.24, 1366.73]
-Measurements : [965.522, 260123, 0.343479, -1.47959]
----
-Label        : 1
-Position     : [1183.54, 1366.8]
-Measurements : [1910.46, 492821, -0.409365, -0.855105]
----
-Label        : 1
-Position     : [1088.67, 1367.19]
-Measurements : [1173.67, 298480, 0.720606, -0.295204]
----
-Label        : 1
-Position     : [1153.35, 1367.19]
-Measurements : [1595.63, 419111, -0.0411243, -1.09396]
----
-Label        : 1
-Position     : [1092.03, 1367.3]
-Measurements : [1477.61, 355314, 0.013439, -0.95761]
----
-Label        : 1
-Position     : [1176.72, 1367.76]
-Measurements : [1700, 335349, -0.390805, -0.730935]
----
-Label        : 1
-Position     : [1298.04, 1368.25]
-Measurements : [682.765, 268536, 1.87527, 2.5242]
----
-Label        : 1
-Position     : [998.743, 1368.45]
-Measurements : [1856.1, 239627, -0.54793, -0.789999]
----
-Label        : 1
-Position     : [177.657, 1368.53]
-Measurements : [1355.55, 278715, 0.19252, -0.600856]
----
-Label        : 1
-Position     : [995.77, 1368.53]
-Measurements : [1867.98, 236956, -1.04351, 0.794239]
----
-Label        : 1
-Position     : [1069.5, 1368.53]
-Measurements : [1059.71, 255647, 0.160926, -1.54322]
----
-Label        : 1
-Position     : [992.358, 1368.77]
-Measurements : [1571.75, 418141, -0.5873, -0.947838]
----
-Label        : 1
-Position     : [177.235, 1369.09]
-Measurements : [1375.14, 251553, 0.306837, -0.487]
----
-Label        : 1
-Position     : [179.391, 1369.16]
-Measurements : [1292.91, 245143, 0.803953, -0.316779]
----
-Label        : 1
-Position     : [179.593, 1369.62]
-Measurements : [1292.91, 245143, 0.803953, -0.316779]
----
-Label        : 1
-Position     : [1069.21, 1369.67]
-Measurements : [1150.15, 265769, 0.109308, -1.24753]
----
-Label        : 1
-Position     : [1178.87, 1369.76]
-Measurements : [1935.54, 314627, -0.416534, -0.717754]
----
-Label        : 1
-Position     : [155.11, 1370.43]
-Measurements : [898.497, 83665.5, 0.809224, 1.13075]
----
-Label        : 1
-Position     : [173.97, 1370.58]
-Measurements : [1146.17, 388341, 0.421906, -0.915549]
----
-Label        : 1
-Position     : [1148.96, 1370.58]
-Measurements : [1864.5, 251316, -0.37612, 0.161728]
----
-Label        : 1
-Position     : [1062.24, 1371.33]
-Measurements : [1182.58, 326935, -0.0871565, -1.26764]
----
-Label        : 1
-Position     : [1018.3, 1371.4]
-Measurements : [1652.24, 124859, -0.716329, 0.307692]
----
-Label        : 1
-Position     : [1022.01, 1371.63]
-Measurements : [1560.68, 225751, -0.707548, -0.415069]
----
-Label        : 1
-Position     : [993.255, 1371.68]
-Measurements : [1887.18, 233264, -0.873702, 0.621119]
----
-Label        : 1
-Position     : [1092.45, 1372.39]
-Measurements : [1397.61, 433966, 0.199129, -1.22151]
----
-Label        : 1
-Position     : [998.701, 1372.75]
-Measurements : [1694.68, 326766, -0.139148, -1.31076]
----
-Label        : 1
-Position     : [178.51, 1372.92]
-Measurements : [1251.96, 241711, 1.0048, 0.00686376]
----
-Label        : 1
-Position     : [1066.63, 1373.04]
-Measurements : [1534.44, 199772, -0.348793, 0.0111119]
----
-Label        : 1
-Position     : [995.662, 1373.35]
-Measurements : [1861.08, 269298, -0.733931, -0.33968]
----
-Label        : 1
-Position     : [1147.15, 1373.51]
-Measurements : [1943.46, 207606, -0.554311, 0.345599]
----
-Label        : 1
-Position     : [1016.76, 1373.71]
-Measurements : [1636.35, 174565, -0.847295, 0.210384]
----
-Label        : 1
-Position     : [154.31, 1374.26]
-Measurements : [851.446, 102360, 0.760562, 0.493657]
----
-Label        : 1
-Position     : [993.722, 1374.26]
-Measurements : [1884.84, 266969, -0.844671, 0.18332]
----
-Label        : 1
-Position     : [1017.94, 1374.4]
-Measurements : [1738.95, 127092, -0.490263, 0.0571056]
----
-Label        : 1
-Position     : [1088.77, 1374.71]
-Measurements : [1251.6, 331486, 0.559561, -0.490234]
----
-Label        : 1
-Position     : [991.037, 1374.89]
-Measurements : [1820.27, 310665, -0.883694, 0.196792]
----
-Label        : 1
-Position     : [1176, 1375.49]
-Measurements : [2045.03, 230201, -0.497997, 0.0569878]
----
-Label        : 1
-Position     : [1147.73, 1375.9]
-Measurements : [1950.53, 206992, -0.553765, 0.299728]
----
-Label        : 1
-Position     : [161.571, 1375.94]
-Measurements : [766.396, 324712, 1.67905, 2.02554]
----
-Label        : 1
-Position     : [1151.55, 1376.26]
-Measurements : [1900.42, 361863, -0.530857, -0.904881]
----
-Label        : 1
-Position     : [1089.98, 1376.31]
-Measurements : [1311.23, 275586, 0.425736, -0.400587]
----
-Label        : 1
-Position     : [1144.68, 1376.63]
-Measurements : [1704.26, 264833, -0.418202, -0.472335]
----
-Label        : 1
-Position     : [1015.84, 1376.72]
-Measurements : [1532.33, 208836, -0.348124, -0.61448]
----
-Label        : 1
-Position     : [1013.24, 1377.12]
-Measurements : [1358.12, 195154, -0.199751, -0.913695]
----
-Label        : 1
-Position     : [1178.47, 1377.19]
-Measurements : [1959.73, 449950, -0.621468, -0.687523]
----
-Label        : 1
-Position     : [1141.49, 1377.97]
-Measurements : [1333.61, 328045, -0.20812, -1.1193]
----
-Label        : 1
-Position     : [153.198, 1378.61]
-Measurements : [656.227, 64945.2, 0.759967, -0.903768]
----
-Label        : 1
-Position     : [991.265, 1378.77]
-Measurements : [1794.4, 276768, -0.338358, -0.845714]
----
-Label        : 1
-Position     : [1062.94, 1378.77]
-Measurements : [1398.69, 432334, 0.0389976, -1.26124]
----
-Label        : 1
-Position     : [991.969, 1379.05]
-Measurements : [1705.55, 317140, -0.145849, -1.05466]
----
-Label        : 1
-Position     : [1179.28, 1379.54]
-Measurements : [1734.93, 608911, -0.139491, -1.38664]
----
-Label        : 1
-Position     : [989.916, 1379.6]
-Measurements : [1698, 305147, -0.386229, -0.827094]
----
-Label        : 1
-Position     : [1173.95, 1380]
-Measurements : [1726.45, 375725, -0.438284, -0.500703]
----
-Label        : 1
-Position     : [1090.42, 1380.25]
-Measurements : [1371.35, 265996, 0.378799, -0.57978]
----
-Label        : 1
-Position     : [162.092, 1380.41]
-Measurements : [1132.17, 434529, 0.627327, -0.659126]
----
-Label        : 1
-Position     : [166.188, 1380.82]
-Measurements : [1172.68, 358293, 0.883996, -0.207957]
----
-Label        : 1
-Position     : [170.85, 1380.84]
-Measurements : [964.773, 282651, 1.98103, 2.99222]
----
-Label        : 1
-Position     : [1170.51, 1381.17]
-Measurements : [1235.98, 464100, 0.0746034, -1.71099]
----
-Label        : 1
-Position     : [1087.11, 1381.23]
-Measurements : [1236.34, 215612, 0.658555, 0.216557]
----
-Label        : 1
-Position     : [159.308, 1381.58]
-Measurements : [877.895, 292959, 0.844727, -0.480249]
----
-Label        : 1
-Position     : [1063.62, 1381.62]
-Measurements : [1205.71, 492456, 0.448215, -1.263]
----
-Label        : 1
-Position     : [1144.86, 1381.64]
-Measurements : [1889.67, 218673, -1.00638, 0.631386]
----
-Label        : 1
-Position     : [1063.67, 1381.69]
-Measurements : [1205.71, 492456, 0.448215, -1.263]
----
-Label        : 1
-Position     : [1173.72, 1382.07]
-Measurements : [1350.14, 457072, -0.0540226, -1.6479]
----
-Label        : 1
-Position     : [993.497, 1382.12]
-Measurements : [1363.32, 271723, 0.570036, -0.815521]
----
-Label        : 1
-Position     : [164.967, 1382.53]
-Measurements : [1255.64, 327034, 0.712949, -0.294942]
----
-Label        : 1
-Position     : [1013.38, 1383.28]
-Measurements : [1136.54, 306071, 0.279356, -1.30131]
----
-Label        : 1
-Position     : [988.807, 1384.1]
-Measurements : [1391.93, 242040, 0.735717, -0.738857]
----
-Label        : 1
-Position     : [158.379, 1384.11]
-Measurements : [809.824, 244179, 0.914108, -0.243215]
----
-Label        : 1
-Position     : [1138.24, 1384.59]
-Measurements : [1401.05, 546060, -0.0265815, -1.46583]
----
-Label        : 1
-Position     : [159.225, 1384.91]
-Measurements : [878.321, 267152, 0.787482, -0.430444]
----
-Label        : 1
-Position     : [1010, 1384.95]
-Measurements : [909.582, 225923, 0.749187, -0.903175]
----
-Label        : 1
-Position     : [169.118, 1385.32]
-Measurements : [936.153, 208541, 2.61297, 6.13453]
----
-Label        : 1
-Position     : [1011.11, 1385.77]
-Measurements : [871.412, 247884, 0.929244, -0.632586]
----
-Label        : 1
-Position     : [1147.86, 1385.85]
-Measurements : [1804.06, 369755, -0.634474, -0.839687]
----
-Label        : 1
-Position     : [1083.74, 1385.86]
-Measurements : [1039.81, 114759, -0.16334, -1.03408]
----
-Label        : 1
-Position     : [1089.75, 1386.58]
-Measurements : [1153.2, 123729, -0.131298, -0.974438]
----
-Label        : 1
-Position     : [1137.8, 1387.08]
-Measurements : [1129, 528683, 0.620096, -1.1659]
----
-Label        : 1
-Position     : [1088.97, 1387.48]
-Measurements : [1192.95, 126224, -0.0182112, -0.73282]
----
-Label        : 1
-Position     : [1173.41, 1387.8]
-Measurements : [1093.9, 308364, 0.441249, -1.20178]
----
-Label        : 1
-Position     : [1086.7, 1388.19]
-Measurements : [1255.24, 130257, 0.343242, -0.020842]
----
-Label        : 1
-Position     : [1142, 1388.19]
-Measurements : [1561.03, 613464, -0.202352, -1.61665]
----
-Label        : 1
-Position     : [1169.04, 1390.65]
-Measurements : [1192.66, 242162, 0.122252, -0.982615]
----
-Label        : 1
-Position     : [1088.41, 1390.81]
-Measurements : [1258.22, 162981, 0.174248, -0.3389]
----
-Label        : 1
-Position     : [137.839, 1390.99]
-Measurements : [1023.5, 190082, 0.947116, 0.347867]
----
-Label        : 1
-Position     : [1058.01, 1391.07]
-Measurements : [1080.69, 368579, 0.101656, -1.49106]
----
-Label        : 1
-Position     : [135.893, 1391.39]
-Measurements : [1064.06, 166593, 1.02346, 0.679916]
----
-Label        : 1
-Position     : [1089.22, 1391.41]
-Measurements : [1201.15, 206593, 0.199094, -0.71187]
----
-Label        : 1
-Position     : [1085.06, 1391.47]
-Measurements : [1411.72, 149262, -0.205306, -0.163591]
----
-Label        : 1
-Position     : [1173.37, 1391.51]
-Measurements : [1094.93, 221983, 0.31752, -1.22651]
----
-Label        : 1
-Position     : [136.697, 1391.88]
-Measurements : [1031.84, 182707, 1.0036, 0.463269]
----
-Label        : 1
-Position     : [1059.67, 1391.88]
-Measurements : [1063.22, 371497, 0.161157, -1.50979]
----
-Label        : 1
-Position     : [155.129, 1392.29]
-Measurements : [941.025, 259222, 0.453849, -1.27346]
----
-Label        : 1
-Position     : [148.844, 1392.64]
-Measurements : [873.434, 304059, 0.582619, -1.26325]
----
-Label        : 1
-Position     : [157.979, 1394.63]
-Measurements : [893.001, 169323, 0.741747, -0.732229]
----
-Label        : 1
-Position     : [1167.46, 1394.77]
-Measurements : [1595.33, 204390, -0.260359, -0.802122]
----
-Label        : 1
-Position     : [153.867, 1395.69]
-Measurements : [1155.01, 220069, 0.0415576, -1.0836]
----
-Label        : 1
-Position     : [151.852, 1395.97]
-Measurements : [1233.48, 261589, -0.161204, -0.906199]
----
-Label        : 1
-Position     : [1056.69, 1396.66]
-Measurements : [1538.99, 186069, -0.567154, -0.290382]
----
-Label        : 1
-Position     : [1164.94, 1397.2]
-Measurements : [1549.25, 162773, 0.153652, -0.686134]
----
-Label        : 1
-Position     : [153.418, 1397.74]
-Measurements : [1189.11, 169365, 0.221753, -0.832834]
----
-Label        : 1
-Position     : [1160.03, 1399.1]
-Measurements : [1212.64, 210005, 0.552384, -0.419835]
----
-Label        : 1
-Position     : [1056.39, 1399.25]
-Measurements : [1558.89, 218940, -0.683988, -0.441213]
diff --git a/Data/Baseline/OTB/Files/TvDescriptorsSVMModelCreation.svm b/Data/Baseline/OTB/Files/TvDescriptorsSVMModelCreation.svm
deleted file mode 100644
index b557bcfbe569174f8d48c93d4d7926275540d020..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/TvDescriptorsSVMModelCreation.svm
+++ /dev/null
@@ -1,232 +0,0 @@
-svm_type c_svc
-kernel_type linear
-nr_class 2
-total_sv 224
-rho -0.898435
-label 1 0
-nr_sv 111 113
-SV
-1 1:0.69109237 2:-0.20162838 3:-0.65376578 4:-0.43547766 
-1 1:0.46324437 2:-0.079541522 3:-0.72899212 4:-0.45271813 
-1 1:0.75094097 2:-0.19616619 3:-0.33190814 4:-0.30877904 
-1 1:0.70365619 2:0.01759753 3:-0.6909989 4:-0.41240323 
-1 1:-0.97853178 2:-0.42895003 3:0.48181126 4:-0.26463967 
-1 1:0.372286 2:0.014274367 3:-1.1031219 4:-0.43038233 
-1 1:-0.49667527 2:-0.14551467 3:0.02117055 4:-0.4017121 
-1 1:-0.88133649 2:-0.035018372 3:1.7800309 4:0.74981121 
-1 1:-0.84875076 2:-0.33219283 3:0.13992409 4:-0.41925118 
-1 1:0.55389122 2:-0.022533338 3:-0.40316594 4:-0.45013169 
-1 1:0.49940573 2:-0.23194414 3:-1.4055887 4:-0.323277 
-1 1:-0.11959717 2:-0.071099793 3:-0.68969274 4:-0.53344103 
-1 1:-0.78710927 2:-0.21299915 3:0.62594993 4:-0.22865958 
-1 1:0.17328549 2:-0.026583638 3:-0.95232954 4:-0.48307589 
-1 1:-0.60848895 2:-0.07361427 3:1.1913011 4:0.17146374 
-1 1:-0.82937399 2:-0.11821296 3:1.6883694 4:0.6160756 
-1 1:-0.22614497 2:-0.035118228 3:0.095960618 4:-0.39662361 
-1 1:0.35976138 2:-0.26508256 3:-0.79837598 4:-0.44047181 
-1 1:1.4136505 2:-0.22623662 3:-0.80293519 4:-0.37971557 
-1 1:-0.057883661 2:-0.074718622 3:-0.22316161 4:-0.45417397 
-1 1:0.34142508 2:-0.16644706 3:-0.89833509 4:-0.43656116 
-1 1:0.20811258 2:-0.17127593 3:-0.80754391 4:-0.43693097 
-1 1:0.56352464 2:-0.078147148 3:-0.73359259 4:-0.43729587 
-1 1:-0.068562106 2:-0.068225633 3:-0.28849653 4:-0.38850409 
-1 1:-0.86171966 2:-0.10027429 3:1.219222 4:0.19381764 
-1 1:-0.77921774 2:-0.10009336 3:1.1271584 4:0.20730184 
-1 1:0.33212738 2:0.009098241 3:0.98020011 4:0.13148285 
-1 1:1.512446 2:-0.18200812 3:-0.88196447 4:-0.38624303 
-1 1:0.48918021 2:-0.0012251123 3:-0.97430606 4:-0.46020262 
-1 1:2.0860009 2:-0.0063752669 3:-0.68361571 4:-0.42379254 
-1 1:-0.87208013 2:-0.4150814 3:0.50629156 4:-0.1761484 
-1 1:1.7266081 2:-0.03750803 3:-0.85200042 4:-0.40133951 
-1 1:1.9339253 2:0.016708231 3:-0.75966763 4:-0.41751742 
-1 1:0.56523315 2:-0.1044057 3:0.65940812 4:0.20014864 
-1 1:-0.92273872 2:-0.39317803 3:0.50638368 4:-0.20743168 
-1 1:-0.92370021 2:-0.44687694 3:0.86164992 4:0.029039189 
-1 1:1.5727291 2:0.092365881 3:-0.97327116 4:-0.36244619 
-1 1:0.13733606 2:-0.073301928 3:-0.44568539 4:-0.42804072 
-1 1:-0.032415082 2:-0.37652828 3:-0.52366102 4:-0.42556547 
-1 1:1.1851067 2:-0.047089841 3:-0.92608619 4:-0.45080471 
-1 1:2.2866981 2:-0.34545889 3:-0.12254126 4:-0.15527653 
-1 1:1.8973903 2:-0.280334 3:-1.3076557 4:-0.28408126 
-1 1:0.16879578 2:-0.06757977 3:-0.48014022 4:-0.44416969 
-1 1:-0.2215064 2:-0.24241052 3:-0.58856 4:-0.45861151 
-1 1:-0.032415082 2:-0.37652828 3:-0.52366102 4:-0.42556547 
-1 1:1.5295631 2:0.062467254 3:-1.2455611 4:-0.31239908 
-1 1:1.3467356 2:-0.075583702 3:-0.57949293 4:-0.29200399 
-1 1:-0.77288794 2:-0.10532933 3:0.43846003 4:-0.2389637 
-1 1:0.056304597 2:-0.094894655 3:0.23959198 4:-0.28954645 
-1 1:1.7621595 2:0.097137499 3:-0.7358019 4:-0.35727314 
-1 1:1.9913826 2:-0.21983291 3:-0.87068772 4:-0.27983657 
-1 1:2.101546 2:-0.21067344 3:-0.93514116 4:-0.14310347 
-1 1:1.3565879 2:-0.28580341 3:-0.77616578 4:-0.39223145 
-1 1:1.4539944 2:-0.17492955 3:-1.0562497 4:-0.3780657 
-1 1:1.0409292 2:-0.10301682 3:0.04371679 4:-0.38037114 
-1 1:1.286188 2:-0.15582611 3:-0.79700877 4:-0.48019886 
-1 1:0.90751355 2:-0.2106515 3:-0.84041874 4:-0.45697936 
-1 1:2.668085 2:0.094488919 3:-0.48645964 4:-0.41309118 
-1 1:-0.021307331 2:-0.056257295 3:-0.16943256 4:-0.40388938 
-1 1:0.74359 2:-0.27485327 3:0.13326728 4:-0.11390012 
-1 1:1.4549764 2:-0.32147401 3:-0.85853111 4:-0.38362505 
-1 1:1.2986204 2:-0.2546904 3:-0.76302084 4:-0.43112508 
-1 1:1.0353747 2:-0.10637342 3:-0.71608318 4:-0.43852742 
-1 1:1.2953587 2:-0.093156666 3:-0.41319252 4:-0.43514228 
-1 1:1.3127638 2:-0.024176066 3:-0.4492193 4:-0.45765616 
-1 1:0.86088155 2:-0.13058913 3:0.39216167 4:-0.2669108 
-1 1:1.1979613 2:0.067102152 3:-0.55743443 4:-0.45871979 
-1 1:1.4008246 2:-0.21219721 3:-0.7547644 4:-0.46573774 
-1 1:1.5851317 2:0.095144665 3:0.16600064 4:-0.16255216 
-1 1:0.38117004 2:-0.063339724 3:0.31259805 4:-0.22152706 
-1 1:0.53653398 2:-0.042885446 3:0.10098396 4:-0.068918142 
-1 1:1.5732366 2:-0.01661684 3:-0.99798455 4:-0.36599303 
-1 1:0.82059321 2:-0.23681127 3:-0.75534324 4:-0.45190902 
-1 1:1.0234628 2:-0.2309679 3:-0.82208803 4:-0.45548031 
-1 1:1.5116328 2:-0.031742743 3:0.055790594 4:-0.17368776 
-1 1:1.6078525 2:-0.079505937 3:0.13048795 4:-0.17886508 
-1 1:2.1981257 2:-0.053697485 3:0.12310795 4:-0.15823516 
-1 1:2.4741225 2:-0.062043755 3:0.30332224 4:-0.28796509 
-1 1:-0.8317382 2:-0.25498416 3:1.4472377 4:0.43160469 
-1 1:-0.87909265 2:-0.095235953 3:1.1700185 4:0.12621143 
-1 1:0.46456664 2:-0.092642951 3:-0.97513248 4:-0.41183384 
-1 1:3.4447302 2:0.10728527 3:-1.0337478 4:-0.27979557 
-1 1:3.376198 2:0.28636335 3:-1.514457 4:-0.19848459 
-1 1:-0.61527688 2:-0.23027023 3:0.73808236 4:-0.078835402 
-1 1:0.91841614 2:-0.42982468 3:-1.4218277 4:-0.10252584 
-1 1:0.77797033 2:-0.33225323 3:-0.79382982 4:-0.24158934 
-1 1:1.418123 2:-0.052881491 3:-0.3952341 4:-0.28615214 
-1 1:0.36637428 2:-0.025712765 3:0.11964145 4:-0.35096155 
-1 1:-0.24582847 2:-0.14703666 3:-0.19214692 4:-0.40034545 
-1 1:0.39742377 2:-0.15935885 3:-0.51431281 4:-0.32850083 
-1 1:1.6873039 2:0.087223584 3:-0.19831611 4:-0.38294477 
-1 1:-0.77759166 2:-0.24478352 3:1.1078669 4:0.26451484 
-1 1:-0.37974709 2:-0.1697171 3:-0.48055168 4:-0.46475615 
-1 1:-0.8369749 2:-0.28360645 3:0.77113861 4:-0.12923923 
-1 1:-0.67565832 2:-0.17790374 3:0.30715305 4:-0.25359594 
-0.8863690227343468 1:2.319659 2:0.1835753 3:-0.81275531 4:-0.33161499 
-1 1:0.57472058 2:-0.351176 3:-0.97077936 4:-0.17494202 
-1 1:0.66835373 2:-0.26328208 3:0.74398001 4:0.19273866 
-1 1:2.7039442 2:0.1760433 3:-0.68652624 4:-0.30001531 
-1 1:0.28447999 2:-0.22341078 3:-0.7124288 4:-0.45325616 
-1 1:0.67158288 2:-0.41662505 3:0.96301587 4:0.23337737 
-1 1:0.90320409 2:-0.14556563 3:-0.021405682 4:-0.018686568 
-1 1:-0.64995648 2:-0.048705093 3:1.255384 4:0.26387963 
-1 1:-0.55692325 2:-0.10408914 3:1.1965585 4:0.2553477 
-1 1:1.8365334 2:-0.017767553 3:-0.76198391 4:-0.36599264 
-1 1:0.015677252 2:-0.12770387 3:-0.52724684 4:-0.49440128 
-1 1:-0.070136805 2:-0.11621001 3:-0.42720804 4:-0.48520764 
-1 1:0.97404423 2:0.03397514 3:-0.39503505 4:-0.4174832 
-1 1:-0.45488195 2:-0.12311357 3:-0.046863915 4:-0.46652937 
-1 1:0.20590504 2:0.014672613 3:-0.0095125754 4:-0.24407214 
-1 1:0.97137365 2:-0.13957271 3:-0.026196808 4:-0.3261752 
--1 1:0.67905954 2:-0.32198607 3:-0.10361163 4:-0.26307534 
--1 1:0.40977245 2:-0.24329323 3:-1.1700738 4:-0.45960816 
--1 1:0.20237853 2:-0.30559202 3:-0.54458161 4:-0.56373692 
--1 1:0.063805304 2:-0.48046644 3:-0.26975819 4:-0.4274501 
--1 1:0.84341609 2:-0.26485617 3:-1.1488738 4:-0.16304561 
--1 1:1.0009787 2:-0.28952698 3:-0.060632821 4:-0.38263647 
--1 1:0.38612517 2:-0.41797433 3:-0.43981481 4:-0.53603847 
--1 1:0.22236172 2:-0.36681128 3:-0.74264232 4:-0.54649243 
--1 1:0.40591592 2:-0.13843111 3:-1.0256277 4:-0.48199669 
--1 1:-0.028194286 2:-0.45655737 3:-0.67568004 4:-0.45637164 
--1 1:0.086757566 2:-0.44096704 3:-1.4310455 4:-0.35315115 
--1 1:0.96341375 2:-0.24809227 3:0.72880266 4:0.045645918 
--1 1:0.5246276 2:-0.089883916 3:0.070256213 4:-0.30750328 
--1 1:0.36915589 2:-0.22653022 3:-0.62629283 4:-0.44174838 
--1 1:0.40565836 2:-0.3815908 3:-1.2144396 4:-0.32684519 
--1 1:0.57637087 2:-0.34075732 3:1.0465222 4:0.38072802 
--1 1:0.62383165 2:-0.022326182 3:-0.17094881 4:-0.26699698 
--1 1:0.49647867 2:-0.34652513 3:-1.5867846 4:-0.29243194 
--1 1:0.6412277 2:-0.090061224 3:0.27456083 4:0.047593754 
--1 1:0.85440682 2:-0.35026828 3:1.4090375 4:0.81042355 
--1 1:0.15985446 2:-0.35801858 3:-0.47844024 4:-0.4587022 
--1 1:0.75002174 2:-0.43089801 3:0.59142388 4:-0.14180762 
--1 1:-0.053832104 2:-0.35684063 3:-0.56691524 4:-0.48508529 
--1 1:1.107728 2:-0.35826441 3:-0.24832036 4:-0.4491882 
--1 1:0.53064122 2:0.089574585 3:1.79279 4:0.76032869 
--1 1:0.32847691 2:-0.20085814 3:1.1787359 4:0.34540129 
--1 1:0.77755258 2:0.30043325 3:0.75576467 4:-0.0019102279 
--1 1:1.2735135 2:-0.030869051 3:-0.22330967 4:-0.44458663 
--1 1:0.13599429 2:0.36237528 3:-0.10859952 4:-0.42109448 
--1 1:0.74681935 2:0.26293238 3:0.76392239 4:-0.087439117 
--1 1:0.59492399 2:-0.2158359 3:0.86146666 4:0.12649503 
--1 1:-0.089461801 2:-0.45549616 3:-0.72593266 4:-0.30518351 
--1 1:0.8184493 2:0.23290742 3:0.84804676 4:0.062307258 
--1 1:0.92511845 2:0.14706418 3:1.0348556 4:0.39331142 
--1 1:0.7281503 2:-0.41664704 3:-0.024347992 4:-0.37974868 
--1 1:1.6609121 2:0.17963063 3:1.2427246 4:0.303052 
--1 1:-0.076010771 2:-0.31201704 3:0.76220674 4:0.45782572 
--1 1:0.69879267 2:0.62585375 3:0.70186956 4:-0.072852815 
--0.127906883094633 1:0.17675613 2:-0.45930231 3:0.1313935 4:-0.075258066 
--1 1:1.0989463 2:-0.39513995 3:-0.61316319 4:-0.49446711 
--1 1:-0.10816998 2:-0.47443976 3:-0.79639366 4:-0.51077326 
--1 1:0.79214127 2:0.17098995 3:1.2664871 4:0.48574072 
--1 1:0.14827523 2:-0.094726896 3:0.47203635 4:0.0013064268 
--1 1:1.2431048 2:-0.043847913 3:-0.24449396 4:-0.42600401 
--1 1:0.22462991 2:-0.39176543 3:1.7181466 4:0.67122043 
--1 1:0.43074908 2:-0.29091281 3:0.23671211 4:-0.024399796 
--1 1:0.16798276 2:-0.37313523 3:0.1820774 4:0.034538256 
--1 1:0.94235843 2:-0.29938736 3:-0.71633522 4:-0.45122958 
--1 1:-0.12051732 2:-0.32739602 3:-0.64349613 4:-0.38607614 
--1 1:0.36424492 2:-0.19876865 3:2.0557255 4:1.0987078 
--1 1:0.12511024 2:-0.2850475 3:-0.81436075 4:-0.4777417 
--1 1:0.5102292 2:-0.20064496 3:0.21188252 4:-0.11019956 
--1 1:-0.40001266 2:-0.44883638 3:0.25831088 4:-0.16642447 
--1 1:0.56333716 2:-0.23080413 3:0.18054123 4:-0.06591376 
--1 1:0.61769663 2:-0.43835494 3:-0.25921368 4:-0.36702427 
--1 1:0.27469223 2:-0.18248259 3:0.90116534 4:0.17224712 
--1 1:0.25631333 2:-0.19409265 3:1.7638615 4:0.86122914 
--0.3451287109572377 1:-0.21107832 2:-0.49353693 3:-1.0471541 4:-0.40473992 
--1 1:0.96032043 2:-0.34357237 3:-0.29004457 4:-0.42554627 
--1 1:0.58743595 2:-0.24557672 3:0.10999064 4:-0.33849341 
--1 1:-0.03708779 2:-0.14113016 3:-0.70068839 4:-0.53246066 
--1 1:0.50197341 2:-0.35708826 3:0.14271648 4:-0.3238136 
--1 1:0.32478169 2:-0.40850575 3:-1.7684244 4:-0.1281177 
--1 1:0.055769624 2:-0.28429312 3:-0.6738572 4:-0.49463315 
--1 1:2.6557568 2:-0.19778546 3:-1.1322828 4:-0.40811028 
--1 1:1.8314785 2:0.18826773 3:-0.22258378 4:-0.4976845 
--1 1:0.28778834 2:-0.24565165 3:-0.53932509 4:-0.37536204 
--1 1:0.56630351 2:-0.27310961 3:-1.5259696 4:-0.2810355 
--1 1:1.7688056 2:-0.15710732 3:-0.2632662 4:-0.48774699 
--1 1:1.0465847 2:-0.38005255 3:-1.2094317 4:-0.451302 
--1 1:-0.18938881 2:-0.096969262 3:-0.41679385 4:-0.52956321 
--1 1:1.3109916 2:0.56040034 3:-0.60909088 4:-0.50444415 
--1 1:1.2183418 2:0.22683989 3:0.26285983 4:-0.27844331 
--1 1:1.2839872 2:-0.077736632 3:-0.16254052 4:-0.45129981 
--1 1:1.1161328 2:-0.25623105 3:-0.34168012 4:-0.51619477 
--1 1:0.59750888 2:0.35904153 3:0.10987952 4:-0.3967108 
--1 1:0.068990155 2:-0.33918935 3:-0.51638461 4:-0.4230581 
--1 1:1.2612796 2:0.20760424 3:0.22700797 4:-0.28788431 
--1 1:0.19645885 2:-0.10587959 3:-0.95303352 4:-0.48941085 
--1 1:1.6708124 2:-0.16621109 3:-0.50956753 4:-0.52117133 
--1 1:1.2560159 2:0.58984576 3:-0.11065066 4:-0.42997574 
--1 1:0.6365864 2:-0.3159853 3:-0.43575745 4:-0.24918789 
--1 1:-0.27554846 2:-0.38153805 3:-0.65796797 4:-0.51900905 
--1 1:-0.19232176 2:-0.27815867 3:-0.60753037 4:-0.52076717 
--1 1:0.015804563 2:-0.19853049 3:-0.79780762 4:-0.55885602 
--1 1:1.3231804 2:-0.16938208 3:-0.22403075 4:-0.4627119 
--1 1:0.0026969903 2:-0.41855948 3:-0.87497128 4:-0.40635496 
--1 1:0.43957179 2:-0.16440573 3:-0.38929989 4:-0.49034286 
--1 1:-0.2690738 2:-0.27153781 3:-0.66845649 4:-0.52137948 
--1 1:0.28141871 2:-0.3932208 3:-0.42573926 4:-0.14238624 
--1 1:1.6493723 2:-0.25029374 3:-1.1010529 4:-0.31200023 
--1 1:2.138692 2:-0.27719065 3:-0.52919492 4:-0.52248088 
--1 1:-0.02930289 2:-0.26346287 3:-0.58111883 4:-0.5279823 
--1 1:0.41080693 2:-0.27225805 3:-0.2746303 4:-0.3400428 
--1 1:1.0547766 2:-0.20354031 3:-0.35549573 4:-0.52403621 
--1 1:-0.038473041 2:-0.27665462 3:-0.61568444 4:-0.51650441 
--1 1:1.4659046 2:1.113788 3:0.086161524 4:-0.3867731 
--1 1:1.0877119 2:1.0018544 3:-0.50406188 4:-0.5144821 
--1 1:1.0313572 2:-0.39820351 3:0.14001203 4:-0.14989309 
--1 1:1.3298706 2:1.1804648 3:-0.71850716 4:-0.52034533 
--1 1:1.5906871 2:-0.26492985 3:-1.2958511 4:-0.43931484 
--1 1:0.99994562 2:-0.39915208 3:-0.61018 4:-0.4574368 
--1 1:1.0432105 2:-0.27877234 3:-0.65607653 4:-0.38990796 
--1 1:0.84517848 2:-0.42287191 3:0.16916266 4:-0.26409466 
--1 1:0.3423789 2:-0.45147406 3:-1.020062 4:-0.40505505 
--1 1:1.4989444 2:0.48249017 3:-0.89881716 4:-0.51387248 
--0.4133334286824741 1:0.70487226 2:-0.39552501 3:-0.35274026 4:0.076316467 
--1 1:1.4518186 2:-0.24860617 3:-1.3214617 4:-0.27026562 
--1 1:0.90394036 2:-0.28053002 3:-0.99614087 4:-0.46659073 
--1 1:1.0337892 2:-0.28248027 3:-1.2491535 4:-0.35818484 
--1 1:0.29457572 2:-0.42802317 3:-0.92568876 4:-0.40083456 
--1 1:0.30987783 2:-0.4243198 3:-0.89973376 4:-0.433091 
--1 1:0.67069754 2:-0.19985884 3:-0.71810461 4:-0.50012774 
diff --git a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.dbf b/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.dbf
deleted file mode 100644
index c2df5113bb5e7daca9989707ac56662bf674c99d..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0998367ed4a1fea79be1a27a82f0d76d5dcba84214aa63678b660f1bc6245120
-size 365538
diff --git a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shp b/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shp
deleted file mode 100644
index faedfa80a00e469dc0335ebf155879adb2577d5d..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ead83092b50a373b6a026a6553bfdd1d5f3c5f3fde4e7a88b6a8f76c696e707
-size 126436
diff --git a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shx b/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shx
deleted file mode 100644
index 3f9ded68080230718f13932438adbb2909f07d44..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/TvLabeledSampleLocalizationGeneratorOutput.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fe4b9505e67c0b6c3e673e27fe9ff518641795a00339addc53de6af47aefb2dc
-size 36196
diff --git a/Data/Baseline/OTB/Files/TvObjectDetectionClassifierOutput.txt b/Data/Baseline/OTB/Files/TvObjectDetectionClassifierOutput.txt
deleted file mode 100644
index ebbdaef1e82f329c4a9bfcdeff19f822b2cdd682..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/TvObjectDetectionClassifierOutput.txt
+++ /dev/null
@@ -1,790 +0,0 @@
-[16.5, 0.5]
-[18.5, 0.5]
-[20.5, 0.5]
-[22.5, 0.5]
-[16.5, 2.5]
-[18.5, 2.5]
-[20.5, 2.5]
-[22.5, 2.5]
-[24.5, 2.5]
-[28.5, 2.5]
-[22.5, 4.5]
-[24.5, 4.5]
-[26.5, 4.5]
-[28.5, 4.5]
-[30.5, 4.5]
-[26.5, 6.5]
-[28.5, 6.5]
-[30.5, 6.5]
-[86.5, 6.5]
-[26.5, 8.5]
-[28.5, 8.5]
-[30.5, 8.5]
-[84.5, 8.5]
-[86.5, 8.5]
-[22.5, 10.5]
-[24.5, 10.5]
-[26.5, 10.5]
-[28.5, 10.5]
-[30.5, 10.5]
-[50.5, 10.5]
-[14.5, 12.5]
-[16.5, 12.5]
-[18.5, 12.5]
-[20.5, 12.5]
-[22.5, 12.5]
-[24.5, 12.5]
-[26.5, 12.5]
-[28.5, 12.5]
-[30.5, 12.5]
-[42.5, 12.5]
-[44.5, 12.5]
-[48.5, 12.5]
-[50.5, 12.5]
-[10.5, 14.5]
-[12.5, 14.5]
-[14.5, 14.5]
-[16.5, 14.5]
-[18.5, 14.5]
-[20.5, 14.5]
-[22.5, 14.5]
-[24.5, 14.5]
-[26.5, 14.5]
-[28.5, 14.5]
-[30.5, 14.5]
-[32.5, 14.5]
-[42.5, 14.5]
-[44.5, 14.5]
-[46.5, 14.5]
-[48.5, 14.5]
-[50.5, 14.5]
-[60.5, 14.5]
-[10.5, 16.5]
-[12.5, 16.5]
-[14.5, 16.5]
-[16.5, 16.5]
-[18.5, 16.5]
-[20.5, 16.5]
-[22.5, 16.5]
-[24.5, 16.5]
-[26.5, 16.5]
-[28.5, 16.5]
-[30.5, 16.5]
-[42.5, 16.5]
-[44.5, 16.5]
-[48.5, 16.5]
-[60.5, 16.5]
-[88.5, 16.5]
-[90.5, 16.5]
-[10.5, 18.5]
-[12.5, 18.5]
-[14.5, 18.5]
-[16.5, 18.5]
-[18.5, 18.5]
-[20.5, 18.5]
-[22.5, 18.5]
-[24.5, 18.5]
-[26.5, 18.5]
-[28.5, 18.5]
-[30.5, 18.5]
-[32.5, 18.5]
-[34.5, 18.5]
-[88.5, 18.5]
-[90.5, 18.5]
-[10.5, 20.5]
-[12.5, 20.5]
-[14.5, 20.5]
-[16.5, 20.5]
-[18.5, 20.5]
-[20.5, 20.5]
-[22.5, 20.5]
-[24.5, 20.5]
-[26.5, 20.5]
-[28.5, 20.5]
-[30.5, 20.5]
-[32.5, 20.5]
-[34.5, 20.5]
-[88.5, 20.5]
-[110.5, 20.5]
-[112.5, 20.5]
-[10.5, 22.5]
-[12.5, 22.5]
-[14.5, 22.5]
-[16.5, 22.5]
-[18.5, 22.5]
-[20.5, 22.5]
-[22.5, 22.5]
-[24.5, 22.5]
-[26.5, 22.5]
-[28.5, 22.5]
-[30.5, 22.5]
-[32.5, 22.5]
-[34.5, 22.5]
-[110.5, 22.5]
-[112.5, 22.5]
-[10.5, 24.5]
-[12.5, 24.5]
-[14.5, 24.5]
-[16.5, 24.5]
-[18.5, 24.5]
-[20.5, 24.5]
-[22.5, 24.5]
-[24.5, 24.5]
-[26.5, 24.5]
-[28.5, 24.5]
-[30.5, 24.5]
-[32.5, 24.5]
-[34.5, 24.5]
-[10.5, 26.5]
-[12.5, 26.5]
-[14.5, 26.5]
-[16.5, 26.5]
-[18.5, 26.5]
-[20.5, 26.5]
-[22.5, 26.5]
-[24.5, 26.5]
-[26.5, 26.5]
-[28.5, 26.5]
-[30.5, 26.5]
-[32.5, 26.5]
-[34.5, 26.5]
-[36.5, 26.5]
-[18.5, 28.5]
-[20.5, 28.5]
-[22.5, 28.5]
-[24.5, 28.5]
-[26.5, 28.5]
-[28.5, 28.5]
-[30.5, 28.5]
-[32.5, 28.5]
-[34.5, 28.5]
-[36.5, 28.5]
-[20.5, 30.5]
-[22.5, 30.5]
-[24.5, 30.5]
-[26.5, 30.5]
-[28.5, 30.5]
-[30.5, 30.5]
-[32.5, 30.5]
-[34.5, 30.5]
-[36.5, 30.5]
-[38.5, 30.5]
-[20.5, 32.5]
-[22.5, 32.5]
-[24.5, 32.5]
-[26.5, 32.5]
-[28.5, 32.5]
-[30.5, 32.5]
-[32.5, 32.5]
-[34.5, 32.5]
-[36.5, 32.5]
-[38.5, 32.5]
-[40.5, 32.5]
-[34.5, 34.5]
-[36.5, 34.5]
-[38.5, 34.5]
-[40.5, 34.5]
-[34.5, 36.5]
-[36.5, 36.5]
-[38.5, 36.5]
-[28.5, 38.5]
-[30.5, 38.5]
-[32.5, 38.5]
-[34.5, 38.5]
-[36.5, 38.5]
-[38.5, 38.5]
-[40.5, 38.5]
-[120.5, 38.5]
-[20.5, 40.5]
-[22.5, 40.5]
-[24.5, 40.5]
-[26.5, 40.5]
-[28.5, 40.5]
-[30.5, 40.5]
-[32.5, 40.5]
-[34.5, 40.5]
-[36.5, 40.5]
-[38.5, 40.5]
-[40.5, 40.5]
-[18.5, 42.5]
-[20.5, 42.5]
-[22.5, 42.5]
-[24.5, 42.5]
-[26.5, 42.5]
-[28.5, 42.5]
-[30.5, 42.5]
-[32.5, 42.5]
-[34.5, 42.5]
-[36.5, 42.5]
-[38.5, 42.5]
-[40.5, 42.5]
-[16.5, 44.5]
-[18.5, 44.5]
-[20.5, 44.5]
-[22.5, 44.5]
-[24.5, 44.5]
-[26.5, 44.5]
-[28.5, 44.5]
-[30.5, 44.5]
-[32.5, 44.5]
-[34.5, 44.5]
-[36.5, 44.5]
-[38.5, 44.5]
-[40.5, 44.5]
-[16.5, 46.5]
-[18.5, 46.5]
-[20.5, 46.5]
-[22.5, 46.5]
-[24.5, 46.5]
-[26.5, 46.5]
-[28.5, 46.5]
-[30.5, 46.5]
-[32.5, 46.5]
-[34.5, 46.5]
-[36.5, 46.5]
-[38.5, 46.5]
-[40.5, 46.5]
-[48.5, 46.5]
-[50.5, 46.5]
-[16.5, 48.5]
-[18.5, 48.5]
-[20.5, 48.5]
-[22.5, 48.5]
-[24.5, 48.5]
-[26.5, 48.5]
-[28.5, 48.5]
-[30.5, 48.5]
-[32.5, 48.5]
-[34.5, 48.5]
-[36.5, 48.5]
-[38.5, 48.5]
-[40.5, 48.5]
-[48.5, 48.5]
-[50.5, 48.5]
-[52.5, 48.5]
-[16.5, 50.5]
-[18.5, 50.5]
-[20.5, 50.5]
-[22.5, 50.5]
-[24.5, 50.5]
-[26.5, 50.5]
-[28.5, 50.5]
-[30.5, 50.5]
-[32.5, 50.5]
-[34.5, 50.5]
-[36.5, 50.5]
-[38.5, 50.5]
-[40.5, 50.5]
-[42.5, 50.5]
-[48.5, 50.5]
-[50.5, 50.5]
-[52.5, 50.5]
-[18.5, 52.5]
-[20.5, 52.5]
-[22.5, 52.5]
-[24.5, 52.5]
-[26.5, 52.5]
-[28.5, 52.5]
-[30.5, 52.5]
-[32.5, 52.5]
-[34.5, 52.5]
-[36.5, 52.5]
-[38.5, 52.5]
-[40.5, 52.5]
-[42.5, 52.5]
-[44.5, 52.5]
-[48.5, 52.5]
-[60.5, 52.5]
-[62.5, 52.5]
-[20.5, 54.5]
-[22.5, 54.5]
-[24.5, 54.5]
-[26.5, 54.5]
-[28.5, 54.5]
-[30.5, 54.5]
-[32.5, 54.5]
-[34.5, 54.5]
-[36.5, 54.5]
-[38.5, 54.5]
-[40.5, 54.5]
-[42.5, 54.5]
-[60.5, 54.5]
-[62.5, 54.5]
-[122.5, 54.5]
-[38.5, 56.5]
-[40.5, 56.5]
-[42.5, 56.5]
-[60.5, 56.5]
-[62.5, 56.5]
-[122.5, 56.5]
-[38.5, 58.5]
-[40.5, 58.5]
-[42.5, 58.5]
-[60.5, 58.5]
-[62.5, 58.5]
-[122.5, 58.5]
-[36.5, 60.5]
-[38.5, 60.5]
-[40.5, 60.5]
-[42.5, 60.5]
-[60.5, 60.5]
-[62.5, 60.5]
-[120.5, 60.5]
-[122.5, 60.5]
-[0.5, 62.5]
-[2.5, 62.5]
-[4.5, 62.5]
-[6.5, 62.5]
-[36.5, 62.5]
-[38.5, 62.5]
-[40.5, 62.5]
-[42.5, 62.5]
-[62.5, 62.5]
-[120.5, 62.5]
-[122.5, 62.5]
-[0.5, 64.5]
-[2.5, 64.5]
-[4.5, 64.5]
-[6.5, 64.5]
-[8.5, 64.5]
-[36.5, 64.5]
-[38.5, 64.5]
-[40.5, 64.5]
-[42.5, 64.5]
-[62.5, 64.5]
-[64.5, 64.5]
-[0.5, 66.5]
-[2.5, 66.5]
-[4.5, 66.5]
-[6.5, 66.5]
-[8.5, 66.5]
-[26.5, 66.5]
-[28.5, 66.5]
-[30.5, 66.5]
-[32.5, 66.5]
-[34.5, 66.5]
-[36.5, 66.5]
-[38.5, 66.5]
-[40.5, 66.5]
-[42.5, 66.5]
-[0.5, 68.5]
-[2.5, 68.5]
-[4.5, 68.5]
-[6.5, 68.5]
-[8.5, 68.5]
-[22.5, 68.5]
-[24.5, 68.5]
-[26.5, 68.5]
-[28.5, 68.5]
-[30.5, 68.5]
-[32.5, 68.5]
-[34.5, 68.5]
-[36.5, 68.5]
-[38.5, 68.5]
-[40.5, 68.5]
-[42.5, 68.5]
-[44.5, 68.5]
-[0.5, 70.5]
-[2.5, 70.5]
-[4.5, 70.5]
-[6.5, 70.5]
-[8.5, 70.5]
-[22.5, 70.5]
-[24.5, 70.5]
-[26.5, 70.5]
-[28.5, 70.5]
-[30.5, 70.5]
-[32.5, 70.5]
-[34.5, 70.5]
-[36.5, 70.5]
-[38.5, 70.5]
-[40.5, 70.5]
-[42.5, 70.5]
-[44.5, 70.5]
-[0.5, 72.5]
-[2.5, 72.5]
-[4.5, 72.5]
-[6.5, 72.5]
-[8.5, 72.5]
-[22.5, 72.5]
-[24.5, 72.5]
-[26.5, 72.5]
-[28.5, 72.5]
-[30.5, 72.5]
-[32.5, 72.5]
-[34.5, 72.5]
-[36.5, 72.5]
-[38.5, 72.5]
-[40.5, 72.5]
-[42.5, 72.5]
-[44.5, 72.5]
-[0.5, 74.5]
-[2.5, 74.5]
-[4.5, 74.5]
-[6.5, 74.5]
-[8.5, 74.5]
-[22.5, 74.5]
-[24.5, 74.5]
-[26.5, 74.5]
-[28.5, 74.5]
-[30.5, 74.5]
-[32.5, 74.5]
-[34.5, 74.5]
-[36.5, 74.5]
-[38.5, 74.5]
-[40.5, 74.5]
-[42.5, 74.5]
-[44.5, 74.5]
-[46.5, 74.5]
-[0.5, 76.5]
-[2.5, 76.5]
-[4.5, 76.5]
-[6.5, 76.5]
-[22.5, 76.5]
-[24.5, 76.5]
-[26.5, 76.5]
-[28.5, 76.5]
-[30.5, 76.5]
-[32.5, 76.5]
-[34.5, 76.5]
-[36.5, 76.5]
-[38.5, 76.5]
-[40.5, 76.5]
-[42.5, 76.5]
-[44.5, 76.5]
-[46.5, 76.5]
-[22.5, 78.5]
-[24.5, 78.5]
-[26.5, 78.5]
-[28.5, 78.5]
-[30.5, 78.5]
-[32.5, 78.5]
-[34.5, 78.5]
-[36.5, 78.5]
-[38.5, 78.5]
-[40.5, 78.5]
-[42.5, 78.5]
-[44.5, 78.5]
-[46.5, 78.5]
-[48.5, 78.5]
-[24.5, 80.5]
-[26.5, 80.5]
-[28.5, 80.5]
-[30.5, 80.5]
-[32.5, 80.5]
-[34.5, 80.5]
-[36.5, 80.5]
-[38.5, 80.5]
-[40.5, 80.5]
-[42.5, 80.5]
-[44.5, 80.5]
-[46.5, 80.5]
-[48.5, 80.5]
-[50.5, 80.5]
-[106.5, 80.5]
-[42.5, 82.5]
-[44.5, 82.5]
-[46.5, 82.5]
-[48.5, 82.5]
-[50.5, 82.5]
-[106.5, 82.5]
-[46.5, 84.5]
-[48.5, 84.5]
-[50.5, 84.5]
-[106.5, 84.5]
-[46.5, 86.5]
-[48.5, 86.5]
-[50.5, 86.5]
-[98.5, 86.5]
-[48.5, 88.5]
-[88.5, 88.5]
-[98.5, 88.5]
-[100.5, 88.5]
-[86.5, 90.5]
-[88.5, 90.5]
-[98.5, 90.5]
-[86.5, 92.5]
-[88.5, 92.5]
-[98.5, 92.5]
-[100.5, 92.5]
-[124.5, 92.5]
-[126.5, 92.5]
-[56.5, 94.5]
-[58.5, 94.5]
-[60.5, 94.5]
-[62.5, 94.5]
-[64.5, 94.5]
-[88.5, 94.5]
-[98.5, 94.5]
-[100.5, 94.5]
-[118.5, 94.5]
-[120.5, 94.5]
-[122.5, 94.5]
-[124.5, 94.5]
-[126.5, 94.5]
-[56.5, 96.5]
-[58.5, 96.5]
-[60.5, 96.5]
-[62.5, 96.5]
-[64.5, 96.5]
-[100.5, 96.5]
-[118.5, 96.5]
-[120.5, 96.5]
-[122.5, 96.5]
-[124.5, 96.5]
-[126.5, 96.5]
-[48.5, 98.5]
-[50.5, 98.5]
-[56.5, 98.5]
-[58.5, 98.5]
-[60.5, 98.5]
-[62.5, 98.5]
-[64.5, 98.5]
-[100.5, 98.5]
-[102.5, 98.5]
-[118.5, 98.5]
-[120.5, 98.5]
-[122.5, 98.5]
-[124.5, 98.5]
-[126.5, 98.5]
-[48.5, 100.5]
-[50.5, 100.5]
-[54.5, 100.5]
-[56.5, 100.5]
-[58.5, 100.5]
-[60.5, 100.5]
-[62.5, 100.5]
-[64.5, 100.5]
-[102.5, 100.5]
-[118.5, 100.5]
-[120.5, 100.5]
-[122.5, 100.5]
-[124.5, 100.5]
-[126.5, 100.5]
-[0.5, 102.5]
-[2.5, 102.5]
-[4.5, 102.5]
-[48.5, 102.5]
-[50.5, 102.5]
-[54.5, 102.5]
-[56.5, 102.5]
-[58.5, 102.5]
-[60.5, 102.5]
-[62.5, 102.5]
-[64.5, 102.5]
-[92.5, 102.5]
-[102.5, 102.5]
-[120.5, 102.5]
-[122.5, 102.5]
-[0.5, 104.5]
-[2.5, 104.5]
-[4.5, 104.5]
-[6.5, 104.5]
-[48.5, 104.5]
-[50.5, 104.5]
-[54.5, 104.5]
-[56.5, 104.5]
-[58.5, 104.5]
-[60.5, 104.5]
-[62.5, 104.5]
-[64.5, 104.5]
-[90.5, 104.5]
-[92.5, 104.5]
-[0.5, 106.5]
-[2.5, 106.5]
-[4.5, 106.5]
-[6.5, 106.5]
-[48.5, 106.5]
-[50.5, 106.5]
-[52.5, 106.5]
-[58.5, 106.5]
-[60.5, 106.5]
-[62.5, 106.5]
-[64.5, 106.5]
-[90.5, 106.5]
-[92.5, 106.5]
-[94.5, 106.5]
-[104.5, 106.5]
-[0.5, 108.5]
-[2.5, 108.5]
-[4.5, 108.5]
-[6.5, 108.5]
-[48.5, 108.5]
-[50.5, 108.5]
-[52.5, 108.5]
-[54.5, 108.5]
-[56.5, 108.5]
-[58.5, 108.5]
-[60.5, 108.5]
-[62.5, 108.5]
-[64.5, 108.5]
-[66.5, 108.5]
-[92.5, 108.5]
-[94.5, 108.5]
-[102.5, 108.5]
-[104.5, 108.5]
-[118.5, 108.5]
-[120.5, 108.5]
-[122.5, 108.5]
-[124.5, 108.5]
-[0.5, 110.5]
-[2.5, 110.5]
-[4.5, 110.5]
-[6.5, 110.5]
-[48.5, 110.5]
-[50.5, 110.5]
-[52.5, 110.5]
-[54.5, 110.5]
-[56.5, 110.5]
-[58.5, 110.5]
-[60.5, 110.5]
-[62.5, 110.5]
-[64.5, 110.5]
-[66.5, 110.5]
-[92.5, 110.5]
-[94.5, 110.5]
-[102.5, 110.5]
-[104.5, 110.5]
-[114.5, 110.5]
-[116.5, 110.5]
-[118.5, 110.5]
-[120.5, 110.5]
-[122.5, 110.5]
-[124.5, 110.5]
-[126.5, 110.5]
-[0.5, 112.5]
-[2.5, 112.5]
-[4.5, 112.5]
-[6.5, 112.5]
-[48.5, 112.5]
-[50.5, 112.5]
-[52.5, 112.5]
-[54.5, 112.5]
-[58.5, 112.5]
-[60.5, 112.5]
-[62.5, 112.5]
-[64.5, 112.5]
-[66.5, 112.5]
-[94.5, 112.5]
-[102.5, 112.5]
-[104.5, 112.5]
-[106.5, 112.5]
-[112.5, 112.5]
-[114.5, 112.5]
-[116.5, 112.5]
-[118.5, 112.5]
-[120.5, 112.5]
-[122.5, 112.5]
-[124.5, 112.5]
-[126.5, 112.5]
-[48.5, 114.5]
-[50.5, 114.5]
-[52.5, 114.5]
-[54.5, 114.5]
-[58.5, 114.5]
-[60.5, 114.5]
-[62.5, 114.5]
-[64.5, 114.5]
-[66.5, 114.5]
-[94.5, 114.5]
-[102.5, 114.5]
-[104.5, 114.5]
-[106.5, 114.5]
-[112.5, 114.5]
-[114.5, 114.5]
-[116.5, 114.5]
-[118.5, 114.5]
-[42.5, 116.5]
-[44.5, 116.5]
-[46.5, 116.5]
-[48.5, 116.5]
-[50.5, 116.5]
-[52.5, 116.5]
-[54.5, 116.5]
-[58.5, 116.5]
-[60.5, 116.5]
-[62.5, 116.5]
-[64.5, 116.5]
-[66.5, 116.5]
-[102.5, 116.5]
-[104.5, 116.5]
-[106.5, 116.5]
-[112.5, 116.5]
-[114.5, 116.5]
-[116.5, 116.5]
-[38.5, 118.5]
-[40.5, 118.5]
-[42.5, 118.5]
-[44.5, 118.5]
-[46.5, 118.5]
-[48.5, 118.5]
-[50.5, 118.5]
-[52.5, 118.5]
-[54.5, 118.5]
-[104.5, 118.5]
-[106.5, 118.5]
-[112.5, 118.5]
-[114.5, 118.5]
-[116.5, 118.5]
-[36.5, 120.5]
-[38.5, 120.5]
-[40.5, 120.5]
-[42.5, 120.5]
-[44.5, 120.5]
-[46.5, 120.5]
-[48.5, 120.5]
-[50.5, 120.5]
-[52.5, 120.5]
-[54.5, 120.5]
-[104.5, 120.5]
-[106.5, 120.5]
-[112.5, 120.5]
-[114.5, 120.5]
-[116.5, 120.5]
-[0.5, 122.5]
-[2.5, 122.5]
-[4.5, 122.5]
-[36.5, 122.5]
-[38.5, 122.5]
-[40.5, 122.5]
-[42.5, 122.5]
-[44.5, 122.5]
-[46.5, 122.5]
-[48.5, 122.5]
-[50.5, 122.5]
-[52.5, 122.5]
-[54.5, 122.5]
-[56.5, 122.5]
-[106.5, 122.5]
-[114.5, 122.5]
-[0.5, 124.5]
-[2.5, 124.5]
-[4.5, 124.5]
-[36.5, 124.5]
-[38.5, 124.5]
-[40.5, 124.5]
-[42.5, 124.5]
-[44.5, 124.5]
-[46.5, 124.5]
-[48.5, 124.5]
-[50.5, 124.5]
-[52.5, 124.5]
-[54.5, 124.5]
-[56.5, 124.5]
-[106.5, 124.5]
-[108.5, 124.5]
-[0.5, 126.5]
-[2.5, 126.5]
-[4.5, 126.5]
-[6.5, 126.5]
-[36.5, 126.5]
-[38.5, 126.5]
-[40.5, 126.5]
-[42.5, 126.5]
-[44.5, 126.5]
-[46.5, 126.5]
-[48.5, 126.5]
-[50.5, 126.5]
-[52.5, 126.5]
-[54.5, 126.5]
-[56.5, 126.5]
diff --git a/Data/Baseline/OTB/Files/bfBoundingRegionCalculatorOutput.txt b/Data/Baseline/OTB/Files/bfBoundingRegionCalculatorOutput.txt
deleted file mode 100644
index 607b28d732cbd88ed00155282488e63c212b0ace..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfBoundingRegionCalculatorOutput.txt
+++ /dev/null
@@ -1,12 +0,0 @@
-Test results from otbBinaryImageBoundingRegionCalculator test.
-[8, 48]	[81, 39]
-[7, 7]	[83, 41]
-[7, 9]	[45, 36]
-[25, 11]	[47, 30]
-
-Testing the pad option
-
-[7, 47]	[83, 41]
-[6, 6]	[85, 43]
-[6, 8]	[47, 38]
-[24, 10]	[49, 32]
diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.dbf b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.dbf
deleted file mode 100644
index e514113af135119bc8425acf01f592628df9b0ee..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:9a91a7b2a449168136030deb765d660dc0851638543eced30eb006db94bc2123
-size 6583
diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shp b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shp
deleted file mode 100644
index 0e5a1e7088d245322c2dea9711dc61f0d147bbc4..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ca53f866c1773b1ea1329e910073eb8c2c25513dca65b8e5ab21a047d31e333
-size 12860
diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shx b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shx
deleted file mode 100644
index e4f82fd5c32949defffebc072ec21aab04dd54d3..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.1.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:cd9270880008ed009e4e0e08ea105d91f40eb911f7c27e773348dfc74857bec2
-size 668
diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.dbf b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.dbf
deleted file mode 100644
index 5c2e63d063ed9d1cb3951b1af6ae1f47ad6bdf14..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:539f3f381fe619efbf813b1f6a407f236ca577cd2f62f0d35cf8a717c30f3210
-size 6583
diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp
deleted file mode 100644
index d5ff96b9922859ed04a1f8c4479c89507f6c4daa..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d0b6e77ff1d3acae9432b63b929050ed0089e9aace8a831c817b07ac02b04063
-size 18388
diff --git a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shx b/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shx
deleted file mode 100644
index 72bda750b8f93dbb743c133f9cdcb57e5d489314..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvDBOverlapDataNodeFeatureFunctionOutput.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8e3f91df5a62beb63ba9b17a952d2673a732aa428b20861dce0c6dd986e588db
-size 668
diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.dbf b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.dbf
deleted file mode 100644
index 7c908dfa514d47a20b9e25bfb6e6d9b379d01ef6..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5e03911f8e9f9eecd908084083cbed86b2084a1a8ec469a0bf58296ba9ca93f4
-size 6583
diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp
deleted file mode 100644
index b3adb3d3bb2ccb2ae5bfefd4abb19bd64970103a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ff01566163097422211e31b35823cc6ede15efa3965bcc72f2e89f8b95fc2b30
-size 12860
diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shx b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shx
deleted file mode 100644
index 8eb95e8e60e8cf4597630573a9dcfa4c795487fc..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b033aa81a9212511ecb13bf36bb9b92d26a2272e8fd2e7106fd938f623084664
-size 668
diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.dbf b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.dbf
deleted file mode 100644
index 6cf192268251981989263ef6d65b1d2c3490290f..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2a314fb6c853dd6ed9864eb50da057c96bad6802b1d35e1c27e63f7c54ac5e6c
-size 1517
diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp
deleted file mode 100644
index 4df7fd5f11a76ae2d527a9be87e52e380efe6edd..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a02afbec1aac0b3b812282d4877310d5ce035b9fce9aa4d2427244a0c4404840
-size 3228
diff --git a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shx b/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shx
deleted file mode 100644
index e8977f2d43cf2cc9b3b6dc1bd080b67d024f7573..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ce4dc76a26a8fafad2f5e083c3aea4f5494319c7a46cfa7a339a0fd48161aa1d
-size 252
diff --git a/Data/Baseline/OTB/Files/bfTvPersistentVectorizationImageFilterOutput.txt b/Data/Baseline/OTB/Files/bfTvPersistentVectorizationImageFilterOutput.txt
index be8d26528fdb6e53c48a6a5b67c58eb5dd40d5cb..9f0a2569d3082b2e1322feed4a06fdfc469748bd 100644
--- a/Data/Baseline/OTB/Files/bfTvPersistentVectorizationImageFilterOutput.txt
+++ b/Data/Baseline/OTB/Files/bfTvPersistentVectorizationImageFilterOutput.txt
@@ -1,4 +1,3 @@
-[ 55.5, 123.5] [ 57, 123.5] [ 58, 123.5] [ 59, 123.5] [ 60, 123.5] [ 61, 123.5] [ 62, 123.5] [ 63, 123.5] [ 64, 123.5] [ 65, 123.5] [ 66, 123.5] [ 67.5, 123.5] [ 68, 124.5] [ 69, 124.5] [ 70, 124.5] [ 71.5, 124.5] [ 72, 125.5] [ 73.5, 125.5] [ 74, 126.5] [ 75, 126.5] [ 76.5, 126.5] [ 77, 127.5] [ 78.5, 127.5] [ 79.5, 128.5] [ 80, 129.5] [ 81.5, 129.5] [ 82.5, 130.5] [ 83.5, 131.5] [ 84.5, 132.5] [ 85.5, 133.5] [ 86.5, 134.5] [ 87.5, 135.5] [ 88.5, 136.5] [ 89.5, 137.5] [ 90.5, 138.5] [ 91.5, 139.5] [ 91.5, 141] [ 92.5, 141.5] [ 93.5, 142.5] [ 93.5, 144] [ 94.5, 144.5] [ 94.5, 146] [ 95.5, 146.5] [ 95.5, 148] [ 96.5, 148.5] [ 96.5, 150] [ 96.5, 151] [ 97.5, 151.5] [ 97.5, 153] [ 97.5, 154] [ 98.5, 154.5] [ 98.5, 156] [ 98.5, 157] [ 99.5, 157.5] [ 99.5, 159] [ 99.5, 160] [ 99.5, 161] [ 99.5, 162] [ 99.5, 163] [ 100.5, 163.5] [ 100.5, 165] [ 100.5, 166] [ 100.5, 167] [ 100.5, 168] [ 100.5, 169] [ 100.5, 170] [ 100.5, 171] [ 100.5, 172] [ 100.5, 173] [ 100.5, 174] [ 100.5, 175] [ 100.5, 176] [ 100.5, 177] [ 100.5, 178.5] [ 99.5, 179] [ 99.5, 180] [ 99.5, 181] [ 99.5, 182] [ 99.5, 183] [ 99.5, 184.5] [ 98.5, 185] [ 98.5, 186] [ 98.5, 187.5] [ 97.5, 188] [ 97.5, 189] [ 97.5, 190.5] [ 96.5, 191] [ 96.5, 192] [ 96.5, 193.5] [ 95.5, 194] [ 95.5, 195.5] [ 94.5, 196] [ 94.5, 197.5] [ 93.5, 198] [ 93.5, 199.5] [ 92.5, 200.5] [ 91.5, 201] [ 91.5, 202.5] [ 90.5, 203.5] [ 89.5, 204.5] [ 88.5, 205.5] [ 87.5, 206.5] [ 86.5, 207.5] [ 85.5, 208.5] [ 84.5, 209.5] [ 83.5, 210.5] [ 82.5, 211.5] [ 81.5, 212.5] [ 80, 212.5] [ 79.5, 213.5] [ 78.5, 214.5] [ 77, 214.5] [ 76.5, 215.5] [ 75, 215.5] [ 74, 215.5] [ 73.5, 216.5] [ 72, 216.5] [ 71.5, 217.5] [ 70, 217.5] [ 69, 217.5] [ 68, 217.5] [ 67.5, 218.5] [ 66, 218.5] [ 65, 218.5] [ 64, 218.5] [ 63, 218.5] [ 62, 218.5] [ 61, 218.5] [ 60, 218.5] [ 59, 218.5] [ 58, 218.5] [ 57, 218.5] [ 55.5, 218.5] [ 55, 217.5] [ 54, 217.5] [ 53, 217.5] [ 51.5, 217.5] [ 51, 216.5] [ 49.5, 216.5] [ 49, 215.5] [ 48, 215.5] [ 46.5, 215.5] [ 46, 214.5] [ 44.5, 214.5] [ 43.5, 213.5] [ 43, 212.5] [ 41.5, 212.5] [ 40.5, 211.5] [ 39.5, 210.5] [ 38.5, 209.5] [ 37.5, 208.5] [ 36.5, 207.5] [ 35.5, 206.5] [ 34.5, 205.5] [ 33.5, 204.5] [ 32.5, 203.5] [ 31.5, 202.5] [ 31.5, 201] [ 30.5, 200.5] [ 29.5, 199.5] [ 29.5, 198] [ 28.5, 197.5] [ 28.5, 196] [ 27.5, 195.5] [ 27.5, 194] [ 26.5, 193.5] [ 26.5, 192] [ 26.5, 191] [ 25.5, 190.5] [ 25.5, 189] [ 25.5, 188] [ 24.5, 187.5] [ 24.5, 186] [ 24.5, 185] [ 23.5, 184.5] [ 23.5, 183] [ 23.5, 182] [ 23.5, 181] [ 23.5, 180] [ 23.5, 179] [ 22.5, 178.5] [ 22.5, 177] [ 22.5, 176] [ 22.5, 175] [ 22.5, 174] [ 22.5, 173] [ 22.5, 172] [ 22.5, 171] [ 22.5, 170] [ 22.5, 169] [ 22.5, 168] [ 22.5, 167] [ 22.5, 166] [ 22.5, 165] [ 22.5, 163.5] [ 23.5, 163] [ 23.5, 162] [ 23.5, 161] [ 23.5, 160] [ 23.5, 159] [ 23.5, 157.5] [ 24.5, 157] [ 24.5, 156] [ 24.5, 154.5] [ 25.5, 154] [ 25.5, 153] [ 25.5, 151.5] [ 26.5, 151] [ 26.5, 150] [ 26.5, 148.5] [ 27.5, 148] [ 27.5, 146.5] [ 28.5, 146] [ 28.5, 144.5] [ 29.5, 144] [ 29.5, 142.5] [ 30.5, 141.5] [ 31.5, 141] [ 31.5, 139.5] [ 32.5, 138.5] [ 33.5, 137.5] [ 34.5, 136.5] [ 35.5, 135.5] [ 36.5, 134.5] [ 37.5, 133.5] [ 38.5, 132.5] [ 39.5, 131.5] [ 40.5, 130.5] [ 41.5, 129.5] [ 43, 129.5] [ 43.5, 128.5] [ 44.5, 127.5] [ 46, 127.5] [ 46.5, 126.5] [ 48, 126.5] [ 49, 126.5] [ 49.5, 125.5] [ 51, 125.5] [ 51.5, 124.5] [ 53, 124.5] [ 54, 124.5] [ 55, 124.5] 
-[ 187.5, 31.5] [ 189, 31.5] [ 190, 31.5] [ 191, 31.5] [ 192, 31.5] [ 193, 31.5] [ 194, 31.5] [ 195, 31.5] [ 196, 31.5] [ 197, 31.5] [ 198, 31.5] [ 199, 31.5] [ 200, 31.5] [ 201, 31.5] [ 202, 31.5] [ 203, 31.5] [ 204, 31.5] [ 205, 31.5] [ 206, 31.5] [ 207, 31.5] [ 208, 31.5] [ 209, 31.5] [ 210, 31.5] [ 211, 31.5] [ 212, 31.5] [ 213, 31.5] [ 214, 31.5] [ 215, 31.5] [ 216, 31.5] [ 217, 31.5] [ 218, 31.5] [ 219, 31.5] [ 220, 31.5] [ 221.5, 31.5] [ 221.5, 33] [ 221.5, 34] [ 221.5, 35] [ 221.5, 36] [ 221.5, 37] [ 221.5, 38] [ 221.5, 39] [ 221.5, 40] [ 221.5, 41] [ 221.5, 42] [ 221.5, 43] [ 221.5, 44] [ 221.5, 45] [ 221.5, 46] [ 221.5, 47] [ 221.5, 48] [ 221.5, 49] [ 221.5, 50] [ 221.5, 51] [ 221.5, 52] [ 221.5, 53] [ 221.5, 54] [ 221.5, 55] [ 221.5, 56] [ 221.5, 57] [ 221.5, 58] [ 221.5, 59] [ 221.5, 60] [ 221.5, 61] [ 221.5, 62] [ 221.5, 63] [ 221.5, 64] [ 221.5, 65] [ 221.5, 66] [ 221.5, 67] [ 221.5, 68] [ 221.5, 69] [ 221.5, 70] [ 221.5, 71] [ 221.5, 72] [ 221.5, 73] [ 221.5, 74] [ 221.5, 75] [ 221.5, 76] [ 221.5, 77] [ 221.5, 78] [ 221.5, 79] [ 221.5, 80] [ 221.5, 81] [ 221.5, 82] [ 221.5, 83] [ 221.5, 84] [ 221.5, 85] [ 221.5, 86] [ 221.5, 87] [ 221.5, 88] [ 221.5, 89] [ 221.5, 90] [ 221.5, 91] [ 221.5, 92] [ 221.5, 93] [ 221.5, 94] [ 221.5, 95] [ 221.5, 96] [ 221.5, 97] [ 221.5, 98] [ 221.5, 99] [ 221.5, 100] [ 221.5, 101] [ 221.5, 102] [ 221.5, 103] [ 221.5, 104] [ 221.5, 105] [ 221.5, 106] [ 221.5, 107] [ 221.5, 108] [ 221.5, 109] [ 221.5, 110] [ 221.5, 111] [ 221.5, 112] [ 221.5, 113] [ 221.5, 114] [ 221.5, 115] [ 221.5, 116] [ 221.5, 117] [ 221.5, 118] [ 221.5, 119] [ 221.5, 120] [ 221.5, 121] [ 221.5, 122] [ 221.5, 123] [ 221.5, 124] [ 221.5, 125] [ 221.5, 126] [ 221.5, 127] [ 221.5, 128] [ 221.5, 129] [ 221.5, 130] [ 221.5, 131] [ 221.5, 132] [ 221.5, 133] [ 221.5, 134] [ 221.5, 135] [ 221.5, 136] [ 221.5, 137] [ 221.5, 138] [ 221.5, 139] [ 221.5, 140] [ 221.5, 141] [ 221.5, 142] [ 221.5, 143] [ 221.5, 144] [ 221.5, 145] [ 221.5, 146] [ 221.5, 147] [ 221.5, 148] [ 221.5, 149] [ 221.5, 150] [ 221.5, 151] [ 221.5, 152] [ 221.5, 153] [ 221.5, 154] [ 221.5, 155] [ 221.5, 156] [ 221.5, 157] [ 221.5, 158] [ 221.5, 159] [ 221.5, 160] [ 221.5, 161] [ 221.5, 162] [ 221.5, 163] [ 221.5, 164] [ 221.5, 165] [ 221.5, 166] [ 221.5, 167] [ 221.5, 168] [ 221.5, 169] [ 221.5, 170] [ 221.5, 171] [ 221.5, 172] [ 221.5, 173] [ 221.5, 174] [ 221.5, 175] [ 221.5, 176] [ 221.5, 177] [ 221.5, 178] [ 221.5, 179] [ 221.5, 180] [ 221.5, 181] [ 221.5, 182] [ 221.5, 183] [ 221.5, 184] [ 221.5, 185] [ 221.5, 186] [ 221.5, 187] [ 221.5, 188] [ 221.5, 189] [ 221.5, 190] [ 221.5, 191] [ 221.5, 192] [ 221.5, 193] [ 221.5, 194] [ 221.5, 195] [ 221.5, 196] [ 221.5, 197] [ 221.5, 198] [ 221.5, 199] [ 221.5, 200] [ 221.5, 201] [ 221.5, 202.5] [ 220, 202.5] [ 219, 202.5] [ 218, 202.5] [ 217, 202.5] [ 216, 202.5] [ 215, 202.5] [ 214, 202.5] [ 213, 202.5] [ 212, 202.5] [ 211, 202.5] [ 210, 202.5] [ 209, 202.5] [ 208, 202.5] [ 207, 202.5] [ 206, 202.5] [ 205, 202.5] [ 204, 202.5] [ 203, 202.5] [ 202, 202.5] [ 201, 202.5] [ 200, 202.5] [ 199, 202.5] [ 198, 202.5] [ 197, 202.5] [ 196, 202.5] [ 195, 202.5] [ 194, 202.5] [ 193, 202.5] [ 192, 202.5] [ 191, 202.5] [ 190, 202.5] [ 189, 202.5] [ 187.5, 202.5] [ 187.5, 201] [ 187.5, 200] [ 187.5, 199] [ 187.5, 198] [ 187.5, 197] [ 187.5, 196] [ 187.5, 195] [ 187.5, 194] [ 187.5, 193] [ 187.5, 192] [ 187.5, 191] [ 187.5, 190] [ 187.5, 189] [ 187.5, 188] [ 187.5, 187] [ 187.5, 186] [ 187.5, 185] [ 187.5, 184] [ 187.5, 183] [ 187.5, 182] [ 187.5, 181] [ 187.5, 180] [ 187.5, 179] [ 187.5, 178] [ 187.5, 177] [ 187.5, 176] [ 187.5, 175] [ 187.5, 174] [ 187.5, 173] [ 187.5, 172] [ 187.5, 171] [ 187.5, 170] [ 187.5, 169] [ 187.5, 168] [ 187.5, 167] [ 187.5, 166] [ 187.5, 165] [ 187.5, 164] [ 187.5, 163] [ 187.5, 162] [ 187.5, 161] [ 187.5, 160] [ 187.5, 159] [ 187.5, 158] [ 187.5, 157] [ 187.5, 156] [ 187.5, 155] [ 187.5, 154] [ 187.5, 153] [ 187.5, 152] [ 187.5, 151] [ 187.5, 150] [ 187.5, 149] [ 187.5, 148] [ 187.5, 147] [ 187.5, 146] [ 187.5, 145] [ 187.5, 144] [ 187.5, 143] [ 187.5, 142] [ 187.5, 141] [ 187.5, 140] [ 187.5, 139] [ 187.5, 138] [ 187.5, 137] [ 187.5, 136] [ 187.5, 135] [ 187.5, 134] [ 187.5, 133] [ 187.5, 132] [ 187.5, 131] [ 187.5, 130] [ 187.5, 129] [ 187.5, 128] [ 187.5, 127] [ 187.5, 126] [ 187.5, 125] [ 187.5, 124] [ 187.5, 123] [ 187.5, 122] [ 187.5, 121] [ 187.5, 120] [ 187.5, 119] [ 187.5, 118] [ 187.5, 117] [ 187.5, 116] [ 187.5, 115] [ 187.5, 114] [ 187.5, 113] [ 187.5, 112] [ 187.5, 111] [ 187.5, 110] [ 187.5, 109] [ 187.5, 108] [ 187.5, 107] [ 187.5, 106] [ 187.5, 105] [ 187.5, 104] [ 187.5, 103] [ 187.5, 102] [ 187.5, 101] [ 187.5, 100] [ 187.5, 99] [ 187.5, 98] [ 187.5, 97] [ 187.5, 96] [ 187.5, 95] [ 187.5, 94] [ 187.5, 93] [ 187.5, 92] [ 187.5, 91] [ 187.5, 90] [ 187.5, 89] [ 187.5, 88] [ 187.5, 87] [ 187.5, 86] [ 187.5, 85] [ 187.5, 84] [ 187.5, 83] [ 187.5, 82] [ 187.5, 81] [ 187.5, 80] [ 187.5, 79] [ 187.5, 78] [ 187.5, 77] [ 187.5, 76] [ 187.5, 75] [ 187.5, 74] [ 187.5, 73] [ 187.5, 72] [ 187.5, 71] [ 187.5, 70] [ 187.5, 69] [ 187.5, 68] [ 187.5, 67] [ 187.5, 66] [ 187.5, 65] [ 187.5, 64] [ 187.5, 63] [ 187.5, 62] [ 187.5, 61] [ 187.5, 60] [ 187.5, 59] [ 187.5, 58] [ 187.5, 57] [ 187.5, 56] [ 187.5, 55] [ 187.5, 54] [ 187.5, 53] [ 187.5, 52] [ 187.5, 51] [ 187.5, 50] [ 187.5, 49] [ 187.5, 48] [ 187.5, 47] [ 187.5, 46] [ 187.5, 45] [ 187.5, 44] [ 187.5, 43] [ 187.5, 42] [ 187.5, 41] [ 187.5, 40] [ 187.5, 39] [ 187.5, 38] [ 187.5, 37] [ 187.5, 36] [ 187.5, 35] [ 187.5, 34] [ 187.5, 33] 
-[ 134.5, 38.5] [ 136, 38.5] [ 137.5, 38.5] [ 138, 39.5] [ 139.5, 39.5] [ 140.5, 40.5] [ 141.5, 41.5] [ 141.5, 43] [ 142.5, 43.5] [ 142.5, 45] [ 143.5, 45.5] [ 143.5, 47] [ 144.5, 47.5] [ 144.5, 49] [ 145.5, 49.5] [ 145.5, 51] [ 145.5, 52] [ 146.5, 52.5] [ 146.5, 54] [ 146.5, 55] [ 146.5, 56] [ 147.5, 56.5] [ 147.5, 58] [ 147.5, 59] [ 147.5, 60] [ 148.5, 60.5] [ 148.5, 62] [ 148.5, 63] [ 148.5, 64] [ 149.5, 64.5] [ 149.5, 66] [ 149.5, 67] [ 149.5, 68] [ 149.5, 69] [ 150.5, 69.5] [ 150.5, 71] [ 150.5, 72] [ 150.5, 73] [ 150.5, 74] [ 150.5, 75] [ 151.5, 75.5] [ 151.5, 77] [ 151.5, 78] [ 151.5, 79] [ 151.5, 80] [ 151.5, 81] [ 151.5, 82] [ 151.5, 83] [ 152.5, 83.5] [ 152.5, 85] [ 152.5, 86] [ 152.5, 87] [ 152.5, 88] [ 152.5, 89] [ 152.5, 90] [ 152.5, 91] [ 152.5, 92] [ 153.5, 92.5] [ 153.5, 94] [ 153.5, 95] [ 153.5, 96] [ 153.5, 97] [ 153.5, 98] [ 153.5, 99] [ 153.5, 100] [ 153.5, 101] [ 153.5, 102] [ 153.5, 103] [ 153.5, 104] [ 153.5, 105] [ 153.5, 106] [ 153.5, 107] [ 154.5, 107.5] [ 154.5, 109] [ 154.5, 110] [ 154.5, 111] [ 154.5, 112] [ 154.5, 113] [ 154.5, 114] [ 154.5, 115] [ 154.5, 116] [ 154.5, 117] [ 154.5, 118] [ 154.5, 119] [ 154.5, 120] [ 154.5, 121] [ 154.5, 122] [ 154.5, 123] [ 154.5, 124] [ 154.5, 125] [ 154.5, 126] [ 154.5, 127] [ 154.5, 128] [ 154.5, 129] [ 154.5, 130] [ 154.5, 131] [ 154.5, 132] [ 154.5, 133] [ 154.5, 134] [ 154.5, 135] [ 154.5, 136] [ 154.5, 137] [ 154.5, 138] [ 154.5, 139] [ 154.5, 140] [ 154.5, 141] [ 154.5, 142] [ 154.5, 143] [ 154.5, 144] [ 154.5, 145] [ 154.5, 146] [ 154.5, 147] [ 154.5, 148] [ 154.5, 149.5] [ 153.5, 150] [ 153.5, 151] [ 153.5, 152] [ 153.5, 153] [ 153.5, 154] [ 153.5, 155] [ 153.5, 156] [ 153.5, 157] [ 153.5, 158] [ 153.5, 159] [ 153.5, 160] [ 153.5, 161] [ 153.5, 162] [ 153.5, 163] [ 153.5, 164.5] [ 152.5, 165] [ 152.5, 166] [ 152.5, 167] [ 152.5, 168] [ 152.5, 169] [ 152.5, 170] [ 152.5, 171] [ 152.5, 172] [ 152.5, 173.5] [ 151.5, 174] [ 151.5, 175] [ 151.5, 176] [ 151.5, 177] [ 151.5, 178] [ 151.5, 179] [ 151.5, 180] [ 151.5, 181.5] [ 150.5, 182] [ 150.5, 183] [ 150.5, 184] [ 150.5, 185] [ 150.5, 186] [ 150.5, 187.5] [ 149.5, 188] [ 149.5, 189] [ 149.5, 190] [ 149.5, 191] [ 149.5, 192.5] [ 148.5, 193] [ 148.5, 194] [ 148.5, 195] [ 148.5, 196.5] [ 147.5, 197] [ 147.5, 198] [ 147.5, 199] [ 147.5, 200.5] [ 146.5, 201] [ 146.5, 202] [ 146.5, 203] [ 146.5, 204.5] [ 145.5, 205] [ 145.5, 206] [ 145.5, 207.5] [ 144.5, 208] [ 144.5, 209.5] [ 143.5, 210] [ 143.5, 211.5] [ 142.5, 212] [ 142.5, 213.5] [ 141.5, 214] [ 141.5, 215.5] [ 140.5, 216.5] [ 139.5, 217.5] [ 138, 217.5] [ 137.5, 218.5] [ 136, 218.5] [ 134.5, 218.5] [ 134, 217.5] [ 132.5, 217.5] [ 131.5, 216.5] [ 130.5, 215.5] [ 130.5, 214] [ 129.5, 213.5] [ 129.5, 212] [ 128.5, 211.5] [ 128.5, 210] [ 127.5, 209.5] [ 127.5, 208] [ 126.5, 207.5] [ 126.5, 206] [ 126.5, 205] [ 125.5, 204.5] [ 125.5, 203] [ 125.5, 202] [ 125.5, 201] [ 124.5, 200.5] [ 124.5, 199] [ 124.5, 198] [ 124.5, 197] [ 123.5, 196.5] [ 123.5, 195] [ 123.5, 194] [ 123.5, 193] [ 122.5, 192.5] [ 122.5, 191] [ 122.5, 190] [ 122.5, 189] [ 122.5, 188] [ 121.5, 187.5] [ 121.5, 186] [ 121.5, 185] [ 121.5, 184] [ 121.5, 183] [ 121.5, 182] [ 120.5, 181.5] [ 120.5, 180] [ 120.5, 179] [ 120.5, 178] [ 120.5, 177] [ 120.5, 176] [ 120.5, 175] [ 120.5, 174] [ 119.5, 173.5] [ 119.5, 172] [ 119.5, 171] [ 119.5, 170] [ 119.5, 169] [ 119.5, 168] [ 119.5, 167] [ 119.5, 166] [ 119.5, 165] [ 118.5, 164.5] [ 118.5, 163] [ 118.5, 162] [ 118.5, 161] [ 118.5, 160] [ 118.5, 159] [ 118.5, 158] [ 118.5, 157] [ 118.5, 156] [ 118.5, 155] [ 118.5, 154] [ 118.5, 153] [ 118.5, 152] [ 118.5, 151] [ 118.5, 150] [ 117.5, 149.5] [ 117.5, 148] [ 117.5, 147] [ 117.5, 146] [ 117.5, 145] [ 117.5, 144] [ 117.5, 143] [ 117.5, 142] [ 117.5, 141] [ 117.5, 140] [ 117.5, 139] [ 117.5, 138] [ 117.5, 137] [ 117.5, 136] [ 117.5, 135] [ 117.5, 134] [ 117.5, 133] [ 117.5, 132] [ 117.5, 131] [ 117.5, 130] [ 117.5, 129] [ 117.5, 128] [ 117.5, 127] [ 117.5, 126] [ 117.5, 125] [ 117.5, 124] [ 117.5, 123] [ 117.5, 122] [ 117.5, 121] [ 117.5, 120] [ 117.5, 119] [ 117.5, 118] [ 117.5, 117] [ 117.5, 116] [ 117.5, 115] [ 117.5, 114] [ 117.5, 113] [ 117.5, 112] [ 117.5, 111] [ 117.5, 110] [ 117.5, 109] [ 117.5, 107.5] [ 118.5, 107] [ 118.5, 106] [ 118.5, 105] [ 118.5, 104] [ 118.5, 103] [ 118.5, 102] [ 118.5, 101] [ 118.5, 100] [ 118.5, 99] [ 118.5, 98] [ 118.5, 97] [ 118.5, 96] [ 118.5, 95] [ 118.5, 94] [ 118.5, 92.5] [ 119.5, 92] [ 119.5, 91] [ 119.5, 90] [ 119.5, 89] [ 119.5, 88] [ 119.5, 87] [ 119.5, 86] [ 119.5, 85] [ 119.5, 83.5] [ 120.5, 83] [ 120.5, 82] [ 120.5, 81] [ 120.5, 80] [ 120.5, 79] [ 120.5, 78] [ 120.5, 77] [ 120.5, 75.5] [ 121.5, 75] [ 121.5, 74] [ 121.5, 73] [ 121.5, 72] [ 121.5, 71] [ 121.5, 69.5] [ 122.5, 69] [ 122.5, 68] [ 122.5, 67] [ 122.5, 66] [ 122.5, 64.5] [ 123.5, 64] [ 123.5, 63] [ 123.5, 62] [ 123.5, 60.5] [ 124.5, 60] [ 124.5, 59] [ 124.5, 58] [ 124.5, 56.5] [ 125.5, 56] [ 125.5, 55] [ 125.5, 54] [ 125.5, 52.5] [ 126.5, 52] [ 126.5, 51] [ 126.5, 49.5] [ 127.5, 49] [ 127.5, 47.5] [ 128.5, 47] [ 128.5, 45.5] [ 129.5, 45] [ 129.5, 43.5] [ 130.5, 43] [ 130.5, 41.5] [ 131.5, 40.5] [ 132.5, 39.5] [ 134, 39.5] 
-[ 19.5, 30.5] [ 21, 30.5] [ 22, 30.5] [ 23, 30.5] [ 24, 30.5] [ 25, 30.5] [ 26, 30.5] [ 27, 30.5] [ 28, 30.5] [ 29, 30.5] [ 30, 30.5] [ 31, 30.5] [ 32, 30.5] [ 33, 30.5] [ 34, 30.5] [ 35, 30.5] [ 36, 30.5] [ 37, 30.5] [ 38, 30.5] [ 39, 30.5] [ 40, 30.5] [ 41, 30.5] [ 42, 30.5] [ 43, 30.5] [ 44, 30.5] [ 45, 30.5] [ 46, 30.5] [ 47, 30.5] [ 48, 30.5] [ 49, 30.5] [ 50, 30.5] [ 51, 30.5] [ 52, 30.5] [ 53, 30.5] [ 54, 30.5] [ 55, 30.5] [ 56, 30.5] [ 57, 30.5] [ 58, 30.5] [ 59, 30.5] [ 60, 30.5] [ 61, 30.5] [ 62, 30.5] [ 63, 30.5] [ 64, 30.5] [ 65, 30.5] [ 66, 30.5] [ 67, 30.5] [ 68, 30.5] [ 69, 30.5] [ 70, 30.5] [ 71, 30.5] [ 72, 30.5] [ 73, 30.5] [ 74, 30.5] [ 75, 30.5] [ 76, 30.5] [ 77, 30.5] [ 78, 30.5] [ 79, 30.5] [ 80, 30.5] [ 81, 30.5] [ 82, 30.5] [ 83, 30.5] [ 84.5, 30.5] [ 84.5, 32] [ 84.5, 33] [ 84.5, 34] [ 84.5, 35] [ 84.5, 36] [ 84.5, 37] [ 84.5, 38] [ 84.5, 39] [ 84.5, 40] [ 84.5, 41] [ 84.5, 42] [ 84.5, 43] [ 84.5, 44] [ 84.5, 45] [ 84.5, 46] [ 84.5, 47] [ 84.5, 48] [ 84.5, 49] [ 84.5, 50] [ 84.5, 51] [ 84.5, 52] [ 84.5, 53] [ 84.5, 54] [ 84.5, 55] [ 84.5, 56] [ 84.5, 57] [ 84.5, 58] [ 84.5, 59] [ 84.5, 60] [ 84.5, 61] [ 84.5, 62] [ 84.5, 63] [ 84.5, 64] [ 84.5, 65] [ 84.5, 66] [ 84.5, 67] [ 84.5, 68] [ 84.5, 69] [ 84.5, 70] [ 84.5, 71] [ 84.5, 72] [ 84.5, 73] [ 84.5, 74] [ 84.5, 75] [ 84.5, 76] [ 84.5, 77] [ 84.5, 78] [ 84.5, 79] [ 84.5, 80] [ 84.5, 81] [ 84.5, 82] [ 84.5, 83] [ 84.5, 84] [ 84.5, 85] [ 84.5, 86] [ 84.5, 87] [ 84.5, 88] [ 84.5, 89] [ 84.5, 90] [ 84.5, 91] [ 84.5, 92] [ 84.5, 93] [ 84.5, 94.5] [ 83, 94.5] [ 82, 94.5] [ 81, 94.5] [ 80, 94.5] [ 79, 94.5] [ 78, 94.5] [ 77, 94.5] [ 76, 94.5] [ 75, 94.5] [ 74, 94.5] [ 73, 94.5] [ 72, 94.5] [ 71, 94.5] [ 70, 94.5] [ 69, 94.5] [ 68, 94.5] [ 67, 94.5] [ 66, 94.5] [ 65, 94.5] [ 64, 94.5] [ 63, 94.5] [ 62, 94.5] [ 61, 94.5] [ 60, 94.5] [ 59, 94.5] [ 58, 94.5] [ 57, 94.5] [ 56, 94.5] [ 55, 94.5] [ 54, 94.5] [ 53, 94.5] [ 52, 94.5] [ 51, 94.5] [ 50, 94.5] [ 49, 94.5] [ 48, 94.5] [ 47, 94.5] [ 46, 94.5] [ 45, 94.5] [ 44, 94.5] [ 43, 94.5] [ 42, 94.5] [ 41, 94.5] [ 40, 94.5] [ 39, 94.5] [ 38, 94.5] [ 37, 94.5] [ 36, 94.5] [ 35, 94.5] [ 34, 94.5] [ 33, 94.5] [ 32, 94.5] [ 31, 94.5] [ 30, 94.5] [ 29, 94.5] [ 28, 94.5] [ 27, 94.5] [ 26, 94.5] [ 25, 94.5] [ 24, 94.5] [ 23, 94.5] [ 22, 94.5] [ 21, 94.5] [ 19.5, 94.5] [ 19.5, 93] [ 19.5, 92] [ 19.5, 91] [ 19.5, 90] [ 19.5, 89] [ 19.5, 88] [ 19.5, 87] [ 19.5, 86] [ 19.5, 85] [ 19.5, 84] [ 19.5, 83] [ 19.5, 82] [ 19.5, 81] [ 19.5, 80] [ 19.5, 79] [ 19.5, 78] [ 19.5, 77] [ 19.5, 76] [ 19.5, 75] [ 19.5, 74] [ 19.5, 73] [ 19.5, 72] [ 19.5, 71] [ 19.5, 70] [ 19.5, 69] [ 19.5, 68] [ 19.5, 67] [ 19.5, 66] [ 19.5, 65] [ 19.5, 64] [ 19.5, 63] [ 19.5, 62] [ 19.5, 61] [ 19.5, 60] [ 19.5, 59] [ 19.5, 58] [ 19.5, 57] [ 19.5, 56] [ 19.5, 55] [ 19.5, 54] [ 19.5, 53] [ 19.5, 52] [ 19.5, 51] [ 19.5, 50] [ 19.5, 49] [ 19.5, 48] [ 19.5, 47] [ 19.5, 46] [ 19.5, 45] [ 19.5, 44] [ 19.5, 43] [ 19.5, 42] [ 19.5, 41] [ 19.5, 40] [ 19.5, 39] [ 19.5, 38] [ 19.5, 37] [ 19.5, 36] [ 19.5, 35] [ 19.5, 34] [ 19.5, 33] [ 19.5, 32] 
+[ 2.5, -0.5] [ 4, -0.5] [ 5, -0.5] [ 6, -0.5] [ 7, -0.5] [ 8, -0.5] [ 9, -0.5] [ 10, -0.5] [ 11, -0.5] [ 12, -0.5] [ 13, -0.5] [ 14, -0.5] [ 15, -0.5] [ 16, -0.5] [ 17.5, -0.5] [ 17.5, 1] [ 17.5, 2.5] [ 16, 2.5] [ 15, 2.5] [ 14, 2.5] [ 13.5, 3] [ 13.5, 4] [ 13.5, 5.5] [ 12, 5.5] [ 11, 5.5] [ 10, 5.5] [ 9, 5.5] [ 8, 5.5] [ 6.5, 5.5] [ 6.5, 4] [ 6.5, 3] [ 6, 2.5] [ 5, 2.5] [ 4, 2.5] [ 2.5, 2.5] [ 2.5, 1] 
+[ 17.5, -0.5] [ 19.5, -0.5] [ 19.5, 1] [ 19.5, 2] [ 19.5, 3] [ 19.5, 4] [ 19.5, 5] [ 19.5, 6] [ 19.5, 7] [ 19.5, 8] [ 19.5, 9] [ 19.5, 10] [ 19.5, 11] [ 19.5, 12.5] [ 18, 12.5] [ 17, 12.5] [ 16, 12.5] [ 15, 12.5] [ 13.5, 12.5] [ 13.5, 11] [ 13.5, 10] [ 13.5, 9] [ 13.5, 8] [ 13.5, 7] [ 13.5, 6] [ 13.5, 5] [ 13.5, 4] [ 13.5, 2.5] [ 15, 2.5] [ 16, 2.5] [ 17, 2.5] [ 17.5, 2] [ 17.5, 1] 
+[ 6.5, 5.5] [ 8, 5.5] [ 9, 5.5] [ 10, 5.5] [ 11, 5.5] [ 12, 5.5] [ 13.5, 5.5] [ 13.5, 7] [ 13.5, 8] [ 13.5, 9] [ 13.5, 10] [ 13.5, 11] [ 13.5, 12.5] [ 12, 12.5] [ 11, 12.5] [ 10, 12.5] [ 9, 12.5] [ 8, 12.5] [ 7, 12.5] [ 6, 12.5] [ 5, 12.5] [ 4, 12.5] [ 3, 12.5] [ 2, 12.5] [ 1, 12.5] [ -0.5, 12.5] [ -0.5, 11] [ -0.5, 10] [ -0.5, 8.5] [ 1, 8.5] [ 2, 8.5] [ 3, 8.5] [ 4, 8.5] [ 5, 8.5] [ 6, 8.5] [ 6.5, 8] [ 6.5, 7] 
diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.dbf b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.dbf
deleted file mode 100644
index 0a2e444943b3e3b835f318120bccbb4c58d4a4fb..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:881459241d920b7b0b0f04690ca4b64da9b40043e9761e8089867688fd8c868c
-size 6583
diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp
deleted file mode 100644
index b3adb3d3bb2ccb2ae5bfefd4abb19bd64970103a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ff01566163097422211e31b35823cc6ede15efa3965bcc72f2e89f8b95fc2b30
-size 12860
diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shx b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shx
deleted file mode 100644
index 8eb95e8e60e8cf4597630573a9dcfa4c795487fc..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b033aa81a9212511ecb13bf36bb9b92d26a2272e8fd2e7106fd938f623084664
-size 668
diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.dbf b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.dbf
deleted file mode 100644
index 7f7a14e7e93b6ae0e262ae25f9c8735b61407051..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0f0a24f1a9e719f6b7f9cea9e8dbb89d90436b8837178c1f7e2155f555cd274c
-size 1517
diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp
deleted file mode 100644
index 4df7fd5f11a76ae2d527a9be87e52e380efe6edd..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a02afbec1aac0b3b812282d4877310d5ce035b9fce9aa4d2427244a0c4404840
-size 3228
diff --git a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shx b/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shx
deleted file mode 100644
index e8977f2d43cf2cc9b3b6dc1bd080b67d024f7573..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ce4dc76a26a8fafad2f5e083c3aea4f5494319c7a46cfa7a339a0fd48161aa1d
-size 252
diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.dbf b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.dbf
deleted file mode 100644
index 1fd9789d1f9e5997ac7ecf8151b5501981153bdd..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:abe817af5f07dd14805d6a14fe5a75fb988340ca1ffcc8e81d8e7adee531a42b
-size 6583
diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp
deleted file mode 100644
index b3adb3d3bb2ccb2ae5bfefd4abb19bd64970103a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ff01566163097422211e31b35823cc6ede15efa3965bcc72f2e89f8b95fc2b30
-size 12860
diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shx b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shx
deleted file mode 100644
index 8eb95e8e60e8cf4597630573a9dcfa4c795487fc..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b033aa81a9212511ecb13bf36bb9b92d26a2272e8fd2e7106fd938f623084664
-size 668
diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.dbf b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.dbf
deleted file mode 100644
index a84548112ba0945d770a527ac2d727f420a5e731..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4b5fc99954f197ed6d0bcfc9ecf4178eb77f5893ba17b32a0906555a5c16fb63
-size 1517
diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp
deleted file mode 100644
index 4df7fd5f11a76ae2d527a9be87e52e380efe6edd..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a02afbec1aac0b3b812282d4877310d5ce035b9fce9aa4d2427244a0c4404840
-size 3228
diff --git a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shx b/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shx
deleted file mode 100644
index e8977f2d43cf2cc9b3b6dc1bd080b67d024f7573..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ce4dc76a26a8fafad2f5e083c3aea4f5494319c7a46cfa7a339a0fd48161aa1d
-size 252
diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.dbf b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.dbf
deleted file mode 100644
index a2d1962a67cfe76b01ba616264e3b432995b312b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e675961d8adb260fa0e564558e79e158c2511d7a1cbd464667b2cf7927f702fd
-size 785
diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shp b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shp
deleted file mode 100644
index 8ac2142c3235efbf2e8cf2803f9aeff3bba4649d..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4e720cbe159c9438355353a79261f74beba401408778cd8669afc74ec9301b26
-size 15684
diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shx b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shx
deleted file mode 100644
index ecb34a6fd196a31064ce103077a3e80a450e6181..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.1.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:7af082714c0e2d805f31e4f713599b7dda549f6ff99d81fb33efe41e160ff384
-size 580
diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.dbf b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.dbf
index a2d1962a67cfe76b01ba616264e3b432995b312b..9ed672feb1457ec0eef8027c7e3b062082623cd7 100644
--- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.dbf
+++ b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.dbf
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:e675961d8adb260fa0e564558e79e158c2511d7a1cbd464667b2cf7927f702fd
-size 785
+oid sha256:039b117e408a00a939a7eb4268f1ef488e08a793645a9df2617a999008aab0b2
+size 2466
diff --git a/Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.prj b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.prj
similarity index 100%
rename from Data/Baseline/OTB-Applications/Files/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.1.prj
rename to Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.prj
diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shp b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shp
index 199475acddb250a1349fbf18a06fd729b5283ba0..5521bb667bc0b70f5523f27a3ddd12a988143272 100644
--- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shp
+++ b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shp
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:d51f57a1463023f790db62d41cfea1ea1364d0703fde4b0a179a409536fd4990
-size 22756
+oid sha256:ac714bc9b3d7f861e18549af2ee9df1264cfdb3595a27d43fd621ee3ee854263
+size 50020
diff --git a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shx b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shx
index 21af605da762cae678e5f94bbbb443f172c2984c..375bc0d40fca7103f87b18f4c088c0d474b294d1 100644
--- a/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shx
+++ b/Data/Baseline/OTB/Files/bfTvVectorDataToRandomLineGeneratorOutput.shx
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:a3cced39b706cd73f652e67d5a3e752aadff2a4ba95ce4a24714c0bd73b350e4
-size 580
+oid sha256:db653974b1e2e7b5c5c878f0cef7871fb75a8d7d48739723e26f281e04d32555
+size 1700
diff --git a/Data/Baseline/OTB/Files/feAlign.txt b/Data/Baseline/OTB/Files/feAlign.txt
deleted file mode 100644
index 9803d3b15840ab23977df19847fd69b6f705bdc2..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/feAlign.txt
+++ /dev/null
@@ -1,759 +0,0 @@
-Nb Segment: 758
- 260.335    4.536
- 262.335    4.536
- 270.335    4.536
- 281.331    4.667
- 281.333    4.601
- 282.331    4.667
- 281.335    4.536
- 283.333    4.601
- 282.335    4.536
- 283.335    4.536
- 285.333    4.601
- 285.335    4.536
- 287.333    4.601
- 286.335    4.536
- 287.335    4.536
- 288.335    4.536
- 290.333    4.601
- 289.335    4.536
- 290.335    4.536
- 294.329    4.732
- 291.335    4.536
- 294.331    4.667
- 294.333    4.601
- 294.335    4.536
- 304.344    4.274
- 304.348    4.144
- 350.389   51.394
- 350.408   51.199
- 346.504   50.223
- 346.523   50.028
- 344.581   49.443
- 339.677   48.468
- 340.677   48.468
- 339.716   48.077
- 336.792   47.297
- 328.119   43.981
- 341.888   46.322
- 337.985   45.346
- 338.004   45.151
- 338.023   44.956
- 338.042   44.761
- 337.081   44.371
- 338.061   44.566
- 343.965   45.541
- 337.100   44.176
- 343.985   45.346
- 316.542   39.689
- 324.673   43.758
- 326.639   44.017
- 334.401   45.829
- 332.503   45.052
- 370.378   53.593
- 324.048   40.911
- 328.878   42.205
- 324.082   40.652
- 327.980   41.429
- 328.946   41.688
- 328.014   41.170
- 335.776   42.982
- 337.776   42.982
- 333.495   41.930
- 351.805   46.109
- 390.104   20.072
- 367.315  131.143
- 368.315  131.143
- 367.391  130.760
- 347.105  168.454
- 347.209  168.012
- 366.974  130.417
- 371.562  132.187
- 365.284  129.091
- 365.387  128.648
- 296.949  169.500
- 297.949  169.500
- 297.083  169.000
- 323.805  177.500
- 323.939  177.000
- 294.772  166.727
-  54.788  141.714
-  51.789  101.502
-  49.692   80.905
-  48.742   71.097
-  43.817   16.173
-  43.841   11.269
-  42.500   -0.500
-  72.923  344.523
-  55.601  152.183
-  56.515  159.123
-  56.687  145.242
-  51.683   99.636
-  48.506   67.910
-  46.504   45.106
-  44.372   21.312
-  42.500   -0.500
-  43.500   -0.500
-  43.631    0.491
- 294.713  418.881
- 329.666  388.146
- 333.713  418.881
- 339.277  407.975
- 499.546   30.235
-  43.500   -0.500
-  44.565    0.498
-  46.416   13.470
-  47.135   24.446
-  52.190   86.314
-  55.218  117.247
-  57.918  143.192
-  60.095  161.153
- 143.670  444.545
- 159.787  141.196
- 159.853  142.194
- 255.904  417.603
- 275.969  418.601
- 252.639   47.397
- 261.574   46.399
- 268.546   15.466
- 293.923  402.635
- 295.446  410.618
- 271.855   35.423
- 333.969  418.601
- 333.904  417.603
- 444.808   19.457
- 449.209   71.346
- 469.023    7.483
- 498.500   -0.500
-  21.500  320.500
-  22.500  419.500
-  44.500   -0.500
-  45.500   13.500
-  46.500   20.500
-  47.500   27.500
-  48.500   15.500
-  56.500  133.500
-  57.500  142.500
-  58.500  153.500
-  59.500  161.500
- 143.500  444.500
- 144.500  461.500
- 160.500  143.500
- 160.500  142.500
- 196.500  417.500
- 216.500  421.500
- 236.500  421.500
- 236.500  418.500
- 253.500    9.500
- 253.500   22.500
- 255.500  412.500
- 256.500  419.500
- 265.500   12.500
- 269.500   72.500
- 273.500   11.500
- 295.500  412.500
- 296.500   20.500
- 441.500    4.500
- 442.500   48.500
- 445.500   15.500
- 445.500    2.500
- 453.500    8.500
- 468.500   72.500
- 472.500   44.500
- 499.500    9.500
- 499.500   10.500
-  22.442  427.581
-  22.330  444.545
-  60.185  172.130
- 143.976  480.468
- 144.303  475.479
- 197.161  416.605
- 197.227  415.607
- 216.704  423.590
- 254.603   28.438
- 268.584   13.470
- 268.519   14.468
- 273.323   17.461
- 274.781   10.476
- 262.309  322.806
- 287.584   13.470
- 291.072   82.322
- 296.781   10.476
- 297.715   11.474
- 283.069  448.537
- 418.352   93.299
- 145.847  475.394
- 197.418  417.890
- 197.287  418.881
- 295.365   46.098
- 296.887   42.132
- 301.058   78.816
- 304.407   60.970
- 313.064   10.406
- 297.696   38.731
- 397.832  465.373
- 404.100  438.892
- 412.513  401.622
- 417.610  381.025
- 423.682  355.525
- 419.513  401.622
- 428.512  361.410
- 344.607  234.220
- 346.901  229.390
- 352.642  230.356
- 357.007  217.799
- 232.533  240.967
- 252.926  192.674
- 231.747  258.012
- 347.712  228.657
- 348.033  227.710
- 355.033  227.710
- 201.301  309.000
- 211.485  286.827
- 213.634  284.055
- 240.656  221.231
- 239.508  224.003
- 253.519  192.591
- 254.136  193.515
- 182.809  368.128
- 192.994  345.955
- 209.684  308.076
- 217.955  290.522
- 234.645  252.643
- 232.731  257.262
- 347.064  232.318
- 255.293  190.534
- 255.850  191.431
- 250.985  201.296
- 248.004  209.368
- 244.139  219.234
- 233.197  243.449
- 232.755  244.346
- 224.025  264.077
- 213.968  286.499
- 206.122  304.437
- 188.988  341.209
- 196.103  343.002
- 181.181  375.290
-  85.500  292.217
- 229.000  253.245
- 308.500  117.279
- 214.000  286.154
- 165.337  394.590
- 229.122  359.682
- 314.598  112.276
- 444.645    1.719
- 446.637    1.588
- 482.500   -0.500
- 482.502   -0.435
- 482.504   -0.369
- 484.502   -0.435
- 484.504   -0.369
- 486.502   -0.435
- 488.500   -0.500
- 488.502   -0.435
- 488.504   -0.369
- 425.866  350.358
- 425.349  353.290
- 423.278  362.017
- 423.019  363.983
- 421.466  370.778
- 423.278  364.017
- 421.466  371.778
- 418.102  384.336
- 419.396  380.506
- 417.066  390.199
- 416.031  395.063
- 414.478  401.858
- 414.478  402.858
- 411.113  416.416
- 407.490  430.938
- 425.349  364.290
- 403.867  445.461
- 419.396  388.506
- 401.020  458.087
- 399.984  462.950
- 399.467  465.882
- 399.984  464.950
- 408.266  435.041
- 403.461  455.828
- 470.252  292.115
- 470.499  294.366
- 230.937  358.280
- 234.021  356.979
- 224.122  367.878
- 213.786  256.177
- 216.160  256.172
- 212.002  259.950
- 210.855  260.500
- 206.460  264.436
- 122.154  335.011
- 202.848  266.934
- 196.119  270.218
- 115.630  338.540
- 188.802  273.490
- 184.879  288.270
- 118.186  419.536
- 392.518  211.033
- 181.340  275.835
- 176.383  290.487
- 108.965  341.363
- 117.888  420.188
- 116.896  420.319
- 305.271  458.519
- 102.376  227.250
- 171.228  277.737
- 167.237  292.999
- 170.230  292.802
- 127.322  419.615
- 143.288  419.568
- 189.189  442.560
- 193.181  443.298
- 194.179  443.233
- 279.995  443.608
- 293.965  443.692
- 306.937  443.842
- 305.939  443.908
- 325.896  443.600
- 331.883  444.207
- 311.926  460.515
- 326.894  460.534
- 491.500   -0.500
- 327.500    3.500
- 376.500  189.500
- 377.500  189.500
- 437.500  213.500
- 163.500  266.500
- 164.500  278.500
- 165.500  278.500
- 161.500  293.500
- 158.500  295.500
-  72.500  326.500
-  73.500  326.500
- 253.500  417.500
- 138.500  419.500
- 137.500  419.500
- 139.500  420.500
- 137.500  421.500
- 193.500  442.500
- 332.500  443.500
- 333.500  443.500
- 334.500  444.500
- 333.500  444.500
- 344.500  460.500
- 343.500  460.500
- 340.500  461.500
- 340.500  462.500
- 346.500  471.500
- 165.500  476.500
- 288.500  499.500
- 378.783  185.867
- 406.723  192.698
- 165.241  266.871
- 159.254  278.478
- 100.380  328.619
- 233.095  417.318
- 332.881  443.858
- 333.879  443.924
- 326.894  444.466
- 325.896  444.400
- 310.928  444.419
- 309.930  444.354
- 294.962  444.373
- 295.960  444.438
- 273.010  443.934
- 205.155  443.487
- 204.157  443.421
- 189.189  443.440
- 340.864  461.381
- 340.864  462.381
- 320.907  462.073
- 275.005  462.065
- 228.106  471.991
- 166.239  476.936
- 387.561  129.315
- 375.663  186.748
- 361.783  189.921
- 360.792  189.791
- 166.469  262.207
- 150.606  279.119
- 333.031  462.136
- 369.267  186.407
- 358.478  190.261
- 420.268  222.552
- 372.209  212.992
- 390.844  217.699
- 335.920  254.774
- 147.609  279.317
- 136.821  278.171
- 490.884  356.598
- 505.596  359.525
- 367.543  179.195
- 378.168  216.042
- 297.996  198.560
- 363.679  263.160
- 136.687  278.337
- 126.062  276.490
- 101.913  383.020
- 364.673  178.998
- 365.620  179.320
- 121.312  275.388
- 379.557  137.926
- 337.554  186.941
- 335.169  198.964
- 462.382  215.302
- 432.309  266.928
- 453.360  287.390
- 465.245  220.245
- 454.639  209.639
- 210.687  195.687
- 211.394  196.394
- 351.051  144.868
- 351.500  147.104
- 351.000  147.238
- 349.507  148.038
- 509.214  489.712
- 508.893  489.765
- 509.465  491.636
- 509.206  491.670
- 508.688  490.739
- 423.490   41.070
- 420.173   26.396
- 420.173   30.396
- 384.885  492.383
- 368.078  499.443
- 367.284  498.558
- 448.100  482.194
- 449.203  481.751
- 150.096  311.096
- 159.323  323.292
- 158.345  321.036
- 158.441  324.062
- 158.832  323.269
- 158.006  320.889
- 157.386  321.756
-  51.673  496.620
-  84.498  487.697
- 315.363  441.099
-  80.688  467.592
- 166.559  358.825
- 166.886  363.815
- 269.650  497.528
- 253.478  159.254
- 253.432  143.288
- 252.470  113.352
- 252.404  112.354
- 274.922  440.650
- 251.377   81.421
- 251.442   82.419
- 251.461   67.451
- 250.480   52.483
- 250.434   36.517
- 260.451  128.320
- 332.922  440.650
- 441.254  125.326
- 449.862  119.339
- 464.704   86.410
- 473.872   58.470
-  79.500  454.500
-  80.500  478.500
- 141.500  491.500
- 142.500  485.500
- 215.500  454.500
- 215.500  453.500
- 228.500  498.500
- 235.500  441.500
- 248.500  498.500
- 249.500   28.500
- 250.500   83.500
- 251.500  112.500
- 252.500  145.500
- 253.500  162.500
- 253.500  161.500
- 254.500  436.500
- 254.500  437.500
- 257.500  145.500
- 260.500  132.500
- 266.500  125.500
- 268.500  106.500
- 269.500  498.500
- 274.500  436.500
- 290.500  138.500
- 433.500  102.500
- 438.500   79.500
- 452.500   47.500
- 464.500  115.500
- 471.500   87.500
- 474.500   92.500
- 156.078  440.650
- 250.558   82.419
- 228.612  493.536
- 257.558   82.419
- 253.522  159.254
- 255.830  139.296
- 266.511   98.384
- 268.689   80.423
- 271.372  146.281
- 294.923  107.365
- 297.054  105.369
- 491.128   58.470
- 155.506  442.090
- 252.578  137.717
- 274.273  147.631
- 289.927  119.871
- 292.494  107.973
- 412.205  406.398
- 405.504  464.894
- 393.377  485.980
- 398.474  465.384
- 399.059  462.442
- 407.083  427.133
- 410.424  415.364
- 417.472  384.959
- 405.279  466.365
- 437.665  343.767
- 437.470  344.747
- 344.793  259.359
- 412.523  398.453
- 406.017  426.464
- 395.888  467.999
- 392.523  480.556
- 390.935  490.216
- 396.123  496.977
- 390.572  489.668
- 180.137  373.766
- 186.495  360.832
- 165.902  400.185
- 153.000  376.266
- 151.391  377.465
- 252.205  501.474
- 256.205  501.474
- 260.198  501.278
- 260.200  501.344
- 260.202  501.409
- 260.205  501.474
- 264.198  501.278
- 391.162  500.166
- 391.164  500.232
- 391.166  500.297
- 391.168  500.363
- 391.170  500.428
- 391.172  500.493
- 393.170  500.428
- 393.172  500.493
- 395.170  500.428
- 395.172  500.493
- 397.170  500.428
- 397.172  500.493
- 399.170  500.428
- 422.170  500.428
- 422.172  500.493
- 424.170  500.428
- 424.172  500.493
- 170.864  228.008
- 110.917  338.054
- 168.375  219.000
- 106.887  339.500
- 369.256  123.951
- 352.454  112.033
- 148.217  281.921
- 106.576  385.403
- 111.533  384.751
- 167.054  446.441
- 251.958    4.953
- 304.845    5.487
- 305.843    5.421
- 321.808  113.375
- 353.740  188.282
- 363.719  201.628
- 129.222  262.998
- 103.277  384.698
- 176.121  415.924
- 243.975  416.476
- 258.943  416.495
- 117.247  448.782
- 117.247  449.782
- 184.104  446.400
- 214.040  445.438
- 299.856  445.814
- 310.832  446.094
- 307.838  446.290
- 197.076  477.550
- 217.033  477.242
- 269.920  476.776
- 274.909  477.449
- 275.907  477.383
- 289.877  477.468
- 251.500    4.500
- 255.500    5.500
- 347.500  187.500
- 352.500  188.500
- 353.500  201.500
- 137.500  262.500
- 140.500  281.500
- 141.500  294.500
- 140.500  294.500
- 136.500  296.500
-  96.500  384.500
-  99.500  397.500
- 154.500  415.500
- 174.500  416.500
- 197.500  442.500
- 198.500  442.500
- 157.500  445.500
- 286.500  446.500
- 130.500  459.500
- 171.500  464.500
- 155.500  469.500
- 147.500  470.500
- 199.500  476.500
- 170.500  476.500
- 169.500  477.500
- 420.500  498.500
-  25.500  500.500
- 359.727  184.111
- 342.763  186.999
- 132.215  262.199
-  99.286  398.040
- 257.945  415.439
- 243.975  415.524
- 239.984  416.262
- 218.031  415.823
- 170.134  415.684
- 113.256  412.956
- 304.845  445.513
- 289.877  445.532
- 219.029  442.889
- 199.072  442.581
- 200.070  442.646
- 312.828  470.037
- 241.980  469.393
- 156.164  464.768
- 305.843  476.579
- 184.104  469.600
- 274.909  476.551
- 270.918  477.290
- 229.008  476.543
- 214.040  476.562
- 418.601  497.969
- 325.685   45.443
- 352.454  181.967
- 355.429  183.359
- 345.514  185.054
- 339.566  185.270
- 343.531  186.793
- 323.702  222.182
- 126.405  234.207
- 118.473  278.163
- 181.926  415.517
- 238.438  467.957
- 432.761  498.540
- 434.969  132.120
- 333.948  169.026
- 353.563  173.928
- 346.698  179.562
- 348.660  180.952
- 351.602  181.537
- 345.717  185.367
- 335.909  184.416
- 324.140  221.075
- 120.137  231.496
- 122.098  232.886
-  86.790  337.863
- 349.640  482.147
- 359.448  485.098
- 436.098  129.486
- 340.472  168.863
- 334.676  168.310
- 339.506  175.604
- 347.233  179.675
- 262.232  374.899
-  84.501  381.276
- 351.097  481.710
- 353.029  483.228
- 351.097  485.710
- 352.705  171.397
- 342.289  168.861
- 340.395  169.218
- 301.571  172.039
- 114.079  228.394
- 365.015  484.576
- 353.652  481.718
- 356.493  482.683
- 346.879  168.389
- 345.955  170.006
- 341.335  169.093
-  71.006  253.279
-  21.018  395.796
-  21.999  411.763
-  21.933  411.766
-  21.868  411.768
-  21.802  411.770
-  21.737  411.772
-  21.672  411.774
-  21.606  411.776
-  21.541  411.778
-  21.606  413.776
-  21.541  413.778
-  21.606  415.776
-  21.541  415.778
-  21.606  417.776
-  21.606  418.776
-  21.541  417.778
-  21.541  418.778
-  21.606  420.776
-  21.541  419.778
-  21.541  420.778
-  21.737  424.772
-  21.672  423.774
-  21.606  423.776
-  21.672  424.774
-  21.606  424.776
-  21.541  423.778
-  21.541  424.778
-  21.606  426.776
-  21.541  425.778
-  21.541  426.778
-  21.606  428.776
-  21.541  427.778
-  21.541  428.778
-  21.606  430.776
-  21.541  430.778
-  21.606  432.776
-  21.541  432.778
-  21.606  434.776
-  21.541  434.778
-  21.606  436.776
-  21.541  441.778
-  21.606  443.776
-  21.541  443.778
-  22.129  454.759
-  22.129  455.759
-  22.064  454.761
-  21.999  454.763
-  21.868  454.768
-  21.868  455.768
-  21.802  454.770
-  21.737  454.772
-  21.737  455.772
-  21.672  454.774
-  21.606  454.776
-  21.606  455.776
-  21.541  454.778
-  21.737  458.772
-  21.541  455.778
-  21.672  458.774
-  21.606  458.776
-  21.541  457.778
-  21.541  458.778
-  21.606  460.776
-  21.541  459.778
-  21.541  460.778
-  21.737  464.772
-  21.672  464.774
-  21.606  464.776
-  21.541  463.778
-  21.541  464.778
-  21.606  466.776
-  21.541  466.778
-  21.606  468.776
diff --git a/Data/Baseline/OTB/Files/feBreakAngularPathListOutput.txt b/Data/Baseline/OTB/Files/feBreakAngularPathListOutput.txt
deleted file mode 100644
index 0f5ea993520cabcf3ff996765f2e7c2173b782cb..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/feBreakAngularPathListOutput.txt
+++ /dev/null
@@ -1,171 +0,0 @@
---------------------------------------------------------------------------
-MAX ANGULAR :0.174533(10 deg.)
-INPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
-OUTPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 3: [11, 1], [21, 11]
-Path 4: [21, 11], [31, 11]
-Path 5: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 6: [11, 1], [21, 11]
-Path 7: [21, 11], [31, 11], [41, 11]
-Path 8: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 9: [11, 1], [21, 11]
-Path 10: [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 11: [1, 11], [5, 11], [7, 11], [11, 11]
-Path 12: [11, 11], [21, 1]
-Path 13: [21, 1], [31, 1], [41, 1]
-Path 14: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 15: [11, 1], [21, 11], [31, 21], [41, 31]
-Path 16: [1, 1], [5, 1]
-Path 17: [5, 1], [5, 11], [5, 21]
-Path 18: [1, 1], [31, 1], [41, 1]
---------------------------------------------------------------------------
-MAX ANGULAR :0.349066(20 deg.)
-INPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
-OUTPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 3: [11, 1], [21, 11]
-Path 4: [21, 11], [31, 11]
-Path 5: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 6: [11, 1], [21, 11]
-Path 7: [21, 11], [31, 11], [41, 11]
-Path 8: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 9: [11, 1], [21, 11]
-Path 10: [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 11: [1, 11], [5, 11], [7, 11], [11, 11]
-Path 12: [11, 11], [21, 1]
-Path 13: [21, 1], [31, 1], [41, 1]
-Path 14: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 15: [11, 1], [21, 11], [31, 21], [41, 31]
-Path 16: [1, 1], [5, 1]
-Path 17: [5, 1], [5, 11], [5, 21]
-Path 18: [1, 1], [31, 1], [41, 1]
---------------------------------------------------------------------------
-MAX ANGULAR :0.523599(30 deg.)
-INPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
-OUTPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 3: [11, 1], [21, 11]
-Path 4: [21, 11], [31, 11]
-Path 5: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 6: [11, 1], [21, 11]
-Path 7: [21, 11], [31, 11], [41, 11]
-Path 8: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 9: [11, 1], [21, 11]
-Path 10: [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 11: [1, 11], [5, 11], [7, 11], [11, 11]
-Path 12: [11, 11], [21, 1]
-Path 13: [21, 1], [31, 1], [41, 1]
-Path 14: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 15: [11, 1], [21, 11], [31, 21], [41, 31]
-Path 16: [1, 1], [5, 1]
-Path 17: [5, 1], [5, 11], [5, 21]
-Path 18: [1, 1], [31, 1], [41, 1]
---------------------------------------------------------------------------
-MAX ANGULAR :0.872665(50 deg.)
-INPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
-OUTPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1]
-Path 8: [5, 1], [5, 11], [5, 21]
-Path 9: [1, 1], [31, 1], [41, 1]
---------------------------------------------------------------------------
-MAX ANGULAR :1.5708(90 deg.)
-INPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
-OUTPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
---------------------------------------------------------------------------
-MAX ANGULAR :2.44346(140 deg.)
-INPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
-OUTPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
---------------------------------------------------------------------------
-MAX ANGULAR :3.14159(180 deg.)
-INPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
-OUTPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-Path 5: [1, 11], [5, 11], [7, 11], [11, 11], [21, 1], [31, 1], [41, 1]
-Path 6: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 21], [41, 31]
-Path 7: [1, 1], [5, 1], [5, 11], [5, 21]
-Path 8: [1, 1], [31, 1], [41, 1]
diff --git a/Data/Baseline/OTB/Files/feTvLikelihoodPathOutput.txt b/Data/Baseline/OTB/Files/feTvLikelihoodPathOutput.txt
deleted file mode 100644
index 7e18b94533e5f25319caa19feb2f28bd5c96573a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/feTvLikelihoodPathOutput.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-INPUT list of Path : 
-Path 1: [157, 335], [204, 376]
-Path 2: [21, 305], [35, 308], [77, 354], [85, 358]
-Path 3: [73, 160], [126, 173]
-OUTPUT list of Path : 
-Path 1: [157, 335], [204, 376] Value: 4.68584e-07
-Path 2: [21, 305], [35, 308], [77, 354], [85, 358] Value: 1.87363e-07
-Path 3: [73, 160], [126, 173] Value: 9.76259e-08
diff --git a/Data/Baseline/OTB/Files/feTvLinkPathOutput.txt b/Data/Baseline/OTB/Files/feTvLinkPathOutput.txt
deleted file mode 100644
index 708fabe135918d33f8ab62d9af7bba6f1b48bf2d..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/feTvLinkPathOutput.txt
+++ /dev/null
@@ -1,23 +0,0 @@
-Maximum distance threshold: 30 (30)
-Maximum angle threshold: 0.698132 (40)
-INPUT list of Path : 
-Path 1: [1, 1], [51, 1]
-Path 2: [61, 1], [91, 1]
-Path 3: [111, 11], [211, 11]
-Path 4: [1, 51], [51, 51]
-Path 5: [71, 71], [71, 91]
-Path 6: [71, 131], [71, 201]
-Path 7: [141, 111], [101, 111]
-Path 8: [151, 111], [191, 111]
-Path 9: [111, 71], [141, 71]
-Path 10: [181, 71], [151, 71]
-Path 11: [11, 131], [11, 101]
-Path 12: [11, 171], [11, 141]
-OUTPUT list of Path : 
-Path 1: [1, 51], [51, 51]
-Path 2: [71, 71], [71, 91]
-Path 3: [71, 131], [71, 201]
-Path 4: [211, 11], [111, 11], [91, 1], [61, 1], [51, 1], [1, 1]
-Path 5: [101, 111], [141, 111], [151, 111], [191, 111]
-Path 6: [111, 71], [141, 71], [151, 71], [181, 71]
-Path 7: [11, 101], [11, 131], [11, 141], [11, 171]
diff --git a/Data/Baseline/OTB/Files/feTvRemoveTortuousPathOutput.txt b/Data/Baseline/OTB/Files/feTvRemoveTortuousPathOutput.txt
deleted file mode 100644
index fffefd4d766972197ca2a3b918db2f8e303d2fc5..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/feTvRemoveTortuousPathOutput.txt
+++ /dev/null
@@ -1,8 +0,0 @@
-Minimum Mean Distance: 10 (10)
-INPUT list of Path : 
-Path 1: [1, 1], [1, 11]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1]
-Path 3: [1, 1], [7, 7], [21, 21], [31, 31], [41, 41]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-OUTPUT list of Path : 
-Path 1: [1, 1], [7, 7], [21, 21], [31, 31], [41, 41]
diff --git a/Data/Baseline/OTB/Files/feTvSimplifyPathOutput.txt b/Data/Baseline/OTB/Files/feTvSimplifyPathOutput.txt
deleted file mode 100644
index 1da7ddfb7e7e9e2d787dcd41ac9d007c39a44af7..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/feTvSimplifyPathOutput.txt
+++ /dev/null
@@ -1,11 +0,0 @@
-TOLERANCE: 1(1)
-INPUT list of Path : 
-Path 1: [1, 1], [5, 1], [7, 1], [11, 1], [21, 1], [31, 1]
-Path 2: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [5, 5], [7, 7], [11, 11], [21, 21], [31, 31], [41, 41]
-Path 4: [1, 1], [5, 1], [7, 1], [11, 1], [21, 11], [31, 11], [41, 11], [58, 11], [70, 11]
-OUTPUT list of Path : 
-Path 1: [1, 1], [31, 1]
-Path 2: [1, 1], [11, 1], [21, 11], [31, 11]
-Path 3: [1, 1], [41, 41]
-Path 4: [1, 1], [11, 1], [21, 11], [70, 11]
diff --git a/Data/Baseline/OTB/Files/feTvVectorizationPathListOutput.txt b/Data/Baseline/OTB/Files/feTvVectorizationPathListOutput.txt
deleted file mode 100644
index 348001835a5c6b8f4c03b9562ef9b47f41688704..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/feTvVectorizationPathListOutput.txt
+++ /dev/null
@@ -1,385 +0,0 @@
-Path 0: [523, 4], [522, 4], [521.519, 5], [521, 5.47291], [520.558, 6], [520, 6.41957], [519.517, 7], [519, 7.20893], [519, 8]
-Path 1: [666, 0], [666, 0.755514], [666.534, 1], [667, 1.54937], [668, 2], [669, 2], [670, 3], [671, 4], [671, 5], [672, 5.56069], [673, 6.5845], [673, 8], [673.481, 9], [674, 9.47953], [674.36, 10], [675, 10.6091], [675.621, 12], [676.458, 13], [677, 13.577], [677, 15], [677, 16], [677.422, 17], [678, 17.4808], [678, 18], [678.364, 19], [679, 19], [680, 19.9039]
-Path 2: [595, 4.40433], [594, 5], [593, 6.39503], [592.184, 7], [592, 7.50127], [591, 8.36608], [590, 9.17569], [589, 10], [588, 11], [587, 11], [586.346, 12], [585, 12.5495], [584.553, 14], [584, 14.5519], [583.543, 16], [583, 16.5361], [582.445, 18], [581.502, 19], [581, 19.513], [580, 20.6132], [579.468, 22], [578.542, 23], [578, 23.4978], [577.545, 24], [577, 24.5768], [576.326, 26], [575.445, 27], [574.581, 28], [574, 28.6009], [573.411, 30], [572.445, 31], [571.434, 32], [570.481, 33], [570, 34], [569.454, 35], [568.566, 36], [568, 36.5643], [567.429, 38], [566.521, 39], [566, 39.6024], [565.476, 41], [565, 42], [564.421, 43], [563.547, 44], [563, 44.543], [562, 45.6124], [561.433, 47], [561, 48], [560.393, 49], [559.581, 50], [559, 50.5958], [558.48, 52], [557.499, 53], [556.523, 54], [556, 54.5515], [555.42, 56], [555, 57], [554.467, 58], [554, 59], [553.446, 60], [552.531, 61], [552, 61.5413], [551.499, 63], [551, 64], [550.571, 65], [550, 65.5952], [549.552, 67], [549, 67.5817], [548.426, 69], [547.443, 70], [546.491, 71], [545.546, 72], [545, 72.5362], [544.436, 74], [543.477, 75], [542.467, 76], [541.449, 77], [540.513, 78], [540, 78.5659], [539.511, 80], [539, 80.5386], [538.448, 82], [537.487, 83], [536.504, 84], [536, 84.5229], [535, 85.5753], [534.473, 87], [534, 88], [533.428, 89], [532.493, 90], [531.545, 91], [531, 91.5473], [530.471, 93], [530, 94], [529.487, 95], [529, 96], [528.47, 97], [527.53, 98], [527, 98.5852], [526, 99.6065], [525.437, 101], [525, 102], [524.431, 103], [523.519, 104], [523, 104.522], [522, 105.524], [521, 106.55], [520.409, 108], [519.539, 109], [519, 109.546], [518.488, 111], [517.542, 112], [517, 112.57], [516, 113.611], [515.494, 115], [515, 116], [514.478, 117], [513.597, 118], [513, 118.568], [512.418, 120], [511.505, 121], [511, 121.593], [510.533, 123], [510, 123.522], [509.532, 125], [509, 125.535], [508.383, 127], [507.457, 128], [507, 129], [506.463, 130], [506, 131], [505.428, 132], [504.472, 133], [503.459, 134], [502.495, 135], [502, 136], [501.424, 137], [500.563, 138], [500, 138.53], [499.495, 140], [498.496, 141], [497.439, 142], [496.45, 143], [495.552, 144], [495, 144.55], [494.521, 146], [494, 146.501], [493, 147.526], [492, 148.568], [491.361, 150], [490.486, 151], [490, 152], [489.467, 153], [488.591, 154], [488, 154.596], [487.456, 156], [486.519, 157], [486, 157.591], [485.464, 159], [485, 160], [484.43, 161], [483.513, 162], [483, 162.518], [482, 163.551], [481.416, 165], [480.575, 166], [480, 166.58], [479.525, 168], [479, 168.519], [478, 169.568], [477.474, 171], [476.517, 172], [476, 172.565], [475.521, 174], [475, 174.584], [474.497, 176], [473.556, 177], [473, 177.588], [472.442, 179], [471.477, 180], [471, 181], [470.439, 182], [469.575, 183], [469, 183.578], [468.403, 185], [467.437, 186], [466.523, 187], [466, 187.574], [465.462, 189], [464.603, 190], [464, 190.593], [463.477, 192], [462.486, 193], [461.511, 194], [461, 194.557], [460.416, 196], [459.538, 197], [459, 197.547], [458.44, 199], [457.462, 200], [456.52, 201], [456, 201.543], [455.547, 203], [455, 203.535], [454.528, 205], [454, 205.47], [453.565, 206], [453, 206.526], [452, 207.595], [451.469, 209], [451, 210], [451, 211], [450.469, 212], [450, 213], [449.523, 214], [449, 214.559], [448.479, 216], [447.504, 217], [447, 217.563], [446, 218.567], [445.393, 220], [444.451, 221], [443.514, 222], [443, 222.543], [442, 223.567], [441.486, 225], [441, 226], [441, 227], [440.418, 228], [439.526, 229], [439, 229.43], [438.533, 230], [438, 230.467], [437.442, 231], [437, 232], [436.371, 233], [435.447, 234], [434.549, 235], [434, 235.55], [433, 236.579], [432, 237.609], [431.519, 239], [431, 239.544], [431, 241], [430.444, 242], [429.476, 243], [428.475, 244], [427.544, 245], [427, 245.597], [426.566, 247], [426, 247.584], [425.563, 249], [425, 249.555], [424.444, 251], [423.481, 252], [422.539, 253], [422, 253.552], [421.45, 255], [420.594, 256], [420, 256.601], [419.427, 258], [418.42, 259], [417.461, 260], [417, 261], [416.444, 262], [416, 263], [415.454, 264], [414.528, 265], [414, 265.546], [413.399, 267], [412.495, 268], [412, 269], [411.465, 270], [410.462, 271], [409.469, 272], [409, 273], [408.304, 274], [407.434, 275], [407, 276], [406.494, 277], [405.591, 278], [405, 278.578], [404.425, 280], [403.43, 281], [402.406, 282], [401.475, 283], [401, 284], [400.479, 285], [400, 286], [399.457, 287], [399, 288], [398.428, 289], [398, 290], [397.497, 291], [397, 292], [396.462, 293], [396, 294], [395.466, 295], [394.555, 296], [394, 296.644], [393, 297.65], [392.38, 299], [391.44, 300], [390.475, 301], [389.473, 302], [388.48, 303], [387.489, 304], [386.566, 305], [386, 305.582], [385.494, 307], [384.592, 308], [384, 308.591], [383.529, 310], [383, 310.566], [382.427, 312], [381.467, 313], [380.554, 314], [380, 314.589], [379.458, 316], [378.554, 317], [378, 317.506], [377, 318.589], [376, 319.614], [375.478, 321], [375, 322], [374.534, 323], [374, 323.561], [373.463, 325], [372.553, 326], [372, 326.537], [371.373, 328], [370.462, 329], [370, 330], [369.412, 331], [369, 332], [368.457, 333], [367.533, 334], [367, 334.558], [366, 335.554], [365.494, 337], [364.544, 338], [364, 338.567], [363.391, 340], [362.452, 341], [361.563, 342], [361, 342.549], [360.517, 344], [360, 344.503], [359, 345.583], [358, 346.599], [357, 347.605], [356.373, 349], [355.508, 350], [355, 350.572], [354.501, 352], [354, 352.542], [353.458, 354], [352.436, 355], [351.452, 356], [351, 357], [350.524, 358], [350, 358.496], [350, 359], [349.571, 360], [349, 360.549], [348.421, 362], [347.536, 363], [347, 363.619], [346.47, 365], [345.614, 366], [345, 366.55], [344.512, 368], [344, 368.529], [343, 369.573], [342.391, 371], [341.481, 372], [341, 373], [340.48, 374], [339.607, 375], [339, 375.466], [339, 376], [338.458, 377], [337, 377.581], [337, 379], [336.5, 380], [336, 381], [336, 382], [335.493, 383], [334.49, 384], [333.407, 385], [333, 386], [332.134, 387], [331, 387.535], [330.501, 389], [330, 389.586], [329.436, 391], [328.529, 392], [328, 392.45], [327.54, 393], [327, 393.503], [326, 394.572], [326, 396], [325.479, 397], [324.556, 398], [324, 398.589], [323.392, 400], [322.481, 401], [322, 402], [321.554, 403], [321, 403.575], [320.463, 405], [319.458, 406], [318.473, 407], [317.524, 408], [317, 408.554], [316.469, 410], [316, 411], [315.436, 412], [314.472, 413], [313.462, 414], [312.48, 415], [312, 416], [311.431, 417], [311, 418], [310.453, 419], [309.523, 420], [309, 420.48], [308.528, 421], [308, 421.51], [307, 422.548], [306.423, 424], [306, 425], [305.497, 426], [305, 427], [304.43, 428], [303.449, 429], [302.441, 430], [301.467, 431], [301, 432], [300.465, 433], [300, 434], [299.455, 435], [298.516, 436], [298, 436.49], [297.529, 437], [297, 437.48], [296.553, 438], [296, 438.55], [295.396, 440], [294.494, 441], [294, 442], [293.419, 443], [292.443, 444], [291.41, 445], [290.513, 446], [290, 446.581], [289.587, 448], [289, 448.568], [288.524, 450], [288, 450.526], [287, 451.555], [286.407, 453], [285.593, 454], [285, 454.589], [285, 456], [284.404, 457], [283.516, 458], [283, 458.556], [282.393, 460], [281.446, 461], [280.553, 462], [280, 462.554], [279.474, 464], [278.545, 465], [278, 465.531], [277, 466.552], [276, 467.568], [275, 468.603], [274.559, 470], [274, 470.531], [273.55, 472], [273, 472.543], [272.454, 474], [271.475, 475], [270.514, 476], [270, 476.597], [269.438, 478], [268.567, 479], [268, 479.532], [267.463, 481], [266.514, 482], [266, 482.493], [265.461, 483], [264.554, 484], [264, 484.59], [263.485, 486], [262.545, 487], [262, 487.511], [261, 488.558], [260.422, 490], [259.551, 491], [259, 491.58], [258.548, 493], [258, 493.545], [257.503, 495], [257, 495.531], [256, 496.569], [255.387, 498], [254.484, 499], [254, 500], [253.459, 501], [252.538, 502], [252, 502.517], [251, 503.562], [250.414, 505], [249.492, 506], [249, 507], [248.47, 508], [248, 509], [247.463, 510], [246.551, 511], [246, 511.572], [245.403, 513], [244.533, 514], [244, 514.57], [244, 516], [243.423, 517], [242.605, 518], [242, 518.531], [241.505, 520], [241, 520.46], [240.531, 521], [240, 521.522], [239, 522.615], [239, 524], [238.422, 525], [238, 526], [237.507, 527], [237, 527.554], [236.404, 529], [235.501, 530], [235, 530.581], [234.443, 532], [234, 533], [233.533, 534], [233, 534.53], [232.516, 536], [232, 536.509], [231, 537.504], [230, 538.505], [229, 539.539], [228.501, 541], [228, 541.497], [228, 542], [228, 543], [227.53, 544], [227, 544.516], [226.494, 546], [226, 547], [225.482, 548], [225, 549], [225, 550], [225, 551], [224.515, 552], [224, 552.51], [224, 554], [223.497, 555], [223, 556], [222.403, 557], [222, 558], [221.393, 559], [221, 560], [221, 561], [220.486, 562], [220, 563], [219.529, 564], [219, 564.561], [218.415, 566], [217.494, 567], [217, 568], [217, 569], [216.436, 570], [216, 571], [216, 572], [215.508, 573], [215, 573.534], [214.446, 575], [213.51, 576], [213, 576.54], [212, 577.579], [212, 579], [212, 580], [211.465, 581], [211, 582], [210.588, 583], [210, 583.55], [209.525, 585], [209, 585.53], [208, 586.596], [207.517, 588], [207, 588.591], [207, 590], [207, 591], [206.529, 592], [206, 592.505], [206, 594], [205.529, 595], [205, 595.532], [204.459, 597], [203.562, 598], [203, 598.607], [203, 600], [202.435, 601], [202, 602], [202, 603], [202, 604], [201.468, 605], [201, 606], [200.487, 607], [199.574, 608], [199, 608.581], [198.535, 610], [198, 610.571], [198, 612], [197.572, 613], [197, 613.487], [197, 614], [197, 615], [197, 616], [196.481, 617], [196, 618], [195.47, 619], [195, 620], [194.416, 621], [194, 622], [193.433, 623], [193, 624], [193, 625], [192.462, 626], [192, 627], [192, 628], [191.488, 629], [191, 630], [190.421, 631], [190, 632], [189.449, 633], [189, 634], [188.409, 635], [188, 636], [188, 637], [188, 638], [187.532, 639], [187, 639.531], [187, 641], [186.451, 642], [185.494, 643], [184.545, 644], [184, 644.566], [183.51, 646], [183, 646.54], [183, 648], [183, 649], [182.451, 650], [182, 651], [182, 652], [181.528, 653], [181, 653.542], [180.47, 655], [179.537, 656], [179, 656.539], [178.536, 658], [178, 658.538], [178, 660], [178, 661], [178, 662], [178, 663], [178, 664], [177.539, 665], [177, 665.459], [177, 666], [176.523, 667], [176, 667.545], [175.479, 669], [175, 670], [175, 671], [175, 672], [174.442, 673], [174, 674], [173.462, 675], [173, 676], [173, 677], [172.565, 678], [172, 678.505], [171, 679.533], [170.305, 681], [170, 682], [169.403, 683], [169, 684], [168.544, 685], [168, 685.535], [168, 687], [168, 688], [168, 689]
-Path 3: [510, 10], [509, 11], [508, 11], [507.425, 11], [506.563, 12], [506, 13], [506, 14], [505.388, 15], [504.551, 16], [504, 16.5955], [504, 18], [503.431, 19], [503, 20], [503, 21], [502.437, 22], [502, 23], [502, 24], [502, 25], [502.553, 26], [503.494, 27], [504, 27.4621], [504.389, 28], [505, 28.501]
-Path 4: [642, 14], [641, 15], [640, 15.2508], [639, 16], [638, 16.4707], [637, 17.3218], [635.536, 18], [634.546, 19], [634, 19.53], [633, 20.442], [632, 21.2918], [631, 22.1775], [630, 23], [629, 23.4577], [628, 24.3779], [627, 25.2208], [626, 26], [625, 26], [624.439, 27], [623.425, 28], [622.424, 29], [621.435, 30], [620.43, 31], [619.411, 32], [618.39, 33], [617.41, 34], [616.434, 35], [615.42, 36], [614.338, 37], [613, 38]
-Path 5: [505, 34], [504, 34], [504, 35], [503.679, 36], [503, 36]
-Path 6: [503, 38], [503, 38.5973], [504, 39], [504.441, 40], [505, 40.3571], [505.446, 41], [506, 41.363], [506.175, 42], [507, 42]
-Path 7: [611, 39], [610, 40], [609, 40], [608, 40.3808], [607, 41.3086], [606, 42], [605, 42.4634], [604, 43], [603.373, 44], [602.219, 45], [601, 45.376], [600.395, 46], [599.282, 47], [598.196, 48], [597, 48.5944], [596, 49.6023], [595, 50.5688], [594, 51.4515], [593.484, 52], [592.412, 53]
-Path 8: [990, 45], [989, 46], [988, 46], [987, 46.4471], [986.513, 47], [986, 47.4302], [985.459, 48], [984.427, 49], [983.423, 50], [982.291, 51], [981.047, 52], [980, 53], [979, 53]
-Path 9: [489, 47], [490, 47.4408], [490.551, 48], [491.611, 49], [493, 49.6206], [494, 50.555], [495, 51.5412], [495.606, 53], [496.612, 54], [498, 54.4771], [498.539, 55], [500, 55.5574], [501, 56.4921], [501.44, 57], [502, 57.4964], [502.423, 58], [503, 58.4437], [503.516, 59], [505, 59]
-Path 10: [485, 49], [484, 49], [483.552, 50], [483, 50.5266], [483, 52], [483, 53], [483, 54], [483, 55], [483, 56], [483, 57], [483, 58], [483, 59], [483, 60]
-Path 11: [507, 49], [507, 50], [508, 50], [509, 50], [510, 50], [511, 50], [512, 50], [513, 50.5154], [514, 51.3798], [514.522, 52], [515.124, 53], [516, 53]
-Path 12: [971, 56], [970, 57], [969, 57], [968, 57.3194], [967.37, 58], [966.245, 59], [965, 60], [964, 60.1443], [963.192, 61], [962, 61.2191], [961.287, 62], [960, 63], [959, 63.3283], [958.336, 64], [957.294, 65], [956.276, 66], [955, 66.4461], [954.493, 67], [954, 68], [954, 69], [953.319, 70], [954, 70]
-Path 13: [591, 55], [591.973, 55], [592, 56], [592.486, 57], [593, 58], [593, 59.4884], [593.541, 60], [594, 60.5082], [595, 61], [595.504, 62], [596.449, 63], [597, 63.5539], [597.563, 65], [598.464, 66], [599, 66.5251], [600, 67.4701], [600.483, 68], [601, 68.4728], [601.406, 69], [602, 69.4996], [602, 70], [602, 71], [602.605, 72], [603.435, 73], [604, 73.567], [604.542, 75], [605.486, 76], [606, 76.5382], [606.574, 78], [607.479, 79], [608, 79.5383], [608.583, 81], [609.575, 82], [610.502, 83], [611, 84], [611.506, 85], [612.457, 86], [613, 86.5307], [614, 87.5216], [615, 88.5089], [616, 89.507], [617, 90.4573], [617, 91]
-Path 14: [484, 64], [483, 64], [482, 64], [482, 65], [482, 66], [482, 67], [482, 68], [482, 69], [482.527, 70], [483, 71], [483.541, 72], [484.516, 73], [485.507, 74], [486.533, 75], [488, 75.5525], [489, 76.4689], [489.521, 77], [490.59, 78], [491.613, 79], [492.547, 80], [493.536, 81], [494.53, 82], [495.385, 83], [496, 83]
-Path 15: [707, 64], [707, 65], [708, 65.4538], [708.63, 66], [709.52, 67], [710.404, 68], [711, 68.5743], [712, 69.5566], [713, 70.528], [713.449, 72], [714, 72.5332], [714, 74], [714, 75], [714.485, 76], [715, 76.5332], [715, 78], [715.576, 79], [716.481, 80], [717, 80.5386], [718, 81.489], [718.457, 82], [719, 82.4006], [719.455, 83], [720, 83.3214], [720.522, 84], [722, 84.6336], [723, 85.5792], [724, 86.5779], [724.535, 88], [725.46, 89], [726, 89.5325], [727, 90.6372], [727.604, 92], [728.528, 93], [729, 94], [729.483, 95], [730, 95.4749], [730, 96], [730.484, 97], [731, 97.4849], [731.498, 98], [732, 98.5137], [733, 99.5066], [734, 100.518], [734.407, 102], [735, 102.556], [735.435, 104], [736, 104.453], [736.498, 105], [737, 105.577], [738, 106.589], [739, 107.52], [740, 108.522], [740.438, 110], [741, 110.511], [741.57, 112], [742.587, 113], [743.583, 114], [744.496, 115], [745, 115.528], [745.467, 117], [746, 117.496], [746, 118], [746.441, 119], [747, 119.532], [747.652, 121], [748.625, 122], [749.519, 123], [750, 124], [750.408, 125], [751, 125.511], [751, 127], [751.467, 128], [752, 128.55], [752.644, 130], [753.575, 131], [754, 132], [754.581, 133], [755, 134], [755.436, 135], [756, 135.525], [756, 137], [756.512, 138], [757.381, 139], [758, 139.574], [759, 140], [760, 140.646], [760.638, 142], [761, 143], [761, 144], [761, 145], [761.488, 146], [762, 146.525], [762, 148], [762.465, 149], [763, 149.348], [763, 150], [763, 151]
-Path 16: [672, 46], [671, 46], [670.443, 46], [670, 47], [670, 48], [670, 48.5163], [669.361, 49], [668.504, 50], [667.518, 51], [667, 51.5256], [666.5, 52], [666, 53.2553], [665, 54.305], [664, 55.3581], [663, 56.3897], [662, 57.422], [661, 58.4103], [660, 59.3781], [659, 60.3729], [658, 61.3878], [657, 62.3898], [656, 63.3312], [655, 64.3194], [654, 65.2902], [653, 66], [652, 66.4119], [651, 67.39], [650, 68.3058], [649, 69.2107], [648, 70.1546], [647, 71], [646, 71.3576], [645, 72.3707], [644, 73.269], [643, 74.1505], [642, 75], [641, 75.2232], [640, 76], [639, 77], [638, 77.1274], [637, 78.0313], [636, 79], [635, 79], [634.364, 80], [633.338, 81], [632.279, 82], [631.214, 83]
-Path 17: [930, 80], [929, 80], [928.063, 81], [927, 81.119], [926.169, 82], [925, 83], [924, 83.1902], [923.234, 84], [922.116, 85], [921, 85.226], [920.294, 86], [919.179, 87], [918, 87.3218], [917.372, 88], [916.319, 89], [915, 90], [914, 90], [913, 91]
-Path 18: [629, 84], [628, 85], [627, 85.3951], [626, 86], [625.345, 87], [624.279, 88], [623.199, 89], [622, 89.395], [621.445, 90], [620.422, 91], [620, 92]
-Path 19: [495, 87], [496, 87], [496, 88], [496, 89], [496, 90], [496.395, 91], [497, 91.6102], [497.59, 93], [499, 93.5676], [500, 94.5229], [501, 95.4706], [501.464, 96], [502, 96.4806], [502, 97], [502.345, 98], [503, 98], [504, 99], [505, 100], [506, 100]
-Path 20: [515, 92], [514, 92.4075], [513, 93], [512.551, 94], [512, 94.5286], [512, 96], [511.522, 97], [511, 97.5398], [510, 98.509], [509, 99.3715], [509, 100]
-Path 21: [908, 93], [907, 94], [906, 94], [905, 95], [904, 95], [903, 96], [902, 96], [901, 97], [900, 97.182], [899.275, 98], [898, 98.259], [897.304, 99], [896, 100], [895, 101], [894, 101], [893, 102], [892, 102.095], [891.158, 103], [890, 103.1], [889.155, 104], [888, 105]
-Path 22: [501, 103], [500, 103], [500, 104], [500, 105], [499.516, 106], [499, 106]
-Path 23: [881, 108], [880, 108], [879, 109], [878, 110], [877, 110], [876, 110.124], [875.18, 111]
-Path 24: [870, 113], [869, 114], [868, 114], [867.166, 115], [866, 115.255], [865.318, 116], [864, 117]
-Path 25: [862, 118], [861, 119], [860, 119], [859, 119.386], [858.375, 120], [857.34, 121], [856.205, 122], [855, 122.31], [854.376, 123], [853.077, 124], [852, 125], [851, 125], [850, 126], [849, 126.026], [848.025, 127], [847, 127.198], [846.254, 128], [845, 129], [844, 129], [843, 130], [842, 130], [841, 131], [840, 131.148], [839.149, 132], [838, 133], [837, 133], [836, 134], [835, 134.129], [834.206, 135], [833, 135.452], [832.362, 136], [831.039, 137], [830, 137], [829, 138], [828, 138], [827, 139], [826, 139], [825, 140], [824, 141], [823, 141], [822, 141.324], [821.306, 142], [820, 143], [819, 143]
-Path 26: [493, 123], [492, 123], [492, 124], [492, 125], [491.451, 126], [490.622, 127], [490, 127]
-Path 27: [485, 131], [484, 131], [484, 132], [484, 133.354], [484.592, 134], [485, 135], [486, 135]
-Path 28: [484, 140], [483, 140], [482, 140], [482, 141], [481.633, 142], [481, 142.468], [481, 143], [481, 144], [480.416, 145], [479.413, 146], [478.418, 147], [477.43, 148], [476.417, 149], [475.415, 150], [474.409, 151], [473.313, 152], [472.096, 153], [471, 153.199], [470.254, 154], [469.136, 155], [468.389, 156], [468, 157], [467.447, 158], [466.29, 159], [465.367, 160], [465, 161], [464.515, 162], [464, 162.439], [464, 163]
-Path 29: [431, 141], [431, 142], [432, 142.364], [432.329, 143], [433, 143.417], [433, 144]
-Path 30: [815, 145], [814, 145], [813, 145], [812.496, 146], [811.509, 147], [811, 147.506], [810, 148.401], [809.403, 149], [808.313, 150], [807.226, 151], [806, 151.43], [805.417, 152], [804.295, 153], [803, 154], [802, 154], [801, 155], [800, 155], [799, 156], [798, 156.03], [797.05, 157], [796, 157.262], [795.398, 158], [794.207, 159]
-Path 31: [763, 164], [763.678, 164], [764, 165.394], [765, 166], [766.49, 166], [767, 166.51], [768, 167], [768.599, 168]
-Path 32: [463, 170], [461.567, 170], [461, 171], [461, 172], [461, 172.536], [460, 173], [459.575, 174], [459, 174.572], [458.589, 176], [458, 176.501], [457.601, 178], [457, 178.488], [456.55, 179], [456, 179.343], [456, 180]
-Path 33: [768, 174], [767, 174], [766, 174], [766, 175], [765.575, 176], [765, 176.545], [764.442, 178], [764, 179], [764, 180], [763.524, 181], [763, 181.458], [763, 182], [763, 183], [763, 184], [763, 185], [763, 186], [762.543, 187], [762, 187.434], [762, 188], [762, 189], [762, 190], [762, 191], [762, 192], [762, 193]
-Path 34: [452, 183], [451, 183], [450, 183], [449.408, 184], [449, 185], [448.201, 186], [447, 186]
-Path 35: [805, 171], [805, 171.509], [805.642, 172], [806, 173.407], [806.727, 174], [807, 175], [807, 175.538], [807.552, 176], [808, 177.412], [809, 178.473], [809.502, 179], [810.414, 180], [811, 181], [811.477, 182], [812, 183], [812.501, 184], [813, 185], [813.528, 186], [814, 187], [814.585, 188], [815.443, 189], [816, 189.567], [816.515, 191], [817, 192], [817.583, 193], [818.447, 194], [819, 194.574], [820, 195.609], [820.594, 197], [821.463, 198], [822, 198.576], [822.444, 200], [823, 200.592], [823.477, 202], [824, 202.494], [824.4, 203], [825, 203.53], [826, 204.566], [826.566, 206], [827.574, 207], [828.537, 208], [829.443, 209], [830, 209.566], [830.572, 211], [831.443, 212], [832, 212.572], [832.447, 214], [833, 214.562], [833.55, 216], [834, 217], [834.56, 218], [835.406, 219], [836, 219.6], [836.513, 221], [837, 222], [837.548, 223], [838.373, 224], [839, 224.577], [839.604, 226], [840.498, 227], [841, 227.597], [841.483, 229], [842, 229.539], [842.532, 231], [843.371, 232], [844, 232.615], [844.503, 234], [845, 235], [845.634, 236], [846.416, 237], [847, 237.604], [847.47, 239], [848, 239.529], [848.577, 241], [849.485, 242], [850, 242.558], [850.54, 244], [851, 245], [851.528, 246], [852.371, 247], [853, 247.604], [853.518, 249], [854.427, 250], [855, 250.555], [855.463, 252], [856, 252.56], [856.41, 254], [857, 254.658], [857.564, 256], [858.486, 257], [859, 257.553], [859.506, 259], [860, 260], [860.588, 261], [861.45, 262], [862, 262.538], [863, 263.627], [863.555, 265], [864.478, 266], [865, 266.543], [865.574, 268], [866.464, 269], [867, 269.56], [868, 270.61], [868.506, 272], [869, 273], [869.575, 274], [870.417, 275], [871, 275.566], [871.586, 277], [872.478, 278], [873, 278.533], [874, 279.593], [874.525, 281], [875.398, 282], [876, 282.596], [876.494, 284], [877, 284.513], [878, 285.573], [878.525, 287], [879.393, 288], [880, 288.587], [880.476, 290], [881, 290.575], [882, 291.606], [882.563, 293], [883.469, 294], [884, 294.56], [884.498, 296], [885, 296.524], [885.584, 298], [886.47, 299], [887, 299.543], [888, 300.578], [888.575, 302], [889, 303], [889.56, 304], [890, 305], [890.515, 306], [891.37, 307], [892, 307.532], [892.547, 309], [893.515, 310], [894, 311], [894.582, 312], [895.484, 313], [896, 313.544], [897, 314.587], [897.56, 316], [898.394, 317], [899, 317.596], [899.4, 319], [900, 319.592], [900.475, 321], [901, 321.531], [902, 322.57], [902.607, 324], [903.512, 325], [904.378, 326], [905, 326.586], [905.466, 328], [906, 328.548], [907, 329.588], [907.587, 331], [908.506, 332], [909.393, 333], [910, 333.623], [910.529, 335], [911.458, 336], [912, 336.552], [913, 337.621], [913.629, 339], [914.552, 340], [915, 341], [915.586, 342], [916.42, 343], [917, 343.559], [917.585, 345], [918.553, 346], [919.459, 347], [920, 347.557], [920.474, 349], [921, 349.565], [921.518, 351], [922.485, 352], [923, 352.472], [923.495, 353], [924, 353.51], [925, 354.546], [926, 355.578], [926.421, 357], [927, 357.582], [927.402, 359], [928, 359.61], [928.423, 361], [929, 361.572], [929.45, 363], [930, 363.543], [930.481, 365], [931, 365.522], [932, 366.566], [932.553, 368], [933.357, 369], [934, 369.6], [934.514, 371], [935.354, 372], [936, 372.592], [936.451, 374], [937, 374.593], [937.46, 376], [938, 376.587], [938.464, 378], [939, 378.564], [939.375, 380], [940, 380.563], [940.324, 382], [941, 382.489], [941, 383]
-Path 36: [445, 189], [445.505, 190], [446, 191], [446, 192], [446, 193], [446, 194], [446, 195], [446, 196]
-Path 37: [762, 198.366], [761, 199.436], [760.488, 200], [760, 201], [760, 202], [760, 203], [760, 203.549], [759.419, 204], [759, 205], [759, 206], [759, 207], [759, 208], [759, 209], [759, 210], [759, 211]
-Path 38: [422, 207], [422.631, 207], [423, 208], [424, 208.534], [424, 210], [424.03, 211], [425, 211]
-Path 39: [433, 218], [432, 218], [431, 218], [430.445, 219], [429.578, 220], [429, 220.279], [429, 221]
-Path 40: [759, 218], [759, 219], [759, 220], [759, 221], [759, 222], [759, 223], [758.518, 224], [758, 224.473], [758, 225], [757.523, 226], [757, 226.61], [756.528, 228], [756, 228.521], [756, 230], [755.437, 231], [755, 232], [755, 233], [755, 234], [754.48, 235], [754, 236], [754, 237], [754, 238], [754, 239], [754, 240], [754, 241], [754, 242], [753.537, 243], [753, 243.526], [753, 245], [753, 246], [753, 247], [753, 248], [753, 249], [753, 250], [752.51, 251], [752, 251.517], [752, 253], [751.561, 254], [751, 254.547], [751, 256], [751, 257], [750.55, 258], [750, 258.48], [750, 259], [750, 260], [749.339, 261], [749, 262], [749, 263], [749, 264], [749, 265], [748.446, 266], [748, 267], [748, 268], [748, 269], [748, 270], [748, 271], [748, 272], [748, 273], [748, 274], [748, 275], [747.515, 276], [747, 276.499], [747, 277], [747, 278], [746.456, 279], [746, 280], [746, 281], [746, 282], [746, 283], [746, 284], [746, 285], [745.44, 286], [744.374, 287]
-Path 41: [422, 230], [421, 230], [420, 230], [420, 231], [420, 232]
-Path 42: [413, 239], [412, 239], [411, 239], [410, 239], [410, 240]
-Path 43: [407, 246], [407.314, 247], [408, 247.209], [408.441, 248], [409, 248]
-Path 44: [404, 260], [403, 260], [402, 260], [401.447, 261], [400.519, 262], [400, 262.54], [399, 263.56], [398.5, 265], [398, 266], [398, 267], [397.47, 268], [397, 269], [396.504, 270], [396, 270.357], [395.631, 271], [395, 271]
-Path 45: [378, 290], [377, 290], [376.42, 291], [376, 292], [376, 293], [376, 294], [375.654, 295], [375, 295]
-Path 46: [745, 289], [744.016, 289], [744, 289.55], [743, 290], [743, 291], [743, 292], [743, 293], [743, 294], [743, 295], [743, 296], [743, 297], [743, 298], [743, 299], [743, 300], [743, 301], [743, 302]
-Path 47: [743, 308], [742, 308], [741.49, 309], [741, 310], [741, 311], [741, 312], [741, 313], [741, 314], [740.314, 315], [740, 316], [739.336, 317], [739, 318], [739, 319], [739, 320], [739, 321], [738.488, 322], [738, 323], [738, 324], [738, 325], [738, 326], [738, 327], [738, 328], [738, 329], [738, 330], [738, 331], [738, 332]
-Path 48: [358, 317], [358.472, 318], [359, 318.322], [359, 319]
-Path 49: [351, 334], [350, 334], [350, 335], [350, 336], [350.524, 337], [351, 338], [351, 339]
-Path 50: [738, 340], [738, 341], [737.457, 342], [737, 343], [737, 344], [736.58, 345], [736, 345.429], [736, 346], [736, 347], [735.491, 348], [735, 349], [734.454, 350], [734, 351], [734, 352], [734, 353], [734, 354], [734, 355], [734, 356], [734, 357], [734, 358], [734, 359], [734, 360], [734, 361], [734, 362], [734, 363], [734, 364], [734, 365], [734, 366]
-Path 51: [336, 352], [336.451, 352.764], [337, 353.078], [337, 354]
-Path 52: [997, 362], [996, 362], [995, 362], [994.324, 363], [993.131, 364], [992, 365], [991, 365.221], [990.217, 366], [989, 366.382], [988.373, 367], [987.25, 368], [986, 369], [985, 369], [984, 370], [983, 370.013], [982.023, 371], [981, 372], [980, 372], [979, 373], [978, 373], [977, 374], [976, 374.024], [975.039, 375], [974, 375.029], [973.052, 376], [972, 377], [971, 377], [970, 378], [969, 378.056], [968.064, 379], [967, 379.225], [966.276, 380], [965, 381], [964, 381], [963, 382], [962, 382.151], [961.183, 383], [960, 384], [959, 384], [958, 385], [957, 385.157], [956.214, 386], [955, 387], [954, 387], [953, 388], [952, 388], [951, 389], [950, 389.023], [949.032, 390], [948, 390.025], [947.059, 391]
-Path 53: [337, 362], [336, 362.058], [335, 363], [334, 363], [333.219, 364], [332.131, 365], [332, 366], [332, 367], [332, 368], [332.497, 369], [333, 369.346], [333, 370]
-Path 54: [734, 372], [734, 373], [733.51, 374], [733, 374.494], [733, 375], [733, 376], [733, 377], [732.499, 378], [732, 379], [732, 380], [732, 381], [732, 382], [732, 383], [732, 384], [731.481, 385], [731, 386], [731, 387], [731, 388], [731, 389], [730.539, 390], [730, 390.528], [730, 392], [730, 393], [730, 394], [730, 395], [729.524, 396], [729, 396.507], [729, 398], [729, 399], [729, 400], [729, 401], [729, 402], [729, 403], [728.47, 404], [728, 405], [728, 406], [728, 407]
-Path 55: [321, 381], [320, 381], [320, 382], [320, 383], [320.475, 384], [321, 384.516], [321, 386], [321, 387]
-Path 56: [945, 392], [944, 393], [943, 394.196], [942, 395], [941, 395.398], [940, 396.215], [939.244, 397], [939, 398], [938, 399], [937, 399], [936, 400], [935, 400.227], [934, 401], [933, 402], [932, 402], [931, 403], [930, 403.275], [929, 404.204], [928, 405], [927, 405], [926.371, 406], [925.109, 407], [924, 408], [923, 408.079], [922.104, 409], [921, 409.379], [920.374, 410], [919.299, 411], [918, 412]
-Path 57: [727, 409], [728, 409], [728, 410], [728, 411], [728, 412], [728, 413], [728.336, 414], [729, 414]
-Path 58: [297, 415], [297.468, 416], [298, 416.466], [298, 417], [298.467, 418], [299, 418.341], [299, 419], [299, 420], [299, 421]
-Path 59: [728, 419], [728, 420], [728, 421], [728, 422], [728, 423]
-Path 60: [916, 413], [915, 414], [914, 414.101], [913, 415], [912, 416], [911, 416.242], [910, 417], [909, 417.294], [908, 418.145], [907, 419], [906, 419.374], [905, 420.266], [904, 421], [903, 421], [902.379, 422], [901.239, 423], [900, 424], [899, 424.239], [898.265, 425], [897.177, 426], [896, 426.314], [895.351, 427], [894.105, 428], [893, 428.205], [892.261, 429], [891.015, 430], [890, 430.331], [889.331, 431], [888.284, 432], [887, 432.405], [886.399, 433], [885.299, 434], [884.133, 435], [883, 435.399], [882.383, 436], [881.336, 437], [880, 437.427], [879.392, 438], [878.308, 439], [877.219, 440], [876, 440.42], [875.446, 441], [874.411, 442], [873.326, 443], [872, 444], [871, 444], [870, 445], [869, 445.202], [868.22, 446], [867, 446.448], [866.376, 447], [865.288, 448], [864, 449], [863, 449.346], [862.338, 450], [861.332, 451], [860.266, 452], [859, 453], [858, 453.292], [857.327, 454], [856.173, 455], [855, 455.372], [854.359, 456], [853.256, 457], [852, 457.3], [851.339, 458], [850, 459], [849, 459.192], [848.227, 460], [847, 460.41], [846.416, 461], [845.328, 462], [844.105, 463], [843, 463.103], [842.183, 464], [841, 465], [840, 466], [839, 466.385], [838.321, 467], [837, 467.476], [836.455, 468], [835.378, 469], [834.288, 470], [833, 470.496], [832.431, 471], [831.369, 472], [830.239, 473], [829, 474], [828, 474.051], [827.069, 475], [826, 476], [825, 476], [824, 477], [823, 477], [822, 478]
-Path 61: [728, 429], [727, 429], [727, 430], [727, 431], [727, 432], [727, 433], [727, 434], [727, 435], [727, 436], [727, 437], [727, 438], [727, 439]
-Path 62: [997, 444], [996, 444], [995, 444], [994.422, 445], [993.411, 446], [992.38, 447], [991.3, 448], [990, 448.498], [989.491, 449], [988.457, 450], [987.425, 451], [986.415, 452], [985.444, 453], [984.535, 454], [984, 454.549], [983, 455.6], [982.455, 457], [981.499, 458], [980.512, 459], [980, 459.466], [979.587, 460], [979, 460.538], [978.521, 462], [978, 462.48], [977.491, 463], [976.436, 464], [976, 465], [975.24, 466], [974, 466.311], [973.335, 467], [972.266, 468], [971.232, 469], [970, 469.438], [969.436, 470], [968.465, 471], [967.427, 472], [966.387, 473], [965.449, 474], [964.433, 475], [963.302, 476], [962.072, 477], [961, 478], [960, 478], [959, 479], [958, 479.172], [957.206, 480], [956, 480.387], [955.363, 481], [954.342, 482], [953.295, 483], [952.278, 484], [951, 484.412], [950.455, 485], [949.403, 486], [948.38, 487], [947.341, 488], [946.256, 489], [945.182, 490], [944, 490.381], [943.336, 491], [942.31, 492], [941.251, 493], [940, 493.371], [939.41, 494], [938.409, 495], [937.393, 496], [936.36, 497], [935.291, 498], [934.246, 499], [933.183, 500], [932, 501], [931, 502], [930, 502.269], [929.229, 503], [928.176, 504], [927, 504.409], [926.43, 505], [925.399, 506], [924.36, 507], [923.338, 508], [922.354, 509], [921, 509.383], [920.374, 510], [920, 511], [919, 512], [918, 512.115], [917.119, 513], [916.117, 514], [915, 514.311], [914.351, 515], [913.29, 516], [912.303, 517], [911, 517.435], [910.461, 518], [909.437, 519], [908.322, 520], [907.239, 521], [906.204, 522], [905, 522.391], [904.427, 523], [903.338, 524], [902.286, 525], [901.064, 526], [900, 526.371], [899.311, 527], [898.317, 528], [897, 528.457], [897, 529], [896.228, 530], [895, 530.334], [894.406, 531], [893.277, 532], [892.17, 533], [891, 534], [890, 535], [889, 535.394], [888.365, 536], [887.325, 537], [886.318, 538], [885.107, 539], [884, 540], [883, 541], [882, 541], [881, 541.4], [880.418, 542], [879.368, 543], [878.332, 544], [877, 544.569], [876, 545.575], [875, 546.505], [874.248, 548], [873, 548.442], [872.481, 549], [871.416, 550], [870.375, 551], [869.406, 552], [868.423, 553], [867.416, 554], [866.399, 555], [865.362, 556], [864.31, 557], [863.295, 558], [862.151, 559], [861, 559.332], [860.337, 560], [859.314, 561], [858.31, 562], [857, 562.384], [856.385, 563], [855.381, 564], [854.397, 565], [853.343, 566], [852.307, 567], [851.29, 568], [850, 568.48], [849.467, 569], [848.44, 570], [847.394, 571], [846.383, 572], [845.32, 573], [844.277, 574], [843.253, 575], [842, 575.435], [841.421, 576], [840.415, 577], [839.404, 578], [838.374, 579], [837.356, 580], [836.345, 581], [835.273, 582], [834.204, 583], [833, 583.382], [832.35, 584], [831.328, 585], [830.296, 586], [829.215, 587], [828, 587.331], [827.327, 588], [826.253, 589], [825.121, 590], [824, 590.323], [823.338, 591], [822.272, 592], [821, 592.496], [820.52, 593], [820, 593.514], [819, 594.484], [818.437, 595], [817.336, 596], [816.282, 597], [815.21, 598], [814, 598.317], [813.397, 599], [812.264, 600], [811, 601], [810, 602], [809, 602]
-Path 63: [275, 455], [275, 456], [275, 457], [275, 458]
-Path 64: [728, 469], [728, 469.715], [729, 470], [729, 471], [729.565, 472], [730.454, 473], [731, 473.472], [731.429, 474], [732, 474.431], [732.438, 475], [733, 475.536], [734, 476.628], [734.507, 478], [735.313, 479], [736, 479.066], [736, 480]
-Path 65: [721, 473.455], [720.483, 474], [720, 475], [720, 476.399], [719.428, 477], [719, 478], [718, 478]
-Path 66: [729, 487], [729, 488], [730, 488], [731, 488], [732, 488]
-Path 67: [715, 497], [714, 497], [714, 498], [713.476, 499], [712.491, 500], [711, 500.568], [710, 502], [709.022, 503], [708, 503.506], [707.501, 505], [707, 505.488], [707, 506], [707, 507], [706.459, 508], [705.556, 509], [705, 509.449], [704.523, 510], [704, 510.605], [703.46, 512], [703, 513], [703, 514], [703, 515], [702.473, 516], [702, 517], [701.597, 518], [701, 518.401], [700.562, 519], [700, 519.532], [699.412, 521], [699, 522], [698.445, 523], [698, 524]
-Path 68: [241, 503], [240, 503.405], [239, 504], [239, 505], [239, 506], [239, 507], [239.124, 508], [240, 508]
-Path 69: [228, 509], [229, 509.504], [230, 510], [231, 510]
-Path 70: [613, 516], [613.679, 517], [614.353, 518], [615, 518.682], [615.448, 520], [616, 520.439], [616.364, 521], [617, 521.464], [617, 522]
-Path 71: [233, 516], [232, 516.213], [231, 517], [230, 517], [230, 518], [230, 519]
-Path 72: [635, 519], [636, 519.308], [636.157, 520], [637, 520], [638, 520]
-Path 73: [225, 528], [225, 529], [225.353, 530], [226, 530.391], [226, 531]
-Path 74: [214, 543], [214.456, 544], [215, 544.527], [216, 545.439], [216, 546], [216.497, 547], [217, 547.52], [217.224, 549], [218, 549.177], [218, 550]
-Path 75: [695, 539], [694, 539], [693.456, 539], [693, 540], [693, 541], [693, 542], [692.515, 543], [692, 544], [692, 545], [692, 546], [692, 547], [691.555, 548], [691, 548.506], [691, 550], [691, 551], [691, 552], [691, 553], [691.527, 554]
-Path 76: [559, 557], [559, 558], [559.487, 559], [560, 559.546], [560.113, 561], [561, 561]
-Path 77: [208, 565], [208.47, 566], [209, 566.389], [209, 567], [209, 568]
-Path 78: [784, 583], [785, 583], [786, 583], [787, 583.415], [788, 584.483], [789, 585.448], [790, 586], [791.477, 586], [792, 586.534], [793, 587], [794, 587], [795, 587], [796, 587], [797.469, 587], [798.475, 588], [799, 589], [799.567, 590], [800, 591], [800.572, 592], [801.448, 593], [802, 593.611], [802.541, 595], [803.463, 596], [804, 596.54], [805, 597.532], [806, 598.538]
-Path 79: [780, 585], [779.489, 585], [779, 586], [779, 587], [779, 588], [779, 589], [778.507, 590], [778, 591], [777.58, 592], [777, 592.634], [776.418, 594], [775.491, 595], [774.519, 596], [774, 596.562], [773, 597.566], [772, 598.514], [771, 599.482], [771, 600], [770.462, 601], [769.484, 602], [768.471, 603], [767.447, 604], [766.46, 605], [765.492, 606], [764.507, 607], [764, 607.562], [763, 608.59], [762, 609.569], [761, 610.527], [760.342, 612], [759, 612.42], [758.429, 613], [757.356, 614], [756.075, 615]
-Path 80: [542, 598], [541, 598], [540, 598], [539.421, 599], [538.344, 600], [537.223, 601], [537, 602]
-Path 81: [546, 593], [546.431, 594], [547, 595.301], [548, 596.374], [548.614, 597], [549, 597.526], [549.502, 598], [550.386, 599], [551, 600.419], [552, 601], [552.498, 602], [553, 602.476], [553.377, 603], [554, 603.599], [554, 605], [554.48, 606], [555, 606.475], [555, 607], [555.651, 608], [556.542, 609], [557.464, 610], [558, 610.537], [559, 611.568], [559.608, 613], [560, 614], [560.584, 615], [561.548, 616], [562.521, 617], [563.515, 618], [564.398, 619], [565, 619.653], [565.543, 621], [566.464, 622], [567, 622.555], [568, 623.593], [568.652, 625], [569.591, 626], [570.501, 627], [571.369, 628], [572, 628.53], [572.662, 630], [574, 630.673], [575, 631.644], [575.205, 633], [576, 633]
-Path 82: [797, 599], [797, 600], [797, 601], [797.485, 602], [798, 602.57], [798.402, 604], [799, 604.616], [799.431, 606], [800, 606.637], [800.417, 608], [801, 608.635], [801, 610], [801.597, 611], [802, 612], [802.501, 613], [803, 614], [803.428, 615], [804, 615.618], [804, 617], [804.648, 618], [805, 619]
-Path 83: [713, 598], [713.515, 598], [714, 598.573], [714.596, 599], [715.454, 600], [716.287, 601], [717, 602], [717, 602.628], [718, 603], [718.454, 604], [719, 604.489], [719, 605], [719.418, 606], [720, 606], [721, 606], [722, 607], [722.571, 608], [724, 608.455], [724.468, 609], [725, 609.437], [725.588, 610], [727, 610.601], [728, 611], [729, 611.545], [730, 612], [731, 612], [732, 612.477], [732.471, 613], [733, 613.435], [733.497, 614], [734, 614.458], [734, 615]
-Path 84: [809, 604], [809, 605], [809.609, 606], [810, 607], [810.512, 608], [811, 609], [811.482, 610], [812, 610.546], [812.457, 612], [813, 612.562], [813.432, 614], [814, 614.584], [814, 616], [814.526, 617], [815, 618], [815.506, 619], [816, 620], [816.488, 621], [817, 621.571], [817.46, 623], [818, 623.606], [818, 625], [818.574, 626], [819, 627], [819.553, 628], [820, 629], [820.521, 630], [821, 631], [821.491, 632], [822, 632.571], [822.461, 634], [823, 634.562], [823.459, 636], [824, 636.566], [824.433, 638], [825, 638.552], [825.446, 640], [826, 640.568], [826.422, 642], [827, 642.592], [827.397, 644], [828, 644.586], [828, 646], [828.538, 647], [829, 648], [829.523, 649], [830, 650], [830.554, 651], [831, 652], [831.531, 653], [832.402, 654], [833, 654.583], [833.451, 656], [834, 656.598], [834.415, 658], [835, 658.543], [835.495, 660], [836, 660.558], [836.477, 662], [837, 662.571], [837.442, 664], [838, 664.521], [838.487, 666], [839, 666.514], [840, 667.561], [840.484, 669], [841, 669.493], [841, 670], [841, 671]
-Path 85: [789, 604], [788, 604], [787, 605], [786, 605], [785, 606], [784, 606], [783, 607], [782, 607], [781, 608], [780, 608], [779, 609], [778, 609]
-Path 86: [775, 609], [774, 609], [773, 610], [773, 611], [774, 612]
-Path 87: [535, 603], [534.268, 603], [534, 604.011], [533, 605], [532, 605.013], [531, 606.147], [530, 607.244], [529, 608], [528, 608.374], [527, 609.348], [526, 610.33], [525, 611.279], [524, 612.219], [523, 613.134], [522, 614], [521, 614], [520.305, 615], [519.28, 616], [518.285, 617], [517.249, 618], [516.241, 619], [515, 619.267], [514.312, 620], [513.253, 621], [513, 622], [512, 623], [511, 623.142], [510.15, 624], [509, 624.329], [508.341, 625], [507.313, 626], [506.348, 627], [505.314, 628], [504.316, 629], [503.244, 630], [502, 630.239], [501.265, 631], [500.196, 632], [499.238, 633], [498.222, 634], [497, 634.32], [496.331, 635], [495.302, 636], [494.239, 637], [493.159, 638], [492.142, 639], [491, 639.296], [490.277, 640], [489.248, 641], [488.147, 642], [487, 642.245], [486.324, 643], [485.263, 644], [484.218, 645], [483.167, 646], [482, 646.24], [481.409, 647], [480.32, 648], [479.275, 649], [478.295, 650], [477.194, 651], [476.098, 652], [475, 652.251], [474.262, 653], [473.193, 654], [472.158, 655], [471, 655.302], [470.32, 656], [469.331, 657], [468.338, 658], [467.253, 659], [466.195, 660], [465.108, 661], [464, 661.266], [463.248, 662], [462.248, 663], [461.222, 664], [460.159, 665], [459.159, 666], [458, 666.16], [457.235, 667], [456.18, 668], [455, 668.32], [454.304, 669], [453.274, 670], [452.211, 671], [451.227, 672], [450.17, 673], [449, 673.272], [448.385, 674], [447.34, 675], [446.347, 676], [445.151, 677], [444.127, 678], [443.067, 679], [442, 680], [441, 680.104], [440.153, 681], [439.088, 682], [438.037, 683], [437, 683.269], [436.267, 684], [435.232, 685], [434.088, 686], [433, 686.277], [432.335, 687], [431.268, 688], [430.199, 689], [429.154, 690], [428, 690.2], [427.217, 691], [426.14, 692], [425, 692.307], [424.532, 693], [424, 693.253], [423.485, 694], [423, 695], [422, 696], [421.104, 697], [420, 697], [419, 698]
-Path 88: [775, 616], [776, 617], [776.409, 618], [777, 618.57], [777.258, 620], [778, 620.605], [778, 622], [778.479, 623], [779, 623.608], [779.436, 625], [780, 625.622], [780, 627], [780.551, 628], [781, 629], [781.491, 630], [782, 630.459], [782, 631]
-Path 89: [750, 617], [750, 617.915], [751, 618], [751.544, 619], [752.545, 620], [754, 620.586], [755, 621.459], [755.54, 622], [757, 622.494], [757.475, 623], [758, 623], [759, 623.518], [760, 624], [761, 624]
-Path 90: [767, 619], [767, 619.815], [767.662, 620], [768, 620.539], [769, 621], [769.475, 622], [770, 622], [771, 622], [772, 622.755], [772.643, 624], [773.364, 625], [774, 625.623]
-Path 91: [806.094, 622], [807, 623], [807, 624], [807.645, 625], [808, 626], [808.611, 627], [809, 628], [809.533, 629], [810, 630], [810.409, 631], [811, 631.609], [811, 633], [811.658, 634], [812, 635], [812.621, 636], [813, 637]
-Path 92: [542, 621], [542, 621.502], [542.586, 622], [543, 623], [543, 623.551], [543.598, 624], [544, 625], [545, 625.42], [545.543, 626], [546, 627], [547, 628], [547.417, 629], [548, 629.582], [548.53, 631], [549, 632], [549.635, 633]
-Path 93: [540, 623], [539, 623], [538, 623.294], [537, 624.256], [536, 625.15], [535, 626], [534, 627], [533, 628], [532, 628], [531, 628], [530.31, 629], [530, 630], [529, 631], [528, 631.189], [527.223, 632], [526.167, 633], [525.152, 634], [524, 634.287], [523.289, 635], [522.252, 636], [521.223, 637], [520, 637.351], [519.406, 638], [518.372, 639], [518, 640], [517.152, 641], [516, 641.233], [515.319, 642], [514.286, 643], [513.104, 644], [512.132, 645], [511, 645.198], [511, 646]
-Path 94: [773, 629], [773, 630], [773.582, 631], [774, 632], [774.508, 633], [775, 634], [775.458, 635], [776, 635.569], [776, 637], [776, 638], [776.51, 639], [777, 640], [777.463, 641], [778, 641.436], [778.545, 642], [779.535, 643], [780, 644], [780, 645], [780.581, 646], [781, 647], [781.541, 648], [782, 649], [782.496, 650], [783, 650.575], [783.465, 652], [784, 652.578], [784, 654], [784.487, 655], [785, 655.478], [785, 656], [785.335, 657], [786, 657.494], [786, 658], [786, 659], [786.513, 660], [787, 661], [788, 662], [788, 663]
-Path 95: [535, 614], [533.579, 615], [532.582, 616], [531.513, 617], [531, 617.582], [530, 618.433], [529, 619.233], [527.621, 620], [526.583, 621], [525.552, 622], [525, 622.564], [524, 623.45], [523, 624.331], [521.683, 625], [520.578, 626], [519.592, 627], [519, 628], [518, 629], [517, 629.405], [515.65, 630], [514.593, 631], [513.614, 632], [513, 633], [512, 633.555], [511, 634.201], [511, 635]
-Path 96: [581, 634], [580, 634], [579.3, 635], [578, 635.216], [577.488, 636], [576, 637]
-Path 97: [784, 635], [784, 636], [784.545, 637], [785, 638], [785.475, 639], [786, 639.538], [786.498, 641], [787, 641.542], [787.481, 643], [788, 643.594], [788, 645], [788.583, 646], [789, 647], [789.508, 648], [790, 649]
-Path 98: [168, 638], [169, 638.61], [169.393, 640], [170, 640.502], [170.203, 642], [171, 642]
-Path 99: [814, 639], [814.261, 640], [815, 640.42], [815, 641], [815, 642], [815.538, 643], [816, 644], [816.598, 645], [817, 646], [817.575, 647], [818, 648], [818.463, 649], [819, 649.574], [819.471, 651], [820, 651.573], [820.458, 653], [821, 653.613], [821.502, 655], [822, 656], [823, 657], [823, 658], [824, 659], [824, 660], [824.396, 661], [825, 661.622], [825.391, 663], [826, 663.659], [826.496, 665], [827, 665.57], [827.468, 667], [828, 667.575], [828.43, 669], [829, 669.594], [829.488, 671], [830, 671.569], [830.507, 673], [831, 674], [831.56, 675], [832, 676], [832.505, 677], [833, 678], [833, 679], [833.814, 680]
-Path 100: [573, 640], [572, 640], [571.504, 641], [571, 641.323], [570.498, 642], [569.466, 643], [568.475, 644], [567.432, 645], [567, 646], [566.26, 647], [565.174, 648], [564, 648.349], [563.322, 649], [562.208, 650], [561, 650.318], [560.332, 651], [559.208, 652], [558, 652.501], [557, 653.464], [556.5, 654], [556, 654.408], [555.445, 655], [554.407, 656], [553.353, 657], [552.174, 658], [551, 658.281], [550.287, 659], [549, 660], [548, 660.292], [547.292, 661], [546, 661.509], [545, 662.506], [544, 663.502], [543, 664.514], [542, 665.533], [541, 666.552], [540, 667.586], [539.478, 669], [539, 670], [538.462, 671], [538, 672], [537.428, 673], [536.577, 674], [536, 674]
-Path 101: [171, 651], [170, 651], [169, 651.415], [169, 652], [169, 653], [168.07, 654], [168.049, 654.951], [168, 656], [168, 657], [168, 658]
-Path 102: [546, 661], [545.49, 662], [544.494, 663], [543.497, 664], [542.5, 665]
-Path 103: [167, 662], [166, 662], [165.356, 662], [165, 663], [164.423, 663.423]
-Path 104: [785, 666], [784, 666], [783.51, 667], [783, 667.547], [782.519, 669], [782, 669.534], [781.504, 671], [781, 671.506], [780.521, 673], [780, 673.517], [780, 675]
-Path 105: [416, 668], [416, 668.59], [416.722, 669], [417, 670], [418, 670.624], [419, 671.537], [419.575, 673], [420.513, 674], [421.475, 675], [422, 675.606], [422.519, 677], [423, 678], [423.508, 679], [424, 680], [424, 681], [424, 682]
-Path 106: [842, 679], [842, 680], [842.544, 681], [843.103, 682], [844, 682.846]
-Path 107: [537, 681], [536, 681], [535.5, 682], [535, 682.511], [534.446, 684], [533, 684.541], [532, 685.423], [531.608, 686], [531, 686], [530, 687]
-Path 108: [780, 677], [780.427, 678], [781, 679], [781.49, 680], [782, 681], [782, 681.51], [783, 682], [783.492, 683], [784, 683.556], [785, 684.565], [786, 685.591], [786.504, 687], [787.402, 688], [788, 688.516], [788.455, 690], [789, 690.168], [789, 691]
-Path 109: [481, 681], [480, 681.353], [479, 682.245], [478, 683.144], [477, 684.082], [476, 685], [475, 685.397], [474, 686], [473.291, 687], [472.184, 688], [471.049, 689], [470, 689.278], [469.259, 690], [468.249, 691], [467.195, 692], [466.158, 693], [465, 693.372], [464.375, 694], [463, 694.642], [462.188, 696], [461.106, 697], [460.136, 698], [459, 698.265], [458.298, 699], [457.197, 700], [456.158, 701], [455.147, 702], [454, 702.335], [453.362, 703], [452.337, 704], [451.289, 705], [450.171, 706], [449.082, 707], [448, 707.266], [447.259, 708], [446.263, 709], [445.211, 710], [444, 710.232], [444, 711]
-Path 110: [407, 687], [407, 688], [408, 688.468], [408, 689], [408, 690], [408.246, 691], [409, 691]
-Path 111: [394, 692], [394, 693], [394.626, 694], [395, 695], [395.46, 696], [396, 696.299], [396, 697]
-Path 112: [848, 693], [847, 693.453], [846, 694.448], [845, 695], [844.387, 696], [843.366, 697], [842.307, 698], [841.203, 699], [840, 699.381], [839.397, 700], [838.368, 701], [837.345, 702], [836.28, 703], [835.336, 704], [834, 704.587], [833.081, 706], [832, 707], [831, 707.161], [830.19, 708], [829, 708.4], [828.402, 709], [827.418, 710], [826.469, 711], [825.345, 712], [824.134, 713], [823, 714], [822, 714.349], [821.456, 715], [821, 716]
-Path 113: [490, 688], [489, 689], [488, 689], [487, 689.481], [486, 690.444], [485, 691.361], [483.578, 692], [483, 693.297], [482, 694], [481.492, 694], [481, 694.553], [480.429, 695], [480, 695.502], [479, 696], [478.459, 697], [477.406, 698], [476.351, 699], [475.316, 700], [474, 700.466], [473.45, 701], [472.398, 702], [471.36, 703]
-Path 114: [520, 694.175], [519, 695], [518, 695], [517, 695.377], [516, 696], [515.275, 697]
-Path 115: [416, 700], [417, 700.621], [418, 701.587], [418.401, 703], [419, 703.518], [419.601, 705], [420.447, 706], [421, 706.609], [421.582, 708], [422.462, 709], [423, 709.538], [423.559, 711], [424.516, 712], [425.51, 713], [426.467, 714], [427, 714.544], [427.548, 716], [428, 717], [428.498, 718], [429, 718.482], [429, 719], [429, 720]
-Path 116: [801, 692], [801, 693], [802, 694], [803, 695], [803, 696], [804, 697], [804.418, 698], [805, 699.469], [805.514, 700], [806, 701], [806, 702], [806.58, 703], [807, 704], [807, 705], [807.466, 706], [808, 706.575], [808.558, 708], [809.555, 709], [810.489, 710], [811, 710.57], [811.533, 712], [812, 713], [812.474, 714], [813, 714.46], [813, 715], [813.486, 716], [814, 716.473], [814, 717], [814.574, 718], [815.502, 719], [816, 720], [816.62, 721], [817.5, 722], [818, 723], [818.549, 724], [819.434, 725], [820, 725.556], [820.531, 727], [821.487, 728], [822, 728.589], [822.564, 730], [823.502, 731], [824.482, 732], [825, 732.43], [825.556, 733], [827, 733.537], [828, 734.475], [828.447, 735], [829, 735.575], [829, 737], [829.582, 738], [830, 739], [830, 740], [830, 741], [830.587, 742], [831.437, 743], [832, 743.588], [833, 744.611], [833, 746], [833.482, 747], [834, 747.501], [834, 749], [834, 750], [834, 751], [834.598, 752], [835.562, 753], [836.554, 754], [837.533, 755], [838.452, 756], [839, 756.564], [839.451, 758], [840, 758.575], [840.486, 760], [841, 760.503], [842, 761.518], [843, 762.55], [843, 764], [843, 765], [843, 766], [843, 767], [843.578, 768], [844.413, 769], [845, 769.567], [845.444, 771], [846, 771.535], [846, 773], [846.498, 774], [847, 774.55], [847.525, 776], [848, 777], [848.587, 778], [849.463, 779], [850, 779.496], [850, 780], [850.556, 781], [851.528, 782], [852, 783], [852.577, 784], [853.418, 785], [854, 785.522], [854.493, 787], [855, 787.446], [855.395, 788], [856, 788.52], [856.44, 790], [857, 790.544], [857.472, 792], [858, 792.584], [858, 794], [858.586, 795], [859.546, 796], [860.386, 797], [861, 797.551], [862, 798.584], [863, 799.643], [863, 801], [863.448, 802], [864, 802], [865, 802]
-Path 117: [142, 710], [142.371, 711], [143, 711.598], [144, 712.525], [145, 713.373], [145, 714], [145.377, 715], [146, 715]
-Path 118: [347, 714], [348, 714], [348, 715], [348, 716], [348, 717]
-Path 119: [997, 714], [996, 714], [995, 714], [994.443, 715], [993.363, 716], [992, 716.605], [991, 717.583], [990, 718.514], [989, 719.453], [988.464, 720], [987.418, 721], [986.398, 722], [985.388, 723], [984, 723.58], [983, 724.544], [982, 725.525], [981, 726.51], [980, 727.458], [979.432, 728], [978.321, 729], [977, 729.486], [976.479, 730], [975.412, 731], [974.379, 732], [973, 732.644], [972, 733.614], [971, 734.559], [970, 735.523], [969, 736.503], [968, 737.487], [967.489, 738], [966.449, 739], [965, 739.631], [964, 740.587], [963, 741.554], [962, 742.546], [961, 743.515], [960, 744.473], [959.438, 745], [958.416, 746], [957.397, 747], [956.409, 748], [955.432, 749], [954.443, 750], [953.458, 751], [952.464, 752], [951.464, 753], [950.439, 754], [949.417, 755], [948.4, 756], [947, 756.622], [946, 757.576], [945, 758.537], [944, 759.493], [943.481, 760], [942.419, 761], [941, 761.616], [940, 762.639], [939, 763.628], [938, 764.595], [937, 765.558], [936, 766.534], [935, 767.536], [934, 768.516], [933, 769.471], [932.454, 770], [931.439, 771], [930.455, 772], [929.456, 773], [928.44, 774], [927.424, 775], [926.418, 776], [925.432, 777], [924.43, 778], [923.385, 779], [922, 779.598], [921, 780.578], [920, 781.549], [919, 782.485], [918.462, 783], [917.419, 784], [916.315, 785], [915, 785.536], [914, 786.5], [913, 787.488], [912.447, 788], [911.425, 789], [910, 789.577], [909, 790.524], [908, 791.461], [907.435, 792], [906.335, 793], [905.123, 794], [904, 794.418], [903.401, 795], [902.339, 796], [901, 796.507], [900, 797.417], [899.416, 798], [898.3, 799], [897.093, 800], [896, 800.239], [895.274, 801], [894, 802], [893, 802.329], [892.333, 803], [891.144, 804], [890, 804.251], [889.311, 805], [888, 806], [887, 806.057], [886.062, 807], [885, 808], [884, 808.17], [883.192, 809], [882, 809.294], [881.305, 810], [880, 811], [879, 811], [878, 812], [877, 812.053], [876.089, 813], [875, 813.012], [874.018, 814], [873, 815]
-Path 120: [146, 719], [145, 719], [144, 719], [143, 719], [142.512, 720], [142, 720.51], [142, 722], [141.451, 723], [140.619, 724], [140, 724.456], [139.606, 725], [139, 725.151], [139, 726]
-Path 121: [137, 726], [137, 727], [137.509, 728], [138, 729], [138.108, 730], [139, 730]
-Path 122: [483, 731], [483, 732], [483.513, 733], [484, 734], [484, 735], [484.448, 736], [485, 736.266], [485, 737]
-Path 123: [971, 727], [970, 728], [969, 729], [968, 730], [967, 731], [966, 732], [965, 732], [964.238, 733], [963.239, 734], [962.239, 735], [961.157, 736], [960.089, 737], [959, 738], [958, 739]
-Path 124: [423, 733], [422, 733.261], [421, 734.1], [420, 735], [419, 735.175], [418, 736.215], [417, 737], [416.206, 738], [415, 738.416], [414.4, 739], [413.301, 740], [412.055, 741], [411, 741.165], [410.212, 742], [409, 743], [408, 743.29], [407.312, 744], [406, 744.501], [405.426, 746], [404.458, 747], [403.499, 748], [402.454, 749], [401.404, 750], [400.357, 751], [399.303, 752], [398, 752.395], [397.425, 753], [396.444, 754], [395.448, 755], [394.455, 756], [394, 757], [394, 758]
-Path 125: [137, 739], [136.456, 739], [135.552, 740], [135, 740.72], [134.384, 741], [134, 742], [133.467, 743], [133, 744], [133, 745], [133, 746], [133.357, 747], [134, 747]
-Path 126: [993, 740], [992, 740.478], [991, 741.472], [989.519, 742], [989, 743], [988.363, 744], [987, 744.538], [986, 745.507], [985, 746.452], [984.439, 747], [983.361, 748], [982.218, 749], [981.08, 750], [980, 750.342], [979.368, 751], [978.295, 752], [977, 752.474], [976.455, 753], [975.455, 754], [974.436, 755], [973.394, 756], [972.181, 757], [971.086, 758], [970, 758.435], [969.448, 759], [968.49, 760], [967.517, 761], [967, 761.558], [966, 762.56], [965, 763.557], [964, 764.557], [963, 765.553], [962, 766.546], [961, 767.53], [960, 768.473], [959.506, 769], [959, 769.418], [958.446, 770], [957.411, 771], [956.395, 772], [955.411, 773], [954.477, 774], [953.479, 775], [952.458, 776], [951.406, 777], [950.376, 778], [949.367, 779], [948.349, 780], [947, 780.457], [946.482, 781], [945.439, 782], [944.432, 783], [943.392, 784], [942.374, 785], [941.358, 786], [940, 786.46], [939.437, 787], [938.43, 788], [937.424, 789], [936.43, 790], [935.396, 791], [934.312, 792], [933.29, 793], [932, 793.504], [931, 794.422], [930.433, 795], [929.393, 796], [928.322, 797], [927.283, 798], [926, 798.431], [925.41, 799], [924.359, 800], [923.334, 801], [922.304, 802], [921, 802.422], [920.396, 803], [919.226, 804], [918, 805], [917.095, 806], [916, 806.4], [915.387, 807], [914.332, 808], [913.327, 809], [912.342, 810], [911, 810.494], [910.404, 811], [909.436, 812], [908.468, 813], [907.435, 814], [906.419, 815], [905.41, 816], [904.403, 817], [903.41, 818], [902.393, 819], [901.363, 820], [900.33, 821], [899, 821.494], [898.475, 822], [897.434, 823], [896.431, 824], [895.417, 825], [894.398, 826], [893.372, 827], [892.334, 828], [891.275, 829], [890.231, 830], [889, 830.347], [888.366, 831], [887.293, 832], [886.173, 833], [885, 833.299], [884.304, 834], [883.216, 835], [882, 835.221], [881.29, 836], [880, 837], [879, 837.259], [878.263, 838], [877.241, 839], [876, 839.4], [875.373, 840], [874.264, 841], [873.214, 842], [872.235, 843], [871, 843.456], [870.459, 844], [869.459, 845], [868.467, 846], [867.424, 847], [866.355, 848], [865.32, 849], [864, 849.397], [863.443, 850], [862.305, 851], [861.116, 852], [860, 852.324], [859.324, 853], [858.21, 854], [857, 854.362], [856.367, 855], [855.331, 856], [854, 856.482], [853.491, 857], [852.462, 858], [851.419, 859], [850.338, 860], [849.128, 861], [848, 861.329], [847.363, 862], [846.16, 863], [845, 863.376], [844.386, 864], [843.363, 865], [842, 865.12], [842, 866]
-Path 127: [406, 746], [405, 746.57], [404, 747.552], [403, 748.474]
-Path 128: [464, 741], [463, 741.377], [461.558, 742], [461, 742.59], [460.458, 743], [460, 744], [459, 745], [458, 745.204], [457, 746.179], [456, 747], [455, 747]
-Path 129: [148, 745], [147.484, 745], [147, 746], [146.517, 747], [146, 748], [145.537, 749], [145, 749.559], [144.531, 751], [144, 751.406], [144, 752], [144, 753], [143.382, 754], [143, 755], [142.501, 756], [142, 756.594], [142, 758], [141.545, 759], [141, 759.542], [141, 761], [140.594, 762], [140, 762.506], [140, 764], [139.495, 765], [139, 766], [138.492, 767], [138, 768], [137.539, 769], [137, 769.563], [137, 771], [137, 772], [137, 773], [137, 774], [137, 775], [137, 776], [136.415, 777], [136, 778], [136, 779], [135.508, 780], [135, 780.497], [135, 781], [135, 782], [134.407, 783], [134, 784], [133.481, 785], [133, 786], [132.353, 787], [132, 788], [132, 789], [131.488, 790], [130.761, 791], [130, 791], [129, 792]
-Path 130: [292.713, 742], [292, 743], [292, 743.776], [291, 744.497], [290, 745], [289, 746], [288, 746.439], [287, 747.473], [286, 748.431], [285, 749.368], [284.424, 750], [283.63, 751], [283, 752], [283, 753], [282, 754], [282, 754.716], [281, 755]
-Path 131: [996, 752], [995, 752.085], [994, 753], [993, 754], [992, 754.278], [991, 755], [990, 755], [989.4, 756], [988, 756.61], [987.289, 758], [986.242, 759], [985, 759.378], [984.414, 760], [983.327, 761], [982.242, 762], [981, 762.377], [980.372, 763], [979.296, 764], [978.236, 765], [977.147, 766], [976, 766.35], [975.343, 767], [974.333, 768], [973, 768.516], [972, 769.455], [971.478, 770], [970.413, 771], [969.358, 772], [968.32, 773], [967.295, 774], [966, 774.517], [965, 775.542], [964, 776.513], [963, 777.461], [962.536, 778], [962, 778.351], [961.411, 779], [960, 779.584], [959, 781], [958, 782], [957.186, 783], [956, 783.659], [955.249, 785], [954.338, 786], [953.406, 787], [952.239, 788], [951.4, 789], [950.561, 790], [950, 790.399], [949.535, 791], [949, 791.342], [949, 792], [948, 793], [948, 794]
-Path 132: [950, 747], [949, 747.06], [948, 748], [947, 748.335], [946, 749.373], [945, 750.345], [944, 751.308], [943, 752.275], [942, 753.306], [941, 754.257], [940, 755.142], [939, 756.038], [938, 757], [937, 757], [936.271, 758], [935.236, 759], [934.26, 760], [933.25, 761], [932, 761.427], [931.533, 762], [931, 762.444], [931, 763], [930.199, 764], [929.191, 765], [928.114, 766], [927.076, 767], [926.024, 768], [925, 768.243], [924.338, 769]
-Path 133: [821, 752], [822, 752.345], [822.794, 753], [823, 753.711], [824, 754], [824.575, 754], [825, 754.601], [826, 755.465], [827, 756.41], [828.378, 757], [829, 757.663], [830, 758], [830.412, 759], [831, 759.076], [831, 760]
-Path 134: [270, 760], [270.512, 761], [271, 762], [271.333, 763], [272, 763.32], [272, 764], [272, 765]
-Path 135: [396, 759.432], [396.547, 760], [397, 761], [397, 762], [397, 763.483], [397.581, 764], [398, 765], [398, 765.505], [399, 766], [400, 766.589], [401, 767.491], [401.456, 768], [402, 768.482], [402.522, 769], [404, 769.578], [405, 770], [406, 770.503], [407, 771.469], [407.491, 772], [408, 772.485], [408.483, 773], [409, 773.511], [410, 774.519], [411, 775.496], [411.363, 776], [412, 776.419], [412, 777]
-Path 136: [527, 759], [526, 759.397], [525, 760.388], [524, 761.304], [522.513, 762], [522, 762.517], [521, 763.392], [520, 764.242], [518.515, 765], [518, 765.515], [517, 766], [516.395, 767], [515.304, 768], [514, 768.536], [513, 769.524], [512, 770.526], [511, 771.502], [510, 772.46], [509.453, 773], [508, 773.607], [507, 774.543], [506, 775.502], [505, 776.422], [504.416, 777], [503.327, 778], [502, 778]
-Path 137: [997, 766], [996, 766], [995, 766], [994.394, 767], [993.357, 768], [992.298, 769], [991, 769.42], [990.414, 770], [989.357, 771], [988.301, 772], [987, 772.418], [986.456, 773], [985.421, 774], [984.394, 775], [983.362, 776], [982.308, 777], [981, 777.419], [980.424, 778], [979.386, 779], [978.339, 780], [977.226, 781], [976, 781.38], [975.394, 782], [974.321, 783], [973.248, 784], [972, 784.418], [971.41, 785], [970.348, 786], [969.287, 787], [968, 787.432], [967.42, 788], [966.388, 789], [965.377, 790], [964.353, 791], [963, 791.432], [962.49, 792], [961.578, 793], [961, 793.623], [960, 794.442], [960, 795]
-Path 138: [448.464, 758], [449, 758.572], [449.646, 759], [450, 759.607], [450.586, 760], [451.412, 761], [452, 762.367], [453, 763], [454, 763], [455.073, 764], [456, 765.275], [456.849, 766], [457, 767], [457.489, 768], [458, 768.576], [459, 769.559], [460, 770.541], [461, 771.633], [461, 773]
-Path 139: [443, 775], [442, 775.469], [441.423, 776], [440, 776.653], [439, 777.579], [438, 778.496], [437.44, 779], [436.429, 780], [435, 780.638], [434, 781.654], [433, 782.553], [432, 784]
-Path 140: [761, 773], [761, 773.915], [761.542, 774], [762, 774.52], [763, 775], [764, 775.485], [764.54, 776], [765.538, 777], [766.487, 778], [767, 778.495], [767.502, 779], [769, 779.549], [770, 780.171], [770, 781]
-Path 141: [689, 772], [688, 772.174], [687, 773], [686, 773.317], [685, 774.289], [684, 775.311], [683, 776], [682.285, 777], [681.309, 778], [680, 778.568], [679.445, 780], [678.42, 781], [677.368, 782], [676.358, 783], [675.357, 784], [674.343, 785], [673.328, 786], [672, 786.277], [671.364, 787], [670.022, 788], [669, 789], [668, 789], [667, 790], [666, 791], [665, 792], [664, 792], [663, 792.275], [662.273, 793], [661.298, 794], [660, 794.489], [659.491, 795], [658.513, 796], [658, 796.54], [657, 797.497], [656.566, 798], [656, 798.45], [655.516, 799], [655, 799.342], [655, 800], [654, 801]
-Path 142: [831, 762], [831, 763], [831, 764.363], [831.568, 765], [832, 765.516], [833, 766], [833.699, 766], [834.444, 767], [835, 768], [835, 769], [835, 770.417], [835.539, 771], [836, 772.432], [837, 773.435], [838.312, 774], [839, 774.898], [839.669, 775], [840, 776], [840.359, 777], [841, 777]
-Path 143: [550, 778], [549, 778], [548.537, 779], [548, 779.554], [547, 780.541], [546, 781.578], [545, 782.644], [544, 783.573], [543, 784.572], [542, 785.524], [541, 786.51], [540, 787.479], [539.406, 788], [539, 789]
-Path 144: [523, 774], [522, 774], [521.36, 774], [521, 775], [520, 776], [519, 777], [518, 778], [517, 778], [516, 778.3], [515, 779], [514.268, 780], [513.272, 781], [512.292, 782], [511, 782.362], [511, 783], [510.175, 784], [509.15, 785], [508, 785.072], [507.381, 786], [506, 786]
-Path 145: [464, 781], [463, 781], [462, 781], [462, 782], [461.426, 783], [461, 784], [461, 785], [461, 786], [461, 787], [461, 788], [461, 789], [461.557, 790], [462.496, 791], [463, 791], [464, 791], [465, 791.545], [466, 792], [467, 792.598], [468, 793], [469, 793]
-Path 146: [116, 782], [116.564, 783], [117.382, 784], [118, 784.55], [119, 785], [120, 785.528], [121, 786.492], [121.19, 787], [122, 787]
-Path 147: [497, 778], [497.642, 778], [498, 778.62], [498.546, 779], [499.406, 780], [500, 781.498], [501, 782], [501.611, 783], [502.602, 784], [503.503, 785], [505, 785.249], [505.331, 786], [506, 786]
-Path 148: [752, 778], [751, 778.348], [750, 779.139], [749, 780], [748, 780.392], [747, 781.365], [746, 782], [745, 782], [744.472, 783], [743.421, 784], [742.343, 785], [741.278, 786], [740, 786.495], [739.505, 787], [739, 787.49], [738.475, 788], [737.43, 789], [736.35, 790], [735.286, 791], [734.22, 792], [733, 792.481], [732.468, 793], [731.457, 794], [730.424, 795], [729.349, 796], [728, 797], [727, 797], [726, 798], [725, 799], [724, 799.157], [723.064, 800], [722, 800.689], [721, 801.646], [720, 802.607], [719, 803.585], [718, 804.517], [717, 805.403], [716.399, 806], [715.307, 807], [714.263, 808], [713, 808.427], [712.414, 809], [711.36, 810], [710.24, 811], [709, 811.387], [708.369, 812], [707.317, 813], [706, 813.549], [705, 814.521], [704, 815.491], [703.604, 816], [703, 816.504], [702, 817.614], [701, 818.527], [700, 819.001], [699.001, 820], [698, 821], [697, 822], [696, 822.45], [695.404, 823], [694.338, 824], [693.147, 825]
-Path 149: [410, 782], [409, 782], [408.497, 782], [408, 782.627], [407, 783], [406.507, 784], [406, 784.528], [405, 785.405], [404.421, 786], [403.315, 787], [402.166, 788], [401.1, 789], [400, 789.42], [399.476, 790], [398.426, 791], [397.355, 792], [396.255, 793], [395.22, 794], [394, 794.481], [393.463, 795], [392.411, 796], [391.426, 797], [390.491, 798], [389.498, 799], [388.485, 800], [387.328, 801], [386, 802], [385, 803], [384, 804], [383, 805], [382, 805.355], [381.363, 806], [380.35, 807], [379.239, 808], [378.168, 809], [377, 810], [376, 810.037], [375.055, 811], [374, 812], [373, 812.25], [372.227, 813], [371, 813.526], [370, 814.491], [369.479, 815], [368.439, 816], [367.418, 817], [366.359, 818], [365.317, 819], [364, 819.38], [363.469, 820], [362.231, 821]
-Path 150: [911, 781], [910, 782], [909, 782], [908, 783], [907, 784], [906, 784], [905.126, 785], [904.046, 786], [903, 786.135], [902.187, 787], [901.044, 788], [900, 788.094], [899.152, 789], [898, 790], [897, 790.037], [896.067, 791], [895, 791.121], [894.186, 792], [893, 793], [892, 793], [891, 794], [890, 794], [889, 795], [888, 795], [887, 796], [886, 796], [885, 797], [884, 797], [883, 798], [882, 798], [881, 799]
-Path 151: [430, 785], [429, 786], [428, 786.476], [427, 787], [426.363, 788], [425, 788.583], [424, 789.499], [423.493, 790], [422.453, 791], [421.575, 792], [421, 792]
-Path 152: [494, 783], [493, 783.477], [492.47, 784], [492, 785.436], [491.445, 786], [491, 787], [491, 788], [490.531, 789], [490, 790], [489.514, 791], [489, 791.604], [488, 792.591], [487, 793.499], [487, 794], [486.167, 795], [485, 796], [484, 796], [483, 797], [482, 797]
-Path 153: [532, 796], [531, 796], [530, 796], [529.408, 797], [528.094, 798], [527, 799], [526, 799], [525, 799.643], [524, 800.568], [523, 801.397], [522.459, 802], [521, 803], [520, 804], [519, 805], [518, 805.511], [517, 806]
-Path 154: [957, 797], [956, 797], [955, 797], [954.453, 798], [953.482, 799], [952.492, 800], [951.529, 801], [951, 801.523], [950, 802.552], [949.461, 804], [948, 804.424], [948, 805], [947, 806], [946, 807], [945, 808]
-Path 155: [502, 798], [503, 798], [504, 798.607], [504.6, 800], [505.557, 801], [506.456, 802], [507, 802.451], [507, 803], [507.514, 804], [509, 804.334], [509, 805]
-Path 156: [748, 797], [748, 798], [748, 799], [748, 800], [748.549, 801], [749, 802], [749.333, 803], [750, 803]
-Path 157: [107, 801], [107, 802], [107.534, 803], [109, 803.378], [109.436, 804], [110, 804]
-Path 158: [550, 800], [549, 800.243], [548, 801.131], [547, 802], [546, 803], [545, 803], [544, 804], [543, 804], [542, 805], [541, 806], [540, 806.278], [539, 807], [538, 807], [537.46, 808], [536.47, 809], [535.473, 810], [534.44, 811], [533.425, 812], [532.405, 813], [531.413, 814], [530.447, 815], [529.511, 816], [529, 816.465], [528.541, 817], [528, 817.51], [527, 818.485], [527, 819], [526.296, 820], [525, 820.438], [524.442, 821], [523.377, 822], [522, 823]
-Path 159: [652, 802], [651, 802.258], [650, 803], [649, 803.44], [648, 804.393], [647, 805.405], [646, 806.426], [645, 807], [644, 807.57], [643.37, 809], [642.308, 810], [641, 810.377], [640.451, 811], [639.396, 812], [638.403, 813], [637.512, 814], [637, 814.538], [636, 815.566], [635.439, 817], [634.5, 818], [633.477, 819], [632.406, 820], [631, 821]
-Path 160: [866, 806], [866, 806.681], [867, 807], [867, 808], [867.5, 809], [868, 809], [869, 809.597], [870, 810]
-Path 161: [226, 805], [225, 805], [224.473, 805], [224, 806], [223.558, 807], [223, 808], [223, 809], [223, 810], [223, 811], [223, 812], [223, 813], [223, 814]
-Path 162: [110, 810], [110, 811], [110.522, 812], [112, 812.323], [112.282, 813], [113, 813]
-Path 163: [416, 811], [415, 811], [414, 811], [413.444, 812], [412.398, 813], [411.401, 814], [411, 815]
-Path 164: [482, 810], [482, 811], [482, 812], [483, 812.636], [483.529, 814], [484.425, 815], [485, 815.538], [486, 816.536], [487, 817.522], [488, 818.579], [489, 819.714], [490, 820.699], [490.409, 822], [491, 822.617], [491.603, 824], [492.489, 825], [493, 825.567], [493.617, 827], [494.463, 828], [495, 828.52], [495, 830]
-Path 165: [716, 813], [716, 814], [716, 815], [716.534, 816], [717, 817], [717.486, 818], [718, 818.363], [718.478, 819], [719, 819], [720, 819], [721, 820], [721.361, 821], [722, 821]
-Path 166: [918, 813], [917.599, 814], [917, 814.472], [916.522, 815], [916, 815.635], [915, 816.484], [914.404, 817], [913.404, 818], [912.325, 819], [911.291, 820], [910, 820.568], [909, 821.538], [908, 822.523], [907, 823.468], [906.451, 824], [905.411, 825], [904.389, 826], [903, 826.583], [902, 827.551], [901, 828.559], [900, 829.487], [899.454, 830], [898.406, 831], [897, 831.626], [896.294, 833], [895, 833.506], [894, 834.5], [893, 835.424], [892.478, 836], [891.305, 837], [890, 838], [889.014, 839], [888, 839.421], [887.449, 840], [887, 841]
-Path 167: [338, 815], [339, 815.481], [339, 816], [339, 817]
-Path 168: [939, 811], [937.527, 811], [936.559, 812], [936, 813.424], [935, 814.453], [934, 815], [933.365, 816], [932.332, 817], [931.298, 818], [930, 818.432], [929.425, 819], [928.451, 820], [927.434, 821], [926.352, 822], [925.295, 823], [924.118, 824], [923, 824.324], [922.308, 825], [921.251, 826], [920, 826.364], [919.359, 827], [918.314, 828], [917.266, 829], [916, 829.443], [915.438, 830], [914.394, 831], [913.375, 832], [912.348, 833], [911.295, 834], [910, 834.439], [909.506, 835], [909, 835.43], [908.428, 836], [907.378, 837], [906.336, 838], [905.253, 839], [904, 839.436], [903.43, 840], [902.409, 841], [901.389, 842], [900.334, 843], [899.206, 844], [898, 844.288], [897.307, 845], [896.199, 846], [895, 846.324], [894.41, 847], [893.354, 848], [892.193, 849], [891.183, 850], [890, 850.428], [889.425, 851], [888.414, 852], [887.392, 853], [886.337, 854], [885.265, 855], [884, 855.41], [883.413, 856], [882.403, 857], [881.374, 858], [880.324, 859], [879.268, 860], [878, 860.43], [877.432, 861], [876.41, 862], [875.376, 863], [874.334, 864], [873.288, 865], [872, 865.412], [871.423, 866], [870.397, 867], [869.425, 868], [869, 869]
-Path 169: [345, 816], [345.578, 817], [346.49, 818], [347, 818]
-Path 170: [354, 818], [353, 818], [352, 818], [351.706, 819], [351, 819.629], [350.316, 821], [349.233, 822], [348.225, 823], [347, 824], [346.382, 825], [346, 826], [346, 827], [345.717, 828], [347, 828]
-Path 171: [313, 820], [312, 820], [311, 820], [310.181, 821], [309, 822], [308, 822.177], [307.164, 823], [306, 823.474], [305.396, 824], [304.131, 825], [303, 826], [302, 826]
-Path 172: [321, 817], [321.471, 818], [322.493, 819], [323.489, 820], [324.455, 821], [325, 822], [325.611, 823], [326.5, 824], [327, 824.504], [328, 825.568]
-Path 173: [442, 821], [441, 821.051], [440, 822], [439, 822], [438.277, 823], [437.242, 824], [436.156, 825], [435.045, 826], [434, 826.245], [433.239, 827], [432.232, 828], [431, 828.339], [430.352, 829], [429.333, 830], [428.289, 831], [427.255, 832], [426.252, 833], [425, 833.374], [424.357, 834], [423.322, 835], [422.289, 836], [421.27, 837], [420.257, 838], [419.215, 839], [418, 839.309], [417.331, 840], [416.301, 841], [415.273, 842], [414.211, 843], [413.181, 844], [412, 844.325], [411.319, 845], [410.312, 846], [409.267, 847], [408.225, 848], [407.175, 849], [406, 849.331], [405.326, 850], [404.313, 851], [403.28, 852], [402.212, 853], [401.133, 854], [400, 854.25], [399.318, 855], [398.263, 856], [397.245, 857], [396.233, 858], [395, 858.323], [394.324, 859], [393.303, 860], [392.264, 861], [391.235, 862], [390.195, 863], [389.142, 864], [388, 864.1], [387.237, 865], [386, 866]
-Path 174: [445, 818.382], [445.614, 819], [446.486, 820], [447, 821.392], [448, 822], [448, 823]
-Path 175: [380, 820], [380, 821], [380, 821.533], [381, 822.463], [382, 823], [382, 824], [382.624, 825], [383, 826], [383, 827], [383, 828], [383, 829], [383, 830]
-Path 176: [626, 823], [625, 823], [624, 823], [623.383, 824], [622.412, 825], [621, 825.537], [620, 826.564], [619.423, 828], [618.399, 829], [617.346, 830], [616.136, 831], [615, 831], [614, 832], [613, 833], [612, 833], [611, 833.326], [610.351, 834], [609.283, 835], [608, 835.437], [607.505, 836], [607, 836.435], [606.483, 837], [605.488, 838], [604.513, 839], [604, 839.456], [603.505, 840], [603, 840.444], [602.475, 841], [601.448, 842], [600.422, 843], [599.429, 844], [598.589, 845], [598, 845.504], [597.547, 847], [597, 847.55], [597, 849], [596.675, 850], [596, 850]
-Path 177: [104, 825], [105, 825.434], [105.304, 826], [106, 826.404], [106, 827], [106, 828], [106.368, 829], [107, 829], [108, 829.387], [108.488, 830], [109, 830], [110, 830]
-Path 178: [456, 829], [456.401, 830], [457, 830], [458, 830], [459, 830]
-Path 179: [182, 826], [182, 826.528], [182.53, 827], [183, 828], [183, 829], [183, 829.531], [183.723, 830], [184, 831], [185, 831.498], [185.514, 832], [186.087, 833], [187, 833]
-Path 180: [269, 832], [269, 832.563], [270, 833], [270.619, 834], [271.448, 835], [272, 835.225], [272.329, 836], [273, 836.223], [273.55, 837]
-Path 181: [99, 835], [98, 835], [97, 835], [97, 836], [97, 837], [96.5831, 838], [96, 838.602], [96, 840], [96, 841], [96.4016, 842], [97, 842.592], [97.4843, 844], [98, 844.52], [98, 846]
-Path 182: [372, 833], [372, 834], [372, 835], [373, 835.565], [374, 836], [375, 837], [375, 838], [375.545, 839], [376, 840], [376.544, 841], [377.422, 842], [378, 842.453], [378.375, 843], [379, 843.559], [379, 845]
-Path 183: [508, 835], [508, 836], [508.509, 837], [509, 838], [509.422, 839], [510, 839.609], [510.471, 841], [511, 841.556], [512, 842.581], [513, 843.538], [514, 844.476], [514.551, 845], [516, 845.519], [517, 846], [518, 846], [519, 846.551], [520, 847], [521, 847], [522, 847.091], [522, 848]
-Path 184: [318, 836], [317, 836], [316.16, 837], [315, 837.297], [314.32, 838], [313.264, 839], [312.203, 840], [311, 840.354], [310.342, 841], [309.305, 842], [308.277, 843], [307.238, 844], [306, 844.399], [305.416, 845], [304.369, 846], [303.342, 847], [302.29, 848], [301.195, 849], [300.169, 850], [299, 850.264], [298.592, 851], [298, 851]
-Path 185: [704, 836], [703, 836], [702, 836], [701.361, 837], [700.295, 838], [699.176, 839], [698, 839.512], [697, 840.44], [696.418, 841], [695.375, 842], [694.312, 843], [693, 843.51], [692, 844.488], [691.473, 845], [690.461, 846], [689.429, 847], [688.395, 848], [687.355, 849], [686.267, 850], [685, 850.426], [684.423, 851], [683.373, 852], [682.289, 853], [681.165, 854], [680, 854.358], [679.355, 855], [678.307, 856], [677, 856.485], [676.478, 857], [675.445, 858], [674.395, 859], [673.344, 860], [672.299, 861], [671, 861.485], [670.479, 862], [669.435, 863], [668.359, 864], [667.273, 865], [666, 865.502], [665, 866.47], [664.454, 867], [663.426, 868], [662.385, 869], [661.347, 870], [660, 870.534], [659, 871.498], [658.475, 872], [657.431, 873], [656.391, 874], [655.347, 875], [654.291, 876], [653, 876.463], [652.441, 877], [651.416, 878], [650.379, 879], [649.3, 880], [648, 880.471], [647.441, 881], [646.41, 882], [645.329, 883], [644.201, 884], [643, 884.385], [642.385, 885], [641.332, 886], [640, 886.513], [639, 887.466], [638.452, 888], [637.442, 889], [636.414, 890], [635.368, 891], [634.347, 892], [633, 892.543], [632, 893.532], [631, 894.512], [630, 895.496], [629.48, 896], [628.462, 897], [627.44, 898], [626.412, 899], [625.391, 900], [624.354, 901], [623.282, 902], [622, 902.424], [621.422, 903], [620.334, 904], [619.213, 905], [618, 905.343], [617.349, 906], [616.293, 907], [615, 907.46], [614.451, 908], [613.391, 909], [612.34, 910], [611.302, 911], [610, 911.511], [609, 912.398], [608.395, 913], [607, 914]
-Path 186: [265.437, 836], [266, 837], [267, 838], [267.492, 839], [268, 839.542], [268, 841]
-Path 187: [384, 837], [383, 837], [382, 837.484], [381.618, 838], [381, 838.422], [381, 839], [381, 840]
-Path 188: [290, 838], [291, 838], [292, 838], [293, 838], [294, 838]
-Path 189: [334, 838], [333, 838], [332, 838], [331.432, 839], [330.433, 840], [329.395, 841], [328.23, 842], [327, 842.412], [326.418, 843], [325.38, 844], [324.386, 845], [323.443, 846], [322.444, 847], [321.404, 848], [320.349, 849], [319.283, 850], [318, 851], [317, 851.188], [316.243, 852], [315, 852.164], [314.29, 853], [313, 854]
-Path 190: [494, 840], [495, 841], [495.36, 842], [496, 842.568], [496.517, 844], [497, 845], [497, 846], [497.268, 847], [498, 847.643], [498, 849], [498, 850]
-Path 191: [274, 841], [274.641, 841], [275, 841.66], [276, 842], [276.629, 843], [278, 843.557], [279, 844.453], [279.409, 845], [280, 845.46], [280.329, 846], [281, 846]
-Path 192: [264, 842], [264, 843], [265, 843.688], [266, 844], [267, 845], [268, 846]
-Path 193: [253, 845], [253.535, 846], [254.51, 847], [255.4, 848], [256, 848.619], [256.634, 850], [257.573, 851], [258.577, 852], [260, 852.886]
-Path 194: [291, 845], [292, 845], [292, 846], [292.557, 847], [293, 848], [293.513, 849], [294, 850], [294, 851]
-Path 195: [249, 846], [248, 846], [247, 847], [246, 848], [245, 849]
-Path 196: [528, 846], [528, 847], [529, 847], [530, 847.527], [531, 848.524], [531.543, 850], [532, 851], [532.581, 852], [533.5, 853], [534, 853.527], [535, 854.553], [536, 855.546], [537, 856.523], [538, 857.49], [538.414, 858], [539, 858.497], [539, 859], [539.477, 860], [540, 860.522], [540, 862], [540.42, 863], [541, 863.584], [542, 864.645], [543, 865.589], [544, 866.55], [545, 867.468], [545.489, 868], [546, 868], [547, 868], [548, 868]
-Path 197: [249, 848], [249, 849], [249.638, 850], [250.483, 851], [251, 851.567], [252, 852.56], [253, 853.581], [254, 854.592], [255, 855.404], [255.592, 856], [257, 857]
-Path 198: [263, 848], [263, 849], [264, 850], [265, 850.356], [265.126, 851], [266, 851.226], [266, 852]
-Path 199: [355, 844], [354, 844.393], [353, 845.059], [352, 846], [351, 847], [350.467, 847], [350, 848], [349, 849], [348, 850], [347, 850], [346, 850.626], [345, 851.325], [344.411, 852], [343, 852.5], [342, 853], [341, 853.592], [340, 854.504], [340, 856], [340, 857], [340, 858], [340, 859], [340, 860]
-Path 200: [794, 846], [794, 847], [794, 848], [794.606, 849], [796, 849.426], [796, 850], [796, 851], [797, 852]
-Path 201: [840, 843], [839.397, 843], [839, 844], [838.501, 845], [838, 846.415], [837.323, 847], [837, 847.593], [836, 848], [835.546, 849], [835, 849.336], [834.412, 850], [833.123, 851], [832.105, 852], [831.15, 853], [830, 853.408], [829.637, 854], [829, 854]
-Path 202: [98, 849], [98, 850], [98.5541, 851], [99, 852], [99.4731, 853], [100, 853.388], [100.464, 854], [101, 854], [102, 854.49], [102.447, 855], [103, 855.508], [104, 856.521], [105, 857.529], [105.476, 859], [106, 859.443], [106, 860], [106, 861], [106, 862], [106, 863]
-Path 203: [694, 834], [693, 834.449], [692, 835.395], [691, 836.272], [690, 837.144], [689, 838.123], [688, 839.161], [687, 840], [686, 841], [685, 841.222], [684, 842.142], [683, 843.07], [682, 844], [681, 844.325], [680, 845.166], [679, 846.129], [678, 847.056], [677, 848.02], [676, 849], [675, 849.302], [674, 850], [673, 850.564], [672.16, 852], [671, 852.35], [670.383, 853], [669, 853.523], [668.169, 855], [667.072, 856], [666, 856], [665, 856.579], [664.079, 858], [663, 859], [662, 859.328], [661.347, 860], [660.309, 861], [659.296, 862], [658.291, 863], [657, 863.588], [656, 864.513], [655, 865.438], [654.461, 866], [653.409, 867], [652.317, 868], [651.239, 869], [650.147, 870], [649, 870.293], [648.281, 871], [647.169, 872], [646.125, 873], [645, 873.335], [644.353, 874], [643.342, 875], [642.374, 876], [641.303, 877], [640, 877.662], [639, 878.497], [639, 879], [638.031, 880], [637, 881], [636, 881], [635, 882], [634, 883], [633, 884], [632, 884.196], [631.227, 885], [630, 885.47], [629.441, 886], [629, 887], [628, 888], [627, 888.144], [626.158, 889], [625, 890], [624, 891], [623, 891.39], [622.338, 892], [621.302, 893], [620, 893.508], [619, 894.438], [618.416, 895], [617.464, 896], [616.424, 897], [615.248, 898], [614, 899], [613, 900], [612, 900], [611, 900.133], [611, 901]
-Path 204: [877, 849], [876, 850], [875, 850], [874, 850.431], [873, 851], [872, 851.619], [871, 852.537], [870, 853.41], [869.391, 854], [868, 854.573], [867.101, 856], [866, 857], [865, 857.06], [864.052, 858], [863.064, 859], [862, 859.409], [861.431, 860], [860.37, 861], [859.341, 862], [858, 862.512], [857, 863.495], [856.417, 864], [855.405, 865], [854.409, 866], [853.334, 867], [852.232, 868], [851.167, 869], [850, 869.427], [849.432, 870], [848.319, 871], [847.096, 872], [846.037, 873], [845, 873.398], [844.303, 874], [843.466, 875], [842.439, 876], [842, 877]
-Path 205: [244, 852], [245, 852.522], [246, 853.638], [246.593, 855], [247.578, 856], [248.593, 857], [249.64, 858], [251, 858.46], [251, 859]
-Path 206: [368, 850], [368.429, 851], [369, 852], [369.657, 853], [370.63, 854], [371.608, 855], [372.587, 856], [373.588, 857], [375, 857.543], [376, 858.464], [376.369, 859], [377, 859.531], [378, 860.591], [379, 861.689], [380, 862.481], [380, 863]
-Path 207: [365, 853], [364, 853], [363.248, 854], [362.199, 855], [361.165, 856], [360, 856.281], [359.306, 857], [358.272, 858], [357.222, 859], [356.178, 860], [355, 860.299], [354.311, 861], [353.273, 862], [352.231, 863], [351.211, 864], [350, 864.31], [349.32, 865], [348.3, 866], [347.291, 867], [346.097, 868], [345, 868.098], [344.147, 869], [343, 870], [342.273, 870.677], [343, 871.517], [344, 872.57], [345, 873.532], [346, 874.501], [347, 875.503], [348, 876.581]
-Path 208: [788, 853], [789, 853.318], [789, 854], [789, 855]
-Path 209: [239, 854], [238, 854], [237, 854], [237, 855], [236.536, 856], [236, 856], [235, 857], [235, 858]
-Path 210: [501, 855], [500, 855], [499.139, 856], [498.401, 857], [497.497, 858], [496, 858]
-Path 211: [382, 857], [383, 858], [383, 859], [383.492, 860], [384, 861], [385, 862]
-Path 212: [575, 857], [574, 857], [573, 857], [573, 858], [573, 859], [573, 860], [573.473, 861], [574, 861.541], [575, 862.519], [576, 863.568], [576.561, 865], [577.463, 866], [578, 866.521], [579, 867.517], [580, 868.593], [581, 869.639], [581.512, 871], [582.428, 872], [583, 872.578], [584, 873.615], [584.549, 875], [585.527, 876], [586.478, 877], [587, 877.511], [588, 878.527], [589, 879.543], [590, 880.547], [591, 881.04], [591, 882]
-Path 213: [814, 855], [813, 855.126], [812, 856.028], [811, 857], [810, 857], [809.226, 858], [808.127, 859], [807, 859.342], [806.345, 860], [805.357, 861], [804.363, 862], [803.267, 863], [802.217, 864], [801.288, 865], [800.268, 866], [799.245, 867], [798.259, 868], [797.063, 869], [797, 870]
-Path 214: [242, 858], [243, 858], [244, 859], [244.329, 860], [245, 860.543], [246, 861]
-Path 215: [495, 860], [494, 861], [493, 861.396], [492.46, 862], [492, 863]
-Path 216: [588, 860], [587.729, 861], [587, 861], [586, 861], [585, 861]
-Path 217: [509, 862], [508, 862], [507, 863], [507, 864], [506.597, 865], [506, 865]
-Path 218: [501, 866], [502, 866], [503, 866.37], [503, 867], [503, 868], [504, 869], [504, 870]
-Path 219: [566, 866], [567, 866], [568, 866.377], [568.404, 867], [569, 867], [570, 867], [571, 868]
-Path 220: [746, 865], [746.918, 865], [747, 865.652], [748, 866], [748.221, 867], [749, 867.471], [749, 868]
-Path 221: [819, 865], [817.516, 865], [817, 865.502], [816, 866.444], [815, 867], [814.382, 868], [813.337, 869], [812, 869.453], [811.454, 870], [810.395, 871], [809.384, 872], [808, 872.547], [807, 873.449], [806.425, 874], [805.329, 875], [804.211, 876], [803, 876.521], [802, 877.512], [801, 878.44], [800.416, 879], [799.375, 880], [798.325, 881], [797, 881.491], [796.5, 882], [795.474, 883], [794.441, 884], [793.283, 885], [792, 886], [791, 886], [790, 886.56], [789, 888], [788, 888], [787, 888.585], [786, 889.47], [786, 890], [785, 891], [784, 891.534], [783, 892.55], [782, 893.529], [781, 894.528], [780, 895.531], [779, 896.513], [778, 897.483], [777.46, 898], [776.422, 899], [775.397, 900], [774, 900.578], [773, 901.534], [772, 902.486], [771.448, 903], [770.405, 904], [769.366, 905], [768.355, 906], [767, 906.606], [766, 907.573], [765, 908.521], [764, 909.49], [763.476, 910], [762.469, 911], [761.483, 912], [760.542, 913], [760, 913.446], [759.581, 914], [759, 914.354], [758.365, 915], [757.302, 916], [756.267, 917], [755.177, 918], [754, 918.317], [753.392, 919], [752.321, 920], [751.259, 921], [750.216, 922], [749, 922.437], [749, 923], [748.055, 924], [747, 924.174], [746.24, 925], [745, 926], [744, 927], [743, 928], [742, 929], [741, 929], [740, 930], [739, 930], [738, 931], [737, 932], [736, 933], [735.326, 934], [734.595, 935], [734, 935]
-Path 222: [498, 868], [497.55, 869], [497, 869.575], [497, 871], [497, 872], [497, 873], [497, 874]
-Path 223: [515, 862], [515.451, 863], [516, 864.492], [516.554, 865], [517.492, 866], [518, 866.522], [518.503, 867], [519, 868], [520, 868.54], [520.331, 870], [521, 870]
-Path 224: [743, 868], [742, 868], [741.856, 869], [741, 869.692], [740, 871], [739.543, 872], [739, 872]
-Path 225: [839, 869], [838, 870], [837, 870], [836, 870], [835.481, 871], [834.55, 872], [834, 872.491], [833.563, 873], [833, 873.503], [832, 874.534], [831, 875.472], [830.488, 876], [829.454, 877], [828.392, 878], [827.313, 879], [826.18, 880], [825, 880.308], [824.364, 881], [823.309, 882], [822, 882.372], [821.426, 883], [820.332, 884], [819.249, 885], [818.161, 886], [817, 886.366], [816.38, 887], [815.319, 888], [814.207, 889], [813, 889.166], [812.265, 890], [811, 891]
-Path 226: [478, 871], [477, 871], [476, 871.55], [475, 872.559], [474, 873.548], [473, 874.491], [472.514, 875], [472, 875.469], [471.513, 876], [471, 876.474], [470.438, 877], [469.387, 878], [468.257, 879], [467, 879.515], [466, 880.537], [465, 881.418], [464.434, 882], [463.305, 883], [462.142, 884], [461, 884.494], [460.447, 885], [459.218, 886]
-Path 227: [598, 867], [598.409, 868], [599, 869.428], [600, 870.496], [601, 871], [601.444, 872], [602, 872.551], [603, 873.458], [603.407, 874], [604, 874.374], [604.45, 875], [605, 875.378], [605.413, 876], [606, 876.681], [606.537, 878], [607.539, 879], [608.433, 880], [609, 880.433], [609, 881]
-Path 228: [793, 871], [792, 871], [791.173, 872], [790, 872.338], [789.329, 873], [788.284, 874], [787.327, 875], [786, 875.501], [785, 876.578], [784.343, 878], [783.334, 879], [782.321, 880], [781, 881], [780.386, 882], [779.358, 883]
-Path 229: [566, 869], [566.371, 870], [567, 871.46], [568, 872], [568.513, 873], [569.409, 874], [570, 874.606], [571, 875.645], [571.646, 877], [572.549, 878], [573.498, 879], [574, 879.514], [575, 880.606], [576, 881.638], [577, 882.646], [577.645, 884], [578.596, 885], [579.569, 886], [580.446, 887], [581, 887.564], [582, 888.601], [583, 889.579], [583.64, 891], [584.557, 892], [585.445, 893], [586, 893.499], [586.362, 894], [587, 894.726], [587.667, 896], [588, 897]
-Path 230: [862, 874], [861, 874], [860, 874], [859.465, 875], [858.429, 876], [857.377, 877], [856.311, 878], [855.226, 879], [854, 879.394], [853.376, 880], [852.375, 881], [851.392, 882], [850.519, 883], [850, 883.452], [850, 884], [849.7, 885], [849, 885]
-Path 231: [737, 876], [738, 876], [739, 876], [740, 876.748]
-Path 232: [750, 875], [749, 875], [748.477, 875], [748, 875.547], [747.419, 876], [747, 876.512], [746, 877], [745.488, 878], [744.458, 879], [743.476, 880], [743, 881]
-Path 233: [204, 877], [204, 878], [205, 878], [206, 878.46], [206.523, 879]
-Path 234: [558, 876.173], [557, 877], [556, 878], [555, 878], [554.044, 879], [553.239, 880], [552.255, 881], [551.324, 882], [551, 883]
-Path 235: [643, 868], [642, 868], [641, 868], [640, 868], [639.483, 868], [639, 868.578], [638, 869], [637.479, 869], [637, 869.674], [636.483, 870], [636, 871], [635, 872], [634.495, 872], [633.506, 873], [632.525, 874], [631.582, 875], [631, 875.552], [630, 876.473], [629.396, 877], [629, 878], [628, 879], [627, 879], [626, 879], [625.413, 880], [624.434, 881], [623.449, 882], [622.388, 883], [621.137, 884]
-Path 236: [504, 875], [504, 875.517], [504.802, 876], [505, 877], [505, 878], [505, 879], [505, 880], [506, 880.395], [506, 881], [506, 882], [507, 883], [506.103, 884]
-Path 237: [271, 881], [270, 882], [269, 882], [268, 882]
-Path 238: [367, 881], [366, 881], [365.108, 882], [364.003, 883], [363, 883.31], [362.342, 884], [361.303, 885]
-Path 239: [199, 881], [198, 881.265], [197, 882.397], [196, 883], [195.334, 884], [194, 884.56], [193, 885.55], [192.435, 887], [191.542, 888], [191, 888.611], [190, 889.576], [189, 890.541], [188.455, 892], [187.039, 893], [186.25, 894], [186, 895], [185, 896], [184, 896], [183, 896], [182, 897]
-Path 240: [287, 883], [286, 883], [285.366, 884], [284, 884.413], [284, 885], [283, 886], [282, 887], [282, 888], [281.094, 889]
-Path 241: [524, 879], [524.286, 880], [525, 881], [525, 881.511], [525.581, 882], [526, 883], [527, 883.536], [528, 884.567], [529, 885.676], [529.464, 887], [530, 887.552], [531, 888.538], [532, 889.522], [533, 890.501], [534, 891.536], [534.54, 893], [535.374, 894], [536, 894.478], [536.401, 895], [537, 895.485], [537, 896], [537, 897], [537.29, 898], [538, 898.708], [538, 900]
-Path 242: [836, 882], [835, 882], [833.585, 882], [833, 883], [832.175, 884], [831, 885], [830, 885.316], [829.317, 886], [828, 886.55], [827, 887.492], [826.47, 888], [825.427, 889], [824.378, 890], [823.314, 891], [822, 891.435], [821.43, 892], [820.387, 893], [819.237, 894], [818, 894.386], [817.45, 895], [816.417, 896], [815.401, 897], [814, 897.339], [813.427, 898], [812.293, 899], [811.448, 900], [810.529, 901], [810, 901.549], [809, 902.48], [808.517, 903], [808, 903.433], [807.511, 904], [807, 904.407], [806.467, 905], [805.339, 906], [804.329, 907], [803, 907.539], [802, 908.49], [801.507, 909], [801, 909.471], [800.493, 910], [799.483, 911], [798.523, 912], [798, 912.383], [797.64, 913], [797, 913.46], [796.523, 914], [796, 914.522], [795, 915], [794, 915], [793, 915]
-Path 243: [228, 884], [227.055, 885], [226, 885.471], [226, 886], [225.49, 887]
-Path 244: [483, 884], [482, 884], [481.378, 885], [480.403, 886], [479, 886.368], [479, 887]
-Path 245: [907, 885], [908, 885], [909, 885], [910, 885], [911, 885], [912, 885.875], [913, 886], [914, 886], [915, 886], [916, 886.54], [917, 887], [918, 887], [919, 887.043], [919, 888]
-Path 246: [323, 886], [322, 886], [321.462, 887], [321, 888], [320.428, 889], [319.487, 890], [318.446, 891], [317.357, 892], [316.302, 893], [315, 893.457], [314.478, 894], [313.433, 895], [312.458, 896], [311.419, 897], [310.321, 898], [309.293, 899], [308.278, 900], [307, 900.479], [306.477, 901], [305.463, 902], [304.365, 903], [303.145, 904], [302, 905], [301, 905.355], [300.439, 906], [299.438, 907], [298.379, 908], [297, 908.456], [297, 909], [296.35, 910], [295, 910.358], [294.467, 911], [293.264, 912], [292.029, 913], [291.068, 914], [290, 914.061], [289.096, 915], [288, 916], [287, 917], [286, 918]
-Path 247: [231, 888], [230.502, 889], [230, 889], [229, 890], [229, 891], [228.624, 892], [228, 892]
-Path 248: [735, 882], [733.604, 882], [733, 883], [733, 883.782], [732.45, 884], [731.554, 885], [731, 886.416], [730, 887.446], [729, 888], [728, 889], [727, 890], [726, 891], [725, 892], [724, 892]
-Path 249: [928, 889], [927, 889], [926, 889], [925, 889.665], [924, 890], [923, 890], [922, 890]
-Path 250: [83, 890], [83.5498, 891], [85, 891.402], [85, 892]
-Path 251: [498, 890], [498, 890.635], [499, 891], [499, 892], [499.528, 893]
-Path 252: [731.486, 890], [732, 891], [733, 891.481], [733.206, 892], [734, 892]
-Path 253: [891, 886], [892, 886], [893, 886.498], [894, 887], [895, 887], [896, 887], [897, 887], [898, 887], [899.346, 887], [900, 888], [901, 889], [902, 889], [902.529, 889], [903, 889.508], [904, 890], [905.443, 890], [906, 891], [907, 891], [908, 891.535], [909, 892], [910, 892.455], [910.434, 893], [911, 893.319], [911, 894], [911.556, 895], [912, 896], [912.462, 897], [913, 897.572], [913.408, 899], [914, 899.525], [914, 901], [914.439, 902], [915, 902]
-Path 254: [520, 881], [518.719, 881], [518, 882], [517.509, 883], [517, 884.396], [516.305, 885], [515.503, 886], [514.565, 887], [514, 887.597], [513, 888.425], [512, 889], [511, 889], [510, 889.473], [509, 890], [508, 890], [507.485, 890], [507, 891.054], [506, 892], [505, 892], [504, 892], [503.442, 893]
-Path 255: [808, 892], [807, 892], [806.131, 893], [805.034, 894], [804, 894.243], [803.279, 895], [802.134, 896], [801, 896.325], [800.413, 897], [800, 898]
-Path 256: [495, 893], [494, 893], [493.166, 894], [492, 895], [491, 895]
-Path 257: [853, 895], [852, 895], [851.333, 896], [850.226, 897], [849, 897.667], [848.343, 899], [848, 900]
-Path 258: [238, 897], [237, 897], [236, 897], [235.304, 898], [235, 899], [234.707, 900], [234, 900.275], [233.336, 901], [232, 901.649], [232, 903]
-Path 259: [83, 898], [84, 898.441], [84, 899], [84.4691, 900], [85, 900.371], [85, 901]
-Path 260: [333, 898], [334, 898.503], [335, 899.521], [336, 900.572], [336.519, 902], [337.17, 903], [338, 903]
-Path 261: [610, 894], [609, 894], [608.464, 894], [608, 895], [607, 896.022], [606, 897], [605.37, 897], [605, 897.517], [604, 898.453], [603, 899], [602.533, 900], [602, 900]
-Path 262: [765, 895], [764, 896], [763, 896.01], [762, 897], [761, 897.256], [760, 898.288], [759, 899], [758.312, 900], [757.336, 901], [756.283, 902], [755.243, 903], [754.203, 904], [753.158, 905], [752.118, 906], [751, 907], [750, 907.193], [749.216, 908], [748, 909], [747, 910], [746, 910.054], [745.094, 911], [744, 912], [743, 913], [742, 913.096], [741.105, 914], [740.048, 915], [739, 915.348], [738.384, 916], [737.294, 917], [736.204, 918], [735.157, 919], [734.164, 920], [733, 920.416], [732.44, 921], [731.393, 922], [730.33, 923], [729.214, 924], [728.108, 925], [727.118, 926], [726.128, 927]
-Path 263: [843, 902], [842, 902], [841.426, 902], [841, 902.588], [840, 903], [840, 904], [839, 905], [838, 905.209], [837.232, 906], [836, 906.473], [835.47, 907], [834.44, 908], [833.398, 909], [832, 909.419], [831.509, 910], [831, 910.288], [830.554, 911], [830, 911.333], [829.292, 912], [828.433, 913], [827.434, 914], [826, 914.351], [825.55, 915], [825, 915.185], [825, 916]
-Path 264: [459, 904], [458, 904], [457, 904], [456.473, 905], [455.465, 906], [454.499, 907], [453.471, 908], [452.423, 909], [451.46, 910], [450.477, 911], [449.455, 912], [448, 912.601], [447, 913]
-Path 265: [487, 905], [486, 905], [485, 905], [484.547, 906], [484, 906.516], [483, 907.456], [482.461, 908], [481.393, 909], [480, 909.608], [479, 910.499], [478.46, 911], [477.385, 912], [476, 912.572], [475, 913.623], [474, 914.498], [473.484, 915], [472.395, 916], [471.283, 917], [470, 917.521], [469, 918.223], [468.23, 919], [467, 920], [466, 921], [465, 921], [464, 921], [463, 921.609], [462.185, 923], [461.087, 924], [460.006, 925], [459, 925.274], [458.266, 926], [457.164, 927], [456, 927.378], [455.44, 928], [454.41, 929]
-Path 266: [172, 904], [171, 904], [170.463, 904], [169.503, 905], [169, 905.599], [168, 906], [167.505, 907], [167, 907.38], [167, 908], [166, 909]
-Path 267: [513, 907], [512, 907], [511.097, 908], [510, 908.245], [509.452, 909]
-Path 268: [509, 911], [509.699, 912], [510.621, 913], [511.631, 914], [512.611, 915], [513.589, 916], [514.576, 917], [515.533, 918], [516.5, 919], [517, 919.532], [518, 920.165], [518, 921]
-Path 269: [707, 912], [708, 912], [708, 913], [708, 914], [708.568, 915], [709.312, 916], [710, 916], [711, 917], [711.464, 918], [712, 918.414], [712.407, 919], [713, 919]
-Path 270: [266, 913], [265, 913], [264.213, 914], [263.03, 915], [262, 915], [261, 915.478], [261, 916], [260.87, 917], [260, 917]
-Path 271: [465, 913], [464, 913], [463, 913], [462.572, 914], [462, 914.511], [461, 915.547], [460, 916.601], [459.275, 918], [458, 918.281], [457.284, 919], [456, 920], [455, 921], [454, 921.321], [453.343, 922], [452, 922.606], [451, 923.521], [450, 924.443], [450, 925]
-Path 272: [605, 915], [604, 916], [603, 916], [602, 916.584], [601, 917.57], [600, 918.483], [599.512, 919], [599, 919.418], [598.437, 920], [597.396, 921], [596.406, 922], [595.393, 923], [594.368, 924], [593.323, 925], [592, 925.507], [591.532, 927], [591, 927.488], [591, 928], [591, 929]
-Path 273: [533, 915], [534, 916], [534.823, 916], [535, 917], [536, 917]
-Path 274: [71, 917], [71, 918], [71.4585, 919], [72, 919], [73, 919], [74, 919.036], [74, 920]
-Path 275: [820, 918], [819, 918], [818.47, 918], [818, 919.078], [817, 920], [816, 920], [815.407, 921], [814.353, 922], [813.351, 923], [812, 923.571], [811, 924.501], [810, 926], [809, 926.664], [809, 928], [808.263, 929], [807, 929.286], [806.397, 930], [806, 931], [805.273, 932], [804, 932.594], [803, 933.204], [802.375, 934]
-Path 276: [175, 921], [175.563, 921], [176, 922], [176.493, 923], [177, 923.529]
-Path 277: [257, 923], [256, 923], [255, 923], [254.554, 924], [254, 924.601], [253, 925.513], [252, 926.438], [251.403, 927], [250.338, 928], [249, 928.534], [248, 929.467], [247.427, 930], [246.369, 931], [245.366, 932], [244.277, 933]
-Path 278: [239, 926], [238, 926], [237.219, 927], [236.047, 928], [235, 928.293], [234.28, 929], [234, 930]
-Path 279: [66, 926], [66, 927], [66, 928], [66.5362, 929], [68, 929], [69, 929]
-Path 280: [403, 913], [402, 913], [401, 913.346], [400.392, 914], [399.525, 915], [398.646, 916], [398, 916.525], [397.483, 917], [396.54, 918], [397, 919], [397, 920], [397, 921], [397, 922], [397, 923], [397, 924.459], [397.605, 925], [398.433, 926], [399, 927], [399.457, 928], [400, 928.571], [400.421, 930], [401, 930.588], [401, 932], [401.512, 933], [402, 934], [402, 935], [402.606, 936], [403.408, 937], [404, 937.584], [404.544, 939], [405.448, 940], [406, 940.539], [407, 941.593], [408, 942.357], [408, 943]
-Path 281: [684, 929], [684.664, 930], [685.441, 931], [686, 931.55], [686.461, 933], [687, 933.479], [687, 934], [687, 935]
-Path 282: [905, 928], [905, 929], [906, 929.451], [906, 930], [906, 931]
-Path 283: [345, 928], [345, 928.614], [345.581, 929], [346, 930], [347, 930.598], [347.492, 932], [348, 932.418], [348, 933], [348, 934]
-Path 284: [448, 931], [447, 931], [446, 931], [445.464, 932], [444.217, 933], [443.245, 934], [442.396, 935], [441.43, 936], [440, 936]
-Path 285: [591, 931], [591.461, 932], [592, 932.524], [592.566, 934], [593.487, 935], [594, 935.534], [594.566, 937], [595.469, 938], [596, 938.51], [597, 939.609], [597.575, 941], [598.471, 942], [599, 942.541], [600, 943.556], [601, 944.549], [602, 945.504], [603, 946], [604, 946.556], [605, 947], [606, 947.495], [606.546, 948], [608, 948.171], [608, 949]
-Path 286: [724, 928.064], [723, 929.022], [722, 930.032], [721, 931], [720, 931], [719.342, 932], [718.202, 933], [717.072, 934], [716, 935], [715, 935.278], [714.257, 936], [713.227, 937], [712.194, 938], [711.229, 939], [710, 939.396], [709.461, 940], [708.519, 941], [708, 941.357], [708, 942], [708, 943], [708, 944], [707.359, 945], [706.44, 946], [705.483, 947], [704.546, 948], [704, 948.599], [703.402, 950], [702.382, 951], [701.356, 952], [700.303, 953], [699, 953.378], [698.419, 954], [697.373, 955], [696.264, 956], [695.245, 957], [694.229, 958], [693, 958.253], [692.442, 959], [692, 960]
-Path 287: [543, 926], [543, 926.531], [543.553, 927], [544, 928], [544.474, 929], [545, 930], [545, 931], [545, 932], [545, 933], [545.407, 934], [546, 934.605], [546, 936], [546.501, 937], [547, 938], [547.485, 939], [548, 939.426], [548.323, 940], [549, 940.399], [549, 941]
-Path 288: [242, 934], [241, 935], [240, 935.06], [239.11, 936], [238, 936]
-Path 289: [426, 928], [425.376, 928], [424.528, 929], [424, 930], [424, 931.409], [423.404, 932], [423, 932.516], [422.473, 933], [422, 934], [421.409, 935], [420.508, 936], [420, 936.551], [419, 937.575], [418, 938.572], [417, 939.538], [416.264, 941], [415, 941.262], [414.38, 942]
-Path 290: [633, 934], [632, 934], [631, 934], [630, 934.649], [630, 936]
-Path 291: [843, 928], [843, 928.676], [843.512, 929], [844.449, 930], [845.457, 931], [846, 932], [846.486, 933], [847, 934], [847, 935], [847.553, 936], [848.508, 937], [850, 937.475], [850.496, 938], [851, 938], [852, 938.571], [853, 939.43], [853.339, 940], [854, 940]
-Path 292: [906, 935], [905, 935], [904.488, 936], [903.514, 937], [903, 937.527], [902, 938.46], [901.508, 939], [901, 939.348], [900.453, 940], [899.401, 941], [898.297, 942], [897, 943], [896, 943]
-Path 293: [227, 936], [226, 936], [225, 936], [224.393, 937], [223.408, 938]
-Path 294: [571, 935], [571, 936], [572, 936.597], [573, 937.598], [574, 938.566], [574, 940], [574, 941], [574, 942], [574.445, 943], [575, 943.594], [575.547, 945], [576, 946], [576, 947]
-Path 295: [67, 937], [67.404, 938], [68, 938.521], [68, 940], [68, 941], [68, 942], [68.4064, 943], [69, 943.083], [69, 944]
-Path 296: [167.487, 935], [168, 936], [168, 936.523], [169, 937], [169.432, 938], [170, 938.555], [170.461, 940], [171, 940.391], [171, 941]
-Path 297: [559, 935], [558, 935.485], [557.484, 936], [557, 937], [556, 937.59], [555, 938.559], [554, 939.468], [553.534, 940], [553, 940.314], [552.455, 941]
-Path 298: [798, 936], [797, 937], [796, 937], [795.346, 938], [794, 938.483], [793.503, 939], [793, 939.395], [792.423, 940], [791.343, 941], [790.348, 942], [789.315, 943], [788.186, 944], [787, 944.401], [786.488, 945], [785.511, 946], [785, 946.568], [784, 947.58], [783.407, 949], [782.41, 950], [781, 950.46], [781, 951], [780.565, 952], [780, 952.496], [779.495, 953], [778.121, 954]
-Path 299: [631, 938], [630, 938], [630, 939], [629.249, 940], [628, 940.403], [627.387, 941], [626.373, 942], [625.342, 943], [624.297, 944], [623.18, 945], [622, 946], [621, 946]
-Path 300: [672, 936], [673.245, 936], [674, 937], [675, 938], [675.497, 939], [676, 939.525], [677, 940.475], [677.467, 941], [678, 941.508], [678, 943]
-Path 301: [838, 930], [837, 930], [836, 931], [835, 931.105], [834, 932], [833, 932.31], [832, 933], [831, 934], [830, 934], [829, 935], [828, 936], [827, 936], [826, 937], [825, 937.319], [824, 938], [823, 938.543], [822, 939.381], [821.591, 940], [821, 940]
-Path 302: [234, 939], [234, 940], [233, 941], [232, 941]
-Path 303: [735, 937], [734, 937], [733.417, 937], [733, 937.529], [732, 938.486], [731, 939], [730.327, 940], [729.331, 941], [728.423, 942], [727.466, 943]
-Path 304: [300, 936], [300, 936.691], [300.593, 937], [301.396, 938], [302.28, 939], [303, 940], [303, 941], [303.585, 942], [304.472, 943], [305, 943.43], [305.483, 944], [306, 944.516], [307, 945.596], [308, 946]
-Path 305: [840, 942], [841, 942.369], [841.586, 943], [842.563, 944], [843.464, 945], [844, 945.538], [845, 946.612], [845.652, 948], [846.582, 949], [847.469, 950], [848, 950.549], [849, 951.63], [849.583, 953], [850, 954], [851, 955], [852, 956], [852.823, 957], [853.674, 958], [854.511, 959], [855, 960], [856, 961]
-Path 306: [768, 937], [767, 937.498], [766.419, 938], [765.514, 939], [764.551, 940], [763.507, 941], [763, 941.506], [762, 942.411], [761, 943], [760.333, 944], [759.243, 945], [758, 945.438], [757.425, 946], [756.379, 947], [755.295, 948], [754, 948.476], [753.463, 949], [752.442, 950], [751.383, 951], [750.31, 952], [749.231, 953], [748, 953.453], [747.439, 954], [746.417, 955], [745.394, 956], [744.327, 957], [743, 957.486], [742.493, 958], [741.483, 959], [740.448, 960], [739.369, 961], [738.137, 962], [737, 962.304], [736.305, 963], [735.13, 964], [734, 964.403], [733.421, 965], [732.377, 966], [731, 966.528], [730, 967.484], [729.467, 968], [728.366, 969], [727.285, 970], [726.262, 971], [725, 971.546], [724, 972.521], [723, 973.475], [722.48, 974], [721.395, 975], [720.337, 976], [719, 976.565], [718, 977.518], [717, 978.495], [716.508, 979], [716, 979.492], [715.496, 980], [714.431, 981], [713.417, 982], [712.395, 983], [711, 983.563], [710, 984.517], [709, 985.492], [708.484, 986], [707.492, 987], [706.501, 988], [706, 988.415], [705.448, 989], [704.355, 990], [703.268, 991], [702, 991.519], [701, 992.494], [700.442, 993], [699.399, 994], [698, 994.583], [697, 995.544], [696, 996.486], [695.41, 997], [694.387, 998], [694, 999]
-Path 307: [232, 944], [231, 944], [230, 944], [229.359, 945], [228.179, 946], [227, 947], [226, 947.248], [225.263, 948], [224, 948.446], [223.385, 949], [222.394, 950], [221.535, 951], [221, 951.427], [220.578, 952], [220, 952.437], [219.275, 953], [218.398, 954], [217.443, 955], [216.378, 956], [215, 957]
-Path 308: [665, 940], [665, 941], [665, 942.435], [665.773, 943], [666, 944], [666.552, 945], [667, 946], [667.562, 947], [668.501, 948], [669.488, 949], [670, 949.442], [670.38, 950], [671, 950], [672, 950]
-Path 309: [563, 944], [563, 945], [563.443, 946], [564, 946.583], [564, 948]
-Path 310: [546, 946], [545, 946], [544, 947], [543, 947], [542, 948], [541, 948.274], [540.266, 949], [539, 949.527], [538, 950.524], [537, 951.459], [536.349, 952], [535.3, 953], [534.275, 954], [533, 954.318], [532.599, 955], [532, 955.347], [531.659, 956], [531, 956.467], [531, 957], [530.277, 958], [529.258, 959], [528, 959.57], [527, 960.068], [527, 961]
-Path 311: [212, 947], [213, 947], [214, 947.425], [214.571, 948], [216, 949], [217, 949.523], [218, 950.423], [218, 951]
-Path 312: [835, 947], [834, 947], [833, 947], [832.291, 948], [831.25, 949], [830.204, 950], [829.029, 951], [828, 951.263], [827.29, 952], [826.251, 953]
-Path 313: [383, 947], [383, 948], [383.593, 949], [384.435, 950], [385, 950], [386, 950]
-Path 314: [678, 948], [677, 948], [676, 948], [675.403, 949], [675, 950]
-Path 315: [853, 947], [853, 948], [854, 948.537], [854.567, 950], [855, 951], [855.571, 952], [856.533, 953], [857.587, 954], [859, 954.527], [859.502, 956], [860, 957], [860.499, 958], [861, 958.421], [861.549, 959], [862.584, 960], [863.428, 961], [864, 961.569], [864.525, 963], [865.125, 964], [866, 964]
-Path 316: [60, 949], [59, 949], [58, 949], [58, 950], [57.5466, 951], [57, 951.552], [56.3484, 953], [55.3158, 954], [54.4304, 955], [53.5353, 956], [53, 956.317], [53, 957]
-Path 317: [509, 940], [509, 940.822], [510, 941], [511, 941.497], [512.442, 942], [513.379, 943], [514, 943.636], [515, 944.423], [516, 945.425], [517.445, 946], [518, 946.68], [519, 947.393], [520, 948], [520.516, 948], [521, 948.525], [522, 949], [522.599, 950], [524, 950.484], [524.451, 951], [525, 951.452], [525.435, 952], [526, 952.436], [526, 953], [526.431, 954], [527, 954.284], [527.555, 955]
-Path 318: [671, 933], [670, 933.023], [669, 934], [668, 934.434], [666.545, 935], [666, 935.51], [665, 936.4], [664, 937.179], [663, 938.054], [662, 939], [661, 940], [660, 940.409], [659, 941.012], [658, 942], [657, 943], [656, 944], [655, 944], [654, 945], [653, 945.033], [652, 946], [651, 946.246], [650, 947.169], [649, 948], [648.479, 948], [648, 948.547], [647.498, 949], [647, 949.584], [646.442, 950], [646, 950.537], [645, 951], [644.353, 952], [643, 952.57], [642, 953.584], [641, 954.556], [640, 955.547], [639, 956]
-Path 319: [728, 949], [726.502, 949], [725.512, 950], [725, 950.571], [724, 951], [723.457, 952], [722.319, 953], [721, 954], [720, 954], [719, 955], [718, 955.381], [717.314, 956], [716, 956.507], [715, 957.311], [714.383, 958], [713, 959], [712, 960], [711, 960], [710, 960.268], [709.302, 961], [708, 962], [707, 962], [706, 963], [705, 963], [704, 964], [703, 964], [702, 965], [701, 965.327], [700.336, 966], [699.303, 967], [698.163, 968], [697.239, 969], [696.49, 970], [695.621, 971], [695, 971.518], [694.458, 973]
-Path 320: [819, 950], [819, 950.893], [818, 951], [817, 951], [816, 952]
-Path 321: [207, 954], [207, 955], [207, 956], [208, 957], [208, 958]
-Path 322: [824, 954], [823.302, 955], [822, 955.465], [821.521, 956], [821, 956.425], [820.51, 957], [820, 957.402], [819.454, 958], [818.341, 959], [818, 960], [817, 961], [816, 961.241], [815.253, 962], [814.195, 963], [813, 963.37], [812.474, 964], [811.64, 965], [811, 965.616], [811, 967], [812, 967.773], [813, 968.827], [813.528, 970], [814.424, 971], [815, 971.581], [815.575, 973], [816.453, 974], [817, 974.578], [817.55, 976], [818.44, 977], [819, 977.545], [819.611, 979], [820.413, 980], [821, 980.544], [821.595, 982], [822.507, 983], [824, 983.912], [824.506, 985], [825.415, 986], [826, 986.572], [826.59, 988], [827.51, 989], [828.468, 990], [829, 990.551], [830, 991.61], [830.586, 993], [831.5, 994], [832, 994.492], [832.448, 995], [833, 995.535], [834, 996.553], [835, 997.538], [835, 999]
-Path 323: [263, 955], [264, 955.631], [265, 956.551], [266, 957.414], [266.626, 958], [267, 959]
-Path 324: [312, 955], [311, 955], [311, 956], [311, 957], [311.357, 958], [312, 958.314], [312.472, 959], [313, 959], [314, 959.467], [314.372, 960], [315, 960]
-Path 325: [200, 953], [199.401, 953], [199, 953.598], [198.365, 954], [198, 954.529], [197.385, 955], [196.508, 956], [196, 957], [195.498, 958], [194.524, 959], [194, 959.403], [193.417, 960], [192.386, 961], [191.534, 962], [191, 962.393], [190.397, 963], [189, 963.35], [189, 964], [188, 965], [187, 965]
-Path 326: [271, 957], [271, 958], [271.497, 959], [272, 959.561], [273, 960.548], [274, 961.473], [274.434, 962], [275, 962.349], [275.637, 963], [276.559, 964], [277, 965]
-Path 327: [774, 956], [773, 957], [772, 957.391], [771, 958], [770.378, 959], [769, 959.452], [769, 960], [768, 961], [767, 962], [766.259, 963], [765.449, 964], [764.488, 965], [763.5, 966], [763, 966.411], [762.455, 967], [761.389, 968], [760.386, 969], [759, 969.465], [758.428, 970], [757.351, 971], [756.294, 972], [755, 972.482], [754.478, 973], [753.42, 974], [752.332, 975], [751, 975.434], [750.47, 976], [749.429, 977], [748.356, 978], [747.271, 979], [746, 979.454], [745.439, 980], [744.379, 981], [743.345, 982], [742, 982.516], [741, 983.524], [740, 984.492], [739.472, 985], [738.395, 986], [737.05, 987], [736, 987.305], [735.322, 988], [734.292, 989], [733, 989.039], [732.091, 990], [731, 991], [730, 991.374], [730, 992], [729.842, 993], [729, 993], [728, 993.704], [727.253, 995], [726.303, 996], [725, 996.271], [725, 997]
-Path 328: [563, 953], [562, 953], [561, 953.391], [560.455, 954], [559.502, 955], [558.569, 956], [557.554, 957], [557, 957.522], [556, 958.399], [555, 959], [554.259, 960], [553, 960.455], [552.492, 961], [551.484, 962], [550.474, 963], [549.42, 964], [548, 964.517], [547, 965.299], [546.225, 966], [545, 966.467], [544.43, 967], [543.297, 968], [542.304, 969], [541, 969.51], [540.497, 971], [539.471, 972], [539, 973], [538, 974], [537, 975], [536, 976], [535, 976], [534, 976.54], [533, 977.562], [532, 978.539], [531, 979.483], [530.509, 980], [530, 980.438], [529.479, 981], [528.391, 982], [527.229, 983]
-Path 329: [641, 958], [641, 959], [641, 960], [641.544, 961], [642.42, 962], [643, 962.406], [643, 963], [643.504, 964], [644, 965], [644.265, 966], [645, 966]
-Path 330: [50, 960], [51, 960.497], [51, 961], [51, 962], [51, 963]
-Path 331: [254.042, 960], [255, 961], [255.621, 962], [256.146, 963], [257, 963]
-Path 332: [630, 961], [629, 962], [628, 963], [627, 963], [626, 964], [625, 965], [624, 966], [623, 966]
-Path 333: [683, 962], [682, 962], [681.277, 963], [680, 963.249], [679.301, 964], [678.192, 965], [677.105, 966], [676, 966.31], [675.3, 967], [674.25, 968], [673.173, 969], [672.127, 970], [671, 970.261], [670.283, 971], [669.201, 972], [668.141, 973], [667, 973.315], [666.33, 974], [665.259, 975], [664.169, 976], [663.055, 977], [662, 977.068], [661.083, 978], [660, 979], [659, 979.13], [658.149, 980], [657, 981], [656, 981.001], [655.002, 982], [654, 982.207], [653.252, 983], [652.16, 984], [651, 984.432], [650.45, 985], [649.441, 986], [648.443, 987], [647.481, 988], [646.498, 989], [645.432, 990], [645, 991], [644.016, 992], [643, 992.326], [642.321, 993], [641.399, 994], [640.405, 995], [639.436, 996], [638.537, 997], [638, 997.547], [638, 999]
-Path 334: [397, 957], [395.591, 957], [394.509, 958], [394, 958.51], [393, 959.441], [392, 960.392], [391, 961.479], [390, 962.496], [389, 963], [388.415, 964], [387.32, 965], [386.248, 966], [385, 966.476], [384.5, 967], [384, 967.441], [383.479, 968], [382.429, 969], [381.334, 970], [380, 971], [379, 971], [378, 972], [377, 973], [376, 973.601], [375, 974.562], [374, 975.487], [373.424, 976], [372, 976.619], [371, 977.6], [370, 978.587], [369, 979.546], [368, 980.479], [367.456, 981], [366.406, 982], [365.377, 983], [364, 983.519], [363, 984.478], [362.479, 985], [361.441, 986], [360.423, 987], [359.473, 988], [358.559, 989], [358, 989.576], [357, 990]
-Path 335: [316, 964], [315, 964], [314, 964], [313.583, 965], [313, 965]
-Path 336: [205, 965], [204, 965], [203.417, 966], [202.138, 967], [201, 968], [200, 969], [199, 970], [198, 970], [197, 970.404], [196.41, 971], [195, 971.505], [194, 973], [193.303, 974], [193, 975], [193, 976]
-Path 337: [272, 966], [272.712, 967], [273.396, 968], [274, 968.496], [274, 969], [274, 970]
-Path 338: [51, 965], [51.4704, 966], [52, 967], [52, 968], [52, 969], [52, 970], [52.4132, 971], [53, 971.429], [53.5542, 972], [55, 972], [56, 972.519]
-Path 339: [288, 966], [288, 966.596], [289, 967], [289.662, 968], [290.511, 969], [291.36, 970], [292, 970.299], [292.319, 971], [293, 971.445], [293, 972], [293.56, 973], [294.632, 974], [296, 974.543], [297, 975.556], [298, 976.537], [298.629, 978], [299.651, 979], [300.633, 980], [301, 981]
-Path 340: [887, 967], [887, 968], [888, 968.436], [888.455, 969], [889, 969]
-Path 341: [318, 970], [318.383, 971], [319, 971.546], [320, 972.54], [321, 973], [322, 973], [323, 973.268], [323.354, 974], [324, 974.249], [324, 975]
-Path 342: [902, 968], [902.476, 969], [903.431, 970], [904, 971], [905, 971.594], [906, 972.564], [907, 973.531], [908, 974.487], [908.494, 975], [909, 975.476], [909.538, 976], [910.553, 977], [911.563, 978], [912.576, 979], [913.574, 980], [914.579, 981], [915.601, 982], [916.582, 983], [917.551, 984], [918.53, 985], [920, 985.871], [921, 987], [921, 988], [921.055, 989], [922, 990]
-Path 343: [865, 969], [865.416, 970], [866.467, 971], [867.48, 972], [868, 973], [868, 973.505], [869, 974]
-Path 344: [587, 972], [586.205, 972], [586, 973.037], [585, 974], [584, 975], [583, 975], [582.115, 976], [581, 976.366], [581, 977], [580.464, 978], [579.507, 979], [579, 979.51], [578, 980]
-Path 345: [805, 970], [804, 970.457], [803.355, 971], [803, 972.317], [802, 973.296], [801.335, 974], [801, 975], [800, 976], [799, 976], [798, 976], [797.248, 977], [796.233, 978], [795.224, 979], [794, 979.328], [794, 980], [793.109, 981], [792, 981.221], [792, 982], [791, 983], [790, 983], [789, 984], [788, 984], [787, 985], [786.219, 986], [785.189, 987], [784.184, 988], [783, 988.292], [782.382, 989], [781.338, 990], [780.295, 991], [779.226, 992], [778.209, 993], [777, 994], [776, 995]
-Path 346: [165, 977], [164, 977], [163.386, 978], [162.426, 979], [161.495, 980], [160.583, 981], [160, 981.608], [159, 982.587], [158, 983.579], [157.344, 985], [156.009, 986], [155, 986]
-Path 347: [253, 977], [254, 977.54], [255, 978.611], [256, 979.525], [257, 980], [258, 980.581], [259, 981.396], [259.223, 982], [260, 982]
-Path 348: [227, 978], [227, 979], [228, 979.62], [229, 980.633], [229.551, 982], [230.44, 983], [231, 983.337], [231, 984]
-Path 349: [527, 977], [526, 978], [525, 979], [524, 979], [524, 980], [524, 981], [524, 982]
-Path 350: [683, 979], [682, 979], [681.023, 980], [680, 980.166], [679.22, 981], [678, 982], [677, 982.199], [676.217, 983], [675, 983.397], [674.405, 984], [673.341, 985], [672.219, 986], [671, 986.267], [670.297, 987], [669.203, 988], [668, 988.352], [667.384, 989], [666.391, 990], [666, 991]
-Path 351: [243, 976], [242, 976.064], [241, 977], [240, 977.474], [239, 978.415], [237.588, 979], [237, 980], [236, 980.54], [235, 981.478], [234.471, 982], [233.436, 983]
-Path 352: [285, 981], [286, 981.432], [286.311, 982], [287, 982]
-Path 353: [308, 981], [307, 981], [306, 982], [305, 982], [304, 983], [303, 983.513], [303, 985], [302.672, 986]
-Path 354: [312, 980.428], [313, 981], [313.644, 982], [314.563, 983], [315.518, 984], [316.444, 985], [317, 985.563], [317.594, 987], [318.27, 988], [319, 988]
-Path 355: [635, 979], [634, 979], [633, 980], [632, 980.143], [631, 981], [630, 981], [629.433, 982], [629, 983], [629, 984], [628.607, 985], [628, 985.185], [628, 986]
-Path 356: [868, 981], [867, 982], [866, 982.366], [866, 983], [865, 984], [864, 985], [863, 985.154], [862.184, 986], [861, 986.346], [860.341, 987], [859, 987.56], [858, 988.48], [858, 989], [857.186, 990], [856, 990], [855, 990.617], [854, 991.499], [854, 992], [853.317, 993], [852, 993.32], [852, 994]
-Path 357: [141, 982], [141, 983], [142, 983.531], [143, 984], [144, 984]
-Path 358: [619, 981], [619, 981.627], [620, 982], [620.562, 982], [621.479, 983], [622, 984], [622.47, 985], [623, 985.464], [623.381, 986], [624, 986], [625, 987]
-Path 359: [894, 968], [894, 968.635], [895.43, 969], [896.384, 970], [897, 971.359], [898, 972.479], [899, 973.474], [899.525, 974], [900.465, 975], [901.429, 976], [902, 977.423], [903, 978.476], [904, 979.431], [905, 980.392], [906, 981.401], [907.421, 982], [908.46, 983], [909, 984], [910, 984.421], [910.481, 985], [911, 985.39], [911.519, 986], [912.583, 987], [913.662, 988], [915, 988.619], [916, 989.565], [917, 990.545], [918, 991.609], [919, 992.7], [920, 993.549], [921, 994.482], [921.562, 995], [922.499, 996], [923, 996.383], [923.24, 997], [924, 997]
-Path 360: [292, 985], [293, 985], [294, 985.479], [294, 986]
-Path 361: [136, 986], [135, 986], [134.676, 987], [134, 987.378], [134, 988]
-Path 362: [523, 986], [522, 986], [521, 987], [520, 987.159], [519.202, 988], [518, 988.342], [517.343, 989], [516.327, 990], [515.326, 991], [514.313, 992], [513.238, 993], [512, 993.36], [511.36, 994], [510.292, 995], [509.207, 996], [508, 996.369], [507.38, 997], [506.335, 998], [505.374, 999]
-Path 363: [162, 987], [163, 987], [163.56, 988], [164.476, 989], [165, 989.585], [165.496, 991], [166, 991.401], [166.426, 992], [167, 992.358], [167, 993], [167.233, 994], [168, 994.778], [168, 996]
-Path 364: [380, 987], [379, 987], [378, 987], [377.598, 988], [377, 988.526], [376, 989]
-Path 365: [144, 987], [144, 988], [144, 989], [144, 990], [144.44, 991], [145, 991.301], [145, 992]
-Path 366: [434, 988], [433, 988], [432.449, 989], [431.37, 990], [431, 991], [430, 992], [429, 992.006], [428.005, 993], [427, 993.367], [426.379, 994], [425.312, 995], [424.317, 996], [423.858, 997], [423, 997]
-Path 367: [39, 989], [39.3222, 990], [40, 990], [41, 991], [42, 991.449], [42.5407, 992], [43.3585, 993], [44, 993.541], [45, 994], [46, 994.595], [47, 995]
-Path 368: [273, 988], [273, 989], [273, 990], [273.516, 991], [274.272, 992], [275, 992.418], [275.225, 993], [276, 993.452], [276.241, 994], [277, 994.562], [277.329, 996], [278, 996]
-Path 369: [874, 983], [874, 983.589], [875.433, 984], [876.395, 985], [877.474, 986], [878.458, 987], [879.485, 988], [880, 989], [881, 989.537], [882, 990.556], [883, 991.596], [883.592, 993], [884.603, 994], [885.602, 995], [886.592, 996], [887.55, 997], [888.427, 998], [889, 998.419], [889, 999]
-Path 370: [121, 990], [120, 990], [119, 991], [118, 991], [117, 992], [116, 992]
-Path 371: [615, 981], [614.055, 981], [614, 982.134], [612.614, 983], [611.645, 984], [610.666, 985], [610, 986], [609.6, 987], [609, 988], [609, 989], [609, 990]
-Path 372: [324, 991], [323, 991], [322, 991], [321.306, 992], [320.349, 993], [319.499, 994], [319, 995], [319, 996], [319, 997], [319.581, 998], [320, 999]
-Path 373: [774, 991], [774.328, 992], [775, 992.158], [775, 993]
-Path 374: [267, 992], [266.228, 992], [266, 992.692], [265, 993], [265, 994], [265, 995]
-Path 375: [353, 994], [352, 994], [351.338, 995], [350, 995.557], [349, 996.471], [348.604, 997], [348, 997.434], [347.709, 998], [347, 998.456], [347, 999]
-Path 376: [447, 993], [447, 993.508], [448, 994], [448.585, 995], [449.631, 996], [451, 996.572], [452, 997.449], [452.484, 998], [453, 998.382], [453, 999]
-Path 377: [360.445, 993], [361, 994], [361, 995], [362, 995.559], [363, 996.575], [363.493, 998], [364, 998.399], [364, 999]
-Path 378: [849, 995], [848, 995], [847, 996], [846, 997], [846, 998], [846, 999]
-Path 379: [36, 996], [37, 996.347], [37.5507, 997], [39, 997]
-Path 380: [382, 995], [382, 995.842], [383, 996], [384, 996], [384.621, 997], [385.566, 998], [386, 999]
-Path 381: [852, 994], [853, 995], [853, 996], [853.657, 997], [854.515, 998], [855, 999]
-Path 382: [195, 991], [194.435, 991], [194, 992.435], [193, 993.387], [192, 994.494], [191.458, 995], [191, 996.312], [190, 997], [189.395, 998], [189, 999]
-Path 383: [592, 995], [592, 996], [592, 996.547], [593, 997], [593.475, 998], [594, 998.378], [594, 999]
-Path 384: [927, 994], [928, 994], [929, 995], [929, 995.511], [930, 996.432], [931, 997], [932, 997.492], [932.455, 998], [933, 998.466], [933, 999]
diff --git a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.dbf b/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.dbf
deleted file mode 100644
index dad747fadfc34595b27fc718e1f0a0833bd0fb0f..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4910095bcc63510b5d14ced32ec054d329fb1f106676869563424bccd6d998bc
-size 12597
diff --git a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shp b/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shp
deleted file mode 100644
index db9524f4ac8c78193c1af6e2767f3ae5901dfba6..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a1e3ab5de6caec9d1e335eafe346c673f87ec06c02f0fb3a5ccafeb3919961c8
-size 12084
diff --git a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shx b/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shx
deleted file mode 100644
index 33a059571d78911f9ed73052eb7c74ad7222ad7a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/fzTvDSValidatedRoadVectorDataOutput.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0ffb45fdd34b1bb0bbb8817b1de538b4609e806972cf5287d9ec3b7828c86cc2
-size 628
diff --git a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.dbf b/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.dbf
deleted file mode 100644
index fdefcdf3425ca5e4912797aacabf50f7a36609cb..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:1acfd03f31de99605e10020ae2646b81143bd7f816559bc7d962ef2b49216af7
-size 10055
diff --git a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shp b/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shp
deleted file mode 100644
index b3adb3d3bb2ccb2ae5bfefd4abb19bd64970103a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ff01566163097422211e31b35823cc6ede15efa3965bcc72f2e89f8b95fc2b30
-size 12860
diff --git a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shx b/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shx
deleted file mode 100644
index 8eb95e8e60e8cf4597630573a9dcfa4c795487fc..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/fzTvVectorDataToRoadDescriptionFilterOutput.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b033aa81a9212511ecb13bf36bb9b92d26a2272e8fd2e7106fd938f623084664
-size 668
diff --git a/Data/Baseline/OTB/Files/obTvHooverMatrixFilter.txt b/Data/Baseline/OTB/Files/obTvHooverMatrixFilter.txt
index 94d2133f6b9804fd92b3caedf977dda8f0e3fb3c..f26c0213ffe4decceafcc5ddef12cfb7804081a4 100644
--- a/Data/Baseline/OTB/Files/obTvHooverMatrixFilter.txt
+++ b/Data/Baseline/OTB/Files/obTvHooverMatrixFilter.txt
@@ -1,4 +1,3 @@
-5826	0	0	0	0
-0	1221	0	0	0
-0	0	1560	0	76
-291	0	0	1476	72
+66	0	0
+0	66	0
+0	0	77
diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.dbf b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.dbf
deleted file mode 100644
index 0f08f3fb2beb363362f44b8b9dd9ff44202c288d..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:7b569ccdf07c81702a2d9b9d2de6fb196f3ac8d3a28cac40b77b520b786cba61
-size 77
diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shp b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shp
deleted file mode 100644
index 9b56f40fa4796185ee13dad6841807407a6d48d3..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2ea4e04a7d38ecc8754828204aab67cdf51fd69054da7c1ed8c3257ce1764ece
-size 284
diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shx b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shx
deleted file mode 100644
index 2a1f95e40a1cf6322eacb52ab4c796a7ffba7b35..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.1.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3e4c1b4db2157ab84d77eaf714555cca7915b573fbe5e691e6ab2ce4f7e2defc
-size 108
diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.dbf b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.dbf
index 0f08f3fb2beb363362f44b8b9dd9ff44202c288d..631e7c82cb3ff2f983790645329a5d14cfe82596 100644
--- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.dbf
+++ b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.dbf
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:7b569ccdf07c81702a2d9b9d2de6fb196f3ac8d3a28cac40b77b520b786cba61
-size 77
+oid sha256:2dcf4153202960ac9e3d92293108c2ffa5ebb4c258695f366e3e49cf078f2808
+size 102
diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shp b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shp
index c6b34a49304ff32b6d7bb2314522a7fece34d6b5..73c5eea2ce3b904768567f18fa0b0ce0672eafcb 100644
--- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shp
+++ b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shp
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:42c325b877fb5db5b15ee30e5c691a4500370bda6bf851ec33cb868f0b8f73fe
-size 364
+oid sha256:a5b0b418ddcc3967ac3dc0c263799abcc2173f6755c984583bdae05e2f94e1c0
+size 828
diff --git a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shx b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shx
index ccd3962d47d6794f8b06ea86131e5853270d7df6..ed61a0c43a797502a4a2638de7b027a34f646c09 100644
--- a/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shx
+++ b/Data/Baseline/OTB/Files/obTvLabelMapToVectorDataFilter.shx
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:7eb939ef1b4d627696c5ddb141d2364794e5fd7f85f56a31bacc97d161b4f692
-size 108
+oid sha256:5f275e86fab9c7dbd9aade5a425fb227d909b1b3ecc81b139f7ce01ffb5c2f91
+size 124
diff --git a/Data/Baseline/OTB/Files/srRCC8CalculatorOutput.txt b/Data/Baseline/OTB/Files/srRCC8CalculatorOutput.txt
deleted file mode 100644
index 443a0f86e801040b656531a5d6964a27e7964204..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/srRCC8CalculatorOutput.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Test results from otbImageToImageRCC8calculator test.
-7	1	0	0	
-1	7	4	6	
-0	3	7	2	
-0	5	2	7	
diff --git a/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput.dot b/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput.dot
deleted file mode 100644
index 79ae6d70ff30eba499eaf025da67cc89073e07f1..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput.dot
+++ /dev/null
@@ -1,19 +0,0 @@
-digraph G {
-0 [NumberOfPointsInPath="112",P0x="55.5",P0y="123.5",P100x="31.5",P100y="141",P101x="31.5",P101y="139.5",P102x="41.5",P102y="129.5",P103x="43",P103y="129.5",P104x="44.5",P104y="127.5",P105x="46",P105y="127.5",P106x="46.5",P106y="126.5",P107x="49",P107y="126.5",P108x="49.5",P108y="125.5",P109x="51",P109y="125.5",P10x="80",P10y="129.5",P110x="51.5",P110y="124.5",P111x="55",P111y="124.5",P11x="81.5",P11y="129.5",P12x="91.5",P12y="139.5",P13x="91.5",P13y="141",P14x="93.5",P14y="142.5",P15x="93.5",P15y="144",P16x="94.5",P16y="144.5",P17x="94.5",P17y="146",P18x="95.5",P18y="146.5",P19x="95.5",P19y="148",P1x="67.5",P1y="123.5",P20x="96.5",P20y="148.5",P21x="96.5",P21y="151",P22x="97.5",P22y="151.5",P23x="97.5",P23y="154",P24x="98.5",P24y="154.5",P25x="98.5",P25y="157",P26x="99.5",P26y="157.5",P27x="99.5",P27y="163",P28x="100.5",P28y="163.5",P29x="100.5",P29y="178.5",P2x="68",P2y="124.5",P30x="99.5",P30y="179",P31x="99.5",P31y="184.5",P32x="98.5",P32y="185",P33x="98.5",P33y="187.5",P34x="97.5",P34y="188",P35x="97.5",P35y="190.5",P36x="96.5",P36y="191",P37x="96.5",P37y="193.5",P38x="95.5",P38y="194",P39x="95.5",P39y="195.5",P3x="71.5",P3y="124.5",P40x="94.5",P40y="196",P41x="94.5",P41y="197.5",P42x="93.5",P42y="198",P43x="93.5",P43y="199.5",P44x="91.5",P44y="201",P45x="91.5",P45y="202.5",P46x="81.5",P46y="212.5",P47x="80",P47y="212.5",P48x="78.5",P48y="214.5",P49x="77",P49y="214.5",P4x="72",P4y="125.5",P50x="76.5",P50y="215.5",P51x="74",P51y="215.5",P52x="73.5",P52y="216.5",P53x="72",P53y="216.5",P54x="71.5",P54y="217.5",P55x="68",P55y="217.5",P56x="67.5",P56y="218.5",P57x="55.5",P57y="218.5",P58x="55",P58y="217.5",P59x="51.5",P59y="217.5",P5x="73.5",P5y="125.5",P60x="51",P60y="216.5",P61x="49.5",P61y="216.5",P62x="49",P62y="215.5",P63x="46.5",P63y="215.5",P64x="46",P64y="214.5",P65x="44.5",P65y="214.5",P66x="43",P66y="212.5",P67x="41.5",P67y="212.5",P68x="31.5",P68y="202.5",P69x="31.5",P69y="201",P6x="74",P6y="126.5",P70x="29.5",P70y="199.5",P71x="29.5",P71y="198",P72x="28.5",P72y="197.5",P73x="28.5",P73y="196",P74x="27.5",P74y="195.5",P75x="27.5",P75y="194",P76x="26.5",P76y="193.5",P77x="26.5",P77y="191",P78x="25.5",P78y="190.5",P79x="25.5",P79y="188",P7x="76.5",P7y="126.5",P80x="24.5",P80y="187.5",P81x="24.5",P81y="185",P82x="23.5",P82y="184.5",P83x="23.5",P83y="179",P84x="22.5",P84y="178.5",P85x="22.5",P85y="163.5",P86x="23.5",P86y="163",P87x="23.5",P87y="157.5",P88x="24.5",P88y="157",P89x="24.5",P89y="154.5",P8x="77",P8y="127.5",P90x="25.5",P90y="154",P91x="25.5",P91y="151.5",P92x="26.5",P92y="151",P93x="26.5",P93y="148.5",P94x="27.5",P94y="148",P95x="27.5",P95y="146.5",P96x="28.5",P96y="146",P97x="28.5",P97y="144.5",P98x="29.5",P98y="144",P99x="29.5",P99y="142.5",P9x="78.5",P9y="127.5",SegmentationLevel="0",SegmentationType="0"];
-1 [NumberOfPointsInPath="5",P0x="187.5",P0y="31.5",P1x="221.5",P1y="31.5",P2x="221.5",P2y="202.5",P3x="187.5",P3y="202.5",P4x="187.5",P4y="33",SegmentationLevel="0",SegmentationType="0"];
-2 [NumberOfPointsInPath="120",P0x="134.5",P0y="38.5",P100x="122.5",P100y="69",P101x="122.5",P101y="64.5",P102x="123.5",P102y="64",P103x="123.5",P103y="60.5",P104x="124.5",P104y="60",P105x="124.5",P105y="56.5",P106x="125.5",P106y="56",P107x="125.5",P107y="52.5",P108x="126.5",P108y="52",P109x="126.5",P109y="49.5",P10x="144.5",P10y="47.5",P110x="127.5",P110y="49",P111x="127.5",P111y="47.5",P112x="128.5",P112y="47",P113x="128.5",P113y="45.5",P114x="129.5",P114y="45",P115x="129.5",P115y="43.5",P116x="130.5",P116y="43",P117x="130.5",P117y="41.5",P118x="132.5",P118y="39.5",P119x="134",P119y="39.5",P11x="144.5",P11y="49",P12x="145.5",P12y="49.5",P13x="145.5",P13y="52",P14x="146.5",P14y="52.5",P15x="146.5",P15y="56",P16x="147.5",P16y="56.5",P17x="147.5",P17y="60",P18x="148.5",P18y="60.5",P19x="148.5",P19y="64",P1x="137.5",P1y="38.5",P20x="149.5",P20y="64.5",P21x="149.5",P21y="69",P22x="150.5",P22y="69.5",P23x="150.5",P23y="75",P24x="151.5",P24y="75.5",P25x="151.5",P25y="83",P26x="152.5",P26y="83.5",P27x="152.5",P27y="92",P28x="153.5",P28y="92.5",P29x="153.5",P29y="107",P2x="138",P2y="39.5",P30x="154.5",P30y="107.5",P31x="154.5",P31y="149.5",P32x="153.5",P32y="150",P33x="153.5",P33y="164.5",P34x="152.5",P34y="165",P35x="152.5",P35y="173.5",P36x="151.5",P36y="174",P37x="151.5",P37y="181.5",P38x="150.5",P38y="182",P39x="150.5",P39y="187.5",P3x="139.5",P3y="39.5",P40x="149.5",P40y="188",P41x="149.5",P41y="192.5",P42x="148.5",P42y="193",P43x="148.5",P43y="196.5",P44x="147.5",P44y="197",P45x="147.5",P45y="200.5",P46x="146.5",P46y="201",P47x="146.5",P47y="204.5",P48x="145.5",P48y="205",P49x="145.5",P49y="207.5",P4x="141.5",P4y="41.5",P50x="144.5",P50y="208",P51x="144.5",P51y="209.5",P52x="143.5",P52y="210",P53x="143.5",P53y="211.5",P54x="142.5",P54y="212",P55x="142.5",P55y="213.5",P56x="141.5",P56y="214",P57x="141.5",P57y="215.5",P58x="139.5",P58y="217.5",P59x="138",P59y="217.5",P5x="141.5",P5y="43",P60x="137.5",P60y="218.5",P61x="134.5",P61y="218.5",P62x="134",P62y="217.5",P63x="132.5",P63y="217.5",P64x="130.5",P64y="215.5",P65x="130.5",P65y="214",P66x="129.5",P66y="213.5",P67x="129.5",P67y="212",P68x="128.5",P68y="211.5",P69x="128.5",P69y="210",P6x="142.5",P6y="43.5",P70x="127.5",P70y="209.5",P71x="127.5",P71y="208",P72x="126.5",P72y="207.5",P73x="126.5",P73y="205",P74x="125.5",P74y="204.5",P75x="125.5",P75y="201",P76x="124.5",P76y="200.5",P77x="124.5",P77y="197",P78x="123.5",P78y="196.5",P79x="123.5",P79y="193",P7x="142.5",P7y="45",P80x="122.5",P80y="192.5",P81x="122.5",P81y="188",P82x="121.5",P82y="187.5",P83x="121.5",P83y="182",P84x="120.5",P84y="181.5",P85x="120.5",P85y="174",P86x="119.5",P86y="173.5",P87x="119.5",P87y="165",P88x="118.5",P88y="164.5",P89x="118.5",P89y="150",P8x="143.5",P8y="45.5",P90x="117.5",P90y="149.5",P91x="117.5",P91y="107.5",P92x="118.5",P92y="107",P93x="118.5",P93y="92.5",P94x="119.5",P94y="92",P95x="119.5",P95y="83.5",P96x="120.5",P96y="83",P97x="120.5",P97y="75.5",P98x="121.5",P98y="75",P99x="121.5",P99y="69.5",P9x="143.5",P9y="47",SegmentationLevel="0",SegmentationType="0"];
-3 [NumberOfPointsInPath="5",P0x="19.5",P0y="30.5",P1x="84.5",P1y="30.5",P2x="84.5",P2y="94.5",P3x="19.5",P3y="94.5",P4x="19.5",P4y="32",SegmentationLevel="0",SegmentationType="0"];
-4 [NumberOfPointsInPath="164",P0x="53.5",P0y="85.5",P100x="25.5",P100y="202.5",P101x="25.5",P101y="201",P102x="24.5",P102y="200.5",P103x="24.5",P103y="199",P104x="23.5",P104y="198.5",P105x="23.5",P105y="197",P106x="22.5",P106y="196.5",P107x="22.5",P107y="195",P108x="21.5",P108y="194.5",P109x="21.5",P109y="192",P10x="85",P10y="96.5",P110x="21",P110y="191.5",P111x="19.5",P111y="191.5",P112x="19.5",P112y="189",P113x="18.5",P113y="188.5",P114x="18.5",P114y="186",P115x="17.5",P115y="185.5",P116x="17.5",P116y="183",P117x="16.5",P117y="182.5",P118x="16.5",P118y="179",P119x="15.5",P119y="178.5",P11x="86.5",P11y="96.5",P120x="15.5",P120y="173",P121x="14.5",P121y="172.5",P122x="14.5",P122y="166",P123x="13.5",P123y="165.5",P124x="13.5",P124y="142.5",P125x="14.5",P125y="142",P126x="14.5",P126y="135.5",P127x="15.5",P127y="135",P128x="15.5",P128y="129.5",P129x="16.5",P129y="129",P12x="89.5",P12y="99.5",P130x="16.5",P130y="125.5",P131x="17.5",P131y="125",P132x="17.5",P132y="122.5",P133x="18.5",P133y="122",P134x="18.5",P134y="119.5",P135x="19.5",P135y="119",P136x="19.5",P136y="116.5",P137x="21",P137y="116.5",P138x="21.5",P138y="115",P139x="21.5",P139y="113.5",P13x="89.5",P13y="101",P140x="22.5",P140y="113",P141x="22.5",P141y="111.5",P142x="23.5",P142y="111",P143x="23.5",P143y="109.5",P144x="24.5",P144y="109",P145x="24.5",P145y="107.5",P146x="25.5",P146y="107",P147x="25.5",P147y="105.5",P148x="26.5",P148y="104.5",P149x="28",P149y="104.5",P14x="91.5",P14y="102.5",P150x="28.5",P150y="104",P151x="28.5",P151y="102.5",P152x="30.5",P152y="101",P153x="30.5",P153y="99.5",P154x="33.5",P154y="96.5",P155x="35",P155y="96.5",P156x="40.5",P156y="90.5",P157x="43",P157y="90.5",P158x="44.5",P158y="88.5",P159x="46",P159y="88.5",P15x="91.5",P15y="104",P160x="46.5",P160y="87.5",P161x="50",P161y="87.5",P162x="50.5",P162y="86.5",P163x="53",P163y="86.5",P16x="92",P16y="104.5",P17x="93.5",P17y="104.5",P18x="94.5",P18y="105.5",P19x="94.5",P19y="107",P1x="66.5",P1y="85.5",P20x="95.5",P20y="107.5",P21x="95.5",P21y="109",P22x="96.5",P22y="109.5",P23x="96.5",P23y="111",P24x="97.5",P24y="111.5",P25x="97.5",P25y="113",P26x="98.5",P26y="113.5",P27x="98.5",P27y="116",P28x="99",P28y="116.5",P29x="100.5",P29y="116.5",P2x="67",P2y="86.5",P30x="100.5",P30y="119",P31x="101.5",P31y="119.5",P32x="101.5",P32y="122",P33x="102.5",P33y="122.5",P34x="102.5",P34y="125",P35x="103.5",P35y="125.5",P36x="103.5",P36y="129",P37x="104.5",P37y="129.5",P38x="104.5",P38y="135",P39x="105.5",P39y="135.5",P3x="69.5",P3y="86.5",P40x="105.5",P40y="142",P41x="106.5",P41y="142.5",P42x="106.5",P42y="165.5",P43x="105.5",P43y="166",P44x="105.5",P44y="172.5",P45x="104.5",P45y="173",P46x="104.5",P46y="178.5",P47x="103.5",P47y="179",P48x="103.5",P48y="182.5",P49x="102.5",P49y="183",P4x="70",P4y="87.5",P50x="102.5",P50y="185.5",P51x="101.5",P51y="186",P52x="101.5",P52y="188.5",P53x="100.5",P53y="189",P54x="100.5",P54y="191.5",P55x="99",P55y="191.5",P56x="98.5",P56y="193",P57x="98.5",P57y="194.5",P58x="97.5",P58y="195",P59x="97.5",P59y="196.5",P5x="73.5",P5y="87.5",P60x="96.5",P60y="197",P61x="96.5",P61y="198.5",P62x="95.5",P62y="199",P63x="95.5",P63y="200.5",P64x="94.5",P64y="201",P65x="94.5",P65y="202.5",P66x="93.5",P66y="203.5",P67x="92",P67y="203.5",P68x="91.5",P68y="204",P69x="91.5",P69y="205.5",P6x="74",P6y="88.5",P70x="89.5",P70y="207",P71x="89.5",P71y="208.5",P72x="86.5",P72y="211.5",P73x="85",P73y="211.5",P74x="79.5",P74y="217.5",P75x="77",P75y="217.5",P76x="75.5",P76y="219.5",P77x="74",P77y="219.5",P78x="73.5",P78y="220.5",P79x="70",P79y="220.5",P7x="75.5",P7y="88.5",P80x="69.5",P80y="221.5",P81x="67",P81y="221.5",P82x="66.5",P82y="222.5",P83x="53.5",P83y="222.5",P84x="53",P84y="221.5",P85x="50.5",P85y="221.5",P86x="50",P86y="220.5",P87x="46.5",P87y="220.5",P88x="46",P88y="219.5",P89x="44.5",P89y="219.5",P8x="77",P8y="90.5",P90x="43",P90y="217.5",P91x="40.5",P91y="217.5",P92x="35",P92y="211.5",P93x="33.5",P93y="211.5",P94x="30.5",P94y="208.5",P95x="30.5",P95y="207",P96x="28.5",P96y="205.5",P97x="28.5",P97y="204",P98x="28",P98y="203.5",P99x="26.5",P99y="203.5",P9x="79.5",P9y="90.5",SegmentationLevel="0",SegmentationType="1"];
-5 [NumberOfPointsInPath="5",P0x="154.5",P0y="106.5",P1x="220.5",P1y="106.5",P2x="220.5",P2y="143.5",P3x="154.5",P3y="143.5",P4x="154.5",P4y="108",SegmentationLevel="0",SegmentationType="1"];
-6 [NumberOfPointsInPath="46",P0x="138",P0y="55.5",P10x="143.5",P10y="102",P11x="144.5",P11y="102.5",P12x="144.5",P12y="160.5",P13x="143.5",P13y="161",P14x="143.5",P14y="180.5",P15x="142.5",P15y="181",P16x="142.5",P16y="191.5",P17x="141.5",P17y="192",P18x="141.5",P18y="198.5",P19x="140.5",P19y="199",P1x="139.5",P1y="56.5",P20x="140.5",P20y="203.5",P21x="139.5",P21y="204",P22x="139.5",P22y="206.5",P23x="138",P23y="207.5",P24x="136.5",P24y="206.5",P25x="136.5",P25y="204",P26x="135.5",P26y="203.5",P27x="135.5",P27y="199",P28x="134.5",P28y="198.5",P29x="134.5",P29y="192",P2x="139.5",P2y="59",P30x="133.5",P30y="191.5",P31x="133.5",P31y="181",P32x="132.5",P32y="180.5",P33x="132.5",P33y="161",P34x="131.5",P34y="160.5",P35x="131.5",P35y="102.5",P36x="132.5",P36y="102",P37x="132.5",P37y="82.5",P38x="133.5",P38y="82",P39x="133.5",P39y="71.5",P3x="140.5",P3y="59.5",P40x="134.5",P40y="71",P41x="134.5",P41y="64.5",P42x="135.5",P42y="64",P43x="135.5",P43y="59.5",P44x="136.5",P44y="59",P45x="136.5",P45y="56.5",P4x="140.5",P4y="64",P5x="141.5",P5y="64.5",P6x="141.5",P6y="71",P7x="142.5",P7y="71.5",P8x="142.5",P8y="82",P9x="143.5",P9y="82.5",SegmentationLevel="0",SegmentationType="1"];
-7 [NumberOfPointsInPath="5",P0x="19.5",P0y="31.5",P1x="55.5",P1y="31.5",P2x="55.5",P2y="72.5",P3x="19.5",P3y="72.5",P4x="19.5",P4y="33",SegmentationLevel="0",SegmentationType="1"];
-8 [NumberOfPointsInPath="5",P0x="75.5",P0y="41.5",P1x="138.5",P1y="41.5",P2x="138.5",P2y="49.5",P3x="75.5",P3y="49.5",P4x="75.5",P4y="43",SegmentationLevel="0",SegmentationType="1"];
-0 -> 4 [Value="5"];
-1 -> 5 [Value="2"];
-2 -> 5 [Value="2"];
-2 -> 6 [Value="6"];
-2 -> 8 [Value="2"];
-3 -> 4 [Value="2"];
-3 -> 7 [Value="4"];
-3 -> 8 [Value="2"];
-}
diff --git a/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput2.dot b/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput2.dot
deleted file mode 100644
index 468c69f20b4ca03e3aefe782287282e9d48fddb6..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/srRCC8GraphFilterOutput2.dot
+++ /dev/null
@@ -1,11 +0,0 @@
-digraph G {
-0 [NumberOfPointsInPath="5",P0x="82.5",P0y="76.5",P1x="175.5",P1y="76.5",P2x="175.5",P2y="168.5",P3x="82.5",P3y="168.5",P4x="82.5",P4y="78",SegmentationLevel="0",SegmentationType="0"];
-1 [NumberOfPointsInPath="5",P0x="82.5",P0y="102.5",P1x="175.5",P1y="102.5",P2x="175.5",P2y="149.5",P3x="82.5",P3y="149.5",P4x="82.5",P4y="104",SegmentationLevel="0",SegmentationType="1"];
-2 [NumberOfPointsInPath="5",P0x="49.5",P0y="41.5",P1x="117.5",P1y="41.5",P2x="117.5",P2y="119.5",P3x="49.5",P3y="119.5",P4x="49.5",P4y="43",SegmentationLevel="1",SegmentationType="0"];
-3 [NumberOfPointsInPath="5",P0x="27.5",P0y="141.5",P1x="59.5",P1y="141.5",P2x="59.5",P2y="214.5",P3x="27.5",P3y="214.5",P4x="27.5",P4y="143",SegmentationLevel="1",SegmentationType="0"];
-4 [NumberOfPointsInPath="5",P0x="138.5",P0y="13.5",P1x="167.5",P1y="13.5",P2x="167.5",P2y="76.5",P3x="138.5",P3y="76.5",P4x="138.5",P4y="15",SegmentationLevel="1",SegmentationType="0"];
-0 -> 1 [Value="4"];
-0 -> 2 [Value="2"];
-0 -> 4 [Value="1"];
-1 -> 2 [Value="2"];
-}
diff --git a/Data/Baseline/OTB/Files/srRCC8GraphWriterOutput1.dot b/Data/Baseline/OTB/Files/srRCC8GraphWriterOutput1.dot
deleted file mode 100644
index bc065f3b862aa01c09a55a3a9e1d735e17855cbb..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/srRCC8GraphWriterOutput1.dot
+++ /dev/null
@@ -1,12 +0,0 @@
-digraph G {
-0 [NumberOfPointsInPath="3",P0x="0",P0y="0",P1x="10",P1y="10",P2x="-5",P2y="2",SegmentationLevel="0",SegmentationType="0"];
-1 [NumberOfPointsInPath="3",P0x="0",P0y="0",P1x="10",P1y="10",P2x="-5",P2y="2",SegmentationLevel="1",SegmentationType="1"];
-2 [NumberOfPointsInPath="3",P0x="0",P0y="0",P1x="10",P1y="10",P2x="-5",P2y="2",SegmentationLevel="2",SegmentationType="0"];
-3 [NumberOfPointsInPath="3",P0x="0",P0y="0",P1x="10",P1y="10",P2x="-5",P2y="2",SegmentationLevel="3",SegmentationType="0"];
-0 -> 1 [Value="1"];
-1 -> 2 [Value="2"];
-2 -> 3 [Value="3"];
-0 -> 2 [Value="4"];
-1 -> 3 [Value="5"];
-0 -> 3 [Value="6"];
-}
diff --git a/Data/Baseline/OTB/Files/srRCC8PolygonToPolygonCalculatorOutput.txt b/Data/Baseline/OTB/Files/srRCC8PolygonToPolygonCalculatorOutput.txt
deleted file mode 100644
index 0e6c0a5a795100d17da92b4cf77dda3573b80968..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/srRCC8PolygonToPolygonCalculatorOutput.txt
+++ /dev/null
@@ -1,5 +0,0 @@
-Test results from otbPolygonToPolygonRCC8calculator test.
-7	1	0	0	
-1	7	4	6	
-0	3	7	2	
-0	5	2	7	
diff --git a/Data/Baseline/OTB/Files/srTvPolygonListToRCC8GraphFilterOutput.dot b/Data/Baseline/OTB/Files/srTvPolygonListToRCC8GraphFilterOutput.dot
deleted file mode 100644
index b0ea91f66e5ded3e702027f8870e10d13d8a6224..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Files/srTvPolygonListToRCC8GraphFilterOutput.dot
+++ /dev/null
@@ -1,12 +0,0 @@
-digraph G {
-0 [NumberOfPointsInPath="4",P0x="0",P0y="0",P1x="2",P1y="0",P2x="2",P2y="6",P3x="0",P3y="6",SegmentationLevel="0",SegmentationType="1"];
-1 [NumberOfPointsInPath="4",P0x="1",P0y="1",P1x="4",P1y="1",P2x="4",P2y="5",P3x="1",P3y="5",SegmentationLevel="0",SegmentationType="1"];
-2 [NumberOfPointsInPath="4",P0x="3",P0y="1",P1x="4",P1y="1",P2x="4",P2y="2",P3x="3",P3y="2",SegmentationLevel="1",SegmentationType="1"];
-3 [NumberOfPointsInPath="4",P0x="5",P0y="1",P1x="8",P1y="1",P2x="8",P2y="5",P3x="5",P3y="5",SegmentationLevel="1",SegmentationType="1"];
-4 [NumberOfPointsInPath="4",P0x="6",P0y="2",P1x="7",P1y="2",P2x="7",P2y="3",P3x="6",P3y="3",SegmentationLevel="2",SegmentationType="1"];
-5 [NumberOfPointsInPath="4",P0x="8",P0y="1",P1x="9",P1y="1",P2x="9",P2y="5",P3x="8",P3y="5",SegmentationLevel="2",SegmentationType="1"];
-0 -> 1 [Value="2"];
-2 -> 1 [Value="3"];
-3 -> 5 [Value="2"];
-4 -> 3 [Value="5"];
-}
diff --git a/Data/Baseline/OTB/Images/dmTvBSplinesInterpolateDeformationField.tif b/Data/Baseline/OTB/Images/dmTvBSplinesInterpolateDeformationField.tif
deleted file mode 100644
index 69c0b928afa3361c7e154c1a820e3715580af9e6..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/dmTvBSplinesInterpolateDeformationField.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:9447965707e53fa16f1eaa4d8e198c79c67f58992fb0f3417e45e09197629b93
-size 193942
diff --git a/Data/Baseline/OTB/Images/dmTvNNearestPointsLinearInterpolateDeformationField.tif b/Data/Baseline/OTB/Images/dmTvNNearestPointsLinearInterpolateDeformationField.tif
deleted file mode 100644
index a823334750cd9f6c86d683f100662864eaee9994..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/dmTvNNearestPointsLinearInterpolateDeformationField.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:7e3e1fb0f6625e1a63a93cf472797f5793af362e6ac5a455d202c607725ecfec
-size 198042
diff --git a/Data/Baseline/OTB/Images/dmTvNNearestTransformsLinearInterpolateDeformationField.tif b/Data/Baseline/OTB/Images/dmTvNNearestTransformsLinearInterpolateDeformationField.tif
deleted file mode 100644
index b59a569283720ffabb00256a5eebf9111a0a9993..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/dmTvNNearestTransformsLinearInterpolateDeformationField.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3e86de8b62d0d9b3bf0098efca75a7cbb6dd30f61bd6bb331bbe21189b54ab35
-size 199687
diff --git a/Data/Baseline/OTB/Images/dmTvNearestPointDeformationField.tif b/Data/Baseline/OTB/Images/dmTvNearestPointDeformationField.tif
deleted file mode 100644
index d098656a6f6e6605f71c8b21aa182c8d8f1b194a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/dmTvNearestPointDeformationField.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:35adef700d011fb7793a3751c5565eea206a03b7c73265cf693763cf3a02c198
-size 14780
diff --git a/Data/Baseline/OTB/Images/dmTvNearestTransformDeformationField.tif b/Data/Baseline/OTB/Images/dmTvNearestTransformDeformationField.tif
deleted file mode 100644
index 7cb2622d35b0188d4c2c458bf20005c41088871b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/dmTvNearestTransformDeformationField.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f7f8af0c00a846d0027df0688fc82c10dd6832b08d16aa86068d66d11f4a2485
-size 192056
diff --git a/Data/Baseline/OTB/Images/feDrawPathAlignDeuxTraits.png b/Data/Baseline/OTB/Images/feDrawPathAlignDeuxTraits.png
deleted file mode 100644
index fa2ce49bc9aee59ff1db19390cfaa907b9e5f51d..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/feDrawPathAlignDeuxTraits.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:2c57a5038aa07298c3b42be3d1d47dd84136a4d7f210a08dbe5b223b266814f0
-size 568
diff --git a/Data/Baseline/OTB/Images/feImageToEdgePathFilterOutput.tif b/Data/Baseline/OTB/Images/feImageToEdgePathFilterOutput.tif
new file mode 100644
index 0000000000000000000000000000000000000000..fb2de39373f31b7c8967de82fd695a972d0c84dc
--- /dev/null
+++ b/Data/Baseline/OTB/Images/feImageToEdgePathFilterOutput.tif
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c006246fea917e0870d9fcbac03c8ee7f80e65d3faffd1e76b731192dbef5978
+size 546
diff --git a/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductDirectionOutput.tif b/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductDirectionOutput.tif
deleted file mode 100644
index a5401aba3a1c7561fd18356e9c8d813acc6606ff..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductDirectionOutput.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4b67d658cebed1a8dcfb9fa45be201a00cdfe874321dc4c63cbcca540ec6c6f3
-size 741552
diff --git a/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductModulusOutput.tif b/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductModulusOutput.tif
deleted file mode 100644
index f3d6fec2decdd35ffc57ee088b85dd2a209c5c1a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/feTvNeighborhoodScalarProductModulusOutput.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ca321fd53b489787e40bc9bf9dd49140d95d43fff73ae3501b25ceb75e529a23
-size 3023067
diff --git a/Data/Baseline/OTB/Images/feTvNonMaxRemovalByDirectionOutput.tif b/Data/Baseline/OTB/Images/feTvNonMaxRemovalByDirectionOutput.tif
deleted file mode 100644
index a0a6e6047bac5bfada96ec5afc74e21dacb99468..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/feTvNonMaxRemovalByDirectionOutput.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:57aae675e46c74467b7d34cc2fe660e4944e096db81115663960627e7e775ed4
-size 1018004
diff --git a/Data/Baseline/OTB/Images/feTvOutputRoadDetection.tif b/Data/Baseline/OTB/Images/feTvOutputRoadDetection.tif
deleted file mode 100644
index 7fe52fc0aeb9a86db404f1cefae1145da8292072..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/feTvOutputRoadDetection.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d0495a68b9e656915b10d5ff2c41c9f15fc46f1069a1e9dc429a153139b2607d
-size 196662
diff --git a/Data/Baseline/OTB/Images/feTvRemoveIsolatedByDirectionOutput.tif b/Data/Baseline/OTB/Images/feTvRemoveIsolatedByDirectionOutput.tif
deleted file mode 100644
index a7d309ac66e53468919f03954933fa9f93a23301..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/feTvRemoveIsolatedByDirectionOutput.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e56e9cadb996fea0621e258155d2414f12899652c33dbc04a69c884923981f72
-size 2166447
diff --git a/Data/Baseline/OTB/Images/feTvRemoveWrongDirectionOutput.tif b/Data/Baseline/OTB/Images/feTvRemoveWrongDirectionOutput.tif
deleted file mode 100644
index 15afc03958f1d221c020052230ffe5cea2e202a3..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/feTvRemoveWrongDirectionOutput.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6cda584546d11c80f5c32dbe32f843d178a182c47062de7d7e3dcb6931bf5304
-size 1360300
diff --git a/Data/Baseline/OTB/Images/feTvVectorizationPathListOutput.png b/Data/Baseline/OTB/Images/feTvVectorizationPathListOutput.png
deleted file mode 100644
index 542e264b833a1f712018a454168f529f40eae386..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/feTvVectorizationPathListOutput.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:5c1fabb13b4184517fc6929de7f5ec9f41a7c59d6bd9f07208587dd19cb9855b
-size 23840
diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_an_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_an_2.png
deleted file mode 100644
index f42b4baef16bcda041abf7b6d93eae69bbd0a817..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_an_2.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c689b2d88a728f26e8464920bd0b8858621dcfec203a612e4cd8763b62d7c83c
-size 164
diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_id_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_id_2.png
deleted file mode 100644
index 02e9380066f73621e2908c406d1a32e78646d83b..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_id_2.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:eb8b759bff6ee7b8972ee09f87094106334dbb84f4b41434ec6cf18ec1821129
-size 296
diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_if_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_if_2.png
deleted file mode 100644
index 3c40551414a347fbe12e6fac0b7da1164fbd1b1e..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_if_2.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b985a05924d453325761a1d99e3bb0c64ac61a6359533035d6368f4d0c2e0ef6
-size 110
diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_sd_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_sd_2.png
deleted file mode 100644
index 06af199a6bbee53c445ff1a24903f356ee1f6530..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_sd_2.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:94647a3bd9b8617e0686c2ad9d7541b6a23d00f3c38cd162eb9c96ec7c077f03
-size 280
diff --git a/Data/Baseline/OTB/Images/msPyrAn_mire_log_sf_2.png b/Data/Baseline/OTB/Images/msPyrAn_mire_log_sf_2.png
deleted file mode 100644
index 7d6ab132cb03f3a2b3fa5690b856000cfde1cc38..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrAn_mire_log_sf_2.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:b5273aadaeb17d41f4fa8a3b6c006879f36d1a913aa84146a2004122757feec7
-size 133
diff --git a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_an_full.tif b/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_an_full.tif
deleted file mode 100644
index df49966b316319dac9e2c6cb94f2d3c2199c427d..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_an_full.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4acd9feb652abe765b4f93b6b08a59bde3111d1eae18e298848b04983d24e112
-size 2433975
diff --git a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_if_full.tif b/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_if_full.tif
deleted file mode 100644
index d373dfb668ec13cc83aa631849fd78a2fcdc4bf6..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_if_full.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0bfbe517069a01fcd757ede835ffe3df3602f95921e8793acb49947f86e022fe
-size 2084698
diff --git a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif b/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif
deleted file mode 100644
index 791be26fb902300057b5f5a85da06922d58cfd96..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:7086793fa9d0d553e115fd3e92cb5455b2dbca6f01352aabbf7312e02e33ffa2
-size 1409779
diff --git a/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_256_2.tif b/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_256_2.tif
deleted file mode 100644
index 070eb61973a513c4b68733c4c68de91ab9be3d28..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_256_2.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:eeaf4e2e3a704677c6fbc00550aa21a79f7b40126f677247abd652e39c967ff4
-size 162988
diff --git a/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_full.tif b/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_full.tif
deleted file mode 100644
index 876e6de02b97af902286a224e141d34db2b9203a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrResampler_IKO_LesHalles_full.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3fad9049c90e30e939018725efe1bdf8d0e35302d50ae891812acbb3fdea013a
-size 829512
diff --git a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_2.tif b/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_2.tif
deleted file mode 100644
index 457056589f50a72e5d6341ee2f06751493459701..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_2.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:24efbd3ab2d54b9066d15145402583db895d8c6747795c83db07b965669748bd
-size 30896
diff --git a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_4.tif b/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_4.tif
deleted file mode 100644
index 12bb4bd12f5a53be3e9416d09e8bd241f8c50450..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_4.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:fc44580b13963e8db80966f7251b8ef77b1fcb967c0a192354959ca7b18df2b3
-size 22111
diff --git a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_5.tif b/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_5.tif
deleted file mode 100644
index a65b7a1e6d77aaed7b5f014b3a53ee35438feee4..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_5.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e1b31996ceec7f89920c029f0ccdb5adca0172d9850e4b0f37fc3ca48b471bd8
-size 21878
diff --git a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_7.tif b/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_7.tif
deleted file mode 100644
index e12083be6785bcd46158ab0550b2172654b94de2..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrSegmentation_IKO_Halles_7.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:47d986a0f28e59fa8586db478791df92c6d93816d392bfbf331054e771b25930
-size 24465
diff --git a/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_if.tif b/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_if.tif
deleted file mode 100644
index d6121605a13f36f9874bdfc6d067078ebb4d598a..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_if.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:6abc1377ee09e3181c6600bece9ed11374f3c50dff1d98460e3f2adc273ecaca
-size 20179
diff --git a/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_sf.tif b/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_sf.tif
deleted file mode 100644
index e9f7589afcc41153e338f2885f8e6e05b49b1001..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/msPyrSegmenter_IKO_Halles_4_2_sf.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ba1c0155d39d3272d956c839f8f4e179dbef23ebee5499c0886a0cdb2bdeb05b
-size 22191
diff --git a/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_DEMGTIFF.tif b/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_DEMGTIFF.tif
index 9662d6048e1b5bc4eef3ad7c00b24ecfb24db433..3b1b11efef094cc93a80d22849d312da21c7c4f9 100644
--- a/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_DEMGTIFF.tif
+++ b/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_DEMGTIFF.tif
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:604ab2a554cb7f8b8bd2f793da761b944ea1585b267b19063d64fbdd8fe9bd75
-size 2471604
+oid sha256:39a2dd6ff12fd1ad13ce5c3014dac39b546aceb5e5d1fbb8a4bb7e58d06fcbeb
+size 2002472
diff --git a/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_DEMSRTM.tif b/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_DEMSRTM.tif
index 0c871089a6f291752cdfe701b38f59c8b8eb9db3..419e04824bcdb961f1fcc0e54fc1c5ecca21d05f 100644
--- a/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_DEMSRTM.tif
+++ b/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_DEMSRTM.tif
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:d0bf90e6e04a89d3876af4272815b3a47dd3cd2805ed3bdb6900a68ec3fb83a3
-size 2470925
+oid sha256:d684f0d16382f9a7402373b4e17dbc74c8d38b2e2a5ef0c95560374f4ae23a3f
+size 2002472
diff --git a/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_noDEM.tif b/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_noDEM.tif
index 22b97cb747f2ea635594d2d3fe1d3c99a82ad5b6..6a12b74e395f7e78dc669c19ea3463408fb01ebd 100644
--- a/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_noDEM.tif
+++ b/Data/Baseline/OTB/Images/prTvOrthoRectification_sentinel1_noDEM.tif
@@ -1,3 +1,3 @@
 version https://git-lfs.github.com/spec/v1
-oid sha256:bfcce43b020c8838f1b710dd62cff8781dff095e88e056edf2df8863dc0ae3af
-size 2471252
+oid sha256:1b8c6e80b58829d09ec7ad2b7cca3104c0fd1676a203361bda5493f0060d8fee
+size 2002472
diff --git a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutput.tif b/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutput.tif
deleted file mode 100644
index 1582d4104bd26e22608c9c337ae659b4992a60c3..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutput.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e6946443c79f0ee5e07b3c653958ce13e5d97e87cc9958cb13051c9d3d07e416
-size 9378087
diff --git a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_GEOEYE.tif b/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_GEOEYE.tif
deleted file mode 100644
index 5b30246782bd321aeab3a79046db7e63a7a187b1..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_GEOEYE.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8fb50d087c6620f8836274927849326dc2fb77a592ca64a2a3f116236248fd03
-size 59434
diff --git a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_QUICKBIRD.tif b/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_QUICKBIRD.tif
deleted file mode 100644
index ca2897289d6507bcd3adf32e79d1fe62e0dddd5f..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_QUICKBIRD.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:89fb4f4c776f753b71e48c74b4c46231a03ae57451ccfc87903b0b0cb4b7ad7c
-size 41907
diff --git a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_WORLDVIEW2.tif b/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_WORLDVIEW2.tif
deleted file mode 100644
index 68f813382bae7b22465d7e4850f2a47bd7796caa..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/prTvotbGenericRSResampleImageFilterOutputFromMap_WORLDVIEW2.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:cad5f798ddae790efa1d14ff57f7d0c25d5fd89f125961c0ba68c3923568ba05
-size 2656332
diff --git a/Data/Baseline/OTB/Images/raTvUrbanAreaDetection.png b/Data/Baseline/OTB/Images/raTvUrbanAreaDetection.png
deleted file mode 100644
index b4535ce33f3c4a19b9b297fe4c76acb870fdd5da..0000000000000000000000000000000000000000
--- a/Data/Baseline/OTB/Images/raTvUrbanAreaDetection.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d34b5be5393bbb04b1fa634fa175f2bf0eb7e5928abe4768fd08dfa7d72323f9
-size 2057
diff --git a/Data/Input/Classification/KMeansInputCentroids.txt b/Data/Input/Classification/KMeansInputCentroids.txt
new file mode 100644
index 0000000000000000000000000000000000000000..d7302a51166ea6468ac049ad970582370605c10a
--- /dev/null
+++ b/Data/Input/Classification/KMeansInputCentroids.txt
@@ -0,0 +1,5 @@
+148.1360412249	176.9065574064	79.2367424483	275.6865470422
+180.3646315623	255.4157568188	138.2565634726	656.5357728603
+187.5074713392	256.7055784897	121.8671939978	115.8660938389
+220.0887858502	326.8933399989	229.672560688	434.3589597278
+515.191687488	834.8626368509	642.6102022528	814.8945435557
diff --git a/Data/Input/Dempster-Shafer/DSFuzzyModel.xml b/Data/Input/Dempster-Shafer/DSFuzzyModel.xml
deleted file mode 100644
index 034442d66e8ad214fadb3037553ab092b9be323b..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/DSFuzzyModel.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" ?>
-<FuzzydDescriptorsModel>
-    <Descriptor name="NONDVI">
-        <Parameter value="0.0328422" />
-        <Parameter value="0.0966684" />
-        <Parameter value="0.128072" />
-        <Parameter value="0.892172" />
-    </Descriptor>
-    <Descriptor name="ROADSA">
-        <Parameter value="0.0528834" />
-        <Parameter value="0.125395" />
-        <Parameter value="0.216374" />
-        <Parameter value="1" />
-    </Descriptor>
-    <Descriptor name="NOBUIL">
-        <Parameter value="0.0198015" />
-        <Parameter value="0.0944664" />
-        <Parameter value="0.17092" />
-        <Parameter value="0.87146" />
-    </Descriptor>
-</FuzzydDescriptorsModel>
diff --git a/Data/Input/Dempster-Shafer/DSFuzzyModel_Init.xml b/Data/Input/Dempster-Shafer/DSFuzzyModel_Init.xml
deleted file mode 100644
index 83f733dc4c117e0ae898afa499e45ae6db65aa7a..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/DSFuzzyModel_Init.xml
+++ /dev/null
@@ -1,21 +0,0 @@
-<?xml version="1.0" ?>
-<FuzzydDescriptorsModel>
-    <Descriptor name="NONDVI">
-        <Parameter value="0.05" />
-        <Parameter value="0.15" />
-        <Parameter value="0.20" />
-        <Parameter value="0.95" />
-    </Descriptor>
-    <Descriptor name="ROADSA">
-        <Parameter value="0.15" />
-        <Parameter value="0.30" />
-        <Parameter value="0.50" />
-        <Parameter value="0.95" />
-    </Descriptor>
-    <Descriptor name="NOBUIL">
-        <Parameter value="0.05" />
-        <Parameter value="0.07" />
-        <Parameter value="0.10" />
-        <Parameter value="0.95" />
-    </Descriptor>
-</FuzzydDescriptorsModel>
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.TIF b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
deleted file mode 100644
index c35e58f7734d48008a909fe36028bb11872914b8..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d4c708f6360cadd64d7c530b6412397ddc60929b8c3bcea79d4b45e392dde59c
-size 1149268
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.geom b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.geom
deleted file mode 100644
index 68452848273e55170a47fdfad7c8175c0b3763dd..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE.geom
+++ /dev/null
@@ -1,165 +0,0 @@
-adjustment_0.adj_param_0.center:  0
-adjustment_0.adj_param_0.description:  intrack_offset
-adjustment_0.adj_param_0.lock_flag:  0
-adjustment_0.adj_param_0.parameter:  0
-adjustment_0.adj_param_0.sigma:  50
-adjustment_0.adj_param_0.units:  pixel
-adjustment_0.adj_param_1.center:  0
-adjustment_0.adj_param_1.description:  crtrack_offset
-adjustment_0.adj_param_1.lock_flag:  0
-adjustment_0.adj_param_1.parameter:  0
-adjustment_0.adj_param_1.sigma:  50
-adjustment_0.adj_param_1.units:  pixel
-adjustment_0.adj_param_2.center:  0
-adjustment_0.adj_param_2.description:  intrack_scale
-adjustment_0.adj_param_2.lock_flag:  0
-adjustment_0.adj_param_2.parameter:  0
-adjustment_0.adj_param_2.sigma:  50
-adjustment_0.adj_param_2.units:  unknown
-adjustment_0.adj_param_3.center:  0
-adjustment_0.adj_param_3.description:  crtrack_scale
-adjustment_0.adj_param_3.lock_flag:  0
-adjustment_0.adj_param_3.parameter:  0
-adjustment_0.adj_param_3.sigma:  50
-adjustment_0.adj_param_3.units:  unknown
-adjustment_0.adj_param_4.center:  0
-adjustment_0.adj_param_4.description:  map_rotation
-adjustment_0.adj_param_4.lock_flag:  0
-adjustment_0.adj_param_4.parameter:  0
-adjustment_0.adj_param_4.sigma:  0.1
-adjustment_0.adj_param_4.units:  degrees
-adjustment_0.description:  Initial adjustment
-adjustment_0.dirty_flag:  0
-adjustment_0.number_of_params:  5
-bias_error:  0
-current_adjustment:  0
-height_off:  241
-height_scale:  500
-image_id:  02APR01105228-M1BS-000000128955_01_P001
-lat_off:  43.5757
-lat_scale:  0.0881
-line_den_coeff_00:  1
-line_den_coeff_01:  3.073151e-05
-line_den_coeff_02:  0.0006767593
-line_den_coeff_03:  0.0002759762
-line_den_coeff_04:  1.707011e-05
-line_den_coeff_05:  -4.215218e-07
-line_den_coeff_06:  -2.031982e-06
-line_den_coeff_07:  6.281466e-06
-line_den_coeff_08:  -2.098686e-05
-line_den_coeff_09:  1.091061e-05
-line_den_coeff_10:  3.716818e-08
-line_den_coeff_11:  5.435656e-08
-line_den_coeff_12:  -4.35619e-06
-line_den_coeff_13:  1.09022e-08
-line_den_coeff_14:  1.78519e-08
-line_den_coeff_15:  0.0004342067
-line_den_coeff_16:  6.371344e-08
-line_den_coeff_17:  0
-line_den_coeff_18:  -1.416592e-05
-line_den_coeff_19:  1.653665e-08
-line_num_coeff_00:  -0.001183432
-line_num_coeff_01:  0.001540212
-line_num_coeff_02:  -0.9858373
-line_num_coeff_03:  0.01594806
-line_num_coeff_04:  2.730892e-05
-line_num_coeff_05:  -9.785795e-07
-line_num_coeff_06:  0.0002528461
-line_num_coeff_07:  -0.0007762763
-line_num_coeff_08:  0.001998298
-line_num_coeff_09:  -5.855501e-06
-line_num_coeff_10:  -8.293341e-07
-line_num_coeff_11:  4.496584e-08
-line_num_coeff_12:  2.925877e-05
-line_num_coeff_13:  0
-line_num_coeff_14:  -8.818227e-06
-line_num_coeff_15:  -4.465644e-05
-line_num_coeff_16:  -1.06142e-05
-line_num_coeff_17:  4.172296e-07
-line_num_coeff_18:  -4.632173e-06
-line_num_coeff_19:  1.915274e-07
-line_off:  3630
-line_scale:  3691
-ll_lat:  43.4876885949517
-ll_lon:  1.35617248105186
-long_off:  1.4635
-long_scale:  0.1091
-lr_lat:  43.487956450501
-lr_lon:  1.57224225725364
-meters_per_pixel_x:  2.55166863064346
-meters_per_pixel_y:  2.68906571490787
-number_lines:  7265
-number_of_adjustments:  1
-number_samples:  6876
-polynomial_format:  B
-rand_error:  0
-rect:  0 0 6875 7264
-ref_point_hgt:  241
-ref_point_lat:  43.5755460927759
-ref_point_line:  3632
-ref_point_lon:  1.46371767649799
-ref_point_samp:  3437.5
-samp_den_coeff_00:  1
-samp_den_coeff_01:  0.001117681
-samp_den_coeff_02:  0.002334335
-samp_den_coeff_03:  -0.0006207135
-samp_den_coeff_04:  -5.962135e-05
-samp_den_coeff_05:  1.552717e-06
-samp_den_coeff_06:  -1.84009e-06
-samp_den_coeff_07:  -4.876876e-06
-samp_den_coeff_08:  3.158963e-05
-samp_den_coeff_09:  -1.201072e-05
-samp_den_coeff_10:  -1.579758e-07
-samp_den_coeff_11:  -9.944747e-08
-samp_den_coeff_12:  1.942372e-06
-samp_den_coeff_13:  0
-samp_den_coeff_14:  -8.945496e-08
-samp_den_coeff_15:  -1.480163e-06
-samp_den_coeff_16:  -6.008504e-08
-samp_den_coeff_17:  3.055564e-08
-samp_den_coeff_18:  1.11032e-07
-samp_den_coeff_19:  1.314046e-08
-samp_num_coeff_00:  -0.0021422
-samp_num_coeff_01:  1.003674
-samp_num_coeff_02:  0.00317708
-samp_num_coeff_03:  0.0002667587
-samp_num_coeff_04:  -0.002315384
-samp_num_coeff_05:  0.0006203277
-samp_num_coeff_06:  -0.0004161892
-samp_num_coeff_07:  0.001035653
-samp_num_coeff_08:  -0.001198854
-samp_num_coeff_09:  7.437719e-06
-samp_num_coeff_10:  2.503507e-06
-samp_num_coeff_11:  -2.185972e-05
-samp_num_coeff_12:  -4.893912e-05
-samp_num_coeff_13:  -1.149441e-05
-samp_num_coeff_14:  8.351017e-05
-samp_num_coeff_15:  -7.642065e-05
-samp_num_coeff_16:  -2.684169e-07
-samp_num_coeff_17:  2.340974e-08
-samp_num_coeff_18:  7.001246e-06
-samp_num_coeff_19:  -3.846245e-08
-samp_off:  3438
-samp_scale:  3443
-sensor:  QB02
-support_data.B_band_absCalFactor:  0.0160412
-support_data.G_band_absCalFactor:  0.0143847
-support_data.N_band_absCalFactor:  0.0154242
-support_data.R_band_absCalFactor:  0.0126735
-support_data.TDI_level:  13
-support_data.azimuth_angle:  154.8
-support_data.band_id:  Multi
-support_data.band_name_list:  B G R N
-support_data.bits_per_pixel:  16
-support_data.elevation_angle:  48.6
-support_data.generation_date:  2004-05-25T19:49:03.000000Z
-support_data.sat_azimuth_angle:  359
-support_data.sat_elevation_angle:  72.4
-support_data.sat_id:  QB02
-support_data.tlc_date:  2002-04-01T10:52:28.415362Z;
-support_data.type:  ossimQuickbirdMetaData
-type:  ossimQuickbirdRpcModel
-ul_lat:  43.663535886024
-ul_lon:  1.35446328287058
-ur_lat:  43.6638304625161
-ur_lon:  1.57254618315919
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.dbf b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.dbf
deleted file mode 100644
index 17a9903a40c7d097242b4f5367a8a1c3a0b30687..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:63f211d703d89d3abd9c7b0c2729f11b94fc9918108e77ab707c3a5b087c8da7
-size 1028
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.prj b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.prj
deleted file mode 100644
index a30c00a55de19be195abf9e942f6cff93bf0a825..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.prj
+++ /dev/null
@@ -1 +0,0 @@
-GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp
deleted file mode 100644
index f901be7cd3a3eb8e328388cb03d4db257cd46987..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a8d2eee9ba80d3bb867aada7db654ef86d17cad4f1d526b0385a943f29d82a6b
-size 4564
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shx b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shx
deleted file mode 100644
index 6f0fa666c0082c9bb48b431e0df4b44b357d6276..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:f3bdf591bf2d6a7e3025629649f3e3effa4511f9f1af793193365b3ef53d8eb3
-size 252
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.dbf b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.dbf
deleted file mode 100644
index ed4287655d16eccbc86bc1926bc7b00c177ce96b..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d680b1d17582dc86c451bbe0446f9af84ae611b6afe06a5db38adecf191ba971
-size 4847
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.prj b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.prj
deleted file mode 100644
index a30c00a55de19be195abf9e942f6cff93bf0a825..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.prj
+++ /dev/null
@@ -1 +0,0 @@
-GEOGCS["GCS_WGS_1984",DATUM["D_WGS_1984",SPHEROID["WGS_1984",6378137,298.257223563]],PRIMEM["Greenwich",0],UNIT["Degree",0.017453292519943295]]
\ No newline at end of file
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp
deleted file mode 100644
index d5ff96b9922859ed04a1f8c4479c89507f6c4daa..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:d0b6e77ff1d3acae9432b63b929050ed0089e9aace8a831c817b07ac02b04063
-size 18388
diff --git a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shx b/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shx
deleted file mode 100644
index 72bda750b8f93dbb743c133f9cdcb57e5d489314..0000000000000000000000000000000000000000
--- a/Data/Input/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8e3f91df5a62beb63ba9b17a952d2673a732aa428b20861dce0c6dd986e588db
-size 668
diff --git a/Data/Input/InputForRoadDetectionScalarProductDir.raw b/Data/Input/InputForRoadDetectionScalarProductDir.raw
deleted file mode 100644
index 95baee1dbe12bd62a063c59131b10dc4e8bde71c..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetectionScalarProductDir.raw
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:983ff7d0fd3f483320cd5739d48a65d89b39085be7689c9ccf2c1909646abe37
-size 8000000
diff --git a/Data/Input/InputForRoadDetectionScalarProductDir.raw.hdr b/Data/Input/InputForRoadDetectionScalarProductDir.raw.hdr
deleted file mode 100644
index 542943fbb79a3e0a855c28857c843cfc6fa64f18..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetectionScalarProductDir.raw.hdr
+++ /dev/null
@@ -1,14 +0,0 @@
-ENVI
-description = {
-/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvNeigborhoodScalarProductDirectionOutput}
-samples = 1000
-lines   = 1000
-bands   = 1
-header offset = 0
-file type = ENVI Standard
-data type = 5
-interleave = bsq
-byte order = 0
-map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North}
-band names = {
-Band 1}
diff --git a/Data/Input/InputForRoadDetectionScalarProductMod.raw b/Data/Input/InputForRoadDetectionScalarProductMod.raw
deleted file mode 100644
index 1965bed30248a82446ddaf14b1080f9a1e1a755a..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetectionScalarProductMod.raw
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:4381a7c3cb500cf48069d96e6cfd22d93c314d9b72ed13db4b63d71595cf4d0d
-size 8000000
diff --git a/Data/Input/InputForRoadDetectionScalarProductMod.raw.hdr b/Data/Input/InputForRoadDetectionScalarProductMod.raw.hdr
deleted file mode 100644
index 4718fbd683e934c6b1228b843fbf722e17ca6b2c..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetectionScalarProductMod.raw.hdr
+++ /dev/null
@@ -1,14 +0,0 @@
-ENVI
-description = {
-/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvNeigborhoodScalarProductModulusOutput}
-samples = 1000
-lines   = 1000
-bands   = 1
-header offset = 0
-file type = ENVI Standard
-data type = 5
-interleave = bsq
-byte order = 0
-map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North}
-band names = {
-Band 1}
diff --git a/Data/Input/InputForRoadDetection_IsolatedRem.raw b/Data/Input/InputForRoadDetection_IsolatedRem.raw
deleted file mode 100644
index 47f0f275c53646931b0dd5c8b3734a3d2db3447b..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetection_IsolatedRem.raw
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:708c193109abedbfbf512198f0ddfb3d395877892535ac24ebd69debed6d252a
-size 8000000
diff --git a/Data/Input/InputForRoadDetection_IsolatedRem.raw.hdr b/Data/Input/InputForRoadDetection_IsolatedRem.raw.hdr
deleted file mode 100644
index c3059e85c1b67b6662f1fc540bb7b52f52f871a8..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetection_IsolatedRem.raw.hdr
+++ /dev/null
@@ -1,14 +0,0 @@
-ENVI
-description = {
-/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvRemoveIsolatedByDirectionOutput}
-samples = 1000
-lines   = 1000
-bands   = 1
-header offset = 0
-file type = ENVI Standard
-data type = 5
-interleave = bsq
-byte order = 0
-map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North}
-band names = {
-Band 1}
diff --git a/Data/Input/InputForRoadDetection_NonMaxRem.raw b/Data/Input/InputForRoadDetection_NonMaxRem.raw
deleted file mode 100644
index 5798a2e6cff1445685a8633fd0ccaa7951982471..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetection_NonMaxRem.raw
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:38e0a731bd1b6032cfa78f0bf04953af80d47503d7a309c0a151c24d8a7d4c92
-size 8000000
diff --git a/Data/Input/InputForRoadDetection_NonMaxRem.raw.hdr b/Data/Input/InputForRoadDetection_NonMaxRem.raw.hdr
deleted file mode 100644
index f127f633be1cf99c10cd5abf9c5abf5707b9e9c7..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetection_NonMaxRem.raw.hdr
+++ /dev/null
@@ -1,14 +0,0 @@
-ENVI
-description = {
-/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvNonMaxRemovalByDirectionOutput}
-samples = 1000
-lines   = 1000
-bands   = 1
-header offset = 0
-file type = ENVI Standard
-data type = 5
-interleave = bsq
-byte order = 0
-map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North}
-band names = {
-Band 1}
diff --git a/Data/Input/InputForRoadDetection_SpectralAngle.raw b/Data/Input/InputForRoadDetection_SpectralAngle.raw
deleted file mode 100644
index fcfe442dca79ccfc12b2f1b2fb7abfee4cf74a9a..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetection_SpectralAngle.raw
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:650d138fc001f6e44fe4c937736c0fee5a0421f8924116c104e52c5ac60e6845
-size 8000000
diff --git a/Data/Input/InputForRoadDetection_SpectralAngle.raw.hdr b/Data/Input/InputForRoadDetection_SpectralAngle.raw.hdr
deleted file mode 100644
index e8d1181b91312aa95409ed3257c39f57c40f43b2..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetection_SpectralAngle.raw.hdr
+++ /dev/null
@@ -1,14 +0,0 @@
-ENVI
-description = {
-/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/bfTvSpectralAngleDistanceOutput}
-samples = 1000
-lines   = 1000
-bands   = 1
-header offset = 0
-file type = ENVI Standard
-data type = 5
-interleave = bsq
-byte order = 0
-map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North}
-band names = {
-Band 1}
diff --git a/Data/Input/InputForRoadDetection_WrongRem.raw b/Data/Input/InputForRoadDetection_WrongRem.raw
deleted file mode 100644
index b77cb617091761f57ab8a441e59a5a0d72ecb26f..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetection_WrongRem.raw
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:cfce41cafcedca2eec656277cda36f4c5dceaef30abfb367858a0a274d41b2aa
-size 8000000
diff --git a/Data/Input/InputForRoadDetection_WrongRem.raw.hdr b/Data/Input/InputForRoadDetection_WrongRem.raw.hdr
deleted file mode 100644
index a8093309243fe19444a67cace922dfebf88bea04..0000000000000000000000000000000000000000
--- a/Data/Input/InputForRoadDetection_WrongRem.raw.hdr
+++ /dev/null
@@ -1,14 +0,0 @@
-ENVI
-description = {
-/home2/julien/ORFEO-TOOLBOX/otb-build/debug/OTB/Testing/Temporary/feTvRemoveWrongDirectionOutput}
-samples = 1000
-lines   = 1000
-bands   = 1
-header offset = 0
-file type = ENVI Standard
-data type = 5
-interleave = bsq
-byte order = 0
-map info = {UTM, 1, 1, 439136.400000, 5273706.600000, 0.600000, 0.600000, 32, North}
-band names = {
-Band 1}
diff --git a/Data/Input/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml b/Data/Input/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml
deleted file mode 100644
index 36bf8590e956116f6e4a111960f27111f41faa0f..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml
+++ /dev/null
@@ -1,15 +0,0 @@
-<?xml version="1.0" ?>
-<FeatureStatistics>
-    <Statistic name="mean">
-        <StatisticVector value="823.004" />
-        <StatisticVector value="81672" />
-        <StatisticVector value="0.821769" />
-        <StatisticVector value="3.36296" />
-    </Statistic>
-    <Statistic name="stddev">
-        <StatisticVector value="366.639" />
-        <StatisticVector value="135865" />
-        <StatisticVector value="1.31875" />
-        <StatisticVector value="9.14568" />
-    </Statistic>
-</FeatureStatistics>
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01.tif b/Data/Input/ObjectReco/Boats/maur_B010202_01.tif
deleted file mode 100644
index e3b946f57282e32006c7930175f75a6c23a9ad20..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:76240f31ab0ebe2c8e83b38d8a02a2840f98b34aa470e92395763014c8b9cc05
-size 13234829
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.dbf b/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.dbf
deleted file mode 100644
index a0aa2d0d932106f2394124898383c7cac084c7d9..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:01de58ce3c495b414e3f919d615130b06be4bbf1003b6b0de4f5253f2f75be54
-size 128437
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shp b/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shp
deleted file mode 100644
index cfa8f3d8dbcf234345c82d3b9153ba3120dd0635..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0d1c844b374bafb64de032505d8289c60df1a902468126eddd39a88223e1c4de
-size 39160
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shx b/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shx
deleted file mode 100644
index 4a2c3af97936c8dcb47fa4403afe509a53710708..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01LabeledPoints.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:be403f366f2b77b0d0e003483d14e3a791132d8553071062e7291d54a85f8e3e
-size 11260
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.dbf b/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.dbf
deleted file mode 100644
index 202ee4ebf826690e08e4824b170606210b443de7..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:397c38ef052e1be71c0417e8755149f56e29a89db317020b118683950807072f
-size 580
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shp b/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shp
deleted file mode 100644
index 6c61252e5cde1badc59f9dcab1deb7ef9aaf8661..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:3de1390f4caeb34c796e97b5fd734118267dab9b7de9edd731013ebfb938772a
-size 2236
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shx b/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shx
deleted file mode 100644
index eedcb9a4a63e2e0e2f855ed1a9a8a4840f778aa2..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01Polygons.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:bc1895c35aa8f5da834af41323f450b6bad52514d7965ceb8a1e18dbaeddc7b1
-size 124
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.dbf b/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.dbf
deleted file mode 100644
index 3522a6c3014f619bed4fbbc4950e5928f903e858..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.dbf
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:53d0f24062de7d7d09a7daa461a58a7e86e432d599655b89578f72f137f905d8
-size 365699
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shp b/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shp
deleted file mode 100644
index 24cb707432de271be01f81c9c3e2ca6c0b9a6e87..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shp
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0cf2710d95e4c820526a25bc6690ef7a3b976f18cf17f3f2ed1ffbe035515747
-size 126492
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shx b/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shx
deleted file mode 100644
index aa895b96ac97a0ee0052261977e5ce92bac4ebcb..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01Samples.shx
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:78090fcacc5e730c68b21172cd3879d44817317527c415e713a872129d3fc6bc
-size 36212
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01_amplitude.tif b/Data/Input/ObjectReco/Boats/maur_B010202_01_amplitude.tif
deleted file mode 100644
index 1476026469d7d1da3ac47455c8fc6ac6cbc3028f..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01_amplitude.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:0a9b97df1f6ae5a5356cbb4710e1cb0b95c7b8b82211dde09ba236164ecd965d
-size 8584511
diff --git a/Data/Input/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif b/Data/Input/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif
deleted file mode 100644
index 0aebc9c9a6236adfda6f6f6ae4f48a121064951a..0000000000000000000000000000000000000000
--- a/Data/Input/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:32dd7458e8c64d1779b1513e7a22e28249939d49e6e9023888c12c89eeade1c8
-size 71853
diff --git a/Data/Input/Seg1InputForRCC8Graph.tif b/Data/Input/Seg1InputForRCC8Graph.tif
deleted file mode 100644
index e677622f9e4c0d4d464a97c7868746d837030406..0000000000000000000000000000000000000000
--- a/Data/Input/Seg1InputForRCC8Graph.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:75bfc4c053eeb623f1c3c072989a39835f7c6632b40902604bab4c8c7567c3d9
-size 5564
diff --git a/Data/Input/Seg2InputForRCC8Graph.tif b/Data/Input/Seg2InputForRCC8Graph.tif
deleted file mode 100644
index 6acc661a46c63f05ebc2b1114eba866af69151cd..0000000000000000000000000000000000000000
--- a/Data/Input/Seg2InputForRCC8Graph.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:ebfa2c070d97c3f7a524766a02360ad9b8c21c98e49d5e7dd7eea9ff23224900
-size 4691
diff --git a/Data/Input/Seg3InputForRCC8Graph.tif b/Data/Input/Seg3InputForRCC8Graph.tif
deleted file mode 100644
index 2e27e0ee07e6a96ee3080888d565476f87127f8f..0000000000000000000000000000000000000000
--- a/Data/Input/Seg3InputForRCC8Graph.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:e2b58aefe1fa20b19ea16c34bbc047fd8a4b06ccb302b39d900cbead96c62ca6
-size 3340
diff --git a/Data/Input/Seg4InputForRCC8Graph.tif b/Data/Input/Seg4InputForRCC8Graph.tif
deleted file mode 100644
index c2886b585ce56f98b79be4f016cdd69180bac30f..0000000000000000000000000000000000000000
--- a/Data/Input/Seg4InputForRCC8Graph.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:8da097d6896b059cda7de7ff1225ce04be314844ecf8ef62c43d2db2335b8f53
-size 3024
diff --git a/Data/Input/Seg5InputForRCC8Graph.tif b/Data/Input/Seg5InputForRCC8Graph.tif
deleted file mode 100644
index 6b8329bcff20dd012dd54dfdbe1f1e60e968591c..0000000000000000000000000000000000000000
--- a/Data/Input/Seg5InputForRCC8Graph.tif
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:c84224aa400ed08bc16edb53596dd9f205996e1dc0fdf377220beebf54119c09
-size 3931
diff --git a/Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png b/Data/Input/qb_ExtractRoad_pretty.png
similarity index 100%
rename from Data/Baseline/Examples/FeatureExtraction/qb_ExtractRoad_pretty.png
rename to Data/Input/qb_ExtractRoad_pretty.png
diff --git a/Data/Input/rcc8_mire1.png b/Data/Input/rcc8_mire1.png
deleted file mode 100644
index 84d80b5e476e3cda75dea149e44b344d157c7437..0000000000000000000000000000000000000000
--- a/Data/Input/rcc8_mire1.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:12f42927804f6acac12efbe0822696999f081d3b1c2d2e0660227a63635f2fba
-size 10261
diff --git a/Data/Input/rcc8_mire2.png b/Data/Input/rcc8_mire2.png
deleted file mode 100644
index fe51b7d93dca6819628b8aeccd1786b05ef28f12..0000000000000000000000000000000000000000
--- a/Data/Input/rcc8_mire2.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:41dc58713412957c17566c85387bf1b8b260ccf1f8fd8196fe649643887f2d03
-size 10261
diff --git a/Data/Input/rcc8_mire3.png b/Data/Input/rcc8_mire3.png
deleted file mode 100644
index 6ca1fb1ed79527ade0d0d39d517d2b27590fec86..0000000000000000000000000000000000000000
--- a/Data/Input/rcc8_mire3.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:a2cde01113be3caeb86230817cd34355becc8aa74536929d3b22a8fe82f58659
-size 294
diff --git a/Data/Input/rcc8_mire4.png b/Data/Input/rcc8_mire4.png
deleted file mode 100644
index 10cd0bd99ff3ade23944d2d64bdba05104de70ea..0000000000000000000000000000000000000000
--- a/Data/Input/rcc8_mire4.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:57d4c7a833e915885ee3702f7990864e0583838d395f7e4fccb38502607d7189
-size 10261
diff --git a/Data/Input/rcc8_mire5.png b/Data/Input/rcc8_mire5.png
deleted file mode 100644
index 25031a9c185cce67878d7f32db1d587524d22bb5..0000000000000000000000000000000000000000
--- a/Data/Input/rcc8_mire5.png
+++ /dev/null
@@ -1,3 +0,0 @@
-version https://git-lfs.github.com/spec/v1
-oid sha256:32d1a7049dcdf8cf0488452d6347467740c97536baa73e21751d499ef41f306b
-size 112
diff --git a/Data/Input/rcc8_mire5.png.aux.xml b/Data/Input/rcc8_mire5.png.aux.xml
deleted file mode 100644
index 098625bf84b4ca0de04765727ac8e21380994743..0000000000000000000000000000000000000000
--- a/Data/Input/rcc8_mire5.png.aux.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<PAMDataset>
-  <GeoTransform>  5.0000000000000000e+00,  1.0000000000000000e+00,  0.0000000000000000e+00,  1.5000000000000000e+01,  0.0000000000000000e+00,  1.0000000000000000e+00</GeoTransform>
-  <Metadata>
-    <MDI key="Comment">Created with The GIMP</MDI>
-  </Metadata>
-</PAMDataset>
diff --git a/Data/Output/DEMToHotImageGenerator.png b/Data/Output/DEMToHotImageGenerator.png
new file mode 100644
index 0000000000000000000000000000000000000000..12224d6f0908d6c273cf87b787de7cfdd0ac7620
--- /dev/null
+++ b/Data/Output/DEMToHotImageGenerator.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d36b4f16b0f0be1d4d2247de214510349da67d37ae928945940898904e5a0a85
+size 234062
diff --git a/Data/Output/DEMToRainbowImageGenerator.png b/Data/Output/DEMToRainbowImageGenerator.png
new file mode 100644
index 0000000000000000000000000000000000000000..935878f01c767e1f0aebc632201d9e2ba89bcfac
--- /dev/null
+++ b/Data/Output/DEMToRainbowImageGenerator.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:fd8b080e078549cdcfa949a31a286b30b7d6f1c96c923a977083a02855994256
+size 239121
diff --git a/Data/Output/DEMToReliefImageGenerator.png b/Data/Output/DEMToReliefImageGenerator.png
new file mode 100644
index 0000000000000000000000000000000000000000..97820270f0a32bc9d4c104a05045287c8f631e88
--- /dev/null
+++ b/Data/Output/DEMToReliefImageGenerator.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0a9ed1706ab135a72068d49d0671e4c64c038d738928485b3721d29851c56ff1
+size 333514
diff --git a/Data/Output/GomaSmallFrostFiltered.png b/Data/Output/GomaSmallFrostFiltered.png
new file mode 100644
index 0000000000000000000000000000000000000000..4bb8d0aff26b48ac98cf4449cd8f7134ece2952f
--- /dev/null
+++ b/Data/Output/GomaSmallFrostFiltered.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:8469a05c42dbe0468daa7f9355fa6af0d79fa81793c93d001eb6310bf5c0ade6
+size 26542
diff --git a/Data/Output/HillShadingColorExample.png b/Data/Output/HillShadingColorExample.png
new file mode 100644
index 0000000000000000000000000000000000000000..ef71ef616873d212669e28f78d1ce307fed60284
--- /dev/null
+++ b/Data/Output/HillShadingColorExample.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ba2f71579dafa1317e7f036223d1d849f3dfd8eb3a3e699c6fa91d5226372ab2
+size 484983
diff --git a/Data/Output/HillShadingExample.png b/Data/Output/HillShadingExample.png
new file mode 100644
index 0000000000000000000000000000000000000000..d86e845d681b010064d24657bfc5cb93bf2f23e1
--- /dev/null
+++ b/Data/Output/HillShadingExample.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:11d6eb5b30a7a0507a0c2b15275a69d583ae89c49da1ecb1fd29eb7e4aabbb5b
+size 183418
diff --git a/Data/Output/MSClusteredOutput-pretty.png b/Data/Output/MSClusteredOutput-pretty.png
new file mode 100644
index 0000000000000000000000000000000000000000..caa286e69843f35949a09bc8bc42019420bb4892
--- /dev/null
+++ b/Data/Output/MSClusteredOutput-pretty.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf676b3188f175f21ea758ccfb7f551eb9468398d67f926ef677a89ca68dc622
+size 105266
diff --git a/Data/Output/MSLabeledOutput-pretty.png b/Data/Output/MSLabeledOutput-pretty.png
new file mode 100644
index 0000000000000000000000000000000000000000..ec6a18fbe4105fb582189df496e3beb846c083c2
--- /dev/null
+++ b/Data/Output/MSLabeledOutput-pretty.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e2abea57f9bd5d62e708f6971178d2a3dd94997db37ab0846a66d6d99d37152a
+size 105590
diff --git a/Data/Output/PrintableExampleOutput1.jpg b/Data/Output/PrintableExampleOutput1.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..ab0a5d601db100171d2b4eebccaa087276ebee1a
--- /dev/null
+++ b/Data/Output/PrintableExampleOutput1.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:895c3c368f3daf3049ec2be7164e94f1e0fd3cdd52259bf99fb3b187fece5b3b
+size 108726
diff --git a/Data/Output/PrintableExampleOutput2.jpg b/Data/Output/PrintableExampleOutput2.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..5254ab0bb4c6736dd2930eba0070ddaf28164488
--- /dev/null
+++ b/Data/Output/PrintableExampleOutput2.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:57a2949eb07c569b5d0b474d2b9cf8e3f8de62260850dfc1a9b3614c57cdf5bb
+size 116071
diff --git a/Data/Output/QB_Toulouse_Ortho_PAN_casted.png b/Data/Output/QB_Toulouse_Ortho_PAN_casted.png
new file mode 100644
index 0000000000000000000000000000000000000000..23aee06b351d171c95dd0bf521b046c8ebb3fd63
--- /dev/null
+++ b/Data/Output/QB_Toulouse_Ortho_PAN_casted.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:ca5363df6bf1a9fd48d17b033cd507ece65605bce33a8f3da8e3ba4af5f5e705
+size 182862
diff --git a/Data/Output/QB_Toulouse_Ortho_PAN_rescaled.png b/Data/Output/QB_Toulouse_Ortho_PAN_rescaled.png
new file mode 100644
index 0000000000000000000000000000000000000000..6a70131af5f2a3b3e2d3eef3b5fcf88c7fcacec6
--- /dev/null
+++ b/Data/Output/QB_Toulouse_Ortho_PAN_rescaled.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e333f7abd77db1ab2158975e767ed1ea94ff547747584be07f54a01eae0bb3fa
+size 108051
diff --git a/Data/Output/buildingExtractionIndexed_scaled.png b/Data/Output/buildingExtractionIndexed_scaled.png
new file mode 100644
index 0000000000000000000000000000000000000000..f5c8ecd3189513614019da20e01580e77f2eddc5
--- /dev/null
+++ b/Data/Output/buildingExtractionIndexed_scaled.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:90304742fc7c5d8d88cff5abc627954337856160799856adb5dcb352db484ddd
+size 17406
diff --git a/Data/Output/buildingExtractionRGB.png b/Data/Output/buildingExtractionRGB.png
new file mode 100644
index 0000000000000000000000000000000000000000..0dbdd3d556a7aabcd2c736d68e3fbedc8b53301e
--- /dev/null
+++ b/Data/Output/buildingExtractionRGB.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:a91156558f5de2353efe3d8e3b17ef2284e74200a0bd1fed5d36bffcf720fc7a
+size 26026
diff --git a/Data/Output/qb_BandMath-pretty.jpg b/Data/Output/qb_BandMath-pretty.jpg
new file mode 100644
index 0000000000000000000000000000000000000000..bd7702f79d46340d9a6cf011270092ab6b1f22af
--- /dev/null
+++ b/Data/Output/qb_BandMath-pretty.jpg
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:280cbf6de4cfc271371df94f79bdef1b6fb5089225e0d5105a6ad494ae7be89e
+size 67381
diff --git a/Documentation/Cookbook/Scripts/RunExamples.py b/Documentation/Cookbook/Scripts/RunExamples.py
index e04ea62e62a0d781018c498504ebdfc72f25c100..41cb849897d494cf71cfc858e9dc2258bd673ff2 100755
--- a/Documentation/Cookbook/Scripts/RunExamples.py
+++ b/Documentation/Cookbook/Scripts/RunExamples.py
@@ -33,7 +33,7 @@ blacklist = [
         "LAIAndPROSAILToSensorResponse" # does not run, wrong arguments
     ]
 
-def run_example(otb_root, otb_data, name, dry_run):
+def run_example(otb_root, name, dry_run):
     """
     Run an example by name
     Assumes the current working directory is an OTB build
@@ -71,6 +71,7 @@ def run_example(otb_root, otb_data, name, dry_run):
         print("$ " + binary + " " + " ".join(example_args))
 
         if not dry_run:
+            otb_data = join(otb_root, "Data")
             # Make sure Output dir exists
             os.makedirs(join(otb_data, "Output"), exist_ok=True)
 
@@ -81,19 +82,18 @@ def run_example(otb_root, otb_data, name, dry_run):
 def main():
     parser = argparse.ArgumentParser(usage="Run one or all OTB cxx examples")
     parser.add_argument("otb_root", help="Path to otb repository")
-    parser.add_argument("otb_data", help="Path to otb-data repository")
     parser.add_argument("--name", type=str, help="Run only one example with then given name")
     parser.add_argument("-n", "--dry-run", action='store_true', help="Dry run, only print commands")
     parser.add_argument("-k", "--keep-going", action='store_true', help="Keep going after failing examples")
     args = parser.parse_args()
 
     if args.name:
-        run_example(args.otb_root, args.otb_data, args.name, dry_run=args.dry_run)
+        run_example(args.otb_root, args.name, dry_run=args.dry_run)
     else:
         list_of_examples =[os.path.splitext(os.path.basename(f))[0] for f in glob.glob(join(args.otb_root, "Examples/*/*.cxx"))]
         for name in list_of_examples:
             try:
-                run_example(args.otb_root, args.otb_data, name, dry_run=args.dry_run)
+                run_example(args.otb_root, name, dry_run=args.dry_run)
             except Exception as e:
                 if args.keep_going:
                     print("Warning:", e)
diff --git a/Documentation/Cookbook/Scripts/otbGenerateExamplesRstDoc.py b/Documentation/Cookbook/Scripts/otbGenerateExamplesRstDoc.py
index 95463f1191d2f8a44e23f2397445fae2a7028247..f534a97dcb0578ab7928a44c0ba1aa262acb244e 100644
--- a/Documentation/Cookbook/Scripts/otbGenerateExamplesRstDoc.py
+++ b/Documentation/Cookbook/Scripts/otbGenerateExamplesRstDoc.py
@@ -44,7 +44,7 @@ def generate_examples_index(rst_dir, list_of_examples):
     index_f = open(join(rst_dir, "Examples.rst"), "w")
     index_f.write(RstPageHeading("C++ Examples", 3, ref="cpp-examples"))
 
-    for tag, examples_filenames in tag_files.items():
+    for tag, examples_filenames in sorted(tag_files.items()):
         tag_filename = join("Examples", tag + ".rst")
         index_f.write("\t" + tag_filename + "\n")
 
diff --git a/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py b/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
index 8cd9ab8ed70e204d915e32c25ebb4944f52b4a9b..5cb3224bc01e41a3a1df7511dd28f1c5b050f722 100755
--- a/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
+++ b/Documentation/Cookbook/Scripts/otbGenerateWrappersRstDoc.py
@@ -25,7 +25,7 @@ import argparse
 import re
 
 import otbApplication
-from otbApplication import ParameterType_Bool, ParameterType_Int, ParameterType_Radius, ParameterType_RAM, ParameterType_Float, ParameterType_String, ParameterType_StringList, ParameterType_InputFilename, ParameterType_OutputFilename, ParameterType_InputImage, ParameterType_OutputImage, ParameterType_InputVectorData, ParameterType_OutputVectorData, ParameterType_Directory, ParameterType_Choice, ParameterType_InputImageList, ParameterType_InputVectorDataList, ParameterType_InputFilenameList, ParameterType_InputProcessXML, ParameterType_OutputProcessXML, ParameterType_ListView, ParameterType_Group
+from otbApplication import ParameterType_Bool, ParameterType_Int, ParameterType_Radius, ParameterType_RAM, ParameterType_Float, ParameterType_String, ParameterType_StringList, ParameterType_InputFilename, ParameterType_OutputFilename, ParameterType_InputImage, ParameterType_OutputImage, ParameterType_InputVectorData, ParameterType_OutputVectorData, ParameterType_Directory, ParameterType_Choice, ParameterType_InputImageList, ParameterType_InputVectorDataList, ParameterType_InputFilenameList, ParameterType_ListView, ParameterType_Group
 
 from otb_warnings import application_documentation_warnings
 
@@ -202,7 +202,6 @@ def rst_parameter_value(app, key):
     values.update({ParameterType_InputImageList: "image1 image2..."})
     values.update({ParameterType_InputVectorDataList: "vectorfile1 vectorfile2..."})
     values.update({ParameterType_InputFilenameList: "filename1 filename2..."})
-    values.update(dict.fromkeys([ParameterType_InputProcessXML, ParameterType_OutputProcessXML], "filename.xml"))
 
     if type in values:
         return values[type]
@@ -356,10 +355,17 @@ def make_links(text, allapps):
     rep = {appname: ":ref:`{}`".format(appname) for appname in allapps}
     return multireplace(text, rep)
 
+def render_deprecation_string(app):
+    if app.IsDeprecated():
+        return "This application is deprecated and will be removed in a future release."
+    else:
+        return ""
+
 def render_application(appname, allapps):
     "Render app to rst"
 
-    app = otbApplication.Registry.CreateApplication(appname)
+    # Create the application without logger to avoid the deprecation warning log
+    app = otbApplication.Registry.CreateApplicationWithoutLogger(appname)
 
     # TODO: remove this when bug 440 is fixed
     app.Init()
@@ -368,6 +374,7 @@ def render_application(appname, allapps):
 
     output = template_application.format(
         label=appname,
+        deprecation_string=render_deprecation_string(app),
         heading=rst_section(app.GetName(), '='),
         description=app.GetDescription(),
         longdescription=make_links(app.GetDocLongDescription(), allapps),
@@ -381,8 +388,9 @@ def render_application(appname, allapps):
     return output
 
 def GetApplicationTags(appname):
-     app = otbApplication.Registry.CreateApplication(appname)
-     return app.GetDocTags()
+    # Create the application without logger to avoid the deprecation warning log
+    app = otbApplication.Registry.CreateApplicationWithoutLogger(appname)
+    return app.GetDocTags()
 
 def GenerateRstForApplications(rst_dir):
     "Generate .rst files for all applications"
@@ -404,9 +412,12 @@ def GenerateRstForApplications(rst_dir):
     for appName in appNames:
 
         # Get application first tag
-        tags = GetApplicationTags(appName)
+        tags = list(GetApplicationTags(appName))
+        if "Deprecated" in tags:
+            tags.remove("Deprecated")
         if not tags or len(tags) == 0:
             raise RuntimeError("No tags for application: " + appName)
+
         tag = tags[0]
         tag_ = tag.replace(" ", "_")
 
diff --git a/Documentation/Cookbook/rst/C++/DeveloperGuide.rst b/Documentation/Cookbook/rst/C++/DeveloperGuide.rst
index 2808c4479c704bf71bd2ced9c010af2c65e57228..e34e034a08d94a074443ec8d26215f953c5ae8ca 100644
--- a/Documentation/Cookbook/rst/C++/DeveloperGuide.rst
+++ b/Documentation/Cookbook/rst/C++/DeveloperGuide.rst
@@ -7,6 +7,7 @@ Developer Guide
     Iterators
     Filters
     StreamingAndThreading
+    FunctorImageFilter
     PersistentFilters
     WriteAnApplication
     AddingNewModules
diff --git a/Documentation/Cookbook/rst/C++/FunctorImageFilter.rst b/Documentation/Cookbook/rst/C++/FunctorImageFilter.rst
new file mode 100644
index 0000000000000000000000000000000000000000..95fd6124f8c02481e07b7313481c677bbabd01ec
--- /dev/null
+++ b/Documentation/Cookbook/rst/C++/FunctorImageFilter.rst
@@ -0,0 +1,253 @@
+.. _FunctorImageFilter:
+
+FunctorImageFilter
+==================
+
+In image processing and remote sensing, it is very common to write custom
+pixel-based or neighborhood-based operations between one or several
+co-registered images. Starting OTB 7.0, there is now a unique filter
+:doxygen:`FunctorImageFilter` that will handle most cases:
+
+* Any number of input images, being either ``Image``, ``VectorImage`` or a mix of both,
+* An ``Image`` or ``VectorImage`` output
+* Operation based on pixels, neighborhoods or a mix of both,
+* Functor classes, function, lambdas.
+
+With :doxygen:`FunctorImageFilter` you only need to write the operation you want to perform, and the filter will take care of everything (including multi-threading and streaming).
+
+Quickstart
+----------
+
+Defining the operation to perform
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The operation to perform can be defined as a free function:
+
+.. code-block:: cpp
+
+    double myFreeFunction(const double& int in) {...}
+
+It can also be defined as a functor (i.e. a class defining ``operator()``:
+
+.. code-block:: cpp
+
+    class MyFunctor
+    {
+    public:
+        double operator()(const double& int in) {...}
+    };
+
+It can also be defined as a lambda:
+
+.. code-block:: cpp
+
+    auto myLambda = [](const double & int in) -> double {...}
+
+
+Creating a ``FunctorImageFilter``
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Once the operation to perform has been implemented, it is very easy to get an instance of ``FunctorImageFilter`` from it:
+
+.. code-block:: cpp
+
+    auto filterFromFreeFunction = NewFunctorFilter(myFreeFunction);
+    auto filterFromFunctor      = NewFunctorFilter(MyFunctor);
+    auto filterFromLambda       = NewFunctorFilter(myLambda);
+
+And you can use it just like any other filter:
+
+.. code-block:: cpp
+
+    filterFromLambda->SetInput(upStreamFilter->GetOutput());
+    downstreamFilter->SetInput(filterFromLambda->GetOutput());
+
+You can also directly define instances of ``FunctorImageFilter`` with built-in math functions:
+
+.. code-block:: cpp
+
+    using CosType  = double(double);
+    auto filterCos = NewFunctorFilter(static_cast<CosType*>(std::cos));
+
+Note, the ``static_cast`` trick, which allows to disambguiate between different prototypes of the ``cos`` function.
+
+Automatic types deduction
+-------------------------
+
+You probably notice that, contrary to other filters in ITK and OTB, there is no
+need to specify input and output image types. This is because
+``FunctorImageFilter`` uses C++ metaprogramming to automatically derive the
+input and output image types from the free function, functor or lambda, with
+the following rules.
+
+Let ``R (T1 t1, T2 t2 ..., TN tn)`` be the signature of the free function, ``operator()`` or lambda. Note that the filter conversely supports passing by value ``TN tn`` or by const reference ``const TN & tn``.
+
+First lets define basic types:
+
+- Scalar type (double, float, unsigned int, short ...)
+- ``std::complex<T>`` with T a scalar type
+- ``itk::FixedArray<T,N>``, ``itk::RGBPixel<T>``, ``itk::RGBAPixel<T>`` with T a scalar type
+
+
+Automatic input type deduction
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+From the basic types, the following deduction rules apply:
+
+- If ``TN`` is a basic type as defined above, the Nth input will be of type ``otb::Image<TN>``
+- If ``TN`` is of type ``itk::VariableLengthVector<T>`` with T a basic type as defined above, the Nth input will be of type ``otb::VectorImage<T>``
+- If ``TN`` is of type  ``const itk::ConstNeighborhoodIterator<otb::Image<T>> &`` with T a basic type as defined above, the Nth input will be of type ``otb::Image<TN>``
+- If ``TN`` is of type  ``const itk::ConstNeighborhoodIterator<otb::VectorImage<T>> &`` with T a basic type as defined above, the Nth input will be of type ``otb::VectorImage<TN>``
+
+Note that this will work for any number of inputs.
+
+Automatic output type deduction
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Rules for output type deduction are simpler:
+- If ``R`` is a basic type, output of the filter will be of type ``otb::Image<R>``
+- If ``R`` is of type ``itk::VariableLengthVector<T>`` with T a basic type as defined above, the output of the filter will be of type ``otb::VectorImage<R>``
+
+Note that if ``R`` is of type ``itk::VariableLengthVector<T>``, you need extra steps so that the filter can allocate the correct number of output bands, as explained in NumberOfOutputBands_ section.
+
+Alternative prototype for performance
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Automatic type deduction will also work with the following signature:
+``void (const R&, T1 t1, T2 t2 ..., TN tn)``
+
+This will be more efficient when ``R`` is of type ``itk::VariableLengthVector<T>`` and should be prefered in this case.
+
+Automatic type deduction examples
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Consider the following free function:
+
+.. code-block:: cpp
+
+    itk::VariableLenghtVector<double> myFreeFunction(unsigned char a,
+                                                     const std::complex<float>& b,
+                                                     const itk::VariableLengthVector<short>& c,
+                                                     const itk::ConstNeighborhoodIterator<otb::Image<double>>& d) {...}
+
+When a ``FunctorImageFilter`` is built from this function, the following types will be deduced:
+
+- First input (corresponding to a) will be of type ``otb::Image<unsigned char>``
+- Second input (corresponding to b) will be of type ``otb::Image<std::complex<float>>``
+- Third input (corresponding to c) will be of type ``otb::VectorImage<short>``
+- Fourth input (corresponding to d) will be of type ``otb::Image<double>``
+- Output type will be of type ``otb::VectorImage<double>``
+
+This is strictly equivalent to:
+
+.. code-block:: cpp
+
+    void myFreeFunction(const itk::VariableLengthVector<double> & out ,
+                        unsigned char a, 
+                        const std::complex<float> & b,
+                        const itk::VariableLengthVector<short> &c,
+                        const itk::ConstNeighborhoodIterator<otb::Image<double>> & d) {...}
+
+Since the output type is of type ``itk::VariableLengthVector<T>``, the latter should be preferred.
+
+
+Using the filter
+----------------
+
+Setting inputs
+~~~~~~~~~~~~~~
+
+The Nth parameter can be set with the template ``SetInput()`` method:
+
+.. code-block:: cpp
+
+    myFilter->SetInput<N>(imageN);
+
+You can also set all inputs at once with the ``SetInputs()`` method:
+
+.. code-block:: cpp
+
+    myFilter->SetInputs(image0,...,imageN);
+
+If you only have one input, you can simply call:
+
+.. code-block:: cpp
+
+    myFilter->SetInput(image);
+
+Of course, input types must match the types deducted from the operator(), free function or lambda!
+
+Accessing the function
+~~~~~~~~~~~~~~~~~~~~~~
+
+If ``FunctorImageFilter`` was built from a functor class, this class may have parameters that you wish to change or read.
+
+You can call ``GetFunctor()`` to access a const reference to the functor in order to read a parameter value:
+
+.. code-block:: cpp
+
+    auto a = myFilter->GetFunctor().GetParameterA();
+
+If you wish to modify a parameter of the functor, you will have to call ``GetModifiableFunctor()``, which will return a non-const reference to the functor and ensure that the filter will be re-run when updated.
+
+Setting the neighborhood radius
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+If you have ``itk::ConstNeighborhoodIterator<otb::Image<T>>`` or ``itk::ConstNeighborhoodIterator<otb::VectorImage<T>>`` as input type, you can set the neighborhood radius when building the filter instance, with:
+
+.. code-block:: cpp
+
+    auto filterFromFunctor = NewFunctorFilter(MyFunctor,{{3,3}});
+
+Advanced use
+------------
+
+Number of output bands
+~~~~~~~~~~~~~~~~~~~~~~
+
+.. _NumberOfOutputBands:
+
+If is of type ``itk::VariableLengthVector<T>``, then the functor class should provide an ``OutputSize()`` method as follows.
+
+If the number of output bands is fixed:
+
+.. code-block:: cpp
+
+    class MyFunctor {
+    public:
+    ...
+    constexpr size_t OutputSize(...) const
+    {
+      // Return the number of output bands
+      return 3;
+    }
+    };
+
+If the number of output bands depends on the number of bands in one or more input images:
+
+.. code-block:: cpp
+
+    class MyFunctor {
+    public:
+    ...
+    size_t OutputSize(const std::array<size_t,N> & nbBands) const
+    {
+      // N Is the number of inputs
+      // nbBands is an array containing the number of bands for each input
+      ...
+      return outputNumberOfBands;
+    }
+    };
+
+In this case you can use the information provided by the ``nbBands`` parameter
+which contain the number of bands for each input, to derive and return the
+output number of bands.
+
+If you are using a lambda, a free function or an existing functor which does not
+offer the ``OutputSize()`` method, you can still use ``FunctorImageFilter`` but
+you need to provide the number of bands when constructing the filter instance:
+
+.. code-block:: cpp
+
+    // Specify that the lambda output has 3 bands
+    auto filterFromLambda       = NewFunctorFilter(myLambda,3);
+
diff --git a/Documentation/Cookbook/rst/C++/UserGuide.rst b/Documentation/Cookbook/rst/C++/UserGuide.rst
index 10304efb75adc6ae0782a52ed781e162e07c37e3..956d36e3ca03d27e8638f2cf1a376b9763e3de3e 100644
--- a/Documentation/Cookbook/rst/C++/UserGuide.rst
+++ b/Documentation/Cookbook/rst/C++/UserGuide.rst
@@ -618,8 +618,6 @@ vegetation had been demonstrated, users tended to also use the NDVI to
 quantify the photosynthetic capacity of plant canopies. This, however,
 can be a rather more complex undertaking if not done properly.
 
-* NDVI. See example :ref:`NDVIRAndNIRVegetationIndexImageFilter.cxx`.
-
 * ARVI. See example :ref:`ARVIMultiChannelRAndBAndNIRVegetationIndexImageFilter.cxx`.
 
 * AVI. See example :ref:`AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter.cxx`.
@@ -707,7 +705,6 @@ Interest Points
   See example :ref:`RatioLineDetectorExample.cxx`.
   See example :ref:`CorrelationLineDetectorExample.cxx`.
   See example :ref:`AsymmetricFusionOfLineDetectorExample.cxx`.
-  See example :ref:`ParallelLineDetectionExample.cxx`.
 
 * Segment Extraction. See example :ref:`LineSegmentDetectorExample.cxx`.
 
@@ -787,26 +784,9 @@ following expressions:
 
 * Flusser Moments for Images. See example :ref:`FlusserMomentsImageFunctionExample.cxx`.
 
-Road and cloud extraction
+Cloud extraction
 ~~~~~~~~~~~~~~~~~~~~~~~~~
 
-Road extraction is a critical feature for an efficient use of high
-resolution satellite images. There are many applications of road
-extraction: update of GIS database, reference for image registration,
-help for identification algorithms and rapid mapping for example. Road
-network can be used to register an optical image with a map or an
-optical image with a radar image for example. Road network extraction
-can help for other algorithms: isolated building detection, bridge
-detection. In these cases, a rough extraction can be sufficient. In the
-context of response to crisis, a fast mapping is necessary: within
-6 hours, infrastructures for the designated area are required. Within
-this timeframe, a manual extraction is inconceivable and an automatic
-help is necessary.
-
-* Road extraction filter. See example :ref:`ExtractRoadExample.cxx`.
-
-* Step by step road extraction. See example :ref:`ExtractRoadByStepsExample.cxx`.
-
 * Cloud Detection. See example :ref:`CloudDetectionExample.cxx`.
 
 Image Simulation
diff --git a/Documentation/Cookbook/rst/C++/WriteAnApplication.rst b/Documentation/Cookbook/rst/C++/WriteAnApplication.rst
index 412a789d70bf9190b51272653ff0458ae1b4e7c4..a1497c8d6e7af1b39a43c28081fb62ab9240ab7c 100644
--- a/Documentation/Cookbook/rst/C++/WriteAnApplication.rst
+++ b/Documentation/Cookbook/rst/C++/WriteAnApplication.rst
@@ -158,9 +158,6 @@ parameters:
 -  ``ParameterType_InputVectorDataList`` : parameter storing a list of
    input vector data.
 
--  ``ParameterType_InputProcessXML`` : parameter storing an input XML
-   file name.
-
 -  ``ParameterType_OutputFilename`` : parameter storing an output file
    name.
 
@@ -169,9 +166,6 @@ parameters:
 -  ``ParameterType_OutputVectorData`` : parameter storing an output
    vector data.
 
--  ``ParameterType_OutputProcessXML`` : parameter storing an output XML
-   file name.
-
 -  ``ParameterType_RAM`` : parameter storing the maximum amount of RAM
    to be used.
 
diff --git a/Documentation/Cookbook/rst/CliInterface.rst b/Documentation/Cookbook/rst/CliInterface.rst
index eebd130fe3f08995be54e36ddf4c822fc247b3de..6717fd10ee5c21f79ec48996d5d2ef3ef0ddd940 100644
--- a/Documentation/Cookbook/rst/CliInterface.rst
+++ b/Documentation/Cookbook/rst/CliInterface.rst
@@ -123,7 +123,6 @@ example based on the OrthoRectification application:
             -opt.rpc                 <int32>          RPC modeling (points per axis)  (optional, off by default, default value is 10)
             -opt.ram                 <int32>          Available RAM (MB)  (optional, off by default, default value is 128)
             -opt.gridspacing         <float>          Resampling grid spacing  (optional, off by default, default value is 4)
-            -inxml                   <string>         Load parameters from XML  (optional, off by default)
             -progress                <boolean>        Report progress
             -help                    <string list>    Display long help (empty list), or help for given parameters keys
 
@@ -145,11 +144,10 @@ Command-line examples are provided in the chapter :ref:`apprefdoc`.
 Load and save parameters to XML
 -------------------------------
 
-Since OTB 3.20, OTB applications parameters can be export/import to/from
-an XML file using inxml/outxml parameters. Those parameters are
-available in all applications.
-
-An example is worth a thousand words
+OTB application parameters can be saved and loaded to
+an XML file using the special ``-inxml`` and ``-outxml`` parameters.
+Those parameters are available in all applications.
+For example:
 
 ::
 
@@ -177,17 +175,6 @@ time
 In this case it will use as mathematical expression “(im1b1 - im2b1)”
 instead of “abs(im1b1 - im2b1)”.
 
-Finally, you can also launch applications directly from the command-line
-launcher executable using the inxml parameter without having to declare
-the application name. Use in this case:
-
-::
-
-    otbApplicationLauncherCommandLine -inxml saved_applications_parameters.xml
-
-It will retrieve the application name and related parameters from the
-input XML file and launch in this case the BandMath applications.
-
 Parallel execution with MPI
 ---------------------------
 
diff --git a/Documentation/Cookbook/rst/Installation.rst b/Documentation/Cookbook/rst/Installation.rst
index 928ba0bcb044a62487cf2f6edf6cebc9f87857d6..899c95310a97cbe6e97765bac8f15030cb17463b 100644
--- a/Documentation/Cookbook/rst/Installation.rst
+++ b/Documentation/Cookbook/rst/Installation.rst
@@ -152,3 +152,15 @@ following repositories with these command-lines:
     http://download.opensuse.org/repositories/home:/tzotsos/openSUSE_Tumbleweed/ tzotsos
 
 and then add the OTB packages as shown above.
+
+
+Archlinux
+~~~~~~~~~~
+
+Package is in AUR (Arch User Repository).
+You will then need to run (if you use yaourt, you could use trizen instead):
+
+::
+
+    yaourt -S orfeo-toolbox
+
diff --git a/Documentation/Cookbook/rst/PythonAPI.rst b/Documentation/Cookbook/rst/PythonAPI.rst
index 4fa3ca24b0ed1317373a4abe6354ecec25d9e091..6f61f1b4084faebb6cc1f94b459c82c34567b148 100644
--- a/Documentation/Cookbook/rst/PythonAPI.rst
+++ b/Documentation/Cookbook/rst/PythonAPI.rst
@@ -218,11 +218,34 @@ implementation does not break it, for instance by using an internal
 writer to write intermediate data. In this case, execution should
 still be correct, but some intermediate data will be read or written.
 
+Load and save parameters to XML
+-------------------------------
+
+As with a the `command line interface` you can save application parameters
+to an xml file:
+
+.. code-block:: python
+
+    # Save application parameters to XML
+    app = otb.Registry.CreateApplication('BandMath')
+    app.SetParameterStringList("il", ["image1.tif", "image2.tif"], True)
+    app.SetParameterString("out", out, True)
+    app.SetParameterString("exp", "cos(im1b1)+im2b1*im1b1", True)
+    app.SaveParametersToXML("parameters.xml")
+
+And load them later for execution:
+
+.. code-block:: python
+
+    # Load application parameters from XML
+    app = otb.Registry.CreateApplication("BandMath")
+    app.LoadParametersFromXML("parameters.xml")
+    app.ExecuteAndWriteOutput()
+
+
 Interactions with OTB pipeline
 ------------------------------
 
-[Since OTB 6.6]
-
 The application framework has been extended in order to provide ways to
 interact with the pipelines inside each application. It applies only to
 applications that use input or output images. Let's check which  
diff --git a/Documentation/Cookbook/rst/recipes/featextract.rst b/Documentation/Cookbook/rst/recipes/featextract.rst
index 64afc6814ead8eed8f69d63f7b41af1aaab1f47e..23267e65276dc6d011b2a4967ff2dc73bf335792 100644
--- a/Documentation/Cookbook/rst/recipes/featextract.rst
+++ b/Documentation/Cookbook/rst/recipes/featextract.rst
@@ -111,37 +111,62 @@ The *RadiometricIndices* application has the following input parameters:
    (default value is 1)
 
 -``-list`` the list of available radiometric indices (default value is
-   Vegetation:NDVI)
+   ``Vegetation:NDVI``)
 
-The available radiometric indices to be listed into -list with their
-relevant channels in brackets are:
+Note that band numbering starts at 1.
 
-::
+The available radiometric indices to be listed into ``-list`` with their
+relevant channels in brackets are:
 
-    Vegetation:NDVI - Normalized difference vegetation index (Red, NIR)
-    Vegetation:TNDVI - Transformed normalized difference vegetation index (Red, NIR)
-    Vegetation:RVI - Ratio vegetation index (Red, NIR)
-    Vegetation:SAVI - Soil adjusted vegetation index (Red, NIR)
-    Vegetation:TSAVI - Transformed soil adjusted vegetation index (Red, NIR)
-    Vegetation:MSAVI - Modified soil adjusted vegetation index (Red, NIR)
-    Vegetation:MSAVI2 - Modified soil adjusted vegetation index 2 (Red, NIR)
-    Vegetation:GEMI - Global environment monitoring index (Red, NIR)
-    Vegetation:IPVI - Infrared percentage vegetation index (Red, NIR)
-
-    Water:NDWI - Normalized difference water index (Gao 1996) (NIR, MIR)
-    Water:NDWI2 - Normalized difference water index (Mc Feeters 1996) (Green, NIR)
-    Water:MNDWI - Modified normalized difference water index (Xu 2006) (Green, MIR)
-    Water:NDPI - Normalized difference pond index (Lacaux et al.) (MIR, Green)
-    Water:NDTI - Normalized difference turbidity index (Lacaux et al.) (Red, Green)
-
-    Soil:RI - Redness index (Red, Green)
-    Soil:CI - Color index (Red, Green)
-    Soil:BI - Brightness index (Red, Green)
-    Soil:BI2 - Brightness index 2 (NIR, Red, Green)
++------------------------------+----------------------------------------------------------+---------------+
+|Index                         |Description                                               |Required bands |
++==============================+==========================================================+===============+
+|Vegetation:NDVI               |Normalized difference vegetation index                    |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:TNDVI              |Transformed normalized difference vegetation index        |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:RVI                |Ratio vegetation index                                    |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:SAVI               |Soil adjusted vegetation index                            |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:TSAVI              |Transformed soil adjusted vegetation index                |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:MSAVI              |Modified soil adjusted vegetation index                   |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:MSAVI2             |Modified soil adjusted vegetation index 2                 |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:GEMI               |Global environment monitoring index                       |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:IPVI               |Infrared percentage vegetation index                      |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation:LAIFromNDVILog     |Leaf Area Index from log NDVI                             |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation::LAIFromReflLinear |Leaf Area Index from reflectances with linear combination |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Vegetation::LAIFromNDVIFormo  |Leaf Area Index from Formosat 2  TOC                      |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Water:NDWI                    |Normalized difference water index (Gao 1996)              |NIR, MIR       |
++------------------------------+----------------------------------------------------------+---------------+
+|Water:NDWI2                   |Normalized difference water index (Mc Feeters 1996)       |Green, NIR     |
++------------------------------+----------------------------------------------------------+---------------+
+|Water:MNDWI                   |Modified normalized difference water index (Xu 2006)      |Green, MIR     |
++------------------------------+----------------------------------------------------------+---------------+
+|Water:NDTI                    |Normalized difference turbidity index (Lacaux et al.)     |Green, Red     |
++------------------------------+----------------------------------------------------------+---------------+
+|Soil:RI                       |Redness index                                             |Green, Red     |
++------------------------------+----------------------------------------------------------+---------------+
+|Soil:CI                       |Color index                                               |Green, Red     |
++------------------------------+----------------------------------------------------------+---------------+
+|Soil:BI                       |Brightness index                                          |Green, Red     |
++------------------------------+----------------------------------------------------------+---------------+
+|Soil:BI2                      |Brightness index 2                                        |Green, Red, NIR|
++------------------------------+----------------------------------------------------------+---------------+
+|BuiltUp:ISU                   |Built Surfaces Index                                      |Red, NIR       |
++------------------------------+----------------------------------------------------------+---------------+
 
 The application can be used as follows, which would produce an output image
-containing 3 bands, respectively with the Vegetation:NDVI, Vegetation:RVI and
-Vegetation:IPVI radiometric indices in this exact order:
+containing 3 bands, respectively with the ``Vegetation:NDVI``, ``Vegetation:RVI`` and
+``Vegetation:IPVI`` radiometric indices in this exact order:
 
 ::
 
@@ -154,7 +179,7 @@ Vegetation:IPVI radiometric indices in this exact order:
                                               Vegetation:IPVI 
 
 or as follows, which would produce a single band output image with the
-Water:NDWI2 radiometric index:
+``Water:NDWI2`` radiometric index:
 
 ::
 
diff --git a/Documentation/Cookbook/rst/recipes/improc.rst b/Documentation/Cookbook/rst/recipes/improc.rst
index 4216062f7ebafc55de4e5ab342b03cb90ffee1a6..72f24b429994e2f58729ff50b2773bb58bdf25b1 100644
--- a/Documentation/Cookbook/rst/recipes/improc.rst
+++ b/Documentation/Cookbook/rst/recipes/improc.rst
@@ -289,128 +289,3 @@ skipped.
 
 There is a cleanup option that can be disabled in order to check intermediate
 outputs of this composite application.
-
-Dempster Shafer based Classifier Fusion
----------------------------------------
-
-This framework is dedicated to perform cartographic validation starting
-from the result of a detection (for example a road extraction), enhance
-the results viability by using a classifier fusion algorithm. Using a
-set of descriptors, the processing chain validates or invalidates the
-input geometrical features.
-
-Fuzzy Model (requisite)
-~~~~~~~~~~~~~~~~~~~~~~~
-
-The *DSFuzzyModelEstimation* application performs the fuzzy model
-estimation (once by use case: descriptor set / Belief support /
-Plausibility support). It has the following input parameters:
-
--  ``-psin`` a vector data of positive samples enriched according to the
-   “Compute Descriptors” part
-
--  ``-nsin`` a vector data of negative samples enriched according to the
-   “Compute Descriptors” part
-
--  ``-belsup`` a support for the Belief computation
-
--  ``-plasup`` a support for the Plausibility computation
-
--  ``-desclist`` an initialization model (xml file) or a descriptor name
-   list (listing the descriptors to be included in the model)
-
-The application can be used like this:
-
-::
-
-    otbcli_DSFuzzyModelEstimation -psin     PosSamples.shp
-                                  -nsin     NegSamples.shp
-                                  -belsup   "ROADSA"
-                                  -plasup   "NONDVI" "ROADSA" "NOBUIL"
-                                  -desclist "NONDVI" "ROADSA" "NOBUIL"
-                                  -out      FuzzyModel.xml
-
-The output file ``FuzzyModel.xml`` contains the optimal model to perform
-information fusion.
-
-First Step: Compute Descriptors
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The first step in the classifier fusion based validation is to compute,
-for each studied polyline, the chosen descriptors. In this context, the
-*ComputePolylineFeatureFromImage* application can be used for a large
-range of descriptors. It has the following inputs:
-
--  ``-in`` an image (of the studied scene) corresponding to the chosen
-   descriptor (NDVI, building Mask…)
-
--  ``-vd`` a vector data containing polyline of interest
-
--  ``-expr`` a formula (“b1 >0.4”, “b1 == 0”) where b1 is the standard
-   name of input image first band
-
--  ``-field`` a field name corresponding to the descriptor codename
-   (NONDVI, ROADSA...)
-
-The output is a vector data containing polylines with a new field
-containing the descriptor value. In order to add the “NONDVI” descriptor
-to an input vector data (“inVD.shp”) corresponding to the percentage of
-pixels along a polyline that verifies the formula “NDVI >0.4”:
-
-::
-
-    otbcli_ComputePolylineFeatureFromImage -in   NDVI.TIF
-                                           -vd  inVD.shp
-                                           -expr  "b1 > 0.4"
-                                           -field "NONDVI"
-                                           -out   VD_NONDVI.shp
-
-``NDVI.TIF`` is the NDVI mono band image of the studied scene. This step
-must be repeated for each chosen descriptor:
-
-::
-
-    otbcli_ComputePolylineFeatureFromImage -in   roadSpectralAngle.TIF
-                                           -vd  VD_NONDVI.shp
-                                           -expr  "b1 > 0.24"
-                                           -field "ROADSA"
-                                           -out   VD_NONDVI_ROADSA.shp
-
-::
-
-    otbcli_ComputePolylineFeatureFromImage -in   Buildings.TIF
-                                           -vd  VD_NONDVI_ROADSA.shp
-                                           -expr  "b1 == 0"
-                                           -field "NOBUILDING"
-                                           -out   VD_NONDVI_ROADSA_NOBUIL.shp
-
-Both ``NDVI.TIF`` and ``roadSpectralAngle.TIF`` can be produced using
-**Monteverdi** feature extraction capabilities, and ``Buildings.TIF``
-can be generated using **Monteverdi** rasterization module. From now on,
-``VD_NONDVI_ROADSA_NOBUIL.shp`` contains three descriptor fields. It
-will be used in the following part.
-
-Second Step: Feature Validation
-~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The final application (*VectorDataDSValidation* ) will validate or
-invalidate the studied samples using `the Dempster-Shafer
-theory <http://en.wikipedia.org/wiki/Dempster%E2%80%93Shafer_theory>`_ 
-. Its inputs are:
-
--  ``-in`` an enriched vector data “VD\_NONDVI\_ROADSA\_NOBUIL.shp”
-
--  ``-belsup`` a support for the Belief computation
-
--  ``-plasup`` a support for the Plausibility computation
-
--  ``-descmod`` a fuzzy model FuzzyModel.xml
-
-The output is a vector data containing only the validated samples.
-
-::
-
-    otbcli_VectorDataDSValidation -in      extractedRoads_enriched.shp
-                                  -descmod FuzzyModel.xml
-                                  -out     validatedSamples.shp
-
diff --git a/Documentation/Cookbook/rst/templates/application.rst b/Documentation/Cookbook/rst/templates/application.rst
index 68db4a8b3cc9c224fcdc107d8c4e3f9f21f97329..bbe15bceff737e5f165a2bdea7d4ea17771fcaab 100644
--- a/Documentation/Cookbook/rst/templates/application.rst
+++ b/Documentation/Cookbook/rst/templates/application.rst
@@ -1,6 +1,9 @@
 .. _{label}:
 
 {heading}
+
+{deprecation_string}
+
 {description}
 
 Description
diff --git a/Examples/Application/ApplicationExample.cxx b/Examples/Application/ApplicationExample.cxx
index 5baa6562e6c04b2d6fe6fdd2f1773413093c771d..b6ba4c772886fb887ee5ff0c0f85b831b1ac8f45 100644
--- a/Examples/Application/ApplicationExample.cxx
+++ b/Examples/Application/ApplicationExample.cxx
@@ -68,7 +68,6 @@ private:
     // \begin{description}
     // \item[\code{SetName()}] Name of the application.
     // \item[\code{SetDescription()}] Set the short description of the class.
-    // \item[\code{SetDocName()}] Set long name of the application (that can be displayed \dots).
     // \item[\code{SetDocLongDescription()}] This methods is used to describe the class.
     // \item[\code{SetDocLimitations()}] Set known limitations (threading, invalid pixel type \dots) or bugs.
     // \item[\code{SetDocAuthors()}] Set the application Authors. Author List. Format : "John Doe, Winnie the Pooh" \dots
@@ -81,7 +80,6 @@ private:
         "Pay attention, it includes Latex snippets in order to generate "
         "software guide documentation");
 
-    SetDocName("Example");
     SetDocLongDescription(
         "The purpose of this application is "
         "to present parameters types,"
diff --git a/Examples/BasicFilters/BandMathFilterExample.cxx b/Examples/BasicFilters/BandMathFilterExample.cxx
index 7404742ba2b75dd6eee7323870c5d7be7cdfd112..98d13618c6bac6176ee144408c22d09c60876769 100644
--- a/Examples/BasicFilters/BandMathFilterExample.cxx
+++ b/Examples/BasicFilters/BandMathFilterExample.cxx
@@ -22,22 +22,6 @@
 ./BandMathFilterExample Input/qb_RoadExtract.tif Output/RoadExtractBandMath.tif Output/qb_BandMath-pretty.jpg
 */
 
-
-// This filter is based on the mathematical parser library muParser.
-// The built in functions and operators list is available at:
-// http://muparser.sourceforge.net/mup_features.html.
-//
-// In order to use this filter, at least one input image should be
-// set. An associated variable name can be specified or not by using
-// the corresponding SetNthInput method. For the nth input image, if
-// no associated variable name has been specified, a default variable
-// name is given by concatenating the letter "b" (for band) and the
-// corresponding input index.
-//
-// The next step is to set the expression according to the variable
-// names. For example, in the default case with three input images the
-// following expression is valid: ``(b1+b2)*b3``.
-
 #include "itkMacro.h"
 #include <iostream>
 
@@ -65,11 +49,10 @@ int main(int argc, char* argv[])
     return EXIT_FAILURE;
   }
 
-  // We start by the typedef needed for reading and
+  // We start by the typedefs needed for reading and
   // writing the images. The BandMathImageFilter class
   // works with Image as input, so we need to define additional
   // filters to extract each layer of the multispectral image.
-
   typedef double                                                           PixelType;
   typedef otb::VectorImage<PixelType, 2>                                   InputImageType;
   typedef otb::Image<PixelType, 2>                                         OutputImageType;
@@ -78,13 +61,12 @@ int main(int argc, char* argv[])
   typedef otb::ImageFileReader<InputImageType>                             ReaderType;
   typedef otb::ImageFileWriter<OutputImageType>                            WriterType;
 
-  // We can now define the type for the filter:
+  // We can now define the type for the filter
   typedef otb::BandMathImageFilter<OutputImageType> FilterType;
 
-  // We instantiate the filter, the reader, and the writer:
+  // We instantiate the filter, the reader, and the writer
   ReaderType::Pointer reader = ReaderType::New();
   WriterType::Pointer writer = WriterType::New();
-
   FilterType::Pointer filter = FilterType::New();
 
   writer->SetInput(filter->GetOutput());
@@ -93,9 +75,9 @@ int main(int argc, char* argv[])
 
   reader->UpdateOutputInformation();
 
-  // We now need to extract each band from the input \doxygen{otb}{VectorImage},
-  // it illustrates the use of the \doxygen{otb}{VectorImageToImageList}.
-  // Each extracted layer is an input to the \doxygen{otb}{BandMathImageFilter}:
+  // We now need to extract each band from the input VectorImage,
+  // it illustrates the use of the VectorImageToImageList.
+  // Each extracted layer is an input to the BandMathImageFilter
   VectorImageToImageListType::Pointer imageList = VectorImageToImageListType::New();
   imageList->SetInput(reader->GetOutput());
 
@@ -111,8 +93,8 @@ int main(int argc, char* argv[])
   // Now we can define the mathematical expression to perform on the layers (b1, b2, b3, b4).
   // The filter takes advantage of the parsing capabilities of the muParser library and
   // allows setting the expression as on a digital calculator.
-  //
-  // The expression below returns 255 if the ratio $(NIR-RED)/(NIR+RED)$ is greater than 0.4 and 0 if not.
+
+  // The expression below returns 255 if the ratio (NIR-RED)/(NIR+RED) is greater than 0.4 and 0 if not.
   filter->SetExpression("if((b4-b3)/(b4+b3) > 0.4, 255, 0)");
 
 #ifdef OTB_MUPARSER_HAS_CXX_LOGICAL_OPERATORS
@@ -125,19 +107,7 @@ int main(int argc, char* argv[])
   writer->Update();
 
   // The muParser library also provides the possibility to extend existing built-in functions. For example,
-  // you can use the OTB expression "ndvi(b3, b4)" with the filter. In this instance, the mathematical expression would be
-  // \textit{if($ndvi(b3, b4)>0.4$, 255, 0)}, which would return the same result.
-
-  // Figure~\ref{fig:BandMathImageFilter} shows the result of the threshold applied to the NDVI index
-  // of a Quickbird image.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.45\textwidth]{qb_ExtractRoad_pretty.eps}
-  // \includegraphics[width=0.45\textwidth]{qb_BandMath-pretty.eps}
-  // \itkcaption[Band Math]{From left to right:
-  // Original image, thresholded NDVI index.}
-  // \label{fig:BandMathImageFilter}
-  // \end{figure}
+  // you can use the OTB expression "ndvi(b3, b4)" with the filter. In this instance, the mathematical expression would be "if(ndvi(b3, b4)>0.4, 255, 0)", which would return the same result.
 
   typedef otb::Image<unsigned char, 2>                                 OutputPrettyImageType;
   typedef otb::ImageFileWriter<OutputPrettyImageType>                  PrettyImageFileWriterType;
@@ -151,6 +121,4 @@ int main(int argc, char* argv[])
   prettyWriter->SetFileName(argv[3]);
 
   prettyWriter->Update();
-
-  return EXIT_SUCCESS;
 }
diff --git a/Examples/BasicFilters/BandMathFilterExample.rst b/Examples/BasicFilters/BandMathFilterExample.rst
new file mode 100644
index 0000000000000000000000000000000000000000..47da3da8989b1e399f5a20222c1529de6e44d757
--- /dev/null
+++ b/Examples/BasicFilters/BandMathFilterExample.rst
@@ -0,0 +1,27 @@
+The :doxygen:`BandMathImageFilter` is based on the mathematical parser library muParser.
+The built in functions and operators list is available at:
+http://muparser.sourceforge.net/mup_features.html.
+
+In order to use this filter, at least one input image should be
+set. An associated variable name can be specified or not by using
+the corresponding ``SetNthInput`` method. For the nth input image, if
+no associated variable name has been specified, a default variable
+name is given by concatenating the letter "b" (for band) and the
+corresponding input index.
+
+The next step is to set the expression according to the variable
+names. For example, in the default case with three input images the
+following expression is valid: ``(b1+b2)*b3``.
+
+.. |image1| image:: /Input/qb_ExtractRoad_pretty.png
+
+.. |image2| image:: /Output/qb_BandMath-pretty.jpg
+
+.. _Figure1:
+
++--------------------------+-------------------------+
+|        |image1|          |         |image2|        |
++--------------------------+-------------------------+
+
+    NDVI of a Quickbird image computed with BandMathImageFilter
+
diff --git a/Examples/BasicFilters/DEMToRainbowExample.cxx b/Examples/BasicFilters/DEMToRainbowExample.cxx
index f1cf3e83a3ca04a550f95b21bff3dbcbb325a763..fcceeae63cc27416400a727f6397176b82708a1c 100644
--- a/Examples/BasicFilters/DEMToRainbowExample.cxx
+++ b/Examples/BasicFilters/DEMToRainbowExample.cxx
@@ -33,19 +33,6 @@
 ./DEMToRainbowExample Output/DEMToReliefImageGenerator.png 6.5 45.5 500 500 0.002 -0.002 Input/DEM_srtm relief
 */
 
-
-// In some situation, it is desirable to represent a gray scale image in color for easier
-// interpretation. This is particularly the case if pixel values in the image are used
-// to represent some data such as elevation, deformation map,
-// interferogram. In this case, it is important to ensure that similar
-// values will get similar colors. You can notice how this requirement
-// differs from the previous case.
-//
-// The following example illustrates the use of the \doxygen{otb}{DEMToImageGenerator} class
-// combined with the \doxygen{otb}{ScalarToRainbowRGBPixelFunctor}. You can refer to the
-// source code or to section \ref{sec:ReadDEM} for the DEM conversion to image,
-// we will focus on the color conversion part here.
-
 #include "otbImageFileReader.h"
 #include "otbImageFileWriter.h"
 
@@ -103,9 +90,9 @@ int main(int argc, char* argv[])
 
   demToImage->SetOutputSpacing(spacing);
 
-  // As in the previous example, the \doxygen{itk}{ScalarToRGBColormapImageFilter} is
+  // The ScalarToRGBColormapImageFilter is
   // the filter in charge of calling the functor we specify to do the work for
-  // each pixel. Here it is the \doxygen{otb}{ScalarToRainbowRGBPixelFunctor}.
+  // each pixel. Here it is the ScalarToRainbowRGBPixelFunctor.
 
   typedef itk::ScalarToRGBColormapImageFilter<ImageType, RGBImageType> ColorMapFilterType;
   ColorMapFilterType::Pointer                                          colormapper = ColorMapFilterType::New();
@@ -146,34 +133,5 @@ int main(int argc, char* argv[])
 
   writer->SetInput(colormapper->GetOutput());
 
-  try
-  {
-    writer->Update();
-  }
-  catch (itk::ExceptionObject& excep)
-  {
-    std::cerr << "Exception caught !" << std::endl;
-    std::cerr << excep << std::endl;
-  }
-  catch (...)
-  {
-    std::cout << "Unknown exception !" << std::endl;
-    return EXIT_FAILURE;
-  }
-
-  // Figure~\ref{fig:RAINBOW_FILTER} shows the effect of applying the filter to
-  // a gray scale image.
-  //
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{pretty_DEMToImageGenerator.eps}
-  // \includegraphics[width=0.44\textwidth]{DEMToRainbowImageGenerator.eps}
-  // \includegraphics[width=0.44\textwidth]{DEMToHotImageGenerator.eps}
-  // \includegraphics[width=0.44\textwidth]{DEMToReliefImageGenerator.eps}
-  // \itkcaption[Grayscale to color]{The gray level DEM extracted from SRTM
-  // data (top-left) and the same area represented in color.}
-  // \label{fig:RAINBOW_FILTER}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
+  writer->Update();
 }
diff --git a/Examples/BasicFilters/DEMToRainbowExample.rst b/Examples/BasicFilters/DEMToRainbowExample.rst
new file mode 100644
index 0000000000000000000000000000000000000000..a1164c7cdf091ba8106c4c6161ce60a1c94d9a28
--- /dev/null
+++ b/Examples/BasicFilters/DEMToRainbowExample.rst
@@ -0,0 +1,23 @@
+In some situation, it is desirable to represent a gray scale image in color for easier
+interpretation. This is particularly the case if pixel values in the image are used
+to represent some data such as elevation, deformation map,
+interferogram. In this case, it is important to ensure that similar
+values will get similar colors. You can notice how this requirement
+differs from the previous case.
+
+The following example illustrates the use of the :doxygen:`DEMToImageGenerator`
+class combined with the `ScalarToRainbowRGBPixelFunctor`. You can refer to the
+source code for the DEM conversion to image, we will focus on the color
+conversion part here.
+
+.. |image1| image:: /Output/DEMToRainbowImageGenerator.png
+
+.. |image2| image:: /Output/DEMToHotImageGenerator.png
+
+.. |image3| image:: /Output/DEMToReliefImageGenerator.png
+
+.. _Figure1:
+
++--------------------------+-------------------------+-------------------------+
+|        |image1|          |         |image2|        |         |image3|        |
++--------------------------+-------------------------+-------------------------+
diff --git a/Examples/BasicFilters/FrostImageFilter.cxx b/Examples/BasicFilters/FrostImageFilter.cxx
index 13d12674854981e964a32c70fe8d60756cbb9681..913ac71a271f1fc1abb1b45243aacf1999da22e3 100644
--- a/Examples/BasicFilters/FrostImageFilter.cxx
+++ b/Examples/BasicFilters/FrostImageFilter.cxx
@@ -23,34 +23,6 @@
 ./FrostImageFilter Input/GomaSmall.png Output/GomaSmallFrostFiltered.png 5 0.1
 */
 
-
-// This example illustrates the use of the \doxygen{otb}{FrostImageFilter}.
-// This filter belongs to the family of the edge-preserving smoothing
-// filters which are usually used for speckle reduction in radar
-// images.
-//
-// This filter uses a negative exponential convolution kernel.
-// The output of the filter for pixel p is:
-//      $ \hat I_{s}=\sum_{p\in\eta_{p}} m_{p}I_{p} $
-//
-// where :   $ m_{p}=\frac{KC_{s}^{2}\exp(-KC_{s}^{2}d_{s, p})}{\sum_{p\in\eta_{p}} KC_{s}^{2}\exp(-KC_{s}^{2}d_{s, p})} $
-//    and  $ d_{s, p}=\sqrt{(i-i_{p})^2+(j-j_{p})^2} $
-//
-// \begin{itemize}
-// \item $ K $     : the decrease coefficient
-// \item $ (i, j)$ : the coordinates of the pixel inside the region
-// defined by $ \eta_{s} $
-// \item $ (i_{p}, j_{p})$ : the coordinates of the pixels belonging to $ \eta_{p} \subset \eta_{s} $
-// \item $ C_{s}$ : the variation coefficient computed over $ \eta_{p}$
-// \end{itemize}
-//
-//
-//
-// Most of this example is similar to the previous one and only the differences
-// will be highlighted.
-//
-// First, we need to include the header:
-
 #include "otbFrostImageFilter.h"
 
 #include "otbImage.h"
@@ -68,16 +40,12 @@ int main(int argc, char* argv[])
   }
 
   typedef unsigned char PixelType;
-
   typedef otb::Image<PixelType, 2> InputImageType;
   typedef otb::Image<PixelType, 2> OutputImageType;
 
-  //  The filter can be instantiated using the image types defined previously.
-
+  // The filter can be instantiated using the image types defined previously.
   typedef otb::FrostImageFilter<InputImageType, OutputImageType> FilterType;
-
   typedef otb::ImageFileReader<InputImageType> ReaderType;
-
   typedef otb::ImageFileWriter<OutputImageType> WriterType;
 
   ReaderType::Pointer reader = ReaderType::New();
@@ -87,22 +55,12 @@ int main(int argc, char* argv[])
   writer->SetInput(filter->GetOutput());
   reader->SetFileName(argv[1]);
 
-  //  The image obtained with the reader is passed as input to the
-  //  \doxygen{otb}{FrostImageFilter}.
-  //
-  //  \index{otb::FrostImageFilter!SetInput()}
-  //  \index{otb::FileImageReader!GetOutput()}
-
+  // The image obtained with the reader is passed as input to the FrostImageFilter
   filter->SetInput(reader->GetOutput());
 
-  //  The method \code{SetRadius()} defines the size of the window to
-  //  be used for the computation of the local statistics. The method
-  //  \code{SetDeramp()} sets the $K$ coefficient.
-  //
-  //  \index{otb::FrostImageFilter!SetRadius()}
-  //  \index{otb::FrostImageFilter!SetDeramp()}
-  //  \index{SetDeramp()!otb::FrostImageFilter}
-
+  // The method SetRadius() defines the size of the window to
+  // be used for the computation of the local statistics. The method
+  // SetDeramp() sets the K coefficient.
   FilterType::SizeType Radius;
   Radius[0] = atoi(argv[3]);
   Radius[1] = atoi(argv[3]);
@@ -112,22 +70,4 @@ int main(int argc, char* argv[])
 
   writer->SetFileName(argv[2]);
   writer->Update();
-
-  // Figure~\ref{fig:FROST_FILTER} shows the result of applying the Frost
-  // filter to a SAR image.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{GomaSmall.eps}
-  // \includegraphics[width=0.44\textwidth]{GomaSmallFrostFiltered.eps}
-  // \itkcaption[Frost Filter Application]{Result of applying the
-  // \doxygen{otb}{FrostImageFilter} to a SAR image.}
-  // \label{fig:FROST_FILTER}
-  // \end{figure}
-  //
-  //  \relatedClasses
-  //  \begin{itemize}
-  //  \item \doxygen{otb}{LeeImageFilter}
-  //  \end{itemize}
-
-  return EXIT_SUCCESS;
 }
diff --git a/Examples/BasicFilters/FrostImageFilter.rst b/Examples/BasicFilters/FrostImageFilter.rst
new file mode 100644
index 0000000000000000000000000000000000000000..2951e334e7a6c3c7d087e6ae37ad8c05d8c880bc
--- /dev/null
+++ b/Examples/BasicFilters/FrostImageFilter.rst
@@ -0,0 +1,34 @@
+This example illustrates the use of the :doxygen:`FrostImageFilter`.
+This filter belongs to the family of the edge-preserving smoothing
+filters which are usually used for speckle reduction in radar
+images.
+
+This filter uses a negative exponential convolution kernel.
+The output of the filter for pixel p is:
+
+.. math::
+
+   \hat I_{s}=\sum_{p\in\eta_{p}} m_{p}I_{p}
+
+   m_{p}=\frac{KC_{s}^{2}\exp(-KC_{s}^{2}d_{s, p})}{\sum_{p\in\eta_{p}} KC_{s}^{2}\exp(-KC_{s}^{2}d_{s, p})}
+
+   d_{s, p}=\sqrt{(i-i_{p})^2+(j-j_{p})^2}
+
+where:
+
+* :math:`K`: the decrease coefficient
+* :math:`(i, j)`: the coordinates of the pixel inside the region defined by :math:`\eta_{s}`
+* :math:`(i_{p}, j_{p})`: the coordinates of the pixels belonging to :math:`\eta_{p} \subset \eta_{s}`
+* :math:`C_{s}`: the variation coefficient computed over :math:`\eta_{p}`
+
+.. |image1| image:: /Input/GomaSmall.png
+
+.. |image2| image:: /Output/GomaSmallFrostFiltered.png
+
+.. _Figure1:
+
++--------------------------+-------------------------+
+|        |image1|          |         |image2|        |
++--------------------------+-------------------------+
+
+    Result of applying the FrostImageFilter to a SAR image.
diff --git a/Examples/BasicFilters/HillShadingExample.cxx b/Examples/BasicFilters/HillShadingExample.cxx
index 1d58ca2f68482dc62bdfe16e8fca5e4a9ce76668..a281e9aef85d86116d5ca7c35b719cbd832e9e19 100644
--- a/Examples/BasicFilters/HillShadingExample.cxx
+++ b/Examples/BasicFilters/HillShadingExample.cxx
@@ -24,18 +24,6 @@
 */
 
 
-// Visualization of digital elevation models (DEM) is often more intuitive by simulating a
-// lighting source and generating the corresponding shadows. This principle is called
-// hill shading.
-//
-// Using a simple functor \doxygen{otb}{HillShadingFunctor} and the DEM image generated
-// using the \doxygen{otb}{DEMToImageGenerator} (refer to \ref{sec:ReadDEM}), you can easily
-// obtain a representation of the DEM. Better yet, using the
-// \doxygen{otb}{ScalarToRainbowRGBPixelFunctor}, combined with the
-// \doxygen{otb}{ReliefColormapFunctor} you can easily generate the classic elevation maps.
-//
-// This example will focus on the shading itself.
-
 #include "otbImageFileReader.h"
 #include "otbImageFileWriter.h"
 
@@ -50,7 +38,6 @@
 
 int main(int argc, char* argv[])
 {
-
   if (argc < 10)
   {
     std::cout << argv[0] << " <output_filename> <output_color_filename> "
@@ -162,21 +149,8 @@ int main(int argc, char* argv[])
 
   writer2->SetInput(multiply->GetOutput());
 
-  try
-  {
-    writer->Update();
-    writer2->Update();
-  }
-  catch (itk::ExceptionObject& excep)
-  {
-    std::cerr << "Exception caught !" << std::endl;
-    std::cerr << excep << std::endl;
-  }
-  catch (...)
-  {
-    std::cout << "Unknown exception !" << std::endl;
-    return EXIT_FAILURE;
-  }
+  writer->Update();
+  writer2->Update();
 
   otb::WorldFile::Pointer worldFile = otb::WorldFile::New();
   worldFile->SetLonOrigin(origin[0]);
@@ -188,17 +162,4 @@ int main(int argc, char* argv[])
   worldFile->Update();
   worldFile->SetImageFilename(argv[2]);
   worldFile->Update();
-
-  // Figure~\ref{fig:HILL_SHADING} shows the hill shading result from SRTM data.
-  //
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{HillShadingExample.eps}
-  // \includegraphics[width=0.44\textwidth]{HillShadingColorExample.eps}
-  // \itkcaption[Hill shading]{Hill shading obtained from SRTM data (left) and combined with
-  // the color representation (right)}
-  // \label{fig:HILL_SHADING}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
 }
diff --git a/Examples/BasicFilters/HillShadingExample.rst b/Examples/BasicFilters/HillShadingExample.rst
new file mode 100644
index 0000000000000000000000000000000000000000..98e95d368c9306e06501e696483d743a41c01700
--- /dev/null
+++ b/Examples/BasicFilters/HillShadingExample.rst
@@ -0,0 +1,23 @@
+Visualization of digital elevation models (DEM) is often more intuitive by
+simulating a lighting source and generating the corresponding shadows. This
+principle is called hill shading.
+
+Using :doxygen:`HillShadingFilter` and the DEM image generated
+using the :doxygen:`DEMToImageGenerator`, you can easily obtain a representation
+of the DEM. Better yet, using the :doxygen-itk:`ScalarToRGBColormapImageFilter`
+combined with the ``ReliefColormapFunctor`` you can easily generate the
+classic elevation maps.
+
+This example will focus on the shading itself.
+
+.. |image1| image:: /Output/HillShadingExample.png
+
+.. |image2| image:: /Output/HillShadingColorExample.png
+
+.. _Figure1:
+
++--------------------------+-------------------------+
+|        |image1|          |         |image2|        |
++--------------------------+-------------------------+
+
+    Hill shading obtained from SRTM data (left) and combined with the color representation (right)
diff --git a/Examples/BasicFilters/IndexedToRGBExample.cxx b/Examples/BasicFilters/IndexedToRGBExample.cxx
index adba63456d9ca821727c58f18b15b81477c563f0..d7a8226949d33aa41c6e1a43f8c0ed00dc8f453b 100644
--- a/Examples/BasicFilters/IndexedToRGBExample.cxx
+++ b/Examples/BasicFilters/IndexedToRGBExample.cxx
@@ -24,25 +24,11 @@
 */
 
 
-//  Some algorithms produce an indexed image as output. In such images,
-// each pixel is given a value according to the region number it belongs to.
-// This value starting at 0 or 1 is usually an integer value.
-// Often, such images are produced by segmentation or classification algorithms.
-//
-// If such regions are easy to manipulate -- it is easier and faster to compare two integers
-// than a RGB value -- it is different when it comes to displaying the results.
-//
-// Here we present a convient way to convert such indexed image to a color image. In
-// such conversion, it is important to ensure that neighborhood region, which are
-// likely to have consecutive number have easily dicernable colors. This is done
-// randomly using a hash function by the \doxygen{itk}{ScalarToRGBPixelFunctor}.
-
 #include "otbImage.h"
 #include "otbImageFileReader.h"
 #include "otbImageFileWriter.h"
 #include "itkUnaryFunctorImageFilter.h"
 #include "itkScalarToRGBPixelFunctor.h"
-
 #include "itkRescaleIntensityImageFilter.h"
 
 int main(int argc, char* argv[])
@@ -65,10 +51,8 @@ int main(int argc, char* argv[])
 
   reader->SetFileName(inputFilename);
 
-  //  The \doxygen{itk}{UnaryFunctorImageFilter} is the filter in charge of
-  // calling the functor we specify to do the work for each pixel. Here it is the
-  // \doxygen{itk}{ScalarToRGBPixelFunctor}.
-
+  // The UnaryFunctorImageFilter is the filter in charge of calling the functor
+  // we specify to do the work for each pixel. Here it is the ScalarToRGBPixelFunctor
   typedef itk::Functor::ScalarToRGBPixelFunctor<unsigned long>                       ColorMapFunctorType;
   typedef itk::UnaryFunctorImageFilter<ImageType, RGBImageType, ColorMapFunctorType> ColorMapFilterType;
   ColorMapFilterType::Pointer                                                        colormapper = ColorMapFilterType::New();
@@ -93,17 +77,4 @@ int main(int argc, char* argv[])
   writer2->SetFileName(outputScaledFilename);
   writer2->SetInput(rescaler->GetOutput());
   writer2->Update();
-
-  // Figure~\ref{fig:INDEXTORGB_FILTER} shows the result of the conversion
-  // from an indexed image to a color image.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{buildingExtractionIndexed_scaled.eps}
-  // \includegraphics[width=0.44\textwidth]{buildingExtractionRGB.eps}
-  // \itkcaption[Scaling images]{The original indexed image (left) and the
-  // conversion to color image.}
-  // \label{fig:INDEXTORGB_FILTER}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
 }
diff --git a/Examples/BasicFilters/IndexedToRGBExample.rst b/Examples/BasicFilters/IndexedToRGBExample.rst
new file mode 100644
index 0000000000000000000000000000000000000000..b9c02e70cc8661bed202df3aecf4e2bb90196459
--- /dev/null
+++ b/Examples/BasicFilters/IndexedToRGBExample.rst
@@ -0,0 +1,24 @@
+Some algorithms produce an indexed image as output. In such images,
+each pixel is given a value according to the region number it belongs to.
+This value starting at 0 or 1 is usually an integer value.
+Often, such images are produced by segmentation or classification algorithms.
+
+If such regions are easy to manipulate -- it is easier and faster to compare two integers
+than a RGB value -- it is different when it comes to displaying the results.
+
+Here we present a convient way to convert such indexed image to a color image. In
+such conversion, it is important to ensure that neighboring regions, which are
+likely to have consecutive number have easily dicernable colors. This is done
+randomly using a hash function by ``ScalarToRGBPixelFunctor``.
+
+.. |image1| image:: /Output/buildingExtractionIndexed_scaled.png
+
+.. |image2| image:: /Output/buildingExtractionRGB.png
+
+.. _Figure1:
+
++--------------------------+-------------------------+
+|        |image1|          |         |image2|        |
++--------------------------+-------------------------+
+
+    The original indexed image (left) and the conversion to color image.
diff --git a/Examples/BasicFilters/LeeImageFilter.cxx b/Examples/BasicFilters/LeeImageFilter.cxx
index fee4c62c8772beb4c285aa855faaca4dcbc88579..d8c7aa947db0bbde16790f0024a444c1deb3c40c 100644
--- a/Examples/BasicFilters/LeeImageFilter.cxx
+++ b/Examples/BasicFilters/LeeImageFilter.cxx
@@ -47,16 +47,16 @@ int main(int argc, char* argv[])
   // The filter can be instantiated using the image types defined above.
   typedef otb::LeeImageFilter<InputImageType, OutputImageType> FilterType;
 
-  //  An ImageFileReader class is also instantiated in order to read
-  //  image data from a file.
+  // An ImageFileReader class is also instantiated in order to read
+  // image data from a file.
   typedef otb::ImageFileReader<InputImageType> ReaderType;
 
-  // An \doxygen{otb}{ImageFileWriter} is instantiated in order to write the
+  // An ImageFileWriter is instantiated in order to write the
   // output image to a file.
   typedef otb::ImageFileWriter<OutputImageType> WriterType;
 
-  //  Both the filter and the reader are created by invoking their \code{New()}
-  //  methods and assigning the result to SmartPointers.
+  // Both the filter and the reader are created by invoking their New()
+  // methods and assigning the result to SmartPointers.
   ReaderType::Pointer reader = ReaderType::New();
   FilterType::Pointer filter = FilterType::New();
 
@@ -64,8 +64,8 @@ int main(int argc, char* argv[])
   writer->SetInput(filter->GetOutput());
   reader->SetFileName(argv[1]);
 
-  //  The image obtained with the reader is passed as input to the
-  //  LeeImageFilter.
+  // The image obtained with the reader is passed as input to the
+  // LeeImageFilter.
   filter->SetInput(reader->GetOutput());
 
   // The method SetRadius() defines the size of the window to
diff --git a/Examples/BasicFilters/LeeImageFilter.rst b/Examples/BasicFilters/LeeImageFilter.rst
index bb34942a9ec560a722e01b71309dc570862d30b1..612bd8eb9ea84d5ced38c4dc92151aa77815c598 100644
--- a/Examples/BasicFilters/LeeImageFilter.rst
+++ b/Examples/BasicFilters/LeeImageFilter.rst
@@ -1,12 +1,19 @@
-This example illustrates the use of the LeeImageFilter.
+This example illustrates the use of the :doxygen:`LeeImageFilter`.
 This filter belongs to the family of the edge-preserving smoothing
 filters which are usually used for speckle reduction in radar
 images. The LeeFilter aplies a linear regression
 which minimizes the mean-square error in the frame of a
 multiplicative speckle model.
 
-.. figure:: /Input/GomaSmall.png
+.. |image1| image:: /Input/GomaSmall.png
 
-.. figure:: /Output/GomaSmallLeeFiltered.png
+.. |image2| image:: /Output/GomaSmallLeeFiltered.png
+
+.. _Figure1:
+
++--------------------------+-------------------------+
+|        |image1|          |         |image2|        |
++--------------------------+-------------------------+
 
     Result of applying the Lee filter to a SAR image.
+
diff --git a/Examples/BasicFilters/MeanShiftSegmentationFilterExample.cxx b/Examples/BasicFilters/MeanShiftSegmentationFilterExample.cxx
index f3992ead4089875bee8132029e4278585e214d66..9e665a35f21b216bc11ea6f433a1534233ee0f5e 100644
--- a/Examples/BasicFilters/MeanShiftSegmentationFilterExample.cxx
+++ b/Examples/BasicFilters/MeanShiftSegmentationFilterExample.cxx
@@ -32,29 +32,15 @@
                                      0.1
 */
 
-
-//  This example demonstrates the use of the
-//  \doxygen{otb}{MeanShiftSegmentationFilter} class which implements
-//  filtering and clustering using the mean shift algorithm
-//  \cite{Comaniciu2002}. For a given pixel, the mean shift will
-//  build a set of neighboring pixels within a given spatial radius
-//  and a color range. The spatial and color center of this set is
-//  then computed and the algorithm iterates with this new spatial and
-//  color center. The Mean Shift can be used for edge-preserving
-//  smoothing, or for clustering.
-
 #include "otbVectorImage.h"
 #include "otbImageFileReader.h"
 #include "otbImageFileWriter.h"
 #include "otbImageFileWriter.h"
 #include "otbPrintableImageFilter.h"
-
 #include "itkScalarToRGBPixelFunctor.h"
 #include "itkUnaryFunctorImageFilter.h"
-
-//  We start by including the needed header file.
-
 #include "otbMeanShiftSegmentationFilter.h"
+
 int main(int argc, char* argv[])
 {
   if (argc != 11)
@@ -75,9 +61,6 @@ int main(int argc, char* argv[])
   const unsigned int maxiter         = atoi(argv[9]);
   const double       thres           = atof(argv[10]);
 
-  //  We start by the classical \code{typedef}s needed for reading and
-  //  writing the images.
-
   const unsigned int Dimension = 2;
 
   typedef float                        PixelType;
@@ -94,36 +77,39 @@ int main(int argc, char* argv[])
 
   typedef otb::MeanShiftSegmentationFilter<ImageType, LabelImageType, ImageType> FilterType;
 
-  //  We instantiate the filter, the reader, and 2 writers (for the
-  //  labeled and clustered images).
+  // We instantiate the filter, the reader, and 2 writers (for the
+  // labeled and clustered images).
 
   FilterType::Pointer      filter  = FilterType::New();
   ReaderType::Pointer      reader  = ReaderType::New();
   WriterType::Pointer      writer1 = WriterType::New();
   LabelWriterType::Pointer writer2 = LabelWriterType::New();
 
-  //  We set the file names for the reader and the writers:
-
+  // We set the file names for the reader and the writers:
   reader->SetFileName(infname);
   writer1->SetFileName(clusteredfname);
   writer2->SetFileName(labeledfname);
 
-  //  We can now set the parameters for the filter. There are 3 main
-  //  parameters: the spatial radius used for defining the neighborhood,
-  //  the range radius used for defining the interval in the color space
-  //  and the minimum size for the regions to be kept after clustering.
+  // We can now set the parameters for the filter. There are 3 main
+  // parameters: the spatial radius used for defining the neighborhood,
+  // the range radius used for defining the interval in the color space
+  // and the minimum size for the regions to be kept after clustering.
 
   filter->SetSpatialBandwidth(spatialRadius);
   filter->SetRangeBandwidth(rangeRadius);
   filter->SetMinRegionSize(minRegionSize);
-  // Two another parameters can be set  : the maximum iteration number, which defines maximum number of iteration until convergence.
-  //  Algorithm iterative scheme will stop if convergence hasn't been reached after the maximum number of iterations.
-  //  Threshold parameter defines mean-shift vector convergence value. Algorithm iterative scheme will stop if mean-shift vector is below this threshold or if
-  //  iteration number reached maximum number of iterations.
+
+  // Two another parameters can be set: the maximum iteration number, which
+  // defines maximum number of iteration until convergence.  Algorithm
+  // iterative scheme will stop if convergence hasn't been reached after the
+  // maximum number of iterations.  Threshold parameter defines mean-shift
+  // vector convergence value. Algorithm iterative scheme will stop if
+  // mean-shift vector is below this threshold or if iteration number reached
+  // maximum number of iterations.
 
   filter->SetMaxIterationNumber(maxiter);
   filter->SetThreshold(thres);
-  //  We can now plug the pipeline and run it.
+  // We can now plug the pipeline and run it.
 
   filter->SetInput(reader->GetOutput());
   writer1->SetInput(filter->GetClusteredOutput());
@@ -132,19 +118,6 @@ int main(int argc, char* argv[])
   writer1->Update();
   writer2->Update();
 
-  // Figure~\ref{fig:MeanShiftSegmentationFilter} shows the result of applying the mean shift
-  // to a Quickbird image.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.40\textwidth]{ROI_QB_MUL_1.eps}
-  // \includegraphics[width=0.40\textwidth]{MSClusteredOutput-pretty.eps}
-  // \includegraphics[width=0.40\textwidth]{MSLabeledOutput-pretty.eps}
-  // \itkcaption[Mean Shift]{From top to bottom and left to right:
-  // Original image, image filtered by
-  // mean shift after clustering , and labeled image.}
-  // \label{fig:MeanShiftSegmentationFilter}
-  // \end{figure}
-
   typedef otb::PrintableImageFilter<ImageType> PrintableFilterType;
   PrintableFilterType::Pointer                 printableImageFilter = PrintableFilterType::New();
 
@@ -176,6 +149,4 @@ int main(int argc, char* argv[])
   labelRGBWriter->SetFileName(labeledpretty);
   labelRGBWriter->SetInput(labelToRGB->GetOutput());
   labelRGBWriter->Update();
-
-  return EXIT_SUCCESS;
 }
diff --git a/Examples/BasicFilters/MeanShiftSegmentationFilterExample.rst b/Examples/BasicFilters/MeanShiftSegmentationFilterExample.rst
new file mode 100644
index 0000000000000000000000000000000000000000..48e8fc09402b1907bc67ae3c8099dbbb2170cc9c
--- /dev/null
+++ b/Examples/BasicFilters/MeanShiftSegmentationFilterExample.rst
@@ -0,0 +1,21 @@
+This example demonstrates the use of the :doxygen:`MeanShiftSegmentationFilter`
+class which implements filtering and clustering using the mean shift algorithm.
+For a given pixel, the mean shift will build a set of neighboring pixels within
+a given spatial radius and a color range. The spatial and color center of this
+set is then computed and the algorithm iterates with this new spatial and color
+center. The Mean Shift can be used for edge-preserving smoothing, or for
+clustering.
+
+.. |image1| image:: /Input/ROI_QB_MUL_1.png
+
+.. |image2| image:: /Output/MSClusteredOutput-pretty.png
+
+.. |image3| image:: /Output/MSLabeledOutput-pretty.png
+
+.. _Figure1:
+
++--------------------------+-------------------------+-------------------------+
+|        |image1|          |         |image2|        |         |image3|        |
++--------------------------+-------------------------+-------------------------+
+
+    Original image, image filtered by mean shift after clustering, and labeled image.
diff --git a/Examples/BasicFilters/PrintableImageFilterExample.cxx b/Examples/BasicFilters/PrintableImageFilterExample.cxx
index abe40efdbbb6d00a6e6009e7296ddb5882feb802..f632da523ccbc7faa000df846524fe12d88f3f65 100644
--- a/Examples/BasicFilters/PrintableImageFilterExample.cxx
+++ b/Examples/BasicFilters/PrintableImageFilterExample.cxx
@@ -29,30 +29,6 @@
 */
 
 
-//  Most of the time, satellite images have more than three spectral bands. As we
-// are only able to see three colors (red, green and blue), we have to find a way to
-// represent these images using only three bands. This is called creating a color
-// composition.
-//
-// Of course, any color composition will not be able to render all the information
-// available in the original image. As a consequence, sometimes, creating more than
-// one color composition will be necessary.
-//
-// If you want to obtain an image with natural colors, you have to match the wavelength
-// captured by the satellite with those captured by your eye: thus matching the red band
-// with the red color, etc.
-//
-// Some satellites (SPOT 5 is an example) do not acquire all the {\em human} spectral bands:
-// the blue can be missing and replaced by some other wavelength of interest for a specific application.
-// In these situations, another mapping has to be created. That's why, the vegetation often appears in
-// red in satellite images (see on left of figure~\ref{fig:PRINTABLE_FILTER}).
-//
-// The band order in the image products can be also quite tricky. It could be in the wavelength order,
-// as it is the case for Quickbird (1: Blue, 2: Green, 3: Red, 4: NIR), in this case, you
-// have to be careful to reverse the order if you want a natural display. It could also be reverse
-// to facilitate direct viewing, as for SPOT5 (1: NIR, 2: Red, 3: Green, 4: SWIR) but in this situations
-// you have to be careful when you process the image.
-
 #include "otbVectorImage.h"
 #include "otbImageFileReader.h"
 #include "otbImageFileWriter.h"
@@ -84,9 +60,8 @@ int main(int argc, char* argv[])
   ReaderType::Pointer reader = ReaderType::New();
   reader->SetFileName(inputFilename);
 
-  //  To easily convert the image to a {\em printable} format, i.e. 3 bands
-  // \code{unsigned char} value, you can use the \doxygen{otb}{PrintableImageFilter}.
-
+  // To easily convert the image to a printable format, i.e. 3 bands
+  // unsigned char value, you can use the PrintableImageFilter.
   typedef otb::PrintableImageFilter<InputImageType> PrintableFilterType;
   PrintableFilterType::Pointer                      printableImageFilter = PrintableFilterType::New();
 
@@ -95,9 +70,8 @@ int main(int argc, char* argv[])
   printableImageFilter->SetChannel(greenChannelNumber);
   printableImageFilter->SetChannel(blueChannelNumber);
 
-  //  When you create the writer to plug at the output of the \code{printableImageFilter}
+  // When you create the writer to plug at the output of the printableImageFilter
   // you may want to use the direct type definition as it is a good way to avoid mismatch:
-
   typedef PrintableFilterType::OutputImageType  OutputImageType;
   typedef otb::ImageFileWriter<OutputImageType> WriterType;
 
@@ -106,17 +80,4 @@ int main(int argc, char* argv[])
   writer->SetInput(printableImageFilter->GetOutput());
 
   writer->Update();
-
-  // Figure~\ref{fig:PRINTABLE_FILTER} illustrates different color compositions for a SPOT 5 image.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{PrintableExampleOutput1.eps}
-  // \includegraphics[width=0.44\textwidth]{PrintableExampleOutput2.eps}
-  // \itkcaption[Scaling images]{On the left, a classic SPOT5
-  // combination: XS3 in red, XS2 in green and XS1 in blue. On the
-  // right another composition: XS3 in red, XS4 in green and XS2 in blue.}
-  // \label{fig:PRINTABLE_FILTER}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
 }
diff --git a/Examples/BasicFilters/PrintableImageFilterExample.rst b/Examples/BasicFilters/PrintableImageFilterExample.rst
new file mode 100644
index 0000000000000000000000000000000000000000..9c503fa73bb81e54857e01cdac3e3fce27c071bf
--- /dev/null
+++ b/Examples/BasicFilters/PrintableImageFilterExample.rst
@@ -0,0 +1,37 @@
+Most of the time, satellite images have more than three spectral bands. As we
+are only able to see three colors (red, green and blue), we have to find a way
+to represent these images using only three bands. This is called creating a
+color composition.
+
+Of course, any color composition will not be able to render all the information
+available in the original image. As a consequence, sometimes, creating more than
+one color composition will be necessary.
+
+If you want to obtain an image with natural colors, you have to match the
+wavelength captured by the satellite with those captured by your eye: thus
+matching the red band with the red color, etc.
+
+Some satellites (SPOT 5 is an example) do not acquire all the visible
+spectral bands: the blue can be missing and replaced by some other wavelength of
+interest for a specific application.  In these situations, another mapping has
+to be created. That's why the vegetation often appears in red in satellite
+images.
+
+The band order in the image products can be also quite tricky. It could be in
+the wavelength order, as it is the case for Quickbird (1: Blue, 2: Green, 3:
+Red, 4: NIR), in this case, you have to be careful to reverse the order if you
+want a natural display. It could also be reverse to facilitate direct viewing,
+as for SPOT5 (1: NIR, 2: Red, 3: Green, 4: SWIR) but in this situations you have
+to be careful when you process the image.
+
+.. |image1| image:: /Output/PrintableExampleOutput1.jpg
+
+.. |image2| image:: /Output/PrintableExampleOutput2.jpg
+
+.. _Figure1:
+
++--------------------------+-------------------------+
+|        |image1|          |         |image2|        |
++--------------------------+-------------------------+
+
+On the left, a classic SPOT5 combination: XS3 in red, XS2 in green and XS1 in blue. On the right another composition: XS3 in red, XS4 in green and XS2 in blue.
diff --git a/Examples/BasicFilters/ScalingFilterExample.cxx b/Examples/BasicFilters/ScalingFilterExample.cxx
index 174fa6699ca6a13dfd88f1d28c79e03ca960d1b5..feef4ec7231e8f0e1a456196a52b04e59daa7f1e 100644
--- a/Examples/BasicFilters/ScalingFilterExample.cxx
+++ b/Examples/BasicFilters/ScalingFilterExample.cxx
@@ -23,13 +23,6 @@
 ./ScalingFilterExample Input/QB_Toulouse_Ortho_PAN.tif Output/QB_Toulouse_Ortho_PAN_rescaled.png Output/QB_Toulouse_Ortho_PAN_casted.png
 */
 
-
-// On one hand, satellite images are commonly coded on more than 8 bits to provide
-// the dynamic range required from shadows to clouds. On the other hand, image formats
-// in use for printing and display are usually limited to 8 bits. We need to convert the value
-// to enable a proper display. This is usually done using linear scaling. Of course, you have
-// to be aware that some information is lost in the process.
-
 #include "otbImage.h"
 #include "otbImageFileReader.h"
 #include "otbImageFileWriter.h"
@@ -56,8 +49,7 @@ int main(int argc, char* argv[])
   ReaderType::Pointer                          reader = ReaderType::New();
   reader->SetFileName(argv[1]);
 
-  //  The \doxygen{itk}{RescaleIntensityImageFilter} is used to rescale the value:
-
+  // The RescaleIntensityImageFilter is used to rescale the value
   typedef itk::RescaleIntensityImageFilter<InputImageType, OutputImageType> RescalerType;
   RescalerType::Pointer                                                     rescaler = RescalerType::New();
   rescaler->SetInput(reader->GetOutput());
@@ -75,20 +67,4 @@ int main(int argc, char* argv[])
   writer->SetFileName(argv[3]);
   writer->SetInput(caster->GetOutput());
   writer->Update();
-
-  // Figure~\ref{fig:SCALING_FILTER} illustrates the difference between a proper scaling and
-  // a simple truncation of the value and demonstrates why it is
-  // important to keep this in mind.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{QB_Toulouse_Ortho_PAN_casted.eps}
-  // \includegraphics[width=0.44\textwidth]{QB_Toulouse_Ortho_PAN_rescaled.eps}
-  // \itkcaption[Scaling images]{On the left, the image obtained by truncated pixel values
-  // at the dynamic acceptable for a png file (between 0 and 255). On the right,
-  // the same image with
-  // a proper rescaling}
-  // \label{fig:SCALING_FILTER}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
 }
diff --git a/Examples/BasicFilters/ScalingFilterExample.rst b/Examples/BasicFilters/ScalingFilterExample.rst
new file mode 100644
index 0000000000000000000000000000000000000000..a284ff97abf3eef2c906d4040e28990aa48acad1
--- /dev/null
+++ b/Examples/BasicFilters/ScalingFilterExample.rst
@@ -0,0 +1,17 @@
+On one hand, satellite images are commonly coded on more than 8 bits to provide
+the dynamic range required from shadows to clouds. On the other hand, image formats
+in use for printing and display are usually limited to 8 bits. We need to convert the value
+to enable a proper display. This is usually done using linear scaling. Of course, you have
+to be aware that some information is lost in the process.
+
+.. |image1| image:: /Output/QB_Toulouse_Ortho_PAN_casted.png
+
+.. |image2| image:: /Output/QB_Toulouse_Ortho_PAN_rescaled.png
+
+.. _Figure1:
+
++--------------------------+-------------------------+
+|        |image1|          |         |image2|        |
++--------------------------+-------------------------+
+
+    On the left, the image obtained by truncated pixel values at the dynamic acceptable for a png file (between 0 and 255). On the right, the same image with a proper rescaling.
diff --git a/Examples/FeatureExtraction/CMakeLists.txt b/Examples/FeatureExtraction/CMakeLists.txt
index 19c504f658d111d89bbd3a107d495d0989e3d003..5d48aead0da95f1391506976bcfeb80c37083e36 100644
--- a/Examples/FeatureExtraction/CMakeLists.txt
+++ b/Examples/FeatureExtraction/CMakeLists.txt
@@ -38,18 +38,6 @@ target_link_libraries(CorrelationLineDetectorExample ${OTB_LIBRARIES})
 add_executable(EdgeDensityExample EdgeDensityExample.cxx)
 target_link_libraries(EdgeDensityExample ${OTB_LIBRARIES})
 
-#OTBRoadExtraction depends OTBMathParser. But OTB_USE_MUPARSER is OFF
-if(OTBMathParser_LOADED)
-add_executable(ExtractRoadByStepsExample ExtractRoadByStepsExample.cxx)
-target_link_libraries(ExtractRoadByStepsExample ${OTB_LIBRARIES})
-
-add_executable(ExtractRoadExample ExtractRoadExample.cxx)
-target_link_libraries(ExtractRoadExample ${OTB_LIBRARIES})
-
-add_executable(ParallelLineDetectionExample ParallelLineDetectionExample.cxx)
-target_link_libraries(ParallelLineDetectionExample ${OTB_LIBRARIES})
-endif()
-
 add_executable(FlusserMomentsImageFunctionExample FlusserMomentsImageFunctionExample.cxx)
 target_link_libraries(FlusserMomentsImageFunctionExample ${OTB_LIBRARIES})
 
@@ -71,12 +59,6 @@ target_link_libraries(PanTexExample ${OTB_LIBRARIES})
 add_executable(RatioLineDetectorExample RatioLineDetectorExample.cxx)
 target_link_libraries(RatioLineDetectorExample ${OTB_LIBRARIES})
 
-add_executable(SeamCarvingExample SeamCarvingExample.cxx)
-target_link_libraries(SeamCarvingExample ${OTB_LIBRARIES})
-
-add_executable(SeamCarvingOtherExample SeamCarvingOtherExample.cxx)
-target_link_libraries(SeamCarvingOtherExample ${OTB_LIBRARIES})
-
 add_executable(SFSExample SFSExample.cxx)
 target_link_libraries(SFSExample ${OTB_LIBRARIES})
 
diff --git a/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx b/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx
deleted file mode 100644
index 54891d83c85169c20f0e82311a78b2d4aba5f986..0000000000000000000000000000000000000000
--- a/Examples/FeatureExtraction/ExtractRoadByStepsExample.cxx
+++ /dev/null
@@ -1,414 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-// This example illustrates the details of the \doxygen{otb}{RoadExtractionFilter}.
-// This filter, described in the previous section,  is a composite filter that includes
-// all the steps below. Individual filters can be replaced to design a road detector
-// targeted at SAR images for example.
-
-#include "otbPolyLineParametricPathWithValue.h"
-#include "otbSpectralAngleDistanceImageFilter.h"
-#include "itkGradientRecursiveGaussianImageFilter.h"
-#include "otbNeighborhoodScalarProductFilter.h"
-#include "otbRemoveIsolatedByDirectionFilter.h"
-#include "otbRemoveWrongDirectionFilter.h"
-#include "otbNonMaxRemovalByDirectionFilter.h"
-#include "otbVectorizationPathListFilter.h"
-#include "otbSimplifyPathListFilter.h"
-#include "otbBreakAngularPathListFilter.h"
-#include "otbRemoveTortuousPathListFilter.h"
-#include "otbLinkPathListFilter.h"
-#include "otbLikelihoodPathListFilter.h"
-#include "otbDrawPathListFilter.h"
-#include "otbLikelihoodPathListFilter.h"
-#include "otbMultiToMonoChannelExtractROI.h"
-#include "itkUnaryFunctorImageFilter.h"
-#include "itkRescaleIntensityImageFilter.h"
-#include "itkSqrtImageFilter.h"
-
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbMultiChannelExtractROI.h"
-#include "otbVectorRescaleIntensityImageFilter.h"
-#include "itkAddImageFilter.h"
-#include "itkSubtractImageFilter.h"
-#include "itkRGBPixel.h"
-#include "itkComposeImageFilter.h"
-#include "itkThresholdImageFilter.h"
-#include "itkSigmoidImageFilter.h"
-#include "itkThresholdImageFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "itkGrayscaleDilateImageFilter.h"
-
-/* Example usage:
-./ExtractRoadByStepsExample Input/qb_RoadExtract.tif Output/ExtractRoadByStepsExampleOutput.jpg Output/qb_ExtractRoad_pretty.jpg 337 557 432 859 0.00005 1.0
-*/
-
-/* Example usage:
-./ExtractRoadByStepsExample Input/qb_RoadExtract2.tif Output/ExtractRoadByStepsExampleOutput2.jpg Output/qb_ExtractRoad_pretty2.jpg 228 316 207 282 0.00005 1.0
-*/
-
-
-int main(int itkNotUsed(argc), char* argv[])
-{
-
-  const unsigned int                                 Dimension = 2;
-  typedef double                                     PixelType;
-  typedef unsigned char                              OutputPixelType;
-  typedef itk::CovariantVector<PixelType, Dimension> VectorPixelType;
-  typedef otb::Image<PixelType, Dimension>           InternalImageType;
-  typedef otb::VectorImage<PixelType, Dimension>     MultiSpectralImageType;
-  typedef otb::Image<VectorPixelType, Dimension>     VectorImageType;
-
-  typedef otb::PolyLineParametricPathWithValue<double, Dimension> PathType;
-
-  typedef otb::ImageFileReader<MultiSpectralImageType> MultispectralReaderType;
-
-  MultispectralReaderType::Pointer multispectralReader = MultispectralReaderType::New();
-  multispectralReader->SetFileName(argv[1]);
-
-  // Create an 3 band image for the software guide
-  typedef otb::VectorImage<OutputPixelType, Dimension>                                          OutputVectorImageType;
-  typedef otb::ImageFileWriter<OutputVectorImageType>                                           VectorWriterType;
-  typedef otb::VectorRescaleIntensityImageFilter<MultiSpectralImageType, OutputVectorImageType> VectorRescalerType;
-  typedef otb::MultiChannelExtractROI<unsigned char, unsigned char>                             ChannelExtractorType;
-
-  // The GenerateOutputInformation() information is required here so
-  // that the number of component per pixel is update and known to set
-  // up the maximum and minimum values for the rescaling filter
-  multispectralReader->GenerateOutputInformation();
-
-  OutputVectorImageType::PixelType minimum, maximum;
-  minimum.SetSize(multispectralReader->GetOutput()->GetNumberOfComponentsPerPixel());
-  maximum.SetSize(multispectralReader->GetOutput()->GetNumberOfComponentsPerPixel());
-  minimum.Fill(0);
-  maximum.Fill(255);
-
-  VectorRescalerType::Pointer vr = VectorRescalerType::New();
-  vr->SetInput(multispectralReader->GetOutput());
-  vr->SetOutputMinimum(minimum);
-  vr->SetOutputMaximum(maximum);
-  vr->SetClampThreshold(0.01);
-
-  ChannelExtractorType::Pointer selecter = ChannelExtractorType::New();
-  selecter->SetInput(vr->GetOutput());
-  selecter->SetExtractionRegion(multispectralReader->GetOutput()->GetLargestPossibleRegion());
-  selecter->SetChannel(3);
-  selecter->SetChannel(2);
-  selecter->SetChannel(1);
-
-  VectorWriterType::Pointer vectWriter = VectorWriterType::New();
-  vectWriter->SetFileName(argv[3]);
-  vectWriter->SetInput(selecter->GetOutput());
-  vectWriter->Update();
-
-  MultiSpectralImageType::PixelType pixelRef;
-  pixelRef.SetSize(4);
-  pixelRef[0] = atoi(argv[4]);
-  pixelRef[1] = atoi(argv[5]);
-  pixelRef[2] = atoi(argv[6]);
-  pixelRef[3] = atoi(argv[7]);
-
-  double resolution = 0.6; // to get directly from metadata
-  double alpha      = atof(argv[9]);
-
-  //  The spectral angle is used to compute a grayscale image from the
-  //  multispectral original image using
-  //  \doxygen{otb}{SpectralAngleDistanceImageFilter}. The spectral
-  //  angle is illustrated on
-  // Figure~\ref{fig:RoadExtractionSpectralAngleDiagram}. Pixels
-  // corresponding to roads are in darker color.
-  //
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.40\textwidth]{RoadExtractionSpectralAngleDiagram.eps}
-  // \itkcaption[Spectral Angle]{Illustration of the spectral angle
-  // for one pixel of a three-band image. One of the vector is the
-  // reference pixel and the other is the current pixel.}
-  // \label{fig:RoadExtractionSpectralAngleDiagram}
-  // \end{figure}
-  //
-  //
-
-  typedef otb::SpectralAngleDistanceImageFilter<MultiSpectralImageType, InternalImageType> SAFilterType;
-  SAFilterType::Pointer                                                                    saFilter = SAFilterType::New();
-  saFilter->SetReferencePixel(pixelRef);
-  saFilter->SetInput(multispectralReader->GetOutput());
-
-  //  A square root is applied to the spectral angle image in order to enhance contrast between
-  //  darker pixels (which are pixels of interest) with \doxygen{itk}{SqrtImageFilter}.
-
-  typedef itk::SqrtImageFilter<InternalImageType, InternalImageType> SqrtFilterType;
-  SqrtFilterType::Pointer                                            sqrtFilter = SqrtFilterType::New();
-  sqrtFilter->SetInput(saFilter->GetOutput());
-
-  //  Use the Gaussian gradient filter compute the gradient in x and y direction
-  // respectively
-  // (\doxygen{itk}{GradientRecursiveGaussianImageFilter}).
-
-  double                                                                                sigma = alpha * (1.2 / resolution + 1);
-  typedef itk::GradientRecursiveGaussianImageFilter<InternalImageType, VectorImageType> GradientFilterType;
-  GradientFilterType::Pointer                                                           gradientFilter = GradientFilterType::New();
-  gradientFilter->SetSigma(sigma);
-  gradientFilter->SetInput(sqrtFilter->GetOutput());
-
-  //  Compute the scalar product of the neighboring pixels and keep the
-  //  minimum value and the direction with \doxygen{otb}{NeighborhoodScalarProductFilter}.
-  // This is the line detector described
-  //  in \cite{Lacroix1998}.
-
-  typedef otb::NeighborhoodScalarProductFilter<VectorImageType, InternalImageType, InternalImageType> NeighborhoodScalarProductType;
-  NeighborhoodScalarProductType::Pointer                                                              scalarFilter = NeighborhoodScalarProductType::New();
-  scalarFilter->SetInput(gradientFilter->GetOutput());
-
-  //  The resulting image is passed to the \doxygen{otb}{RemoveIsolatedByDirectionFilter}
-  // filter to remove pixels
-  //  with no neighbor having the same direction.
-
-  typedef otb::RemoveIsolatedByDirectionFilter<InternalImageType, InternalImageType, InternalImageType> RemoveIsolatedByDirectionType;
-  RemoveIsolatedByDirectionType::Pointer removeIsolatedByDirectionFilter = RemoveIsolatedByDirectionType::New();
-  removeIsolatedByDirectionFilter->SetInput(scalarFilter->GetOutput());
-  removeIsolatedByDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection());
-
-  //  We remove pixels having a direction corresponding to bright lines
-  //  as we know that after the spectral angle, roads are in darker color
-  //  with the \doxygen{otb}{RemoveWrongDirectionFilter} filter.
-
-  typedef otb::RemoveWrongDirectionFilter<InternalImageType, InternalImageType, InternalImageType> RemoveWrongDirectionType;
-  RemoveWrongDirectionType::Pointer                                                                removeWrongDirectionFilter = RemoveWrongDirectionType::New();
-  removeWrongDirectionFilter->SetInput(removeIsolatedByDirectionFilter->GetOutput());
-  removeWrongDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection());
-
-  //  We remove pixels which are not maximum on the direction
-  //  perpendicular to the road direction with the \doxygen{otb}{NonMaxRemovalByDirectionFilter}.
-
-  typedef otb::NonMaxRemovalByDirectionFilter<InternalImageType, InternalImageType, InternalImageType> NonMaxRemovalByDirectionType;
-  NonMaxRemovalByDirectionType::Pointer nonMaxRemovalByDirectionFilter = NonMaxRemovalByDirectionType::New();
-  nonMaxRemovalByDirectionFilter->SetInput(removeWrongDirectionFilter->GetOutput());
-  nonMaxRemovalByDirectionFilter->SetInputDirection(scalarFilter->GetOutputDirection());
-
-  //  Extracted road are vectorized into polylines with \doxygen{otb}{VectorizationPathListFilter}.
-
-  typedef otb::VectorizationPathListFilter<InternalImageType, InternalImageType, PathType> VectorizationFilterType;
-  VectorizationFilterType::Pointer                                                         vectorizationFilter = VectorizationFilterType::New();
-  vectorizationFilter->SetInput(nonMaxRemovalByDirectionFilter->GetOutput());
-  vectorizationFilter->SetInputDirection(scalarFilter->GetOutputDirection());
-  vectorizationFilter->SetAmplitudeThreshold(atof(argv[8]));
-
-  //  However, this vectorization is too simple and need to be refined
-  //  to be usable. First, we remove all aligned points to make one segment with
-  // \doxygen{otb}{SimplifyPathListFilter}.
-  //  Then we break the polylines which have sharp angles as they are probably
-  //  not road with \doxygen{otb}{BreakAngularPathListFilter}.
-  // Finally we remove path which are too short with \doxygen{otb}{RemoveTortuousPathListFilter}.
-
-  typedef otb::SimplifyPathListFilter<PathType> SimplifyPathType;
-  SimplifyPathType::Pointer                     simplifyPathListFilter = SimplifyPathType::New();
-  simplifyPathListFilter->GetFunctor().SetTolerance(1.0);
-  simplifyPathListFilter->SetInput(vectorizationFilter->GetOutput());
-
-  typedef otb::BreakAngularPathListFilter<PathType> BreakAngularPathType;
-  BreakAngularPathType::Pointer                     breakAngularPathListFilter = BreakAngularPathType::New();
-  breakAngularPathListFilter->SetMaxAngle(otb::CONST_PI / 8.);
-  breakAngularPathListFilter->SetInput(simplifyPathListFilter->GetOutput());
-
-  typedef otb::RemoveTortuousPathListFilter<PathType> RemoveTortuousPathType;
-  RemoveTortuousPathType::Pointer                     removeTortuousPathListFilter = RemoveTortuousPathType::New();
-  removeTortuousPathListFilter->GetFunctor().SetThreshold(1.0);
-  removeTortuousPathListFilter->SetInput(breakAngularPathListFilter->GetOutput());
-
-  //  Polylines within a certain range are linked (\doxygen{otb}{LinkPathListFilter}) to
-  //  try to fill gaps due to occultations by vehicules, trees, etc. before simplifying
-  //  polylines (\doxygen{otb}{SimplifyPathListFilter}) and
-  //  removing the shortest ones with \doxygen{otb}{RemoveTortuousPathListFilter}.
-
-  typedef otb::LinkPathListFilter<PathType> LinkPathType;
-  LinkPathType::Pointer                     linkPathListFilter = LinkPathType::New();
-  linkPathListFilter->SetDistanceThreshold(25.0 / resolution);
-  linkPathListFilter->SetAngularThreshold(otb::CONST_PI / 8);
-  linkPathListFilter->SetInput(removeTortuousPathListFilter->GetOutput());
-
-  SimplifyPathType::Pointer simplifyPathListFilter2 = SimplifyPathType::New();
-  simplifyPathListFilter2->GetFunctor().SetTolerance(1.0);
-  simplifyPathListFilter2->SetInput(linkPathListFilter->GetOutput());
-
-  RemoveTortuousPathType::Pointer removeTortuousPathListFilter2 = RemoveTortuousPathType::New();
-  removeTortuousPathListFilter2->GetFunctor().SetThreshold(10.0);
-  removeTortuousPathListFilter2->SetInput(simplifyPathListFilter2->GetOutput());
-
-  //  A value can be associated with each polyline according to pixel values
-  // under the polyline with \doxygen{otb}{LikelihoodPathListFilter}. A higher value
-  // will mean a higher Likelihood to be a road.
-
-  typedef otb::LikelihoodPathListFilter<PathType, InternalImageType> PathListToPathListWithValueType;
-  PathListToPathListWithValueType::Pointer                           pathListConverter = PathListToPathListWithValueType::New();
-  pathListConverter->SetInput(removeTortuousPathListFilter2->GetOutput());
-  pathListConverter->SetInputImage(nonMaxRemovalByDirectionFilter->GetOutput());
-
-  // A black background image is built to draw the path on.
-
-  InternalImageType::Pointer output = InternalImageType::New();
-  output->CopyInformation(multispectralReader->GetOutput());
-  output->SetRegions(output->GetLargestPossibleRegion());
-  output->Allocate();
-  output->FillBuffer(0.0);
-
-  // Polylines are drawn on a black background image with \doxygen{otb}{DrawPathListFilter}.
-  // The \code{SetUseIternalValues()} tell the drawing filter to draw the path with its Likelihood
-  // value.
-
-  typedef otb::DrawPathListFilter<InternalImageType, PathType, InternalImageType> DrawPathType;
-  DrawPathType::Pointer                                                           drawPathListFilter = DrawPathType::New();
-  drawPathListFilter->SetInput(output);
-  drawPathListFilter->SetInputPath(pathListConverter->GetOutput());
-  drawPathListFilter->SetUseInternalPathValue(true);
-
-  // The output from the drawing filter contains very small values (Likelihood values). Therefore
-  // the image has to be rescaled to be viewed. The whole pipeline is executed by invoking
-  // the \code{Update()} method on this last filter.
-
-  typedef itk::RescaleIntensityImageFilter<InternalImageType, InternalImageType> RescalerType;
-  RescalerType::Pointer                                                          rescaler = RescalerType::New();
-  rescaler->SetOutputMaximum(255);
-  rescaler->SetOutputMinimum(0);
-  rescaler->SetInput(drawPathListFilter->GetOutput());
-  rescaler->Update();
-
-  // this small piece of code aims at producing a pretty RGB png result image.
-  typedef otb::MultiToMonoChannelExtractROI<OutputPixelType, PixelType>                                 ChannelExtractionFilterType;
-  typedef itk::AddImageFilter<InternalImageType, InternalImageType, InternalImageType>                  AddFilterType;
-  typedef itk::SubtractImageFilter<InternalImageType, InternalImageType, InternalImageType>             SubtractFilterType;
-  typedef itk::ThresholdImageFilter<InternalImageType>                                                  ThresholdFilterType;
-  typedef itk::RGBPixel<OutputPixelType>                                                                RGBPixelType;
-  typedef otb::Image<RGBPixelType, Dimension>                                                           RGBImageType;
-  typedef itk::ComposeImageFilter<InternalImageType, RGBImageType>                                      ComposeFilterType;
-  typedef otb::ImageFileWriter<RGBImageType>                                                            RGBWriterType;
-  typedef itk::BinaryBallStructuringElement<PixelType, Dimension>                                       StructuringElementType;
-  typedef itk::GrayscaleDilateImageFilter<InternalImageType, InternalImageType, StructuringElementType> DilateFilterType;
-
-  StructuringElementType se;
-  se.SetRadius(1);
-  se.CreateStructuringElement();
-
-  // Filters definitions
-  ChannelExtractionFilterType::Pointer channelExtractor1 = ChannelExtractionFilterType::New();
-  ChannelExtractionFilterType::Pointer channelExtractor2 = ChannelExtractionFilterType::New();
-  ChannelExtractionFilterType::Pointer channelExtractor3 = ChannelExtractionFilterType::New();
-
-  AddFilterType::Pointer       addFilter   = AddFilterType::New();
-  SubtractFilterType::Pointer  subtract2   = SubtractFilterType::New();
-  SubtractFilterType::Pointer  subtract3   = SubtractFilterType::New();
-  ThresholdFilterType::Pointer threshold11 = ThresholdFilterType::New();
-  ThresholdFilterType::Pointer threshold21 = ThresholdFilterType::New();
-  ThresholdFilterType::Pointer threshold31 = ThresholdFilterType::New();
-  ThresholdFilterType::Pointer threshold12 = ThresholdFilterType::New();
-  ThresholdFilterType::Pointer threshold22 = ThresholdFilterType::New();
-  ThresholdFilterType::Pointer threshold32 = ThresholdFilterType::New();
-
-  ComposeFilterType::Pointer composer = ComposeFilterType::New();
-  RGBWriterType::Pointer     writer   = RGBWriterType::New();
-
-  DilateFilterType::Pointer dilater = DilateFilterType::New();
-
-  dilater->SetInput(rescaler->GetOutput());
-  dilater->SetKernel(se);
-
-  // Extract each channel
-  channelExtractor1->SetInput(vr->GetOutput());
-  channelExtractor2->SetInput(vr->GetOutput());
-  channelExtractor3->SetInput(vr->GetOutput());
-
-  channelExtractor1->SetChannel(3);
-  channelExtractor2->SetChannel(2);
-  channelExtractor3->SetChannel(1);
-
-  // Add the path to the red component
-  addFilter->SetInput1(channelExtractor1->GetOutput());
-  addFilter->SetInput2(dilater->GetOutput());
-
-  subtract2->SetInput1(channelExtractor2->GetOutput());
-  subtract2->SetInput2(dilater->GetOutput());
-  subtract3->SetInput1(channelExtractor3->GetOutput());
-  subtract3->SetInput2(dilater->GetOutput());
-
-  // Threshold outside the [0, 255] range
-
-  threshold11->SetInput(addFilter->GetOutput());
-  threshold11->ThresholdBelow(0);
-  threshold11->SetOutsideValue(0);
-  threshold12->SetInput(threshold11->GetOutput());
-  threshold12->ThresholdAbove(255);
-  threshold12->SetOutsideValue(255);
-
-  threshold21->SetInput(subtract2->GetOutput());
-  threshold21->ThresholdBelow(0);
-  threshold21->SetOutsideValue(0);
-  threshold22->SetInput(threshold21->GetOutput());
-  threshold22->ThresholdAbove(255);
-  threshold22->SetOutsideValue(255);
-
-  threshold31->SetInput(subtract3->GetOutput());
-  threshold31->ThresholdBelow(0);
-  threshold31->SetOutsideValue(0);
-  threshold32->SetInput(threshold31->GetOutput());
-  threshold32->ThresholdAbove(255);
-  threshold32->SetOutsideValue(255);
-
-  // Compose the output image
-  composer->SetInput(0, threshold12->GetOutput());
-  composer->SetInput(1, threshold22->GetOutput());
-  composer->SetInput(2, threshold32->GetOutput());
-
-  // Write the new rgb image
-  writer->SetInput(composer->GetOutput());
-  writer->SetFileName(argv[2]);
-  writer->Update();
-
-  // Figures~\ref{fig:ROADEXTRACTIONBYSTEPS} and \ref{fig:ROADEXTRACTIONBYSTEPS2}
-  // show the result of applying
-  // the road extraction by steps to a fusionned Quickbird image. The result image
-  // is a RGB composition showing the extracted path in red. Full processing took
-  // about 3 seconds for each image.
-  //
-  // \begin{figure}[htbp]
-  // \center
-  // \includegraphics[width=0.44\textwidth]{qb_ExtractRoad_pretty.eps}
-  // \includegraphics[width=0.44\textwidth]{ExtractRoadByStepsExampleOutput.eps}
-  // \itkcaption[Road extraction filter application]{Result of applying
-  // the road extraction by steps pipeline to a fusionned Quickbird
-  // image. From left to right : original image, extracted road with their
-  // Likelihood values.}
-  // \label{fig:ROADEXTRACTIONBYSTEPS}
-  // \end{figure}
-  //
-  // \begin{figure}[htbp]
-  // \center
-  // \includegraphics[width=0.44\textwidth]{qb_ExtractRoad_pretty2.eps}
-  // \includegraphics[width=0.44\textwidth]{ExtractRoadByStepsExampleOutput2.eps}
-  // \itkcaption[Road extraction filter application]{Result of applying
-  // the road extraction by steps pipeline to a fusionned Quickbird
-  // image. From left to right : original image, extracted road with their
-  // Likelihood values.}
-  // \label{fig:ROADEXTRACTIONBYSTEPS2}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
-}
diff --git a/Examples/FeatureExtraction/ExtractRoadExample.cxx b/Examples/FeatureExtraction/ExtractRoadExample.cxx
deleted file mode 100644
index 94c4361e0d20c29ea24a6461e2248374e7047524..0000000000000000000000000000000000000000
--- a/Examples/FeatureExtraction/ExtractRoadExample.cxx
+++ /dev/null
@@ -1,246 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/* Example usage:
-./ExtractRoadExample Input/qb_RoadExtract.tif Output/ExtractRoadOutput.png 337 557 432 859 1.0 0.00005 1.0 0.39269 1.0 10.0 25.
-*/
-
-
-// The easiest way to use the road extraction filter provided by OTB is to use the composite
-// filter. If a modification in the pipeline is required to adapt to a particular situation,
-// the step by step example, described in the next section can be adapted.
-//
-// This example demonstrates the use of the \doxygen{otb}{RoadExtractionFilter}.
-// This filter is a composite filter achieving road extraction according to the algorithm
-// adapted by E. Christophe and J. Inglada \cite{Christophe2007} from an original method
-// proposed in \cite{Lacroix1998}.
-//
-// The first step toward the use of this filter is the inclusion of the proper header files.
-
-#include "otbPolyLineParametricPathWithValue.h"
-#include "otbRoadExtractionFilter.h"
-#include "otbDrawPathListFilter.h"
-
-#include "otbImage.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "itkRescaleIntensityImageFilter.h"
-#include "otbMath.h"
-
-#include "itkInvertIntensityImageFilter.h"
-#include "itkGrayscaleDilateImageFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-
-int main(int argc, char* argv[])
-{
-
-  if (argc != 14)
-  {
-    std::cerr << "Usage: " << argv[0];
-    std::cerr << " inputFileName outputFileName firstPixelComponent secondPixelComponent ";
-    std::cerr << "thirdPixelComponent fourthPixelComponent alpha amplitudeThrehsold tolerance ";
-    std::cerr << "angularThreshold-maxAngle firstMeanDistanceThreshold secondMeanDistanceThreshold ";
-    std::cerr << "distanceThreshold" << std::endl;
-    return EXIT_FAILURE;
-  }
-
-  const unsigned int Dimension = 2;
-  // Then we must decide what pixel type to use for the image. We choose to do
-  // all the computation in floating point precision and rescale the results
-  // between 0 and 255 in order to export PNG images.
-
-  typedef double        InputPixelType;
-  typedef unsigned char OutputPixelType;
-
-  //  The images are defined using the pixel type and the dimension. Please note that
-  //  the \doxygen{otb}{RoadExtractionFilter} needs an \doxygen{otb}{VectorImage} as input
-  //  to handle multispectral images.
-
-  typedef otb::VectorImage<InputPixelType, Dimension> InputVectorImageType;
-  typedef otb::Image<InputPixelType, Dimension>       InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension>      OutputImageType;
-
-  // We define the type of the polyline that the filter produces. We use the
-  // \doxygen{otb}{PolyLineParametricPathWithValue}, which allows the filter to produce
-  // a likehood value along with each polyline. The filter is able to produce
-  // \doxygen{itk}{PolyLineParametricPath} as well.
-
-  typedef otb::PolyLineParametricPathWithValue<InputPixelType, Dimension> PathType;
-
-  // Now we can define the \doxygen{otb}{RoadExtractionFilter} that takes a multi-spectral
-  // image as input and produces a list of polylines.
-
-  typedef otb::RoadExtractionFilter<InputVectorImageType, PathType> RoadExtractionFilterType;
-
-  // We also define an \doxygen{otb}{DrawPathListFilter} to draw the output
-  // polylines on an image, taking their likehood values into account.
-
-  typedef otb::DrawPathListFilter<InputImageType, PathType, InputImageType> DrawPathFilterType;
-
-  // The intensity rescaling of the results will be carried out by the
-  // \doxygen{itk}{RescaleIntensityImageFilter} which is templated by the
-  // input and output image types.
-
-  typedef itk::RescaleIntensityImageFilter<InputImageType, OutputImageType> RescalerType;
-
-  //  An \doxygen{otb}{ImageFileReader} class is also instantiated in order to read
-  //  image data from a file. Then, an \doxygen{otb}{ImageFileWriter}
-  //  is instantiated in order to write the output image to a file.
-
-  typedef otb::ImageFileReader<InputVectorImageType> ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType>      WriterType;
-
-  // The different filters composing our pipeline are created by invoking their
-  // \code{New()} methods, assigning the results to smart pointers.
-
-  ReaderType::Pointer               reader               = ReaderType::New();
-  RoadExtractionFilterType::Pointer roadExtractionFilter = RoadExtractionFilterType::New();
-  DrawPathFilterType::Pointer       drawingFilter        = DrawPathFilterType::New();
-  RescalerType::Pointer             rescaleFilter        = RescalerType::New();
-  WriterType::Pointer               writer               = WriterType::New();
-
-  reader->SetFileName(argv[1]);
-
-  // The \doxygen{otb}{RoadExtractionFilter} needs to have a reference pixel
-  // corresponding to the spectral content likely to represent a road. This is done
-  // by passing a pixel to the filter. Here we suppose that the input image
-  // has four spectral bands.
-
-  InputVectorImageType::PixelType ReferencePixel;
-  ReferencePixel.SetSize(4);
-  ReferencePixel.SetElement(0, ::atof(argv[3]));
-  ReferencePixel.SetElement(1, ::atof(argv[4]));
-  ReferencePixel.SetElement(2, ::atof(argv[5]));
-  ReferencePixel.SetElement(3, ::atof(argv[6]));
-  roadExtractionFilter->SetReferencePixel(ReferencePixel);
-
-  // We must also set the  alpha parameter of the filter which allows us to tune the width of the roads
-  // we want to extract. Typical value is $1.0$ and should be working in most situations.
-
-  roadExtractionFilter->SetAlpha(atof(argv[7]));
-
-  // All other parameter should not influence the results too much in most situation and can
-  // be kept at the default value.
-  //
-  // The amplitude threshold parameter tunes the sensitivity of the vectorization step. A typical
-  // value is $5 \cdot 10^{-5}$.
-
-  roadExtractionFilter->SetAmplitudeThreshold(atof(argv[8]));
-
-  // The tolerance threshold tunes the sensitivity of the path simplification step.
-  // Typical value is $1.0$.
-
-  roadExtractionFilter->SetTolerance(atof(argv[9]));
-
-  // Roads are not likely to have sharp turns. Therefore we set the max angle parameter,
-  // as well as the link angular threshold. The value is typically $\frac{\pi}{8}$.
-
-  roadExtractionFilter->SetMaxAngle(atof(argv[10]));
-  roadExtractionFilter->SetAngularThreshold(atof(argv[10]));
-
-  // The \doxygen{otb}{RoadExtractionFilter} performs two odd path removing operations at different stage of
-  // its execution. The first mean distance threshold and the second mean distance threshold set their criterion
-  // for removal. Path are removed if their mean distance between nodes is to small, since such path coming
-  // from previous filters are likely to be tortuous. The first removal operation as a typical mean distance
-  // threshold parameter of $1.0$, and the second of $10.0$.
-
-  roadExtractionFilter->SetFirstMeanDistanceThreshold(atof(argv[11]));
-  roadExtractionFilter->SetSecondMeanDistanceThreshold(atof(argv[12]));
-
-  // The \doxygen{otb}{RoadExtractionFilter} is able to link path whose ends are near
-  // according to an euclidean distance criterion. The threshold for this distance
-  // to link a path is the distance threshold parameter. A typical value is $25$.
-
-  roadExtractionFilter->SetDistanceThreshold(atof(argv[13]));
-
-  // We will now create a black background image to draw the resulting polyline on.
-  // To achieve this we need to know the size of our input image. Therefore we trigger the
-  // \code{GenerateOutputInformation()} of the reader.
-
-  reader->GenerateOutputInformation();
-  InputImageType::Pointer blackBackground = InputImageType::New();
-  blackBackground->CopyInformation(reader->GetOutput());
-  blackBackground->SetRegions(blackBackground->GetLargestPossibleRegion());
-  blackBackground->Allocate();
-  blackBackground->FillBuffer(0);
-
-  // We tell the \doxygen{otb}{DrawPathListFilter} to try to use the likehood value
-  // embedded within the polyline as a value for drawing this polyline if possible.
-
-  drawingFilter->UseInternalPathValueOn();
-
-  //  The \code{itk::RescaleIntensityImageFilter} needs to know which
-  //  is the minimum and maximum values of the output generated
-  //  image. Those can be chosen in a generic way by using the
-  //  \code{NumericTraits} functions, since they are templated over
-  //  the pixel type.
-
-  rescaleFilter->SetOutputMinimum(itk::NumericTraits<OutputPixelType>::min());
-  rescaleFilter->SetOutputMaximum(itk::NumericTraits<OutputPixelType>::max());
-
-  // Now it is time for some pipeline wiring.
-
-  roadExtractionFilter->SetInput(reader->GetOutput());
-  drawingFilter->SetInput(blackBackground);
-  drawingFilter->SetInputPath(roadExtractionFilter->GetOutput());
-  rescaleFilter->SetInput(drawingFilter->GetOutput());
-
-  // The update of the pipeline is triggered by the \code{Update()} method
-  // of the rescale intensity filter.
-
-  rescaleFilter->Update();
-
-  // output image enhancement
-  typedef itk::BinaryBallStructuringElement<OutputPixelType, Dimension>                             StructuringElementType;
-  typedef itk::GrayscaleDilateImageFilter<OutputImageType, OutputImageType, StructuringElementType> DilateFilterType;
-  typedef itk::InvertIntensityImageFilter<OutputImageType, OutputImageType>                         InvertFilterType;
-
-  StructuringElementType se;
-  se.SetRadius(1);
-  se.CreateStructuringElement();
-
-  DilateFilterType::Pointer dilater = DilateFilterType::New();
-
-  dilater->SetInput(rescaleFilter->GetOutput());
-  dilater->SetKernel(se);
-
-  InvertFilterType::Pointer invertFilter = InvertFilterType::New();
-  invertFilter->SetInput(dilater->GetOutput());
-
-  writer->SetFileName(argv[2]);
-  writer->SetInput(invertFilter->GetOutput());
-  writer->Update();
-
-  // Figure~\ref{fig:ROADEXTRACTION_FILTER} shows the result of applying
-  // the road extraction filter to a fusionned Quickbird image.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{qb_ExtractRoad_pretty.eps}
-  // \includegraphics[width=0.44\textwidth]{ExtractRoadOutput.eps}
-  // \itkcaption[Road extraction filter application]{Result of applying
-  // the \doxygen{otb}{RoadExtractionFilter} to a fusionned Quickbird
-  // image. From left to right : original image, extracted road with their
-  // likehood values (color are inverted for display).}
-  // \label{fig:ROADEXTRACTION_FILTER}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
-}
diff --git a/Examples/FeatureExtraction/ParallelLineDetectionExample.cxx b/Examples/FeatureExtraction/ParallelLineDetectionExample.cxx
deleted file mode 100644
index 305fd72b5ade098bd0ec217ee49a71b41c3211e6..0000000000000000000000000000000000000000
--- a/Examples/FeatureExtraction/ParallelLineDetectionExample.cxx
+++ /dev/null
@@ -1,238 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/* Example usage:
-./ParallelLineDetectionExample Output/Lines.png Output/ParallelLines.png 20 2 10
-*/
-
-
-// This example illustrates the details of the \doxygen{otb}{ParallelLinePathListFilter}.
-//
-
-#include "itkPolyLineParametricPath.h"
-#include "otbDrawPathListFilter.h"
-
-#include "otbParallelLinePathListFilter.h"
-
-#include "otbImage.h"
-#include "otbImageFileWriter.h"
-
-int main(int argc, char* argv[])
-{
-  if (argc != 6)
-  {
-    std::cerr << "Usage: " << std::endl;
-    std::cerr << argv[0] << " outputImage ";
-    std::cerr << " outputParallelLineImage ";
-    std::cerr << " distThreshParallel angThreshParallel commonDistThreshParallel" << std::endl;
-    return EXIT_FAILURE;
-  }
-
-  double distThreshParallel       = atof(argv[3]);
-  double angThreshParallel        = atof(argv[4]);
-  double commonDistThreshParallel = atof(argv[5]);
-
-  // We start by creating an empty image
-  const unsigned int    Dimension = 2;
-  typedef unsigned char PixelType;
-
-  typedef otb::Image<PixelType, Dimension> ImageType;
-
-  ImageType::Pointer image = ImageType::New();
-
-  ImageType::IndexType start;
-
-  start[0] = 0;
-  start[1] = 0;
-
-  ImageType::SizeType size;
-  size[0] = 600;
-  size[1] = 300;
-
-  ImageType::RegionType region;
-
-  region.SetSize(size);
-  region.SetIndex(start);
-  image->SetRegions(region);
-  image->Allocate();
-  image->FillBuffer(itk::NumericTraits<PixelType>::Zero);
-
-  // We create some lines
-  typedef itk::PolyLineParametricPath<Dimension> PathType;
-  typedef otb::ObjectList<PathType>              PathListType;
-
-  PathListType::Pointer lineList = PathListType::New();
-
-  typedef PathType::ContinuousIndexType ContinuousIndexType;
-  ContinuousIndexType                   cindex;
-
-  /*-----*/
-  PathType::Pointer aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 1;
-  cindex[1] = 41;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 175;
-  cindex[1] = 204;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 60;
-  cindex[1] = 18;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 203;
-  cindex[1] = 164;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 174;
-  cindex[1] = 99;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 281;
-  cindex[1] = 1;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 3;
-  cindex[1] = 233;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 191;
-  cindex[1] = 227;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 254;
-  cindex[1] = 279;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 351;
-  cindex[1] = 110;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 270;
-  cindex[1] = 287;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 368;
-  cindex[1] = 120;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 355;
-  cindex[1] = 204;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 528;
-  cindex[1] = 199;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 437;
-  cindex[1] = 243;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 591;
-  cindex[1] = 237;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  // Polylines are drawn on a black
-  typedef otb::DrawPathListFilter<ImageType, PathType, ImageType> DrawPathType;
-  DrawPathType::Pointer                                           drawPathListFilter = DrawPathType::New();
-  drawPathListFilter->SetInput(image);
-  drawPathListFilter->SetInputPath(lineList);
-  drawPathListFilter->SetPathValue(itk::NumericTraits<PixelType>::max());
-
-  typedef otb::ImageFileWriter<ImageType> WriterType;
-  WriterType::Pointer                     writer = WriterType::New();
-  writer->SetInput(drawPathListFilter->GetOutput());
-  writer->SetFileName(argv[1]);
-  writer->Update();
-
-  // Parallel lines are detected. A minimum common length, an angular
-  // threshold and a maximum distance threshold have to specified.
-  // The input is a pathList of the previously extracted line segments.
-  typedef otb::ParallelLinePathListFilter<PathType> ParallelLinePathType;
-  ParallelLinePathType::Pointer                     parallelLinePathListFilter = ParallelLinePathType::New();
-  parallelLinePathListFilter->SetDistanceThreshold(distThreshParallel);
-  parallelLinePathListFilter->SetAngularThreshold(angThreshParallel);
-  parallelLinePathListFilter->SetCommonDistanceThreshold(commonDistThreshParallel);
-  parallelLinePathListFilter->SetInput(lineList);
-  parallelLinePathListFilter->Update();
-
-  // A black background image is built to draw the path on.
-  ImageType::Pointer outputParallel = ImageType::New();
-  outputParallel->SetRegions(image->GetLargestPossibleRegion());
-  outputParallel->Allocate();
-  outputParallel->FillBuffer(itk::NumericTraits<PixelType>::Zero);
-
-  // Parallel lines are drawn on a black background image with \doxygen{otb}{DrawPathListFilter}.
-  // The \code{SetUseIternalValues()} tells the drawing filter to draw the path with its likelihood
-  // value.
-  // typedef otb::DrawPathListFilter<ImageType, PathType, ImageType> DrawPathType;
-  DrawPathType::Pointer drawPathListFilterParallel = DrawPathType::New();
-  drawPathListFilterParallel->SetInput(outputParallel);
-  drawPathListFilterParallel->SetInputPath(parallelLinePathListFilter->GetOutput());
-  drawPathListFilter->SetPathValue(itk::NumericTraits<PixelType>::max());
-  drawPathListFilterParallel->SetUseInternalPathValue(false);
-
-  // Write the Line image
-  WriterType::Pointer writerParallel = WriterType::New();
-  writerParallel->SetInput(drawPathListFilterParallel->GetOutput());
-  writerParallel->SetFileName(argv[2]);
-  writerParallel->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Examples/FeatureExtraction/SeamCarvingExample.cxx b/Examples/FeatureExtraction/SeamCarvingExample.cxx
deleted file mode 100644
index 854872a1b56ec802b03b13569154f4e1c2df596b..0000000000000000000000000000000000000000
--- a/Examples/FeatureExtraction/SeamCarvingExample.cxx
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-// This example illustrates the details of the seam carving operation.
-// References to this method can be found in \cite{Avidan07}. This example
-// details the use of \doxygen{otb}{ImageToCarvingPathFilter} and
-// \doxygen{otb}{RemoveCarvingPathFilter}.
-//
-// In this example, a loop is defined to remove a vertical or horizontal seam
-// at each step of the algorithm. The seam with the minimum energy is chosen.
-
-/* Example usage:
-./SeamCarvingExample Input/QB_Suburb.png Output/SeamCarvingExampleOutput.png 50
-*/
-
-
-#include "otbImage.h"
-#include "itkPolyLineParametricPath.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "itkUnaryFunctorImageFilter.h"
-#include "itkGradientMagnitudeImageFilter.h"
-#include "itkRescaleIntensityImageFilter.h"
-
-#include "otbDrawPathFilter.h"
-#include "otbImageToCarvingPathFilter.h"
-#include "otbRemoveCarvingPathFilter.h"
-
-#include "itkImageDuplicator.h"
-
-int main(int itkNotUsed(argc), char* argv[])
-{
-
-  typedef float         InputPixelType;
-  typedef unsigned char OutputPixelType;
-  const unsigned int    Dimension = 2;
-
-  typedef otb::Image<InputPixelType, Dimension>  ImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-  typedef itk::PolyLineParametricPath<Dimension> PathType;
-
-  typedef otb::ImageFileReader<ImageType>                              ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType>                        WriterType;
-  typedef itk::RescaleIntensityImageFilter<ImageType, OutputImageType> RescalerType;
-
-  ReaderType::Pointer   reader   = ReaderType::New();
-  WriterType::Pointer   writer   = WriterType::New();
-  RescalerType::Pointer rescaler = RescalerType::New();
-
-  const char* filenamereader = argv[1];
-  reader->SetFileName(filenamereader);
-
-  const char* filenamewriter = argv[2];
-  writer->SetFileName(filenamewriter);
-
-  int iteration = atoi(argv[3]);
-
-  // Energy is computed according to the gradient of the image, thus an
-  // \doxygen{itk}{GradientMagnitudeImageFilter} is instantiated
-
-  typedef itk::GradientMagnitudeImageFilter<ImageType, ImageType> GradientType;
-  GradientType::Pointer                                           gradient = GradientType::New();
-
-  // The \doxygen{otb}{ImageToCarvingPathFilter} compute the seam of minimum
-  // energy according to lines or columns of the image. Later, as we will
-  //  choose the best option between the two, we need two of these filters.
-
-  typedef otb::ImageToCarvingPathFilter<ImageType, PathType> CarvingFilterType;
-  CarvingFilterType::Pointer                                 carvingFilterVert = CarvingFilterType::New();
-  CarvingFilterType::Pointer                                 carvingFilterHor  = CarvingFilterType::New();
-
-  // The \doxygen{otb}{RemoveCarvingPathFilter} will really resize the image
-  // deleting the path.
-
-  typedef otb::RemoveCarvingPathFilter<ImageType, PathType, ImageType> RemoveCarvingPathFilterType;
-  RemoveCarvingPathFilterType::Pointer                                 removeCarvingPath = RemoveCarvingPathFilterType::New();
-
-  // As we are going to iterate through the filters, we need to disconnect the
-  // pipeline at one point and store the image somewhere. For that purpose, we
-  // use an \doxygen{itk}{ImageDuplicator}
-
-  typedef itk::ImageDuplicator<ImageType> duplicatorType;
-  duplicatorType::Pointer                 duplicator = duplicatorType::New();
-
-  // Now that all elements have been instantiated, we start to plug the pipeline
-  // and to define the loop.
-
-  reader->Update();
-  duplicator->SetInputImage(reader->GetOutput());
-  duplicator->Update();
-
-  double energyVert, energyHor;
-
-  for (int i = 0; i < iteration; ++i)
-  {
-
-    gradient->SetInput(duplicator->GetOutput());
-
-    // Two carving filters processed the gradient image to find the minimum
-    // vertical seam and the minimum horizontal seam. Note that the
-    // \code{UpdateLargestPossibleRegion()} need to be used as the size of the
-    // input image will be different in each loop.
-
-    carvingFilterVert->SetInput(gradient->GetOutput());
-    carvingFilterVert->SetDirection(0);
-    carvingFilterVert->UpdateLargestPossibleRegion();
-    energyVert = carvingFilterVert->GetEnergyPerPix();
-
-    carvingFilterHor->SetInput(gradient->GetOutput());
-    carvingFilterHor->SetDirection(1);
-    carvingFilterHor->UpdateLargestPossibleRegion();
-    energyHor = carvingFilterHor->GetEnergyPerPix();
-
-    // The vertical or the horizontal seam with the minimal energy is chosen.
-
-    if (energyVert < energyHor)
-    {
-      removeCarvingPath->SetInput(duplicator->GetOutput());
-      removeCarvingPath->SetInputPath(carvingFilterVert->GetOutput());
-      removeCarvingPath->SetDirection(0);
-      removeCarvingPath->UpdateLargestPossibleRegion();
-    }
-    else
-    {
-      removeCarvingPath->SetInput(duplicator->GetOutput());
-      removeCarvingPath->SetInputPath(carvingFilterHor->GetOutput());
-      removeCarvingPath->SetDirection(1);
-      removeCarvingPath->UpdateLargestPossibleRegion();
-    }
-
-    // The duplicator filter keep the results for the next loop
-
-    duplicator->SetInputImage(removeCarvingPath->GetOutput());
-    duplicator->Update();
-  }
-
-  // Finally, the resulting image is saved on an image file as usual
-
-  rescaler->SetInput(duplicator->GetOutput());
-  writer->SetInput(rescaler->GetOutput());
-  writer->Update();
-
-  // Figure~\ref{fig:SEAMCARVING_FILTER} shows the result of applying
-  // the seam carving filter to a satellite image.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{QB_Suburb.eps}
-  // \includegraphics[width=0.38\textwidth]{SeamCarvingExampleOutput.eps}
-  // \itkcaption[Seam carving filter application]{Result of applying
-  // the \doxygen{otb}{ImageToCarvingPathFilter} followed by the
-  // \doxygen{otb}{RemoveCarvingPathFilter} to Quickbird
-  // image. From left to right : original image, reduced image removing the 50
-  // seams with the lowest energy.}
-  // \label{fig:SEAMCARVING_FILTER}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
-}
diff --git a/Examples/FeatureExtraction/SeamCarvingOtherExample.cxx b/Examples/FeatureExtraction/SeamCarvingOtherExample.cxx
deleted file mode 100644
index f8ac6e4e1b794f09b246ba2105d9dff9333d823b..0000000000000000000000000000000000000000
--- a/Examples/FeatureExtraction/SeamCarvingOtherExample.cxx
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-// This example illustrates the use of the \doxygen{otb}{AddCarvingPathFilter},
-// the opposite of the \doxygen{otb}{RemoveCarvingPathFilter}.
-//
-// Here, we use this filter combined with the \doxygen{otb}{DrawPathFilter} to
-// output the image with the removed seam in white.
-//
-// Most of the code is similar to the previous example.
-
-/* Example usage:
-./SeamCarvingOtherExample Input/QB_Suburb.png Output/SeamCarvingOtherExampleOutput.png 50
-*/
-
-
-#include "otbImage.h"
-#include "itkPolyLineParametricPath.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "itkUnaryFunctorImageFilter.h"
-#include "itkRescaleIntensityImageFilter.h"
-#include "itkGradientMagnitudeImageFilter.h"
-
-#include "otbDrawPathFilter.h"
-#include "otbImageToCarvingPathFilter.h"
-#include "otbRemoveCarvingPathFilter.h"
-#include "otbAddCarvingPathFilter.h"
-
-#include "itkImageDuplicator.h"
-#include "otbObjectList.h"
-
-int main(int itkNotUsed(argc), char* argv[])
-{
-
-  typedef float         InputPixelType;
-  typedef unsigned char OutputPixelType;
-  const unsigned int    Dimension = 2;
-
-  typedef otb::Image<InputPixelType, Dimension>  ImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-  typedef itk::PolyLineParametricPath<Dimension> PathType;
-
-  // We need to define a list to keep the path in memory until the end of
-  // the seam carving process. This is done using an \doxygen{otb}{ObjectList}
-
-  typedef otb::ObjectList<PathType> PathListType;
-  PathListType::Pointer             pathList = PathListType::New();
-
-  typedef otb::ImageFileReader<ImageType>                              ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType>                        WriterType;
-  typedef itk::RescaleIntensityImageFilter<ImageType, OutputImageType> RescalerType;
-
-  ReaderType::Pointer   reader   = ReaderType::New();
-  WriterType::Pointer   writer   = WriterType::New();
-  RescalerType::Pointer rescaler = RescalerType::New();
-
-  const char* filenamereader = argv[1];
-  reader->SetFileName(filenamereader);
-
-  const char* filenamewriter = argv[2];
-  writer->SetFileName(filenamewriter);
-
-  int iteration = atoi(argv[3]);
-
-  // We instantiate the different filters of the pipeline as before.
-
-  typedef itk::GradientMagnitudeImageFilter<ImageType, ImageType> GradientType;
-  GradientType::Pointer                                           gradient = GradientType::New();
-
-  typedef otb::ImageToCarvingPathFilter<ImageType, PathType> CarvingFilterType;
-  CarvingFilterType::Pointer                                 carvingFilter = CarvingFilterType::New();
-
-  typedef otb::DrawPathFilter<ImageType, PathType, ImageType> DrawPathFilterType;
-  DrawPathFilterType::Pointer                                 drawPathFilter = DrawPathFilterType::New();
-
-  typedef otb::RemoveCarvingPathFilter<ImageType, PathType, ImageType> RemoveCarvingPathFilterType;
-  RemoveCarvingPathFilterType::Pointer                                 removeCarvingPath = RemoveCarvingPathFilterType::New();
-
-  typedef otb::AddCarvingPathFilter<ImageType, PathType, ImageType> AddCarvingPathFilterType;
-  AddCarvingPathFilterType::Pointer                                 addCarvingPath = AddCarvingPathFilterType::New();
-
-  typedef itk::ImageDuplicator<ImageType> duplicatorType;
-  duplicatorType::Pointer                 duplicator = duplicatorType::New();
-  reader->Update();
-  duplicator->SetInputImage(reader->GetOutput());
-  duplicator->Update();
-
-  // The loop to shorten the image is similar to the previous one. Here we
-  // decide to remove alternatively one vertical and one horizontal seam. At
-  // each iteration, we save the seam on the list using the \code{PushBack()}
-  // method.
-
-  for (int i = 0; i < iteration; ++i)
-  {
-
-    gradient->SetInput(duplicator->GetOutput());
-
-    carvingFilter->SetInput(gradient->GetOutput());
-    carvingFilter->SetDirection(i % 2);
-
-    removeCarvingPath->SetInput(duplicator->GetOutput());
-    removeCarvingPath->SetInputPath(carvingFilter->GetOutput());
-    removeCarvingPath->SetDirection(i % 2);
-    removeCarvingPath->UpdateLargestPossibleRegion();
-
-    pathList->PushBack(carvingFilter->GetOutput());
-    carvingFilter->GetOutput()->DisconnectPipeline();
-
-    duplicator->SetInputImage(removeCarvingPath->GetOutput());
-    duplicator->Update();
-  }
-
-  // The next loop will put back the seam using the
-  // \doxygen{otb}{AddCarvingPathFilter} and drawing it with the
-  // \doxygen{otb}{DrawPathFilter}.
-
-  for (int i = iteration - 1; i >= 0; i--)
-  {
-
-    addCarvingPath->SetInput(duplicator->GetOutput());
-    addCarvingPath->SetInputPath(pathList->GetNthElement(i));
-    addCarvingPath->SetDirection(i % 2);
-    addCarvingPath->UpdateLargestPossibleRegion();
-
-    drawPathFilter->SetInput(addCarvingPath->GetOutput());
-    drawPathFilter->SetInputPath(pathList->GetNthElement(i));
-    drawPathFilter->UpdateLargestPossibleRegion();
-
-    duplicator->SetInputImage(drawPathFilter->GetOutput());
-    duplicator->Update();
-  }
-
-  // Finally, the resulting image is saved on an image file as usual
-
-  rescaler->SetInput(duplicator->GetOutput());
-  writer->SetInput(rescaler->GetOutput());
-  writer->Update();
-
-  // Figure~\ref{fig:SEAMCARVING2_FILTER} shows the result of applying
-  // the seam carving filter to a satellite image.
-  // \begin{figure}
-  // \center
-  // \includegraphics[width=0.44\textwidth]{QB_Suburb.eps}
-  // \includegraphics[width=0.44\textwidth]{SeamCarvingOtherExampleOutput.eps}
-  // \itkcaption[Seam carving filter application]{Illustration of the minimum
-  // seams alternatively vertical and horizontal on a Quickbird
-  // image. From left to right : original image, image with the 25 vertical
-  // seams and the 25 horizontal seams.}
-  // \label{fig:SEAMCARVING2_FILTER}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
-}
diff --git a/Examples/FeatureExtraction/test/CMakeLists.txt b/Examples/FeatureExtraction/test/CMakeLists.txt
index 0f1e957d04e949f5bcf3d51906014e7fc2e0061e..bea835448e0a05ee71769a08dbca9cb19dbef7e4 100644
--- a/Examples/FeatureExtraction/test/CMakeLists.txt
+++ b/Examples/FeatureExtraction/test/CMakeLists.txt
@@ -90,54 +90,6 @@ otb_add_test(NAME feTeRatioLineDetectorExampleTest COMMAND ${OTB_TEST_DRIVER}
     5 1
 )
 
-# ------- RoadExtractionExamplesTest----------
-
-
-otb_add_test(NAME feTeExtractRoadByStepsExampleTest COMMAND ${OTB_TEST_DRIVER}
-  --compare-n-images ${NOTOL} 2
-    ${BASELINE}/qb_ExtractRoad_pretty.png
-    ${TEMP}/qb_ExtractRoad_pretty.png
-    ${BASELINE}/ExtractRoadByStepsExampleOutput.png
-    ${TEMP}/ExtractRoadByStepsExampleOutput.png
-  Execute $<TARGET_FILE:ExtractRoadByStepsExample>
-    ${INPUTDATA}/qb_RoadExtract.tif
-    ${TEMP}/ExtractRoadByStepsExampleOutput.png
-    ${TEMP}/qb_ExtractRoad_pretty.png
-    337 557 432 859 0.00005 1.0
-)
-
-
-otb_add_test(NAME feTeExtractRoadExampleTest COMMAND ${OTB_TEST_DRIVER}
-  --compare-image ${NOTOL}
-    ${BASELINE}/ExtractRoadExampleOutput.png
-    ${TEMP}/ExtractRoadExampleOutput.png
-  Execute $<TARGET_FILE:ExtractRoadExample>
-    ${INPUTDATA}/qb_RoadExtract.tif
-    ${TEMP}/ExtractRoadExampleOutput.png
-    337 557 432 859 1.0 0.00005 1.0 0.39269 1.0 10.0 25.
-)
-
-# ------- SeamCarvingExamplesTest----------
-
-otb_add_test(NAME feTeSeamCarvingExampleTest COMMAND ${OTB_TEST_DRIVER}
-  --compare-image ${NOTOL}
-    ${BASELINE}/SeamCarvingExampleOutput.png
-    ${TEMP}/SeamCarvingExampleOutput.png
-  Execute $<TARGET_FILE:SeamCarvingExample>
-    ${INPUTDATA}/QB_Suburb.png
-    ${TEMP}/SeamCarvingExampleOutput.png
-    50
-)
-
-otb_add_test(NAME feTeSeamCarvingOtherExampleTest COMMAND ${OTB_TEST_DRIVER}
-  --compare-image ${NOTOL}
-    ${BASELINE}/SeamCarvingOtherExampleOutput.png
-    ${TEMP}/SeamCarvingOtherExampleOutput.png
-  Execute $<TARGET_FILE:SeamCarvingOtherExample>
-    ${INPUTDATA}/QB_Suburb.png
-    ${TEMP}/SeamCarvingOtherExampleOutput.png
-    50
-)
 
 #otb_add_test(NAME feTeImageToSIFTKeyPointSetFilterTest COMMAND ${OTB_TEST_DRIVER}
 #        --compare-image ${NOTOL}
diff --git a/Examples/OBIA/LabelMapToVectorData.cxx b/Examples/OBIA/LabelMapToVectorData.cxx
index 001d38ecf9d139292dbcf9ffda681be03a85e87c..2f2a1423404845c1fd60146b0e0ae5524472ee87 100644
--- a/Examples/OBIA/LabelMapToVectorData.cxx
+++ b/Examples/OBIA/LabelMapToVectorData.cxx
@@ -20,7 +20,7 @@
 
 
 /* Example usage:
-./LabelMapToVectorData Input/rcc8_mire1.png Output/rcc8_mire2_vectorizer.shp
+./LabelMapToVectorData Input/labelImage_UnsignedChar.tif Output/LabelMapToVectorData.shp
 */
 
 
diff --git a/Examples/OBIA/RadiometricAttributesLabelMapFilterExample.cxx b/Examples/OBIA/RadiometricAttributesLabelMapFilterExample.cxx
index 9991cf7db9e6627f3341c92a2908829044d33509..1ab6443c048376eafa4f9cbd31dabafba345711c 100644
--- a/Examples/OBIA/RadiometricAttributesLabelMapFilterExample.cxx
+++ b/Examples/OBIA/RadiometricAttributesLabelMapFilterExample.cxx
@@ -107,7 +107,7 @@ int main(int argc, char* argv[])
   typedef otb::BandsStatisticsAttributesLabelMapFilter<LabelMapType, VectorImageType> RadiometricLabelMapFilterType;
   typedef otb::AttributesMapOpeningLabelMapFilter<LabelMapType>                       OpeningLabelMapFilterType;
   typedef itk::LabelMapToBinaryImageFilter<LabelMapType, MaskImageType>               LabelMapToBinaryImageFilterType;
-  typedef itk::UnaryFunctorImageFilter<VectorImageType, ImageType,otb::Functor::NDVI<PixelType,PixelType,PixelType> > NDVIImageFilterType;
+  typedef itk::UnaryFunctorImageFilter<VectorImageType, ImageType, otb::Functor::NDVI<PixelType, PixelType>> NDVIImageFilterType;
   typedef otb::ImageToVectorImageCastFilter<ImageType, VectorImageType>   ImageToVectorImageCastFilterType;
 
   ReaderType::Pointer reader = ReaderType::New();
@@ -166,8 +166,8 @@ int main(int argc, char* argv[])
   //  In our case, statistics are computed on the NDVI coefficient on each label object.
   NDVIImageFilterType::Pointer ndviImageFilter = NDVIImageFilterType::New();
 
-  ndviImageFilter->GetFunctor().SetRedIndex(3);
-  ndviImageFilter->GetFunctor().SetNIRIndex(4);
+  ndviImageFilter->GetFunctor().SetBandIndex(CommonBandNames::RED, 3);
+  ndviImageFilter->GetFunctor().SetBandIndex(CommonBandNames::NIR, 4);
   ndviImageFilter->SetInput(vreader->GetOutput());
 
   ImageToVectorImageCastFilterType::Pointer ndviVectorImageFilter = ImageToVectorImageCastFilterType::New();
diff --git a/Examples/OBIA/test/CMakeLists.txt b/Examples/OBIA/test/CMakeLists.txt
index 49cb2f872e107f61111f8f8de573c974f6c1badb..563fdaf61883ef675fe38633608791d02554e5d8 100644
--- a/Examples/OBIA/test/CMakeLists.txt
+++ b/Examples/OBIA/test/CMakeLists.txt
@@ -42,6 +42,6 @@ set(INPUTDATA ${OTB_DATA_ROOT}/Input)
 
 otb_add_test(NAME trTeLabelMapToVectorData COMMAND ${OTB_TEST_DRIVER}
   Execute $<TARGET_FILE:LabelMapToVectorData>
-    ${INPUTDATA}/rcc8_mire1.png
-    ${TEMP}/rcc8_mire2_vectorizer.shp
+    ${INPUTDATA}/labelImage_UnsignedChar.tif
+    ${TEMP}/trTeLabelMapToVectorDataOutput.shp
 )
diff --git a/Examples/Projections/OrthoRectificationExample.cxx b/Examples/Projections/OrthoRectificationExample.cxx
index 93bfecc1681ac8d3c5093c9f74664ca97c50c369..e3a2f4d1c5cdaf2a682c9b2bbc516f970134aba5 100644
--- a/Examples/Projections/OrthoRectificationExample.cxx
+++ b/Examples/Projections/OrthoRectificationExample.cxx
@@ -23,7 +23,7 @@
 #include "otbImageFileWriter.h"
 
 // This example demonstrates the use of the
-// \doxygen{otb}{OrthoRectificationFilter}. This filter is intended to
+// \doxygen{otb}{GenericRSResampleImageFilter}. This filter is intended to
 // orthorectify images which are in a distributor format with the
 // appropriate meta-data describing the sensor model. In this example,
 // we will choose to use an UTM projection for the output image.
@@ -32,7 +32,7 @@
 // proper header files: the one for the ortho-rectification filter and
 // the one defining the different projections available in OTB.
 
-#include "otbOrthoRectificationFilter.h"
+#include "otbGenericRSResampleImageFilter.h"
 #include "otbSpatialReference.h"
 
 int main(int argc, char* argv[])
@@ -66,15 +66,12 @@ int main(int argc, char* argv[])
   writer->SetFileName(argv[2]);
 
   // We can now proceed to declare the type for the ortho-rectification
-  // filter. The class \doxygen{otb}{OrthoRectificationFilter} is
-  // templated over the input and the output image types as well as over
-  // the cartographic projection. We define therefore the
-  // type of the projection we want, which is an UTM projection for this case.
-
-// Software Guide : BeginCodeSnippet
-  typedef otb::GenericMapProjection<otb::TransformDirection::FORWARD> MapProjectionType;
-  typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType,
-      MapProjectionType>
+  // filter. The class \doxygen{otb}{GenericRSResampleImageFilter} is
+  // templated over the input and the output image types.
+
+  // Software Guide : BeginCodeSnippet
+
+  typedef otb::GenericRSResampleImageFilter<VectorImageType, VectorImageType>
   OrthoRectifFilterType;
 
   OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New();
@@ -83,10 +80,9 @@ int main(int argc, char* argv[])
   // instantiate the map projection, set the {\em zone} and {\em hemisphere}
   // parameters and pass this projection to the orthorectification filter.
 
-  MapProjectionType::Pointer utmMapProjection = MapProjectionType::New();  
-  utmMapProjection->SetWkt(otb::SpatialReference::FromUTM(atoi(argv[3]),*argv[4]=='N'? otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt());
-  std::cout<<utmMapProjection->GetWkt()<<std::endl;
-  orthoRectifFilter->SetMapProjection(utmMapProjection);
+  std::string wkt = otb::SpatialReference::FromUTM(atoi(argv[3]),*argv[4]=='N'? otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt();
+  std::cout<<wkt<<std::endl;
+  orthoRectifFilter->SetOutputProjectionRef(wkt);
 
   // We then wire the input image to the orthorectification filter.
 
@@ -129,8 +125,6 @@ int main(int argc, char* argv[])
 
   writer->SetInput(orthoRectifFilter->GetOutput());
 
-  writer->SetAutomaticTiledStreaming();
-
   // Finally, we trigger the pipeline execution by calling the
   // \code{Update()} method on the writer. Please note that the
   // ortho-rectification filter is derived from the
diff --git a/Examples/Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndexImageFilter.cxx b/Examples/Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndexImageFilter.cxx
index 7f051c3e438c87c6dae83164058571601eccb65c..6845750ac2c420db14567e6aa6dc0c85b720072e 100644
--- a/Examples/Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndexImageFilter.cxx
+++ b/Examples/Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndexImageFilter.cxx
@@ -26,8 +26,7 @@
                                                         Output/pretty_ARVIMultiChannelRAndBAndNIRVegetationIndex.png \
                                                         1 \
                                                         3 \
-                                                        2 \
-                                                        0.6
+                                                        2
 */
 
 
@@ -87,11 +86,11 @@
 
 int main(int argc, char* argv[])
 {
-  if (argc < 8)
+  if (argc < 7)
   {
     std::cerr << "Missing Parameters " << std::endl;
     std::cerr << "Usage: " << argv[0];
-    std::cerr << " inputImage , outputImage , prettyInput , prettyOutput , redChannel , blueChannel , nirChannel , gama" << std::endl;
+    std::cerr << " inputImage , outputImage , prettyInput , prettyOutput , redChannel , blueChannel , nirChannel" << std::endl;
     return 1;
   }
 
@@ -114,7 +113,7 @@ int main(int argc, char* argv[])
   // Note that we also can use other functors which operate with the
   // Red, Blue and Nir channels such as EVI, ARVI and TSARVI.
 
-  typedef otb::Functor::ARVI<InputPixelType, InputPixelType, InputPixelType, OutputPixelType> FunctorType;
+  typedef otb::Functor::ARVI<InputPixelType, OutputPixelType> FunctorType;
 
   // The
   // \doxygen{itk}{UnaryFunctorImageFilter}
@@ -134,17 +133,9 @@ int main(int argc, char* argv[])
   writer->SetFileName(argv[2]);
 
   // The three used index bands (red, blue and NIR) are declared.
-
-  filter->GetFunctor().SetRedIndex(::atoi(argv[5]));
-  filter->GetFunctor().SetBlueIndex(::atoi(argv[6]));
-  filter->GetFunctor().SetNIRIndex(::atoi(argv[7]));
-
-  // The $\gamma$ parameter is set. The
-  // \doxygen{otb::Functor}{ARVI}
-  // class sets the default value of $\gamma$ to $0.5$.  This parameter
-  // is used to reduce the atmospheric effect on a global scale.
-
-  filter->GetFunctor().SetGamma(::atof(argv[8]));
+  filter->GetFunctor().SetBandIndex(CommonBandNames::RED, ::atoi(argv[5]));
+  filter->GetFunctor().SetBandIndex(CommonBandNames::BLUE, ::atoi(argv[6]));
+  filter->GetFunctor().SetBandIndex(CommonBandNames::NIR, ::atoi(argv[7]));
 
   // The filter input is linked to the reader output and
   // the filter output is linked to the writer input.
diff --git a/Examples/Radiometry/AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter.cxx b/Examples/Radiometry/AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter.cxx
index 68653b4e0d5bb5a4a17e240bb6068bb8f94264e1..d42f8cd56e1227d88f1fe1b8bd956538a4bb80aa 100644
--- a/Examples/Radiometry/AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter.cxx
+++ b/Examples/Radiometry/AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter.cxx
@@ -26,10 +26,7 @@
                                                        Output/pretty_AVIMultiChannelRAndGAndNIRVegetationIndex.png \
                                                        3 \
                                                        2 \
-                                                       4 \
-                                                       660 \
-                                                       560 \
-                                                       830
+                                                       4
 */
 
 
@@ -76,12 +73,11 @@
 
 int main(int argc, char* argv[])
 {
-  if (argc < 11)
+  if (argc < 8)
   {
     std::cerr << "Missing Parameters " << std::endl;
     std::cerr << "Usage: " << argv[0];
-    std::cerr << " inputImage , outputImage , prettyInput , prettyOutput , redChannel , greenChannel , nirChannel ,";
-    std::cerr << " lambdaR, lambdaG, lambdaNIR " << std::endl;
+    std::cerr << " inputImage , outputImage , prettyInput , prettyOutput , redChannel , greenChannel , nirChannel ," << std::endl;
     return 1;
   }
 
@@ -102,7 +98,7 @@ int main(int argc, char* argv[])
   // The AVI (Angular Vegetation Index) is
   // instantiated using the image pixel types as template parameters.
 
-  typedef otb::Functor::AVI<InputPixelType, InputPixelType, InputPixelType, OutputPixelType> FunctorType;
+  typedef otb::Functor::AVI<InputPixelType, OutputPixelType> FunctorType;
 
   // The
   // \doxygen{itk}{UnaryFunctorImageFilter}
@@ -123,18 +119,9 @@ int main(int argc, char* argv[])
 
   // The three used index bands (red, green and NIR) are declared.
 
-  filter->GetFunctor().SetRedIndex(::atoi(argv[5]));
-  filter->GetFunctor().SetGreenIndex(::atoi(argv[6]));
-  filter->GetFunctor().SetNIRIndex(::atoi(argv[7]));
-
-  // The $\lambda$ R, G and NIR parameters are set. The
-  // \doxygen{otb::Functor}{AVI}
-  // class sets the default values of $\lambda$ to $660$, $560$ and
-  // $830$.
-
-  filter->GetFunctor().SetLambdaR(::atof(argv[8]));
-  filter->GetFunctor().SetLambdaG(::atof(argv[9]));
-  filter->GetFunctor().SetLambdaNir(::atof(argv[10]));
+  filter->GetFunctor().SetBandIndex(CommonBandNames::RED, ::atoi(argv[5]));
+  filter->GetFunctor().SetBandIndex(CommonBandNames::GREEN, ::atoi(argv[6]));
+  filter->GetFunctor().SetBandIndex(CommonBandNames::NIR, ::atoi(argv[7]));
 
   // The filter input is linked to the reader output and
   // the filter output is linked to the writer input.
diff --git a/Examples/Radiometry/CMakeLists.txt b/Examples/Radiometry/CMakeLists.txt
index c33eed313333af0b2a675d1ef787e596ebe4a3d0..48af7c1d8fb654efb198553c3b648b932073c558 100644
--- a/Examples/Radiometry/CMakeLists.txt
+++ b/Examples/Radiometry/CMakeLists.txt
@@ -32,10 +32,6 @@ endif()
 add_executable(AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter.cxx)
 target_link_libraries(AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter ${OTB_LIBRARIES})
 
-add_executable(NDVIRAndNIRVegetationIndexImageFilter NDVIRAndNIRVegetationIndexImageFilter.cxx)
-target_link_libraries(NDVIRAndNIRVegetationIndexImageFilter ${OTB_LIBRARIES})
-
-
 if(BUILD_TESTING)
   add_subdirectory(test)
 endif()
diff --git a/Examples/Radiometry/NDVIRAndNIRVegetationIndexImageFilter.cxx b/Examples/Radiometry/NDVIRAndNIRVegetationIndexImageFilter.cxx
deleted file mode 100644
index d95aae28065d70a953109885e2f428fddc14f5a9..0000000000000000000000000000000000000000
--- a/Examples/Radiometry/NDVIRAndNIRVegetationIndexImageFilter.cxx
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-/* Example usage:
-./NDVIRAndNIRVegetationIndexImageFilter Input/NDVI_2.hdr \
-                                        Input/NDVI_3.hdr \
-                                        Output/NDVIRAndNIRVegetationIndex.tif \
-                                        Output/pretty_Red.png \
-                                        Output/pretty_NIR.png \
-                                        Output/pretty_NDVIRAndNIRVegetationIndex.png
-*/
-
-
-// \index{otb::VegetationIndicesFunctor}
-// \index{otb::VegetationIndicesFunctor!header}
-//
-// The following example illustrates the use of the
-// \doxygen{itk}{BinaryFunctorImageFilter} with the use of the Normalized
-// Difference Vegatation Index (NDVI).
-// NDVI computes the difference between the NIR channel, noted $L_{NIR}$, and the red channel,
-// noted $L_{r}$ radiances reflected from the surface and transmitted through the atmosphere:
-//
-// \begin{equation}
-// \mathbf{NDVI} = \frac{L_{NIR}-L_{r}}{L_{NIR}+L_{r}}
-// \end{equation}
-//
-//  \relatedClasses
-//  \begin{itemize}
-//  \item \subdoxygen{otb}{Functor}{RVI}
-//  \item \subdoxygen{otb}{Functor}{PVI}
-//  \item \subdoxygen{otb}{Functor}{SAVI}
-//  \item \subdoxygen{otb}{Functor}{TSAVI}
-//  \item \subdoxygen{otb}{Functor}{MSAVI}
-//  \item \subdoxygen{otb}{Functor}{GEMI}
-//  \item \subdoxygen{otb}{Functor}{WDVI}
-//  \item \subdoxygen{otb}{Functor}{IPVI}
-//  \item \subdoxygen{otb}{Functor}{TNDVI}
-//  \end{itemize}
-//
-// Let's look at the minimal code required to use this algorithm.
-
-#include "itkMacro.h"
-#include "otbImage.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "itkBinaryFunctorImageFilter.h"
-#include "otbVegetationIndicesFunctor.h"
-#include "itkRescaleIntensityImageFilter.h"
-
-int main(int argc, char* argv[])
-{
-  if (argc < 6)
-  {
-    std::cerr << "Missing Parameters " << std::endl;
-    std::cerr << "Usage: " << argv[0];
-    std::cerr << " inputImage1 , inputImage2 , outputImage , prettyinputImage1 , prettyinputImage2 , prettyOutput" << std::endl;
-    return 1;
-  }
-
-  // The image types are now defined using pixel types the
-  // dimension. Input and output images are defined as \doxygen{otb}{Image}.
-
-  const unsigned int                             Dimension = 2;
-  typedef double                                 InputPixelType;
-  typedef float                                  OutputPixelType;
-  typedef otb::Image<InputPixelType, Dimension>  InputRImageType;
-  typedef otb::Image<InputPixelType, Dimension>  InputNIRImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  // We instantiate reader and writer types
-  typedef otb::ImageFileReader<InputRImageType>   RReaderType;
-  typedef otb::ImageFileReader<InputNIRImageType> NIRReaderType;
-  typedef otb::ImageFileWriter<OutputImageType>   WriterType;
-
-  // The NDVI (Normalized Difference Vegetation Index) is instantiated using
-  // the images pixel type as template parameters. It is
-  // implemented as a functor class which will be passed as a
-  // parameter to an \doxygen{itk}{BinaryFunctorImageFilter}.
-
-  typedef otb::Functor::NDVI<InputPixelType, InputPixelType, OutputPixelType> FunctorType;
-
-  // The \doxygen{itk}{BinaryFunctorImageFilter} type is instantiated using the images
-  // types and the NDVI functor as template parameters.
-
-  typedef itk::BinaryFunctorImageFilter<InputRImageType, InputNIRImageType, OutputImageType, FunctorType> NDVIImageFilterType;
-
-  // Instantiating object
-  NDVIImageFilterType::Pointer filter            = NDVIImageFilterType::New();
-  RReaderType::Pointer                 readerR   = RReaderType::New();
-  NIRReaderType::Pointer               readerNIR = NIRReaderType::New();
-  WriterType::Pointer                  writer    = WriterType::New();
-
-  //  Now the input images are set and a name is given to the output image.
-
-  readerR->SetFileName(argv[1]);
-  readerNIR->SetFileName(argv[2]);
-  writer->SetFileName(argv[3]);
-
-  // We set the processing pipeline: filter inputs are linked to
-  // the reader output and the filter output is linked to the writer
-  // input.
-
-  filter->SetInput1(readerR->GetOutput());
-  filter->SetInput2(readerNIR->GetOutput());
-
-  writer->SetInput(filter->GetOutput());
-
-  // Invocation of the \code{Update()} method on the writer triggers the
-  // execution of the pipeline.  It is recommended to place \code{update()} calls in a
-  // \code{try/catch} block in case errors occur and exceptions are thrown.
-
-  try
-  {
-    writer->Update();
-  }
-  catch (itk::ExceptionObject& excep)
-  {
-    std::cerr << "Exception caught !" << std::endl;
-    std::cerr << excep << std::endl;
-  }
-  catch (...)
-  {
-    std::cout << "Unknown exception !" << std::endl;
-    return EXIT_FAILURE;
-  }
-
-  // Pretty image creation for the printing
-  typedef otb::Image<unsigned char, Dimension>                                       OutputPrettyImageType;
-  typedef otb::ImageFileWriter<OutputPrettyImageType>                                WriterPrettyType;
-  typedef itk::RescaleIntensityImageFilter<OutputImageType, OutputPrettyImageType>   RescalerType;
-  typedef itk::RescaleIntensityImageFilter<InputRImageType, OutputPrettyImageType>   RescalerRType;
-  typedef itk::RescaleIntensityImageFilter<InputNIRImageType, OutputPrettyImageType> RescalerNIRType;
-
-  RescalerType::Pointer     rescaler     = RescalerType::New();
-  WriterPrettyType::Pointer prettyWriter = WriterPrettyType::New();
-  rescaler->SetInput(filter->GetOutput());
-  rescaler->SetOutputMinimum(0);
-  rescaler->SetOutputMaximum(255);
-  prettyWriter->SetFileName(argv[6]);
-  prettyWriter->SetInput(rescaler->GetOutput());
-
-  RescalerRType::Pointer    rescalerR       = RescalerRType::New();
-  RescalerNIRType::Pointer  rescalerNIR     = RescalerNIRType::New();
-  WriterPrettyType::Pointer prettyWriterR   = WriterPrettyType::New();
-  WriterPrettyType::Pointer prettyWriterNIR = WriterPrettyType::New();
-  rescalerR->SetInput(readerR->GetOutput());
-  rescalerR->SetOutputMinimum(0);
-  rescalerR->SetOutputMaximum(255);
-  prettyWriterR->SetFileName(argv[4]);
-  prettyWriterR->SetInput(rescalerR->GetOutput());
-
-  rescalerNIR->SetInput(readerNIR->GetOutput());
-  rescalerNIR->SetOutputMinimum(0);
-  rescalerNIR->SetOutputMaximum(255);
-  prettyWriterNIR->SetFileName(argv[5]);
-  prettyWriterNIR->SetInput(rescalerNIR->GetOutput());
-
-  try
-  {
-    prettyWriter->Update();
-    prettyWriterNIR->Update();
-    prettyWriterR->Update();
-  }
-  catch (itk::ExceptionObject& excep)
-  {
-    std::cerr << "Exception caught !" << std::endl;
-    std::cerr << excep << std::endl;
-  }
-  catch (...)
-  {
-    std::cout << "Unknown exception !" << std::endl;
-    return EXIT_FAILURE;
-  }
-
-  // Let's now run this example using as input the images
-  // \code{NDVI\_3.hdr} and  \code{NDVI\_4.hdr} (images kindly and free of charge given by SISA and CNES)
-  // provided in the directory \code{Examples/Data}.
-  //
-  //
-  // \begin{figure} \center
-  // \includegraphics[width=0.24\textwidth]{pretty_Red.eps}
-  // \includegraphics[width=0.24\textwidth]{pretty_NIR.eps}
-  // \includegraphics[width=0.24\textwidth]{pretty_NDVIRAndNIRVegetationIndex.eps}
-  // \itkcaption[ARVI Example]{NDVI input images on the left (Red channel and NIR channel), on the right the result of the algorithm.}
-  // \label{fig:NDVIRAndNIRIndex}
-  // \end{figure}
-
-  return EXIT_SUCCESS;
-}
diff --git a/Examples/Radiometry/test/CMakeLists.txt b/Examples/Radiometry/test/CMakeLists.txt
index b30d3aa7ce82dc01e623f5bbd7efb4d843133498..4bd6befaff4c0b1de63209fcbf8f48bd55990365 100644
--- a/Examples/Radiometry/test/CMakeLists.txt
+++ b/Examples/Radiometry/test/CMakeLists.txt
@@ -35,7 +35,6 @@ otb_add_test(NAME raTeARVIMultiChannelRAndBAndNIRVegetationIndexImageFilterTest
     1
     2
     3
-    0.6 # Gamma parameter
 )
 
 # -------            AVIMultiChannelRAndGAndNIRVegetationIndexImageFilterTest   ------------------------------
@@ -52,24 +51,6 @@ otb_add_test(NAME raTeAVIMultiChannelRAndGAndNIRVegetationIndexImageFilterTest C
     3
     2
     4 # indices of the channels
-    660.
-    560.
-    830. # lambdaR, lambdaG, lambdaNir
-)
-
-# -------            NDVIRAndNIRVegetationIndexImageFilter   ------------------------------
-
-otb_add_test(NAME raTeNDVIRAndNIRVegetationIndexImageFilterTest COMMAND ${OTB_TEST_DRIVER}
-  --compare-image ${NOTOL}
-    ${BASELINE}/NDVIRAndNIRVegetationIndex.tif
-    ${TEMP}/NDVIRAndNIRVegetationIndex.tif
-  Execute $<TARGET_FILE:NDVIRAndNIRVegetationIndexImageFilter>
-    ${INPUTDATA}/poupees_sub_c1.png
-    ${INPUTDATA}/poupees_sub_c2.png
-    ${TEMP}/NDVIRAndNIRVegetationIndex.tif
-    ${TEMP}/NDVIRAndNIRVegetationIndex2.tif
-    ${TEMP}/NDVIRAndNIRVegetationIndex3.tif
-    ${TEMP}/NDVIRAndNIRVegetationIndex4.tif
 )
 
 if(OTBOpticalCalibration_LOADED)
@@ -103,4 +84,4 @@ otb_add_test(NAME raTeAtmosphericCorrectionSequencementTest COMMAND ${OTB_TEST_D
     2       # Radius;
     0.020   # pixel spacing in kilometers
 )
-endif()
\ No newline at end of file
+endif()
diff --git a/Examples/Simulation/LAIFromNDVIImageTransform.cxx b/Examples/Simulation/LAIFromNDVIImageTransform.cxx
index ec6dce3b1ce40748987273f04334b077785945a1..133e5dd6444ddfd50625cc421e9642dc5558bd98 100644
--- a/Examples/Simulation/LAIFromNDVIImageTransform.cxx
+++ b/Examples/Simulation/LAIFromNDVIImageTransform.cxx
@@ -64,8 +64,7 @@ int main(int argc, char* argv[])
   // Filter type is a generic \doxygen{itk}{UnaryFunctorImageFilter} using Formosat2 specific LAI
   //  \doxygen{otb}{LAIFromNDVIFormosat2Functor}.
 
-  typedef otb::Functor::LAIFromNDVIFormosat2Functor<InputImageType::InternalPixelType, InputImageType::InternalPixelType, OutputImageType::PixelType>
-                                                                                                 FunctorType;
+  typedef otb::Functor::LAIFromNDVIFormosat2Functor<InputImageType::InternalPixelType, OutputImageType::PixelType> FunctorType;
   typedef itk::UnaryFunctorImageFilter<InputImageType, OutputImageType, FunctorType> LAIFRomNDVIImageFilterType;
 
   // Instantiating object
@@ -96,8 +95,8 @@ int main(int argc, char* argv[])
   //
   unsigned int redChannel = static_cast<unsigned int>(atoi(argv[5]));
   unsigned int nirChannel = static_cast<unsigned int>(atoi(argv[6]));
-  filter->GetFunctor().SetRedIndex(redChannel);
-  filter->GetFunctor().SetNIRIndex(nirChannel);
+  filter->GetFunctor().SetBandIndex(CommonBandNames::RED, redChannel);
+  filter->GetFunctor().SetBandIndex(CommonBandNames::NIR, nirChannel);
 
   //  The invocation of the \code{Update()} method triggers the
   //  execution of the pipeline.
diff --git a/Examples/Tutorials/OrthoFusion.cxx b/Examples/Tutorials/OrthoFusion.cxx
index a94f608086de60b7907003cecca3822fee7ce8e4..c0ead29574f94efba0267646cbeea59af4162b45 100644
--- a/Examples/Tutorials/OrthoFusion.cxx
+++ b/Examples/Tutorials/OrthoFusion.cxx
@@ -28,8 +28,7 @@
 #include "otbImageFileReader.h"
 #include "otbImageFileWriter.h"
 
-#include "otbOrthoRectificationFilter.h"
-#include "otbGenericMapProjection.h"
+#include "otbGenericRSResampleImageFilter.h"
 
 #include "otbSimpleRcsPanSharpeningFusionImageFilter.h"
 #include "otbStandardFilterWatcher.h"
@@ -89,12 +88,9 @@ int main(int argc, char* argv[])
   // \item the hemisphere
   // \end{itemize}
 
-  typedef otb::GenericMapProjection<otb::TransformDirection::INVERSE> InverseProjectionType;
-  InverseProjectionType::Pointer utmMapProjection = InverseProjectionType::New();
-  utmMapProjection->SetWkt(
-    otb::SpatialReference::FromUTM(atoi(argv[4]),argv[5][0]=='N' ? 
+  std::string wkt = otb::SpatialReference::FromUTM(atoi(argv[4]),argv[5][0]=='N' ? 
       otb::SpatialReference::hemisphere::north : 
-      otb::SpatialReference::hemisphere::south).ToWkt());
+      otb::SpatialReference::hemisphere::south).ToWkt();
 
   //  We will need to pass several parameters to the orthorectification
   // concerning the desired output region:
@@ -118,10 +114,10 @@ int main(int argc, char* argv[])
   // We declare the orthorectification filter. And provide the different
   // parameters:
 
-  typedef otb::OrthoRectificationFilter<ImageType, DoubleImageType, InverseProjectionType> OrthoRectifFilterType;
+  typedef otb::GenericRSResampleImageFilter<ImageType, DoubleImageType> OrthoRectifFilterType;
 
   OrthoRectifFilterType::Pointer orthoRectifPAN = OrthoRectifFilterType::New();
-  orthoRectifPAN->SetMapProjection(utmMapProjection);
+  orthoRectifPAN->SetOutputProjectionRef(wkt);
 
   orthoRectifPAN->SetInput(readerPAN->GetOutput());
 
@@ -133,12 +129,12 @@ int main(int argc, char* argv[])
   // Now we are able to have the orthorectified area from the PAN image. We just
   // have to follow a similar process for the XS image.
 
-  typedef otb::OrthoRectificationFilter<VectorImageType, DoubleVectorImageType, InverseProjectionType> VectorOrthoRectifFilterType;
+  typedef otb::GenericRSResampleImageFilter<VectorImageType, DoubleVectorImageType> VectorOrthoRectifFilterType;
 
 
   VectorOrthoRectifFilterType::Pointer orthoRectifXS = VectorOrthoRectifFilterType::New();
 
-  orthoRectifXS->SetMapProjection(utmMapProjection);
+  orthoRectifXS->SetOutputProjectionRef(wkt);
 
   orthoRectifXS->SetInput(readerXS->GetOutput());
 
@@ -160,8 +156,6 @@ int main(int argc, char* argv[])
 
   writer->SetInput(fusion->GetOutput());
 
-  writer->SetAutomaticTiledStreaming();
-
   otb::StandardFilterWatcher watcher(writer, "OrthoFusion");
 
   writer->Update();
diff --git a/Modules/Adapters/GdalAdapters/src/otbSpatialReference.cxx b/Modules/Adapters/GdalAdapters/src/otbSpatialReference.cxx
index 012b04c2b6d78f9c1df7cebc4eee57bb7dd97682..19958c297110bb1920f4f547686e6dcfdb0daa14 100644
--- a/Modules/Adapters/GdalAdapters/src/otbSpatialReference.cxx
+++ b/Modules/Adapters/GdalAdapters/src/otbSpatialReference.cxx
@@ -200,7 +200,9 @@ unsigned int SpatialReference::ToEPSG() const
   
   OGRSpatialReferencePtr tmpSRS(m_SR->Clone());
 
+#if GDAL_VERSION_NUM < 2050000
   tmpSRS->Fixup();
+#endif
   tmpSRS->AutoIdentifyEPSG();
   
   const char * epsg = nullptr;
diff --git a/Modules/Applications/AppChangeDetection/app/otbMultivariateAlterationDetector.cxx b/Modules/Applications/AppChangeDetection/app/otbMultivariateAlterationDetector.cxx
index ab2f1476d26fe4d7b079cbaa702294487a2378f9..e5e0c6977a1a184c74f742c57c4fb26330cbb3fd 100644
--- a/Modules/Applications/AppChangeDetection/app/otbMultivariateAlterationDetector.cxx
+++ b/Modules/Applications/AppChangeDetection/app/otbMultivariateAlterationDetector.cxx
@@ -49,7 +49,6 @@ private:
     SetDescription("Change detection by Multivariate Alteration Detector (MAD) algorithm");
 
     // Documentation
-    SetDocName("Multivariate Alteration Detector");
     SetDocLongDescription("This application performs change detection between two multispectral"
                           " images using the Multivariate Alteration Detector (MAD) [1]"
                           " algorithm.\n\n"
diff --git a/Modules/Applications/AppClassification/app/CMakeLists.txt b/Modules/Applications/AppClassification/app/CMakeLists.txt
index b646618959248fab615337a300a67a254f1337b5..6fc42a4ee2c73a284a379f9763b170fac9b50093 100644
--- a/Modules/Applications/AppClassification/app/CMakeLists.txt
+++ b/Modules/Applications/AppClassification/app/CMakeLists.txt
@@ -48,11 +48,6 @@ otb_create_application(
   SOURCES        otbFusionOfClassifications.cxx
   LINK_LIBRARIES ${${otb-module}_LIBRARIES})
 
-otb_create_application(
-  NAME           ComputePolylineFeatureFromImage
-  SOURCES        otbComputePolylineFeatureFromImage.cxx
-  LINK_LIBRARIES ${${otb-module}_LIBRARIES})
-
 if(OTB_USE_SHARK)
   otb_create_application(
     NAME           KMeansClassification
@@ -71,13 +66,13 @@ otb_create_application(
   LINK_LIBRARIES ${${otb-module}_LIBRARIES})
 
 otb_create_application(
-  NAME           PredictRegression
-  SOURCES        otbPredictRegression.cxx
+  NAME           TrainVectorRegression
+  SOURCES        otbTrainVectorRegression.cxx
   LINK_LIBRARIES ${${otb-module}_LIBRARIES})
 
 otb_create_application(
-  NAME           DSFuzzyModelEstimation
-  SOURCES        otbDSFuzzyModelEstimation.cxx
+  NAME           PredictRegression
+  SOURCES        otbPredictRegression.cxx
   LINK_LIBRARIES ${${otb-module}_LIBRARIES})
 
 otb_create_application(
@@ -95,11 +90,6 @@ otb_create_application(
   SOURCES        otbComputeImagesStatistics.cxx
   LINK_LIBRARIES ${${otb-module}_LIBRARIES})
 
-otb_create_application(
-  NAME           VectorDataDSValidation
-  SOURCES        otbVectorDataDSValidation.cxx
-  LINK_LIBRARIES ${${otb-module}_LIBRARIES})
-
 otb_create_application(
   NAME           PolygonClassStatistics
   SOURCES        otbPolygonClassStatistics.cxx
diff --git a/Modules/Applications/AppClassification/app/otbClassificationMapRegularization.cxx b/Modules/Applications/AppClassification/app/otbClassificationMapRegularization.cxx
index 4738434b8d262648306d60099e7b0624a3bbb8af..516f3a47b0e2a1a6a5f0e1b72ea48dd4ea164a55 100644
--- a/Modules/Applications/AppClassification/app/otbClassificationMapRegularization.cxx
+++ b/Modules/Applications/AppClassification/app/otbClassificationMapRegularization.cxx
@@ -62,7 +62,6 @@ private:
     SetName("ClassificationMapRegularization");
     SetDescription("Filters the input labeled image using Majority Voting in a ball shaped neighbordhood");
 
-    SetDocName("Classification Map Regularization");
 
     SetDocLongDescription(
         "This application filters the input labeled image (with a maximal class label = 65535) using Majority Voting in a ball shaped neighbordhood."
diff --git a/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx b/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
index 55cf789574a84708deee3ed5aec82331f048be6c..6b6e55539e049d637baa59a75a8ac51794b61cc6 100644
--- a/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
+++ b/Modules/Applications/AppClassification/app/otbComputeConfusionMatrix.cxx
@@ -109,7 +109,6 @@ private:
   SetDescription("Computes the confusion matrix of a classification");
 
   // Documentation
-  SetDocName("Confusion matrix Computation");
   SetDocLongDescription("This application computes the confusion matrix of a classification map relative to a ground truth dataset. "
       "This ground truth can be given as a raster or a vector data. Only reference and produced pixels with values different "
       "from NoData are handled in the calculation of the confusion matrix. The confusion matrix is organized the following way: "
diff --git a/Modules/Applications/AppClassification/app/otbComputeImagesStatistics.cxx b/Modules/Applications/AppClassification/app/otbComputeImagesStatistics.cxx
index dbce1c90c2b953c1af3a4db343acf0513c671550..965f4fb135859a26baa3b4474449a1acd5240214 100644
--- a/Modules/Applications/AppClassification/app/otbComputeImagesStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbComputeImagesStatistics.cxx
@@ -48,7 +48,6 @@ private:
   void DoInit() override
   {
     SetName("ComputeImagesStatistics");
-    SetDocName("Compute Images second order statistics");
     SetDescription("Computes global mean and standard deviation for each band "
       "from a set of images and optionally saves the results in an XML file.");
     SetDocLongDescription("This application computes a global mean and standard deviation "
diff --git a/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx b/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
index d1542167271f7dce30240bef2b78809d1b67f2b1..c8b721a62b32d6cc73b19633b9f9b3adcc8830a7 100644
--- a/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbComputeOGRLayersFeaturesStatistics.cxx
@@ -51,7 +51,6 @@ private:
     SetName("ComputeOGRLayersFeaturesStatistics");
     SetDescription("Compute statistics of the features in a set of OGR Layers");
 
-    SetDocName("ComputeOGRLayersFeaturesStatistics");
     SetDocLongDescription("Compute statistics (mean and standard deviation) of the features in a set of OGR Layers, and write them in an XML file. This XML file can then be used by the training application.");
     SetDocLimitations("Experimental. For now only shapefiles are supported.");
     SetDocAuthors("David Youssefi during internship at CNES");
diff --git a/Modules/Applications/AppClassification/app/otbComputePolylineFeatureFromImage.cxx b/Modules/Applications/AppClassification/app/otbComputePolylineFeatureFromImage.cxx
deleted file mode 100644
index 919ad16354ffb3fbed8b08585e2d5c562c044955..0000000000000000000000000000000000000000
--- a/Modules/Applications/AppClassification/app/otbComputePolylineFeatureFromImage.cxx
+++ /dev/null
@@ -1,282 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <iostream>
-
-#include "otbVectorImage.h"
-
-#include "otbWrapperApplicationFactory.h"
-
-
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataFileWriter.h"
-#include "itkPreOrderTreeIterator.h"
-
-#include "otbVectorDataIntoImageProjectionFilter.h"
-#include "otbVectorDataTransformFilter.h"
-#include "itkAffineTransform.h"
-
-#include "otbParserConditionDataNodeFeatureFunction.h"
-#include "otbNDVIDataNodeFeatureFunction.h"
-
-// Elevation handler
-#include "otbWrapperElevationParametersHandler.h"
-
-namespace otb
-{
-namespace Wrapper
-{
-
-class ComputePolylineFeatureFromImage: public Application
-{
-public:
-  /** Standard class typedefs. */
-  typedef ComputePolylineFeatureFromImage Self;
-  typedef Application Superclass;
-  typedef itk::SmartPointer<Self> Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  // Images
-  typedef FloatVectorImageType::PixelType PixelType;
-  typedef FloatVectorImageType ImageType;
-
-  // VectorData
-  typedef VectorData<> VectorDataType;
-  typedef VectorDataType::DataNodeType DataNodeType;
-  typedef DataNodeType::ValuePrecisionType PrecisionType;
-  typedef DataNodeType::PrecisionType CoordRepType;
-  typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> TreeIteratorType;
-  typedef VectorDataIntoImageProjectionFilter<VectorDataType, ImageType> VectorDataIntoImageProjType;
-  typedef VectorDataProjectionFilter<VectorDataType, VectorDataType> VectorDataProjectionFilterType;
-
-  typedef ParserConditionDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType>
-      ParserConditionFeatureFunctionType;
-
-  /** Standard macro */
-  itkNewMacro(Self)
-;
-
-  itkTypeMacro(ComputePolylineFeatureFromImage, otb::Application)
-;
-
-private:
-  void DoInit() override
-  {
-    SetName("ComputePolylineFeatureFromImage");
-    SetDescription("This application computes the chosen descriptors for each studied polyline contained in the input VectorData.");
-
-    SetDocName("Compute Polyline Feature From Image");
-    SetDocLongDescription("The first step in the classifier fusion based validation is to compute the chosen descriptors for each studied polyline.");
-    SetDocLimitations("Since it does not rely on streaming process, take care of the size of input image before launching application.");
-    SetDocAuthors("OTB-Team");
-    SetDocSeeAlso(" ");
-    AddDocTag(Tags::FeatureExtraction);
-
-    AddParameter(ParameterType_InputImage, "in", "Input Image");
-    SetParameterDescription("in", "An image to compute the descriptors on.");
-
-    AddParameter(ParameterType_InputVectorData, "vd", "Vector Data");
-    SetParameterDescription("vd", "Vector data containing the polylines where the features will be computed.");
-
-    // Elevation
-    ElevationParametersHandler::AddElevationParameters(this, "elev");
-
-    AddParameter(ParameterType_String, "expr", "Feature expression");
-    SetParameterDescription("expr", "The feature formula (b1 < 0.3) where b1 is the standard name of input image first band");
-
-    AddParameter(ParameterType_String, "field", "Feature name");
-    SetParameterDescription("field", "The field name corresponding to the feature codename (NONDVI, ROADSA...)");
-
-    AddParameter(ParameterType_OutputVectorData, "out", "Output Vector Data");
-    SetParameterDescription("out", "The output vector data containing polylines with a new field");
-
-    // Doc example parameter settings
-    SetDocExampleParameterValue("in", "NDVI.TIF");
-    SetDocExampleParameterValue("vd", "roads_ground_truth.shp");
-    SetDocExampleParameterValue("expr", "\"(b1 > 0.4)\"");
-    SetDocExampleParameterValue("field", "NONDVI");
-    SetDocExampleParameterValue("out", "PolylineFeatureFromImage_LI_NONDVI_gt.shp");
-
-    SetOfficialDocLink();
-  }
-
-  void DoUpdateParameters() override
-  {
-    // Nothing to do here : all parameters are independent
-  }
-
-  void DoExecute() override
-  {
-    // Vector Data into Image projection
-    FloatVectorImageType::Pointer inImage = GetParameterImage("in");
-
-    inImage->UpdateOutputInformation();
-    try
-      {
-      inImage->Update();
-      }
-    catch (...)
-      {
-      itkGenericExceptionMacro(<< "Error during image update, maybe your image is to big.");
-      }
-
-    otbAppLogDEBUG( << "Starting PolylineFeature extraction process" )
-
-    // Vector Data into Image projection
-    //// Read the Vectordata
-
-    VectorDataType* inVectorData = GetParameterVectorData("vd");
-    inVectorData->Update();
-    //// Projection
-    VectorDataIntoImageProjType::Pointer vprojIm = VectorDataIntoImageProjType::New();
-    vprojIm->SetInputVectorData(inVectorData);
-    vprojIm->SetInputImage(inImage);
-
-    // Setup the DEM Handler
-    otb::Wrapper::ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(this,"elev");
-
-    vprojIm->SetUseOutputSpacingAndOriginFromImage(true); // we want index as input;
-    vprojIm->Update();
-
-    // Add description
-    ParserConditionFeatureFunctionType::Pointer vdescriptor = ParserConditionFeatureFunctionType::New();
-    vdescriptor->SetExpression(GetParameterString("expr"));
-    vdescriptor->SetInputImage(inImage);
-
-    m_OutVectorData = VectorDataType::New();
-    // Retrieving root node
-    DataNodeType::Pointer root = m_OutVectorData->GetDataTree()->GetRoot()->Get();
-    // Create the document node
-    DataNodeType::Pointer document = DataNodeType::New();
-    document->SetNodeType(otb::DOCUMENT);
-    // Adding the layer to the data tree
-    m_OutVectorData->GetDataTree()->Add(document, root);
-    // Create the folder node
-    DataNodeType::Pointer folder = DataNodeType::New();
-    folder->SetNodeType(otb::FOLDER);
-    // Adding the layer to the data tree
-    m_OutVectorData->GetDataTree()->Add(folder, document);
-
-    TreeIteratorType itVector(vprojIm->GetOutput()->GetDataTree());
-    itVector.GoToBegin();
-
-    while (!itVector.IsAtEnd())
-      {
-      vdescriptor->SetInputImage(inImage);
-      if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder())
-        {
-        DataNodeType::Pointer currentGeometry = itVector.Get();
-        currentGeometry->SetFieldAsDouble(GetParameterString("field"),
-                                          (double) (vdescriptor->Evaluate(*(currentGeometry.GetPointer()))[0]));
-        m_OutVectorData->GetDataTree()->Add(currentGeometry, folder);
-        }
-      ++itVector;
-      }
-
-    /*
-     * Reprojection of the output VectorData
-     *
-     * The output of VectorDataToRoadDescription is in image index coordinates
-     *
-     * 3 cases :
-     * - input image has no geo-information : pass through
-     * - input image is in cartographic projection : apply image spacing and origin, and set the ProjectionRef
-     * - input image is in sensor model geometry : reproject in WGS84
-     *
-     */
-
-    std::string projRef = inImage->GetProjectionRef();
-    ImageKeywordlist kwl;
-    itk::ExposeMetaData<ImageKeywordlist>(inImage->GetMetaDataDictionary(), MetaDataKey::OSSIMKeywordlistKey, kwl);
-
-    if (!projRef.empty())
-      {
-      // image is in cartographic projection
-      // apply spacing and origin + set projection WKT
-      // The VectorData in output of the chain is in image index coordinate,
-      // and the projection information is lost
-      // Apply an affine transform to apply image origin and spacing,
-      // and arbitrarily set the ProjectionRef to the input image ProjectionRef
-
-      typedef itk::AffineTransform<VectorDataType::PrecisionType, 2> TransformType;
-      typedef otb::VectorDataTransformFilter<VectorDataType, VectorDataType> VDTransformType;
-
-      TransformType::ParametersType params;
-      params.SetSize(6);
-      params[0] = inImage->GetSignedSpacing()[0];
-      params[1] = 0;
-      params[2] = 0;
-      params[3] = inImage->GetSignedSpacing()[1];
-      params[4] = inImage->GetOrigin()[0];
-      params[5] = inImage->GetOrigin()[1];
-
-      TransformType::Pointer transform = TransformType::New();
-      transform->SetParameters(params);
-
-      VDTransformType::Pointer vdTransform = VDTransformType::New();
-      vdTransform->SetTransform(transform);
-      vdTransform->SetInput(m_OutVectorData);
-      vdTransform->Update();
-
-      m_ProjectedVectorData = vdTransform->GetOutput();
-
-      m_ProjectedVectorData->SetProjectionRef(inImage->GetProjectionRef());
-      }
-    else
-      if (kwl.GetSize() > 0)
-        {
-        // image is in sensor model geometry
-
-        // Reproject VectorData in image projection
-        VectorDataProjectionFilterType::Pointer vproj = VectorDataProjectionFilterType::New();
-        vproj->SetInput(m_OutVectorData);
-
-        vproj->SetOutputKeywordList(inImage->GetImageKeywordlist());
-        vproj->SetOutputProjectionRef(inImage->GetProjectionRef());
-        vproj->SetOutputOrigin(inImage->GetOrigin());
-        vproj->SetOutputSpacing(inImage->GetSignedSpacing());
-
-        // Setup the DEM Handler
-        otb::Wrapper::ElevationParametersHandler::SetupDEMHandlerFromElevationParameters(this,"elev");
-
-        vproj->Update();
-        m_ProjectedVectorData = vproj->GetOutput();
-        }
-      else
-        {
-        // no georeferencing information
-        m_ProjectedVectorData = m_OutVectorData;
-        }
-
-    // Set the output vectorData
-    SetParameterOutputVectorData("out", m_ProjectedVectorData);
-
-  };
-
-  VectorDataType::Pointer m_ProjectedVectorData;
-  VectorDataType::Pointer m_OutVectorData;
-
-};
-
-}
-}
-
-OTB_APPLICATION_EXPORT(otb::Wrapper::ComputePolylineFeatureFromImage)
-
-
diff --git a/Modules/Applications/AppClassification/app/otbDSFuzzyModelEstimation.cxx b/Modules/Applications/AppClassification/app/otbDSFuzzyModelEstimation.cxx
deleted file mode 100644
index 2804718d78036f2a3c21a8c1661a948b2538b8a4..0000000000000000000000000000000000000000
--- a/Modules/Applications/AppClassification/app/otbDSFuzzyModelEstimation.cxx
+++ /dev/null
@@ -1,451 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <iostream>
-
-#include "otbWrapperApplication.h"
-#include "otbWrapperApplicationFactory.h"
-#include "otbWrapperStringListParameter.h"
-#include "otbImageToEnvelopeVectorDataFilter.h"
-#include "otbVectorDataToRandomLineGenerator.h"
-#include "itkAmoebaOptimizer.h"
-#include "otbStandardDSCostFunction.h"
-
-
-namespace otb
-{
-
-namespace Wrapper
-{
-
-#include "itkCommand.h"
-class CommandIterationUpdate : public itk::Command
-{
-public:
-typedef  CommandIterationUpdate   Self;
-typedef  itk::Command             Superclass;
-typedef itk::SmartPointer<Self>   Pointer;
-itkNewMacro( Self );
-protected:
-CommandIterationUpdate() {};
-public:
-typedef itk::AmoebaOptimizer         OptimizerType;
-typedef   const OptimizerType   *    OptimizerPointer;
-
-
-void Execute(itk::Object *caller, const itk::EventObject & event) override
-{
-  Execute( (const itk::Object *)caller, event);
-}
-
-void Execute(const itk::Object * object, const itk::EventObject & event) override
-{
-  OptimizerPointer optimizer =
-      dynamic_cast< OptimizerPointer >( object );
-  if( ! itk::IterationEvent().CheckEvent( &event ) )
-    {
-    return;
-    }
-  std::ostringstream message;
-  message << optimizer->GetCachedValue() << "   ";
-  message << optimizer->GetCachedCurrentPosition() << std::endl;
-  std::cout<<message.str()<<std::endl;
-}
-
-
-};
-
-
-class DSFuzzyModelEstimation: public Application
-{
-public:
-  /** Standard class typedefs. */
-  typedef DSFuzzyModelEstimation Self;
-  typedef Application Superclass;
-  typedef itk::SmartPointer<Self> Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-  typedef VectorData<double>                          VectorDataType;
-
-  typedef VectorDataType::DataTreeType                DataTreeType;
-  typedef VectorDataType::DataNodeType                DataNodeType;
-
-  typedef VectorDataType::ValuePrecisionType          PrecisionType;
-  typedef VectorDataType::PrecisionType               CoordRepType;
-
-  typedef otb::Wrapper::StringListParameter::StringListType         StringListType;
-
-  typedef otb::VectorDataToDSValidatedVectorDataFilter<VectorDataType, PrecisionType>
-                                                            ValidationFilterType;
-  typedef otb::StandardDSCostFunction<ValidationFilterType> CostFunctionType;
-  typedef CostFunctionType::LabelSetType                    LabelSetType;
-
-  typedef itk::AmoebaOptimizer                            OptimizerType;
-
-  typedef otb::FuzzyDescriptorsModelManager::DescriptorsModelType
-                                                          DescriptorsModelType;
-  typedef otb::FuzzyDescriptorsModelManager::DescriptorListType
-                                                          DescriptorListType;
-
-     typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType>
-     TreeIteratorType;
-
-
-  /** Standard macro */
-  itkNewMacro(Self);
-
-  itkTypeMacro(DSFuzzyModelEstimation, otb::Application);
-
-private:
-  void DoInit() override
-  {
-    SetName("DSFuzzyModelEstimation");
-    SetDescription("Estimate feature fuzzy model parameters using 2 vector data (ground truth samples and wrong samples).");
-
-    SetDocName("Fuzzy Model estimation");
-    SetDocLongDescription("Estimate feature fuzzy model parameters using 2 vector data (ground truth samples and wrong samples).");
-    SetDocLimitations("None.");
-    SetDocAuthors("OTB-Team");
-    SetDocSeeAlso(" ");
-
-    AddDocTag(Tags::FeatureExtraction);
-
-    AddParameter(ParameterType_InputVectorData, "psin", "Input Positive Vector Data");
-    SetParameterDescription("psin", "Ground truth vector data for positive samples");
-
-    AddParameter(ParameterType_InputVectorData, "nsin", "Input Negative Vector Data");
-    SetParameterDescription("nsin", "Ground truth vector data for negative samples");
-
-    AddParameter(ParameterType_StringList, "belsup", "Belief Support");
-    SetParameterDescription("belsup", "Dempster Shafer study hypothesis to compute belief");
-
-    AddParameter(ParameterType_StringList, "plasup", "Plausibility Support");
-    SetParameterDescription("plasup", "Dempster Shafer study hypothesis to compute plausibility");
-
-    AddParameter(ParameterType_OutputFilename, "out", "Output filename");
-    SetParameterDescription("out", "Output model file name (xml file) contains the optimal model to perform information fusion.");
-
-    AddParameter(ParameterType_String, "cri", "Criterion");
-    SetParameterDescription("cri", "Dempster Shafer criterion (by default (belief+plausibility)/2)");
-    MandatoryOff("cri");
-    SetParameterString("cri","((Belief + Plausibility)/2.)");
-
-    AddParameter(ParameterType_Float,"wgt","Weighting");
-    SetParameterDescription("wgt","Coefficient between 0 and 1 to promote undetection or false detections (default 0.5)");
-    MandatoryOff("wgt");
-    SetParameterFloat("wgt",0.5);
-
-    AddParameter(ParameterType_InputFilename,"initmod","initialization model");
-    SetParameterDescription("initmod","Initialization model (xml file) to be used. If the xml initialization model is set, the descriptor list is not used (specified using the option -desclist)");
-    MandatoryOff("initmod");
-
-    AddParameter(ParameterType_StringList, "desclist","Descriptor list");
-    SetParameterDescription("desclist","List of the descriptors to be used in the model (must be specified to perform an automatic initialization)");
-    MandatoryOff("desclist");
-
-    AddParameter(ParameterType_Int,"maxnbit","Maximum number of iterations");
-    MandatoryOff("maxnbit");
-    SetParameterDescription("maxnbit","Maximum number of optimizer iteration (default 200)");
-    SetParameterInt("maxnbit",200);
-
-    AddParameter(ParameterType_Bool,"optobs","Optimizer Observer");
-    SetParameterDescription("optobs","Activate the optimizer observer");
-
-    // Doc example parameter settings
-    SetDocExampleParameterValue("psin", "cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp");
-    SetDocExampleParameterValue("nsin", "cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp");
-    SetDocExampleParameterValue("belsup", "\"ROADSA\"");
-    SetDocExampleParameterValue("plasup", "\"NONDVI\" \"ROADSA\" \"NOBUIL\"");
-    SetDocExampleParameterValue("initmod", "Dempster-Shafer/DSFuzzyModel_Init.xml");
-    SetDocExampleParameterValue("maxnbit", "4");
-    SetDocExampleParameterValue("optobs", "true");
-    SetDocExampleParameterValue("out", "DSFuzzyModelEstimation.xml");
-
-    SetOfficialDocLink();
-  }
-
-  void DoUpdateParameters() override
-  {
-    // Nothing to do here : all parameters are independent
-
-
-    // .. //
-
-
-  }
-
-  void DoExecute() override
-  {
-
-    //Instantiate
-    m_CostFunction = CostFunctionType::New();
-    m_Optimizer = OptimizerType::New();
-
-    //Read the vector datas
-    VectorDataType::Pointer psVectorData = GetParameterVectorData("psin");
-    psVectorData->Update();
-    VectorDataType::Pointer nsVectorData = GetParameterVectorData("nsin");
-    nsVectorData->Update();
-
-    // Load the initial descriptor model
-    DescriptorListType descList;
-    DescriptorsModelType descMod;
-    if (IsParameterEnabled("initmod"))
-      {
-      std::string descModFile = GetParameterString("initmod");
-      descMod = FuzzyDescriptorsModelManager::Read(descModFile);
-      descList = FuzzyDescriptorsModelManager::GetDescriptorList(descMod);
-      }
-    else
-      {
-      StringListType stringList = GetParameterStringList("desclist");
-      int nbsdDesc = stringList.size();
-      for (int i = 0; i < nbsdDesc; i++)
-        {
-        descList.push_back(stringList[i]);
-        }
-      }
-
-    m_CostFunction->SetDescriptorList(descList);
-
-    // Compute statistics of all the descriptors
-
-    std::vector<double> accFirstOrderPS, accSecondOrderPS, minPS, maxPS;
-    accFirstOrderPS.resize(descList.size());
-    accSecondOrderPS.resize(descList.size());
-    std::fill(accFirstOrderPS.begin(), accFirstOrderPS.end(), 0);
-    std::fill(accSecondOrderPS.begin(), accSecondOrderPS.end(), 0);
-    minPS.resize(descList.size());
-    maxPS.resize(descList.size());
-    unsigned int accNbElemPS = 0;
-
-    TreeIteratorType itVectorPS(psVectorData->GetDataTree());
-    for (itVectorPS.GoToBegin(); !itVectorPS.IsAtEnd(); ++itVectorPS)
-      {
-      if (!itVectorPS.Get()->IsRoot() && !itVectorPS.Get()->IsDocument() && !itVectorPS.Get()->IsFolder())
-        {
-        DataNodeType::Pointer currentGeometry = itVectorPS.Get();
-
-        for (unsigned int i = 0; i < descList.size(); ++i)
-          {
-          double desc = currentGeometry->GetFieldAsDouble(descList[i]);
-
-          accFirstOrderPS[i] += desc;
-          accSecondOrderPS[i] += desc * desc;
-
-          if (desc < minPS[i])
-            {
-            minPS[i] = desc;
-            }
-          if (desc > maxPS[i])
-            {
-            maxPS[i] = desc;
-            }
-
-          }
-        accNbElemPS++;
-        }
-      }
-    if (accNbElemPS == 0)
-      {
-      otbAppLogFATAL(<< "Error : no element found in positive vector data!");
-      }
-
-    TreeIteratorType itVectorNS(nsVectorData->GetDataTree());
-    std::vector<double> accFirstOrderNS, accSecondOrderNS, minNS, maxNS;
-    minNS.resize(descList.size());
-    maxNS.resize(descList.size());
-    accFirstOrderNS.resize(descList.size());
-    accSecondOrderNS.resize(descList.size());
-    std::fill(accFirstOrderNS.begin(), accFirstOrderNS.end(), 0);
-    std::fill(accSecondOrderNS.begin(), accSecondOrderNS.end(), 0);
-    std::fill(minNS.begin(), minNS.end(), 1);
-    std::fill(maxNS.begin(), maxNS.end(), 0);
-    unsigned int accNbElemNS = 0;
-
-    for (itVectorNS.GoToBegin(); !itVectorNS.IsAtEnd(); ++itVectorNS)
-      {
-      if (!itVectorNS.Get()->IsRoot() && !itVectorNS.Get()->IsDocument() && !itVectorNS.Get()->IsFolder())
-        {
-        DataNodeType::Pointer currentGeometry = itVectorNS.Get();
-
-        for (unsigned int i = 0; i < descList.size(); ++i)
-          {
-          double desc = currentGeometry->GetFieldAsDouble(descList[i]);
-
-          accFirstOrderNS[i] += desc;
-          accSecondOrderNS[i] += desc * desc;
-
-          if (desc < minNS[i])
-            {
-            minNS[i] = desc;
-            }
-          if (desc > maxNS[i])
-            {
-            maxNS[i] = desc;
-            }
-
-          }
-        accNbElemNS++;
-        }
-      }
-    if (accNbElemNS == 0)
-      {
-      otbAppLogFATAL(<< "Error : no element found in negative vector data!");
-      }
-    otbAppLogINFO( << "Descriptors Stats : ");
-    otbAppLogINFO( << "Positive Samples");
-    for (unsigned int i = 0; i < descList.size(); ++i)
-      {
-      double mean = accFirstOrderPS[i] / accNbElemPS;
-      double stddev = std::sqrt(accSecondOrderPS[i] / accNbElemPS - mean * mean);
-      otbAppLogINFO( << descList[i] << "  :  " << mean << " +/- " << stddev << "  (min: " << minPS[i] << "  max: " << maxPS[i] << ")"<< std::endl);
-      }
-
-    otbAppLogINFO( << "Negative Samples" << std::endl);
-    for (unsigned int i = 0; i < descList.size(); ++i)
-      {
-      double mean = accFirstOrderNS[i] / accNbElemNS;
-      double stddev = std::sqrt(accSecondOrderNS[i] / accNbElemNS - mean * mean);
-      otbAppLogINFO(<< descList[i] << "  :  " << mean << " +/- " << stddev << "  (min: " << minNS[i] << "  max: " << maxNS[i] << ")"<< std::endl);
-      }
-
-    OptimizerType::ParametersType initialPosition(4 * descList.size());
-
-    if (IsParameterEnabled("initmod"))
-      {
-
-      for (unsigned int i = 0; i < 4; i++)
-        {
-        for (unsigned int j = 0; j < descList.size(); j++)
-          {
-          initialPosition.SetElement(
-                                     i + 4 * j,
-                                     otb::FuzzyDescriptorsModelManager::GetDescriptor(descList[j].c_str(), descMod).second[i]);
-          }
-        }
-      }
-    else
-      {
-      for (unsigned int j = 0; j < descList.size(); j++)
-        {
-        initialPosition.SetElement((j * 4), std::min(minNS[j], maxPS[j]));
-        initialPosition.SetElement((j * 4) + 2, std::max(minNS[j], maxPS[j]));
-        initialPosition.SetElement(
-                                   (j * 4) + 1,
-                                       0.5
-                                       * (initialPosition.GetElement((j * 4)) + initialPosition.GetElement((j * 4) + 2)));
-        initialPosition.SetElement((j * 4) + 3, 0.95);
-        }
-      }
-
-    otbAppLogINFO(<<"Initial model: "<<initialPosition);
-
-    //Cost Function
-    //Format Hypothesis
-    LabelSetType Bhyp, Phyp;
-    int nbSet;
-
-    StringListType stringList = GetParameterStringList("belsup");
-    nbSet = stringList.size();
-
-    for (int i = 0; i < nbSet; i++)
-      {
-      std::string str = stringList[i];
-      Bhyp.insert(str);
-      }
-    m_CostFunction->SetBeliefHypothesis(Bhyp);
-    stringList = GetParameterStringList("plasup");
-    nbSet = stringList.size();
-    for (int i = 0; i < nbSet; i++)
-      {
-      std::string str = stringList[i];
-      Phyp.insert(str);
-      }
-    m_CostFunction->SetPlausibilityHypothesis(Phyp);
-
-    m_CostFunction->SetWeight(GetParameterFloat("wgt"));
-
-    m_CostFunction->SetCriterionFormula(GetParameterString("cri"));
-
-    m_CostFunction->SetGTVectorData(psVectorData);
-    m_CostFunction->SetNSVectorData(nsVectorData);
-    //Optimizer
-    m_Optimizer->SetCostFunction(m_CostFunction);
-
-    m_Optimizer->SetMaximumNumberOfIterations(GetParameterInt("maxnbit"));
-
-    OptimizerType::ParametersType simplexDelta(m_CostFunction->GetNumberOfParameters());
-    simplexDelta.Fill(0.1);
-
-    m_Optimizer->AutomaticInitialSimplexOff();
-    m_Optimizer->SetInitialSimplexDelta(simplexDelta);
-
-    m_Optimizer->SetInitialPosition(initialPosition);
-
-    // Create the Command observer and register it with the optimizer.
-    CommandIterationUpdate::Pointer observer = CommandIterationUpdate::New();
-    if (GetParameterInt("optobs"))
-      {
-      m_Optimizer->AddObserver(itk::IterationEvent(), observer);
-      }
-
-    try
-      {
-      // do the optimization
-      m_Optimizer->StartOptimization();
-      }
-    catch (itk::ExceptionObject& err)
-      {
-      // An error has occurred in the optimization.
-      // Update the parameters
-      otbAppLogFATAL("ERROR: Exception Caught : "<< err.GetDescription() << std::endl
-        << "numberOfIterations : " << m_Optimizer->GetOptimizer()->get_num_evaluations() << std::endl
-        << "Results : " << m_Optimizer->GetCurrentPosition() << std::endl);
-      }
-    // get the results
-    const unsigned int numberOfIterations = m_Optimizer->GetOptimizer()->get_num_evaluations();
-    otbAppLogINFO("numberOfIterations : " << numberOfIterations << std::endl);
-    otbAppLogINFO("Results : " << m_Optimizer->GetCurrentPosition() << std::endl);
-
-    for (unsigned int i = 0; i < descList.size(); i++)
-      {
-      otb::FuzzyDescriptorsModelManager::ParameterType tmpParams;
-      for (unsigned int j = 0; j < 4; j++)
-        {
-        tmpParams.push_back(m_Optimizer->GetCurrentPosition()[(i * 4) + j]);
-        }
-      otb::FuzzyDescriptorsModelManager::AddDescriptor(descList[i], tmpParams, m_Model);
-      }
-    otb::FuzzyDescriptorsModelManager::Save(GetParameterString("out"), m_Model);
-
-  };
-
-  CostFunctionType::Pointer                               m_CostFunction;
-  OptimizerType::Pointer                                  m_Optimizer;
-  otb::FuzzyDescriptorsModelManager::DescriptorsModelType m_Model;
-};
-
-}
-}
-
-OTB_APPLICATION_EXPORT(otb::Wrapper::DSFuzzyModelEstimation)
-
diff --git a/Modules/Applications/AppClassification/app/otbFusionOfClassifications.cxx b/Modules/Applications/AppClassification/app/otbFusionOfClassifications.cxx
index 3c6513bf57efb5a8c09760233d0eb49ad98843cb..34ba9ebaaaa5ef0ac6aaaaee3c8d040d7f44a8d4 100644
--- a/Modules/Applications/AppClassification/app/otbFusionOfClassifications.cxx
+++ b/Modules/Applications/AppClassification/app/otbFusionOfClassifications.cxx
@@ -97,7 +97,6 @@ private:
   {
     SetName("FusionOfClassifications");
     SetDescription("Fuses several classifications maps of the same image on the basis of class labels.");
-    SetDocName("Fusion of Classifications");
     SetDocLongDescription("This application allows you to fuse several classification maps and produces a single more robust classification map. "
         "Fusion is done either by mean of Majority Voting, or with the Dempster Shafer combination method on class labels.\n\n"
         "  - MAJORITY VOTING: for each pixel, the class with the highest number of votes is selected.\n"
diff --git a/Modules/Applications/AppClassification/app/otbImageClassifier.cxx b/Modules/Applications/AppClassification/app/otbImageClassifier.cxx
index 941f7a936ed8031ae2d903ad06de13cdcc54e6aa..e7a45871aed3263db1c0530ef3b5507737317380 100644
--- a/Modules/Applications/AppClassification/app/otbImageClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbImageClassifier.cxx
@@ -80,7 +80,6 @@ private:
     SetDescription("Performs a classification of the input image according to a model file.");
 
     // Documentation
-    SetDocName("Image Classification");
     SetDocLongDescription("This application performs an image classification based on a model file produced by the TrainImagesClassifier application. Pixels of the output image will contain the class labels decided by the classifier (maximal class label = 65535). The input pixels can be optionally centered and reduced according to the statistics file produced by the ComputeImagesStatistics application. An optional input mask can be provided, in which case only input image pixels whose corresponding mask value is greater than 0 will be classified. By default, the remaining of pixels will be given the label 0 in the output image.");
 
     SetDocLimitations("The input image must have the same type, order and number of bands than the images used to produce the statistics file and the SVM model file. If a statistics file was used during training by the TrainImagesClassifier, it is mandatory to use the same statistics file for classification. If an input mask is used, its size must match the input image size.");
diff --git a/Modules/Applications/AppClassification/app/otbKMeansClassification.cxx b/Modules/Applications/AppClassification/app/otbKMeansClassification.cxx
index bcb546e03d11118b8e5c98a29d1cc7dbd824873e..0ceba570e9bfe6706231ba91d8bf750f3c36fbcb 100644
--- a/Modules/Applications/AppClassification/app/otbKMeansClassification.cxx
+++ b/Modules/Applications/AppClassification/app/otbKMeansClassification.cxx
@@ -77,13 +77,22 @@ protected:
     MandatoryOff("ts");
 
     AddParameter(ParameterType_Int, "maxit", "Maximum number of iterations");
-    SetParameterDescription("maxit", "Maximum number of iterations for the learning step.");
+    SetParameterDescription("maxit",
+                            "Maximum number of iterations for the learning step."
+                            " If this parameter is set to 0, the KMeans algorithm will not stop until convergence");
     SetDefaultParameterInt("maxit", 1000);
     MandatoryOff("maxit");
 
-    AddParameter(ParameterType_OutputFilename, "outmeans", "Centroid filename");
-    SetParameterDescription("outmeans", "Output text file containing centroid positions");
-    MandatoryOff("outmeans");
+    AddParameter(ParameterType_Group, "centroids", "Centroids IO parameters");
+    SetParameterDescription("centroids", "Group of parameters for centroids IO.");
+
+    AddParameter(ParameterType_InputFilename, "centroids.in", "input centroids text file");
+    SetParameterDescription("centroids.in",
+                            "Input text file containing centroid positions used to initialize the algorithm. "
+                            "Each centroid must be described by p parameters, p being the number of bands in "
+                            "the input image, and the number of centroids must be equal to the number of classes "
+                            "(one centroid per line with values separated by spaces).");
+    MandatoryOff("centroids.in");
 
     ShareKMSamplingParameters();
     ConnectKMSamplingParams();
@@ -99,6 +108,7 @@ protected:
   {
     ShareParameter("ram", "polystats.ram");
     ShareParameter("sampler", "select.sampler");
+    ShareParameter("centroids.out", "training.classifier.sharkkm.centroids.out");
     ShareParameter("vm", "polystats.mask", "Validity Mask",
       "Validity mask, only non-zero pixels will be used to estimate KMeans modes.");
   }
@@ -248,6 +258,14 @@ protected:
                                                         GetParameterInt("maxit"));
     GetInternalApplication("training")->SetParameterInt("classifier.sharkkm.k",
                                                         GetParameterInt("nc"));
+    if (IsParameterEnabled("centroids.in") && HasValue("centroids.in"))
+    {
+      GetInternalApplication("training")->SetParameterString("classifier.sharkkm.centroids.in", GetParameterString("centroids.in"));
+
+      GetInternalApplication("training")
+          ->SetParameterString("classifier.sharkkm.centroids.stats", GetInternalApplication("imgstats")->GetParameterString("out"));
+    }
+
 
     if( IsParameterEnabled("rand"))
       GetInternalApplication("training")->SetParameterInt("rand", GetParameterInt("rand"));
@@ -276,55 +294,6 @@ protected:
     ExecuteInternal( "classif" );
   }
 
-  void CreateOutMeansFile(FloatVectorImageType *image,
-                          const std::string &modelFileName,
-                          unsigned int nbClasses)
-  {
-    if (IsParameterEnabled("outmeans"))
-    {
-      unsigned int nbBands = image->GetNumberOfComponentsPerPixel();
-      unsigned int nbElements = nbClasses * nbBands;
-      // get the line in model file that contains the centroids positions
-      std::ifstream infile(modelFileName);
-      if(!infile)
-      {
-        itkExceptionMacro(<< "File: " << modelFileName << " couldn't be opened");
-      }
-
-      // get the line with the centroids (starts with "2 ")
-      std::string line, centroidLine;
-      while(std::getline(infile,line))
-      {
-        if (line.size() > 2 && line[0] == '2' && line[1] == ' ')
-          {
-          centroidLine = line;
-          break;
-          }
-      }
-
-      std::vector<std::string> centroidElm;
-      boost::split(centroidElm,centroidLine,boost::is_any_of(" "));
-
-      // remove the first elements, not the centroids positions
-      int nbWord = centroidElm.size();
-      int beginCentroid = nbWord-nbElements;
-      centroidElm.erase(centroidElm.begin(), centroidElm.begin()+beginCentroid);
-
-      // write in the output file
-      std::ofstream outfile;
-      outfile.open(GetParameterString("outmeans"));
-
-      for (unsigned int i = 0; i < nbClasses; i++)
-      {
-        for (unsigned int j = 0; j < nbBands; j++)
-        {
-          outfile << std::setw(8) << centroidElm[i * nbBands + j] << " ";
-        }
-        outfile << std::endl;
-      }
-    }
-  }
-
   class KMeansFileNamesHandler
     {
     public:
@@ -402,7 +371,6 @@ private:
     SetName("KMeansClassification");
     SetDescription("Unsupervised KMeans image classification");
 
-    SetDocName("Unsupervised KMeans image classification");
     SetDocLongDescription("Unsupervised KMeans image classification. "
       "This is a composite application, using existing training and classification applications. "
       "The SharkKMeans model is used.\n\n"
@@ -495,9 +463,6 @@ private:
     // Compute a classification of the input image according to a model file
     Superclass::KMeansClassif();
 
-    // Create the output text file containing centroids positions
-    Superclass::CreateOutMeansFile(GetParameterImage("in"), fileNames.modelFile, GetParameterInt("nc"));
-
     // Remove all tempory files
     if( GetParameterInt( "cleanup" ) )
       {
diff --git a/Modules/Applications/AppClassification/app/otbMultiImageSamplingRate.cxx b/Modules/Applications/AppClassification/app/otbMultiImageSamplingRate.cxx
index 6f5f49091112ff62a981b730da393e35d60c8969..eecf74ed45b38c57bde61331f92f3d0eeebd11f5 100644
--- a/Modules/Applications/AppClassification/app/otbMultiImageSamplingRate.cxx
+++ b/Modules/Applications/AppClassification/app/otbMultiImageSamplingRate.cxx
@@ -63,7 +63,6 @@ private:
     SetDescription("Compute sampling rate for an input set of images.");
 
     // Documentation
-    SetDocName("Multi-image sampling rate estimation");
     SetDocLongDescription("The application computes sampling rates for a set of"
       " input images. Before calling this application, each pair of image and "
       "training vectors has to be analysed with the application "
diff --git a/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx b/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
index ccc6e876ce781db5aeb764eef2052952849897a5..7667d25ec731ed18ca04e4832831baf4401bd684 100644
--- a/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbOGRLayerClassifier.cxx
@@ -60,7 +60,6 @@ private:
     SetName("OGRLayerClassifier");
     SetDescription("Classify an OGR layer based on a machine learning model and a list of features to consider.");
 
-    SetDocName("OGRLayerClassifier");
     SetDocLongDescription("This application will apply a trained machine learning model on the selected feature to get a classification of each geometry contained in an OGR layer. The list of feature must match the list used for training. The predicted label is written in the user defined field for each geometry.");
     SetDocLimitations("Experimental. Only shapefiles are supported for now.");
     SetDocAuthors("David Youssefi during internship at CNES");
diff --git a/Modules/Applications/AppClassification/app/otbPolygonClassStatistics.cxx b/Modules/Applications/AppClassification/app/otbPolygonClassStatistics.cxx
index bbfb99010e2df503fc561fad3ba528b8b3904151..c4ca1ab8346a9c96db6da1370840741934efcc85 100644
--- a/Modules/Applications/AppClassification/app/otbPolygonClassStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbPolygonClassStatistics.cxx
@@ -72,7 +72,6 @@ private:
     SetDescription("Computes statistics on a training polygon set.");
 
     // Documentation
-    SetDocName("Polygon Class Statistics");
     SetDocLongDescription("Process a set of geometries intended for training (they should have a field giving the associated "
       "class). The geometries are analyzed against a support image to compute statistics:\n\n"
       "* Number of samples per class\n"
diff --git a/Modules/Applications/AppClassification/app/otbPredictRegression.cxx b/Modules/Applications/AppClassification/app/otbPredictRegression.cxx
index 95f5b8384e995e68286cc586ed88865fee36336b..886009b1fa1701fbc916194c01c468290f7dcdb0 100644
--- a/Modules/Applications/AppClassification/app/otbPredictRegression.cxx
+++ b/Modules/Applications/AppClassification/app/otbPredictRegression.cxx
@@ -119,7 +119,6 @@ private:
     SetDescription("Performs a prediction of the input image according to a regression model file.");
 
     // Documentation
-    SetDocName("Predict Regression");
     SetDocLongDescription("This application predict output values from an input"
                           " image, based on a regression model file produced by"
                           " the TrainRegression application. Pixels of the "
diff --git a/Modules/Applications/AppClassification/app/otbSOMClassification.cxx b/Modules/Applications/AppClassification/app/otbSOMClassification.cxx
index bddaf9ebab29980a0dc268f3bd487272b07d39bc..f1ed068cd04d93f91e1730631079dfd42bcc37cb 100644
--- a/Modules/Applications/AppClassification/app/otbSOMClassification.cxx
+++ b/Modules/Applications/AppClassification/app/otbSOMClassification.cxx
@@ -82,7 +82,6 @@ private:
     SetDescription("SOM image classification.");
 
     // Documentation
-    SetDocName("SOM Classification");
     SetDocLongDescription("Unsupervised Self Organizing Map image classification.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppClassification/app/otbSampleAugmentation.cxx b/Modules/Applications/AppClassification/app/otbSampleAugmentation.cxx
index c16e0cca8ef023c56226ffcd8f95ab0fffd13c5c..5ba680a8e01fa73d077f810bcf11b26620aecc61 100644
--- a/Modules/Applications/AppClassification/app/otbSampleAugmentation.cxx
+++ b/Modules/Applications/AppClassification/app/otbSampleAugmentation.cxx
@@ -57,7 +57,6 @@ private:
     SetDescription("Generates synthetic samples from a sample data file.");
 
     // Documentation
-    SetDocName("Sample Augmentation");
     SetDocLongDescription("The application takes a sample data file as "
                           "generated by the SampleExtraction application and "
                           "generates synthetic samples to increase the number of "
diff --git a/Modules/Applications/AppClassification/app/otbSampleExtraction.cxx b/Modules/Applications/AppClassification/app/otbSampleExtraction.cxx
index e8cb2aaabacdc10b4f0f1d4c21ab8e1f93d5dc7e..b94130d3f57a68067d035af1de464e55230d397d 100644
--- a/Modules/Applications/AppClassification/app/otbSampleExtraction.cxx
+++ b/Modules/Applications/AppClassification/app/otbSampleExtraction.cxx
@@ -59,7 +59,6 @@ private:
     SetDescription("Extracts samples values from an image.");
 
     // Documentation
-    SetDocName("Sample Extraction");
     SetDocLongDescription("The application extracts samples values from an"
       "image using positions contained in a vector data file. ");
     SetDocLimitations("None");
diff --git a/Modules/Applications/AppClassification/app/otbSampleSelection.cxx b/Modules/Applications/AppClassification/app/otbSampleSelection.cxx
index 959f3c129d0c32c3f77343f249c0b18e022232de..d789b556198a4c12f271e81daeeeec730b9ae894 100644
--- a/Modules/Applications/AppClassification/app/otbSampleSelection.cxx
+++ b/Modules/Applications/AppClassification/app/otbSampleSelection.cxx
@@ -86,7 +86,6 @@ private:
     SetDescription("Selects samples from a training vector data set.");
 
     // Documentation
-    SetDocName("Sample Selection");
     SetDocLongDescription(
         "The application selects a set of samples from geometries "
         "intended for training (they should have a field giving the associated "
diff --git a/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx b/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx
index 151200884130b6769b8f39fd8b020f0afc242503..567dd28889ae03e3eda019b031e1344073bf12e0 100644
--- a/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainImagesClassifier.cxx
@@ -41,7 +41,6 @@ public:
     SetDescription( "Train a classifier from multiple pairs of images and training vector data." );
 
     // Documentation
-    SetDocName( "Train a classifier from multiple images" );
     SetDocLongDescription(
         "Train a classifier from multiple pairs of images and training vector data. "
         "Samples are composed of pixel values in each band optionally centered and reduced using an XML statistics file produced by "
diff --git a/Modules/Applications/AppClassification/app/otbTrainRegression.cxx b/Modules/Applications/AppClassification/app/otbTrainRegression.cxx
index fb5b636354cb4949812b2376046db138c50bf603..a93c8b5439d65e670fa92e52ee889933d45f3d61 100644
--- a/Modules/Applications/AppClassification/app/otbTrainRegression.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainRegression.cxx
@@ -105,7 +105,6 @@ void DoInit() override
     "Train a classifier from multiple images to perform regression.");
 
   // Documentation
-  SetDocName("Train a regression model");
   SetDocLongDescription(
     "This application trains a classifier from multiple input images or a csv "
     "file, in order to perform regression. Predictors are composed of pixel "
@@ -272,8 +271,7 @@ void ParseCSVPredictors(std::string path, ListSampleType* outputList)
       elem.Fill(0.0);
       for (unsigned int i=0 ; i<nbCols ; ++i)
         {
-        iss.str(words[i]);
-        iss >> elem[i];
+          elem[i] = std::stod(words[i]);
         }
       outputList->PushBack(elem);
       }
diff --git a/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx b/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
index c71885ded4440670f0dc511e104629f14581c7f5..fbd04d4a4b5c0fa213d5266d3588b1f8de7202cb 100644
--- a/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbTrainVectorClassifier.cxx
@@ -29,11 +29,11 @@ namespace otb
 namespace Wrapper
 {
 
-class TrainVectorClassifier : public TrainVectorBase
+class TrainVectorClassifier : public TrainVectorBase<float, int>
 {
 public:
   typedef TrainVectorClassifier Self;
-  typedef TrainVectorBase Superclass;
+  typedef TrainVectorBase<float, int> Superclass;
   typedef itk::SmartPointer<Self> Pointer;
   typedef itk::SmartPointer<const Self> ConstPointer;
   itkNewMacro( Self )
@@ -60,20 +60,26 @@ protected:
     SetDescription( "Train a classifier based on labeled geometries and a "
       "list of features to consider." );
 
-    SetDocName( "Train Vector Classifier" );
     SetDocLongDescription( "This application trains a classifier based on "
       "labeled geometries and a list of features to consider for "
       "classification.\nThis application is based on LibSVM, OpenCV Machine "
       "Learning (2.3.1 and later), and Shark ML The output of this application "
       "is a text model file, whose format corresponds to the ML model type "
       "chosen. There is no image nor vector data output.");
-    SetDocLimitations("");
+    SetDocLimitations("None");
     SetDocAuthors( "OTB Team" );
     SetDocSeeAlso( " " );
 
     SetOfficialDocLink();
 
     Superclass::DoInit();
+
+    // Add a new parameter to compute confusion matrix / contingency table
+    this->AddParameter(ParameterType_OutputFilename, "io.confmatout", "Output confusion matrix or contingency table");
+    this->SetParameterDescription("io.confmatout",
+                                  "Output file containing the confusion matrix or contingency table (.csv format)."
+                                  "The contingency table is output when we unsupervised algorithms is used otherwise the confusion matrix is output.");
+    this->MandatoryOff("io.confmatout");
   }
 
   void DoUpdateParameters() override
diff --git a/Modules/Applications/AppClassification/app/otbTrainVectorRegression.cxx b/Modules/Applications/AppClassification/app/otbTrainVectorRegression.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..c98e69ee0c94b0b1882a4bd0ffab112e6020e53d
--- /dev/null
+++ b/Modules/Applications/AppClassification/app/otbTrainVectorRegression.cxx
@@ -0,0 +1,122 @@
+/*
+ * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
+ *
+ * This file is part of Orfeo Toolbox
+ *
+ *     https://www.orfeo-toolbox.org/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "otbTrainVectorBase.h"
+
+namespace otb
+{
+namespace Wrapper
+{
+
+class TrainVectorRegression : public TrainVectorBase<float, float>
+{
+public:
+  typedef TrainVectorRegression Self;
+  typedef TrainVectorBase<float, float> Superclass;
+  typedef itk::SmartPointer<Self>       Pointer;
+  typedef itk::SmartPointer<const Self> ConstPointer;
+
+  itkNewMacro(Self) itkTypeMacro(Self, Superclass)
+
+      typedef Superclass::SampleType SampleType;
+  typedef Superclass::ListSampleType       ListSampleType;
+  typedef Superclass::TargetListSampleType TargetListSampleType;
+
+protected:
+  TrainVectorRegression()
+  {
+    this->m_RegressionFlag = true;
+  }
+
+  void DoInit() override
+  {
+    SetName("TrainVectorRegression");
+    SetDescription(
+        "Train a regression algorithm based on geometries with "
+        "list of features to consider and a predictor.");
+
+    SetDocLongDescription(
+        "This application trains a regression algorithm based on "
+        "a predictor geometries and a list of features to consider for "
+        "regression.\nThis application is based on LibSVM, OpenCV Machine "
+        "Learning (2.3.1 and later), and Shark ML The output of this application "
+        "is a text model file, whose format corresponds to the ML model type "
+        "chosen. There is no image or vector data output.");
+
+    SetDocLimitations("None");
+    SetDocAuthors("OTB Team");
+    SetDocSeeAlso("TrainVectorClassifier");
+
+    SetOfficialDocLink();
+
+    Superclass::DoInit();
+
+    AddParameter(ParameterType_Float, "io.mse", "Mean Square Error");
+    SetParameterDescription("io.mse", "Mean square error computed with the validation predictors");
+    SetParameterRole("io.mse", Role_Output);
+    this->MandatoryOff("io.mse");
+  }
+
+  void DoUpdateParameters() override
+  {
+    Superclass::DoUpdateParameters();
+  }
+
+  double ComputeMSE(const TargetListSampleType& list1, const TargetListSampleType& list2)
+  {
+    assert(list1.Size() == list2.Size());
+    double mse = 0.;
+    for (TargetListSampleType::InstanceIdentifier i = 0; i < list1.Size(); ++i)
+    {
+      auto elem1 = list1.GetMeasurementVector(i);
+      auto elem2 = list2.GetMeasurementVector(i);
+
+      mse += (elem1[0] - elem2[0]) * (elem1[0] - elem2[0]);
+    }
+    mse /= static_cast<double>(list1.Size());
+    return mse;
+  }
+
+
+  void DoExecute() override
+  {
+    m_FeaturesInfo.SetClassFieldNames(GetChoiceNames("cfield"), GetSelectedItems("cfield"));
+
+    if (m_FeaturesInfo.m_SelectedCFieldIdx.empty() && GetClassifierCategory() == Supervised)
+    {
+      otbAppLogFATAL(<< "No field has been selected for data labelling!");
+    }
+
+    Superclass::DoExecute();
+
+    otbAppLogINFO("Computing training performances");
+
+    auto mse = ComputeMSE(*m_ClassificationSamplesWithLabel.labeledListSample, *m_PredictedList);
+
+    otbAppLogINFO("Mean Square Error = " << mse);
+    this->SetParameterFloat("io.mse", mse);
+  }
+
+private:
+};
+}
+}
+
+OTB_APPLICATION_EXPORT(otb::Wrapper::TrainVectorRegression)
diff --git a/Modules/Applications/AppClassification/app/otbVectorClassifier.cxx b/Modules/Applications/AppClassification/app/otbVectorClassifier.cxx
index 3e5f4b1d2d6f29bdaf703656cf9a33e18ba5023b..c15b65b53d8db58f7b1ba692d99ada789f12a3f7 100644
--- a/Modules/Applications/AppClassification/app/otbVectorClassifier.cxx
+++ b/Modules/Applications/AppClassification/app/otbVectorClassifier.cxx
@@ -91,7 +91,6 @@ private:
     SetName("VectorClassifier");
     SetDescription("Performs a classification of the input vector data according to a model file.");
 
-    SetDocName("Vector Classification");
     SetDocAuthors("OTB-Team");
     SetDocLongDescription("This application performs a vector data classification "
       "based on a model file produced by the TrainVectorClassifier application."
diff --git a/Modules/Applications/AppClassification/app/otbVectorDataDSValidation.cxx b/Modules/Applications/AppClassification/app/otbVectorDataDSValidation.cxx
deleted file mode 100644
index 64001c6a135e44b17e39ed920cef41a329b9d2bf..0000000000000000000000000000000000000000
--- a/Modules/Applications/AppClassification/app/otbVectorDataDSValidation.cxx
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include "otbVectorDataToDSValidatedVectorDataFilter.h"
-#include "otbWrapperApplication.h"
-#include "otbWrapperApplicationFactory.h"
-#include "otbWrapperStringListParameter.h"
-
-
-namespace otb
-{
-namespace Wrapper
-{
-
-class VectorDataDSValidation: public Application
-{
-
-
-public:
-   /** Standard class typedefs. */
-  typedef VectorDataDSValidation Self;
-  typedef Application Superclass;
-  typedef itk::SmartPointer<Self> Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-
-  typedef double                          PrecisionType;
-  typedef otb::VectorData<PrecisionType>  VectorDataType;
-  typedef otb::VectorDataToDSValidatedVectorDataFilter<VectorDataType, PrecisionType>
-                                          VectorDataValidationFilterType;
-  typedef VectorDataValidationFilterType::LabelSetType
-                                          LabelSetType;
-  typedef FuzzyDescriptorsModelManager::DescriptorsModelType DescriptorsModelType;
-
-  typedef otb::Wrapper::StringListParameter::StringListType    StringListType;
-
-  /** Standard macro */
-  itkNewMacro(Self);
-
-  itkTypeMacro(VectorDataDSValidation, otb::Application);
-
-private:
-  void DoInit() override
-  {
-    SetName("VectorDataDSValidation");
-    SetDescription("Vector data validation based on the fusion of features using Dempster-Shafer evidence theory framework.");
-
-    SetDocName("Vector Data validation");
-    SetDocLongDescription("This application validates or unvalidate the studied samples using the Dempster-Shafer theory.");
-    SetDocLimitations("None.");
-    SetDocAuthors("OTB-Team");
-    SetDocSeeAlso("http://en.wikipedia.org/wiki/Dempster-Shafer_theory");
-
-    AddDocTag(Tags::FeatureExtraction);
-
-
-    AddParameter(ParameterType_InputVectorData, "in", "Input Vector Data");
-    SetParameterDescription("in", "Input vector data to validate");
-
-    AddParameter(ParameterType_InputFilename, "descmod", "Descriptors model filename");
-    SetParameterDescription("descmod", "Fuzzy descriptors model (xml file)");
-
-    AddParameter(ParameterType_StringList, "belsup", "Belief Support");
-    SetParameterDescription("belsup", "Dempster Shafer study hypothesis to compute belief");
-
-    AddParameter(ParameterType_StringList, "plasup", "Plausibility Support");
-    SetParameterDescription("plasup", "Dempster Shafer study hypothesis to compute plausibility");
-
-    AddParameter(ParameterType_OutputVectorData, "out", "Output Vector Data");
-    SetParameterDescription("out", "Output VectorData containing only the validated samples");
-
-    AddParameter(ParameterType_String, "cri", "Criterion");
-    SetParameterDescription("cri", "Dempster Shafer criterion (by default (belief+plausibility)/2)");
-    MandatoryOff("cri");
-    SetParameterString("cri", "((Belief + Plausibility)/2.)");
-
-    AddParameter(ParameterType_Float, "thd", "Criterion threshold");
-    SetParameterDescription("thd", "Criterion threshold (default 0.5)");
-    MandatoryOff("thd");
-    SetParameterFloat("thd",0.5);
-
-    // Doc example parameter settings
-    SetDocExampleParameterValue("in", "cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp");
-    SetDocExampleParameterValue("belsup", "cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp");
-    SetDocExampleParameterValue("descmod", "DSFuzzyModel.xml");
-    SetDocExampleParameterValue("out", "VectorDataDSValidation.shp");
-
-    SetOfficialDocLink();
-  }
-
-  void DoUpdateParameters() override
-  {
-    // Nothing to do here : all parameters are independent
-
-
-    // .. //
-
-
-  }
-
-  void DoExecute() override
-  {
-
-    //Read the vector data
-    VectorDataType::Pointer inVectorData = GetParameterVectorData("in");
-    inVectorData->Update();
-
-    // Load the descriptors model
-    std::string descModFile = GetParameterString("descmod");
-    DescriptorsModelType descMod = FuzzyDescriptorsModelManager::Read(descModFile);
-
-    LabelSetType Bhyp, Phyp;
-    int nbSet;
-
-    StringListType stringList = GetParameterStringList("belsup");
-    nbSet = stringList.size();
-
-    for (int i = 0; i < nbSet; i++)
-      {
-      std::string str = stringList[i];
-      Bhyp.insert(str);
-      }
-    stringList = GetParameterStringList("plasup");
-    nbSet = stringList.size();
-    for (int i = 0; i < nbSet; i++)
-      {
-      std::string str = stringList[i];
-      Phyp.insert(str);
-      }
-
-    // Process
-    m_ValidationFilter = VectorDataValidationFilterType::New();
-    m_ValidationFilter->SetInput(inVectorData);
-    m_ValidationFilter->SetDescriptorModels(descMod);
-    m_ValidationFilter->SetBeliefHypothesis(Bhyp);
-    m_ValidationFilter->SetPlausibilityHypothesis(Phyp);
-
-    m_ValidationFilter->SetCriterionFormula(GetParameterString("cri"));
-    m_ValidationFilter->SetCriterionThreshold(GetParameterFloat("thd"));
-
-    // Set the output image
-    SetParameterOutputVectorData("out", m_ValidationFilter->GetOutput());
-
-  };
-
-  VectorDataValidationFilterType::Pointer m_ValidationFilter;
-
-
-};
-}
-}
-
-OTB_APPLICATION_EXPORT(otb::Wrapper::VectorDataDSValidation);
diff --git a/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx b/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx
index 7d78276c47c3050368e09f2d04832780ebf09025..881e8dd97a983495e438b43cdf59da376c2f112e 100644
--- a/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx
+++ b/Modules/Applications/AppClassification/app/otbZonalStatistics.cxx
@@ -148,7 +148,6 @@ public:
     SetDescription("This application computes zonal statistics");
 
     // Documentation
-    SetDocName("ZonalStatistics");
     SetDocLongDescription("This application computes zonal statistics from label image, or vector data. "
                           "The application inputs one input multiband image, and another input for zones definition. "
                           "Zones can be defined with a label image (inzone.labelimage.in) or a vector data layer "
diff --git a/Modules/Applications/AppClassification/include/otbLearningApplicationBase.hxx b/Modules/Applications/AppClassification/include/otbLearningApplicationBase.hxx
index 8d76ee548aff28eb61f5febe1b7b248b96ec47da..0e56b0c6d14ea0c6665461d76ed24b5c2170dc83 100644
--- a/Modules/Applications/AppClassification/include/otbLearningApplicationBase.hxx
+++ b/Modules/Applications/AppClassification/include/otbLearningApplicationBase.hxx
@@ -122,7 +122,10 @@ LearningApplicationBase<TInputValue,TOutputValue>
 ::InitUnsupervisedClassifierParams()
 {
 #ifdef OTB_USE_SHARK
-  InitSharkKMeansParams();
+  if (!m_RegressionFlag)
+  {
+    InitSharkKMeansParams(); // Regression not supported
+  }
 #endif
 }
 
diff --git a/Modules/Applications/AppClassification/include/otbTrainSharkKMeans.hxx b/Modules/Applications/AppClassification/include/otbTrainSharkKMeans.hxx
index a3c43741c70ace5c453ae45212abedb313b30b32..87ff3a948edc75658b5223780aec8e60788e0afa 100644
--- a/Modules/Applications/AppClassification/include/otbTrainSharkKMeans.hxx
+++ b/Modules/Applications/AppClassification/include/otbTrainSharkKMeans.hxx
@@ -22,6 +22,7 @@
 
 #include "otbLearningApplicationBase.h"
 #include "otbSharkKMeansMachineLearningModel.h"
+#include "otbStatisticsXMLFileReader.h"
 
 namespace otb
 {
@@ -44,6 +45,30 @@ void LearningApplicationBase<TInputValue, TOutputValue>::InitSharkKMeansParams()
   SetParameterInt("classifier.sharkkm.k", 2);
   SetParameterDescription("classifier.sharkkm.k", "The number of classes used for the kmeans algorithm. Default set to 2 class");
   SetMinimumParameterIntValue("classifier.sharkkm.k", 2);
+
+  // Centroid IO
+  AddParameter( ParameterType_Group, "classifier.sharkkm.centroids", "Centroids IO parameters" );
+  SetParameterDescription( "classifier.sharkkm.centroids", "Group of parameters for centroids IO." );
+
+  // Input centroids
+  AddParameter(ParameterType_InputFilename, "classifier.sharkkm.centroids.in", "User definied input centroids");
+  SetParameterDescription("classifier.sharkkm.centroids.in", "Input text file containing centroid posistions used to initialize the algorithm. "
+                            "Each centroid must be described by p parameters, p being the number of features in "
+                            "the input vector data, and the number of centroids must be equal to the number of classes "
+                            "(one centroid per line with values separated by spaces).");
+  MandatoryOff("classifier.sharkkm.centroids");
+
+  // Centroid statistics
+  AddParameter(ParameterType_InputFilename, "classifier.sharkkm.centroids.stats", "Statistics file");
+  SetParameterDescription("classifier.sharkkm.centroids.stats", "A XML file containing mean and standard deviation to center"
+    "and reduce the centroids before the KMeans algorithm, produced by ComputeImagesStatistics application.");
+  MandatoryOff("classifier.sharkkm.centroids.stats");
+  
+  // Output centroids
+  AddParameter(ParameterType_OutputFilename, "classifier.sharkkm.centroids.out", "Output centroids text file");
+  SetParameterDescription("classifier.sharkkm.centroids.out", "Output text file containing centroids after the kmean algorithm.");
+  MandatoryOff("classifier.sharkkm.centroids.out");
+  
 }
 
 template<class TInputValue, class TOutputValue>
@@ -60,9 +85,48 @@ void LearningApplicationBase<TInputValue, TOutputValue>::TrainSharkKMeans(
   classifier->SetInputListSample( trainingListSample );
   classifier->SetTargetListSample( trainingLabeledListSample );
   classifier->SetK( k );
+
+  // Initialize centroids from file
+  if(IsParameterEnabled("classifier.sharkkm.centroids.in") && HasValue("classifier.sharkkm.centroids.in"))
+  {
+    shark::Data<shark::RealVector> centroidData;
+    shark::importCSV(centroidData, GetParameterString( "classifier.sharkkm.centroids.in"), ' ');
+    if( HasValue( "classifier.sharkkm.centroids.stats" ) )
+    {
+      auto statisticsReader = otb::StatisticsXMLFileReader< itk::VariableLengthVector<float> >::New();
+      statisticsReader->SetFileName(GetParameterString( "classifier.sharkkm.centroids.stats" ));
+      auto meanMeasurementVector = statisticsReader->GetStatisticVectorByName("mean");
+      auto stddevMeasurementVector = statisticsReader->GetStatisticVectorByName("stddev");
+  
+      // Convert itk Variable Length Vector to shark Real Vector
+      shark::RealVector offsetRV(meanMeasurementVector.Size());
+      shark::RealVector scaleRV(stddevMeasurementVector.Size());
+      
+      assert(meanMeasurementVector.Size()==stddevMeasurementVector.Size());
+      for (unsigned int i = 0; i<meanMeasurementVector.Size(); ++i)
+      {
+        scaleRV[i] = 1/stddevMeasurementVector[i];
+        // Substract the normalized mean
+        offsetRV[i] = - meanMeasurementVector[i]/stddevMeasurementVector[i];
+      }
+      
+      shark::Normalizer<> normalizer(scaleRV, offsetRV);
+      centroidData = normalizer(centroidData);
+    }
+
+    if (centroidData.numberOfElements() != k)
+      otbAppLogWARNING( "The input centroid file will not be used because it contains " << centroidData.numberOfElements() <<
+      " points, which is different than from the requested number of class: " << k <<".");
+    
+    classifier->SetCentroidsFromData( centroidData);
+  }
+  
   classifier->SetMaximumNumberOfIterations( nbMaxIter );
   classifier->Train();
   classifier->Save( modelPath );
+  
+  if( HasValue( "classifier.sharkkm.centroids.out"))
+    classifier->ExportCentroids( GetParameterString( "classifier.sharkkm.centroids.out" ));
 }
 
 } //end namespace wrapper
diff --git a/Modules/Applications/AppClassification/include/otbTrainVectorBase.h b/Modules/Applications/AppClassification/include/otbTrainVectorBase.h
index 37869068157660e37b5063fd69303be97023df2f..bc5c716aef98324bcd14882b451fc2636dbfe9cc 100644
--- a/Modules/Applications/AppClassification/include/otbTrainVectorBase.h
+++ b/Modules/Applications/AppClassification/include/otbTrainVectorBase.h
@@ -49,21 +49,22 @@ bool IsNotAlphaNum(char c)
   return !std::isalnum( c );
 }
 
-class TrainVectorBase : public LearningApplicationBase<float, int>
+template <class TInputValue, class TOutputValue>
+class TrainVectorBase : public LearningApplicationBase<TInputValue, TOutputValue>
 {
 public:
   /** Standard class typedefs. */
   typedef TrainVectorBase Self;
-  typedef LearningApplicationBase<float, int> Superclass;
+  typedef LearningApplicationBase<TInputValue, TOutputValue> Superclass;
   typedef itk::SmartPointer <Self> Pointer;
   typedef itk::SmartPointer<const Self> ConstPointer;
 
   /** Standard macro */
   itkTypeMacro(Self, Superclass);
 
-  typedef Superclass::SampleType SampleType;
-  typedef Superclass::ListSampleType ListSampleType;
-  typedef Superclass::TargetListSampleType TargetListSampleType;
+  typedef typename Superclass::SampleType           SampleType;
+  typedef typename Superclass::ListSampleType       ListSampleType;
+  typedef typename Superclass::TargetListSampleType TargetListSampleType;
 
   typedef double ValueType;
   typedef itk::VariableLengthVector <ValueType> MeasurementType;
@@ -86,8 +87,8 @@ protected:
   class SamplesWithLabel
   {
   public:
-    ListSampleType::Pointer listSample;
-    TargetListSampleType::Pointer labeledListSample;
+    typename ListSampleType::Pointer       listSample;
+    typename TargetListSampleType::Pointer labeledListSample;
     SamplesWithLabel()
     {
       listSample = ListSampleType::New();
@@ -178,13 +179,18 @@ protected:
 
   SamplesWithLabel m_TrainingSamplesWithLabel;
   SamplesWithLabel m_ClassificationSamplesWithLabel;
-  TargetListSampleType::Pointer m_PredictedList;
+  typename TargetListSampleType::Pointer m_PredictedList;
   FeaturesInfo m_FeaturesInfo;
 
   void DoInit() override;
   void DoUpdateParameters() override;
   void DoExecute() override;
 
+private:
+  /**
+   * Get the field of the input feature corresponding to the input field
+   */
+  inline TOutputValue GetFeatureField(const ogr::Feature& feature, int field);
 };
 
 }
diff --git a/Modules/Applications/AppClassification/include/otbTrainVectorBase.hxx b/Modules/Applications/AppClassification/include/otbTrainVectorBase.hxx
index fb5e582dae4dc6073b77a5a2f1f2659831e1b3e9..c1e4f88f1cf9f428a038da63d99161e26daa9f66 100644
--- a/Modules/Applications/AppClassification/include/otbTrainVectorBase.hxx
+++ b/Modules/Applications/AppClassification/include/otbTrainVectorBase.hxx
@@ -27,100 +27,98 @@ namespace otb
 namespace Wrapper
 {
 
-void TrainVectorBase::DoInit()
+template <class TInputValue, class TOutputValue>
+void
+TrainVectorBase<TInputValue, TOutputValue>
+::DoInit()
 {
   // Common Parameters for all Learning Application
-  AddParameter( ParameterType_Group, "io", "Input and output data" );
-  SetParameterDescription( "io", 
+  this->AddParameter( ParameterType_Group, "io", "Input and output data" );
+  this->SetParameterDescription( "io", 
     "This group of parameters allows setting input and output data." );
 
-  AddParameter( ParameterType_InputVectorDataList, "io.vd", "Input Vector Data" );
-  SetParameterDescription( "io.vd",
+  this->AddParameter( ParameterType_InputVectorDataList, "io.vd", "Input Vector Data" );
+  this->SetParameterDescription( "io.vd",
     "Input geometries used for training (note: all geometries from the layer will be used)" );
 
-  AddParameter( ParameterType_InputFilename, "io.stats", "Input XML image statistics file" );
-  MandatoryOff( "io.stats" );
-  SetParameterDescription( "io.stats", 
+  this->AddParameter( ParameterType_InputFilename, "io.stats", "Input XML image statistics file" );
+  this->MandatoryOff( "io.stats" );
+  this->SetParameterDescription( "io.stats", 
     "XML file containing mean and variance of each feature." );
 
-  AddParameter( ParameterType_OutputFilename, "io.out", "Output model" );
-  SetParameterDescription( "io.out", 
+  this->AddParameter( ParameterType_OutputFilename, "io.out", "Output model" );
+  this->SetParameterDescription( "io.out", 
     "Output file containing the model estimated (.txt format)." );
 
-  AddParameter( ParameterType_Int, "layer", "Layer Index" );
-  SetParameterDescription( "layer", 
+  this->AddParameter( ParameterType_Int, "layer", "Layer Index" );
+  this->SetParameterDescription( "layer", 
     "Index of the layer to use in the input vector file." );
-  MandatoryOff( "layer" );
-  SetDefaultParameterInt( "layer", 0 );
+  this->MandatoryOff( "layer" );
+  this->SetDefaultParameterInt( "layer", 0 );
 
-  AddParameter(ParameterType_ListView,  "feat", "Field names for training features");
-  SetParameterDescription("feat",
+  this->AddParameter(ParameterType_ListView,  "feat", "Field names for training features");
+  this->SetParameterDescription("feat",
     "List of field names in the input vector data to be used as features for training.");
 
   // Add validation data used to compute confusion matrix or contingency table
-  AddParameter( ParameterType_Group, "valid", "Validation data" );
-  SetParameterDescription( "valid", 
+  this->AddParameter( ParameterType_Group, "valid", "Validation data" );
+  this->SetParameterDescription( "valid", 
     "This group of parameters defines validation data." );
 
-  AddParameter( ParameterType_InputVectorDataList, "valid.vd", 
+  this->AddParameter( ParameterType_InputVectorDataList, "valid.vd", 
     "Validation Vector Data" );
-  SetParameterDescription( "valid.vd", "Geometries used for validation "
+  this->SetParameterDescription( "valid.vd", "Geometries used for validation "
           "(must contain the same fields used for training, all geometries from the layer will be used)" );
-  MandatoryOff( "valid.vd" );
+  this->MandatoryOff( "valid.vd" );
 
-  AddParameter( ParameterType_Int, "valid.layer", "Layer Index" );
-  SetParameterDescription( "valid.layer", 
+  this->AddParameter( ParameterType_Int, "valid.layer", "Layer Index" );
+  this->SetParameterDescription( "valid.layer", 
     "Index of the layer to use in the validation vector file." );
-  MandatoryOff( "valid.layer" );
-  SetDefaultParameterInt( "valid.layer", 0 );
+  this->MandatoryOff( "valid.layer" );
+  this->SetDefaultParameterInt( "valid.layer", 0 );
 
   // Add class field if we used validation
-  AddParameter( ParameterType_ListView, "cfield",
+  this->AddParameter( ParameterType_ListView, "cfield",
     "Field containing the class integer label for supervision" );
-  SetParameterDescription( "cfield", 
+  this->SetParameterDescription( "cfield", 
     "Field containing the class id for supervision. "
     "The values in this field shall be cast into integers. "
     "Only geometries with this field available will be taken into account." );
-  SetListViewSingleSelectionMode( "cfield", true );
+  this->SetListViewSingleSelectionMode( "cfield", true );
 
-  // Add a new parameter to compute confusion matrix / contingency table
-  AddParameter( ParameterType_OutputFilename, "io.confmatout", 
-    "Output confusion matrix or contingency table" );
-  SetParameterDescription( "io.confmatout", 
-    "Output file containing the confusion matrix or contingency table (.csv format)."
-    "The contingency table is output when we unsupervised algorithms is used otherwise the confusion matrix is output." );
-  MandatoryOff( "io.confmatout" );
-
-  AddParameter(ParameterType_Bool, "v", "Verbose mode");
-  SetParameterDescription("v", "Verbose mode, display the contingency table result.");
-  SetParameterInt("v", 1);
+  this->AddParameter(ParameterType_Bool, "v", "Verbose mode");
+  this->SetParameterDescription("v", "Verbose mode, display the contingency table result.");
+  this->SetParameterInt("v", 1);
 
   // Doc example parameter settings
-  SetDocExampleParameterValue( "io.vd", "vectorData.shp" );
-  SetDocExampleParameterValue( "io.stats", "meanVar.xml" );
-  SetDocExampleParameterValue( "io.out", "svmModel.svm" );
-  SetDocExampleParameterValue( "feat", "perimeter  area  width" );
-  SetDocExampleParameterValue( "cfield", "predicted" );
+  this->SetDocExampleParameterValue( "io.vd", "vectorData.shp" );
+  this->SetDocExampleParameterValue( "io.stats", "meanVar.xml" );
+  this->SetDocExampleParameterValue( "io.out", "svmModel.svm" );
+  this->SetDocExampleParameterValue( "feat", "perimeter  area  width" );
+  this->SetDocExampleParameterValue( "cfield", "predicted" );
 
 
   // Add parameters for the classifier choice
   Superclass::DoInit();
 
-  AddRANDParameter();
+  this->AddRANDParameter();
 }
 
-void TrainVectorBase::DoUpdateParameters()
+template <class TInputValue, class TOutputValue>
+void 
+TrainVectorBase<TInputValue, TOutputValue>
+::DoUpdateParameters()
 {
   // if vector data is present and updated then reload fields
-  if( HasValue( "io.vd" ) )
+  if( this->HasValue( "io.vd" ) )
     {
-    std::vector<std::string> vectorFileList = GetParameterStringList( "io.vd" );
+    std::vector<std::string> vectorFileList = this->GetParameterStringList( "io.vd" );
     ogr::DataSource::Pointer ogrDS = ogr::DataSource::New( vectorFileList[0], ogr::DataSource::Modes::Read );
     ogr::Layer layer = ogrDS->GetLayer( static_cast<size_t>( this->GetParameterInt( "layer" ) ) );
     ogr::Feature feature = layer.ogr().GetNextFeature();
 
-    ClearChoices( "feat" );
-    ClearChoices( "cfield" );
+    this->ClearChoices( "feat" );
+    this->ClearChoices( "cfield" );
 
     for( int iField = 0; iField < feature.ogr().GetFieldCount(); iField++ )
       {
@@ -134,20 +132,23 @@ void TrainVectorBase::DoUpdateParameters()
       if( fieldType == OFTInteger || fieldType == OFTInteger64 || fieldType == OFTReal )
         {
         std::string tmpKey = "feat." + key.substr( 0, static_cast<unsigned long>( end - key.begin() ) );
-        AddChoice( tmpKey, item );
+        this->AddChoice( tmpKey, item );
         }
-      if( fieldType == OFTString || fieldType == OFTInteger || fieldType == OFTInteger64 )
+      if( fieldType == OFTString || fieldType == OFTInteger || fieldType == OFTInteger64 || fieldType == OFTReal )
         {
         std::string tmpKey = "cfield." + key.substr( 0, static_cast<unsigned long>( end - key.begin() ) );
-        AddChoice( tmpKey, item );
+        this->AddChoice( tmpKey, item );
         }
       }
     }
 }
 
-void TrainVectorBase::DoExecute()
+template <class TInputValue, class TOutputValue>
+void
+TrainVectorBase<TInputValue, TOutputValue>
+::DoExecute()
 {
-  m_FeaturesInfo.SetFieldNames( GetChoiceNames( "feat" ), GetSelectedItems( "feat" ));
+  m_FeaturesInfo.SetFieldNames( this->GetChoiceNames( "feat" ), this->GetSelectedItems( "feat" ));
 
   // Check input parameters
   if( m_FeaturesInfo.m_SelectedIdx.empty() )
@@ -158,29 +159,35 @@ void TrainVectorBase::DoExecute()
   ShiftScaleParameters measurement = GetStatistics( m_FeaturesInfo.m_NbFeatures );
   ExtractAllSamples( measurement );
 
-  this->Train( m_TrainingSamplesWithLabel.listSample, m_TrainingSamplesWithLabel.labeledListSample, GetParameterString( "io.out" ) );
+  this->Train( m_TrainingSamplesWithLabel.listSample, m_TrainingSamplesWithLabel.labeledListSample, this->GetParameterString( "io.out" ) );
 
   m_PredictedList =
-    this->Classify( m_ClassificationSamplesWithLabel.listSample, GetParameterString( "io.out" ) );
+    this->Classify( m_ClassificationSamplesWithLabel.listSample, this->GetParameterString( "io.out" ) );
 }
 
-
-void TrainVectorBase::ExtractAllSamples(const ShiftScaleParameters &measurement)
+template <class TInputValue, class TOutputValue>
+void
+TrainVectorBase<TInputValue, TOutputValue>
+::ExtractAllSamples(const ShiftScaleParameters &measurement)
 {
   m_TrainingSamplesWithLabel = ExtractTrainingSamplesWithLabel(measurement);
   m_ClassificationSamplesWithLabel = ExtractClassificationSamplesWithLabel(measurement);
 }
 
-TrainVectorBase::SamplesWithLabel
-TrainVectorBase::ExtractTrainingSamplesWithLabel(const ShiftScaleParameters &measurement)
+template <class TInputValue, class TOutputValue>
+typename TrainVectorBase<TInputValue, TOutputValue>::SamplesWithLabel
+TrainVectorBase<TInputValue, TOutputValue>
+::ExtractTrainingSamplesWithLabel(const ShiftScaleParameters &measurement)
 {
   return ExtractSamplesWithLabel( "io.vd", "layer", measurement);
 }
 
-TrainVectorBase::SamplesWithLabel
-TrainVectorBase::ExtractClassificationSamplesWithLabel(const ShiftScaleParameters &measurement)
+template <class TInputValue, class TOutputValue>
+typename TrainVectorBase<TInputValue, TOutputValue>::SamplesWithLabel
+TrainVectorBase<TInputValue, TOutputValue>
+::ExtractClassificationSamplesWithLabel(const ShiftScaleParameters &measurement)
 {
-  if(GetClassifierCategory() == Supervised)
+  if(this->GetClassifierCategory() == Superclass::Supervised)
     {
     SamplesWithLabel tmpSamplesWithLabel;
     SamplesWithLabel validationSamplesWithLabel = ExtractSamplesWithLabel( "valid.vd", "valid.layer", measurement );
@@ -206,15 +213,16 @@ TrainVectorBase::ExtractClassificationSamplesWithLabel(const ShiftScaleParameter
     }
 }
 
-
-TrainVectorBase::ShiftScaleParameters
-TrainVectorBase::GetStatistics(unsigned int nbFeatures)
+template <class TInputValue, class TOutputValue>
+typename TrainVectorBase<TInputValue, TOutputValue>::ShiftScaleParameters
+TrainVectorBase<TInputValue, TOutputValue>
+::GetStatistics(unsigned int nbFeatures)
 {
   ShiftScaleParameters measurement = ShiftScaleParameters();
-  if( HasValue( "io.stats" ) && IsParameterEnabled( "io.stats" ) )
+  if( this->HasValue( "io.stats" ) && this->IsParameterEnabled( "io.stats" ) )
     {
-    StatisticsReader::Pointer statisticsReader = StatisticsReader::New();
-    std::string XMLfile = GetParameterString( "io.stats" );
+    typename StatisticsReader::Pointer statisticsReader = StatisticsReader::New();
+    std::string XMLfile = this->GetParameterString( "io.stats" );
     statisticsReader->SetFileName( XMLfile );
     measurement.meanMeasurementVector = statisticsReader->GetStatisticVectorByName( "mean" );
     measurement.stddevMeasurementVector = statisticsReader->GetStatisticVectorByName( "stddev" );
@@ -229,16 +237,34 @@ TrainVectorBase::GetStatistics(unsigned int nbFeatures)
   return measurement;
 }
 
+// Template specialization for the integer case (i.e.classification), to avoid a cast from double to integer
+template <>
+inline int
+TrainVectorBase<float, int>
+::GetFeatureField(const ogr::Feature & feature, int fieldIndex)
+{
+  return(feature[fieldIndex].GetValue<int>());
+}
+
+template <class TInputValue, class TOutputValue>
+inline TOutputValue
+TrainVectorBase<TInputValue, TOutputValue>
+::GetFeatureField(const ogr::Feature & feature, int fieldIndex)
+{
+  return(feature[fieldIndex].GetValue<double>());
+}
 
-TrainVectorBase::SamplesWithLabel
-TrainVectorBase::ExtractSamplesWithLabel(std::string parameterName, std::string parameterLayer,
+template <class TInputValue, class TOutputValue>
+typename TrainVectorBase<TInputValue, TOutputValue>::SamplesWithLabel
+TrainVectorBase<TInputValue, TOutputValue>
+::ExtractSamplesWithLabel(std::string parameterName, std::string parameterLayer,
                                     const ShiftScaleParameters &measurement)
 {
   SamplesWithLabel samplesWithLabel;
-  if( HasValue( parameterName ) && IsParameterEnabled( parameterName ) )
+  if( this->HasValue( parameterName ) && this->IsParameterEnabled( parameterName ) )
     {
-    ListSampleType::Pointer input = ListSampleType::New();
-    TargetListSampleType::Pointer target = TargetListSampleType::New();
+    typename ListSampleType::Pointer input = ListSampleType::New();
+    typename TargetListSampleType::Pointer target = TargetListSampleType::New();
     input->SetMeasurementVectorSize( m_FeaturesInfo.m_NbFeatures );
 
     std::vector<std::string> fileList = this->GetParameterStringList( parameterName );
@@ -251,7 +277,7 @@ TrainVectorBase::ExtractSamplesWithLabel(std::string parameterName, std::string
       bool goesOn = feature.addr() != 0;
       if( !goesOn )
         {
-        otbAppLogWARNING( "The layer " << GetParameterInt( parameterLayer ) << " of " << fileList[k]
+        otbAppLogWARNING( "The layer " << this->GetParameterInt( parameterLayer ) << " of " << fileList[k]
                                        << " is empty, input is skipped." );
         continue;
         }
@@ -284,14 +310,14 @@ TrainVectorBase::ExtractSamplesWithLabel(std::string parameterName, std::string
         MeasurementType mv;
         mv.SetSize( m_FeaturesInfo.m_NbFeatures );
         for( unsigned int idx = 0; idx < m_FeaturesInfo.m_NbFeatures; ++idx )
-          mv[idx] = feature.ogr().GetFieldAsDouble( featureFieldIndex[idx] );
+          mv[idx] = feature[featureFieldIndex[idx]].GetValue<double>();
 
         input->PushBack( mv );
 
         if(cFieldIndex>=0 && ogr::Field(feature,cFieldIndex).HasBeenSet())
-          target->PushBack( feature.ogr().GetFieldAsInteger( cFieldIndex ) );
+          target->PushBack(GetFeatureField(feature,cFieldIndex));
         else
-          target->PushBack( 0 );
+          target->PushBack( 0. );
 
         feature = layer.ogr().GetNextFeature();
         goesOn = feature.addr() != 0;
@@ -300,7 +326,7 @@ TrainVectorBase::ExtractSamplesWithLabel(std::string parameterName, std::string
 
 
 
-    ShiftScaleFilterType::Pointer shiftScaleFilter = ShiftScaleFilterType::New();
+    typename ShiftScaleFilterType::Pointer shiftScaleFilter = ShiftScaleFilterType::New();
     shiftScaleFilter->SetInput( input );
     shiftScaleFilter->SetShifts( measurement.meanMeasurementVector );
     shiftScaleFilter->SetScales( measurement.stddevMeasurementVector );
diff --git a/Modules/Applications/AppClassification/test/CMakeLists.txt b/Modules/Applications/AppClassification/test/CMakeLists.txt
index 6a05178e64311574862ceaf555fcff1310111815..15286ce99c373666820979ebc1f73d7c848169f6 100644
--- a/Modules/Applications/AppClassification/test/CMakeLists.txt
+++ b/Modules/Applications/AppClassification/test/CMakeLists.txt
@@ -563,104 +563,6 @@ otb_test_application(NAME apTvFusionOfClassificationsMV2Inputs
   ${OTBAPP_BASELINE}/apTvFusionOfClassifications2InputsOutput.tif
   ${TEMP}/apTvFusionOfClassificationsMV2InputsOutput.tif)
 
-
-#----------- ComputePolylineFeatureFromImage TESTS ----------------
-otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_wr
-  APP  ComputePolylineFeatureFromImage
-  OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/NDVI.TIF}
-  -vd LARGEINPUT{DEMPSTER-SHAFER/wrongroads.shp}
-  -expr  "(b1 > 0.4)"
-  -field "NONDVI"
-  -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_wr.shp)
-
-# FIXME cascade dependencies to largeinput repository
-if(OTB_DATA_USE_LARGEINPUT)
-  otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication
-    APP  ComputePolylineFeatureFromImage
-    OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/SpectralAngleRoad.TIF}
-    -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_RoadExtractionApplication.shp
-    -expr  "(b1 > 0.25)"
-    -field "ROADSA"
-    -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication.shp)
-
-  set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_RoadExtractionApplication)
-
-  otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr
-    APP  ComputePolylineFeatureFromImage
-    OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/SpectralAngleRoad.TIF}
-    -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_wr.shp
-    -expr  "(b1 > 0.25)"
-    -field "ROADSA"
-    -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr.shp)
-
-  set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_wr)
-
-  otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_wr
-    APP  ComputePolylineFeatureFromImage
-    OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/BUILDINGS.TIF}
-    -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr.shp
-    -expr  "(b1 == 0)"
-    -field "NOBUIL"
-    -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp
-    VALID   --compare-ogr ${EPSILON_9}
-    ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp
-    ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp)
-
-  set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_wr PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_wr)
-
-  otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_RoadExtractionApplication
-    APP  ComputePolylineFeatureFromImage
-    OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/NDVI.TIF}
-    -vd LARGEINPUT{DEMPSTER-SHAFER/road_extraction.shp}
-    -expr  "(b1 > 0.4)"
-    -field "NONDVI"
-    -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_RoadExtractionApplication.shp)
-
-  otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_gt
-    APP  ComputePolylineFeatureFromImage
-    OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/NDVI.TIF}
-    -vd LARGEINPUT{DEMPSTER-SHAFER/roads_ground_truth.shp}
-    -expr  "(b1 > 0.4)"
-    -field NONDVI
-    -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage.shp)
-
-  otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt
-    APP  ComputePolylineFeatureFromImage
-    OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/SpectralAngleRoad.TIF}
-    -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage.shp
-    -expr  "(b1 > 0.25)"
-    -field "ROADSA"
-    -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt.shp)
-
-  set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_NONDVI_gt)
-
-  otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_gt
-    APP  ComputePolylineFeatureFromImage
-    OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/BUILDINGS.TIF}
-    -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt.shp
-    -expr  "(b1 == 0)"
-    -field "NOBUIL"
-    -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp
-    VALID   --compare-ogr ${EPSILON_9}
-    ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp
-    ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp)
-
-  set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_gt PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_gt)
-
-  otb_test_application(NAME apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication
-    APP  ComputePolylineFeatureFromImage
-    OPTIONS -in LARGEINPUT{DEMPSTER-SHAFER/BUILDINGS.TIF}
-    -vd ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication.shp
-    -expr  "(b1 == 0)"
-    -field "NOBUIL"
-    -out ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp
-    VALID   --compare-ogr ${EPSILON_9}
-    ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp
-    ${TEMP}/apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp)
-
-  set_tests_properties(apTvCdbComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication PROPERTIES DEPENDS apTvCdbComputePolylineFeatureFromImage_LI_ROADSA_RoadExtractionApplication)
-endif()
-
 #----------- KMeansClassification TESTS ----------------
 if(OTB_USE_SHARK)
   otb_test_application(NAME apTvClKMeansImageClassification_composite
@@ -673,7 +575,7 @@ if(OTB_USE_SHARK)
     -sampler periodic
     -rand 121212
     -nodatalabel 255
-    -outmeans ${TEMP}/apTvClKMeansImageClassificationFilterOutMeans.txt
+    -centroids.out ${TEMP}/apTvClKMeansImageClassificationFilterOutMeans.txt
     -out ${TEMP}/apTvClKMeansImageClassificationFilterOutput.tif uint8
     -cleanup 0
     VALID   --compare-image ${NOTOL}
@@ -681,6 +583,25 @@ if(OTB_USE_SHARK)
     ${TEMP}/apTvClKMeansImageClassificationFilterOutput.tif )
 endif()
 
+if(OTB_USE_SHARK)
+  otb_test_application(NAME apTvClKMeansImageClassification_inputCentroids
+    APP  KMeansClassification
+    OPTIONS -in ${INPUTDATA}/qb_RoadExtract.img
+    -ts 30000
+    -nc 5
+    -maxit 10000
+    -sampler periodic
+    -nodatalabel 255
+    -rand 121212
+    -centroids.in ${INPUTDATA}/Classification/KMeansInputCentroids.txt
+    -out ${TEMP}/apTvClKMeansImageClassificationInputCentroids.tif uint8
+    -cleanup 0
+    
+    VALID   --compare-image ${NOTOL}
+    ${OTBAPP_BASELINE}/apTvClKMeansImageClassificationInputCentroids.tif
+    ${TEMP}/apTvClKMeansImageClassificationInputCentroids.tif )
+endif()
+
 #----------- TrainImagesClassifier TESTS ----------------
 if(OTB_USE_LIBSVM)
   otb_test_application(NAME apTvClTrainSVMImagesClassifierQB1_allOpt_InXML
@@ -769,30 +690,6 @@ if(OTB_USE_LIBSVM)
     ${TEMP}/clsvmConfMatQB1_allOpt.svm)
 endif()
 
-#----------- DSFuzzyModelEstimation TESTS ----------------
-otb_test_application(NAME apTvCdbDSFuzzyModelEstimation_LI_autoInit
-  APP  DSFuzzyModelEstimation
-  OPTIONS -psin ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp
-  -nsin ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp
-  -belsup "ROADSA"
-  -plasup "NONDVI" "ROADSA" "NOBUIL"
-  -desclist "NONDVI" "ROADSA" "NOBUIL"
-  -maxnbit 4
-  -optobs true
-  -out ${TEMP}/apTvCdbDSFuzzyModelEstimatorOutput_LI_autoInit.xml)
-
-otb_test_application(NAME apTvCdbDSFuzzyModelEstimation_LI
-  APP  DSFuzzyModelEstimation
-  OPTIONS -psin ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp
-  -nsin ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp
-  -belsup "ROADSA"
-  -plasup "NONDVI" "ROADSA" "NOBUIL"
-  -initmod ${OTB_DATA_ROOT}/Input/Dempster-Shafer/DSFuzzyModel_Init.xml
-  -maxnbit 4
-  -optobs true
-  -out ${TEMP}/apTvCdbDSFuzzyModelEstimatorOutput_LI.xml)
-
-
 #----------- ClassificationMapRegularization TESTS ----------------
 otb_test_application(NAME apTvClassificationMapRegularization
   APP  ClassificationMapRegularization
@@ -853,38 +750,6 @@ otb_test_application(NAME apTvClComputeImagesStatisticsQB123
   ${OTBAPP_BASELINE_FILES}/clImageStatisticsQB123.xml
   ${TEMP}/apTvClEstimateImageStatisticsQB123.xml)
 
-
-#----------- VectorDataDSValidation TESTS ----------------
-otb_test_application(NAME cdbTvVectorDataDSValidationGroundTruth_LI
-  APP  VectorDataDSValidation
-  OPTIONS -in ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_gt.shp
-  -belsup "ROADSA"
-  -plasup "NONDVI" "ROADSA" "NOBUIL"
-  -descmod ${OTB_DATA_ROOT}/Input/Dempster-Shafer/DSFuzzyModel.xml
-  -out ${TEMP}/cdbTvVectorDataDSValidationOutpout_LI_gt.shp
-  VALID    --compare-ogr 0.0
-  ${OTBAPP_BASELINE_FILES}/cdbTvVectorDataDSValidationOutpout_LI_gt.shp
-  ${TEMP}/cdbTvVectorDataDSValidationOutpout_LI_gt.shp)
-
-otb_test_application(NAME apTvCdbVectorDataDSValidationRoadExtractionApplication_LI
-  APP  VectorDataDSValidation
-  OPTIONS -in ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_RoadExtractionApplication.shp
-  -belsup "ROADSA"
-  -plasup "NONDVI" "ROADSA" "NOBUIL"
-  -descmod ${OTB_DATA_ROOT}/Input/Dempster-Shafer/DSFuzzyModel.xml
-  -out ${TEMP}/apTvCdbVectorDataDSValidationOutpout_LI_RoadExtractionApplication.shp)
-
-otb_test_application(NAME cdbTvVectorDataDSValidationWrongRoads_LI
-  APP  VectorDataDSValidation
-  OPTIONS -in ${OTBAPP_BASELINE_FILES}/cdbTvComputePolylineFeatureFromImage_LI_NOBUIL_wr.shp
-  -belsup "ROADSA"
-  -plasup "NONDVI" "ROADSA" "NOBUIL"
-  -descmod ${OTB_DATA_ROOT}/Input/Dempster-Shafer/DSFuzzyModel.xml
-  -out ${TEMP}/cdbTvVectorDataDSValidationOutpout_LI_wr.shp
-  VALID    --compare-ogr 0.0
-  ${OTBAPP_BASELINE_FILES}/cdbTvVectorDataDSValidationOutpout_LI_wr.shp
-  ${TEMP}/cdbTvVectorDataDSValidationOutpout_LI_wr.shp)
-
 if(OTB_USE_OPENCV)
   #----------- TrainRegression TESTS ----------------
   # y = 0.01*x^2 + 1.5*x - 300
@@ -972,6 +837,22 @@ if(OTB_USE_OPENCV)
     ${TEMP}/apTvClTrainVectorClassifierModel.rf)
 endif()
 
+#----------- TrainVectorRegression TESTS ----------------
+if(OTB_USE_OPENCV)
+  otb_test_application(NAME apTvClTrainVectorRegression
+    APP  TrainVectorRegression
+    OPTIONS -io.vd ${INPUTDATA}/Classification/apTvClSampleExtractionOut.sqlite
+    -feat value_0 value_1 value_2 value_3
+    -cfield class
+    -classifier rf
+    -io.out ${TEMP}/apTvClTrainVectorRegressionModel.rf
+    -io.mse ${TEMP}/apTvClTrainVectorRegressionModel.txt
+    TESTENVOPTIONS ${TEMP}/apTvClTrainVectorRegressionModel.txt
+    VALID   ${ascii_comparison}
+    ${OTBAPP_BASELINE_FILES}/apTvClTrainVectorRegressionModel.txt
+    ${TEMP}/apTvClTrainVectorRegressionModel.txt)
+endif()
+
 #----------- TrainVectorClassifier unsupervised TESTS ----------------
 if(OTB_USE_SHARK)
   otb_test_application(NAME apTvClTrainVectorUnsupervised
diff --git a/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx b/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
index 2ee837547c93137abfdc18b7d8fe38db8466cb07..44e961db2e5737455709b8a1cb6adfcca8a9fef5 100644
--- a/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
+++ b/Modules/Applications/AppDescriptors/app/otbHomologousPointsExtraction.cxx
@@ -83,7 +83,6 @@ private:
   void DoInit() override
   {
     SetName("HomologousPointsExtraction");
-    SetDocName("Homologous points extraction");
     SetDescription("Compute homologous points between images using keypoints");
     SetDocLongDescription("This application allows computing homologous points between images using keypoints. "
       " SIFT or SURF keypoints can be used and the band on which keypoints are computed can be set independently for both images."
@@ -101,7 +100,6 @@ private:
       " The vector file is always reprojected to EPSG:4326 to allow display in a GIS."
       " This is done via reprojection or by applying the image sensor models.");
     // Documentation
-    SetDocName("Homologous Points Extraction");
     SetDocLimitations("Full mode does not handle large images.");
     SetDocSeeAlso("RefineSensorModel");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx
index 5c5554a2c969df80a3b9003984cddc7b74c4241d..690f5887bf6d418cce6f23cab8d423b26832f2e6 100644
--- a/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx
+++ b/Modules/Applications/AppDimensionalityReduction/app/otbDimensionalityReduction.cxx
@@ -89,7 +89,6 @@ private:
   {
     SetName("DimensionalityReduction");
     SetDescription("Perform Dimension reduction of the input image.");
-    SetDocName("Dimensionality reduction");
     SetDocLongDescription("Performs dimensionality reduction on input image. PCA,NA-PCA,MAF,ICA methods are available. It is also possible to compute the inverse transform to reconstruct the image. It is also possible to optionally export the transformation matrix to a text file.");
     SetDocLimitations("This application does not provide the inverse transform and the transformation matrix export for the MAF.");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbImageDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbImageDimensionalityReduction.cxx
index 6d74cf3dff92bad04e794556809bef31484b37d9..3258373e4e5d2801208c0f52170089f92ff4d7f6 100644
--- a/Modules/Applications/AppDimensionalityReduction/app/otbImageDimensionalityReduction.cxx
+++ b/Modules/Applications/AppDimensionalityReduction/app/otbImageDimensionalityReduction.cxx
@@ -129,7 +129,6 @@ private:
       "according to a dimensionality reduction model file.");
 
     // Documentation
-    SetDocName("Image Dimensionality Reduction");
     SetDocLongDescription("This application reduces the dimension of an input"
                           " image, based on a machine learning model file produced by"
                           " the TrainDimensionalityReduction application. Pixels of the "
diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbTrainDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbTrainDimensionalityReduction.cxx
index 8fdbd022f265bd5314300197cc76d3bb9708a466..d5ea4307e9ce7b46da59c1a4a9dcbe6f9de16519 100644
--- a/Modules/Applications/AppDimensionalityReduction/app/otbTrainDimensionalityReduction.cxx
+++ b/Modules/Applications/AppDimensionalityReduction/app/otbTrainDimensionalityReduction.cxx
@@ -73,7 +73,6 @@ private:
     SetName("TrainDimensionalityReduction");
     SetDescription("Train a dimensionality reduction model");
 
-    SetDocName("Train Dimensionality Reduction");
     SetDocLongDescription("Trainer for dimensionality reduction algorithms "
       "(autoencoders, PCA, SOM). All input samples are used to compute the "
       "model, like other machine learning models.\n"
diff --git a/Modules/Applications/AppDimensionalityReduction/app/otbVectorDimensionalityReduction.cxx b/Modules/Applications/AppDimensionalityReduction/app/otbVectorDimensionalityReduction.cxx
index 61c73b48ec4c505cf082a7c7bb7940a5c3f996bf..ab279f88451e0ded18335a4ef47c977832ffc562 100644
--- a/Modules/Applications/AppDimensionalityReduction/app/otbVectorDimensionalityReduction.cxx
+++ b/Modules/Applications/AppDimensionalityReduction/app/otbVectorDimensionalityReduction.cxx
@@ -86,7 +86,6 @@ private:
     SetName("VectorDimensionalityReduction");
     SetDescription("Performs dimensionality reduction of the input vector data "
       "according to a model file.");
-    SetDocName("Vector Dimensionality Reduction");
     SetDocAuthors("OTB-Team");
     SetDocLongDescription("This application performs a vector data "
       "dimensionality reduction based on a model file produced by the "
diff --git a/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx b/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
index 45e44f352d9a74d9260762d10dbd8c3e59d2e007..3996335d03290236e7ff2f1e93a1d94b35d11dda 100644
--- a/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
+++ b/Modules/Applications/AppDomainTransform/app/otbDomainTransform.cxx
@@ -84,7 +84,6 @@ private:
     SetDescription("Domain Transform application for wavelet and fourier");
 
     // Documentation
-    SetDocName("DomainTransform");
     SetDocLongDescription("Domain Transform application for wavelet and fourier.");
     SetDocLimitations("This application is not streamed, check your system resources when processing large images");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppEdge/app/otbEdgeExtraction.cxx b/Modules/Applications/AppEdge/app/otbEdgeExtraction.cxx
index 0d800da70fd92e4951712ff9f939aadbdfb2abd1..ca0706944733396ba64efee0f18151caf4872cf0 100644
--- a/Modules/Applications/AppEdge/app/otbEdgeExtraction.cxx
+++ b/Modules/Applications/AppEdge/app/otbEdgeExtraction.cxx
@@ -64,7 +64,6 @@ private:
         "selected channel");
 
     // Documentation
-    SetDocName("Edge Feature Extraction");
     SetDocLongDescription(
         "This application computes edge features on a selected channel of the input."
         "It uses different filter such as gradient, Sobel and Touzi");
diff --git a/Modules/Applications/AppEdge/app/otbLineSegmentDetection.cxx b/Modules/Applications/AppEdge/app/otbLineSegmentDetection.cxx
index f5588a2a50847b7a519ccfaf004066a080df68c6..b2445364281da5c1f458e17c0b4f3739ff644cfd 100644
--- a/Modules/Applications/AppEdge/app/otbLineSegmentDetection.cxx
+++ b/Modules/Applications/AppEdge/app/otbLineSegmentDetection.cxx
@@ -59,7 +59,6 @@ private:
     SetDescription("Detect line segments in raster");
 
     // Documentation
-    SetDocName("Line segment detection");
     SetDocLongDescription(
       "This application detects locally straight contours in a image."
       " It is based on Burns, Hanson, and Riseman method and use an a contrario "
diff --git a/Modules/Applications/AppFiltering/app/otbContrastEnhancement.cxx b/Modules/Applications/AppFiltering/app/otbContrastEnhancement.cxx
index bbb8f2757b801c60d4254f6c6662c02e0ca82120..2463437174bffcaad5df5962eda5752cdf53fa99 100644
--- a/Modules/Applications/AppFiltering/app/otbContrastEnhancement.cxx
+++ b/Modules/Applications/AppFiltering/app/otbContrastEnhancement.cxx
@@ -153,7 +153,6 @@ private:
       "also a mode to equalize the luminance of the image.");
 
     // Documentation
-    SetDocName("Contrast Enhancement");
     SetDocLongDescription("This application is the implementation of the "
       "histogram equalization algorithm. The idea of the algorithm is to use "
       "the whole available dynamic. In order to do so it computes a histogram "
diff --git a/Modules/Applications/AppFiltering/app/otbSmoothing.cxx b/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
index 9134e8d22a49592695f0227532a273743b227447..443db5226b295b9463bcfc45a6ca85bbc829e1ca 100644
--- a/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
+++ b/Modules/Applications/AppFiltering/app/otbSmoothing.cxx
@@ -60,7 +60,6 @@ private:
     SetName( "Smoothing" );
     SetDescription( "Apply a smoothing filter to an image" );
 
-    SetDocName( "Smoothing" );
     SetDocLongDescription( "This application applies a smoothing filter to an "
       "image. Three methodes can be used: a gaussian filter , a mean filter "
       ", or an anisotropic diffusion using the Perona-Malik algorithm." );
diff --git a/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx b/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
index 3ca73ce8ad34e988027e619af9b3e3b9c8f1dcfb..08015f34efbcea38d89b6eba7f754ff86e23210f 100644
--- a/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
+++ b/Modules/Applications/AppFusion/app/otbBundleToPerfectSensor.cxx
@@ -48,7 +48,6 @@ private:
     SetDescription("Perform P+XS pansharpening");
 
     // Documentation
-    SetDocName("Bundle to perfect sensor");
     SetDocLongDescription("This application performs P+XS pansharpening. The default mode use Pan and XS sensor models to estimate the transformation to superimpose XS over Pan before the fusion (\"default mode\"). The application provides also a PHR mode for Pleiades images which does not use sensor models as Pan and XS products are already coregistered but only estimate an affine transformation to superimpose XS over the Pan.Note that this option is automatically activated in case Pleiades images are detected as input.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppFusion/app/otbPansharpening.cxx b/Modules/Applications/AppFusion/app/otbPansharpening.cxx
index e593a2d8edc2f050315fdae3d3970490d9cf213e..de01b8c5ce09c3789e702191051aa8ce29f956db 100644
--- a/Modules/Applications/AppFusion/app/otbPansharpening.cxx
+++ b/Modules/Applications/AppFusion/app/otbPansharpening.cxx
@@ -77,7 +77,6 @@ private:
     SetDescription("Perform P+XS pansharpening");
 
     // Documentation
-    SetDocName("Pansharpening");
     SetDocLongDescription("This application performs P+XS pansharpening. Pansharpening is a process of merging high-resolution panchromatic and lower resolution multispectral imagery to create a single high-resolution color image. Algorithms available in the applications are: RCS, bayesian fusion and Local Mean and Variance Matching(LMVM).");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx b/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
index 3534cd8513a3649c0a7ee5ddc3ef1d9ec8895cf5..b3417e3f8eedba1ecc9bc07bbf3ee71743f21afe 100644
--- a/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbEndmemberNumberEstimation.cxx
@@ -55,7 +55,6 @@ private:
     SetDescription("Estimate the number of endmembers in a hyperspectral image");
 
     // Documentation
-    SetDocName("Endmember Number Estimation");
     SetDocLongDescription("Estimate the number of endmembers "
     "in a hyperspectral image. First, compute statistics on the image and then "
     "apply an endmember number estimation algorithm using these statistics. Two "
diff --git a/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx b/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx
index 024834a13141c5c5c10e8b6967131b7e66dbe033..f4a0bd1e5f04dcac2d33eb6229c1c2805f4b9564 100644
--- a/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbHyperspectralUnmixing.cxx
@@ -94,7 +94,6 @@ private:
     SetDescription("Estimate abundance maps from an hyperspectral image and a set of endmembers.");
 
     // Documentation
-    SetDocName("Hyperspectral data unmixing");
     SetDocLongDescription("The application applies a linear unmixing algorithm "
     "to an hyperspectral data cube. This method supposes that the mixture between "
     "aterials in the scene is macroscopic and simulates a linear mixing model of "
diff --git a/Modules/Applications/AppHyperspectral/app/otbLocalRxDetection.cxx b/Modules/Applications/AppHyperspectral/app/otbLocalRxDetection.cxx
index 043e5f796b0506a67c9751ead3a76c8f36fba815..2332a1dac0615b6bc22c50efa6763781829dc4f3 100644
--- a/Modules/Applications/AppHyperspectral/app/otbLocalRxDetection.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbLocalRxDetection.cxx
@@ -54,7 +54,6 @@ private:
     SetDescription("Performs local Rx score computation on an hyperspectral image.");
 
     // Documentation
-    SetDocName("Local Rx Detection");
     SetDocLongDescription("Performs local Rx score computation on an input "
       "hyperspectral image. For each hyperspectral pixel, the Rx score is "
       "computed using statistics computed on a dual neighborhood. The dual "
diff --git a/Modules/Applications/AppHyperspectral/app/otbVertexComponentAnalysis.cxx b/Modules/Applications/AppHyperspectral/app/otbVertexComponentAnalysis.cxx
index 735b699d9c946580b462219f8a7d29f0d4fade80..484ce77d21f52c3cd8ea1f495a8b25ee8371f218 100644
--- a/Modules/Applications/AppHyperspectral/app/otbVertexComponentAnalysis.cxx
+++ b/Modules/Applications/AppHyperspectral/app/otbVertexComponentAnalysis.cxx
@@ -55,7 +55,6 @@ private:
     "Component Analysis algorithm.");
 
     // Documentation
-    SetDocName("Vertex Component Analysis");
     SetDocLongDescription("Apply the Vertex Component Analysis [1] to "
     "an hyperspectral image to extract endmembers. Given a set of mixed "
     "spectral vectors (multispectral or hyperspectral), the application "
diff --git a/Modules/Applications/AppImageUtils/app/otbColorMapping.cxx b/Modules/Applications/AppImageUtils/app/otbColorMapping.cxx
index e2078b324c452888e803dbb950ad7a3fe6f7dac6..64c84b75cb335a472e0ae2b6824d4629759c201a 100644
--- a/Modules/Applications/AppImageUtils/app/otbColorMapping.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbColorMapping.cxx
@@ -240,7 +240,6 @@ private:
     SetName("ColorMapping");
     SetDescription("Map a label image to 8-bits RGB using look-up tables.");
 
-    SetDocName("Color Mapping");
     SetDocLongDescription(
         "Map a label image to a 8-bits RGB image (both ways) using different methods:\n\n"
 
diff --git a/Modules/Applications/AppImageUtils/app/otbCompareImages.cxx b/Modules/Applications/AppImageUtils/app/otbCompareImages.cxx
index a5f7b76e2eefd594ee80bd0ebb1205da4e0672fa..bbd81130c3366022d5ce871779d42b876a378a0d 100644
--- a/Modules/Applications/AppImageUtils/app/otbCompareImages.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbCompareImages.cxx
@@ -55,7 +55,6 @@ private:
     SetDescription("Estimator between 2 images.");
 
     // Documentation
-    SetDocName("Images comparison");
     SetDocLongDescription(
         "Compute MSE (Mean Squared Error), MAE (Mean Absolute Error) and PSNR (Peak Signal to Noise Ratio) between two image bands (reference and measurement). "
         "The user has to set the used channel and can specify a ROI."
diff --git a/Modules/Applications/AppImageUtils/app/otbConcatenateImages.cxx b/Modules/Applications/AppImageUtils/app/otbConcatenateImages.cxx
index 1e790995c416c9ced025626aa83c3f5e550487fb..2b0757ef1a932411738fc5f855046831a509aae3 100644
--- a/Modules/Applications/AppImageUtils/app/otbConcatenateImages.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbConcatenateImages.cxx
@@ -60,7 +60,6 @@ private:
     SetDescription("Concatenate a list of images of the same size into a single multi-channel image.");
 
     // Documentation
-    SetDocName("Images Concatenation");
     SetDocLongDescription("Concatenate a list of images of the same size into a single multi-channel image. "
       "It reads the input image list (single or multi-channel) "
       "and generates a single multi-channel image. The channel order is the same as the list.");
diff --git a/Modules/Applications/AppImageUtils/app/otbDownloadSRTMTiles.cxx b/Modules/Applications/AppImageUtils/app/otbDownloadSRTMTiles.cxx
index 364cc4dea7446f6d32b2e8ef1d2ca6727e6d5dbe..b051a2119edac2f4dd69eaedc286532a869ecc47 100644
--- a/Modules/Applications/AppImageUtils/app/otbDownloadSRTMTiles.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbDownloadSRTMTiles.cxx
@@ -196,7 +196,6 @@ private:
     SetDescription("Download or list SRTM tiles");
 
     // Documentation
-    SetDocName("Download or list SRTM tiles related to a set of images");
     SetDocLongDescription("This application allows selecting the appropriate SRTM tiles that covers a list of images. It builds a list of the required tiles. Two modes are available: the first one download those tiles from the USGS SRTM3 website (http://dds.cr.usgs.gov/srtm/version2_1/SRTM3/), the second one list those tiles in a local directory. In both cases, you need to indicate the directory in which directory  tiles will be download or the location of local SRTM files.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppImageUtils/app/otbDynamicConvert.cxx b/Modules/Applications/AppImageUtils/app/otbDynamicConvert.cxx
index e86791307367318fd585223e2bbfecacb826dc3d..d15863691672867aa93ba64d19162c228146e23c 100644
--- a/Modules/Applications/AppImageUtils/app/otbDynamicConvert.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbDynamicConvert.cxx
@@ -73,7 +73,6 @@ private:
     SetName("DynamicConvert");
     SetDescription("Change the pixel type and rescale the image's dynamic");
 
-    SetDocName("Dynamic Conversion");
     SetDocLongDescription(
       "This application performs an image pixel type "
       "conversion (short, ushort, uchar, int, uint, float and double types are "
diff --git a/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx b/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
index b148be6bf800621c36ed22fca0bd7fa6e0c84d0a..20cfb9c00b22a35038ea49ea1ef3be0e8728627a 100644
--- a/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbExtractROI.cxx
@@ -75,7 +75,6 @@ private:
     SetDescription("Extract a ROI defined by the user.");
 
     // Documentation
-    SetDocName("Extract ROI");
     SetDocLongDescription("This application extracts a Region Of Interest with "
       "user parameters. There are four mode of extraction. The standard mode "
       "allows the user to enter one point (upper left corner of the region to "
diff --git a/Modules/Applications/AppImageUtils/app/otbManageNoData.cxx b/Modules/Applications/AppImageUtils/app/otbManageNoData.cxx
index 4cd2b5f917dfdf22963006931c5bcd91b583bee8..9158381ec66f5d389a6bde0c21cff74bff3c9468 100644
--- a/Modules/Applications/AppImageUtils/app/otbManageNoData.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbManageNoData.cxx
@@ -63,7 +63,6 @@ private:
     SetName("ManageNoData");
     SetDescription("Manage No-Data");
     // Documentation
-    SetDocName("No Data management");
     SetDocLongDescription("This application has two modes. The first allows building a mask of no-data pixels from the no-data flags read from the image file. The second allows updating the change the no-data value of an image (pixels value and metadata). This last mode also allows replacing NaN in images with a proper no-data value. To do so, one should activate the NaN is no-data option.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppImageUtils/app/otbMultiResolutionPyramid.cxx b/Modules/Applications/AppImageUtils/app/otbMultiResolutionPyramid.cxx
index d99f5e7d9cdf0a8e707f8f326255e0497af5439a..833ebcb970627c9f7045df0eadbed7616ba99939 100644
--- a/Modules/Applications/AppImageUtils/app/otbMultiResolutionPyramid.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbMultiResolutionPyramid.cxx
@@ -64,7 +64,6 @@ private:
     SetDescription("Build a multi-resolution pyramid of the image.");
 
     // Documentation
-    SetDocName("Multi Resolution Pyramid");
     SetDocLongDescription("This application builds a multi-resolution pyramid of the input image. User can specified the number of levels of the pyramid and the subsampling factor. To speed up the process, you can use the fast scheme option");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppImageUtils/app/otbPixelValue.cxx b/Modules/Applications/AppImageUtils/app/otbPixelValue.cxx
index 333e7ba397ca20d22e40fd0f3a6c17a1006e8d7d..7a972d420facc3b35a7b0fc4ea638266e0a2f05e 100644
--- a/Modules/Applications/AppImageUtils/app/otbPixelValue.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbPixelValue.cxx
@@ -54,7 +54,6 @@ private:
     SetDescription("Get the value of a pixel.");
 
     // Documentation
-    SetDocName("Pixel Value");
     SetDocLongDescription("This application gives the value of a selected "
       "pixel. There are three ways to designate a pixel, with its index, "
       "its physical coordinate (in the physical space attached to the image), "
diff --git a/Modules/Applications/AppImageUtils/app/otbQuicklook.cxx b/Modules/Applications/AppImageUtils/app/otbQuicklook.cxx
index 1f70e6c542985c37998860ca40ffdd6607e3e313..48cc0d01da68995cc326d360fd4608dcc9acfc14 100644
--- a/Modules/Applications/AppImageUtils/app/otbQuicklook.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbQuicklook.cxx
@@ -57,7 +57,6 @@ private:
   {
     SetName("Quicklook");
     SetDescription("Generates a subsampled version of an image extract");
-    SetDocName("Quick Look");
     SetDocLongDescription("Generates a subsampled version of an extract of an image defined by ROIStart and ROISize.\n"
                           "This extract is subsampled using the ratio OR the output image Size.");
     SetDocLimitations("This application does not provide yet the optimal way to decode coarser level of resolution from JPEG2000 images (like in Monteverdi).\n"
diff --git a/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx b/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx
index f114d1826b89415b61ea7b8abcd69c346cf8c086..de958dddfbc249cb4a219a16df4d309d37923798 100644
--- a/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbReadImageInfo.cxx
@@ -54,7 +54,6 @@ private:
     SetDescription("Get information about the image");
 
     // Documentation
-    SetDocName("Read image information");
     SetDocLongDescription("Display information about the input image like: image size, origin, spacing, metadata, projections...");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppImageUtils/app/otbRescale.cxx b/Modules/Applications/AppImageUtils/app/otbRescale.cxx
index ddb95a9404170a485a5006b86229272a2341e90d..0a50d18e46ceffab913d0e97a0930c0d3a1ed6b4 100644
--- a/Modules/Applications/AppImageUtils/app/otbRescale.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbRescale.cxx
@@ -54,13 +54,12 @@ private:
     SetName("Rescale");
     SetDescription("Rescale the image between two given values.");
 
-    SetDocName("Rescale Image");
     SetDocLongDescription("This application scales the given image pixel intensity between two given values.\n"
                                   "By default min (resp. max) value is set to 0 (resp. 255).\n"
                                   "Input minimum and maximum values is automatically computed for all image bands.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
-    SetDocSeeAlso(" ");
+    SetDocSeeAlso("DynamicConvert");
 
     AddDocTag(Tags::Deprecated);
     AddDocTag(Tags::Manip);
diff --git a/Modules/Applications/AppImageUtils/app/otbSplitImage.cxx b/Modules/Applications/AppImageUtils/app/otbSplitImage.cxx
index 0344029cd3e641532bbe01673fcca056bf26f9f9..3b1185ff604fed24668feb655e4f646ae24ff103 100644
--- a/Modules/Applications/AppImageUtils/app/otbSplitImage.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbSplitImage.cxx
@@ -54,7 +54,6 @@ private:
     SetName("SplitImage");
     SetDescription("Split a N multiband image into N images.");
 
-    SetDocName("Split Image");
     SetDocLongDescription("This application splits a N-bands image into N mono-band images. "
       "The output images filename will be generated from the output parameter. "
       "Thus, if the input image has 2 channels, and the user has set as output parameter, outimage.tif, "
diff --git a/Modules/Applications/AppImageUtils/app/otbTileFusion.cxx b/Modules/Applications/AppImageUtils/app/otbTileFusion.cxx
index 57c83dc13296442816b44311fd8c474b2b84e430..3db81c3cee417d6345694d12dc8c31264afae74d 100644
--- a/Modules/Applications/AppImageUtils/app/otbTileFusion.cxx
+++ b/Modules/Applications/AppImageUtils/app/otbTileFusion.cxx
@@ -51,7 +51,6 @@ private:
     SetDescription("Fusion of an image made of several tile files.");
 
     // Documentation
-    SetDocName("Image Tile Fusion");
     SetDocLongDescription("Automatically mosaic a set of non overlapping tile files into a single image. Images must have a matching number of bands and they must be listed in lexicographic order.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppIndices/app/otbRadiometricIndices.cxx b/Modules/Applications/AppIndices/app/otbRadiometricIndices.cxx
index 4d13ff7279378f64dcc20f7e5175b5e005900751..9ba700804e8acd5513db8bc5b216b25c05c9d93a 100644
--- a/Modules/Applications/AppIndices/app/otbRadiometricIndices.cxx
+++ b/Modules/Applications/AppIndices/app/otbRadiometricIndices.cxx
@@ -20,16 +20,14 @@
 
 #include "otbWrapperApplication.h"
 #include "otbWrapperApplicationFactory.h"
+#include "otbWrapperNumericalParameter.h"
 
-#include "itkUnaryFunctorImageFilter.h"
+#include "otbVegetationIndicesFunctor.h"
 #include "otbWaterIndicesFunctor.h"
 #include "otbBuiltUpIndicesFunctor.h"
 #include "otbSoilIndicesFunctor.h"
-
-#include "otbImageList.h"
-#include "otbImageListToVectorImageFilter.h"
-
-#include "otbWrapperNumericalParameter.h"
+#include "otbIndicesStackFunctor.h"
+#include "otbFunctorImageFilter.h"
 
 namespace otb
 {
@@ -50,78 +48,21 @@ public:
 
   itkTypeMacro(RadiometricIndices, otb::Wrapper::Application);
 
-  /** Output  containers typedef */
-  typedef ObjectList<itk::ProcessObject>                                    FilterListType;
-  typedef ImageList<FloatImageType>                                         ImageListType;
-  typedef ImageListToVectorImageFilter<ImageListType, FloatVectorImageType> ImageListToVectorImageFilterType;
-
-  /** Radiometric water indices functors typedef */
-  typedef Functor::SRWI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType>  SRWIFunctorType;
-  typedef Functor::NDWI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType>  NDWIFunctorType;
-  typedef Functor::NDWI2<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> NDWI2FunctorType;
-  typedef Functor::MNDWI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> MNDWIFunctorType;
-  typedef Functor::NDPI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType>  NDPIFunctorType;
-  typedef Functor::NDTI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType>  NDTIFunctorType;
-  //typedef Functor::WaterSqrtSpectralAngleFunctor<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> WaterSqrtSpectralAngleFunctor;
-
-  /** Radiometric vegetation indices functors typedef */
-  typedef Functor::NDVI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> NDVIFunctor;
-  typedef Functor::TNDVI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> TNDVIFunctor;
-  typedef Functor::RVI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> RVIFunctor;
-  typedef Functor::SAVI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> SAVIFunctor;
-  typedef Functor::TSAVI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> TSAVIFunctor;
-  typedef Functor::MSAVI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> MSAVIFunctor;
-  typedef Functor::MSAVI2<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> MSAVI2Functor;
-  typedef Functor::GEMI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> GEMIFunctor;
-  typedef Functor::IPVI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> IPVIFunctor;
-  typedef Functor::LAIFromNDVILogarithmic<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> LAIFromNDVILogFunctor;
-  typedef Functor::LAIFromReflectancesLinear<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> LAIFromReflLinearFunctor;
-  typedef Functor::LAIFromNDVIFormosat2Functor<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> LAIFromNDVIFormoFunctor;
-
-  /** Radiometric soil indices functors typedef */
-  typedef Functor::IR<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> IRFunctor;
-  typedef Functor::IC<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> ICFunctor;
-  typedef Functor::IB<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> IBFunctor;
-  typedef Functor::IB2<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType, FloatImageType::PixelType> IB2Functor;
-
-  /** Radiometric built up indices functors typedef */
-  typedef Functor::NDBI<FloatVectorImageType::InternalPixelType, FloatVectorImageType::InternalPixelType, FloatImageType::PixelType> NDBIFunctor;
-
-  /** Radiometric indices filters typedef */
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, NDWIFunctorType>  NDWIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, NDWI2FunctorType> NDWI2FilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, MNDWIFunctorType> MNDWIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, NDPIFunctorType>  NDPIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, NDTIFunctorType>  NDTIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, SRWIFunctorType>  SRWIFilterType;
-
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, NDVIFunctor>              NDVIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, TNDVIFunctor>             TNDVIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, RVIFunctor>               RVIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, SAVIFunctor>              SAVIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, TSAVIFunctor>             TSAVIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, MSAVIFunctor>             MSAVIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, MSAVI2Functor>            MSAVI2FilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, GEMIFunctor>              GEMIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, IPVIFunctor>              IPVIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, LAIFromNDVILogFunctor>    LAIFromNDVILogFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, LAIFromReflLinearFunctor> LAIFromReflLinearFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, LAIFromNDVIFormoFunctor>  LAIFromNDVIFormoFilterType;
-
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, IRFunctor>                  RIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, ICFunctor>                  CIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, IBFunctor>                  BIFilterType;
-  typedef itk::UnaryFunctorImageFilter<FloatVectorImageType, FloatImageType, IB2Functor>                 BI2FilterType;
-
-  struct indiceSpec
+  using InputType  = FloatVectorImageType::InternalPixelType;
+  using OutputType = FloatImageType::PixelType;
+
+  using RadiometricIndexType    = otb::Functor::RadiometricIndex<InputType, OutputType>;
+  using IndicesStackFunctorType = otb::Functor::IndicesStackFunctor<RadiometricIndexType>;
+
+  class indiceSpec
   {
+  public:
+    indiceSpec(std::string k, std::string i, RadiometricIndexType* ind) : key(k), item(i), indice(ind)
+    {
+    }
     std::string key;
     std::string item;
-    std::string description;
-    std::string type;
-    std::string chan1;
-    std::string chan2;
-    std::string chan3;
+    std::unique_ptr<RadiometricIndexType> indice;
   };
 
 
@@ -132,7 +73,6 @@ private:
     SetDescription("Compute radiometric indices.");
 
     // Documentation
-    SetDocName("Radiometric Indices");
     SetDocLongDescription("This application computes radiometric indices using the relevant channels of the input image. The output is a multi band image into which each channel is one of the selected indices.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
@@ -153,46 +93,52 @@ private:
     AddParameter(ParameterType_Int,  "channels.blue",  "Blue Channel");
     SetParameterDescription("channels.blue", "Blue channel index");
     SetDefaultParameterInt("channels.blue", 1);
+    SetMinimumParameterIntValue("channels.blue", 1);
+
     AddParameter(ParameterType_Int,  "channels.green",  "Green Channel");
     SetParameterDescription("channels.green", "Green channel index");
     SetDefaultParameterInt("channels.green", 1);
+    SetMinimumParameterIntValue("channels.green", 1);
+
     AddParameter(ParameterType_Int,  "channels.red",  "Red Channel");
     SetParameterDescription("channels.red", "Red channel index");
     SetDefaultParameterInt("channels.red", 1);
+    SetMinimumParameterIntValue("channels.red", 1);
+
     AddParameter(ParameterType_Int,  "channels.nir",  "NIR Channel");
     SetParameterDescription("channels.nir", "NIR channel index");
     SetDefaultParameterInt("channels.nir", 1);
+    SetMinimumParameterIntValue("channels.nir", 1);
+
     AddParameter(ParameterType_Int,  "channels.mir",  "Mir Channel");
     SetParameterDescription("channels.mir", "Mir channel index");
     SetDefaultParameterInt("channels.mir", 1);
-    //AddParameter(ParameterType_Int,  "channels.rho860",  "Rho860 Channel");
-    //SetParameterDescription("channels.rho860", "860nm band channel index");
-    //SetDefaultParameterInt("channels.rho860", 1);
-    //AddParameter(ParameterType_Int,  "channels.rho1240",  "Rho1240 Channel");
-    //SetParameterDescription("channels.rho1240", "1240nm band channel index");
-    //SetDefaultParameterInt("channels.rho1240", 1);
+    SetMinimumParameterIntValue("channels.mir", 1);
 
     AddParameter(ParameterType_ListView,  "list", "Available Radiometric Indices");
     SetParameterDescription("list",
-        "List of available radiometric indices with their relevant channels in brackets:\n\n"
-        "* Vegetation:NDVI - Normalized difference vegetation index (Red, NIR)\n"
-        "* Vegetation:TNDVI - Transformed normalized difference vegetation index (Red, NIR)\n"
-        "* Vegetation:RVI - Ratio vegetation index (Red, NIR)\n"
-        "* Vegetation:SAVI - Soil adjusted vegetation index (Red, NIR)\n"
-        "* Vegetation:TSAVI - Transformed soil adjusted vegetation index (Red, NIR)\n"
-        "* Vegetation:MSAVI - Modified soil adjusted vegetation index (Red, NIR)\n"
-        "* Vegetation:MSAVI2 - Modified soil adjusted vegetation index 2 (Red, NIR)\n"
-        "* Vegetation:GEMI - Global environment monitoring index (Red, NIR)\n"
-        "* Vegetation:IPVI - Infrared percentage vegetation index (Red, NIR)\n"
-        "* Water:NDWI - Normalized difference water index (Gao 1996) (NIR, MIR)\n"
-        "* Water:NDWI2 - Normalized difference water index (Mc Feeters 1996) (Green, NIR)\n"
-        "* Water:MNDWI - Modified normalized difference water index (Xu 2006) (Green, MIR)\n"
-        "* Water:NDPI - Normalized difference pond index (Lacaux et al.) (MIR, Green)\n"
-        "* Water:NDTI - Normalized difference turbidity index (Lacaux et al.) (Red, Green)\n"
-        "* Soil:RI - Redness index (Red, Green)\n"
-        "* Soil:CI - Color index (Red, Green)\n"
-        "* Soil:BI - Brightness index (Red, Green)\n"
-        "* Soil:BI2 - Brightness index 2 (NIR, Red, Green)");
+                            "List of available radiometric indices with their relevant channels in brackets:\n\n"
+                            "* Vegetation:NDVI - Normalized difference vegetation index (Red, NIR)\n"
+                            "* Vegetation:TNDVI - Transformed normalized difference vegetation index (Red, NIR)\n"
+                            "* Vegetation:RVI - Ratio vegetation index (Red, NIR)\n"
+                            "* Vegetation:SAVI - Soil adjusted vegetation index (Red, NIR)\n"
+                            "* Vegetation:TSAVI - Transformed soil adjusted vegetation index (Red, NIR)\n"
+                            "* Vegetation:MSAVI - Modified soil adjusted vegetation index (Red, NIR)\n"
+                            "* Vegetation:MSAVI2 - Modified soil adjusted vegetation index 2 (Red, NIR)\n"
+                            "* Vegetation:GEMI - Global environment monitoring index (Red, NIR)\n"
+                            "* Vegetation:IPVI - Infrared percentage vegetation index (Red, NIR)\n"
+                            "* Vegetation:LAIFromNDVILog - Leaf Area Index from log NDVI (Red, NIR)\n"
+                            "* Vegetation::LAIFromReflLinear - Leaf Area Index from reflectances with linear combination (Red, NIR)\n"
+                            "* Vegetation::LAIFromNDVIFormo - Leaf Area Index from Formosat 2  TOC (Red, NIR)\n"
+                            "* Water:NDWI - Normalized difference water index (Gao 1996) (NIR, MIR)\n"
+                            "* Water:NDWI2 - Normalized difference water index (Mc Feeters 1996) (Green, NIR)\n"
+                            "* Water:MNDWI - Modified normalized difference water index (Xu 2006) (Green, MIR)\n"
+                            "* Water:NDTI - Normalized difference turbidity index (Lacaux et al.) (Red, Green)\n"
+                            "* Soil:RI - Redness index (Red, Green)\n"
+                            "* Soil:CI - Color index (Red, Green)\n"
+                            "* Soil:BI - Brightness index (Red, Green)\n"
+                            "* Soil:BI2 - Brightness index 2 (NIR, Red, Green)\n"
+                            "* BuiltUp:ISU - Built Surfaces Index (NIR,Red) ");
 
     AddRAMParameter();
 
@@ -205,392 +151,118 @@ private:
 
     m_Map.clear();
 
-    // Add Available choices
-    indiceSpec s_NDVI;
-    s_NDVI.key   = "list.ndvi";
-    s_NDVI.item  = "Vegetation:NDVI";
-    s_NDVI.description = "";
-    s_NDVI.type  = "NDVI";
-    s_NDVI.chan1 = "red";
-    s_NDVI.chan2 = "nir";
-    s_NDVI.chan3 = "";
-    m_Map.push_back(s_NDVI);
-
-    indiceSpec s_TNDVI;
-    s_TNDVI.key   = "list.tndvi";
-    s_TNDVI.item  = "Vegetation:TNDVI";
-    s_TNDVI.description = "";
-    s_TNDVI.type  = "TNDVI";
-    s_TNDVI.chan1 = "red";
-    s_TNDVI.chan2 = "nir";
-    s_TNDVI.chan3 = "";
-    m_Map.push_back(s_TNDVI);
-
-    indiceSpec s_RVI;
-    s_RVI.key   = "list.rvi";
-    s_RVI.item  = "Vegetation:RVI";
-    s_RVI.description = "";
-    s_RVI.type  = "RVI";
-    s_RVI.chan1 = "red";
-    s_RVI.chan2 = "nir";
-    s_RVI.chan3 = "";
-    m_Map.push_back(s_RVI);
-
-    indiceSpec s_SAVI;
-    s_SAVI.key   = "list.savi";
-    s_SAVI.item  = "Vegetation:SAVI";
-    s_SAVI.description = "";
-    s_SAVI.type  = "SAVI";
-    s_SAVI.chan1 = "red";
-    s_SAVI.chan2 = "nir";
-    s_SAVI.chan3 = "";
-    m_Map.push_back(s_SAVI);
-
-    indiceSpec s_TSAVI;
-    s_TSAVI.key   = "list.tsavi";
-    s_TSAVI.item  = "Vegetation:TSAVI";
-    s_TSAVI.description = "";
-    s_TSAVI.type  = "TSAVI";
-    s_TSAVI.chan1 = "red";
-    s_TSAVI.chan2 = "nir";
-    s_TSAVI.chan3 = "";
-    m_Map.push_back(s_TSAVI);
-
-    indiceSpec s_MSAVI;
-    s_MSAVI.key   = "list.msavi";
-    s_MSAVI.item  = "Vegetation:MSAVI";
-    s_MSAVI.description = "";
-    s_MSAVI.type  = "MSAVI";
-    s_MSAVI.chan1 = "red";
-    s_MSAVI.chan2 = "nir";
-    s_MSAVI.chan3 = "";
-    m_Map.push_back(s_MSAVI);
-
-    indiceSpec s_MSAVI2;
-    s_MSAVI2.key   = "list.msavi2";
-    s_MSAVI2.item  = "Vegetation:MSAVI2";
-    s_MSAVI2.description = "";
-    s_MSAVI2.type  = "MSAVI2";
-    s_MSAVI2.chan1 = "red";
-    s_MSAVI2.chan2 = "nir";
-    s_MSAVI2.chan3 = "";
-    m_Map.push_back(s_MSAVI2);
-
-    indiceSpec s_GEMI;
-    s_GEMI.key   = "list.gemi";
-    s_GEMI.item  = "Vegetation:GEMI";
-    s_GEMI.description = "";
-    s_GEMI.type  = "GEMI";
-    s_GEMI.chan1 = "red";
-    s_GEMI.chan2 = "nir";
-    s_GEMI.chan3 = "";
-    m_Map.push_back(s_GEMI);
-
-    indiceSpec s_IPVI;
-    s_IPVI.key   = "list.ipvi";
-    s_IPVI.item  = "Vegetation:IPVI";
-    s_IPVI.description = "";
-    s_IPVI.type  = "IPVI";
-    s_IPVI.chan1 = "red";
-    s_IPVI.chan2 = "nir";
-    s_IPVI.chan3 = "";
-    m_Map.push_back(s_IPVI);
-
-    indiceSpec s_LAIFromNDVILog;
-    s_LAIFromNDVILog.key   = "list.laindvilog";
-    s_LAIFromNDVILog.item  = "Vegetation:LAIFromNDVILog";
-    s_LAIFromNDVILog.description = "";
-    s_LAIFromNDVILog.type  = "LAIFromNDVILog";
-    s_LAIFromNDVILog.chan1 = "red";
-    s_LAIFromNDVILog.chan2 = "nir";
-    s_LAIFromNDVILog.chan3 = "";
-    m_Map.push_back(s_LAIFromNDVILog);
-
-    indiceSpec s_LAIFromReflLinear;
-    s_LAIFromReflLinear.key   = "list.lairefl";
-    s_LAIFromReflLinear.item  = "Vegetation:LAIFromReflLinear";
-    s_LAIFromReflLinear.description = "";
-    s_LAIFromReflLinear.type  = "LAIFromReflLinear";
-    s_LAIFromReflLinear.chan1 = "red";
-    s_LAIFromReflLinear.chan2 = "nir";
-    s_LAIFromReflLinear.chan3 = "";
-    m_Map.push_back(s_LAIFromReflLinear);
-
-    indiceSpec s_LAIFromNDVIFormo;
-    s_LAIFromNDVIFormo.key   = "list.laindviformo";
-    s_LAIFromNDVIFormo.item  = "Vegetation:LAIFromNDVIFormo";
-    s_LAIFromNDVIFormo.description = "";
-    s_LAIFromNDVIFormo.type  = "LAIFromNDVIFormo";
-    s_LAIFromNDVIFormo.chan1 = "red";
-    s_LAIFromNDVIFormo.chan2 = "nir";
-    s_LAIFromNDVIFormo.chan3 = "";
-    m_Map.push_back(s_LAIFromNDVIFormo);
-
-    indiceSpec s_NDWI;
-    s_NDWI.key   = "list.ndwi";
-    s_NDWI.item  = "Water:NDWI";
-    s_NDWI.description = "";
-    s_NDWI.type  = "NDWI";
-    s_NDWI.chan1 = "nir";
-    s_NDWI.chan2 = "mir";
-    s_NDWI.chan3 = "";
-    m_Map.push_back(s_NDWI);
-
-    indiceSpec s_NDWI2;
-    s_NDWI2.key   = "list.ndwi2";
-    s_NDWI2.item  = "Water:NDWI2";
-    s_NDWI2.description = "";
-    s_NDWI2.type  = "NDWI2";
-    s_NDWI2.chan1 = "green";
-    s_NDWI2.chan2 = "nir";
-    s_NDWI2.chan3 = "";
-    m_Map.push_back(s_NDWI2);
-
-    indiceSpec s_MNDWI;
-    s_MNDWI.key   = "list.mndwi";
-    s_MNDWI.item  = "Water:MNDWI";
-    s_MNDWI.description = "";
-    s_MNDWI.type  = "MNDWI";
-    s_MNDWI.chan1 = "green";
-    s_MNDWI.chan2 = "mir";
-    s_MNDWI.chan3 = "";
-    m_Map.push_back(s_MNDWI);
-
-    indiceSpec s_NDPI;
-    s_NDPI.key   = "list.ndpi";
-    s_NDPI.item  = "Water:NDPI";
-    s_NDPI.description = "";
-    s_NDPI.type  = "NDPI";
-    s_NDPI.chan1 = "mir";
-    s_NDPI.chan2 = "green";
-    s_NDPI.chan3 = "";
-    m_Map.push_back(s_NDPI);
-
-    indiceSpec s_NDTI;
-    s_NDTI.key   = "list.ndti";
-    s_NDTI.item  = "Water:NDTI";
-    s_NDTI.description = "";
-    s_NDTI.type  = "NDTI";
-    s_NDTI.chan1 = "red";
-    s_NDTI.chan2 = "green";
-    s_NDTI.chan3 = "";
-    m_Map.push_back(s_NDTI);
-
-    indiceSpec s_SRWI;
-    s_SRWI.key   = "list.srwi";
-    s_SRWI.item  = "Water:SRWI";
-    s_SRWI.description = "";
-    s_SRWI.type  = "SRWI";
-    s_SRWI.chan1 = "rho860";
-    s_SRWI.chan2 = "rho1240";
-    s_SRWI.chan3 = "";
-    //m_Map.push_back(s_SRWI);
-
-    indiceSpec s_RI;
-    s_RI.key   = "list.ri";
-    s_RI.item  = "Soil:RI";
-    s_RI.description = "";
-    s_RI.type  = "RI";
-    s_RI.chan1 = "red";
-    s_RI.chan2 = "green";
-    s_RI.chan3 = "";
-    m_Map.push_back(s_RI);
-
-    indiceSpec s_CI;
-    s_CI.key   = "list.ci";
-    s_CI.item  = "Soil:CI";
-    s_CI.description = "";
-    s_CI.type  = "CI";
-    s_CI.chan1 = "red";
-    s_CI.chan2 = "green";
-    s_CI.chan3 = "";
-    m_Map.push_back(s_CI);
-
-    indiceSpec s_BI;
-    s_BI.key   = "list.bi";
-    s_BI.item  = "Soil:BI";
-    s_BI.description = "";
-    s_BI.type  = "BI";
-    s_BI.chan1 = "red";
-    s_BI.chan2 = "green";
-    s_BI.chan3 = "";
-    m_Map.push_back(s_BI);
-
-    indiceSpec s_BI2;
-    s_BI2.key   = "list.bi2";
-    s_BI2.item  = "Soil:BI2";
-    s_BI2.description = "";
-    s_BI2.type  = "BI2";
-    s_BI2.chan1 = "nir";
-    s_BI2.chan2 = "red";
-    s_BI2.chan3 = "green";
-    m_Map.push_back(s_BI2);
+    m_Map.push_back({"list.ndvi", "Vegetation:NDVI", new otb::Functor::NDVI<InputType, OutputType>()});
+    m_Map.push_back({"list.tndvi", "Vegetation:TNDVI", new otb::Functor::TNDVI<InputType, OutputType>()});
+    m_Map.push_back({"list.rdvi", "Vegetation:RVI", new otb::Functor::RVI<InputType, OutputType>()});
+    m_Map.push_back({"list.savi", "Vegetation:SAVI", new otb::Functor::SAVI<InputType, OutputType>()});
+    m_Map.push_back({"list.tsavi", "Vegetation:TSAVI", new otb::Functor::TSAVI<InputType, OutputType>()});
+    m_Map.push_back({"list.msavi", "Vegetation:MSAVI", new otb::Functor::MSAVI<InputType, OutputType>()});
+    m_Map.push_back({"list.msavi2", "Vegetation:MSAVI2", new otb::Functor::MSAVI2<InputType, OutputType>()});
+    m_Map.push_back({"list.gemi", "Vegetation:GEMI", new otb::Functor::GEMI<InputType, OutputType>()});
+    m_Map.push_back({"list.ipvi", "Vegetation:IPVI", new otb::Functor::IPVI<InputType, OutputType>()});
+    m_Map.push_back({"list.laindvilog", "Vegetation:LAIFromNDVILog", new otb::Functor::LAIFromNDVILogarithmic<InputType, OutputType>()});
+    m_Map.push_back({"list.lairefl", "Vegetation:LAIFromReflLinear", new otb::Functor::LAIFromReflectancesLinear<InputType, OutputType>()});
+    m_Map.push_back({"list.laindviformo", "Vegetation:LAIFromNDVIFormo", new otb::Functor::LAIFromNDVIFormosat2Functor<InputType, OutputType>()});
+    m_Map.push_back({"list.ndwi", "Water:NDWI", new otb::Functor::NDWI<InputType, OutputType>()});
+    m_Map.push_back({"list.ndwi2", "Water:NDWI2", new otb::Functor::NDWI2<InputType, OutputType>()});
+    m_Map.push_back({"list.mndwi", "Water:MNDWI", new otb::Functor::MNDWI<InputType, OutputType>()});
+    m_Map.push_back({"list.ndti", "Water:NDTI", new otb::Functor::NDTI<InputType, OutputType>()});
+    m_Map.push_back({"list.ri", "Soil:RI", new otb::Functor::RI<InputType, OutputType>()});
+    m_Map.push_back({"list.ci", "Soil:CI", new otb::Functor::CI<InputType, OutputType>()});
+    m_Map.push_back({"list.bi", "Soil:BI", new otb::Functor::BI<InputType, OutputType>()});
+    m_Map.push_back({"list.bi2", "Soil:BI2", new otb::Functor::BI2<InputType, OutputType>()});
+    m_Map.push_back({"list.isu", "BuiltUp:ISU", new otb::Functor::ISU<InputType, OutputType>()});
 
     ClearChoices("list");
+
     for ( unsigned int i=0; i<m_Map.size(); i++ )
       {
       AddChoice(m_Map[i].key, m_Map[i].item);
-      //SetParameterDescription(m_Map[i].item, m_Map[i].description);
       }
   }
 
-  void DoUpdateParameters() override
+  // Compute required bands for selected indices
+  std::set<CommonBandNames> GetRequiredBands()
   {
-    //Nothing to do here
-  }
+    std::set<CommonBandNames> required;
 
-#define otbRadiometricWaterIndicesMacro( type )                           \
-    {                                                                     \
-    type##FilterType::Pointer l_##type##Filter = type##FilterType::New(); \
-    std::ostringstream oss;                                               \
-    oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan1;         \
-    l_##type##Filter->GetFunctor().SetIndex1(this->GetParameterInt(oss.str()));\
-    oss.str("");                                                          \
-    oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan2;         \
-    l_##type##Filter->GetFunctor().SetIndex2(this->GetParameterInt(oss.str()));\
-    l_##type##Filter->SetInput(inImage);                                  \
-    m_FilterList->PushBack( l_##type##Filter );                           \
-    m_ImageList->PushBack( l_##type##Filter->GetOutput() );               \
-    otbAppLogINFO(<< m_Map[GetSelectedItems("list")[idx]].item << " added.");\
-    }
-
-#define otbRadiometricVegetationIndicesMacro( type )                      \
-    {                                                                     \
-    type##FilterType::Pointer l_##type##Filter = type##FilterType::New(); \
-    std::ostringstream oss;                                               \
-    oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan1;         \
-    l_##type##Filter->GetFunctor().SetRedIndex(this->GetParameterInt(oss.str())); \
-    oss.str("");                                                          \
-    oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan2;         \
-    l_##type##Filter->GetFunctor().SetNIRIndex(this->GetParameterInt(oss.str())); \
-    l_##type##Filter->SetInput(inImage);                                  \
-    m_FilterList->PushBack( l_##type##Filter );                           \
-    m_ImageList->PushBack( l_##type##Filter->GetOutput() );               \
-    otbAppLogINFO(<<m_Map[GetSelectedItems("list")[idx]].item<<" added.");\
+    for (unsigned int idx = 0; idx < GetSelectedItems("list").size(); ++idx)
+    {
+      auto requiredForCurrentIndice = m_Map[GetSelectedItems("list")[idx]].indice->GetRequiredBands();
+      required.insert(requiredForCurrentIndice.begin(), requiredForCurrentIndice.end());
     }
+    return required;
+  }
 
-#define otbRadiometricSoilIndicesMacro( type )                            \
-    {                                                                     \
-    type##FilterType::Pointer l_##type##Filter = type##FilterType::New(); \
-    std::ostringstream oss;                                               \
-    oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan1;         \
-    l_##type##Filter->GetFunctor().SetRedIndex(this->GetParameterInt(oss.str()));\
-    oss.str("");                                                          \
-    oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan2;         \
-    l_##type##Filter->GetFunctor().SetGreenIndex(this->GetParameterInt(oss.str()));\
-    l_##type##Filter->SetInput(inImage);                                  \
-    m_FilterList->PushBack( l_##type##Filter );                           \
-    m_ImageList->PushBack( l_##type##Filter->GetOutput() );               \
-    otbAppLogINFO(<< m_Map[GetSelectedItems("list")[idx]].item << " added.");\
-    }
+  void DoUpdateParameters() override
+  {
+    //Nothing to do here
+  }
 
   void DoExecute() override
   {
+    // Retrieve number of bands of input image
+    unsigned int nbChan = GetParameterImage("in")->GetNumberOfComponentsPerPixel();
 
-    int nbChan = GetParameterImage("in")->GetNumberOfComponentsPerPixel();
+    // Derive required bands from selected indices
+    auto requiredBands = GetRequiredBands();
 
-    if (   (this->GetParameterInt("channels.blue")  <= nbChan)
-        && (this->GetParameterInt("channels.green") <= nbChan)
-        && (this->GetParameterInt("channels.red")   <= nbChan)
-        && (this->GetParameterInt("channels.nir")   <= nbChan)
-        && (this->GetParameterInt("channels.mir")   <= nbChan))
-      {
+    // Map to store association between bands and indices
+    std::map<CommonBandNames, size_t> bandIndicesMap;
 
-      m_FilterList = FilterListType::New();
-      m_ImageList  = ImageListType::New();
-      m_Concatener = ImageListToVectorImageFilterType::New();
-
-      FloatVectorImageType* inImage = GetParameterImage("in");
+    // Lambda that will:
+    // - Check if band is required,
+    // - Check band index range,
+    // - Populate the bandIndicesMap
+    auto bandChecker = [this, requiredBands, nbChan](std::map<CommonBandNames, size_t>& indicesMap, const CommonBandNames& band, const std::string& key) {
+      if (requiredBands.find(band) != requiredBands.end())
+      {
+        unsigned int idx = this->GetParameterInt(key);
 
-      for (unsigned int idx = 0; idx < GetSelectedItems("list").size(); ++idx)
+        if (idx > nbChan)
         {
-
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:NDVI")
-          otbRadiometricVegetationIndicesMacro(NDVI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:TNDVI")
-          otbRadiometricVegetationIndicesMacro(TNDVI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:RVI")
-          otbRadiometricVegetationIndicesMacro(RVI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:SAVI")
-          otbRadiometricVegetationIndicesMacro(SAVI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:TSAVI")
-          otbRadiometricVegetationIndicesMacro(TSAVI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:MSAVI")
-          otbRadiometricVegetationIndicesMacro(MSAVI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:MSAVI2")
-          otbRadiometricVegetationIndicesMacro(MSAVI2);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:GEMI")
-          otbRadiometricVegetationIndicesMacro(GEMI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:IPVI")
-          otbRadiometricVegetationIndicesMacro(IPVI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:LAIFromNDVILog")
-          otbRadiometricVegetationIndicesMacro(LAIFromNDVILog);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:LAIFromReflLinear")
-          otbRadiometricVegetationIndicesMacro(LAIFromReflLinear);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Vegetation:LAIFromNDVIFormo")
-          otbRadiometricVegetationIndicesMacro(LAIFromNDVIFormo);
-
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Water:NDWI")
-          otbRadiometricWaterIndicesMacro(NDWI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Water:NDWI2")
-          otbRadiometricWaterIndicesMacro(NDWI2);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Water:MNDWI")
-          otbRadiometricWaterIndicesMacro(MNDWI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Water:NDPI")
-          otbRadiometricWaterIndicesMacro(NDPI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Water:NDTI")
-          otbRadiometricWaterIndicesMacro(NDTI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Water:SRWI")
-          otbRadiometricWaterIndicesMacro(SRWI);
-
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Soil:RI")
-          otbRadiometricSoilIndicesMacro(RI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Soil:CI")
-          otbRadiometricSoilIndicesMacro(CI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Soil:BI")
-          otbRadiometricSoilIndicesMacro(BI);
-        if (m_Map[GetSelectedItems("list")[idx]].item == "Soil:BI2")
-          {
-          BI2FilterType::Pointer l_BI2Filter = BI2FilterType::New();
-          std::ostringstream oss;
-          oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan1;
-          l_BI2Filter->GetFunctor().SetNIRIndex(this->GetParameterInt(oss.str()));
-          oss.str("");
-          oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan2;
-          l_BI2Filter->GetFunctor().SetRedIndex(this->GetParameterInt(oss.str()));
-          oss.str("");
-          oss<<"channels."<<m_Map[GetSelectedItems("list")[idx]].chan3;
-          l_BI2Filter->GetFunctor().SetGreenIndex(this->GetParameterInt(oss.str()));
-          l_BI2Filter->SetInput(inImage);
-          m_FilterList->PushBack( l_BI2Filter );
-          m_ImageList->PushBack( l_BI2Filter->GetOutput() );
-          otbAppLogINFO(<< m_Map[GetSelectedItems("list")[idx]].item << " added.");
-          }
-
+          otbAppLogFATAL(<< "Index for band " << key << " exceeds the number of channels in image (" << nbChan << ")");
         }
-
-      if( m_ImageList->Size() == 0 )
+        else
         {
-        itkExceptionMacro(<< "No indices selected...");
+          indicesMap[band] = idx;
         }
+      }
+    };
 
-      m_Concatener->SetInput( m_ImageList );
-      m_Concatener->UpdateOutputInformation();
+    // Call lambda for each possible band
+    bandChecker(bandIndicesMap, CommonBandNames::BLUE, "channels.blue");
+    bandChecker(bandIndicesMap, CommonBandNames::GREEN, "channels.green");
+    bandChecker(bandIndicesMap, CommonBandNames::RED, "channels.red");
+    bandChecker(bandIndicesMap, CommonBandNames::NIR, "channels.nir");
+    bandChecker(bandIndicesMap, CommonBandNames::MIR, "channels.mir");
 
-      SetParameterOutputImage("out", m_Concatener->GetOutput());
-      }
-    else
-      {
-      itkExceptionMacro(<< "At least one needed channel has an invalid index");
+    std::vector<RadiometricIndexType*> indices;
+
+    // Find selected indices
+    for (unsigned int idx = 0; idx < GetSelectedItems("list").size(); ++idx)
+    {
+      // Retrieve the indice instance
+      indices.push_back(m_Map[GetSelectedItems("list")[idx]].indice.get());
+
+      // And set bands using the band map
+      indices.back()->SetBandsIndices(bandIndicesMap);
       }
 
-  }
+      // Build a composite indices functor to compute all indices at
+      // once
+      auto compositeFunctor = IndicesStackFunctorType(indices);
 
-  FilterListType::Pointer                   m_FilterList;
-  ImageListType::Pointer                    m_ImageList;
-  ImageListToVectorImageFilterType::Pointer m_Concatener;
-  std::vector<indiceSpec>                   m_Map;
+      // Build and plug functor filter
+      auto filter = NewFunctorFilter(compositeFunctor);
+      filter->SetInputs(GetParameterImage("in"));
+      SetParameterOutputImage("out", filter->GetOutput());
+
+      // Call register pipeline to allow streaming and garbage collection
+      RegisterPipeline();
+  }
 
+  std::vector<indiceSpec> m_Map;
 };
 
 }
diff --git a/Modules/Applications/AppIndices/otb-module.cmake b/Modules/Applications/AppIndices/otb-module.cmake
index 6133056e60beb13dd6e2f8ed203274ab1ae3a751..3c100b67faa40cd069df1c1ae1064023ddcc74f4 100644
--- a/Modules/Applications/AppIndices/otb-module.cmake
+++ b/Modules/Applications/AppIndices/otb-module.cmake
@@ -24,7 +24,7 @@ otb_module(OTBAppIndices
   DEPENDS
     OTBIndices
     OTBApplicationEngine
-    OTBObjectList
+    OTBFunctor
   TEST_DEPENDS
     OTBTestKernel
     OTBCommandLine
diff --git a/Modules/Applications/AppKMZ/app/otbKmzExport.cxx b/Modules/Applications/AppKMZ/app/otbKmzExport.cxx
index 63dd25d75123777b13b172c61939f8413a44ac72..62c9aada87a27808fd6096d33e0609475c7ba01b 100644
--- a/Modules/Applications/AppKMZ/app/otbKmzExport.cxx
+++ b/Modules/Applications/AppKMZ/app/otbKmzExport.cxx
@@ -50,7 +50,6 @@ private:
     SetName("KmzExport");
     SetDescription("Export the input image in a KMZ product.");
     // Documentation
-    SetDocName("Image to KMZ Export");
     SetDocLongDescription("This application exports the input image in a kmz product that can be display in the Google Earth software. The user can set the size of the product size, a logo and a legend to the product. Furthemore, to obtain a product that fits the relief, a DEM can be used.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppMathParser/app/otbBandMath.cxx b/Modules/Applications/AppMathParser/app/otbBandMath.cxx
index 38edf77197af15a37c5638cc33d7de906616ba2a..6e741ba4e52d9b4ae15d7d29b253f4a725ee0526 100644
--- a/Modules/Applications/AppMathParser/app/otbBandMath.cxx
+++ b/Modules/Applications/AppMathParser/app/otbBandMath.cxx
@@ -62,7 +62,6 @@ private:
       "on several multi-band images."
     );
 
-    SetDocName( "Band Math" );
 
     SetDocLongDescription(
       "This application performs a mathematical operation on several multi-band "
diff --git a/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx b/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx
index bc8e637b439c853caf65811905376ed8db56cdd7..14a1bd82103379fe3caa6be0bf2f238c363ca36b 100644
--- a/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx
+++ b/Modules/Applications/AppMathParserX/app/otbBandMathX.cxx
@@ -61,7 +61,6 @@ private:
 
     SetDescription("This application performs mathematical operations on several multiband images.");
 
-    SetDocName( "Band Math X" );
 
     SetDocLongDescription(
       "This application performs a mathematical operation on several multi-band "
diff --git a/Modules/Applications/AppMoments/app/otbLocalStatisticExtraction.cxx b/Modules/Applications/AppMoments/app/otbLocalStatisticExtraction.cxx
index 72321beef4cfaecff619ea589e2e894d42d6463d..47a68fbdd17d2dd0eda919200f188fcf4007cf74 100644
--- a/Modules/Applications/AppMoments/app/otbLocalStatisticExtraction.cxx
+++ b/Modules/Applications/AppMoments/app/otbLocalStatisticExtraction.cxx
@@ -59,7 +59,6 @@ SetName("LocalStatisticExtraction");
 SetDescription("Computes local statistical moments on every pixel in the selected channel of the input image");
 
 // Documentation
-SetDocName("Local Statistic Extraction");
 SetDocLongDescription("This application computes the 4 local statistical moments on every pixel in the selected channel of the input image, over a specified neighborhood. The output image is multi band with one statistical moment (feature) per band. Thus, the 4 output features are the Mean, the Variance, the Skewness and the Kurtosis. They are provided in this exact order in the output image.");
 SetDocLimitations("None");
 SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppMorphology/app/otbBinaryMorphologicalOperation.cxx b/Modules/Applications/AppMorphology/app/otbBinaryMorphologicalOperation.cxx
index 1394c94c5cb8d469c5a556a74f6eddc5e694fafe..91c7b8812a12692e42d87b1b8e3ec995a77a12cc 100644
--- a/Modules/Applications/AppMorphology/app/otbBinaryMorphologicalOperation.cxx
+++ b/Modules/Applications/AppMorphology/app/otbBinaryMorphologicalOperation.cxx
@@ -78,7 +78,6 @@ SetName( "BinaryMorphologicalOperation" );
 SetDescription( "Performs morphological operations on an input image channel" );
 
 // Documentation
-SetDocName( "Binary Morphological Operation" );
 SetDocLongDescription( "This application performs binary morphological "
   "operations on a mono band image or a channel of the input." );
 SetDocLimitations( "None" );
diff --git a/Modules/Applications/AppMorphology/app/otbGrayScaleMorphologicalOperation.cxx b/Modules/Applications/AppMorphology/app/otbGrayScaleMorphologicalOperation.cxx
index 315e94d3a2f47f655747e19b9f484fe16f182ede..4eab7d07270357beca147ed5359f11a48b89af08 100644
--- a/Modules/Applications/AppMorphology/app/otbGrayScaleMorphologicalOperation.cxx
+++ b/Modules/Applications/AppMorphology/app/otbGrayScaleMorphologicalOperation.cxx
@@ -77,7 +77,6 @@ SetName("GrayScaleMorphologicalOperation");
 SetDescription("Performs morphological operations on a grayscale input image");
 
 // Documentation
-SetDocName("Grayscale Morphological Operation");
 SetDocLongDescription("This application performs grayscale morphological operations on a mono band image");
 SetDocLimitations("None");
 SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppMorphology/app/otbMorphologicalClassification.cxx b/Modules/Applications/AppMorphology/app/otbMorphologicalClassification.cxx
index 2d594e24f68d9b0a5330a690e6f30be392201bb5..c3445b89a71de75166c0c613ed026b25464b06be 100644
--- a/Modules/Applications/AppMorphology/app/otbMorphologicalClassification.cxx
+++ b/Modules/Applications/AppMorphology/app/otbMorphologicalClassification.cxx
@@ -77,7 +77,6 @@ private:
       "classification on an input image channel" );
 
     // Documentation
-    SetDocName( "Morphological Classification" );
     SetDocLongDescription( 
     "This algorithm is based on the following publication:\n"
     "Martino Pesaresi and Jon Alti Benediktsson, Member, IEEE: A new approach "
diff --git a/Modules/Applications/AppMorphology/app/otbMorphologicalMultiScaleDecomposition.cxx b/Modules/Applications/AppMorphology/app/otbMorphologicalMultiScaleDecomposition.cxx
index ab27887c6c79d0041ea9340b113c2068b577a41a..0cb3c61216990e5499c5d1911079e2701576302c 100644
--- a/Modules/Applications/AppMorphology/app/otbMorphologicalMultiScaleDecomposition.cxx
+++ b/Modules/Applications/AppMorphology/app/otbMorphologicalMultiScaleDecomposition.cxx
@@ -71,7 +71,6 @@ private:
     SetDescription( "Perform a geodesic morphology based image analysis on an input image channel" );
 
     // Documentation
-    SetDocName( "Morphological Multi Scale Decomposition" );
     SetDocLongDescription(
             "This application recursively apply geodesic decomposition. \n"
                     "\n"
diff --git a/Modules/Applications/AppMorphology/app/otbMorphologicalProfilesAnalysis.cxx b/Modules/Applications/AppMorphology/app/otbMorphologicalProfilesAnalysis.cxx
index 09593c093fc49d11a332b5be6c5a08ecf382979e..75b4e6f3b71a83a1682783b018bf4ac238f3b91b 100644
--- a/Modules/Applications/AppMorphology/app/otbMorphologicalProfilesAnalysis.cxx
+++ b/Modules/Applications/AppMorphology/app/otbMorphologicalProfilesAnalysis.cxx
@@ -77,7 +77,6 @@ private:
     SetDescription( "Performs morphological profiles analysis on an input image channel." );
 
     // Documentation
-    SetDocName( "Morphological Profiles Analysis" );
     SetDocLongDescription( "This algorithm is derived from the following publication:\n\n"
 
                                    "Martino Pesaresi and Jon Alti Benediktsson, Member, IEEE: A new approach\n"
diff --git a/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx b/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx
index c0402d091a4d64e9485065930b7596106429943f..d66576cd568b9dcc18438687129ae08d5fb86e7b 100644
--- a/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx
+++ b/Modules/Applications/AppOpticalCalibration/app/otbOpticalCalibration.cxx
@@ -130,7 +130,6 @@ private:
     SetName("OpticalCalibration");
     SetDescription("Perform optical calibration TOA/TOC (Top Of Atmosphere/Top Of Canopy). Supported sensors: QuickBird, Ikonos, WorldView2, Formosat, Spot5, Pleiades, Spot6, Spot7. For other sensors the application also allows providing calibration parameters manually.");
     // Documentation
-    SetDocName("Optical calibration");
     SetDocLongDescription("The application allows converting pixel values from DN (for Digital Numbers) to reflectance. Calibrated values are called surface reflectivity and its values lie in the range [0, 1].\nThe first level is called Top Of Atmosphere (TOA) reflectivity. It takes into account the sensor gain, sensor spectral response and the solar illuminations.\nThe second level is called Top Of Canopy (TOC) reflectivity. In addition to sensor gain and solar illuminations, it takes into account the optical thickness of the atmosphere, the atmospheric pressure, the water vapor amount, the ozone amount, as well as the composition and amount of aerosol gasses.\nIt is also possible to indicate an AERONET file which contains atmospheric parameters (version 1 and version 2 of Aeronet file are supported. Note that computing TOC reflectivity will internally compute first TOA and then TOC reflectance. \n"
 "\n--------------------------\n\n"
 "If the sensor is not supported by the metadata interface factory of OTB, users still have the possibility to give the needed parameters to the application.\n"
diff --git a/Modules/Applications/AppProjection/app/otbConvertCartoToGeoPoint.cxx b/Modules/Applications/AppProjection/app/otbConvertCartoToGeoPoint.cxx
index db538aa77dbc7c360f0eb2a3c5ffbab8970a6389..0b0ca946653f9fd3d0f32f3eff4f9d1cb13818ef 100644
--- a/Modules/Applications/AppProjection/app/otbConvertCartoToGeoPoint.cxx
+++ b/Modules/Applications/AppProjection/app/otbConvertCartoToGeoPoint.cxx
@@ -56,7 +56,6 @@ private:
     SetDescription("Convert cartographic coordinates to geographic ones.");
 
     // Documentation
-    SetDocName("Cartographic to geographic coordinates conversion");
     SetDocLongDescription("This application computes the geographic coordinates from cartographic ones. User has to give the X and Y coordinate and the cartographic projection (see mapproj parameter for details).");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbConvertSensorToGeoPoint.cxx b/Modules/Applications/AppProjection/app/otbConvertSensorToGeoPoint.cxx
index ea25a40717678ad2e1e41118f7dca88e47cfd066..c006fb7e65fc79dc404521c84cabe1f65f2a0d0c 100644
--- a/Modules/Applications/AppProjection/app/otbConvertSensorToGeoPoint.cxx
+++ b/Modules/Applications/AppProjection/app/otbConvertSensorToGeoPoint.cxx
@@ -55,7 +55,6 @@ private:
     SetDescription("Sensor to geographic coordinates conversion.");
 
     // Documentation
-    SetDocName("Convert Sensor Point To Geographic Point");
     SetDocLongDescription("This Application converts a sensor point of an input image to a geographic point using the Forward Sensor Model of the input image.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx b/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
index e604e8e4b656317f9c8eb2d2233aefe4b5e54e6b..c9236fcfe9afdb9cbfaeab72e9bf3f138ea63156 100644
--- a/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
+++ b/Modules/Applications/AppProjection/app/otbGenerateRPCSensorModel.cxx
@@ -62,7 +62,6 @@ private:
     SetName("GenerateRPCSensorModel");
     SetDescription("Generate a RPC sensor model from a list of Ground Control Points.");
 
-    SetDocName("Generate a RPC sensor model");
     SetDocLongDescription( "This application generates a RPC sensor model from a list of Ground Control Points. "
                                    "At least 20 points are required for estimation without elevation support, "
                                    "and 40 points for estimation with elevation support. "
diff --git a/Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx b/Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx
index c45174fc58cb43299d88698d213594fb60572465..3e2d3c361c11570cf22c45720e1f373247049b63 100644
--- a/Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx
+++ b/Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx
@@ -109,7 +109,6 @@ private:
     SetName("GridBasedImageResampling");
     SetDescription("Resamples an image according to a resampling grid");
 
-    SetDocName("Grid Based Image Resampling");
     SetDocLongDescription("This application allows performing image resampling from an input resampling grid.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbImageEnvelope.cxx b/Modules/Applications/AppProjection/app/otbImageEnvelope.cxx
index 25c4c3de7c7e69e3a267160bc4ff184957bb64f2..f2819ed660bf8cb0ad959ad4753888add3baf1a3 100644
--- a/Modules/Applications/AppProjection/app/otbImageEnvelope.cxx
+++ b/Modules/Applications/AppProjection/app/otbImageEnvelope.cxx
@@ -55,7 +55,6 @@ private:
     SetDescription("Extracts an image envelope.");
 
     // Documentation
-    SetDocName("Image Envelope");
     SetDocLongDescription("Build a vector data containing the image envelope polygon. "
       "Useful for some projection, you can set the polygon with more points with the sr parameter. "
       "This filter supports user-specified output projection. "
diff --git a/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx b/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
index ef6731f85ed389ad8716ee5754a0583b661f091e..a9fc3023c63aa9e05cfdb3b0706bf52ab6ef2df3 100644
--- a/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
+++ b/Modules/Applications/AppProjection/app/otbObtainUTMZoneFromGeoPoint.cxx
@@ -57,7 +57,6 @@ private:
     SetDescription("UTM zone determination from a geographic point.");
 
     // Documentation
-    SetDocName("Obtain UTM Zone From Geo Point");
     SetDocLongDescription("This application returns the UTM zone of an input geographic point.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbOrthoRectification.cxx b/Modules/Applications/AppProjection/app/otbOrthoRectification.cxx
index 38dc2342c11f4c599119df33b9d6621270a94c2d..00ff808f757c435506d87da2de4395a109030085 100644
--- a/Modules/Applications/AppProjection/app/otbOrthoRectification.cxx
+++ b/Modules/Applications/AppProjection/app/otbOrthoRectification.cxx
@@ -91,7 +91,6 @@ private:
   {
     SetName("OrthoRectification");
     SetDescription("This application allows ortho-rectifying optical and radar images from supported sensors.");
-    SetDocName("Ortho-rectification");
     std::ostringstream oss;
     oss<<"This application uses inverse sensor modelling combined with a choice of interpolation functions to resample a sensor geometry image into a ground geometry regular grid. ";
     oss<<"The ground geometry regular grid is defined with respect to a map projection (see map parameter). The application offers several modes to estimate the output grid parameters (origin and ground sampling distance), including automatic estimation of image size, ground sampling distance, or both, from image metadata, user-defined ROI corners, or another ortho-image.";
diff --git a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
index 6c1346b288e1423a6bd5e2748c0bff2606c57195..f007315bfebd9bdc67fc1c7cced6dff972beb3bf 100644
--- a/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
+++ b/Modules/Applications/AppProjection/app/otbRefineSensorModel.cxx
@@ -61,7 +61,6 @@ private:
     SetName("RefineSensorModel");
     SetDescription("Perform least-square fit of a sensor model to a set of tie points");
 
-    SetDocName("Refine Sensor Model");
     SetDocLongDescription("This application reads a geom file containing a sensor model and a text file containing a list of ground control point, and performs a least-square fit of the sensor model adjustable parameters to these tie points. It produces an updated geom file as output, as well as an optional ground control points based statistics file and a vector file containing residues. The output geom file can then be used to ortho-rectify the data more accurately. Plaease note that for a proper use of the application, elevation must be correctly set (including DEM and geoid file). The map parameters allows one to choose a map projection in which the accuracy will be estimated in meters.");
 
     AddDocTag(Tags::Geometry);
diff --git a/Modules/Applications/AppProjection/app/otbRigidTransformResample.cxx b/Modules/Applications/AppProjection/app/otbRigidTransformResample.cxx
index 5b623ad42bc2fa358730407d8f7c96860c7f08c2..675cd6e8d74f973e1760c11f226de6c92c446c77 100644
--- a/Modules/Applications/AppProjection/app/otbRigidTransformResample.cxx
+++ b/Modules/Applications/AppProjection/app/otbRigidTransformResample.cxx
@@ -85,7 +85,6 @@ private:
     SetName("RigidTransformResample");
     SetDescription("Resample an image with a rigid transform");
     // Documentation
-    SetDocName("Image resampling with a rigid transform");
     SetDocLongDescription("This application performs a parametric transform on the input image. Scaling, translation and rotation with scaling factor are handled."
         " Parameters of the transform is expressed in physical units, thus particular attention must be paid on pixel size (value, and sign). Moreover transform is expressed from input space to output space (on the contrary ITK Transforms are expressed form output space to input space). ");
     SetDocLimitations("None");
diff --git a/Modules/Applications/AppProjection/app/otbSuperimpose.cxx b/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
index d59f5334c1e40312a3e1e73bb36abe43f463c2f0..c954f36793b38508f1d18b0c3d8cdb4624c1b182 100644
--- a/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
+++ b/Modules/Applications/AppProjection/app/otbSuperimpose.cxx
@@ -87,7 +87,6 @@ private:
     SetDescription("Using available image metadata, project one image onto another one");
 
     // Documentation
-    SetDocName("Superimpose sensor");
     SetDocLongDescription("This application performs the projection of an image into the geometry of another one.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppProjection/app/otbVectorDataReprojection.cxx b/Modules/Applications/AppProjection/app/otbVectorDataReprojection.cxx
index 3c557a224ecb91d10a25fc09db45b6b1635721f1..e204055b2a4c1385b0ca5d02d039a8a7f190013a 100644
--- a/Modules/Applications/AppProjection/app/otbVectorDataReprojection.cxx
+++ b/Modules/Applications/AppProjection/app/otbVectorDataReprojection.cxx
@@ -64,7 +64,6 @@ private:
   {
     SetName("VectorDataReprojection");
     SetDescription("Reproject a vector data using support image projection reference, or a user specified map projection");
-    SetDocName("Vector Data reprojection");
 
     SetDocLongDescription(
         "Reproject vector data using a support image as projection reference or to a user given map projection. "
diff --git a/Modules/Applications/AppSARCalibration/app/otbSARBurstExtraction.cxx b/Modules/Applications/AppSARCalibration/app/otbSARBurstExtraction.cxx
index 0d92ecb931893ca466310b71dbf9ed19421a2df4..f5d70923252edc6b52d76eb8a4a6dd9084497912 100644
--- a/Modules/Applications/AppSARCalibration/app/otbSARBurstExtraction.cxx
+++ b/Modules/Applications/AppSARCalibration/app/otbSARBurstExtraction.cxx
@@ -50,7 +50,6 @@ private:
     SetDescription("This application performs a burst extraction by keeping only lines and samples of a required burst.");
 
     // Documentation
-    SetDocName("SAR Burst Extraction");
     SetDocLongDescription("Sentinel1 IW SLC products are composed of several burst overlapping in"
                           " azimuth time for each subswath, separated by black lines [1]. The burst"
                           " extraction consist in extracting a single burst, by selecting only lines" 
diff --git a/Modules/Applications/AppSARCalibration/app/otbSARCalibration.cxx b/Modules/Applications/AppSARCalibration/app/otbSARCalibration.cxx
index 142b0108c1002f691899dc7fa6b52cea1c1438de..c60b8f0d34f4bf89a375b2d0dbfeb963f13a0c18 100644
--- a/Modules/Applications/AppSARCalibration/app/otbSARCalibration.cxx
+++ b/Modules/Applications/AppSARCalibration/app/otbSARCalibration.cxx
@@ -51,7 +51,6 @@ private:
     SetDescription("Perform radiometric calibration of SAR images. Following sensors are supported: TerraSAR-X, Sentinel1 and Radarsat-2.Both Single Look Complex(SLC) and detected products are supported as input.");
 
     // Documentation
-    SetDocName("SAR Radiometric calibration");
     SetDocLongDescription("The objective of SAR calibration is to provide imagery in which the pixel values can be directly related to the radar backscatter of the scene. This application allows computing Sigma Naught (Radiometric Calibration) for TerraSAR-X, Sentinel1 L1 and Radarsat-2 sensors. Metadata are automatically retrieved from image products.The application supports complex and non-complex images (SLC or detected products).");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppSARCalibration/app/otbSARConcatenateBursts.cxx b/Modules/Applications/AppSARCalibration/app/otbSARConcatenateBursts.cxx
index 95723672549f402ee1e83cb0e899e82bbe3d0566..cb0682774d691945f9256c03b92d48fe415140bb 100644
--- a/Modules/Applications/AppSARCalibration/app/otbSARConcatenateBursts.cxx
+++ b/Modules/Applications/AppSARCalibration/app/otbSARConcatenateBursts.cxx
@@ -58,7 +58,6 @@ private:
     SetDescription("Concatenate a list of Bursts to provide a whole SAR Deburst Image.");
 
     // Documentation
-    SetDocName("SAR Concatenate Bursts");
     SetDocLongDescription("This application performs a burst concatenation and provides a SAR Deburst Image. "
 			  "It reads the input image list (single bursts) "
 			  "and generates a whole SAR image with deburst operations.");
diff --git a/Modules/Applications/AppSARCalibration/app/otbSARDeburst.cxx b/Modules/Applications/AppSARCalibration/app/otbSARDeburst.cxx
index d69219edbfa32193f438f76f84584d81ac69a49b..3211f8ff6955e3fa588a70857c77c8223936a0cc 100644
--- a/Modules/Applications/AppSARCalibration/app/otbSARDeburst.cxx
+++ b/Modules/Applications/AppSARCalibration/app/otbSARDeburst.cxx
@@ -50,7 +50,6 @@ private:
     SetDescription("This application performs deburst of Sentinel1 IW SLC images by removing redundant lines.");
 
     // Documentation
-    SetDocName("SAR Deburst");
     SetDocLongDescription("Sentinel1 IW SLC products are composed of several burst overlapping in"
                           " azimuth time for each subswath, separated by black lines [1]. The deburst"
                           " operation consist in generating a continuous image in terms of azimuth"
diff --git a/Modules/Applications/AppSARDecompositions/app/otbSARDecompositions.cxx b/Modules/Applications/AppSARDecompositions/app/otbSARDecompositions.cxx
index b96d2e70c3835825f99f19339de19ce23838a7a4..9098a0506a5dab146f66c28e3ce9fc7c19992aff 100644
--- a/Modules/Applications/AppSARDecompositions/app/otbSARDecompositions.cxx
+++ b/Modules/Applications/AppSARDecompositions/app/otbSARDecompositions.cxx
@@ -81,7 +81,6 @@ private:
     SetDescription("From one-band complex images (each one related to an element of the Sinclair matrix), returns the selected decomposition.");
 
     // Documentation
-    SetDocName("SARDecompositions");
     SetDocLongDescription(
         "From one-band complex images (HH, HV, VH, VV), returns the selected decomposition.\n \n"
         "All the decompositions implemented are intended for the mono-static case (transmitter and receiver are co-located).\n"
diff --git a/Modules/Applications/AppSARPolarMatrixConvert/app/otbSARPolarMatrixConvert.cxx b/Modules/Applications/AppSARPolarMatrixConvert/app/otbSARPolarMatrixConvert.cxx
index d167e27dc9306e933f0f2d96b051d1cc24155a3c..efc0bc96782d3c2c806bd197ce6a7056f944f8d6 100644
--- a/Modules/Applications/AppSARPolarMatrixConvert/app/otbSARPolarMatrixConvert.cxx
+++ b/Modules/Applications/AppSARPolarMatrixConvert/app/otbSARPolarMatrixConvert.cxx
@@ -84,7 +84,6 @@ private:
     SetDescription("This applications allows converting classical polarimetric matrices to each other.");
 
     // Documentation
-    SetDocName("SARPolarMatrixConvert");
     SetDocLongDescription(
 
         "This application allows converting classical polarimetric matrices to each other.\n"
diff --git a/Modules/Applications/AppSARPolarSynth/app/otbSARPolarSynth.cxx b/Modules/Applications/AppSARPolarSynth/app/otbSARPolarSynth.cxx
index 77b43d10a6d1ae982f8e15f5d55bc2428afdddd7..c7a1acba00b03c27faad88705c03915eae7bcd88 100644
--- a/Modules/Applications/AppSARPolarSynth/app/otbSARPolarSynth.cxx
+++ b/Modules/Applications/AppSARPolarSynth/app/otbSARPolarSynth.cxx
@@ -50,7 +50,6 @@ private:
     SetDescription("Gives, for each pixel, the power that would have been received by a SAR system with a basis different from the classical (H,V) one (polarimetric synthetis).");
 
     // Documentation
-    SetDocName("SARPolarSynth");
     SetDocLongDescription("This application gives, for each pixel, the power that would have been received by a SAR system with a basis different from the classical (H,V) one (polarimetric synthetis).\n" 
 						  "The new basis A and B are indicated through two Jones vectors, defined by the user thanks to orientation (psi) and ellipticity (khi) parameters.\n"
 						  "These parameters are namely psii, khii, psir and khir. The suffixes (i) and (r) refer to the transmitting antenna and the receiving antenna respectively.\n"
diff --git a/Modules/Applications/AppSARUtils/app/otbComputeModulusAndPhase.cxx b/Modules/Applications/AppSARUtils/app/otbComputeModulusAndPhase.cxx
index acb86804eca8bebbacac12fbaf2bd58eb65d8c1f..fa6a5101d29e26efe3607fb9ba8d58d802a7a822 100644
--- a/Modules/Applications/AppSARUtils/app/otbComputeModulusAndPhase.cxx
+++ b/Modules/Applications/AppSARUtils/app/otbComputeModulusAndPhase.cxx
@@ -61,7 +61,6 @@ private:
     SetName("ComputeModulusAndPhase");
     SetDescription("This application computes the modulus and the phase of a complex SAR image or an image with 2 components (real and imaginary parts).");
 
-    SetDocName("Compute Modulus and Phase");
     SetDocLongDescription(
       "This application computes the modulus and the phase of a "
       "complex SAR image. The input should be a single band image with "
diff --git a/Modules/Applications/AppSARUtils/app/otbDespeckle.cxx b/Modules/Applications/AppSARUtils/app/otbDespeckle.cxx
index d91076666138dfe8973ed89227f99d8361909fcb..0d7a0f5ccfb32bea7bbc67f24957cc180c7bc4ad 100644
--- a/Modules/Applications/AppSARUtils/app/otbDespeckle.cxx
+++ b/Modules/Applications/AppSARUtils/app/otbDespeckle.cxx
@@ -60,7 +60,6 @@ private:
     SetDescription("Perform speckle noise reduction on SAR image.");
 
     // Documentation
-    SetDocName("Despeckle");
     SetDocLongDescription("SAR images are affected by speckle noise that inherently exists in and which"
      " degrades the image quality. It is caused by the coherent nature of"
      " back-scattered waves from multiple distributed targets. It is locally strong"
diff --git a/Modules/Applications/AppSegmentation/app/otbConnectedComponentSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbConnectedComponentSegmentation.cxx
index 62f0a974dfb71279b554b0bdd040880d94bef05d..158ec83a55920368b0deb69bf4ada7df385247e9 100644
--- a/Modules/Applications/AppSegmentation/app/otbConnectedComponentSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbConnectedComponentSegmentation.cxx
@@ -73,7 +73,6 @@ private:
   {
     SetName("ConnectedComponentSegmentation");
     SetDescription("Connected component segmentation and object based image filtering of the input image according to user-defined criterions.");
-    SetDocName("Connected Component Segmentation");
     SetDocLongDescription("This application allows one to perform a masking, connected components segmentation and object based image filtering. First and optionally, a mask can be built based on user-defined criterions to select pixels of the image which will be segmented. Then a connected component segmentation is performed with a user defined criterion to decide whether two neighbouring pixels belong to the same segment or not. After this segmentation step, an object based image filtering is applied using another user-defined criterion reasoning on segment properties, like shape or radiometric attributes. " "Criterions are mathematical expressions analysed by the MuParser library (http://muparser.sourceforge.net/). For instance, expression \"((b1>80) and intensity>95)\" will merge two neighbouring pixel in a single segment if their intensity is more than 95 and their value in the first image band is more than 80. See parameters documentation for a list of available attributes. The output of the object based image filtering is vectorized and can be written in shapefile or KML format. If the input image is in raw geometry, resulting polygons will be transformed to WGS84 using sensor modelling before writing, to ensure consistency with GIS software. For this purpose, a Digital Elevation Model can be provided to the application. The whole processing is done on a per-tile basis for large images, so this application can handle images of arbitrary size.");
     SetDocLimitations("Due to the tiling scheme in case of large images, some segments can be arbitrarily split across multiple tiles.");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppSegmentation/app/otbHooverCompareSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbHooverCompareSegmentation.cxx
index dcc25d7101c02f9a879009032c1640d2a03f8c11..1025607255651a56aab73d5d1208bf6f3456310e 100644
--- a/Modules/Applications/AppSegmentation/app/otbHooverCompareSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbHooverCompareSegmentation.cxx
@@ -133,7 +133,6 @@ private:
     SetDescription("Compare two segmentations with Hoover metrics");
 
     // Documentation
-    SetDocName("Hoover compare segmentation");
     SetDocLongDescription("This application compares a machine segmentation (MS) with a partial "
                           "ground truth segmentation (GT). The Hoover metrics are used to estimate "
                           "scores for correct detection, over-segmentation, under-segmentation and "
diff --git a/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
index 478acd849d7d895ee6f6b84026d1b400444de1a6..bf5c40c7b1d46fd11b14dec19e00ea29b00fbe21 100644
--- a/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLSMSSegmentation.cxx
@@ -220,7 +220,6 @@ private:
     SetName("LSMSSegmentation");
     SetDescription("This application performs the second step of the exact Large-Scale Mean-Shift segmentation workflow (LSMS) [1].");
 
-    SetDocName("Exact Large-Scale Mean-Shift segmentation, step 2");
     SetDocLongDescription("This application will produce a labeled image where neighbor pixels"
                           " whose range distance is below range radius (and optionally spatial"
                           " distance below spatial radius) will be grouped together into the same"
diff --git a/Modules/Applications/AppSegmentation/app/otbLSMSSmallRegionsMerging.cxx b/Modules/Applications/AppSegmentation/app/otbLSMSSmallRegionsMerging.cxx
index b0bffe8fc8b992df8f9a7edca0f52c3932ee746c..6f8f839953e039d408f676a8f7c70231db5ec3ba 100644
--- a/Modules/Applications/AppSegmentation/app/otbLSMSSmallRegionsMerging.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLSMSSmallRegionsMerging.cxx
@@ -78,7 +78,6 @@ private:
     SetName("LSMSSmallRegionsMerging");
     SetDescription("This application performs the third (optional) step of the exact Large-Scale Mean-Shift segmentation workflow [1].");
 
-    SetDocName("Exact Large-Scale Mean-Shift segmentation, step 3 (optional)");
     SetDocLongDescription("Given a segmentation result (can be the out output parameter of the"
                           " LSMSSegmentation application [2]) and the original image, it will"
                           " merge segments whose size in pixels is lower than minsize parameter"
@@ -97,12 +96,14 @@ private:
                       " application is not compatible with in-memory connection since it does"
                       " its own internal streaming.");
     SetDocAuthors("David Youssefi");
-    SetDocSeeAlso( "[1] Michel, J., Youssefi, D., & Grizonnet, M. (2015). Stable"
-                   " mean-shift algorithm and its application to the segmentation of"
-                   " arbitrarily large remote sensing images. IEEE Transactions on"
-                   " Geoscience and Remote Sensing, 53(2), 952-964.\n"
-                   "[2] LSMSegmentation\n"
-                   "[3] LSMSVectorization");
+    SetDocSeeAlso(
+        "Alternative: SmallRegionsMerging\n"
+        "[1] Michel, J., Youssefi, D., & Grizonnet, M. (2015). Stable"
+        " mean-shift algorithm and its application to the segmentation of"
+        " arbitrarily large remote sensing images. IEEE Transactions on"
+        " Geoscience and Remote Sensing, 53(2), 952-964.\n"
+        "[2] LSMSSegmentation\n"
+        "[3] LSMSVectorization");
     AddDocTag(Tags::Segmentation);
     AddDocTag(Tags::Deprecated);
     AddDocTag("LSMS");
diff --git a/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx b/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
index ef9446185b575167612854e59047d463e24401bf..467a0d8a0510821701ba4b8298fad4d8c0cb6261 100644
--- a/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLSMSVectorization.cxx
@@ -71,7 +71,6 @@ private:
     SetName("LSMSVectorization");
     SetDescription("This application performs the fourth step of the exact Large-Scale Mean-Shift segmentation workflow [1].");
 
-    SetDocName("Exact Large-Scale Mean-Shift segmentation, step 4");
     SetDocLongDescription("Given a segmentation result (label image), that may come from the"
                           " LSMSSegmentation [2] application (out parameter) or have been"
                           " processed for small regions merging [3] (out parameter), it will"
diff --git a/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx b/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx
index bc414d0f2081c4d6d9a7951ea079b24318838cea..67ec7cbb0e3e354b8f4ac6251d27d51a9f2c73f2 100644
--- a/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbLargeScaleMeanShift.cxx
@@ -56,7 +56,6 @@ private:
     SetDescription("Large-scale segmentation using MeanShift");
 
     // Documentation
-    SetDocName("Large-Scale MeanShift");
     SetDocLongDescription("This application chains together the 4 steps of the "
       "MeanShit framework, that is the MeanShiftSmoothing, the "
       "LSMSSegmentation, the LSMSSmallRegionsMerging and the "
diff --git a/Modules/Applications/AppSegmentation/app/otbMeanShiftSmoothing.cxx b/Modules/Applications/AppSegmentation/app/otbMeanShiftSmoothing.cxx
index 9923e70c55232e92372da8f407917de4d7bcb68d..1965b856068822cc5948dc7af3dab815a1b0cdc6 100644
--- a/Modules/Applications/AppSegmentation/app/otbMeanShiftSmoothing.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbMeanShiftSmoothing.cxx
@@ -52,7 +52,6 @@ private:
     SetDescription("This application smooths an image using the MeanShift algorithm.");
 
     // Documentation
-    SetDocName("MeanShift Smoothing");
     SetDocLongDescription("MeanShift [1,2,3] is an iterative edge-preserving image smoothing"
                           " algorithm often used in image processing and as a first step for"
                           " image segmentation. The MeanShift algorithm can be applied to"
diff --git a/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx b/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
index b850bbed7fb450e1e3dc96878fba33c6bb0061f9..ceb97c4c08649d3eeb14127b7298f92dd35c3648 100644
--- a/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbSegmentation.cxx
@@ -144,7 +144,6 @@ private:
     SetDescription("Performs segmentation of an image, and output either a raster or a vector file. In vector mode, large input datasets are supported.");
 
     // Documentation
-    SetDocName("Segmentation");
     SetDocLongDescription(
         "This application allows one to perform various segmentation algorithms on a multispectral image."
         " Available segmentation algorithms are two different versions of Mean-Shift segmentation algorithm (one being multi-threaded),"
diff --git a/Modules/Applications/AppSegmentation/app/otbSmallRegionsMerging.cxx b/Modules/Applications/AppSegmentation/app/otbSmallRegionsMerging.cxx
index 84d3e8a5e183f7d58f5fde39a636398cf9b1af85..6288293e79c1c8a433c06f722abc63492781c247 100644
--- a/Modules/Applications/AppSegmentation/app/otbSmallRegionsMerging.cxx
+++ b/Modules/Applications/AppSegmentation/app/otbSmallRegionsMerging.cxx
@@ -65,7 +65,6 @@ private:
     SetDescription("This application merges small regions of a segmentation "
       "result.");
 
-    SetDocName("Small Region Merging");
     SetDocLongDescription("Given a segmentation result and the original image,"
                           " it will merge segments whose size in pixels is"
                           " lower than minsize parameter with the adjacent"
diff --git a/Modules/Applications/AppStereo/app/otbBlockMatching.cxx b/Modules/Applications/AppStereo/app/otbBlockMatching.cxx
index e7a93159fdf9a88a2476f746b91f10a6afb860f6..2fac42ef3b6a584e135d335075c144018a9a937f 100644
--- a/Modules/Applications/AppStereo/app/otbBlockMatching.cxx
+++ b/Modules/Applications/AppStereo/app/otbBlockMatching.cxx
@@ -130,7 +130,6 @@ private:
     SetDescription("Performs block-matching to estimate pixel-wise disparities"
       " between two images.");
 
-    SetDocName("Pixel-wise Block-Matching");
     SetDocLongDescription(
       "This application allows one to performs "
       "block-matching to estimate pixel-wise disparities for a pair of images "
diff --git a/Modules/Applications/AppStereo/app/otbDisparityMapToElevationMap.cxx b/Modules/Applications/AppStereo/app/otbDisparityMapToElevationMap.cxx
index 4aebc52cb849747385936daedef6d902b54e61a2..04ec3d28567cb049daa3c4b13ec833d803ef2220 100644
--- a/Modules/Applications/AppStereo/app/otbDisparityMapToElevationMap.cxx
+++ b/Modules/Applications/AppStereo/app/otbDisparityMapToElevationMap.cxx
@@ -67,7 +67,6 @@ private:
     SetName("DisparityMapToElevationMap");
     SetDescription("Projects a disparity map into a regular elevation map.");
 
-    SetDocName("Disparity map to elevation map");
     SetDocLongDescription(
       "This application uses a disparity map computed from "
       "a stereo image pair to produce an elevation map on the ground area "
diff --git a/Modules/Applications/AppStereo/app/otbFineRegistration.cxx b/Modules/Applications/AppStereo/app/otbFineRegistration.cxx
index 44f36e296555f1f61c7dbcf2fa72f1682e80ae5b..83d98a2b64fc5ba10dad13540e744b156b2cfe1f 100644
--- a/Modules/Applications/AppStereo/app/otbFineRegistration.cxx
+++ b/Modules/Applications/AppStereo/app/otbFineRegistration.cxx
@@ -118,7 +118,6 @@ private:
     SetName("FineRegistration");
     SetDescription("Estimate disparity map between two images.");
 
-    SetDocName("Fine Registration");
     SetDocLongDescription("This application computes a disparity map between "
       "two images that correspond to the same scene. It is intended for case "
       "where small misregistration between images should be estimated and fixed"
diff --git a/Modules/Applications/AppStereo/app/otbGeneratePlyFile.cxx b/Modules/Applications/AppStereo/app/otbGeneratePlyFile.cxx
index 80e7b38d0f506a40649adb5b6019fa4265bf60e3..25e5d01dc1111409d4aee1e0d14df18a4ce70278 100644
--- a/Modules/Applications/AppStereo/app/otbGeneratePlyFile.cxx
+++ b/Modules/Applications/AppStereo/app/otbGeneratePlyFile.cxx
@@ -57,7 +57,6 @@ private:
     SetName("GeneratePlyFile");
     SetDescription("Generate a 3D Ply file from a DEM and a color image.");
 
-    SetDocName("Ply 3D files generation");
     SetDocLongDescription("The application converts an image containing "
       "elevations into a PLY file, which is a file format to store 3D models. "
       "This format is adpated for visualization on software such as MeshLab [2]"
diff --git a/Modules/Applications/AppStereo/app/otbStereoFramework.cxx b/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
index 55e9972f6764f3f3502ddfa70e5482c265e6dc23..4302458f1671e7a639e985762a41b472c20efb97 100644
--- a/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
+++ b/Modules/Applications/AppStereo/app/otbStereoFramework.cxx
@@ -317,7 +317,6 @@ private:
     SetName("StereoFramework");
     SetDescription("Compute the ground elevation based on one or multiple stereo pair(s)");
 
-    SetDocName("Stereo Framework");
     SetDocLongDescription(
       "Compute the ground elevation with a stereo block matching algorithm "
       "between one or multiple stereo pair in sensor geometry. The output is "
diff --git a/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx b/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
index a613d6d53a7a9e243a3b5d00815344a4d7a516e1..5e6eee5bc6bdf2f5d73aaa1852edb187254a726d 100644
--- a/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
+++ b/Modules/Applications/AppStereo/app/otbStereoRectificationGridGenerator.cxx
@@ -105,7 +105,6 @@ private:
     SetDescription("Generates two deformation fields to resample in epipolar "
       "geometry, a pair of stereo images up to the sensor model precision");
 
-    SetDocName("Stereo-rectification deformation grid generator");
     SetDocLongDescription(
       "This application generates a pair of deformation "
       "grid to stereo-rectify a pair of stereo images according to sensor "
diff --git a/Modules/Applications/AppTest/app/otbTestApplication.cxx b/Modules/Applications/AppTest/app/otbTestApplication.cxx
index 60fff26221848c208c765326036987f3b32f37d6..53ca3223a803f44c532b64101a0bff77ed26fde7 100644
--- a/Modules/Applications/AppTest/app/otbTestApplication.cxx
+++ b/Modules/Applications/AppTest/app/otbTestApplication.cxx
@@ -47,7 +47,6 @@ private:
     SetName("TestApplication");
     SetDescription("This application helps developers to test parameters types");
 
-    SetDocName("Test");
     SetDocLongDescription("The purpose of this application is to test parameters types.");
     SetDocLimitations("None");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppTest/test/otbWrapperApplicationDocTests.cxx b/Modules/Applications/AppTest/test/otbWrapperApplicationDocTests.cxx
index 4b00e122696f80b729e54861d4906fb9b36e515c..c7756a084771e884ab968d56a7398ad170bf847b 100644
--- a/Modules/Applications/AppTest/test/otbWrapperApplicationDocTests.cxx
+++ b/Modules/Applications/AppTest/test/otbWrapperApplicationDocTests.cxx
@@ -105,7 +105,6 @@ int otbWrapperApplicationDocTest(int argc, char* argv[])
 
     // Check doc element...
     DocElement name("Name",app->GetName());
-    DocElement docName("Doc Name",app->GetDocName());
     DocElement description("Description",app->GetDescription());
     DocElement longDescription("Long description",app->GetDocLongDescription());
     DocElement authors("DocAuthors",app->GetDocAuthors());
@@ -115,9 +114,6 @@ int otbWrapperApplicationDocTest(int argc, char* argv[])
     isOK = CheckNonEmpty(name) && isOK;
     isOK = CheckNoNewline(name) && isOK;
 
-    isOK = CheckNonEmpty(docName) && isOK;
-    isOK = CheckNoNewline(docName) && isOK;
-
     isOK = CheckNonEmpty(description) && isOK;
 
     isOK = CheckNonEmpty(longDescription) && isOK;
diff --git a/Modules/Applications/AppTextures/app/otbHaralickTextureExtraction.cxx b/Modules/Applications/AppTextures/app/otbHaralickTextureExtraction.cxx
index 82fc9982b074b77cb9576ad42ab2f7451eed44d0..b4985ae6412f171c2abf15c3eee4357bdc0d10dc 100644
--- a/Modules/Applications/AppTextures/app/otbHaralickTextureExtraction.cxx
+++ b/Modules/Applications/AppTextures/app/otbHaralickTextureExtraction.cxx
@@ -73,7 +73,6 @@ SetName("HaralickTextureExtraction");
 SetDescription("Computes Haralick textural features on the selected channel of the input image");
 
 // Documentation
-SetDocName("Haralick Texture Extraction");
 SetDocLongDescription(
     "This application computes three sets of Haralick features [1][2].\n\n"
 
diff --git a/Modules/Applications/AppTextures/app/otbSFSTextureExtraction.cxx b/Modules/Applications/AppTextures/app/otbSFSTextureExtraction.cxx
index b94831841f69dbf0dae4d1f9971fdf01426e8248..2fb1064e57fc12e88ddc872657b53e21bee1c16b 100644
--- a/Modules/Applications/AppTextures/app/otbSFSTextureExtraction.cxx
+++ b/Modules/Applications/AppTextures/app/otbSFSTextureExtraction.cxx
@@ -63,7 +63,6 @@ SetDescription("Computes Structural Feature Set textures on every pixel of the "
     "input image selected channel");
 
 // Documentation
-SetDocName("SFS Texture Extraction");
 SetDocLongDescription("Structural Feature Set [1] are based on the histograms of "
     "the pixels in multiple directions of the image. The SFSTextureExtraction application "
     "computes the  6 following features: SFS'Length, SFS'Width, SFS'PSI, SFS'W-Mean, "
diff --git a/Modules/Applications/AppVectorDataTranslation/app/otbRasterization.cxx b/Modules/Applications/AppVectorDataTranslation/app/otbRasterization.cxx
index 8a4936fdc9c699917e6e831f2559135c8da52ab6..1a6754a8b7945786d1561d81589cf9519e187719 100644
--- a/Modules/Applications/AppVectorDataTranslation/app/otbRasterization.cxx
+++ b/Modules/Applications/AppVectorDataTranslation/app/otbRasterization.cxx
@@ -65,7 +65,6 @@ private:
     SetName("Rasterization");
     SetDescription("Reproject and rasterize a vector dataset");
 
-    SetDocName("Rasterization");
     SetDocLongDescription(
         "Reproject and rasterize a vector dataset. The grid of the rasterized output can be set by using a reference image, or by "
         "setting all parmeters (origin, size, spacing) by hand. In the latter case, at least the spacing (ground sampling distance) is needed (other "
diff --git a/Modules/Applications/AppVectorUtils/app/otbConcatenateVectorData.cxx b/Modules/Applications/AppVectorUtils/app/otbConcatenateVectorData.cxx
index baab41dcc8477c89bdbabd8791bae14c99c74b31..6c036765faef3781311af00f3069a065b3cd3d59 100644
--- a/Modules/Applications/AppVectorUtils/app/otbConcatenateVectorData.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbConcatenateVectorData.cxx
@@ -52,7 +52,6 @@ private:
     SetName("ConcatenateVectorData");
     SetDescription("Concatenate vector data files");
 
-    SetDocName("Concatenate Vector Data");
     SetDocLongDescription("This application concatenates a list of vector data "
       "files to produce a unique vector data output file.\n\n"
       "This application will gather all the geometries from the input files and"
diff --git a/Modules/Applications/AppVectorUtils/app/otbOSMDownloader.cxx b/Modules/Applications/AppVectorUtils/app/otbOSMDownloader.cxx
index 888bce06d9831bfc7049158393b83cf51d1577d5..06225729683969509059c44f9a894ef897f70744 100644
--- a/Modules/Applications/AppVectorUtils/app/otbOSMDownloader.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbOSMDownloader.cxx
@@ -55,7 +55,6 @@ private:
     SetName("OSMDownloader");
     SetDescription("Download vector data from OSM and store it to file");
     // Documentation
-    SetDocName("Open Street Map layers import");
     SetDocLongDescription("The application connects to Open Street Map server"
       ", downloads the data corresponding to the spatial extent of the support"
       " image, and filters the geometries based on OSM tags to produce a vector"
diff --git a/Modules/Applications/AppVectorUtils/app/otbVectorDataExtractROI.cxx b/Modules/Applications/AppVectorUtils/app/otbVectorDataExtractROI.cxx
index 9e819877252ad25aba10490d384e0374cefcc332..10e208ae1e19d4a2835346d8f239325ce70d22f7 100644
--- a/Modules/Applications/AppVectorUtils/app/otbVectorDataExtractROI.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbVectorDataExtractROI.cxx
@@ -70,7 +70,6 @@ private:
     SetName("VectorDataExtractROI");
     SetDescription("Perform an extract ROI on the input vector data according to the input image extent");
 
-    SetDocName("VectorData Extract ROI");
     SetDocLongDescription("This application extracts the vector data features"
                           " belonging to a region specified by the support "
                           "image envelope. Any features intersecting the "
diff --git a/Modules/Applications/AppVectorUtils/app/otbVectorDataSetField.cxx b/Modules/Applications/AppVectorUtils/app/otbVectorDataSetField.cxx
index e7cee12768682a0508aed4d099d81237827675a2..003f1ca207a7bef6ecbc343e08ff312184122921 100644
--- a/Modules/Applications/AppVectorUtils/app/otbVectorDataSetField.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbVectorDataSetField.cxx
@@ -49,7 +49,6 @@ private:
     SetDescription("Set a field in vector data.");
 
     // Documentation
-    SetDocName("Vector data set field");
     SetDocLongDescription("Set a specified field to a specified value on all features of a vector data.");
     SetDocLimitations("Doesn't work with KML files yet");
     SetDocAuthors("OTB-Team");
diff --git a/Modules/Applications/AppVectorUtils/app/otbVectorDataTransform.cxx b/Modules/Applications/AppVectorUtils/app/otbVectorDataTransform.cxx
index 14e56aa2a5cf139a670bd60a0c20e4f88e9ef0cc..f607a8adcd9d090729e27b93b4894fad4d5693e0 100644
--- a/Modules/Applications/AppVectorUtils/app/otbVectorDataTransform.cxx
+++ b/Modules/Applications/AppVectorUtils/app/otbVectorDataTransform.cxx
@@ -59,7 +59,6 @@ private:
     SetName("VectorDataTransform");
     SetDescription("Apply a transform to each vertex of the input VectorData");
 
-    SetDocName("Vector Data Transformation");
     SetDocLongDescription("This application iterates over each vertex in the "
       "input vector data file and performs a transformation on this vertex.\n\n"
       "It is the equivalent of [1] that transforms images. For instance, if you"
diff --git a/Modules/Core/LabelMap/test/CMakeLists.txt b/Modules/Core/LabelMap/test/CMakeLists.txt
index 068325e08e42cce455f0d61cd27a8d1764ede388..be4639ecdd26f58a333f08f6164bb8c54c8b4992 100644
--- a/Modules/Core/LabelMap/test/CMakeLists.txt
+++ b/Modules/Core/LabelMap/test/CMakeLists.txt
@@ -41,8 +41,8 @@ otb_module_target_label(otbLabelMapTestDriver)
 
 otb_add_test(NAME obTvLabelObjectMapVectorizer COMMAND otbLabelMapTestDriver
   otbLabelObjectMapVectorizer
-  ${INPUTDATA}/rcc8_mire1.png
-  rcc8_mire1_label_vectorizer.gml)
+  ${INPUTDATA}/labelImage_UnsignedChar.tif
+  otbLabelObjectMapVectorizerOutput.gml)
 
 otb_add_test(NAME obTvLabelImageToLabelMapWithAdjacencyFilter COMMAND otbLabelMapTestDriver
   --compare-ascii ${NOTOL}
@@ -64,13 +64,13 @@ otb_add_test(NAME obTvKMeansAttributesLabelMapFilter COMMAND otbLabelMapTestDriv
   ${TEMP}/obTvKMeansAttributesLabelMapFilter.txt)
 otb_add_test(NAME obTvLabelMapToSampleListFilter COMMAND otbLabelMapTestDriver
   otbLabelMapToSampleListFilter
-  ${OTB_DATA_ROOT}/Input/rcc8_mire1.png
+  ${OTB_DATA_ROOT}/Input/labelImage_UnsignedChar.tif
   SHAPE::Flusser01 SHAPE::Flusser02 SHAPE::Flusser03 SHAPE::Flusser04
   SHAPE::Flusser05 SHAPE::Flusser06 SHAPE::Flusser07 SHAPE::Flusser08
   SHAPE::Flusser09 SHAPE::Flusser10 SHAPE::Flusser11)
 otb_add_test(NAME obTvLabelMapWithClassLabelToLabeledSampleListFilter COMMAND otbLabelMapTestDriver
   otbLabelMapWithClassLabelToLabeledSampleListFilter
-  ${OTB_DATA_ROOT}/Input/rcc8_mire1.png
+  ${OTB_DATA_ROOT}/Input/labelImage_UnsignedChar.tif
   SHAPE::Flusser01  SHAPE::Flusser02  SHAPE::Flusser03 SHAPE::Flusser04
   SHAPE::Flusser05  SHAPE::Flusser06  SHAPE::Flusser07 SHAPE::Flusser08
   SHAPE::Flusser09 SHAPE::Flusser10  SHAPE::Flusser11)
diff --git a/Modules/Core/LabelMap/test/otbLabelMapWithClassLabelToLabeledSampleListFilter.cxx b/Modules/Core/LabelMap/test/otbLabelMapWithClassLabelToLabeledSampleListFilter.cxx
index 695a24f06d7db8c3dc9d71871ab38b78d4d9f525..31d6b9a066c0e57d9f111e7173699d4d0bd146b6 100644
--- a/Modules/Core/LabelMap/test/otbLabelMapWithClassLabelToLabeledSampleListFilter.cxx
+++ b/Modules/Core/LabelMap/test/otbLabelMapWithClassLabelToLabeledSampleListFilter.cxx
@@ -62,7 +62,7 @@ int otbLabelMapWithClassLabelToLabeledSampleListFilter(int argc, char* argv[])
 
    LabelMapFilterType::Pointer labelMapFilter = LabelMapFilterType::New();
    labelMapFilter->SetInput(lreader->GetOutput());
-   labelMapFilter->SetInputForegroundValue(255);
+   labelMapFilter->SetInputForegroundValue(1);
 
    ShapeLabelMapFilterType::Pointer shapeLabelMapFilter = ShapeLabelMapFilterType::New();
    shapeLabelMapFilter->SetInput(labelMapFilter->GetOutput());
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h b/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h
deleted file mode 100644
index 4406a107fb9c43269b30bffa577d9e5a73de37c4..0000000000000000000000000000000000000000
--- a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.h
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbDataNodeImageFunction_h
-#define otbDataNodeImageFunction_h
-
-#include "otbDataNodeFunctionBase.h"
-#include "otbDataNode.h"
-#include "itkContinuousIndex.h"
-#include "itkImageBase.h"
-
-namespace otb
-{
-/** \class DataNodeImageFunction
-  * \brief TODO
-  *
-  *
-  *
-  * \ingroup Functions
-  * \sa NDVIDataNodeFeatureFunction
- *
- * \ingroup OTBVectorDataBase
- */
-
-template <
-class TImage,
-class TOutput,
-class TCoordRep = double,
-class TPrecision = double
->
-class ITK_EXPORT DataNodeImageFunction :
-    public DataNodeFunctionBase<DataNode<TCoordRep,
-                                         TImage::ImageDimension,
-                                         TPrecision>,
-                                TOutput>
-{
-public:
-  /** Dimension underlying input image. */
-  itkStaticConstMacro(ImageDimension, unsigned int,
-                      TImage::ImageDimension);
-
-  /** Standard class typedefs. */
-  typedef DataNodeImageFunction                    Self;
-  typedef DataNodeFunctionBase<DataNode<TCoordRep,
-                                        itkGetStaticConstMacro(ImageDimension),
-                                        TPrecision>,
-                               TOutput>            Superclass;
-  typedef itk::SmartPointer<Self>                  Pointer;
-  typedef itk::SmartPointer<const Self>            ConstPointer;
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(DataNodeImageFunction, DataNodeFunctionBase);
-
-  /** Some typedefs. */
-  typedef TImage                                  InputImageType;
-  typedef typename InputImageType::PixelType      InputPixelType;
-  typedef typename InputImageType::ConstPointer   InputImageConstPointer;
-
-  typedef TOutput                                 OutputType;
-
-  /** CoordRepType typedef support. */
-  typedef TCoordRep CoordRepType;
-
-  /** PrecisionType typedef support. */
-  typedef TPrecision PrecisionType;
-
-  /** Index Type. */
-  typedef typename InputImageType::IndexType      IndexType;
-  typedef typename InputImageType::IndexValueType IndexValueType;
-
-  /** ContinuousIndex Type. */
-  typedef itk::ContinuousIndex<CoordRepType, itkGetStaticConstMacro(ImageDimension)>
-                                                  ContinuousIndexType;
-
-  /** DataNode Type */
-  typedef typename Superclass::DataNodeType       DataNodeType;
-
-  /** Point Type */
-  typedef typename DataNodeType::PointType        PointType;
-
-  /** Set the input image.
-   * \warning this method caches BufferedRegion information.
-   * If the BufferedRegion has changed, user must call
-   * SetInputImage again to update cached values. */
-  virtual void SetInputImage( const InputImageType * ptr );
-
-  /** Get the input image. */
-  const InputImageType * GetInputImage() const
-    { return m_Image.GetPointer(); }
-
-  /** Evaluate the function at specified DataNode position.
-   * Subclasses must provide this method. */
-  TOutput Evaluate( const DataNodeType& node ) const override = 0;
-
-  /** Check if an index is inside the image buffer.
-   * we take into account the fact that each voxel has its
-   * center at the integer coordinate and extends half way
-   * to the next integer coordinate.
-   * \warning For efficiency, no validity checking of
-   * the input image is done. */
-  virtual bool IsInsideBuffer( const IndexType & index ) const
-    {
-    for( unsigned int j = 0; j < ImageDimension; ++j )
-      {
-      if( index[j] < m_StartIndex[j] )
-        {
-        return false;
-        }
-      if( index[j] > m_EndIndex[j] )
-        {
-        return false;
-        }
-      }
-    return true;
-    }
-
-  /** Check if a continuous index is inside the image buffer.
-   * \warning For efficiency, no validity checking of
-   * the input image is done. */
-  virtual bool IsInsideBuffer( const ContinuousIndexType & index ) const
-    {
-    for( unsigned int j = 0; j < ImageDimension; ++j )
-      {
-      if( index[j] < m_StartContinuousIndex[j] )
-        {
-        return false;
-        }
-      if( index[j] >= m_EndContinuousIndex[j] )
-       //Comment this instruction after itkv4 migration (correct
-       //usage of centered-pixel coordinates)
-       //if( index[j] > m_EndContinuousIndex[j] )
-       {
-        return false;
-        }
-      }
-    return true;
-    }
-
-  /** Check if a point is inside the image buffer.
-   * \warning For efficiency, no validity checking of
-   * the input image pointer is done. */
-  virtual bool IsInsideBuffer( const PointType & point ) const
-    {
-    ContinuousIndexType index;
-    m_Image->TransformPhysicalPointToContinuousIndex( point, index );
-    return this->IsInsideBuffer( index );
-    }
-
-  /** Convert point to continuous index */
-  void ConvertPointToContinuousIndex( const PointType & point,
-    ContinuousIndexType & cindex ) const
-    {
-    m_Image->TransformPhysicalPointToContinuousIndex( point, cindex );
-    }
-
-  /** Convert continuous index to nearest index. */
-  inline void ConvertContinuousIndexToNearestIndex( const ContinuousIndexType & cindex,
-    IndexType & index ) const
-    {
-    index.CopyWithRound( cindex );
-    }
-
-  /** Set/Get methods */
-  itkGetConstReferenceMacro(StartIndex, IndexType);
-  itkGetConstReferenceMacro(EndIndex, IndexType);
-
-  itkGetConstReferenceMacro(StartContinuousIndex, ContinuousIndexType);
-  itkGetConstReferenceMacro(EndContinuousIndex, ContinuousIndexType);
-
-protected:
-  DataNodeImageFunction();
-  ~DataNodeImageFunction() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  /** Const pointer to the input image. */
-  InputImageConstPointer  m_Image;
-
-  /** Cache some values for testing if indices are inside buffered region. */
-  IndexType               m_StartIndex;
-  IndexType               m_EndIndex;
-  ContinuousIndexType     m_StartContinuousIndex;
-  ContinuousIndexType     m_EndContinuousIndex;
-
-private:
-  DataNodeImageFunction(const Self&) = delete;
-  void operator=(const Self&) = delete;
-
-};
-
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbDataNodeImageFunction.hxx"
-#endif
-
-#endif
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.hxx b/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.hxx
deleted file mode 100644
index b06e770312b5cf63b3bc4b59708aa40c5334e706..0000000000000000000000000000000000000000
--- a/Modules/Core/VectorDataBase/include/otbDataNodeImageFunction.hxx
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbDataNodeImageFunction_hxx
-#define otbDataNodeImageFunction_hxx
-
-#include "otbDataNodeImageFunction.h"
-
-namespace otb
-{
-
-/**
- * Constructor
- */
-template <class TImage, class TOutput, class TCoordRep, class TPrecision>
-DataNodeImageFunction<TImage, TOutput, TCoordRep, TPrecision>
-::DataNodeImageFunction()
-{
-  m_Image = nullptr;
-  m_StartIndex.Fill(0);
-  m_EndIndex.Fill(0);
-  m_StartContinuousIndex.Fill(0.0f);
-  m_EndContinuousIndex.Fill(0.0f);
-}
-
-
-/**
- * Standard "PrintSelf" method
- */
-template <class TImage, class TOutput, class TCoordRep, class TPrecision>
-void
-DataNodeImageFunction<TImage, TOutput, TCoordRep, TPrecision>
-::PrintSelf(
-  std::ostream& os,
-  itk::Indent indent) const
-{
-  Superclass::PrintSelf( os, indent );
-  os << indent << "InputImage: " << m_Image.GetPointer() << std::endl;
-  os << indent << "StartIndex: " << m_StartIndex << std::endl;
-  os << indent << "EndIndex: " << m_EndIndex << std::endl;
-  os << indent << "StartContinuousIndex: " << m_StartContinuousIndex << std::endl;
-  os << indent << "EndContinuousIndex: " << m_EndContinuousIndex << std::endl;
-}
-
-
-/**
- * Initialize by setting the input image
- */
-template <class TImage, class TOutput, class TCoordRep, class TPrecision>
-void
-DataNodeImageFunction<TImage, TOutput, TCoordRep, TPrecision>
-::SetInputImage(
-  const InputImageType * ptr )
-{
-  // set the input image
-  m_Image = ptr;
-
-  if ( ptr )
-    {
-    typename InputImageType::SizeType size = ptr->GetBufferedRegion().GetSize();
-    m_StartIndex = ptr->GetBufferedRegion().GetIndex();
-
-    for ( unsigned int j = 0; j < ImageDimension; ++j )
-      {
-      m_EndIndex[j] = m_StartIndex[j] + static_cast<IndexValueType>( size[j] ) - 1;
-      m_StartContinuousIndex[j] = static_cast<CoordRepType>( m_StartIndex[j] - 0.5 );
-      m_EndContinuousIndex[j]   = static_cast<CoordRepType>( m_EndIndex[j] + 0.5 );
-
-      //Comment these instructions after migration to ITKv4 where there is a correct
-      //usage of centered-pixel coordinates
-      //(ITK_USE_CENTERED_PIXEL_COORDINATES_CONSISTENTLY always ON)
-      //m_StartContinuousIndex[j] = static_cast<CoordRepType>( m_StartIndex[j] );
-      //m_EndContinuousIndex[j]   = static_cast<CoordRepType>( m_EndIndex[j] );
-      }
-    }
-}
-
-
-} // end namespace itk
-
-#endif
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h b/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h
deleted file mode 100644
index c99f15d0b23334b25ec307b7fcb53e93d764ba26..0000000000000000000000000000000000000000
--- a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbDataNodeVectorDataFunction_h
-#define otbDataNodeVectorDataFunction_h
-
-#include "otbDataNodeFunctionBase.h"
-#include "otbVectorDataProperties.h"
-
-
-namespace otb
-{
-/** \class DataNodeVectorDataFunction
-  * \brief TODO
-  *
-  *
-  *
-  * \ingroup Functions
-  * \sa
- *
- * \ingroup OTBVectorDataBase
- */
-
-template <
-class TOutput,
-class TCoordRep = double,
-class TPrecision = double
->
-class ITK_EXPORT DataNodeVectorDataFunction :
-    public DataNodeFunctionBase<DataNode<TCoordRep,
-                                         2,
-                                         TPrecision>,
-                                TOutput>
-{
-public:
-   /** Standard class typedefs. */
-  typedef DataNodeVectorDataFunction               Self;
-  typedef DataNodeFunctionBase<DataNode<TCoordRep,
-                                        2,
-                                        TPrecision>,
-                               TOutput>            Superclass;
-  typedef itk::SmartPointer<Self>                  Pointer;
-  typedef itk::SmartPointer<const Self>            ConstPointer;
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(DataNodeVetorDataFunction, DataNodeFunctionBase);
-
-  /** Some typedefs. */
-  typedef VectorData<TCoordRep, 2, TPrecision>    VectorDataType;
-  typedef typename VectorDataType::ConstPointer   VectorDataConstPointerType;
-  typedef TOutput                                 OutputType;
-
-  /** CoordRepType typedef support. */
-  typedef TCoordRep CoordRepType;
-
-  /** PrecisionType typedef support. */
-  typedef TPrecision PrecisionType;
-
-  /** DataNode Type */
-  typedef typename Superclass::DataNodeType       DataNodeType;
-
-  /** Point Type */
-  typedef typename DataNodeType::PointType        PointType;
-
-  /** Set the input VetorData. */
-  virtual void SetInputVectorData( const VectorDataType * ptr );
-
-  /** Get the input VectorData. */
-  const VectorDataType * GetInputVectorData() const
-    { return m_VectorData.GetPointer(); }
-
-  /** Evaluate the function at specified DataNode position.
-   * Subclasses must provide this method. */
-  TOutput Evaluate( const DataNodeType& node ) const override = 0;
-
-protected:
-  DataNodeVectorDataFunction();
-  ~DataNodeVectorDataFunction() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  /** Const pointer to the input VectorData. */
-  VectorDataConstPointerType  m_VectorData;
-
-private:
-  DataNodeVectorDataFunction(const Self&) = delete;
-  void operator=(const Self&) = delete;
-
-};
-
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbDataNodeVectorDataFunction.hxx"
-#endif
-
-#endif
diff --git a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.hxx b/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.hxx
deleted file mode 100644
index 9ca52e1798d94b391825ca5629ba3e37a35dc1d9..0000000000000000000000000000000000000000
--- a/Modules/Core/VectorDataBase/include/otbDataNodeVectorDataFunction.hxx
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbDataNodeVectorDataFunction_hxx
-#define otbDataNodeVectorDataFunction_hxx
-
-#include "otbDataNodeVectorDataFunction.h"
-
-namespace otb
-{
-
-/**
- * Constructor
- */
-template <class TOutput, class TCoordRep, class TPrecision>
-DataNodeVectorDataFunction<TOutput, TCoordRep, TPrecision>
-::DataNodeVectorDataFunction()
-{
-  m_VectorData = nullptr;
-}
-
-
-/**
- * Standard "PrintSelf" method
- */
-template <class TOutput, class TCoordRep, class TPrecision>
-void
-DataNodeVectorDataFunction<TOutput, TCoordRep, TPrecision>
-::PrintSelf(
-  std::ostream& os,
-  itk::Indent indent) const
-{
-  Superclass::PrintSelf( os, indent );
-  os << indent << "VetorData: " << m_VectorData.GetPointer() << std::endl;
-}
-
-
-/**
- * Initialize by setting the input VectorData
- */
-template <class TOutput, class TCoordRep, class TPrecision>
-void
-DataNodeVectorDataFunction<TOutput, TCoordRep, TPrecision>
-::SetInputVectorData(
-  const VectorDataType * ptr )
-{
-  // set the input VectorData
-  m_VectorData = ptr;
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Core/VectorDataBase/include/otbGISConnectionImplementation.h b/Modules/Core/VectorDataBase/include/otbGISConnectionImplementation.h
deleted file mode 100644
index ba09b76b6d314c30615c420b164e74c0588488b5..0000000000000000000000000000000000000000
--- a/Modules/Core/VectorDataBase/include/otbGISConnectionImplementation.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbGISConnectionImplementation_h
-#define otbGISConnectionImplementation_h
-
-#include "itkDataObject.h"
-#include "itkObjectFactory.h"
-#include <string>
-
-namespace otb
-{
-/** \class GISConnectionImplementation
- * \brief Base class for GIS DB connection implementations
- *
- *
- *
- * \ingroup OTBVectorDataBase
- */
-
-template <class TransactorType>
-class ITK_EXPORT GISConnectionImplementation
-  : public itk::DataObject
-{
-public:
-  /** Standard class typedefs */
-  typedef GISConnectionImplementation   Self;
-  typedef itk::DataObject               Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-  /** Standard macros */
-  itkNewMacro(Self);
-  itkTypeMacro(GISConnectionImplementation, itk::DataObject);
-
-  /** Acessors */
-  itkGetMacro(Host, std::string);
-  itkSetMacro(Host, std::string);
-
-  itkGetMacro(DBName, std::string);
-  itkSetMacro(DBName, std::string);
-
-  itkGetMacro(User, std::string);
-  itkSetMacro(User, std::string);
-
-  itkGetMacro(Password, std::string);
-  itkSetMacro(Password, std::string);
-
-  itkGetMacro(Port, std::string);
-  itkSetMacro(Port, std::string);
-
-  itkGetMacro(Options, std::string);
-  itkSetMacro(Options, std::string);
-
-  /** Using the connection */
-
-  virtual void ConnectToDB(){}
-
-  virtual void PerformTransaction(const TransactorType& itkNotUsed(theTransaction)) const {}
-
-protected:
-  /** Constructor */
-  GISConnectionImplementation(){};
-  /** Destructor */
-  virtual ~GISConnectionImplementation(){};
-
-private:
-  GISConnectionImplementation(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  std::string m_Host;
-  std::string m_DBName;
-  std::string m_User;
-  std::string m_Password;
-  std::string m_Port;
-  std::string m_Options;
-
-};
-} // end namespace otb
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/CMakeLists.txt b/Modules/Detection/ObjectDetection/CMakeLists.txt
deleted file mode 100644
index e43a781cad9f8f9c4566a125e2023eb9444e3b6f..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-project(OTBObjectDetection)
-otb_module_impl()
diff --git a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h b/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h
deleted file mode 100644
index 6432b507d125bbc7c51e331341c884a5da73a6b3..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.h
+++ /dev/null
@@ -1,378 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbDescriptorsListSampleGenerator_h
-#define otbDescriptorsListSampleGenerator_h
-
-#include <vector>
-
-#include "itkVariableLengthVector.h"
-#include "itkImageRegion.h"
-#include "itkFunctionBase.h"
-#include "itkListSample.h"
-#include "itkSimpleDataObjectDecorator.h"
-
-#include "otbListSampleSource.h"
-#include "otbVectorData.h"
-#include "otbPersistentImageFilter.h"
-#include "otbPersistentFilterStreamingDecorator.h"
-
-namespace otb
-{
-
-template <class TOutputPrecision>
-class DefaultDescriptorsType
-{
-public:
-  typedef itk::VariableLengthVector<TOutputPrecision> Type;
-};
-
-/** \class PersistentDescriptorsListSampleGenerator
- *  \brief [internal] Helper class for the implementation of DescriptorsListSampleGenerator
- *
- *  This class inherits PersistentImageFilter and provides the Reset/Synthesize functions,
- *  plus the ThreadedGenerateData function implementing the image function evaluation
- *
- * \ingroup OTBObjectDetection
- */
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabel>
-class ITK_EXPORT PersistentDescriptorsListSampleGenerator :
-  public PersistentImageFilter<TInputImage, TInputImage>
-{
-public:
-  /** Standard Self typedef */
-  typedef PersistentDescriptorsListSampleGenerator        Self;
-  typedef PersistentImageFilter<TInputImage, TInputImage> Superclass;
-  typedef itk::SmartPointer<Self>                         Pointer;
-  typedef itk::SmartPointer<const Self>                   ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Runtime information support. */
-  itkTypeMacro(PersistentDescriptorsListSampleGenerator, PersistentImageFilter);
-
-  /** Image related typedefs. */
-  typedef TInputImage                      InputImageType;
-  typedef typename TInputImage::Pointer    InputImagePointer;
-  typedef typename TInputImage::RegionType RegionType;
-  typedef typename TInputImage::SizeType   SizeType;
-  typedef typename TInputImage::IndexType  IndexType;
-  typedef typename TInputImage::PixelType  PixelType;
-
-  itkStaticConstMacro(InputImageDimension, unsigned int,
-                      TInputImage::ImageDimension);
-
-  /** Image related typedefs. */
-  itkStaticConstMacro(ImageDimension, unsigned int,
-                      TInputImage::ImageDimension);
-
-  /** Smart Pointer type to a DataObject. */
-  typedef itk::ProcessObject::DataObjectPointerArraySizeType DataObjectPointerArraySizeType;
-  typedef typename itk::DataObject::Pointer DataObjectPointer;
-
-  /** Input VectorData */
-  typedef TVectorData                                     VectorDataType;
-  typedef typename VectorDataType::Pointer                VectorDataPointerType;
-  typedef typename VectorDataType::DataNodeType           VectorDataNodeType;
-  typedef typename VectorDataType::DataNodePointerType    VectorDataNodePointerType;
-  typedef typename VectorDataType::DataTreeType           VectorDataTreeType;
-  typedef typename VectorDataType::DataTreePointerType    VectorDataTreePointerType;
-  typedef typename VectorDataNodeType::PointType          VectorDataPointType;
-  typedef typename VectorDataNodeType::LineType           VectorDataLineType;
-  typedef typename VectorDataNodeType::PolygonType        VectorDataPolygonType;
-  typedef itk::PreOrderTreeIterator<VectorDataTreeType>   VectorDataTreeIteratorType;
-
-  /** Function type for descriptors extraction */
-  typedef TFunctionType                                   DescriptorsFunctionType;
-  typedef typename DescriptorsFunctionType::Pointer       DescriptorsFunctionPointerType;
-  typedef typename DescriptorsFunctionType::InputType     DescriptorsFunctionPointType;
-
-  typedef itk::ContinuousIndex
-        <typename DescriptorsFunctionPointType::ValueType,
-         itkGetStaticConstMacro(InputImageDimension)>     ContinuousIndexType;
-
-  /** ListSample output */
-  typedef TListSample                                     ListSampleType;
-  typedef typename ListSampleType::Pointer                ListSamplePointerType;
-  typedef typename ListSampleType::MeasurementVectorType  SampleMeasurementVectorType;
-  typedef typename ListSampleType::MeasurementType        SampleMeasurementType;
-
-  /** LabelListSample output */
-  typedef TLabel                                          LabelType;
-  typedef itk::FixedArray<LabelType,1>                    LabelSampleType;
-  typedef itk::Statistics::ListSample<LabelSampleType>    LabelListSampleType;
-  typedef typename LabelListSampleType::Pointer           LabelListSamplePointerType;
-  typedef typename LabelListSampleType::MeasurementVectorType LabelMeasurementVectorType;
-  typedef typename LabelListSampleType::MeasurementType   LabelMeasurementType;
-
-  /** ListSamplePositions output */
-  typedef std::vector<DescriptorsFunctionPointType>               SamplesPositionType;
-  typedef itk::SimpleDataObjectDecorator<SamplesPositionType>     SamplesPositionObjectType;
-  typedef typename SamplesPositionObjectType::Pointer             SamplesPositionObjectPointerType;
-
-  void SetSamplesLocations(VectorDataType * input);
-  VectorDataType * GetSamplesLocations(void);
-
-  /** The function to evaluate */
-  itkSetObjectMacro(DescriptorsFunction,      DescriptorsFunctionType);
-  itkGetObjectMacro(DescriptorsFunction,      DescriptorsFunctionType);
-  itkGetConstObjectMacro(DescriptorsFunction, DescriptorsFunctionType);
-
-  /** Output sample list */
-  ListSampleType*             GetListSample();
-
-  /** Output label list */
-  LabelListSampleType*        GetLabelListSample();
-
-  /** Output sample position list */
-  SamplesPositionType&             GetSamplesPositions();
-  SamplesPositionObjectType*       GetSamplesPositionsObject();
-
-  itkSetMacro( NeighborhoodRadius, unsigned int );
-  itkGetConstReferenceMacro( NeighborhoodRadius, unsigned int );
-
-  /** Make a DataObject of the correct type to be used as the specified
-   * output. */
-  itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) override;
-  using Superclass::MakeOutput;
-
-  void AllocateOutputs() override;
-  void GenerateOutputInformation() override;
-  void Reset(void) override;
-  void Synthetize(void) override;
-
-  void AddInput(itk::DataObject * dataObject) override
-  {
-    Superclass::AddInput(dataObject);
-  }
-
-protected:
-  PersistentDescriptorsListSampleGenerator();
-  ~PersistentDescriptorsListSampleGenerator() override;
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  void GenerateInputRequestedRegion() override;
-
-  void BeforeThreadedGenerateData() override;
-
-  /** Multi-thread version GenerateData. */
-  void  ThreadedGenerateData(const RegionType& outputRegionForThread,
-                             itk::ThreadIdType threadId) override;
-
-private:
-  PersistentDescriptorsListSampleGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  bool IsInsideWithNeighborhoodRadius(const RegionType& region, const ContinuousIndexType &index) const
-    {
-    typedef typename IndexType::IndexValueType IndexValueType;
-    typedef typename ContinuousIndexType::ValueType ContinuousIndexValueType;
-
-    for(unsigned int i=0; i<ImageDimension; ++i)
-      {
-      if( itk::Math::RoundHalfIntegerUp<IndexValueType>(index[i]) < static_cast<IndexValueType>( region.GetIndex(i) ) + static_cast<IndexValueType>(m_NeighborhoodRadius) )
-       //Comment this instruction after itkv4 migration (correct
-       //usage of centered-pixel coordinates)
-       //if( index[i] < static_cast<IndexValueType>( region.GetIndex(i) ) + m_NeighborhoodRadius )
-        {
-        return false;
-        }
-      // bound is the last valid pixel location
-      const ContinuousIndexValueType bound = static_cast<ContinuousIndexValueType>(
-          region.GetIndex(i) + region.GetSize(i) - 0.5);
-      //Comment this instruction after itkv4 migration (correct
-      //usage of centered-pixel coordinates)
-      //const ContinuousIndexValueType bound = static_cast<ContinuousIndexValueType>(
-      //    region.GetIndex(i) + static_cast<IndexValueType>(region.GetSize(i)) - 1);
-
-      if( index[i] > bound - m_NeighborhoodRadius )
-        {
-        return false;
-        }
-      }
-    return true;
-    }
-  typedef std::vector<ListSamplePointerType>      ListSampleArray;
-  typedef std::vector<LabelListSamplePointerType> LabelListSampleArray;
-  typedef std::vector<SamplesPositionType>        SamplesPositionArray;
-
-  ListSampleArray                m_ThreadListSample;
-  LabelListSampleArray           m_ThreadLabelListSample;
-  SamplesPositionArray           m_ThreadSamplesPosition;
-
-  DescriptorsFunctionPointerType m_DescriptorsFunction;
-
-  unsigned int m_NeighborhoodRadius;
-};
-
-
-/** \class DescriptorsListSampleGenerator
- *  \brief This class generates a ListSample by computing local descriptors
- *  on an image at specified positions.
- *
- *  Given an image (by SetInputImage()) and a vector data containing points (by SetSamplesLocations()),
- *  this class evaluates an ImageFunction (set by SetDescriptorsFunction()) at each point of the vector data
- *  over the image.
- *  It generates a ListSample containing the descriptors values for each sample,
- *  along with a label ListSample containing the label associated with each sample.
- *  The label is read from the vector data using the data field "Class", read as an int
- *
- *  This class is streaming capable and multithreaded
- *
- * \ingroup OTBObjectDetection
- */
-template <class TInputImage, class TVectorData, class TListSample, class TLabel, class TOutputPrecision = double, class TCoordRep = double>
-class ITK_EXPORT DescriptorsListSampleGenerator :
-    public PersistentFilterStreamingDecorator<
-              PersistentDescriptorsListSampleGenerator< TInputImage,
-                                                        TVectorData,
-                                                        itk::FunctionBase< itk::Point<TCoordRep, 2>,
-                                                                           typename DefaultDescriptorsType<TOutputPrecision>::Type >,
-                                                        TListSample,
-                                                        TLabel > >
-{
-public:
-    /** Standard Self typedef */
-    typedef DescriptorsListSampleGenerator      Self;
-    typedef PersistentFilterStreamingDecorator
-              < PersistentDescriptorsListSampleGenerator
-                  <TInputImage,
-                   TVectorData,
-                   itk::FunctionBase< itk::Point<TCoordRep, 2>, typename DefaultDescriptorsType<TOutputPrecision>::Type >,
-                   TListSample,
-                   TLabel> >          Superclass;
-    typedef itk::SmartPointer<Self>             Pointer;
-    typedef itk::SmartPointer<const Self>       ConstPointer;
-
-    /** Type macro */
-    itkNewMacro(Self);
-
-    /** Creation through object factory macro */
-    itkTypeMacro(DescriptorsListSampleGenerator, PersistentFilterStreamingDecorator);
-
-    typedef TInputImage                              InputImageType;
-    typedef TVectorData                              InputVectorDataType;
-    typedef TListSample                              ListSampleType;
-    typedef TCoordRep                                CoordRepType;
-    typedef TOutputPrecision                         OutputPrecision;
-
-    /** The coordinates used when evaluating function */
-    typedef itk::Point<TCoordRep, 2> PointType;
-
-    /** The return value of the function */
-    typedef typename DefaultDescriptorsType<TOutputPrecision>::Type DescriptorType;
-
-    /** The function evaluated on the input image at locations specified by the vector data */
-    typedef itk::FunctionBase<PointType, DescriptorType> DescriptorsFunctionType;
-    typedef typename DescriptorsFunctionType::Pointer    DescriptorsFunctionPointerType;
-
-    typedef typename Superclass::FilterType                           PersistentFilterType;
-    typedef typename PersistentFilterType::LabelListSampleType        LabelListSampleType;
-    typedef typename PersistentFilterType::SamplesPositionObjectType  SamplesPositionObjectType;
-    typedef typename PersistentFilterType::SamplesPositionType        SamplesPositionType;
-
-
-    /** Input image to extract feature */
-    void SetInputImage(InputImageType * input)
-    {
-      this->GetFilter()->SetInput(input);
-    }
-
-    /** Input image to extract feature */
-    InputImageType * GetInputImage()
-    {
-      return this->GetFilter()->GetInput();
-    }
-
-    void AddInput(itk::DataObject * dataObject) override
-      {
-        this->GetFilter()->AddInput(dataObject);
-      }
-
-    /** Sample locations as a VectorData of points. The label is in the ClassKey feature */
-    void SetSamplesLocations(InputVectorDataType * input)
-    {
-      this->GetFilter()->SetSamplesLocations(input);
-    }
-
-    /** Sample locations as a VectorData of points. The label is in the ClassKey feature  */
-    InputImageType * GetSamplesLocations()
-    {
-      return this->GetFilter()->GetSamplesLocations();
-    }
-
-    /** The function to evaluate */
-    void SetDescriptorsFunction(DescriptorsFunctionType * input)
-    {
-      this->GetFilter()->SetDescriptorsFunction(input);
-    }
-
-    /** The function to evaluate */
-    DescriptorsFunctionType * GetDescriptorsFunction()
-    {
-      return this->GetFilter()->GetDescriptorsFunction();
-    }
-
-    /** Final sample list */
-    ListSampleType*       GetListSample()
-    {
-      return this->GetFilter()->GetListSample();
-    }
-
-    /** Final label list */
-    LabelListSampleType*        GetLabelListSample()
-    {
-      return this->GetFilter()->GetLabelListSample();
-    }
-
-    /** Final label list */
-    SamplesPositionType&        GetSamplesPositions()
-    {
-      return this->GetFilter()->GetSamplesPositions();
-    }
-
-    SamplesPositionObjectType*  GetSamplesPositionsObject()
-    {
-      return this->GetFilter()->GetSamplesPositionsObject();
-    }
-
-    otbSetObjectMemberMacro(Filter, NeighborhoodRadius, unsigned int);
-    otbGetObjectMemberMacro(Filter, NeighborhoodRadius, unsigned int);
-
-  protected:
-    /** Constructor */
-    DescriptorsListSampleGenerator();
-
-    /** Destructor */
-    ~DescriptorsListSampleGenerator() override;
-
-  private:
-    DescriptorsListSampleGenerator(const Self &) = delete;
-    void operator =(const Self&) = delete;
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbDescriptorsListSampleGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.hxx b/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.hxx
deleted file mode 100644
index 7fb7b6f55ec2d70ed30d592b63fba40da9513e0a..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbDescriptorsListSampleGenerator.hxx
+++ /dev/null
@@ -1,361 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbDescriptorsListSampleGenerator_hxx
-#define otbDescriptorsListSampleGenerator_hxx
-
-#include "otbDescriptorsListSampleGenerator.h"
-
-#include "itkContinuousIndex.h"
-
-namespace otb
-{
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::PersistentDescriptorsListSampleGenerator()
-  : m_NeighborhoodRadius(0)
-{
-  // Need 2 inputs : a vector image and a vectordata
-  this->SetNumberOfRequiredInputs(2);
-
-  // Have 4 outputs : the image created by Superclass,
-  // the sample list, the label sample list, the positions of the samples
-  this->SetNumberOfRequiredOutputs(3);
-  this->itk::ProcessObject::SetNthOutput(1, this->MakeOutput(1).GetPointer());
-  this->itk::ProcessObject::SetNthOutput(2, this->MakeOutput(2).GetPointer());
-  this->itk::ProcessObject::SetNthOutput(3, this->MakeOutput(3).GetPointer());
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::~PersistentDescriptorsListSampleGenerator()
-{
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::AllocateOutputs()
-{
-  // This is commented to prevent the streaming of the whole image for the first stream strip
-  // It shall not cause any problem because the output image of this filter is not intended to be used.
-  //InputImagePointer image = const_cast< TInputImage * >( this->GetInput() );
-  //this->GraftOutput( image );
-  // Nothing that needs to be allocated for the remaining outputs
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::GenerateOutputInformation()
-{
-  Superclass::GenerateOutputInformation();
-  if (this->GetInput())
-    {
-    this->GetOutput()->CopyInformation(this->GetInput());
-    this->GetOutput()->SetLargestPossibleRegion(this->GetInput()->GetLargestPossibleRegion());
-
-    if (this->GetOutput()->GetRequestedRegion().GetNumberOfPixels() == 0)
-      {
-      this->GetOutput()->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion());
-      }
-    }
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::SetSamplesLocations(VectorDataType* location)
-{
-  this->SetNthInput(1, location);
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::VectorDataType*
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::GetSamplesLocations()
-{
-
-  return static_cast<VectorDataType*>(this->itk::ProcessObject::GetInput(1));
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::ListSampleType*
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::GetListSample()
-{
-  return dynamic_cast<ListSampleType*>(this->itk::ProcessObject::GetOutput(1));
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::LabelListSampleType*
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::GetLabelListSample()
-{
-  return dynamic_cast<LabelListSampleType*>( this->itk::ProcessObject::GetOutput(2) );
-}
-
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::SamplesPositionType&
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::GetSamplesPositions()
-{
-  return this->GetSamplesPositionsObject()->Get();
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-typename PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>::SamplesPositionObjectType*
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::GetSamplesPositionsObject()
-{
-  return dynamic_cast<SamplesPositionObjectType*>(this->itk::ProcessObject::GetOutput(3));
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-itk::DataObject::Pointer
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::MakeOutput(DataObjectPointerArraySizeType idx)
-{
-  itk::DataObject::Pointer output;
-  switch (idx)
-    {
-    case 0:
-      output = static_cast<itk::DataObject*>(InputImageType::New().GetPointer());
-      break;
-    case 1:
-      {
-      ListSamplePointerType listSample = ListSampleType::New();
-      output = static_cast<itk::DataObject*>(listSample.GetPointer());
-      break;
-      }
-    case 2:
-      {
-      LabelListSamplePointerType labelListSample = LabelListSampleType::New();
-      output = static_cast<itk::DataObject*>(labelListSample.GetPointer());
-      break;
-      }
-    case 3:
-      {
-      SamplesPositionObjectPointerType samplesPositions = SamplesPositionObjectType::New();
-      output = static_cast<itk::DataObject*>(samplesPositions.GetPointer());
-      break;
-      }
-    default:
-      output = static_cast<itk::DataObject*>(InputImageType::New().GetPointer());
-      break;
-    }
-  return output;
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::Reset()
-{
-  m_ThreadListSample = ListSampleArray(this->GetNumberOfThreads());
-  for (unsigned int i = 0; i < this->GetNumberOfThreads(); ++i)
-    {
-    m_ThreadListSample[i] = ListSampleType::New();
-    }
-
-  m_ThreadLabelListSample = LabelListSampleArray(this->GetNumberOfThreads());
-  for (unsigned int i = 0; i < this->GetNumberOfThreads(); ++i)
-    {
-    m_ThreadLabelListSample[i] = LabelListSampleType::New();
-    }
-
-  m_ThreadSamplesPosition = SamplesPositionArray(this->GetNumberOfThreads());
-
-  this->GetListSample()->Clear();
-  this->GetLabelListSample()->Clear();
-  this->GetSamplesPositions().clear();
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::Synthetize()
-{
-  // Merge the ListSample from all the threads
-  ListSampleType* listSample = this->GetListSample();
-  LabelListSampleType* labelListSample = this->GetLabelListSample();
-  SamplesPositionType& samplesPosition = this->GetSamplesPositions();
-  VectorDataPointType ref;
-
-  // Get the output list measurement vector sample sizes once
-  listSample->SetMeasurementVectorSize(m_ThreadListSample[0]->GetMeasurementVectorSize());
-  labelListSample->SetMeasurementVectorSize(m_ThreadLabelListSample[0]->GetMeasurementVectorSize());
-
-  // Copy the first thread elements into lists
-  ListSampleType* threadListSample = m_ThreadListSample[0];
-  LabelListSampleType* threadLabelListSample = m_ThreadLabelListSample[0];
-  SamplesPositionType& threadSamplesPosition = m_ThreadSamplesPosition[0];
-  for (unsigned int i = 0; i < threadListSample->Size(); ++i)
-    {
-    listSample->PushBack( threadListSample->GetMeasurementVector(i) );
-    labelListSample->PushBack( threadLabelListSample->GetMeasurementVector(i) );
-    samplesPosition.push_back( threadSamplesPosition[i] );
-    }
-
-  // Add the other thread element checking if the point dosn't already exist
-  for (itk::ThreadIdType threadId = 1; threadId < this->GetNumberOfThreads(); ++threadId )
-    {
-    threadListSample = m_ThreadListSample[threadId];
-    threadLabelListSample = m_ThreadLabelListSample[threadId];
-    threadSamplesPosition = m_ThreadSamplesPosition[threadId];
-
-    for (unsigned int i = 0; i < threadListSample->Size(); ++i)
-      {
-        const DescriptorsFunctionPointType & curSamplesPosition = threadSamplesPosition[i];
-        if( std::find(samplesPosition.begin(), samplesPosition.end(), curSamplesPosition) == samplesPosition.end() )
-          {
-            listSample->PushBack( threadListSample->GetMeasurementVector(i) );
-            labelListSample->PushBack( threadLabelListSample->GetMeasurementVector(i) );
-            samplesPosition.push_back( curSamplesPosition );
-          }
-      }
-    }
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::GenerateInputRequestedRegion()
-{
-  Superclass::GenerateInputRequestedRegion();
-
-  // get pointers to the input and output
-  typename Superclass::InputImagePointer inputPtr =
-    const_cast< TInputImage * >( this->GetInput() );
-  typename Superclass::OutputImagePointer outputPtr = this->GetOutput();
-
-  if ( !inputPtr || !outputPtr )
-    {
-    return;
-    }
-
-  // get a copy of the input requested region (should equal the output
-  // requested region)
-  typename TInputImage::RegionType inputRequestedRegion;
-  inputRequestedRegion = inputPtr->GetRequestedRegion();
-
-  // pad the input requested region by the operator radius
-  inputRequestedRegion.PadByRadius( m_NeighborhoodRadius + 5 );
-
-  // crop the input requested region at the input's largest possible region
-  if ( inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()) )
-    {
-    inputPtr->SetRequestedRegion( inputRequestedRegion );
-    return;
-    }
-  else
-    {
-    // Couldn't crop the region (requested region is outside the largest
-    // possible region).  Throw an exception.
-
-    // store what we tried to request (prior to trying to crop)
-    inputPtr->SetRequestedRegion( inputRequestedRegion );
-    }
-}
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::BeforeThreadedGenerateData()
-{}
-
-
-template <class TInputImage, class TVectorData, class TFunctionType, class TListSample, class TLabelListSample>
-void
-PersistentDescriptorsListSampleGenerator<TInputImage, TVectorData, TFunctionType, TListSample, TLabelListSample>
-::ThreadedGenerateData(const RegionType&  outputRegionForThread,
-                       itk::ThreadIdType threadId)
-{
-  ListSampleType* listSample = m_ThreadListSample[threadId];
-  LabelListSampleType* labelListSample = m_ThreadLabelListSample[threadId];
-  SamplesPositionType& samplesPosition = m_ThreadSamplesPosition[threadId];
-
-  VectorDataTreeIteratorType vectorDataIt(this->GetSamplesLocations()->GetDataTree());
-  bool isInitialized = false;
-
-  for (vectorDataIt.GoToBegin(); !vectorDataIt.IsAtEnd(); ++vectorDataIt)
-    {
-    if (vectorDataIt.Get()->IsPointFeature())
-      {
-      VectorDataPointType point = vectorDataIt.Get()->GetPoint();
-      ContinuousIndexType cidx;
-      this->GetInput()->TransformPhysicalPointToContinuousIndex(point, cidx);
-
-      RegionType paddedRegion = outputRegionForThread;
-      paddedRegion.PadByRadius(m_NeighborhoodRadius);
-      if (this->IsInsideWithNeighborhoodRadius(paddedRegion, cidx))
-        {
-        // Set the Measurement Vector Size of the samplelists, once
-        if(!isInitialized)
-          {
-          // output list sample
-          listSample->SetMeasurementVectorSize(m_DescriptorsFunction->Evaluate(point).Size());
-          labelListSample->SetMeasurementVectorSize(LabelMeasurementVectorType::Length);
-          isInitialized = true;
-          }
-
-        SampleMeasurementVectorType sample(m_DescriptorsFunction->Evaluate(point));
-        listSample->PushBack( sample );
-
-        LabelMeasurementVectorType label;
-        label[0] = static_cast<LabelMeasurementType>(vectorDataIt.Get()->GetFieldAsInt("Class"));
-        labelListSample->PushBack( label );
-
-        samplesPosition.push_back(point);
-        }
-      }
-    }
-}
-
-
-template <class TInputImage, class TVectorData, class TListSample, class TLabelListSample, class TOutputPrecision, class TCoordRep>
-DescriptorsListSampleGenerator<TInputImage, TVectorData, TListSample, TLabelListSample, TOutputPrecision, TCoordRep>
-::DescriptorsListSampleGenerator()
-{
-
-
-}
-
-template <class TInputImage, class TVectorData, class TListSample, class TLabelListSample, class TOutputPrecision, class TCoordRep>
-DescriptorsListSampleGenerator<TInputImage, TVectorData, TListSample, TLabelListSample, TOutputPrecision, TCoordRep>
-::~DescriptorsListSampleGenerator()
-{
-
-}
-
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h
deleted file mode 100644
index f4c79f003f9b7a1c7e5c3841720e9b9979bac03e..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbFlusserMomentsIFFactory_h
-#define otbFlusserMomentsIFFactory_h
-
-#include "itkLightObject.h"
-
-#include "otbMetaImageFunction.h"
-#include "itkDataObject.h"
-#include "otbImage.h"
-#include "otbImageFunctionAdaptor.h"
-#include "otbFlusserMomentsImageFunction.h"
-
-
-namespace otb
-{
-/** \class FlusserMomentsFFactory
- *  \brief add a FlusserMoments image function to a
- *  MetaImageFunction
- *
- *  This class aims at adding an adapted
- *  FlusserMomentsImageFunction to an existing
- *  MetaImageFunction through the method Create.
- *
- *
- * \ingroup OTBObjectDetection
- */
-
-template <class TImageType, class TCoordRep = double, class TPrecision = double>
-class ITK_EXPORT FlusserMomentsIFFactory :
-    public itk::LightObject
-{
-public:
-  /** Standard class typedefs. */
-  typedef FlusserMomentsIFFactory                                         Self;
-  typedef itk::LightObject                                                Superclass;
-  typedef itk::SmartPointer<Self>                                         Pointer;
-  typedef itk::SmartPointer<const Self>                                   ConstPointer;
-
-  // New macro
-  itkNewMacro(Self);
-
-  // RTTI typeinfo
-  itkTypeMacro(FlusserMomentsIFFactory, itk::LightObject);
-
-  // Input and output typedef
-  typedef TImageType              InputImageType;
-  typedef TCoordRep               CoordRepType;
-  typedef TPrecision              PrecisionType;
-
-  // Other typedef
-  typedef typename MetaImageFunction<TPrecision>::Pointer  MetaImageFunctionPointerType;
-  typedef typename std::vector<itk::DataObject::Pointer>   DataObjectContainerType;
-  typedef typename std::vector<PrecisionType>         ParamContainerType;
-  typedef FlusserMomentsImageFunction<InputImageType, CoordRepType>
-                                                      FlusserMomentsIF;
-  typedef ImageFunctionAdaptor<FlusserMomentsIF, TPrecision>
-                                                      AdaptedFlusserMomentsIF;
-
-  void Create(InputImageType * image,
-              ParamContainerType param,
-              MetaImageFunctionPointerType metaIF,
-              DataObjectContainerType * container);
-
-protected:
-  FlusserMomentsIFFactory(){}
-  ~FlusserMomentsIFFactory() override{}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  FlusserMomentsIFFactory(const Self& ) = delete;
-  void operator=(const Self& ) = delete;
-
-};
-
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbFlusserMomentsIFFactory.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.hxx
deleted file mode 100644
index 6aa08394d2145baf8474c072587f9b2757430419..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbFlusserMomentsIFFactory.hxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbFlusserMomentsIFFactory_hxx
-#define otbFlusserMomentsIFFactory_hxx
-
-#include "otbFlusserMomentsIFFactory.h"
-
-
-namespace otb
-{
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-FlusserMomentsIFFactory<TImageType, TCoordRep, TPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-FlusserMomentsIFFactory<TImageType, TCoordRep, TPrecision>
-::Create(InputImageType * image,
-         ParamContainerType param,
-         MetaImageFunctionPointerType metaIF,
-         DataObjectContainerType * container)
-{
-  typename AdaptedFlusserMomentsIF::Pointer function = AdaptedFlusserMomentsIF::New();
-
-  function->SetInputImage(image);
-  function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]);
-
-  metaIF->AddFunction(function);
-  container->push_back(image);
-}
-
-}//end namespace
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h
deleted file mode 100644
index e89dbcf376b2d11fc590b07ce0012e6045c35cab..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.h
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbFourierMellinDescriptorsIFFactory_h
-#define otbFourierMellinDescriptorsIFFactory_h
-
-#include "itkLightObject.h"
-
-#include "otbMetaImageFunction.h"
-#include "itkDataObject.h"
-#include "otbImageFunctionAdaptor.h"
-#include "otbFourierMellinDescriptorsImageFunction.h"
-
-
-namespace otb
-{
-/** \class FourierMellinDescriptorsFFactory
- *  \brief add a FourierMellinDescriptors image function to a
- *  MetaImageFunction
- *
- *  This class aims at adding an adapted
- *  FourierMellinDescriptorsImageFunction to an existing
- *  MetaImageFunction through the method Create.
- *
- *
- * \ingroup OTBObjectDetection
- */
-
-template <class TImageType, class TCoordRep = double, class TPrecision = double>
-class ITK_EXPORT FourierMellinDescriptorsIFFactory :
-    public itk::LightObject
-{
-public:
-  /** Standard class typedefs. */
-  typedef FourierMellinDescriptorsIFFactory                               Self;
-  typedef itk::LightObject                                                Superclass;
-  typedef itk::SmartPointer<Self>                                         Pointer;
-  typedef itk::SmartPointer<const Self>                                   ConstPointer;
-
-  // New macro
-  itkNewMacro(Self);
-
-  // RTTI typeinfo
-  itkTypeMacro(FourierMellinDescriptorsIFFactory, itk::LightObject);
-
-  // Input and output typedef
-  typedef TImageType              InputImageType;
-  typedef TCoordRep               CoordRepType;
-  typedef TPrecision              PrecisionType;
-
-  // Other typedef
-  typedef typename MetaImageFunction<TPrecision>::Pointer  MetaImageFunctionPointerType;
-  typedef typename std::vector<itk::DataObject::Pointer>   DataObjectContainerType;
-  typedef typename std::vector<PrecisionType>         ParamContainerType;
-  typedef FourierMellinDescriptorsImageFunction<InputImageType, CoordRepType>
-                                                      FourierMellinDescriptorsIF;
-  typedef ImageFunctionAdaptor<FourierMellinDescriptorsIF, TPrecision>
-                                                      AdaptedFourierMellinDescriptorsIF;
-
-  void Create(InputImageType * image,
-              ParamContainerType param,
-              MetaImageFunctionPointerType metaIF,
-              DataObjectContainerType * container);
-
-protected:
-  FourierMellinDescriptorsIFFactory(){}
-  ~FourierMellinDescriptorsIFFactory() override{}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  FourierMellinDescriptorsIFFactory(const Self& ) = delete;
-  void operator=(const Self& ) = delete;
-
-};
-
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbFourierMellinDescriptorsIFFactory.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.hxx
deleted file mode 100644
index bb19f36cf7a608203ca02e2fffd12a8bbb729951..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbFourierMellinDescriptorsIFFactory.hxx
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbFourierMellinDescriptorsIFFactory_hxx
-#define otbFourierMellinDescriptorsIFFactory_hxx
-
-#include "otbFourierMellinDescriptorsIFFactory.h"
-
-
-namespace otb
-{
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-FourierMellinDescriptorsIFFactory<TImageType, TCoordRep, TPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-FourierMellinDescriptorsIFFactory<TImageType, TCoordRep, TPrecision>
-::Create(InputImageType * image,
-         ParamContainerType param,
-         MetaImageFunctionPointerType metaIF,
-         DataObjectContainerType * container)
-{
-  typename AdaptedFourierMellinDescriptorsIF::Pointer function = AdaptedFourierMellinDescriptorsIF::New();
-
-  function->SetInputImage(image);
-  function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]);
-  function->GetInternalImageFunction()->SetPmax(param[1]);
-  function->GetInternalImageFunction()->SetQmax(param[2]);
-
-  metaIF->AddFunction(function);
-  container->push_back(image);
-}
-
-}//end namespace
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h b/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h
deleted file mode 100644
index b00367a73b0b655ddfc57f2305cc15e18922636e..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.h
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbHaralickTexturesIFFactory_h
-#define otbHaralickTexturesIFFactory_h
-
-#include "itkLightObject.h"
-
-#include "otbMetaImageFunction.h"
-#include "itkDataObject.h"
-#include "otbImage.h"
-#include "otbImageFunctionAdaptor.h"
-#include "otbHaralickTexturesImageFunction.h"
-
-
-namespace otb
-{
-/** \class HaralickTexturesFFactory
- *  \brief add a HaralickTextures image function to a
- *  MetaImageFunction
- *
- *  This class aims at adding an adapted
- *  HaralickTexturesImageFunction to an existing
- *  MetaImageFunction through the method Create.
- *
- *
- * \ingroup OTBObjectDetection
- */
-
-template <class TImageType, class TCoordRep = double, class TPrecision = double>
-class ITK_EXPORT HaralickTexturesIFFactory :
-    public itk::LightObject
-{
-public:
-  /** Standard class typedefs. */
-  typedef HaralickTexturesIFFactory                                       Self;
-  typedef itk::LightObject                                                Superclass;
-  typedef itk::SmartPointer<Self>                                         Pointer;
-  typedef itk::SmartPointer<const Self>                                   ConstPointer;
-
-  // New macro
-  itkNewMacro(Self);
-
-  // RTTI typeinfo
-  itkTypeMacro(haralickTexturesIFFactory, itk::LightObject);
-
-  // Input and output typedef
-  typedef TImageType              InputImageType;
-  typedef TCoordRep               CoordRepType;
-  typedef TPrecision              PrecisionType;
-
-  // Other typedef
-  typedef typename MetaImageFunction<TPrecision>::Pointer  MetaImageFunctionPointerType;
-  typedef typename std::vector<itk::DataObject::Pointer>   DataObjectContainerType;
-  typedef typename std::vector<PrecisionType>              ParamContainerType;
-  typedef HaralickTexturesImageFunction<InputImageType, CoordRepType>
-                                                           HaralickTexturesIF;
-  typedef typename HaralickTexturesIF::OffsetType          OffsetType;
-  typedef ImageFunctionAdaptor<HaralickTexturesIF, TPrecision>
-                                                           AdaptedHaralickTexturesIF;
-
-  void Create(InputImageType * image,
-              ParamContainerType param,
-              MetaImageFunctionPointerType metaIF,
-              DataObjectContainerType * container);
-
-protected:
-  HaralickTexturesIFFactory(){}
-  ~HaralickTexturesIFFactory() override{}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  HaralickTexturesIFFactory(const Self& ) = delete;
-  void operator=(const Self& ) = delete;
-
-};
-
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbHaralickTexturesIFFactory.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.hxx
deleted file mode 100644
index fe1d2934f0fce071bc89d7bd8d7f66964c21a8a7..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbHaralickTexturesIFFactory.hxx
+++ /dev/null
@@ -1,62 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbHaralickTexturesIFFactory_hxx
-#define otbHaralickTexturesIFFactory_hxx
-
-#include "otbHaralickTexturesIFFactory.h"
-
-
-namespace otb
-{
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-HaralickTexturesIFFactory<TImageType, TCoordRep, TPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-HaralickTexturesIFFactory<TImageType, TCoordRep, TPrecision>
-::Create(InputImageType * image,
-         ParamContainerType param,
-         MetaImageFunctionPointerType metaIF,
-         DataObjectContainerType * container)
-{
-  typename AdaptedHaralickTexturesIF::Pointer function = AdaptedHaralickTexturesIF::New();
-
-  function->SetInputImage(image);
-  function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]);
-  function->SetInputImageMinimum(param[1]);
-  function->SetInputImageMaximum(param[2]);
-  function->SetNumberOfBinsPerAxis(param[3]);
-
-  OffsetType offset;
-  offset.Fill(param[4]);
-  function->GetInternalImageFunction()->SetOffset(offset);
-
-  metaIF->AddFunction(function);
-  container->push_back(image);
-}
-
-}//end namespace
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h b/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h
deleted file mode 100644
index 9dd970997cbdc27a374e2fd22f6a8c59070f01eb..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbLabeledSampleLocalizationGenerator_h
-#define otbLabeledSampleLocalizationGenerator_h
-
-#include "otbVectorDataSource.h"
-#include "otbVectorData.h"
-#include "itkPreOrderTreeIterator.h"
-#include "itkMersenneTwisterRandomVariateGenerator.h"
-#include "itkEuclideanDistanceMetric.h"
-#include <string>
-
-
-namespace otb
-{
-/** \class LabeledSampleLocalizationGenerator
- *  \brief Produces a VectorData from potentialy multiple VectorData
- *
- *  This generator produces a unique vector data containing labeled positions
- *  extracted from inputs.
- *
- *  Input points are transmitted to the output. In addition, 'no class'
- *  points are randomly picked inside input polygons making sure
- *  they are at least at a given distance (InhibitionRadius) of every
- *  known points.
- *
- *  Classes are specified by the VectorData with a metadata field identified by
- *  a specific key. This key can be provided by the SetClassKey() method
- *  (using "Class" as a default key).
- *  The field is retrieved by GetFieldAsInt(), thus must be int-compatible
- *
- *
- * \ingroup OTBObjectDetection
- */
-template <class TVectorData>
-class ITK_EXPORT LabeledSampleLocalizationGenerator :
-    public VectorDataSource<TVectorData>
-{
-public:
-  /** Standard class typedefs */
-  typedef LabeledSampleLocalizationGenerator           Self;
-  typedef VectorDataSource<TVectorData>                Superclass;
-  typedef itk::SmartPointer<Self>                      Pointer;
-  typedef itk::SmartPointer<const Self>                ConstPointer;
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(LabeledSampleLocalizationGenerator, VectorDataSource);
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  typedef TVectorData                                           VectorDataType;
-  typedef typename VectorDataType::Pointer                      VectorDataPointerType;
-  typedef typename VectorDataType::DataNodeType                 DataNodeType;
-  typedef typename DataNodeType::PolygonType::RegionType        RegionType;
-  typedef typename DataNodeType::PointType                      PointType;
-  typedef typename DataNodeType::PolygonType::VertexType        VertexType;
-  typedef typename std::vector<PointType>                       PointVectorType;
-
-  typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType> TreeIteratorType;
-
-  typedef itk::Statistics::MersenneTwisterRandomVariateGenerator RandomGeneratorType;
-  typedef itk::Statistics::EuclideanDistanceMetric<PointType>    EuclideanDistanceMetricType;
-
-  /** Connects the VectorDatas from which the localizations are going to be extracted. */
-  using Superclass::PushBackInput;
-  void PushBackInput(const VectorDataType *);
-  const VectorDataType * GetInput(unsigned int idx) const;
-
-  /** Field name containing the class identifier */
-  itkGetConstMacro(ClassKey, std::string);
-  itkSetMacro(ClassKey, std::string);
-
-  /** Identifier for the negative samples class */
-  itkGetConstMacro(NoClassIdentifier, int);
-  itkSetMacro(NoClassIdentifier, int);
-
-  /** The density of auto-generated negative samples inside the polygons */
-  itkGetConstMacro(RandomLocalizationDensity, double);
-  itkSetMacro(RandomLocalizationDensity, double);
-
-  /** The minimum distance between a generated negative sample and positive samples */
-  itkGetConstMacro(InhibitionRadius, double);
-  itkSetMacro(InhibitionRadius, double);
-
-  /** The maximum iteration number during negative sample positions */
-  itkGetConstMacro(NbMaxIteration, unsigned long int);
-  itkSetMacro(NbMaxIteration, unsigned long int);
-
-  /** Set the number of samples position to generate inside the inhibition radius window around a positive point */
-  itkGetConstMacro(NumberOfPositiveSamplesPerPoint, unsigned int);
-  itkSetMacro(NumberOfPositiveSamplesPerPoint, unsigned int);
-
-  /** Set the seed for random number generator */
-  void SetSeed(unsigned int seed)
-  {
-    m_RandomGenerator->SetSeed(seed);
-  }
-
-protected:
-  LabeledSampleLocalizationGenerator();
-  ~LabeledSampleLocalizationGenerator() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  /** Triggers the Computation of the sample list */
-  void GenerateData(void) override;
-
-  PointVectorType RandomPointsGenerator(DataNodeType * node);
-
-  PointVectorType PointDensification(DataNodeType * node);
-
-private:
-  LabeledSampleLocalizationGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  std::string GetNextID()
-  {
-    std::ostringstream oss;
-    oss << m_CurrentID++;
-    return oss.str();
-  }
-
-  RandomGeneratorType::Pointer m_RandomGenerator;
-
-  std::string               m_ClassKey;
-  int                       m_NoClassIdentifier;
-  double                    m_RandomLocalizationDensity;
-  double                    m_InhibitionRadius;
-  unsigned long int         m_NbMaxIteration;
-  unsigned int              m_NumberOfPositiveSamplesPerPoint;
-  unsigned int              m_CurrentID;
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbLabeledSampleLocalizationGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.hxx b/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.hxx
deleted file mode 100644
index dc0869fc214e889a64dc9f410a6b106545e14574..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbLabeledSampleLocalizationGenerator.hxx
+++ /dev/null
@@ -1,301 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbLabeledSampleLocalizationGenerator_hxx
-#define otbLabeledSampleLocalizationGenerator_hxx
-
-#include "otbLabeledSampleLocalizationGenerator.h"
-
-#include "otbMath.h"
-
-namespace otb
-{
-template<class TVectorData>
-LabeledSampleLocalizationGenerator<TVectorData>
-::LabeledSampleLocalizationGenerator() :
-  m_ClassKey("Class"),
-  m_NoClassIdentifier(0),
-  m_RandomLocalizationDensity(.005),
-  m_InhibitionRadius(5.0),
-  m_NbMaxIteration(10000),
-  m_NumberOfPositiveSamplesPerPoint(50),
-  m_CurrentID(0)
-{
-  this->SetNumberOfRequiredInputs(1);
-  this->SetNumberOfRequiredOutputs(1);
-
-  m_RandomGenerator = RandomGeneratorType::GetInstance();
-}
-
-template <class TVectorData>
-void
-LabeledSampleLocalizationGenerator<TVectorData>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  this->Superclass::PrintSelf(os, indent);
-  os << indent << "Class Key: " << m_ClassKey << std::endl;
-  os << indent << "Negative Class Identifier: " << m_NoClassIdentifier << std::endl;
-  os << indent << "Sampling Density: " << m_RandomLocalizationDensity << std::endl;
-  os << indent << "Inhibition Radius: " << m_InhibitionRadius << std::endl;
-}
-
-
-template <class TVectorData>
-void
-LabeledSampleLocalizationGenerator<TVectorData>
-::PushBackInput(const VectorDataType * vectorData)
-{
-  this->Superclass::SetNthInput(this->GetNumberOfIndexedInputs(), const_cast<VectorDataType *>(vectorData));
-}
-
-template <class TVectorData>
-const TVectorData *
-LabeledSampleLocalizationGenerator<TVectorData>
-::GetInput(unsigned int idx) const
-{
-  if (this->GetNumberOfInputs() < idx)
-    {
-    return nullptr;
-    }
-
-  return static_cast<const VectorDataType *>(this->Superclass::GetInput(idx));
-}
-
-template <class TVectorData>
-typename LabeledSampleLocalizationGenerator<TVectorData>
-::PointVectorType
-LabeledSampleLocalizationGenerator<TVectorData>
-::PointDensification(DataNodeType * node)
-{
-
-  PointVectorType pPoint;
-  PointType centerPoint = node->GetPoint();
-
-  for(unsigned int i = 0; i < m_NumberOfPositiveSamplesPerPoint; ++i)
-    {
-    PointType point;
-    for(unsigned int dim = 0; dim < 2; ++dim)
-      {
-      point[dim] = centerPoint[dim]+this->m_RandomGenerator->GetUniformVariate(-m_InhibitionRadius, m_InhibitionRadius);
-      }
-    pPoint.push_back(point);
-    }
-  return pPoint;
-}
-
-template <class TVectorData>
-typename LabeledSampleLocalizationGenerator<TVectorData>
-::PointVectorType
-LabeledSampleLocalizationGenerator<TVectorData>
-::RandomPointsGenerator(DataNodeType * node)
-{
-  // Output
-  PointVectorType vPoint;
-
-  // Euclidean distance
-  typename EuclideanDistanceMetricType::Pointer euclideanDistanceMetric = EuclideanDistanceMetricType::New();
-
-  // Gathering Information
-  RegionType generatorRegion = node->GetPolygonExteriorRing()->GetBoundingRegion();
-  typename RegionType::SizeType generatorRegionSize = generatorRegion.GetSize();
-  typename RegionType::IndexType generatorRegionIndex = generatorRegion.GetIndex();
-  //typename RegionType::IndexType generatorRegionOrigin = generatorRegion.GetOrigin();
-
-  // Identify inside known points
-  std::vector<PointType> insiders;
-  typename VectorDataType::ConstPointer vectorData = static_cast<const VectorDataType *>(this->GetOutput(0));
-  TreeIteratorType itVector(vectorData->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (itVector.Get()->IsPointFeature() && itVector.Get()->GetFieldAsInt(m_ClassKey) != m_NoClassIdentifier)
-      {
-      VertexType vertex;
-      vertex[0] = itVector.Get()->GetPoint()[0];
-      vertex[1] = itVector.Get()->GetPoint()[1];
-
-      if(node->GetPolygonExteriorRing()->IsInside(vertex))
-        {
-        insiders.push_back(itVector.Get()->GetPoint());
-        }
-      }
-    ++itVector;
-    }
-
-  // Generation
-  unsigned int nbMaxPosition = (unsigned int)(node->GetPolygonExteriorRing()->GetArea()
-                                              * this->GetRandomLocalizationDensity());
-  unsigned long int nbIter =  this->GetNbMaxIteration();
-  unsigned int nbPosition = nbMaxPosition;
-
-  PointType rangeMin, rangeMax;
-
-  for(unsigned int dim = 0; dim < 2; ++dim)
-    {
-    rangeMin[dim] = generatorRegionIndex[dim];
-    rangeMax[dim] = generatorRegionIndex[dim] + generatorRegionSize[dim];
-    }
-
-  while(nbIter > 0 && nbPosition > 0)
-    {
-    VertexType candidate;
-    for(unsigned int dim = 0; dim < 2; ++dim)
-      {
-      candidate[dim] = this->m_RandomGenerator->GetUniformVariate(rangeMin[dim], rangeMax[dim]);
-      }
-
-    if(node->GetPolygonExteriorRing()->IsInside(candidate))
-      {
-      typename PointVectorType::const_iterator pit = insiders.begin();
-      bool valid = true;
-
-      while(valid && pit!=insiders.end())
-        {
-        valid = (euclideanDistanceMetric->Evaluate(candidate, *pit) > this->GetInhibitionRadius());
-        ++pit;
-        }
-      PointType point;
-      point[0] = candidate[0];
-      point[1] = candidate[1];
-      if(valid)
-        {
-        vPoint.push_back(point);
-        }
-      nbPosition --;
-      }
-    nbIter --;
-    }
-  return vPoint;
-}
-
-template <class TVectorData>
-void
-LabeledSampleLocalizationGenerator<TVectorData>
-::GenerateData()
-{
-  unsigned int nbInputs = this->GetNumberOfInputs();
-
-  this->GetOutput(0)->SetMetaDataDictionary(this->GetInput(0)->GetMetaDataDictionary());
-
-  // Retrieving root node
-  typename DataNodeType::Pointer root = this->GetOutput(0)->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  typename DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  // Adding the layer to the data tree
-  this->GetOutput(0)->GetDataTree()->Add(document, root);
-
-  std::string positiveClassIdentifier;
-  bool firstFeature = true;
-  // Copy all point feature in output VectorData
-  for (unsigned int i=0; i<nbInputs; ++i)
-    {
-    typename VectorDataType::ConstPointer vectorData = static_cast<const VectorDataType *>(this->GetInput(i));
-
-    TreeIteratorType itVector(vectorData->GetDataTree());
-    itVector.GoToBegin();
-    while (!itVector.IsAtEnd())
-      {
-      if (itVector.Get()->IsPointFeature())
-        {
-        //Get the value of the positive value of
-        if (firstFeature)
-          {
-          positiveClassIdentifier = itVector.Get()->GetFieldAsString(m_ClassKey);
-          firstFeature = false;
-          }
-        // Duplicate input feature
-        typename DataNodeType::Pointer currentGeometry = DataNodeType::New();
-        currentGeometry->SetNodeId(this->GetNextID());
-        currentGeometry->SetNodeType(otb::FEATURE_POINT);
-        currentGeometry->SetPoint(itVector.Get()->GetPoint());
-
-        std::vector<std::string> fields = itVector.Get()->GetFieldList();
-        for (std::vector<std::string>::const_iterator it = fields.begin(); it != fields.end(); ++it)
-          {
-          currentGeometry->SetFieldAsString( *it, itVector.Get()->GetFieldAsString(*it) );
-          // The PositiveClass identifier must be an attribute of the class
-
-          }
-
-        this->GetOutput(0)->GetDataTree()->Add(currentGeometry, document);
-        }
-      ++itVector;
-      }
-    }
-
-  // Iterates through the polygon features and generates random point inside the polygon with
-  // the "NoClass" identifier
-  for (unsigned int i=0; i<nbInputs; ++i)
-    {
-    typename VectorDataType::ConstPointer vectorData = static_cast<const VectorDataType *>(this->GetInput(i));
-
-    TreeIteratorType itVector(vectorData->GetDataTree());
-    itVector.GoToBegin();
-    while (!itVector.IsAtEnd())
-      {
-      if (itVector.Get()->IsPolygonFeature())
-        {
-        PointVectorType vPoints = RandomPointsGenerator(itVector.Get());
-
-        for (typename PointVectorType::const_iterator it = vPoints.begin(); it != vPoints.end(); ++it)
-          {
-          typename DataNodeType::Pointer currentGeometry = DataNodeType::New();
-          currentGeometry->SetNodeId(this->GetNextID());
-          currentGeometry->SetNodeType(otb::FEATURE_POINT);
-          currentGeometry->SetPoint(*it);
-          currentGeometry->SetFieldAsInt(this->GetClassKey(), this->GetNoClassIdentifier());
-          this->GetOutput(0)->GetDataTree()->Add(currentGeometry, document);
-          }
-        }
-      ++itVector;
-      }
-    }
-  // Densify positive points
-  for (unsigned int i=0; i<nbInputs; ++i)
-    {
-    typename VectorDataType::ConstPointer vectorData = static_cast<const VectorDataType *>(this->GetInput(i));
-
-    TreeIteratorType itVector(vectorData->GetDataTree());
-    itVector.GoToBegin();
-    while (!itVector.IsAtEnd())
-      {
-      if (itVector.Get()->IsPointFeature())
-        {
-        PointVectorType pPoints = PointDensification(itVector.Get());
-
-        for (typename PointVectorType::const_iterator it = pPoints.begin(); it != pPoints.end(); ++it)
-          {
-          typename DataNodeType::Pointer currentGeometry = DataNodeType::New();
-          currentGeometry->SetNodeId(this->GetNextID());
-          currentGeometry->SetNodeType(otb::FEATURE_POINT);
-          currentGeometry->SetPoint(*it);
-          currentGeometry->SetFieldAsInt(this->GetClassKey(), atoi(positiveClassIdentifier.c_str()) );
-          this->GetOutput(0)->GetDataTree()->Add(currentGeometry, document);
-          }
-        }
-      ++itVector;
-      }
-    }
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h b/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h
deleted file mode 100644
index 1747e5912b28fce922d3a4a04633ac461138b703..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbLocalHistogramIFFactory_h
-#define otbLocalHistogramIFFactory_h
-
-#include "itkLightObject.h"
-
-#include "otbMetaImageFunction.h"
-#include "itkDataObject.h"
-#include "otbImage.h"
-#include "otbImageFunctionAdaptor.h"
-#include "otbLocalHistogramImageFunction.h"
-
-
-namespace otb
-{
-/** \class LocalHistogramIFFactory
- *  \brief add a LocalHistogram image function to a
- *  MetaImageFunction
- *
- *  This class aims at adding an adapted
- *  LocalHistogramImageFunction to an existing MetaImageFunction
- *  through the method Create.
- *
- *
- * \ingroup OTBObjectDetection
- */
-
-template <class TImageType, class TCoordRep = double, class TPrecision = double>
-class ITK_EXPORT LocalHistogramIFFactory :
-    public itk::LightObject
-{
-public:
-  /** Standard class typedefs. */
-  typedef LocalHistogramIFFactory                                         Self;
-  typedef itk::LightObject                                                Superclass;
-  typedef itk::SmartPointer<Self>                                         Pointer;
-  typedef itk::SmartPointer<const Self>                                   ConstPointer;
-
-  // New macro
-  itkNewMacro(Self);
-
-  // RTTI typeinfo
-  itkTypeMacro(LocalHistogramIFFactory, itk::LightObject);
-
-  // Input and output typedef
-  typedef TImageType              InputImageType;
-  typedef TCoordRep               CoordRepType;
-  typedef TPrecision              PrecisionType;
-
-  // Other typedef
-  typedef typename MetaImageFunction<TPrecision>::Pointer  MetaImageFunctionPointerType;
-  typedef typename std::vector<itk::DataObject::Pointer>   DataObjectContainerType;
-  typedef typename std::vector<PrecisionType>              ParamContainerType;
-  typedef LocalHistogramImageFunction<InputImageType, CoordRepType>
-                                                      LocalHistogramIF;
-  typedef ImageFunctionAdaptor<LocalHistogramIF, TPrecision>
-                                                      AdaptedLocalHistogramIF;
-
-  void Create(InputImageType * image,
-              ParamContainerType param,
-              MetaImageFunctionPointerType metaIF,
-              DataObjectContainerType * container);
-
-protected:
-  LocalHistogramIFFactory(){}
-  ~LocalHistogramIFFactory() override{}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  LocalHistogramIFFactory(const Self& ) = delete;
-  void operator=(const Self& ) = delete;
-
-};
-
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbLocalHistogramIFFactory.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.hxx
deleted file mode 100644
index c3c8d27695fc7d38089f79700f988ef4b7a1ccda..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbLocalHistogramIFFactory.hxx
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbLocalHistogramIFFactory_hxx
-#define otbLocalHistogramIFFactory_hxx
-
-#include "otbLocalHistogramIFFactory.h"
-
-
-namespace otb
-{
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-LocalHistogramIFFactory<TImageType, TCoordRep, TPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-LocalHistogramIFFactory<TImageType, TCoordRep, TPrecision>
-::Create(InputImageType * image,
-         ParamContainerType param,
-         MetaImageFunctionPointerType metaIF,
-         DataObjectContainerType * container)
-{
-  typename AdaptedLocalHistogramIF::Pointer function = AdaptedLocalHistogramIF::New();
-
-  function->SetInputImage(image);
-  function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]);
-  function->GetInternalImageFunction()->SetNumberOfHistogramBins(param[1]);
-  function->GetInternalImageFunction()->SetHistogramMin(param[2]);
-  function->GetInternalImageFunction()->SetHistogramMax(param[3]);
-
-  metaIF->AddFunction(function);
-  container->push_back(image);
-}
-
-}//end namespace
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbMultiChannelIFFactory.h b/Modules/Detection/ObjectDetection/include/otbMultiChannelIFFactory.h
deleted file mode 100644
index a99de90d24b8365f194f87f2966e227d4b7abb3e..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbMultiChannelIFFactory.h
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMultiChannelIFFactory_h
-#define otbMultiChannelIFFactory_h
-
-#include "otbVectorImageToImageListFilter.h"
-#include "otbVectorImage.h"
-#include "otbImage.h"
-#include "otbImageList.h"
-#include "itkDataObject.h"
-#include "otbMetaImageFunction.h"
-
-
-namespace otb
-{
-/** \class MultiChannelIFFactory
- *  \brief Yhis class handle the image type before the use of an
- *  image function factory
- *
- *  According to the image type, the Create method of this class can
- *  call an ImageFunctionFactory for each band of the input image or
- *  once if the image type is otb::Image.
- *
- *
- * \ingroup OTBObjectDetection
- */
-
-template <class TIFFactory, class TInputImage>
-class MultiChannelIFFactory
-{
-public:
-  typedef TIFFactory                                    IFFactoryType;
-  typedef TInputImage                                   InputImageType;
-  typedef typename IFFactoryType::Pointer               IFFactoryPointerType;
-  typedef typename IFFactoryType::InputImageType        ImageType;
-  typedef typename IFFactoryType::CoordRepType          CoordRepType;
-  typedef typename IFFactoryType::PrecisionType         PrecisionType;
-  typedef typename std::vector<PrecisionType>           ParameterContainerType;
-  typedef typename std::vector<itk::DataObject::Pointer>   ImageContainer;
-  typedef typename MetaImageFunction<PrecisionType>::Pointer  MetaIFPointerType;
-
-  typedef ImageList<ImageType>                             ImageListType;
-  typedef VectorImageToImageListFilter<InputImageType,
-                                                ImageListType>      VIToILFilterType;
-
-  void Create(InputImageType * image,
-              ParameterContainerType param,
-              MetaIFPointerType metaIF,
-              ImageContainer * container)
-  {
-    m_Factory->Create(image, param, metaIF, container);
-  }
-
-  MultiChannelIFFactory()
-  {
-    m_Factory = IFFactoryType::New();
-  }
-
-  virtual ~MultiChannelIFFactory(){};
-
-private:
-  IFFactoryPointerType   m_Factory;
-
-};
-
-
-template <class TIFFactory, typename TPixel, unsigned int VImageDimension>
-class MultiChannelIFFactory<TIFFactory, otb::VectorImage<TPixel, VImageDimension> >
-{
-public:
-  typedef TIFFactory                                    IFFactoryType;
-  typedef typename IFFactoryType::Pointer               IFFactoryPointerType;
-  typedef typename IFFactoryType::InputImageType        ImageType;
-  typedef typename IFFactoryType::CoordRepType          CoordRepType;
-  typedef typename IFFactoryType::PrecisionType         PrecisionType;
-  typedef VectorImage<TPixel, 2>                        InputImageType;
-
-  typedef typename std::vector<PrecisionType>           ParameterContainerType;
-  typedef typename std::vector<itk::DataObject::Pointer>       ImageContainer;
-  typedef typename MetaImageFunction<PrecisionType>::Pointer     MetaIFPointerType;
-
-  typedef ImageList<ImageType>                             ImageListType;
-  typedef VectorImageToImageListFilter<InputImageType,
-                                                ImageListType>      VIToILFilterType;
-
-  void Create(InputImageType * image,
-              ParameterContainerType param,
-              MetaIFPointerType metaIF,
-              ImageContainer * container)
-  {
-    unsigned int nbBand;
-    typename VIToILFilterType::Pointer filter = VIToILFilterType::New();
-
-    filter->SetInput(image);
-    filter->UpdateOutputInformation();
-    nbBand = filter->GetOutput()->Size();
-
-    for (unsigned int i=0; i<nbBand; ++i)
-      {
-      filter->GetOutput()->GetNthElement(i)->UpdateOutputInformation();
-      m_Factory->Create(filter->GetOutput()->GetNthElement(i), param, metaIF, container);
-      }
-  }
-
-  MultiChannelIFFactory()
-  {
-    m_Factory = IFFactoryType::New();
-  }
-
-  virtual ~MultiChannelIFFactory(){};
-
-private:
-  IFFactoryPointerType   m_Factory;
-
-};
-} //end namespace
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.h b/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.h
deleted file mode 100644
index 01d371d964df9245b8c225f546f4c09429cf1730..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.h
+++ /dev/null
@@ -1,393 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbObjectDetectionClassifier_h
-#define otbObjectDetectionClassifier_h
-
-#include <vector>
-#include <string>
-
-#include "itkImageRegion.h"
-#include "itkFixedArray.h"
-#include "itkVariableLengthVector.h"
-#include "itkListSample.h"
-#include "itkDataObjectDecorator.h"
-#include "itkSimpleDataObjectDecorator.h"
-#include "itkFunctionBase.h"
-
-#include "otbVectorData.h"
-#include "otbMachineLearningModel.h"
-#include "otbPersistentImageFilter.h"
-#include "otbPersistentFilterStreamingDecorator.h"
-
-namespace otb
-{
-
-template <class TFunctionPrecision>
-class DefaultDescriptorType
-{
-public:
-  typedef itk::VariableLengthVector<TFunctionPrecision> Type;
-};
-
-/** \class PersistentObjectDetectionClassifier
- *  \brief [internal] Helper class for the implementation of ObjectDetectionClassifier
- *  with streaming capabilities
- *
- *  This class inherits PersistentImageFilter and provides the Reset/Synthesize functions,
- *  plus the ThreadedGenerateData function implementing the image function evaluation
- *
- *
- * \ingroup OTBObjectDetection
- */
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-class ITK_EXPORT PersistentObjectDetectionClassifier :
-  public PersistentImageFilter<TInputImage, TInputImage>
-{
-public:
-  /** Standard Self typedef */
-  typedef PersistentObjectDetectionClassifier        Self;
-  typedef PersistentImageFilter<TInputImage, TInputImage> Superclass;
-  typedef itk::SmartPointer<Self>                         Pointer;
-  typedef itk::SmartPointer<const Self>                   ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Runtime information support. */
-  itkTypeMacro(PersistentObjectDetectionClassifier, PersistentImageFilter);
-
-  /** Image related typedefs. */
-  typedef TInputImage                      InputImageType;
-  typedef typename TInputImage::Pointer    InputImagePointer;
-  typedef typename TInputImage::RegionType RegionType;
-  typedef typename TInputImage::SizeType   SizeType;
-  typedef typename TInputImage::IndexType  IndexType;
-  typedef typename TInputImage::PixelType  PixelType;
-
-  itkStaticConstMacro(InputImageDimension, unsigned int,
-                      TInputImage::ImageDimension);
-
-  /** Image related typedefs. */
-  itkStaticConstMacro(ImageDimension, unsigned int,
-                      TInputImage::ImageDimension);
-
-  /** Smart Pointer type to a DataObject. */
-  typedef typename itk::DataObject::Pointer DataObjectPointer;
-  typedef itk::ProcessObject::DataObjectPointerArraySizeType DataObjectPointerArraySizeType;
-
-  /** Input VectorData */
-  typedef TOutputVectorData                               VectorDataType;
-  typedef typename VectorDataType::Pointer                VectorDataObjectType;
-  typedef typename VectorDataType::DataNodeType           VectorDataNodeType;
-  typedef typename VectorDataType::DataNodePointerType    VectorDataNodePointerType;
-  typedef typename VectorDataType::DataTreeType           VectorDataTreeType;
-  typedef typename VectorDataType::DataTreePointerType    VectorDataTreePointerType;
-  typedef typename VectorDataNodeType::PointType          VectorDataPointType;
-  typedef typename VectorDataNodeType::LineType           VectorDataLineType;
-  typedef typename VectorDataNodeType::PolygonType        VectorDataPolygonType;
-  typedef itk::PreOrderTreeIterator<VectorDataTreeType>   VectorDataTreeIteratorType;
-
-  /** Function type for descriptors extraction */
-  typedef TFunctionType                                   DescriptorsFunctionType;
-  typedef typename DescriptorsFunctionType::Pointer       DescriptorsFunctionPointerType;
-  typedef typename DescriptorsFunctionType::InputType     DescriptorsFunctionPointType;
-  typedef typename DescriptorsFunctionType::OutputType    DescriptorType;
-  typedef typename DescriptorType::ValueType              DescriptorPrecision;
-
-  typedef itk::ContinuousIndex
-        <typename DescriptorsFunctionPointType::ValueType,
-         itkGetStaticConstMacro(InputImageDimension)>     ContinuousIndexType;
-
-  /** TLabel output */
-  typedef TLabel                                             LabelType;
-  typedef MachineLearningModel<DescriptorPrecision, LabelType> ModelType;
-  typedef typename ModelType::Pointer                     ModelPointerType;
-  typedef typename ModelType::InputSampleType             ModelMeasurementType;
-
-  typedef itk::Statistics::ListSample<DescriptorType>        ListSampleType;
-
-  void AddInput(itk::DataObject * dataObject) override
-  {
-    this->Superclass::AddInput(dataObject);
-  }
-
-  /** learning model used for classification */
-  void SetModel(ModelType * model);
-
-  const ModelType* GetModel(void) const;
-
-  VectorDataType* GetOutputVectorData(void);
-
-  /** The function to evaluate */
-  itkSetObjectMacro(DescriptorsFunction,      DescriptorsFunctionType);
-  itkGetObjectMacro(DescriptorsFunction,      DescriptorsFunctionType);
-  itkGetConstObjectMacro(DescriptorsFunction, DescriptorsFunctionType);
-
-  itkSetMacro( NeighborhoodRadius, unsigned int );
-  itkGetConstReferenceMacro( NeighborhoodRadius, unsigned int );
-
-  itkGetConstMacro(ClassKey, std::string);
-  itkSetMacro(ClassKey, std::string);
-
-  itkGetMacro(NoClassLabel, LabelType);
-  itkSetMacro(NoClassLabel, LabelType);
-
-  /** Set/Get the Shifts for this sample list */
-  itkGetMacro(Shifts, DescriptorType);
-  itkSetMacro(Shifts, DescriptorType);
-  itkGetMacro(Scales, DescriptorType);
-  itkSetMacro(Scales, DescriptorType);
-
-  /** Set/Get the grid step for detection */
-  itkSetMacro(GridStep, unsigned int);
-  itkGetMacro(GridStep, unsigned int);
-
-  /** Make a DataObject of the correct type to be used as the specified
-   * output. */
-  itk::DataObject::Pointer MakeOutput(DataObjectPointerArraySizeType idx) override;
-  using Superclass::MakeOutput;
-
-  void AllocateOutputs() override;
-
-  void GenerateOutputInformation() override;
-
-  void Reset(void) override;
-
-  void Synthetize(void) override;
-
-protected:
-  PersistentObjectDetectionClassifier();
-  ~PersistentObjectDetectionClassifier() override;
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  void GenerateInputRequestedRegion() override;
-
-  void BeforeThreadedGenerateData() override;
-
-  /** Multi-thread version GenerateData. */
-  void  ThreadedGenerateData(const RegionType& outputRegionForThread,
-                             itk::ThreadIdType threadId) override;
-
-private:
-  PersistentObjectDetectionClassifier(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  template <typename TCoordRepType>
-  bool
-  IsInsideWithNeighborhoodRadius(const RegionType& region, const ContinuousIndexType &index) const
-    {
-    typedef typename IndexType::IndexValueType IndexValueType;
-
-    for(unsigned int i=0; i<ImageDimension; ++i)
-      {
-      if( itk::Math::RoundHalfIntegerUp<IndexValueType>(index[i]) < static_cast<IndexValueType>( region.GetIndex(i) ) + m_NeighborhoodRadius  + 1 )
-       //Comment this instruction after itkv4 migration (correct
-       //usage of centered-pixel coordinates)
-       //if( index[i] < static_cast<TCoordRepType>( region.GetIndex(i) ) + m_NeighborhoodRadius )
-        {
-        return false;
-        }
-      // bound is the last valid pixel location
-      const TCoordRepType bound = static_cast<TCoordRepType>(
-          region.GetIndex(i) + region.GetSize(i) - 0.5);
-      //Comment this instruction after itkv4 migration (correct
-      //usage of centered-pixel coordinates)
-      //const TCoordRepType bound = static_cast<TCoordRepType>(
-      //    region.GetIndex(i) + static_cast<IndexValueType>(region.GetSize(i)) - 1);
-      if( index[i] > bound - m_NeighborhoodRadius - 1 )
-        {
-        return false;
-        }
-      }
-    return true;
-    }
-
-  typedef std::pair<DescriptorsFunctionPointType, LabelType> DetectedPoint;
-  typedef std::vector<DetectedPoint>                         PointArray;
-  typedef std::vector<PointArray>                            PointArrayContainer;
-  PointArrayContainer            m_ThreadPointArray;
-
-  DescriptorsFunctionPointerType m_DescriptorsFunction;
-
-  unsigned int   m_NeighborhoodRadius;
-  std::string    m_ClassKey;
-  LabelType      m_NoClassLabel;
-  DescriptorType m_Shifts;
-  DescriptorType m_Scales;
-  DescriptorType m_InvertedScales;
-
-  /** Step of the detection grid */
-  unsigned int m_GridStep;
-
-  /** classification model */
-  ModelPointerType m_Model;
-
-};
-
-
-/** \class ObjectDetectionClassifier
- *  \brief This class detects object in an image, given a ML model and a local descriptors function
- *
- *  Given an image (by SetInputImage()), a ML model (by SetModel) and an local descriptors ImageFunction
- *  (set by SetDescriptorsFunction()), this class computes the local descriptors on a regular grid
- *  over the image, and evaluates the class label of the corresponding sample.
- *  It outputs a vector data with the points for which the descriptors are not classified as "negative",
- *  the negative class label being given by SetNoClassLabel()
- *
- *  This class is streaming capable and multithreaded
- *
- * \ingroup OTBObjectDetection
- */
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionPrecision = double, class TCoordRep = double>
-class ITK_EXPORT ObjectDetectionClassifier :
-    public PersistentFilterStreamingDecorator<
-              PersistentObjectDetectionClassifier< TInputImage,
-                                                   TOutputVectorData,
-                                                   TLabel,
-                                                   itk::FunctionBase< itk::Point<TCoordRep, 2>,
-                                                                      typename DefaultDescriptorType<TFunctionPrecision>::Type> >
-                                                 >
-{
-public:
-    /** Standard Self typedef */
-    typedef ObjectDetectionClassifier           Self;
-    typedef PersistentFilterStreamingDecorator
-              < PersistentObjectDetectionClassifier
-                  <TInputImage,
-                  TOutputVectorData,
-                  TLabel,
-                  itk::FunctionBase< itk::Point<TCoordRep, 2>,
-                                     typename DefaultDescriptorType<TFunctionPrecision>::Type> >
-              >                                 Superclass;
-    typedef itk::SmartPointer<Self>             Pointer;
-    typedef itk::SmartPointer<const Self>       ConstPointer;
-
-    /** Type macro */
-    itkNewMacro(Self);
-
-    /** Creation through object factory macro */
-    itkTypeMacro(ObjectDetectionClassifier, PersistentFilterStreamingDecorator);
-
-    typedef TInputImage                              InputImageType;
-    typedef TOutputVectorData                        OutputVectorDataType;
-    typedef TLabel                                   LabelType;
-    typedef TCoordRep                                CoordRepType;
-    typedef TFunctionPrecision                       FunctionPrecision;
-
-    /** The coordinates used when evaluating function */
-    typedef itk::Point<TCoordRep, 2> PointType;
-
-    /** The return value of the function */
-    typedef typename DefaultDescriptorType<FunctionPrecision>::Type DescriptorType;
-
-    /** The function evaluated on the input image at locations specified by the vector data */
-    typedef itk::FunctionBase<PointType, DescriptorType> DescriptorsFunctionType;
-    typedef typename DescriptorsFunctionType::Pointer    DescriptorsFunctionPointerType;
-
-    typedef typename Superclass::FilterType                           PersistentFilterType;
-
-    typedef typename PersistentFilterType::ModelType                  ModelType;
-    typedef typename PersistentFilterType::ModelPointerType           ModelPointerType;
-
-    /** Input image to extract feature */
-    void SetInputImage(InputImageType* input)
-    {
-      this->GetFilter()->SetInput(input);
-    }
-
-    /** Sample locations as a VectorData of points. The label is in the ClassKey feature */
-    OutputVectorDataType* GetOutputVectorData()
-    {
-      return this->GetFilter()->GetOutputVectorData();
-    }
-
-    void AddInput(itk::DataObject * dataObject) override
-    {
-      this->GetFilter()->AddInput(dataObject);
-    }
-
-    /** The function to evaluate */
-    void SetDescriptorsFunction(DescriptorsFunctionType * input)
-    {
-      this->GetFilter()->SetDescriptorsFunction(input);
-    }
-
-    /** The function to evaluate */
-    DescriptorsFunctionType * GetDescriptorsFunction()
-    {
-      return this->GetFilter()->GetDescriptorsFunction();
-    }
-
-    /** The function to evaluate */
-    void SetModel(ModelType* model)
-    {
-      this->GetFilter()->SetModel(model);
-    }
-
-    /** The classification model */
-    const ModelType* GetModel()
-    {
-      return this->GetFilter()->GetModel();
-    }
-
-    otbSetObjectMemberMacro(Filter, NeighborhoodRadius, unsigned int);
-    otbGetObjectMemberMacro(Filter, NeighborhoodRadius, unsigned int);
-
-    /** Set/Get the name of the field containing the class information */
-    otbGetObjectMemberMacro(Filter, ClassKey, std::string);
-    otbSetObjectMemberMacro(Filter, ClassKey, std::string);
-
-    /** Set/Get the  label of the negative samples */
-    otbGetObjectMemberMacro(Filter, NoClassLabel, LabelType);
-    otbSetObjectMemberMacro(Filter, NoClassLabel, LabelType);
-
-    /** Set/Get the Shifts for this sample list */
-    otbGetObjectMemberMacro(Filter, Shifts, DescriptorType);
-    otbSetObjectMemberMacro(Filter, Shifts, DescriptorType);
-
-    /** Set/Get the Scales for this sample list */
-    otbGetObjectMemberMacro(Filter, Scales, DescriptorType);
-    otbSetObjectMemberMacro(Filter, Scales, DescriptorType);
-
-    /** Set/Get the grid step for detection */
-    otbSetObjectMemberMacro(Filter, GridStep, unsigned int);
-    otbGetObjectMemberMacro(Filter, GridStep, unsigned int);
-
-
-  protected:
-    /** Constructor */
-    ObjectDetectionClassifier();
-
-    /** Destructor */
-    ~ObjectDetectionClassifier() override;
-
-  private:
-    ObjectDetectionClassifier(const Self &) = delete;
-    void operator =(const Self&) = delete;
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbObjectDetectionClassifier.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.hxx b/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.hxx
deleted file mode 100644
index 97781629e68ef470e1f35b8aeac6ccb1d273f1dd..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbObjectDetectionClassifier.hxx
+++ /dev/null
@@ -1,314 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbObjectDetectionClassifier_hxx
-#define otbObjectDetectionClassifier_hxx
-
-#include "otbObjectDetectionClassifier.h"
-
-#include "itkContinuousIndex.h"
-
-namespace otb
-{
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::PersistentObjectDetectionClassifier()
-  : m_NeighborhoodRadius(0),
-    m_ClassKey("Class"),
-    m_NoClassLabel(0),
-    m_GridStep(10)
-{
-  this->SetNumberOfRequiredInputs(1);
-
-  // Have 2 outputs : the image created by Superclass, a vector data with points
-  this->SetNumberOfRequiredOutputs(3);
-  this->itk::ProcessObject::SetNthOutput(1, this->MakeOutput(1).GetPointer());
-  this->itk::ProcessObject::SetNthOutput(2, this->MakeOutput(2).GetPointer());
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::~PersistentObjectDetectionClassifier()
-{
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::AllocateOutputs()
-{
-  // This is commented to prevent the streaming of the whole image for the first stream strip
-  // It shall not cause any problem because the output image of this filter is not intended to be used.
-  //InputImagePointer image = const_cast< TInputImage * >( this->GetInput() );
-  //this->GraftOutput( image );
-  // Nothing that needs to be allocated for the remaining outputs
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::GenerateOutputInformation()
-{
-  Superclass::GenerateOutputInformation();
-  if (this->GetInput())
-    {
-    this->GetOutput()->CopyInformation(this->GetInput());
-    this->GetOutput()->SetLargestPossibleRegion(this->GetInput()->GetLargestPossibleRegion());
-
-    if (this->GetOutput()->GetRequestedRegion().GetNumberOfPixels() == 0)
-      {
-      this->GetOutput()->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion());
-      }
-    }
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::SetModel(ModelType* model)
-{
-  if (model != m_Model)
-    {
-    m_Model = model;
-    this->Modified();
-    }
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-const typename PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>::ModelType*
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::GetModel(void) const
-{
-  return m_Model;
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-typename PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>::VectorDataType*
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::GetOutputVectorData()
-{
-  return static_cast<VectorDataType*>(this->itk::ProcessObject::GetOutput(1));
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-itk::DataObject::Pointer
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::MakeOutput(DataObjectPointerArraySizeType idx)
-{
-  itk::DataObject::Pointer output;
-  switch (idx)
-    {
-    case 0:
-      output = static_cast<itk::DataObject*>(InputImageType::New().GetPointer());
-      break;
-    case 1:
-      {
-      output = static_cast<itk::DataObject*>(VectorDataType::New().GetPointer());
-      break;
-      }
-    default:
-      output = static_cast<itk::DataObject*>(InputImageType::New().GetPointer());
-      break;
-    }
-  return output;
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::Reset()
-{
-  m_ThreadPointArray = PointArrayContainer(this->GetNumberOfThreads());
-
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::Synthetize()
-{
-  // merge all points in a single vector data
-  //std::copy(m_ThreadPointArray[0].begin(), m_ThreadPointArray[0].end(),
-  //std::ostream_iterator<DescriptorsFunctionPointType>(std::cout, "\n") );
-
-  VectorDataType* vdata = this->GetOutputVectorData();
-
-  // Retrieving root node
-  VectorDataNodePointerType root = vdata->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  VectorDataNodePointerType document = VectorDataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  VectorDataNodePointerType folder = VectorDataNodeType::New();
-  folder->SetNodeType(otb::FOLDER);
-  // Adding the layer to the data tree
-  vdata->GetDataTree()->Add(document, root);
-  vdata->GetDataTree()->Add(folder, document);
-
-  for (itk::ThreadIdType threadId = 0; threadId < m_ThreadPointArray.size(); ++threadId)
-    {
-    PointArray& pointArray = m_ThreadPointArray[threadId];
-    typename PointArray::const_iterator it = pointArray.begin();
-    typename PointArray::const_iterator end = pointArray.end();
-
-    for (; it != end; ++it)
-      {
-      VectorDataNodePointerType currentGeometry = VectorDataNodeType::New();
-      currentGeometry->SetNodeId("FEATURE_POINT");
-      currentGeometry->SetNodeType(otb::FEATURE_POINT);
-      VectorDataPointType p;
-      p[0] = it->first[0];
-      p[1] = it->first[1];
-      currentGeometry->SetPoint(p);
-      currentGeometry->SetFieldAsInt(m_ClassKey, it->second);
-      vdata->GetDataTree()->Add(currentGeometry, folder);
-      }
-    }
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::GenerateInputRequestedRegion()
-{
-  Superclass::GenerateInputRequestedRegion();
-
-  // get pointers to the input and output
-  typename Superclass::InputImagePointer inputPtr =
-    const_cast< TInputImage * >( this->GetInput() );
-  typename Superclass::OutputImagePointer outputPtr = this->GetOutput();
-
-  if ( !inputPtr || !outputPtr )
-    {
-    return;
-    }
-
-  // get a copy of the input requested region (should equal the output
-  // requested region)
-  typename TInputImage::RegionType inputRequestedRegion;
-  inputRequestedRegion = inputPtr->GetRequestedRegion();
-
-  // pad the input requested region by the operator radius
-  inputRequestedRegion.PadByRadius( m_NeighborhoodRadius + 1 );
-
-  // crop the input requested region at the input's largest possible region
-  if ( inputRequestedRegion.Crop(inputPtr->GetLargestPossibleRegion()) )
-    {
-    inputPtr->SetRequestedRegion( inputRequestedRegion );
-    return;
-    }
-  else
-    {
-    // Couldn't crop the region (requested region is outside the largest
-    // possible region).  Throw an exception.
-
-    // store what we tried to request (prior to trying to crop)
-    inputPtr->SetRequestedRegion( inputRequestedRegion );
-    }
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::BeforeThreadedGenerateData()
-{
-  // Compute the 1/(sigma) vector
-  m_InvertedScales = m_Scales;
-  for(unsigned int idx = 0; idx < m_Scales.Size(); ++idx)
-    {
-    if(m_Scales[idx]-1e-10 < 0.)
-      m_InvertedScales[idx] = 0.;
-    else
-      m_InvertedScales[idx] = 1 / m_Scales[idx];
-    }
-
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionType>
-void
-PersistentObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionType>
-::ThreadedGenerateData(const RegionType& outputRegionForThread,
-                       itk::ThreadIdType threadId)
-{
-  InputImageType* input = static_cast<InputImageType*>(this->itk::ProcessObject::GetInput(0));
-  const ModelType*   model = this->GetModel();
-
-  IndexType begin = outputRegionForThread.GetIndex();
-  IndexType end = begin;
-  end[0] += outputRegionForThread.GetSize(0);
-  end[1] += outputRegionForThread.GetSize(1);
-
-  IndexType current = begin;
-  for (; current[1] != end[1]; current[1]++)
-    {
-    if (current[1] % m_GridStep == 0)
-      {
-      for(current[0] = begin[0]; current[0] != end[0]; current[0]++)
-        {
-        if (current[0] % m_GridStep == 0)
-          {
-          DescriptorsFunctionPointType point;
-          input->TransformIndexToPhysicalPoint(current, point);
-
-          DescriptorType descriptor = m_DescriptorsFunction->Evaluate(point);
-          ModelMeasurementType modelMeasurement(descriptor.GetSize());
-          for (unsigned int i = 0; i < descriptor.GetSize(); ++i)
-            {
-            modelMeasurement[i] = (descriptor[i] - m_Shifts[i]) * m_InvertedScales[i];
-            }
-          LabelType label = (model->Predict(modelMeasurement))[0];
-
-          if (label != m_NoClassLabel)
-            {
-            m_ThreadPointArray[threadId].push_back(std::make_pair(point, label));
-            }
-          }
-        }
-      }
-    }
-}
-
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionPrecision, class TCoordRep>
-ObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionPrecision, TCoordRep>
-::ObjectDetectionClassifier()
-{
-
-}
-
-template <class TInputImage, class TOutputVectorData, class TLabel, class TFunctionPrecision, class TCoordRep>
-ObjectDetectionClassifier<TInputImage, TOutputVectorData, TLabel, TFunctionPrecision, TCoordRep>
-::~ObjectDetectionClassifier()
-{
-
-}
-
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h b/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h
deleted file mode 100644
index a40dfbed7341939bc664d29410bebf526de9d640..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRadiometricMomentsIFFactory_h
-#define otbRadiometricMomentsIFFactory_h
-
-#include "itkLightObject.h"
-
-#include "otbMetaImageFunction.h"
-#include "itkDataObject.h"
-#include "otbImage.h"
-#include "otbImageFunctionAdaptor.h"
-#include "otbRadiometricMomentsImageFunction.h"
-
-
-namespace otb
-{
-/** \class RadiometricMomentsIFFactory
- *  \brief add a RadiometricMoments image function to a
- *  MetaImageFunction
- *
- *  This class aims at adding an adapted
- *  RadiometricMomentsImageFunction to an existing MetaImageFunction
- *  through the method Create.
- *
- *
- * \ingroup OTBObjectDetection
- */
-
-template <class TImageType, class TCoordRep = double, class TPrecision = double>
-class ITK_EXPORT RadiometricMomentsIFFactory :
-    public itk::LightObject
-{
-public:
-  /** Standard class typedefs. */
-  typedef RadiometricMomentsIFFactory                                    Self;
-  typedef itk::LightObject                                                Superclass;
-  typedef itk::SmartPointer<Self>                                         Pointer;
-  typedef itk::SmartPointer<const Self>                                   ConstPointer;
-
-  // New macro
-  itkNewMacro(Self);
-
-  // RTTI typeinfo
-  itkTypeMacro(RadiometricMomentsIFFactory, itk::LightObject);
-
-  // Input and output typedef
-  typedef TImageType              InputImageType;
-  typedef TCoordRep               CoordRepType;
-  typedef TPrecision              PrecisionType;
-
-  // Other typedef
-  typedef typename MetaImageFunction<TPrecision>::Pointer  MetaImageFunctionPointerType;
-  typedef typename std::vector<itk::DataObject::Pointer>   DataObjectContainerType;
-  typedef typename std::vector<PrecisionType>              ParamContainerType;
-  typedef RadiometricMomentsImageFunction<InputImageType, CoordRepType>
-                                                           RadiometricMomentsIF;
-  typedef ImageFunctionAdaptor<RadiometricMomentsIF, TPrecision>
-                                                           AdaptedRadiometricMomentsIF;
-
-  void Create(InputImageType * image,
-              ParamContainerType param,
-              MetaImageFunctionPointerType metaIF,
-              DataObjectContainerType * container);
-
-protected:
-  RadiometricMomentsIFFactory(){}
-  ~RadiometricMomentsIFFactory() override{}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  RadiometricMomentsIFFactory(const Self& ) = delete;
-  void operator=(const Self& ) = delete;
-
-};
-
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRadiometricMomentsIFFactory.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.hxx b/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.hxx
deleted file mode 100644
index 18f0bc730a5b998d856e8052d63a289075c1e2d9..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbRadiometricMomentsIFFactory.hxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRadiometricMomentsIFFactory_hxx
-#define otbRadiometricMomentsIFFactory_hxx
-
-#include "otbRadiometricMomentsIFFactory.h"
-
-
-namespace otb
-{
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-RadiometricMomentsIFFactory<TImageType, TCoordRep, TPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template <class TImageType, class TCoordRep, class TPrecision>
-void
-RadiometricMomentsIFFactory<TImageType, TCoordRep, TPrecision>
-::Create(InputImageType * image,
-         ParamContainerType param,
-         MetaImageFunctionPointerType metaIF,
-         DataObjectContainerType * container)
-{
-  typename AdaptedRadiometricMomentsIF::Pointer function = AdaptedRadiometricMomentsIF::New();
-
-  function->SetInputImage(image);
-  function->GetInternalImageFunction()->SetNeighborhoodRadius(param[0]);
-
-  metaIF->AddFunction(function);
-  container->push_back(image);
-}
-
-}//end namespace
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h b/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h
deleted file mode 100644
index 4ff7757898791d4a8a4324f3ecbce7f1429868d4..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbStandardMetaImageFunctionBuilder_h
-#define otbStandardMetaImageFunctionBuilder_h
-
-
-#include "itkVariableLengthVector.h"
-
-#include "otbMultiChannelIFFactory.h"
-
-#include "otbLocalHistogramIFFactory.h"
-#include "otbFlusserMomentsIFFactory.h"
-#include "otbRadiometricMomentsIFFactory.h"
-#include "otbFourierMellinDescriptorsIFFactory.h"
-#include "otbHaralickTexturesIFFactory.h"
-
-
-namespace otb
-{
-/** \class StandardMetaImageFunctionBuilder
- *  \brief Build a Standard MetaImageFunction
- *
- *  The StandardMetaImageFunctionBuilder class allows calling multiple
- *  ImageFunctions:
- *    - otbRadiometricMomentsImageFunction
- *    - otbFlusserMomentsImageFunction
- *    - otbFourierMellinDescriptorsImageFunction
- *    - otbLocalHistogramImageFunction
- *  On Multiple Images (and VectorImages Processed as ImageList).
- *
- *  Each ImageFunction can be parametrized. The only thing to do to
- *  complete the MetaImageFunction is to AddImages.
- *
- *
- *
- *
- * \ingroup OTBObjectDetection
- */
-
-template <class TPrecision = double, class TCoordRep = double>
-class ITK_EXPORT StandardMetaImageFunctionBuilder :
-    public itk::LightObject
-{
-public:
-  /** Standard class typedefs. */
-  typedef StandardMetaImageFunctionBuilder                                Self;
-  typedef itk::LightObject                                                Superclass;
-  typedef itk::SmartPointer<Self>                                         Pointer;
-  typedef itk::SmartPointer<const Self>                                   ConstPointer;
-
-  // New macro
-  itkNewMacro(Self);
-
-  // RTTI typeinfo
-  itkTypeMacro(StandardMetaImageFunctionBuilder, itk::LightObject);
-
-  // Input and output typedef
-  typedef TPrecision                                                ValueType;
-  typedef TCoordRep                                                 CoordRepType;
-
-  // Other typedef
-  typedef MetaImageFunction<TPrecision, CoordRepType>               MetaImageFunctionType;
-  typedef typename MetaImageFunctionType::Pointer                   MetaImageFunctionPointerType;
-  typedef typename std::vector<itk::DataObject::Pointer>            DataObjectContainerType;
-  typedef typename std::vector<ValueType>                           ParamContainerType;
-
-  //Accessors
-  unsigned int GetNeighborhoodRadius();
-  void SetNeighborhoodRadius(unsigned int radius);
-
-  ParamContainerType GetFlusserMomentsIFParameters();
-  void SetFlusserMomentsIFParameters(ParamContainerType Param);
-
-  ParamContainerType GetLocalHistogramIFParameters();
-  void SetLocalHistogramIFParameters(ParamContainerType Param);
-
-  ParamContainerType GetRadiometricMomentsIFParameters();
-  void SetRadiometricMomentsIFParameters(ParamContainerType Param);
-
-  ParamContainerType GetFourierMellinDescriptorsIFParameters();
-  void SetFourierMellinDescriptorsIFParameters(ParamContainerType Param);
-
-  ParamContainerType GetHaralickTexturesIFParameters();
-  void SetHaralickTexturesIFParameters(ParamContainerType Param);
-
-  MetaImageFunctionPointerType GetMetaImageFunction();
-  DataObjectContainerType GetDataObjectContainer();
-
-  // Adding Image
-  template <class TInputImage>
-  void AddImage(TInputImage * image)
-  {
-    typedef TInputImage                                   InputImageType;
-    typedef typename InputImageType::InternalPixelType    InternalPixelType;
-    typedef Image<InternalPixelType, 2>                   ImageType;
-
-    //Mono-Channel Factories
-    typedef LocalHistogramIFFactory<ImageType,
-      CoordRepType, TPrecision>               LocalHistogramIFFactoryType;
-    typedef FlusserMomentsIFFactory<ImageType,
-      CoordRepType, TPrecision>               FlusserMomentsIFFactoryType;
-    typedef RadiometricMomentsIFFactory<ImageType,
-      CoordRepType, TPrecision>               RadiometricMomentsIFFactoryType;
-    typedef FourierMellinDescriptorsIFFactory<ImageType,
-      CoordRepType, TPrecision>               FourierMellinDescriptorsIFFactoryType;
-    typedef HaralickTexturesIFFactory<ImageType,
-      CoordRepType, TPrecision>               HaralickTexturesIFFactoryType;
-
-    //Multi-Channel Factories
-    typedef MultiChannelIFFactory<LocalHistogramIFFactoryType, InputImageType>
-                                                            MCLocalHistogramIFFactoryType;
-    typedef MultiChannelIFFactory<FlusserMomentsIFFactoryType, InputImageType>
-                                                            MCFlusserMomentsIFFactoryType;
-    typedef MultiChannelIFFactory<RadiometricMomentsIFFactoryType, InputImageType>
-                                                            MCRadiometricMomentsIFFactoryType;
-    typedef MultiChannelIFFactory<FourierMellinDescriptorsIFFactoryType, InputImageType>
-                                                            MCFourierMellinDescriptorsIFFactoryType;
-    typedef MultiChannelIFFactory<HaralickTexturesIFFactoryType, InputImageType>
-                                                            MCHaralickTexturesIFFactoryType;
-
-    MCLocalHistogramIFFactoryType MCLocalHistogramIFFactory;
-    MCFlusserMomentsIFFactoryType MCFlusserMomentsIFFactory;
-    MCRadiometricMomentsIFFactoryType MCRadiometricMomentsIFFactory;
-    MCFourierMellinDescriptorsIFFactoryType MCFourierMellinDescriptorsIFFactory;
-    MCHaralickTexturesIFFactoryType MCHaralickTexturesIFFactory;
-
-
-    MCRadiometricMomentsIFFactory.Create(image,
-                                         this->GetRadiometricMomentsIFParameters(),
-                                         m_MetaImageFunction,
-                                         &m_DataObjectContainer);
-    MCFlusserMomentsIFFactory.Create(image,
-                                     this->GetFlusserMomentsIFParameters(),
-                                     m_MetaImageFunction,
-                                     &m_DataObjectContainer);
-
-    MCFourierMellinDescriptorsIFFactory.Create(image,
-                                               this->GetFourierMellinDescriptorsIFParameters(),
-                                               m_MetaImageFunction,
-                                               &m_DataObjectContainer);
-
-    //MCLocalHistogramIFFactory.Create(image,
-    //                                 m_LocalHistogramParam,
-    //                                 m_MetaImageFunction,
-    //                                 &m_DataObjectContainer);
-
-    //MCHaralickTexturesIFFactory.Create(image,
-    //                                   m_HaralickTexturesParam,
-    //                                   m_MetaImageFunction,
-    //                                   &m_DataObjectContainer);
-  }
-
-protected:
-  StandardMetaImageFunctionBuilder();
-  ~StandardMetaImageFunctionBuilder() override;
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  StandardMetaImageFunctionBuilder(const Self& ) = delete;
-  void operator=(const Self& ) = delete;
-
-  MetaImageFunctionPointerType    m_MetaImageFunction;
-  DataObjectContainerType         m_DataObjectContainer;
-  unsigned int                    m_NeighborhoodRadius;
-  ParamContainerType              m_FlusserMomentsParam;              //[NeighborhoodRadius]
-  ParamContainerType              m_RadiometricMomentsParam;          //[NeighborhoodRadius]
-  ParamContainerType              m_LocalHistogramParam;              //[NeighborhoodRadius; nbBins; minHistogram; maxHistogram]
-  ParamContainerType              m_FourierMellinDescriptorsParam;    //[NeighborhoodRadius; PMax; QMax]
-  ParamContainerType              m_HaralickTexturesParam;            //[NeighborhoodRadius; ImageMin; ImageMax; NbBinPerAxis; Offset]
-
-};
-
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbStandardMetaImageFunctionBuilder.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.hxx b/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.hxx
deleted file mode 100644
index 27313af0c10e0cc27a1b56e0915ba747c374a79f..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/include/otbStandardMetaImageFunctionBuilder.hxx
+++ /dev/null
@@ -1,219 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbStandardMetaImageFunctionBuilder_hxx
-#define otbStandardMetaImageFunctionBuilder_hxx
-
-#include "otbStandardMetaImageFunctionBuilder.h"
-
-
-namespace otb
-{
-template <class TPrecision, class TCoordRep>
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::StandardMetaImageFunctionBuilder()
-{
-  m_NeighborhoodRadius = 4;
-
-  m_MetaImageFunction = MetaImageFunctionType::New();
-
-  m_FlusserMomentsParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius()));
-
-  m_RadiometricMomentsParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius()));
-
-  m_LocalHistogramParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius()));
-  m_LocalHistogramParam.push_back(16);
-  m_LocalHistogramParam.push_back(0);
-  m_LocalHistogramParam.push_back(4096);
-
-  m_FourierMellinDescriptorsParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius()));
-  m_FourierMellinDescriptorsParam.push_back(3);
-  m_FourierMellinDescriptorsParam.push_back(3);
-
-  m_HaralickTexturesParam.push_back(static_cast<ValueType>(this->GetNeighborhoodRadius()));
-  m_HaralickTexturesParam.push_back(0);
-  m_HaralickTexturesParam.push_back(4096);
-  m_HaralickTexturesParam.push_back(30);
-  m_HaralickTexturesParam.push_back(2);
-}
-
-template <class TPrecision, class TCoordRep>
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::~StandardMetaImageFunctionBuilder()
-{
-
-}
-
-template <class TPrecision, class TCoordRep>
-void
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template <class TPrecision, class TCoordRep>
-unsigned int
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::GetNeighborhoodRadius()
-{
-  return m_NeighborhoodRadius;
-}
-
-template <class TPrecision, class TCoordRep>
-void
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::SetNeighborhoodRadius(unsigned int radius)
-{
-  if (radius>0)
-    {
-    m_NeighborhoodRadius = radius;
-
-    m_FlusserMomentsParam[0]           = static_cast<ValueType>(radius);
-    m_RadiometricMomentsParam[0]       = static_cast<ValueType>(radius);
-    m_LocalHistogramParam[0]           = static_cast<ValueType>(radius);
-    m_FourierMellinDescriptorsParam[0] = static_cast<ValueType>(radius);
-    m_HaralickTexturesParam[0]         = static_cast<ValueType>(radius);
-    }
-}
-
-template <class TPrecision, class TCoordRep>
-typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::GetFlusserMomentsIFParameters()
-{
-  return m_FlusserMomentsParam;
-}
-
-template <class TPrecision, class TCoordRep>
-void
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::SetFlusserMomentsIFParameters(ParamContainerType Param)
-{
-  if (Param.size()==1)
-    {
-    m_FlusserMomentsParam[0] = Param[0];
-    }
-}
-
-
-template <class TPrecision, class TCoordRep>
-typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::GetLocalHistogramIFParameters()
-{
-  return m_LocalHistogramParam;
-}
-
-template <class TPrecision, class TCoordRep>
-void
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::SetLocalHistogramIFParameters(ParamContainerType Param)
-{
-  if (Param.size()==4)
-    {
-    m_LocalHistogramParam[0] = Param[0];
-    m_LocalHistogramParam[1] = Param[1];
-    m_LocalHistogramParam[2] = Param[2];
-    m_LocalHistogramParam[3] = Param[3];
-    }
-}
-
-template <class TPrecision, class TCoordRep>
-typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::GetRadiometricMomentsIFParameters()
-{
-  return m_RadiometricMomentsParam;
-}
-
-template <class TPrecision, class TCoordRep>
-void
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::SetRadiometricMomentsIFParameters(ParamContainerType Param)
-{
-  if (Param.size()==1)
-    {
-    m_RadiometricMomentsParam[0] = Param[0];
-    }
-}
-
-template <class TPrecision, class TCoordRep>
-typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::GetFourierMellinDescriptorsIFParameters()
-{
-  return m_FourierMellinDescriptorsParam;
-}
-
-template <class TPrecision, class TCoordRep>
-void
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::SetFourierMellinDescriptorsIFParameters(ParamContainerType Param)
-{
-  if (Param.size()==3)
-    {
-    m_FourierMellinDescriptorsParam[0] = Param[0];
-    m_FourierMellinDescriptorsParam[1] = Param[1];
-    m_FourierMellinDescriptorsParam[2] = Param[2];
-    }
-}
-
-template <class TPrecision, class TCoordRep>
-typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::ParamContainerType
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::GetHaralickTexturesIFParameters()
-{
-  return m_HaralickTexturesParam;
-}
-
-template <class TPrecision, class TCoordRep>
-void
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::SetHaralickTexturesIFParameters(ParamContainerType Param)
-{
-  if (Param.size()==5)
-    {
-    m_HaralickTexturesParam[0] = Param[0];
-    m_HaralickTexturesParam[1] = Param[1];
-    m_HaralickTexturesParam[2] = Param[2];
-    m_HaralickTexturesParam[3] = Param[3];
-    m_HaralickTexturesParam[4] = Param[4];
-    }
-}
-
-template <class TPrecision, class TCoordRep>
-typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::MetaImageFunctionPointerType
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::GetMetaImageFunction()
-{
-  return  m_MetaImageFunction;
-}
-
-template <class TPrecision, class TCoordRep>
-typename StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>::DataObjectContainerType
-StandardMetaImageFunctionBuilder<TPrecision, TCoordRep>
-::GetDataObjectContainer()
-{
-  return  m_DataObjectContainer;
-}
-
-}//end namespace
-#endif
diff --git a/Modules/Detection/ObjectDetection/otb-module.cmake b/Modules/Detection/ObjectDetection/otb-module.cmake
deleted file mode 100644
index 5033f185dab2dc5e272c9fa280517f193a8cacfe..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/otb-module.cmake
+++ /dev/null
@@ -1,46 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set(DOCUMENTATION "This module contains useful classes for object detection.")
-
-otb_module(OTBObjectDetection
-  DEPENDS
-    OTBCommon
-    OTBDescriptors
-    OTBITK
-    OTBImageBase
-    OTBMoments
-    OTBObjectList
-    OTBStatistics
-    OTBStreaming
-    OTBSupervised
-    OTBTextures
-    OTBVectorDataBase
-
-  TEST_DEPENDS
-    OTBIOXML
-    OTBImageIO
-    OTBLibSVM
-    OTBTestKernel
-    OTBVectorDataIO
-
-  DESCRIPTION
-    "${DOCUMENTATION}"
-)
diff --git a/Modules/Detection/ObjectDetection/test/CMakeLists.txt b/Modules/Detection/ObjectDetection/test/CMakeLists.txt
deleted file mode 100644
index 14989ab892c009f4f2ddbc0a61ac0d650ad74509..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/test/CMakeLists.txt
+++ /dev/null
@@ -1,117 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-otb_module_test()
-
-set(OTBObjectDetectionTests
-otbObjectDetectionTestDriver.cxx
-otbLabeledSampleLocalizationGenerator.cxx
-otbStandardMetaImageFunctionBuilder.cxx
-otbDescriptorsListSampleGenerator.cxx
-otbObjectDetectionClassifier.cxx
-)
-
-add_executable(otbObjectDetectionTestDriver ${OTBObjectDetectionTests})
-target_link_libraries(otbObjectDetectionTestDriver ${OTBObjectDetection-Test_LIBRARIES})
-otb_module_target_label(otbObjectDetectionTestDriver)
-
-# Tests Declaration
-
-
-otb_add_test(NAME odTvLabeledSampleLocalizationGenerator COMMAND otbObjectDetectionTestDriver
-  --compare-ogr ${NOTOL}
-  ${BASELINE_FILES}/TvLabeledSampleLocalizationGeneratorOutput.shp
-  ${TEMP}/TvLabeledSampleLocalizationGeneratorOutput.shp
-  otbLabeledSampleLocalizationGenerator
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01LabeledPoints.shp
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Polygons.shp
-  ${TEMP}/TvLabeledSampleLocalizationGeneratorOutput.shp
-  )
-
-
-otb_add_test(NAME odTvStandardMetaImageFunctionBuilder COMMAND otbObjectDetectionTestDriver
-  otbStandardMetaImageFunctionBuilder
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01.tif
-  )
-
-otb_add_test(NAME odTvDescriptorsListSampleGeneratorStreaming COMMAND otbObjectDetectionTestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt
-  ${TEMP}/TvDescriptorsListSampleGeneratorStreamingOutput.txt
-  otbDescriptorsListSampleGenerator
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_amplitude.tif
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Samples.shp
-  ${TEMP}/TvDescriptorsListSampleGeneratorStreamingOutput.txt
-  50 # streaming
-  5 # neighborhood radius
-  )
-
-#otb_add_test(NAME odTvDescriptorsSVMModelCreation COMMAND otbObjectDetectionTestDriver
-  #--compare-ascii ${NOTOL}
-  #${BASELINE_FILES}/TvDescriptorsSVMModelCreation.svm
-  #${TEMP}/TvDescriptorsSVMModelCreation.svm
-  #otbDescriptorsSVMModelCreation
-  #${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_amplitude.tif
-  #${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Samples.shp
-  #${INPUTDATA}/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml
-  #${TEMP}/TvDescriptorsSVMModelCreation.svm
-  #0 # streaming
-  #5 # neighborhood radius
-  #)
-
-otb_add_test(NAME odTvDescriptorsListSampleGeneratorNoStreaming COMMAND otbObjectDetectionTestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt
-  ${TEMP}/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt
-  otbDescriptorsListSampleGenerator
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_amplitude.tif
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Samples.shp
-  ${TEMP}/TvDescriptorsListSampleGeneratorNoStreamingOutput.txt
-  0 # streaming
-  5 # neighborhood radius
-  )
-
-
-
-otb_add_test(NAME odTvObjectDetectionClassifierStreaming COMMAND otbObjectDetectionTestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/TvObjectDetectionClassifierOutput.txt
-  ${TEMP}/TvObjectDetectionClassifierOutputStreaming.txt
-  otbObjectDetectionClassifier
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif
-  ${INPUTDATA}/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml
-  ${BASELINE_FILES}/TvDescriptorsSVMModelCreation.svm
-  ${TEMP}/TvObjectDetectionClassifierOutputStreaming.txt
-  50 # streaming
-  5 # neighborhood radius
-  )
-
-otb_add_test(NAME odTvObjectDetectionClassifier COMMAND otbObjectDetectionTestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/TvObjectDetectionClassifierOutput.txt
-  ${TEMP}/TvObjectDetectionClassifierOutput.txt
-  otbObjectDetectionClassifier
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01_extract_amplitude.tif
-  ${INPUTDATA}/ObjectReco/Boats/FeatureStats_RadiometricMoments_amplitude.xml
-  ${BASELINE_FILES}/TvDescriptorsSVMModelCreation.svm
-  ${TEMP}/TvObjectDetectionClassifierOutput.txt
-  0 # streaming
-  5 # neighborhood radius
-  )
diff --git a/Modules/Detection/ObjectDetection/test/otbDescriptorsListSampleGenerator.cxx b/Modules/Detection/ObjectDetection/test/otbDescriptorsListSampleGenerator.cxx
deleted file mode 100644
index ac0e7c21549ee6a301db2fddd7a745d51b00ce38..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/test/otbDescriptorsListSampleGenerator.cxx
+++ /dev/null
@@ -1,234 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <iterator>
-
-#include "otbImage.h"
-#include "otbRadiometricMomentsImageFunction.h"
-#include "otbDescriptorsListSampleGenerator.h"
-#include "otbImageFileReader.h"
-#include "otbVectorDataFileReader.h"
-#include "otbImageFunctionAdaptor.h"
-
-#include "otbStatisticsXMLFileReader.h"
-#include "otbShiftScaleSampleListFilter.h"
-#include "otbLibSVMMachineLearningModel.h"
-
-const unsigned int Dimension = 2;
-typedef int        LabelType;
-typedef double     PixelType;
-typedef double     FunctionPrecisionType;
-typedef double     CoordRepType;
-
-typedef otb::Image<PixelType, Dimension>                               ImageType;
-typedef otb::VectorData<>                                              VectorDataType;
-typedef otb::RadiometricMomentsImageFunction<ImageType, CoordRepType>  FunctionType;
-typedef otb::ImageFunctionAdaptor<FunctionType, FunctionPrecisionType> AdaptedFunctionType;
-
-typedef itk::VariableLengthVector<FunctionPrecisionType> SampleType;
-typedef itk::Statistics::ListSample<SampleType>          ListSampleType;
-typedef itk::FixedArray<LabelType, 1>                    LabelSampleType;
-typedef itk::Statistics::ListSample<LabelSampleType>     LabelListSampleType;
-
-typedef otb::DescriptorsListSampleGenerator
-           < ImageType,
-             VectorDataType,
-             ListSampleType,
-             LabelType,
-             FunctionPrecisionType,
-             CoordRepType > DescriptorsListSampleGeneratorType;
-
-typedef otb::ImageFileReader<ImageType>           ImageReaderType;
-typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType;
-
-typedef otb::StatisticsXMLFileReader<SampleType>   StatisticsReader;
-typedef otb::Statistics::ShiftScaleSampleListFilter<ListSampleType> ShiftScaleListSampleFilterType;
-
-typedef otb::LibSVMMachineLearningModel<FunctionPrecisionType, LabelType> SVMType;
-
-typedef FunctionType::PointType PointType;
-typedef DescriptorsListSampleGeneratorType::SamplesPositionType SamplesPositionType;
-
-struct SampleEntry
-{
-  PointType  position;
-  LabelType  label;
-  SampleType measurement;
-};
-
-struct CompareSampleEntry
-{
-  bool operator () (SampleEntry p, SampleEntry q)
-  {
-    // order with the y axis position
-    if (p.position[1] < q.position[1])
-      return true;
-    if (p.position[1] > q.position[1])
-      return false;
-
-    // If one the same line,
-    // order with the x axis position
-    if (p.position[0] < q.position[0])
-      return true;
-
-    return false;
-  }
-};
-
-std::ostream &operator<<(std::ostream &stream, SampleEntry entry)
-{
-  stream << "---" << std::endl
-         << "Label        : " << entry.label << std::endl
-         << "Position     : " << entry.position << std::endl
-         << "Measurements : " << entry.measurement;
-  return stream;
-}
-
-
-int otbDescriptorsListSampleGenerator(int argc, char* argv[])
-{
-  if (argc != 6)
-    {
-    std::cerr << "Wrong number of arguments" << std::endl;
-    return EXIT_FAILURE;
-    }
-
-  const char* inputImageFileName = argv[1];
-  const char* inputSamplesLocation = argv[2];
-  const char* outputFileName = argv[3];
-  int streaming = atoi(argv[4]);
-  int neighborhood = atoi(argv[5]);
-
-  ImageReaderType::Pointer imageReader = ImageReaderType::New();
-  imageReader->SetFileName(inputImageFileName);
-
-  VectorDataReaderType::Pointer vectorDataReader = VectorDataReaderType::New();
-  vectorDataReader->SetFileName(inputSamplesLocation);
-
-  //imageReader->Update();
-  //vectorDataReader->Update();
-
-  AdaptedFunctionType::Pointer descriptorsFunction = AdaptedFunctionType::New();
-  descriptorsFunction->SetInputImage(imageReader->GetOutput());
-  descriptorsFunction->GetInternalImageFunction()->SetNeighborhoodRadius(5);
-
-  DescriptorsListSampleGeneratorType::Pointer descriptorsGenerator = DescriptorsListSampleGeneratorType::New();
-  descriptorsGenerator->SetInputImage(imageReader->GetOutput());
-  descriptorsGenerator->SetSamplesLocations(vectorDataReader->GetOutput());
-  descriptorsGenerator->SetDescriptorsFunction(descriptorsFunction.GetPointer());
-  descriptorsGenerator->SetNeighborhoodRadius(neighborhood);
-  descriptorsGenerator->GetStreamer()->SetNumberOfLinesStrippedStreaming( streaming );
-  descriptorsGenerator->Update();
-
-  ListSampleType::Pointer      samples = descriptorsGenerator->GetListSample();
-  LabelListSampleType::Pointer labels  = descriptorsGenerator->GetLabelListSample();
-  SamplesPositionType&         positions = descriptorsGenerator->GetSamplesPositions();
-
-  ListSampleType::Iterator sampleIt = samples->Begin();
-  LabelListSampleType::Iterator labelIt = labels->Begin();
-  SamplesPositionType::const_iterator posIt = positions.begin();
-
-  ListSampleType::Iterator sampleEnd = samples->End();
-  LabelListSampleType::Iterator labelEnd = labels->End();
-  SamplesPositionType::const_iterator posEnd = positions.end();
-
-  std::vector<SampleEntry> entries;
-
-  while (sampleIt != sampleEnd && labelIt != labelEnd && posIt != posEnd)
-    {
-    SampleEntry entry;
-    entry.position = *posIt;
-    entry.label = labelIt.GetMeasurementVector()[0];
-    entry.measurement = sampleIt.GetMeasurementVector();
-
-    entries.push_back(entry);
-
-    ++sampleIt;
-    ++labelIt;
-    ++posIt;
-    }
-
-  std::sort(entries.begin(), entries.end(), CompareSampleEntry());
-  std::ofstream file(outputFileName);
-  std::copy(entries.begin(), entries.end(), std::ostream_iterator<SampleEntry>(file, "\n"));
-  file.close();
-
-  return EXIT_SUCCESS;
-}
-
-
-
-int otbDescriptorsSVMModelCreation(int argc, char* argv[])
-{
-  if (argc != 7)
-    {
-    std::cerr << "Wrong number of arguments" << std::endl;
-    return EXIT_FAILURE;
-    }
-
-  const char* inputImageFileName = argv[1];
-  const char* inputSamplesLocation = argv[2];
-  const char* featureStatisticsFileName = argv[3];
-  const char* outputFileName = argv[4];
-  int streaming = atoi(argv[5]);
-  int neighborhood = atoi(argv[6]);
-
-  ImageReaderType::Pointer imageReader = ImageReaderType::New();
-  imageReader->SetFileName(inputImageFileName);
-
-  VectorDataReaderType::Pointer vectorDataReader = VectorDataReaderType::New();
-  vectorDataReader->SetFileName(inputSamplesLocation);
-
-  //imageReader->Update();
-  //vectorDataReader->Update();
-
-  AdaptedFunctionType::Pointer descriptorsFunction = AdaptedFunctionType::New();
-  descriptorsFunction->SetInputImage(imageReader->GetOutput());
-  descriptorsFunction->GetInternalImageFunction()->SetNeighborhoodRadius(neighborhood);
-
-  DescriptorsListSampleGeneratorType::Pointer descriptorsGenerator = DescriptorsListSampleGeneratorType::New();
-  descriptorsGenerator->SetInputImage(imageReader->GetOutput());
-  descriptorsGenerator->SetSamplesLocations(vectorDataReader->GetOutput());
-  descriptorsGenerator->SetDescriptorsFunction(descriptorsFunction.GetPointer());
-  descriptorsGenerator->SetNeighborhoodRadius(5);
-  descriptorsGenerator->GetStreamer()->SetNumberOfLinesStrippedStreaming( streaming );
-  descriptorsGenerator->Update();
-
-  // Normalize the samples
-  // Read the mean and variance form the XML file
-  StatisticsReader::Pointer  statisticsReader = StatisticsReader::New();
-  statisticsReader->SetFileName(featureStatisticsFileName);
-  SampleType meanMeasurentVector     = statisticsReader->GetStatisticVectorByName("mean");
-  SampleType varianceMeasurentVector = statisticsReader->GetStatisticVectorByName("stddev");
-
-  // Shift scale the samples
-  ShiftScaleListSampleFilterType::Pointer shiftscaleFilter = ShiftScaleListSampleFilterType::New();
-  shiftscaleFilter->SetInput(descriptorsGenerator->GetListSample());
-  shiftscaleFilter->SetShifts(meanMeasurentVector);
-  shiftscaleFilter->SetScales(varianceMeasurentVector);
-  shiftscaleFilter->Update();
-
-  SVMType::Pointer svmEstimator = SVMType::New();
-  svmEstimator->SetInputListSample(shiftscaleFilter->GetOutput());
-  svmEstimator->SetTargetListSample(descriptorsGenerator->GetLabelListSample());
-  svmEstimator->Train();
-  svmEstimator->Save(outputFileName);
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/ObjectDetection/test/otbLabeledSampleLocalizationGenerator.cxx b/Modules/Detection/ObjectDetection/test/otbLabeledSampleLocalizationGenerator.cxx
deleted file mode 100644
index 5497da01d457c7889ac52c691c5e59cdd535201f..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/test/otbLabeledSampleLocalizationGenerator.cxx
+++ /dev/null
@@ -1,69 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataFileWriter.h"
-#include "otbLabeledSampleLocalizationGenerator.h"
-
-
-int otbLabeledSampleLocalizationGenerator(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputVD1  = argv[1];
-  const char * inputVD2  = argv[2];
-  const char * outputVD  = argv[3];
-
-  typedef otb::VectorData<>                                        VectorDataType;
-  typedef otb::VectorDataFileReader<VectorDataType>                VectorDataReaderType;
-  typedef otb::VectorDataFileWriter<VectorDataType>                VectorDataWriterType;
-  typedef otb::LabeledSampleLocalizationGenerator<VectorDataType>  GeneratorType;
-
-  // instantiation
-  VectorDataReaderType::Pointer  reader1    = VectorDataReaderType::New();
-  VectorDataReaderType::Pointer  reader2    = VectorDataReaderType::New();
-  VectorDataWriterType::Pointer  writer     = VectorDataWriterType::New();
-  GeneratorType::Pointer         generator  = GeneratorType::New();
-
-  reader1->SetFileName(inputVD1);
-  //reader1->Update();
-
-  reader2->SetFileName(inputVD2);
-  //reader2->Update();
-
-  generator->PushBackInput(reader1->GetOutput());
-  generator->PushBackInput(reader2->GetOutput());
-
-  generator->SetSeed(0); // enable reproducible random number sequence
-  generator->SetClassKey("Class");
-  generator->SetNoClassIdentifier(0);
-  generator->SetInhibitionRadius(5);
-  generator->SetRandomLocalizationDensity(0.004);
-  generator->SetNbMaxIteration(1000);
-  generator->SetNumberOfPositiveSamplesPerPoint(2);
-
-  //generator->Update();
-
-  writer->SetFileName(outputVD);
-  writer->SetInput(generator->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/ObjectDetection/test/otbObjectDetectionClassifier.cxx b/Modules/Detection/ObjectDetection/test/otbObjectDetectionClassifier.cxx
deleted file mode 100644
index ee37856db93074bef43637baea584286c4b2959a..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/test/otbObjectDetectionClassifier.cxx
+++ /dev/null
@@ -1,156 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include <iostream>
-#include <iterator>
-
-#include "otbImage.h"
-#include "otbRadiometricMomentsImageFunction.h"
-#include "itkListSample.h"
-#include "itkVariableLengthVector.h"
-#include "otbObjectDetectionClassifier.h"
-#include "otbImageFileReader.h"
-#include "otbImageFunctionAdaptor.h"
-#include "otbStatisticsXMLFileReader.h"
-#include "itkPreOrderTreeIterator.h"
-#include "otbLibSVMMachineLearningModel.h"
-
-const unsigned int Dimension = 2;
-typedef int        LabelType;
-typedef double     PixelType;
-typedef double     FunctionPrecisionType;
-typedef double     CoordRepType;
-
-typedef otb::Image<PixelType, Dimension>                              ImageType;
-typedef otb::VectorData<>                                             VectorDataType;
-typedef VectorDataType::PointType                                     PointType;
-typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType>       TreeIteratorType;
-
-typedef otb::ObjectDetectionClassifier
-           < ImageType,
-             VectorDataType,
-             LabelType,
-             FunctionPrecisionType,
-             CoordRepType > ObjectDetectionClassifierType;
-
-typedef otb::RadiometricMomentsImageFunction<ImageType, CoordRepType>   FunctionType;
-typedef otb::ImageFunctionAdaptor<FunctionType, FunctionPrecisionType>  AdaptedFunctionType;
-
-typedef otb::ImageFileReader<ImageType>           ImageReaderType;
-
-typedef otb::LibSVMMachineLearningModel<PixelType,LabelType> SVMModelType;
-typedef SVMModelType::Pointer SVMModelPointerType;
-
-typedef otb::StatisticsXMLFileReader<AdaptedFunctionType::OutputType> StatisticsXMLFileReaderType;
-
-
-struct ComparePoint
-{
-  bool operator () (PointType p, PointType q)
-  {
-    // order with the y axis position
-    if (p[1] < q[1])
-      return true;
-    if (p[1] > q[1])
-      return false;
-
-    // If one the same line,
-    // order with the x axis position
-    if (p[0] < q[0])
-      return true;
-
-    return false;
-  }
-};
-
-std::ostream &operator<<(std::ostream &stream, PointType p)
-{
-  stream << p[0] << " " << p[1];
-  return stream;
-}
-
-
-
-int otbObjectDetectionClassifier(int argc, char* argv[])
-{
-  if (argc != 7)
-    {
-    std::cerr << "Wrong number of arguments" << std::endl;
-    return EXIT_FAILURE;
-    }
-
-  const char* inputImageFileName = argv[1];
-  const char* inputFeatureStats = argv[2];
-  const char* inputSVMModel = argv[3];
-  const char* outputVectorDataFileName = argv[4];
-  int streaming = atoi(argv[5]);
-  int neighborhood = atoi(argv[6]);
-
-  ImageReaderType::Pointer imageReader = ImageReaderType::New();
-  imageReader->SetFileName(inputImageFileName);
-
-  StatisticsXMLFileReaderType::Pointer statisticsReader = StatisticsXMLFileReaderType::New();
-  statisticsReader->SetFileName(inputFeatureStats);
-
-
-  SVMModelPointerType svmModel = SVMModelType::New();
-  svmModel->Load(inputSVMModel);
-
-  AdaptedFunctionType::Pointer descriptorsFunction = AdaptedFunctionType::New();
-  descriptorsFunction->SetInputImage(imageReader->GetOutput());
-  descriptorsFunction->GetInternalImageFunction()->SetNeighborhoodRadius(neighborhood);
-
-  ObjectDetectionClassifierType::Pointer classifier = ObjectDetectionClassifierType::New();
-  classifier->SetInputImage(imageReader->GetOutput());
-  classifier->SetNeighborhoodRadius(neighborhood);
-  classifier->SetModel(svmModel);
-  classifier->SetDescriptorsFunction(descriptorsFunction);
-  classifier->SetNoClassLabel(0);
-  classifier->SetClassKey("Class");
-  classifier->SetShifts(statisticsReader->GetStatisticVectorByName("mean"));
-  classifier->SetScales(statisticsReader->GetStatisticVectorByName("stddev"));
-  classifier->GetStreamer()->SetNumberOfLinesStrippedStreaming( streaming );
-  classifier->SetGridStep(neighborhood/2);
-  classifier->Update();
-
-  std::vector<ObjectDetectionClassifierType::PointType> points;
-  VectorDataType::Pointer vectorData = classifier->GetOutputVectorData();
-
-  TreeIteratorType itVector(vectorData->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (itVector.Get()->IsPointFeature())
-      {
-      points.push_back(itVector.Get()->GetPoint());
-      }
-    ++itVector;
-    }
-
-  std::sort(points.begin(), points.end(), ComparePoint());
-  std::ofstream file(outputVectorDataFileName);
-  std::copy(points.begin(), points.end(), std::ostream_iterator<PointType>(file, "\n"));
-  file.close();
-
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/ObjectDetection/test/otbObjectDetectionTestDriver.cxx b/Modules/Detection/ObjectDetection/test/otbObjectDetectionTestDriver.cxx
deleted file mode 100644
index 3d7686897dff2f713650bcf46755b97571e1b22a..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/test/otbObjectDetectionTestDriver.cxx
+++ /dev/null
@@ -1,30 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbTestMain.h"
-
-void RegisterTests()
-{
-  REGISTER_TEST(otbLabeledSampleLocalizationGenerator);
-  REGISTER_TEST(otbStandardMetaImageFunctionBuilder);
-  REGISTER_TEST(otbDescriptorsListSampleGenerator);
-  REGISTER_TEST(otbDescriptorsSVMModelCreation);
-  REGISTER_TEST(otbObjectDetectionClassifier);
-}
diff --git a/Modules/Detection/ObjectDetection/test/otbStandardMetaImageFunctionBuilder.cxx b/Modules/Detection/ObjectDetection/test/otbStandardMetaImageFunctionBuilder.cxx
deleted file mode 100644
index 5ac5d938059ae6671036b2e206ca820c3d17ebf2..0000000000000000000000000000000000000000
--- a/Modules/Detection/ObjectDetection/test/otbStandardMetaImageFunctionBuilder.cxx
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "otbStandardMetaImageFunctionBuilder.h"
-#include "otbVectorImage.h"
-#include "otbImageFileReader.h"
-
-#include "otbImageFunctionAdaptor.h"
-#include "otbFlusserMomentsImageFunction.h"
-#include "otbRadiometricMomentsImageFunction.h"
-#include "otbFourierMellinDescriptorsImageFunction.h"
-#include "otbLocalHistogramImageFunction.h"
-#include "otbHaralickTexturesImageFunction.h"
-
-
-
-int otbStandardMetaImageFunctionBuilder(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputFilename  = argv[1];
-
-  std::vector<double> p1, p2, p3, p4, p5;
-
-  typedef double                                                PrecisionType;
-  typedef double                                                CoordRepType;
-  typedef otb::StandardMetaImageFunctionBuilder<PrecisionType,
-    CoordRepType>                                               BuilderType;
-
-  typedef otb::Image<PrecisionType, 2>                          ImageType;
-  typedef otb::VectorImage<PrecisionType, 2>                    VectorImageType;
-  typedef otb::ImageFileReader<ImageType>                       ImageReaderType;
-  typedef otb::ImageFileReader<VectorImageType>                 VectorImageReaderType;
-
-  typedef BuilderType::MetaImageFunctionType                    MetaImageFunctionType;
-  typedef BuilderType::DataObjectContainerType                  DataObjectContainerType;
-
-  typedef otb::FlusserMomentsImageFunction<ImageType, CoordRepType>  FlusserMomentsIF;
-  typedef otb::ImageFunctionAdaptor<FlusserMomentsIF, PrecisionType> AdaptedFlusserMomentsIF;
-
-  typedef otb::RadiometricMomentsImageFunction<ImageType, CoordRepType>  RadiometricMomentsIF;
-  typedef otb::ImageFunctionAdaptor<RadiometricMomentsIF, PrecisionType>                AdaptedRadiometricMomentsIF;
-  typedef otb::FourierMellinDescriptorsImageFunction<ImageType, CoordRepType>  FourierMellinDescriptorsIF;
-  typedef otb::ImageFunctionAdaptor<FourierMellinDescriptorsIF, PrecisionType> AdaptedFourierMellinDescriptorsIF;
-
-  p1.push_back(7);
-  p1.push_back(128);
-  p1.push_back(0);
-  p1.push_back(1500);
-
-  p2.push_back(6);
-
-  p3.push_back(5);
-
-  p4.push_back(9);
-  p4.push_back(5);
-  p4.push_back(5);
-
-  p5.push_back(10);
-  p5.push_back(1);
-  p5.push_back(1500);
-  p5.push_back(16);
-  p5.push_back(4);
-
-  // instantiation
-  ImageReaderType::Pointer       Ireader  = ImageReaderType::New();
-  VectorImageReaderType::Pointer VIreader = VectorImageReaderType::New();
-
-  BuilderType::Pointer builder = BuilderType::New();
-
-  Ireader->SetFileName(inputFilename);
-  VIreader->SetFileName(inputFilename);
-
-  builder->AddImage(Ireader->GetOutput());
-  builder->SetNeighborhoodRadius(8);
-
-  builder->SetLocalHistogramIFParameters(p1);
-  builder->SetFlusserMomentsIFParameters(p2);
-  builder->SetRadiometricMomentsIFParameters(p3);
-  builder->SetFourierMellinDescriptorsIFParameters(p4);
-  builder->SetHaralickTexturesIFParameters(p5);
-
-  builder->AddImage(VIreader->GetOutput());
-
-  MetaImageFunctionType::Pointer MIF = builder->GetMetaImageFunction();
-  std::cout << MIF << std::endl;
-
-  DataObjectContainerType DOC = builder->GetDataObjectContainer();
-  std::cout << "DataObjectContainer.size(): " << DOC.size() << std::endl;
-
-  std::cout << static_cast<AdaptedRadiometricMomentsIF *>(MIF->GetNthFunction(0))->GetInternalImageFunction()
-            << std::endl;
-  std::cout << static_cast<AdaptedRadiometricMomentsIF *>(MIF->GetNthFunction(3))->GetInternalImageFunction()
-            << std::endl;
-
-
-  std::cout << static_cast<AdaptedFlusserMomentsIF *>(MIF->GetNthFunction(1))->GetInternalImageFunction()
-            << std::endl;
-  std::cout << static_cast<AdaptedFlusserMomentsIF *>(MIF->GetNthFunction(7))->GetInternalImageFunction()
-            << std::endl;
-
-  std::cout << static_cast<AdaptedFourierMellinDescriptorsIF *>(MIF->GetNthFunction(2))->GetInternalImageFunction()
-            << std::endl;
-  std::cout << static_cast<AdaptedFourierMellinDescriptorsIF *>(MIF->GetNthFunction(11))->GetInternalImageFunction()
-            << std::endl;
-
-/*
-  std::cout << static_cast<AdaptedLocalHistogramIF *>(MIF->GetNthFunction())->GetInternalImageFunction()
-            << std::endl;
-  std::cout << static_cast<AdaptedLocalHistogramIF *>(MIF->GetNthFunction(5))->GetInternalImageFunction()
-            << std::endl;
-
-  std::cout << static_cast<AdaptedHaralickTexturesIF *>(MIF->GetNthFunction(4))->GetInternalImageFunction()
-            << std::endl;
-  std::cout << static_cast<AdaptedHaralickTexturesIF *>(MIF->GetNthFunction(21))->GetInternalImageFunction()
-            << std::endl;
-*/
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/CMakeLists.txt b/Modules/Detection/RoadExtraction/CMakeLists.txt
deleted file mode 100644
index 7bb7b02fa9cc2361802ec609782cd7bb9488749b..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-project(OTBRoadExtraction)
-otb_module_impl()
diff --git a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h
deleted file mode 100644
index fda5cfa3c111a11ce9354629dee45f43d47137e4..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbBreakAngularPathListFilter_h
-#define otbBreakAngularPathListFilter_h
-
-#include "otbPathListToPathListFilter.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/** \class BreakAngularPathListFilter
- *  \brief CBase class for breaking angulars the input PathList, returning a PathList.
-   *
-   * \example FeatureExtraction/ExtractRoadByStepsExample.cxx
-   *
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TPath>
-class ITK_EXPORT BreakAngularPathListFilter
-  : public PathListToPathListFilter<TPath>
-{
-public:
-  /** Standard typedefs */
-  typedef BreakAngularPathListFilter      Self;
-  typedef PathListToPathListFilter<TPath> Superclass;
-  typedef itk::SmartPointer<Self>         Pointer;
-  typedef itk::SmartPointer<const Self>   ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(BreakAngularPathListFilter, PathListToPathListFilter);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PathType        PathType;
-  typedef typename Superclass::PathListType    PathListType;
-  typedef typename Superclass::PathPointerType PathPointerType;
-  typedef typename PathListType::Pointer       PathListPointerType;
-
-  typedef double MaxAngleType;
-
-  /** Set/Get the max angle */
-  itkSetMacro(MaxAngle, MaxAngleType);
-  itkGetConstMacro(MaxAngle, MaxAngleType);
-
-protected:
-  /** Constructor */
-  BreakAngularPathListFilter();
-  /** Destructor */
-  ~BreakAngularPathListFilter() override {}
-  /** GenerateData method */
-  void GenerateData() override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  BreakAngularPathListFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  /** Calculate break angular for a path */
-  void BreakAngularPath(const MaxAngleType maxAngle,
-                        const PathPointerType inputPath,
-                        PathListPointerType outputPathList);
-
-  /** Max angle value */
-  MaxAngleType m_MaxAngle;
-
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbBreakAngularPathListFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.hxx b/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.hxx
deleted file mode 100644
index 5fcec599fd55dc345d293a089f3d070f24dddf8e..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbBreakAngularPathListFilter.hxx
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbBreakAngularPathListFilter_hxx
-#define otbBreakAngularPathListFilter_hxx
-
-#include "otbBreakAngularPathListFilter.h"
-#include "otbMath.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TPath>
-BreakAngularPathListFilter<TPath>
-::BreakAngularPathListFilter()
-{
-}
-
-template <class TPath>
-void
-BreakAngularPathListFilter<TPath>
-::BreakAngularPath(const MaxAngleType maxAngle, const PathPointerType inputPath, PathListPointerType outputPathList)
-{
-  typename PathType::VertexListType::ConstPointer  vertexList = inputPath->GetVertexList();
-  typename PathType::VertexListType::ConstIterator pathIt = vertexList->Begin();
-
-  typename PathType::VertexType pixel1, pixel2, pixel3;
-
-  // Initialization
-  PathPointerType newPath = PathType::New();
-  newPath->Initialize();
-
-  double alpha1(0.), alpha2(0.);
-
-  while (pathIt != vertexList->End())
-    {
-    // Add Pixel 1
-    newPath->AddVertex(pathIt.Value());
-    pixel1 = pathIt.Value();
-    ++pathIt;
-    if (pathIt != vertexList->End())
-      {
-      pixel2 = pathIt.Value();
-      ++pathIt;
-      if (pathIt != vertexList->End())
-        {
-        pixel3 = pathIt.Value();
-
-        alpha1 = std::atan2((pixel1[1] - pixel2[1]), (pixel1[0] - pixel2[0]));
-        alpha2 = std::atan2((pixel2[1] - pixel3[1]), (pixel2[0] - pixel3[0]));
-        alpha1 = (alpha1 >= 0) ? alpha1 : (alpha1 + CONST_2PI);
-        alpha2 = (alpha2 >= 0) ? alpha2 : (alpha2 + CONST_2PI);
-        if (std::abs(alpha1 - alpha2) > static_cast<double>(maxAngle))
-          {
-          // Add Pixel 2
-          newPath->AddVertex(pixel2);
-          //Create new PathType in the out path list
-          outputPathList->PushBack(newPath);
-          // Reinit
-          newPath = PathType::New();
-
-          }
-        --pathIt; // Return previous pixel
-        }
-      else
-        {
-        // Add last Pixel (Pixel 2)
-        newPath->AddVertex(pixel2);
-        }
-      }
-    }
-  //Create new PathType in the out list
-  outputPathList->PushBack(newPath);
-}
-
-template <class TPath>
-void
-BreakAngularPathListFilter<TPath>
-::GenerateData()
-{
-  const PathListType * inputPathList  = this->GetInput();
-  PathListType *       outputPathList = this->GetOutput();
-
-  typename PathListType::ConstIterator listIt = inputPathList->Begin();
-  outputPathList->Clear();
-
-  PathListPointerType newTempPathList = PathListType::New();
-  while (listIt != inputPathList->End())
-    {
-    (void) BreakAngularPath(m_MaxAngle, listIt.Get(), outputPathList);
-    ++listIt;
-    }
-}
-
-/**
- * PrintSelf Method
- */
-template <class TPath>
-void
-BreakAngularPathListFilter<TPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "Angular max value : " << m_MaxAngle << std::endl;
-}
-
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h b/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h
deleted file mode 100644
index 6c57fa13c9c52783693e4e699eaf689fbaf2ff7d..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.h
+++ /dev/null
@@ -1,255 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbGenericRoadExtractionFilter_h
-#define otbGenericRoadExtractionFilter_h
-
-#include "itkUnaryFunctorImageFilter.h"
-#include "itkGradientRecursiveGaussianImageFilter.h"
-
-#include "otbVectorImage.h"
-#include "otbImageToPathListFilter.h"
-#include "itkSqrtImageFilter.h"
-#include "otbNeighborhoodScalarProductFilter.h"
-#include "otbNonMaxRemovalByDirectionFilter.h"
-#include "otbVectorizationPathListFilter.h"
-#include "otbSimplifyPathListFilter.h"
-#include "otbBreakAngularPathListFilter.h"
-#include "otbRemoveTortuousPathListFilter.h"
-#include "otbLinkPathListFilter.h"
-#include "otbRemoveIsolatedByDirectionFilter.h"
-#include "otbRemoveWrongDirectionFilter.h"
-#include "otbLikelihoodPathListFilter.h"
-
-namespace otb
-{
-/**
- * \class GenericRoadExtractionFilter
- * \brief This class performs the extraction of roads from an image.
- *
- * This composite filter implements a fast and robust road extraction
- * for high resolution satellite images. The line
- * detection is done using a Gaussian gradient with a scalar product to find
- * the road directions. Finally, extracted roads are vectorized and
- * processed to improve the results removing some occultations and false
- * detections.
- *
- * The full method is detailed in E. Christophe and J. Inglada, "Robust Road
- * Extraction for High Resolution Satellite Images," in IEEE International
- * Conference on Image Processing, ICIP'07, 2007.
- *
- * This filter is fast, as the detection typically takes 3 seconds for a
- * 1000 \f$ \times \f$ 1000 images with four spectral bands. Results can be
- * used as an initialization for more complex algorithms.
- *
- * \sa itk::SqrtImageFilter
- * \sa itk::GradientRecursiveGaussianImageFilter
- * \sa NeighborhoodScalarProductFilter
- * \sa RemoveIsolatedByDirectionFilter
- * \sa RemoveWrongDirectionFilter
- * \sa NonMaxRemovalByDirectionFilter
- * \sa VectorizationPathListFilter
- * \sa SimplifyPathListFilter
- * \sa BreakAngularPathListFilter
- * \sa RemoveTortuousPathListFilter
- * \sa LinkPathListFilter
- * \sa LikelihoodPathListFilter
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInputImage, class TOutputPath>
-class ITK_EXPORT GenericRoadExtractionFilter
-  : public ImageToPathListFilter<TInputImage, TOutputPath>
-{
-public:
-  /** Standard typedefs */
-  typedef GenericRoadExtractionFilter                     Self;
-  typedef ImageToPathListFilter<TInputImage, TOutputPath> Superclass;
-  typedef itk::SmartPointer<Self>                         Pointer;
-  typedef itk::SmartPointer<const Self>                   ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(GenericRoadExtractionFilter, ImageToPathListFilter);
-  /** Template parameters typedefs */
-  typedef typename Superclass::InputImageType     InputImageType;
-  typedef typename Superclass::OutputPathType     OutputPathType;
-  typedef typename Superclass::OutputPathListType OutputPathListType;
-  typedef typename InputImageType::PixelType      InputPixelType;
-  typedef double                                  InternalPixelType;
-
-  typedef otb::VectorImage<InternalPixelType, InputImageType::ImageDimension> VectorImageType;
-  typedef otb::Image<InternalPixelType, InputImageType::ImageDimension>       ModulusType;
-  typedef otb::Image<InternalPixelType, InputImageType::ImageDimension>       DirectionType;
-
-  typedef itk::CovariantVector<InternalPixelType, InputImageType::ImageDimension>
-  VectorPixelType;
-  typedef otb::Image<VectorPixelType, InputImageType::ImageDimension> CovariantVectorImageType;
-
-  typedef itk::SqrtImageFilter<
-      InputImageType,
-      InputImageType>                      SquareRootImageFilterType;
-
-  typedef itk::GradientRecursiveGaussianImageFilter<
-      InputImageType,
-      CovariantVectorImageType>               GradientFilterType;
-
-  typedef NeighborhoodScalarProductFilter<
-      CovariantVectorImageType,
-      ModulusType,
-      DirectionType>                          NeighborhoodScalarProductFilterType;
-
-  typedef RemoveIsolatedByDirectionFilter<
-      ModulusType,
-      DirectionType,
-      ModulusType>                           RemoveIsolatedByDirectionFilterType;
-
-  typedef RemoveWrongDirectionFilter<
-      ModulusType,
-      DirectionType,
-      ModulusType>                            RemoveWrongDirectionFilterType;
-
-  typedef NonMaxRemovalByDirectionFilter<
-      ModulusType,
-      DirectionType,
-      ModulusType>                           NonMaxRemovalByDirectionFilterType;
-
-  typedef VectorizationPathListFilter<
-      ModulusType,
-      DirectionType,
-      OutputPathType>                        VectorizationPathListFilterType;
-
-  typedef SimplifyPathListFilter<OutputPathType>                SimplifyPathListFilterType;
-  typedef BreakAngularPathListFilter<OutputPathType>            BreakAngularPathListFilterType;
-  typedef RemoveTortuousPathListFilter<OutputPathType>          RemoveTortuousPathListFilterType;
-  typedef LinkPathListFilter<OutputPathType>                    LinkPathListFilterType;
-  typedef LikelihoodPathListFilter<OutputPathType, ModulusType> LikelihoodPathListFilterType;
-
-  /** Template parameters typedefs for internals filters */
-  typedef typename GradientFilterType::RealType                    SigmaType;
-  typedef typename VectorizationPathListFilterType::InputPixelType AmplitudeThresholdType;
-//     typedef typename SimplifyPathListFilterType::ToleranceType ToleranceType;
-  typedef double                                                ToleranceType;
-  typedef typename BreakAngularPathListFilterType::MaxAngleType MaxAngleType;
-//     typedef typename RemoveTortuousPathListFilterType::MeanDistanceThresholdType MeanDistanceThresholdType;
-  typedef double                                    MeanDistanceThresholdType;
-  typedef typename LinkPathListFilterType::RealType LinkRealType;
-
-  /** Get/Set the alpha value */
-  itkGetConstReferenceMacro(Alpha, double);
-  itkSetMacro(Alpha, double);
-
-  /** Get/Set the amplitude threshold to start following a path (use by the VectorizationPathListFilter)*/
-  itkSetMacro(AmplitudeThreshold, AmplitudeThresholdType);
-  itkGetMacro(AmplitudeThreshold, AmplitudeThresholdType);
-
-  /** Get/Set  the tolerance for segment consistency (tolerance in terms of distance) (use by the SimplifyPathListFilter)*/
-  itkGetMacro(Tolerance, ToleranceType);
-  itkSetMacro(Tolerance, ToleranceType);
-
-  /** Get/Set  the resolution */
-  itkGetMacro(Resolution, double);
-  itkSetMacro(Resolution, double);
-
-  /** Set/Get the max angle (use bye the BreakAngularPathListFilter)*/
-  itkSetMacro(MaxAngle, MaxAngleType);
-  itkGetConstMacro(MaxAngle, MaxAngleType);
-
-  /** Get/Set the tolerance for segment consistency (tolerance in terms of distance) (use by RemoveTortuousPathListFilter)*/
-  itkGetMacro(FirstMeanDistanceThreshold, MeanDistanceThresholdType);
-  itkSetMacro(FirstMeanDistanceThreshold, MeanDistanceThresholdType);
-  itkGetMacro(SecondMeanDistanceThreshold, MeanDistanceThresholdType);
-  itkSetMacro(SecondMeanDistanceThreshold, MeanDistanceThresholdType);
-
-  /** Get/Set the angular threshold (use by LinkPathFilter)*/
-  itkSetMacro(AngularThreshold, LinkRealType);
-  itkGetMacro(AngularThreshold, LinkRealType);
-  /** Get/Set the distance threshold (use by LinkPathFilter)*/
-  itkSetMacro(DistanceThreshold, LinkRealType);
-  itkGetMacro(DistanceThreshold, LinkRealType);
-
-protected:
-  /** Constructor */
-  GenericRoadExtractionFilter();
-  /** Destructor */
-  ~GenericRoadExtractionFilter() override {}
-
-  /** Prepare main computation method
-   *  Note : this function isn't called
-   */
-  void BeforeGenerateData(void);
-
-  /** Main computation method */
-  void GenerateData(void) override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-
-  GenericRoadExtractionFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  typename SquareRootImageFilterType::Pointer m_SquareRootImageFilter;
-  typename GradientFilterType::Pointer m_GradientFilter;
-  typename NeighborhoodScalarProductFilterType::Pointer m_NeighborhoodScalarProductFilter;
-  typename RemoveIsolatedByDirectionFilterType::Pointer m_RemoveIsolatedByDirectionFilter;
-  typename RemoveWrongDirectionFilterType::Pointer m_RemoveWrongDirectionFilter;
-  typename NonMaxRemovalByDirectionFilterType::Pointer m_NonMaxRemovalByDirectionFilter;
-  typename VectorizationPathListFilterType::Pointer m_VectorizationPathListFilter;
-  typename SimplifyPathListFilterType::Pointer m_FirstSimplifyPathListFilter;
-  typename SimplifyPathListFilterType::Pointer m_SecondSimplifyPathListFilter;
-  typename BreakAngularPathListFilterType::Pointer m_BreakAngularPathListFilter;
-  typename RemoveTortuousPathListFilterType::Pointer m_FirstRemoveTortuousPathListFilter;
-  typename RemoveTortuousPathListFilterType::Pointer m_SecondRemoveTortuousPathListFilter;
-  typename LinkPathListFilterType::Pointer m_LinkPathListFilter;
-  typename LikelihoodPathListFilterType::Pointer m_LikelihoodPathListFilter;
-
-  /** Amplitude threshold to start following a path (use by the VectorizationPathListFilter)*/
-  AmplitudeThresholdType m_AmplitudeThreshold;
-  /** Tolerance for segment consistency (tolerance in terms of distance) (use by the SimplifyPathListFilter)*/
-  ToleranceType m_Tolerance;
-  /** Max angle (use bye the BreakAngularPathListFilter)*/
-  MaxAngleType m_MaxAngle;
-  /** Tolerance for segment consistency (tolerance in terms of distance) (use by RemoveTortuousPathListFilter)*/
-  MeanDistanceThresholdType m_FirstMeanDistanceThreshold;
-  MeanDistanceThresholdType m_SecondMeanDistanceThreshold;
-  /** The angular threshold (use by LinkPathListFilter) */
-  LinkRealType m_AngularThreshold;
-
-  /** The distance threshold (use by LinkPathListFilter) */
-  double m_DistanceThreshold;
-
-  /** Alpha. Use to calculate the sigma value used by the GradientRecursiveGaussianImageFilter */
-  double m_Alpha;
-
-  /** Resolution of the image. Use to calculate the sigma value used by the GradientRecursiveGaussianImageFilter
-  and the m_DistanceThreshold value used by the LinkPathListFilter
-  This value is set bye the image's spacing.*/
-  double m_Resolution;
-
-};
-
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbGenericRoadExtractionFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.hxx b/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.hxx
deleted file mode 100644
index fe69fd3c7894a61ffd07e7a942c54a78e7ef8f14..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbGenericRoadExtractionFilter.hxx
+++ /dev/null
@@ -1,192 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbGenericRoadExtractionFilter_hxx
-#define otbGenericRoadExtractionFilter_hxx
-
-#include "otbGenericRoadExtractionFilter.h"
-#include "otbMath.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputPath>
-GenericRoadExtractionFilter<TInputImage, TOutputPath>
-::GenericRoadExtractionFilter()
-{
-  this->SetNumberOfRequiredInputs(1);
-  this->SetNumberOfRequiredOutputs(1);
-
-  m_SquareRootImageFilter = SquareRootImageFilterType::New();
-  m_GradientFilter = GradientFilterType::New();
-  m_NeighborhoodScalarProductFilter = NeighborhoodScalarProductFilterType::New();
-  m_RemoveIsolatedByDirectionFilter = RemoveIsolatedByDirectionFilterType::New();
-  m_RemoveWrongDirectionFilter = RemoveWrongDirectionFilterType::New();
-  m_NonMaxRemovalByDirectionFilter = NonMaxRemovalByDirectionFilterType::New();
-  m_VectorizationPathListFilter = VectorizationPathListFilterType::New();
-  m_FirstSimplifyPathListFilter = SimplifyPathListFilterType::New();
-  m_SecondSimplifyPathListFilter = SimplifyPathListFilterType::New();
-  m_BreakAngularPathListFilter = BreakAngularPathListFilterType::New();
-  m_FirstRemoveTortuousPathListFilter = RemoveTortuousPathListFilterType::New();
-  m_SecondRemoveTortuousPathListFilter = RemoveTortuousPathListFilterType::New();
-  m_LinkPathListFilter = LinkPathListFilterType::New();
-  m_LikelihoodPathListFilter = LikelihoodPathListFilterType::New();
-
-  /** Amplitude threshold to start following a path (use by the VectorizationPathListFilter)*/
-  m_AmplitudeThreshold = static_cast<AmplitudeThresholdType>(0.00005);
-  /** Tolerance for segment consistency (tolerance in terms of distance) (use by the SimplifyPathFilter)*/
-  m_Tolerance = static_cast<ToleranceType>(1.);
-  /** Max angle (use bye the BreakAngularPathListFilter)*/
-  m_MaxAngle = static_cast<MaxAngleType>(CONST_PI_8);
-  /** Tolerance for segment consistency (tolerance in terms of distance) (use by RemoveTortuousPathFilter)*/
-  m_FirstMeanDistanceThreshold = static_cast<MeanDistanceThresholdType>(1.);
-  m_SecondMeanDistanceThreshold = static_cast<MeanDistanceThresholdType>(10.);
-  /** The angular threshold (use by LinkPathFilter) */
-  m_AngularThreshold = static_cast<LinkRealType>(CONST_PI_8);
-
-  /** The distance threshold (use by LinkPathFilter) */
-  m_DistanceThreshold = 25.;
-
-  /** Alpha value */
-  /** Use to calculate the sigma value use by the GradientRecursiveGaussianImageFilter */
-  m_Alpha = 1.0;
-
-  /** Resolution of the image */
-  m_Resolution = 1.;
-}
-/**
- * Prepare main computation method
- */
-template <class TInputImage, class TOutputPath>
-void
-GenericRoadExtractionFilter<TInputImage, TOutputPath>
-::BeforeGenerateData()
-{
-  /** Calculation of resolution value */
-  typename InputImageType::SpacingType spacing = this->GetInput()->GetSignedSpacing();
-  // Getting x Spacing for the resolution
-  m_Resolution = static_cast<double>(spacing[0]);
-  if (m_Resolution == 0.)
-    {
-    itkWarningMacro(<< "The image spacing is zero. So the resolution used in the filter is forced to 1.");
-    m_Resolution = 1.;
-    }
-
-}
-
-/**
- * Main computation method
- */
-template <class TInputImage, class TOutputPath>
-void
-GenericRoadExtractionFilter<TInputImage, TOutputPath>
-::GenerateData()
-{
-  // // Input images pointers
-  typename InputImageType::ConstPointer inputImage     = this->GetInput();
-  typename OutputPathListType::Pointer  outputPathList  = this->GetOutput();
-
-  ///////////////////////////////////////
-  //// Algorithm for road extraction ////
-  ///////////////////////////////////////
-
-  //
-
-  m_SquareRootImageFilter->SetInput(inputImage);
-
-  m_GradientFilter->SetInput(m_SquareRootImageFilter->GetOutput());
-  /** Sigma calculated with the alpha and image resolution parameters */
-  m_GradientFilter->SetSigma(static_cast<SigmaType>(m_Alpha * (1.2 / m_Resolution + 1.)));
-  m_GradientFilter->SetUseImageDirection(false);
-
-  m_NeighborhoodScalarProductFilter->SetInput(m_GradientFilter->GetOutput());
-
-  m_RemoveIsolatedByDirectionFilter->SetInput(m_NeighborhoodScalarProductFilter->GetOutput());
-  m_RemoveIsolatedByDirectionFilter->SetInputDirection(m_NeighborhoodScalarProductFilter->GetOutputDirection());
-
-  m_RemoveWrongDirectionFilter->SetInput(m_RemoveIsolatedByDirectionFilter->GetOutput());
-  m_RemoveWrongDirectionFilter->SetInputDirection(m_NeighborhoodScalarProductFilter->GetOutputDirection());
-
-  m_NonMaxRemovalByDirectionFilter->SetInput(m_RemoveWrongDirectionFilter->GetOutput());
-  m_NonMaxRemovalByDirectionFilter->SetInputDirection(m_NeighborhoodScalarProductFilter->GetOutputDirection());
-
-  m_VectorizationPathListFilter->SetInput(m_NonMaxRemovalByDirectionFilter->GetOutput());
-  m_VectorizationPathListFilter->SetInputDirection(m_NeighborhoodScalarProductFilter->GetOutputDirection());
-  m_VectorizationPathListFilter->SetAmplitudeThreshold(m_AmplitudeThreshold);
-
-  m_FirstSimplifyPathListFilter->SetInput(m_VectorizationPathListFilter->GetOutput());
-  m_FirstSimplifyPathListFilter->GetFunctor().SetTolerance(m_Tolerance);
-
-  m_BreakAngularPathListFilter->SetInput(m_FirstSimplifyPathListFilter->GetOutput());
-  m_BreakAngularPathListFilter->SetMaxAngle(m_MaxAngle);
-
-  m_FirstRemoveTortuousPathListFilter->SetInput(m_BreakAngularPathListFilter->GetOutput());
-  m_FirstRemoveTortuousPathListFilter->GetFunctor().SetThreshold(m_FirstMeanDistanceThreshold);
-
-  m_LinkPathListFilter->SetInput(m_FirstRemoveTortuousPathListFilter->GetOutput());
-  m_LinkPathListFilter->SetAngularThreshold(m_AngularThreshold);
-  m_LinkPathListFilter->SetDistanceThreshold(static_cast<LinkRealType>(m_DistanceThreshold / m_Resolution));
-
-  m_SecondSimplifyPathListFilter->SetInput(m_LinkPathListFilter->GetOutput());
-  m_SecondSimplifyPathListFilter->GetFunctor().SetTolerance(m_Tolerance);
-
-  m_SecondRemoveTortuousPathListFilter->SetInput(m_SecondSimplifyPathListFilter->GetOutput());
-  m_SecondRemoveTortuousPathListFilter->GetFunctor().SetThreshold(m_SecondMeanDistanceThreshold);
-
-  m_LikelihoodPathListFilter->SetInput(m_SecondRemoveTortuousPathListFilter->GetOutput());
-  m_LikelihoodPathListFilter->SetInputImage(m_NonMaxRemovalByDirectionFilter->GetOutput());
-
-  // Graft output seems to be broken for PolylineParametricPath
-  // So we use update, and copy the path to the output path list.
-  // m_LikelihoodPathListFilter->GraftOutput(this->GetOutput());
-  m_LikelihoodPathListFilter->Update();
-  // outputPathList =  m_LikelihoodPathListFilter->GetOutput();
-  for (typename LikelihoodPathListFilterType::PathListType::ConstIterator it
-         = m_LikelihoodPathListFilter->GetOutput()->Begin();
-       it != m_LikelihoodPathListFilter->GetOutput()->End();
-       ++it)
-    {
-    outputPathList->PushBack(it.Get());
-    }
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage, class TOutputPath>
-void
-GenericRoadExtractionFilter<TInputImage, TOutputPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "m_Alpha:" << m_Alpha << std::endl;
-  os << indent << "m_Resolution:" << m_Resolution << std::endl;
-  os << indent << "m_AmplitudeThreshold: " << m_AmplitudeThreshold << std::endl;
-  os << indent << "m_Tolerance: " << m_Tolerance << std::endl;
-  os << indent << "m_MaxAngle: " << m_MaxAngle << std::endl;
-  os << indent << "m_FirstMeanDistanceThreshold: " << m_FirstMeanDistanceThreshold << std::endl;
-  os << indent << "m_SecondMeanDistanceThreshold: " << m_SecondMeanDistanceThreshold << std::endl;
-  os << indent << "m_DistanceThreshold: " << m_DistanceThreshold << std::endl;
-  os << indent << "m_AngularThreshold: " << m_AngularThreshold << std::endl;
-
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h b/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h
deleted file mode 100644
index bdb44cf1f065d6f29f879f5e6da32b08fea2ca2b..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.h
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageToPathListAlignFilter_h
-#define otbImageToPathListAlignFilter_h
-
-#include "itkImageSource.h"
-#include "itkConceptChecking.h"
-#include "otbImage.h"
-#include "otbImageToPathListFilter.h"
-#include <vector>
-
-namespace otb
-{
-
-/** \class ImageToPathListAlignFilter
- * \brief Base class used to implement filter to extract align points or group of points and give the coordinates.
- *
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInputImage, class TOutputPath>
-class ITK_EXPORT ImageToPathListAlignFilter : public ImageToPathListFilter<TInputImage, TOutputPath>
-{
-public:
-  /** Standard class typedefs. */
-  typedef ImageToPathListAlignFilter                      Self;
-  typedef ImageToPathListFilter<TInputImage, TOutputPath> Superclass;
-  typedef itk::SmartPointer<Self>                         Pointer;
-  typedef itk::SmartPointer<const Self>                   ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(ImageToPathListAlignFilter, ImageToPathListFilter);
-//  itkTypeMacro(ImageToPathListAlignFilter, itk::ImageSource);
-
-  /** ImageDimension constants */
-  itkStaticConstMacro(InputImageDimension, unsigned int,
-                      TInputImage::ImageDimension);
-
-  /** Some convenient typedefs. */
-  typedef typename Superclass::OutputPathListType OutputPathListType;
-
-  typedef typename Superclass::InputImageType       InputImageType;
-  typedef typename Superclass::InputImageRegionType InputImageRegionType;
-  typedef typename InputImageType::Pointer          InputImagePointer;
-  typedef typename InputImageType::ConstPointer     InputImageConstPointer;
-
-  typedef typename InputImageType::SizeType  SizeType;
-  typedef typename InputImageType::ValueType ValueType;
-  typedef typename InputImageType::PixelType PixelType;
-
-  typedef typename Superclass::OutputPathType OutputPathType;
-  // typedef typename Superclass::OutputPathListType     OutputPathListType;
-  typedef typename Superclass::OutputPathPointerType OutputPathPointerType;
-
-//  typedef          float                                        RealType;
-//typedef typename itk::NumericTraits<PixelType>::RealType       RealType;
-  typedef double RealType;
-//  typedef typename itk::Image<RealType, InputImageDimension>      RealImageType;
-  typedef typename otb::Image<RealType, InputImageDimension> RealImageType;
-  typedef typename RealImageType::Pointer                    RealImageTypePointer;
-  typedef typename RealImageType::IndexType                  RealImageTypeIndexType;
-
-  /** Spacing (size of a pixel) of the output image. The
-   * spacing is the geometric distance between image samples.
-   * It is stored internally as double, but may be set from
-   * float. \sa GetSpacing() */
-  virtual void SetSpacing(const double* spacing);
-  virtual void SetSpacing(const float* spacing);
-  virtual const double* GetSpacing() const;
-
-  /** Set/Get the value for pixels on and off the path.
-  * By default, this filter will return a "0" image with path pixels set to 1 */
-  itkSetMacro(PathValue, ValueType);
-  itkGetMacro(PathValue, ValueType);
-  itkSetMacro(BackgroundValue, ValueType);
-  itkGetMacro(BackgroundValue, ValueType);
-
-  /** The origin of the output image. The origin is the geometric
-   * coordinates of the index (0, 0, ..., 0).  It is stored internally
-   * as double but may be set from float.
-   * \sa GetOrigin() */
-  virtual void SetOrigin(const double* origin);
-  virtual void SetOrigin(const float* origin);
-  virtual const double * GetOrigin() const;
-
-  /** Set/Get Size */
-  itkSetMacro(Size, SizeType);
-  itkGetMacro(Size, SizeType);
-
-  itkSetMacro(isMeaningfulSegment, bool);
-  itkSetMacro(NbGradDirection, int);
-  itkSetMacro(NbLineDirection, int);
-  itkSetMacro(MinGradNorm, double);
-  itkSetMacro(Eps, double);
-  itkGetConstReferenceMacro(isMeaningfulSegment, bool);
-  itkGetConstReferenceMacro(NbGradDirection, int);
-  itkGetConstReferenceMacro(NbLineDirection, int);
-  itkGetConstReferenceMacro(MinGradNorm, double);
-  itkGetConstReferenceMacro(Eps, double);
-
-protected:
-  ImageToPathListAlignFilter();
-  ~ImageToPathListAlignFilter() override;
-
-  void GenerateOutputInformation() override {}  // do nothing
-  void GenerateData() override;
-  virtual std::vector<double> tab(int n, double p, double m);
-  virtual void AngleCalculate(const InputImageType*  InputImageIn);
-
-  SizeType  m_Size;
-  double    m_Spacing[InputImageDimension];
-  double    m_Origin[InputImageDimension];
-  ValueType m_PathValue;
-  ValueType m_BackgroundValue;
-
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  ImageToPathListAlignFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-  bool                m_isMeaningfulSegment; /// to get all meaningful segments (maximal or not
-  int                 m_NbGradDirection; /// Number of allowed gradient direction, default 16
-  int                 m_NbLineDirection; /// Number of line directions to scan, default 96)
-  double              m_MinGradNorm; /// Minimum gradient norm to define a direction, default 2.
-  double              m_Eps; /// -log10(max. number of false alarms), default 0
-  std::vector<double> m_seglist;
-
-  RealImageType * m_AngleImage; //Angle image use by GenerateData and AngleCalculate methods
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbImageToPathListAlignFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.hxx b/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.hxx
deleted file mode 100644
index 3ba3ef83d435c64c28995b047ffcfe72a7316c79..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbImageToPathListAlignFilter.hxx
+++ /dev/null
@@ -1,585 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageToPathListAlignFilter_hxx
-#define otbImageToPathListAlignFilter_hxx
-
-#include "otbImageToPathListAlignFilter.h"
-#include "itkImageRegionIteratorWithIndex.h"
-#include "itkConstNeighborhoodIterator.h"
-#include "itkPathIterator.h"
-#include "itkNumericTraits.h"
-#include "itkImageLinearIteratorWithIndex.h"
-#include "otbMath.h"
-
-namespace otb
-{
-
-struct one_segment
-{
-  short start;    /* starting position (distance from border) */
-  short end;      /* ending position (hence, length is end-start+1) */
-  double nfa;     /* number of false alarms */
-  char ok;
-};
-
-/** Constructor */
-template <class TInputImage, class TOutputPath>
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::ImageToPathListAlignFilter()
-{
-  this->SetNumberOfRequiredInputs(1);
-  m_Size.Fill(0);
-  m_isMeaningfulSegment = false;
-  m_NbGradDirection = 16;
-  m_NbLineDirection = 96;
-  m_MinGradNorm = 2.0;
-  m_Eps = 0.0;
-
-  for (unsigned int i = 0; i < InputImageDimension; ++i)
-    {
-    // Set an image spacing for the user
-    m_Spacing[i] = 1.0;
-    m_Origin[i] = 0;
-    }
-
-  m_PathValue = itk::NumericTraits<ValueType>::One;
-  m_BackgroundValue = itk::NumericTraits<ValueType>::Zero;
-}
-
-/** Destructor */
-template <class TInputImage, class TOutputPath>
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::~ImageToPathListAlignFilter()
-{
-}
-
-//----------------------------------------------------------------------------
-template <class TInputImage, class TOutputPath>
-void
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::SetSpacing(const double* spacing)
-{
-  unsigned int i;
-  for (i = 0; i < InputImageDimension; ++i)
-    {
-    if (spacing[i] != m_Spacing[i])
-      {
-      break;
-      }
-    }
-  if (i < InputImageDimension)
-    {
-    for (i = 0; i < InputImageDimension; ++i)
-      {
-      m_Spacing[i] = spacing[i];
-      }
-    this->Modified();
-    }
-}
-
-template <class TInputImage, class TOutputPath>
-void
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::SetSpacing(const float* spacing)
-{
-  unsigned int i;
-  for (i = 0; i < InputImageDimension; ++i)
-    {
-    if ((double) spacing[i] != m_Spacing[i])
-      {
-      break;
-      }
-    }
-  if (i < InputImageDimension)
-    {
-    for (i = 0; i < InputImageDimension; ++i)
-      {
-      m_Spacing[i] = spacing[i];
-      }
-    this->Modified();
-    }
-}
-
-template <class TInputImage, class TOutputPath>
-const double *
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::GetSpacing() const
-{
-  return m_Spacing;
-}
-
-//----------------------------------------------------------------------------
-template <class TInputImage, class TOutputPath>
-void
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::SetOrigin(const double* origin)
-{
-  unsigned int i;
-  for (i = 0; i < InputImageDimension; ++i)
-    {
-    if (origin[i] != m_Origin[i])
-      {
-      break;
-      }
-    }
-  if (i < InputImageDimension)
-    {
-    for (i = 0; i < InputImageDimension; ++i)
-      {
-      m_Origin[i] = origin[i];
-      }
-    }
-}
-
-template <class TInputImage, class TOutputPath>
-void
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::SetOrigin(const float* origin)
-{
-  unsigned int i;
-  for (i = 0; i < InputImageDimension; ++i)
-    {
-    if ((double) origin[i] != m_Origin[i])
-      {
-      break;
-      }
-    }
-  if (i < InputImageDimension)
-    {
-    for (i = 0; i < InputImageDimension; ++i)
-      {
-      m_Origin[i] = origin[i];
-      }
-    }
-}
-
-template <class TInputImage, class TOutputPath>
-const double *
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::GetOrigin() const
-{
-  return m_Origin;
-}
-
-//----------------------------------------------------------------------------
-/* Algorithm */
-template <class TInputImage, class TOutputPath>
-std::vector<double>
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::tab(int n, double p, double m)
-{
-  std::vector<double> out;
-  int                 adr1, adr2, x, y;
-//  double lambda;
-  double q;
-
-  q = 1.0 - p;
-  out.resize((n + 1) * (n + 1));
-  adr1 = 0;
-
-  /*** compute proba (=x among y) ***/
-  out[0] = 1.0;
-  for (y = 1, adr2 = 0; y <= n; ++y)
-    {
-    adr1 = adr2;
-    adr2 += n + 1;
-    out[adr2] = q * out[adr1];
-    for (x = 1; x <= y; ++x)
-      out[adr2 + x] = p * out[adr1 + x - 1] + q * out[adr1 + x];
-    }
-
-  /*** sum to obtain proba (>=k among y) ***/
-  for (y = 1, adr1 = n + 1; y <= n; ++y, adr1 += n + 1)
-    for (x = y - 1; x >= 0; x--)
-      out[adr1 + x] += out[adr1 + x + 1];
-
-  /*** multiply by m (number of segments) to obtain expectation***/
-  for (adr1 = (n + 1) * (n + 1); --adr1 >= 0; )
-    out[adr1] *= m;
-
-  return out;
-}
-
-template <class TInputImage, class TOutputPath>
-void
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::AngleCalculate(const InputImageType* InputImage)
-{
-  double threshold;
-  int    n, p, x, y;
-
-  typename InputImageType::SizeType Taille;
-  typename RealImageType::IndexType IndexOut;
-
-  Taille = InputImage->GetLargestPossibleRegion().GetSize();
-
-  typename RealImageType::RegionType region;
-  region.SetSize(InputImage->GetLargestPossibleRegion().GetSize());
-  IndexOut[0] = 0;
-  IndexOut[1] = 0;
-//  region.SetIndex(InputImage->GetLargestPossibleRegion().GetIndex());
-  region.SetIndex(IndexOut);
-  m_AngleImage->SetRegions(region);
-  m_AngleImage->SetOrigin(InputImage->GetOrigin());
-  m_AngleImage->SetSignedSpacing(InputImage->GetSignedSpacing());
-  m_AngleImage->Allocate();
-
-  n = Taille[0];
-  p = Taille[1];
-
-  threshold = m_MinGradNorm;
-  threshold *= threshold;
-
-  typename InputImageType::IndexType idx;
-
-  for (x = 0; x < p; ++x)
-    {
-    idx[0] = (n - 1);
-    idx[1] = x;
-//     indice = (n-1)*p +x
-    m_AngleImage->SetPixel(idx, static_cast<RealType>(-1000.0));
-    }
-  for (y = 0; y < n; ++y)
-    {
-    idx[0] = y;
-    idx[1] = p - 1;
-//     indice = p*y+p-1
-    m_AngleImage->SetPixel(idx, static_cast<RealType>(-1000.0));
-    }
-
-  typename InputImageType::IndexType adr;
-  RealType                           PixelA, PixelB, PixelC, PixelD;
-  RealType                           com1, com2, gx, gy, norm;
-
-  for (x = 0; x < p - 1; ++x)
-    for (y = 0; y < n - 1; ++y)
-      {
-// indice = y*p+x
-      adr[0] = y;
-      adr[1] = x;
-      idx[0] = adr[0] + 1;
-      idx[1] = adr[1] + 1;
-      PixelA = static_cast<RealType>(InputImage->GetPixel(idx));
-      idx[0] = adr[0];
-      idx[1] = adr[1];
-      assert(idx[0] < n);
-      assert(idx[1] < p);
-      assert(idx[0] >= 0);
-      assert(idx[1] >= 0);
-      PixelB = static_cast<RealType>(InputImage->GetPixel(idx));
-      idx[0] = adr[0] + 1;
-      idx[1] = adr[1];
-      assert(idx[0] < n);
-      assert(idx[1] < p);
-      assert(idx[0] >= 0);
-      assert(idx[1] >= 0);
-      PixelC = static_cast<RealType>(InputImage->GetPixel(idx));
-      idx[0] = adr[0];
-      idx[1] = adr[1] + 1;
-      assert(idx[0] < n);
-      assert(idx[1] < p);
-      assert(idx[0] >= 0);
-      assert(idx[1] >= 0);
-      PixelD = static_cast<RealType>(InputImage->GetPixel(idx));
-      com1 = PixelA - PixelB;
-      com2 = PixelC - PixelD;
-      gx = 0.5 * (com1 + com2);
-      gy = 0.5 * (com1 - com2);
-      norm = gx * gx + gy * gy;
-
-      if (norm <= threshold) m_AngleImage->SetPixel(adr, static_cast<RealType>(-1000.0));
-      else m_AngleImage->SetPixel(adr, static_cast<RealType>(std::atan2(gx, -gy)));
-      }
-}
-
-template <class TInputImage, class TOutputPath>
-void
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::GenerateData(void)
-{
-//  SizeType size;
-//  double origin[InputImageDimension];
-  typename InputImageType::SizeType Taille;
-  RealImageTypeIndexType            indexAngle;
-//  Flist result;
-  int                      iseglist, size_seglist; /* associated counter and dynamic size */
-  int                      iseg, size_seg;
-  double                   nfa, max_nfa;
-  std::vector<double>      test;
-  std::vector<int>         count, startbloc, endbloc;
-  std::vector<double>      seglist; /* list of recorded segments */
-  std::vector<one_segment> seg;
-  int                      mx, my, ox, oy, nx, ny, n;
-  int                      xx, yy, pos, posmax, nblocs, inbloc, max_nblocs;
-  int                      cur, i, j, side, l, lphase;
-  // int tmp;
-  int    itheta, ntheta;
-  double theta, theta0, dtheta, dx, dy, prec;
-  double error = 0.0;
-  itkDebugMacro(<< "ImageToPathListAlignFilter::GenerateData() called");
-
-  // Get the input and output pointers
-  const InputImageType * InputImage   = this->GetInput();
-  OutputPathListType *   OutputPath   = this->GetOutput();
-  // Generate the image
-
-  /* Filter algorithm */
-
-  Taille = InputImage->GetLargestPossibleRegion().GetSize();
-  nx = Taille[0];
-  ny = Taille[1];
-  max_nfa = std::pow(10.0, -(m_Eps));
-
-//  typename InputImageType::IndexType adr;
-
-  /*** maximal length for a line */
-  n = (int) std::ceil(hypot((double) nx, (double) ny)) + 1;
-
-  /*** compute angle map of u ***/
-  RealImageTypePointer lAngleImagePointer = RealImageType::New();
-  m_AngleImage = static_cast<RealImageType*>(lAngleImagePointer.GetPointer());
-  this->AngleCalculate(InputImage);
-
-  /*** compute P(k, l) ***/
-  test = tab(n, 1.0 / (double) (m_NbGradDirection), (double) (nx * ny) * (double) (nx * ny));
-
-  /*** initialization ***/
-  prec = CONST_PI / (double) (m_NbGradDirection);
-  ntheta = m_NbLineDirection / 2;  /* i.e. # directions of NON-ORIENTED lines */
-  dtheta = CONST_PI / (double) ntheta;
-
-  /******************** memory allocation ********************/
-
-  max_nblocs = n / 2 + 1; /* maximal number of blocs */
-  count.resize(max_nblocs);
-  startbloc.resize(max_nblocs);
-  endbloc.resize(max_nblocs);
-
-  size_seg = 10000; /* initial allocation (may reallocate later) */
-  seg.resize(size_seg);
-
-  size_seglist = 10000; /* initial allocation (may reallocate later) */
-  seglist.resize(5 * size_seglist);
-
-  /* counter for recorded segments (seglist) */
-  iseglist = 0;
-
-  /******************** first loop : the four sides ********************/
-
-  for (side = 0; side < 4; side++)
-    {
-    printf("side %d/4 ", side + 1);
-
-    theta0 = CONST_PI_2 * (double) side;
-    mx = ((side == 0 || side == 2) ? 1 : 0);
-    my = ((side == 1 || side == 3) ? 1 : 0);
-    ox = ((side == 1) ? nx - 1 : 0);
-    oy = ((side == 2) ? ny - 1 : 0);
-
-    posmax = nx * mx + ny * my;
-
-    /*** second loop : angles ***/
-    for (itheta = 0; itheta < ntheta; itheta++)
-      {
-      printf(".");
-      fflush(stdout);
-      theta = theta0 + (double) (itheta) * dtheta;
-      dx = (double) std::cos((double) theta);
-      dy = (double) std::sin((double) theta);
-
-      /*** third loop : start positions ***/
-      for (pos = 0; pos < posmax; ++pos)
-        {
-
-        /* clear segment array */
-        iseg = 0;
-
-        /*** fourth loop : phase for two-spaced pixels ***/
-        for (lphase = 0; lphase < 2; lphase++)
-          {
-
-          /*** detect aligned points by blocs ***/
-          inbloc = nblocs = cur = l = count[0] = 0;
-          xx = ox + pos * mx + (int) (dx * (double) (l * 2 + lphase));
-          yy = oy + pos * my + (int) (dy * (double) (l * 2 + lphase));
-
-          for (; xx >= 0 && xx < nx && yy >= 0 && yy < ny; )
-            {
-            indexAngle[0] = xx;
-            indexAngle[1] = yy;
-            // indice  = yy*nx+xx
-            assert(indexAngle[0] < nx);
-            assert(indexAngle[1] < ny);
-            assert(indexAngle[0] >= 0);
-            assert(indexAngle[1] >= 0);
-
-            error = static_cast<double>(m_AngleImage->GetPixel(indexAngle));
-            if (error > -100.0)
-              {
-              error -= theta;
-              while (error <= -CONST_PI)
-                error += CONST_2PI;
-              while (error > CONST_PI)
-                error -= CONST_2PI;
-              if (error < 0.0) error = -error;
-              if (error < prec)
-                {
-                ++cur;
-                if (!inbloc)
-                  {
-                  startbloc[nblocs] = l;
-                  inbloc = 1;
-                  }
-                }
-              else
-                {
-                if (inbloc)
-                  {
-                  endbloc[nblocs] = l - 1;
-                  ++nblocs;
-                  count[nblocs] = cur;
-                  }
-                inbloc = 0;
-                }
-              }
-            /* compute next point */
-            ++l;
-            xx = ox + pos * mx + (int) (dx * (double) (l * 2 + lphase));
-            yy = oy + pos * my + (int) (dy * (double) (l * 2 + lphase));
-            }
-
-          /*** detect meaningful segments ***/
-          for (i = 0; i < nblocs; ++i)
-            for (j = i; j < nblocs; ++j)
-              if ((nfa = test[count[j + 1] - count[i]
-                              + (n + 1) * (1 + endbloc[j] - startbloc[i])]) < max_nfa)
-                {
-                seg[iseg].start = startbloc[i] * 2 + lphase;
-                seg[iseg].end = endbloc[j] * 2 + lphase;
-                seg[iseg].nfa = nfa;
-                seg[iseg].ok = 1;
-                iseg++;
-                /* reallocate if necessary */
-                if (iseg == size_seg)
-                  {
-                  size_seg = (size_seg * 3) / 2;
-                  seg.resize(size_seg);
-//      if (!seg)
-//        mwerror(FATAL, 1,"Not enough memory.");
-                  }
-                }
-          }
-        /*** end of phase loop ***/
-
-        /*** remove non-maximal segments ***/
-        if (!m_isMeaningfulSegment)
-          for (i = 0; i < iseg; ++i)
-            for (j = 0; j < iseg; ++j)
-              if (i != j)
-
-                /* seg[i] is included in seg[j] ? */
-                if (seg[i].start >= seg[j].start && seg[i].end <= seg[j].end)
-                  {
-
-                  /* remove the less meaningful of seg[i] and seg[j] */
-                  if (seg[i].nfa < seg[j].nfa) seg[j].ok = 0;
-                  else seg[i].ok = 0;
-
-                  }
-
-        /*** store detected segments ***/
-        for (i = 0; i < iseg; ++i)
-          if (seg[i].ok)
-            {
-            seglist[iseglist * 5] = (double) (ox + pos * mx) + dx * (double) (seg[i].start);
-            seglist[iseglist * 5 + 1] = (double) (oy + pos * my) + dy * (double) (seg[i].start);
-            seglist[iseglist * 5 + 2] = (double) (ox + pos * mx) + dx * (double) (seg[i].end);
-            seglist[iseglist * 5 + 3] = (double) (oy + pos * my) + dy * (double) (seg[i].end);
-            seglist[iseglist * 5 + 4] = -(double) log10(seg[i].nfa);
-            iseglist++;
-            /* reallocate seglist if necessary */
-            if (iseglist == size_seglist)
-              {
-              size_seglist = (size_seglist * 3) / 2;
-              seglist.resize(size_seglist);
-//        if (!seglist)
-//    mwerror(FATAL, 1,"Not enough memory.");
-              }
-            }
-        }
-      }
-    /*** end of second loop ***/
-
-    printf("   nb de segments: %d\n", iseglist);
-    }
-  /******************** end of first loop ********************/
-
-  seg.clear();
-  endbloc.clear();
-  startbloc.clear();
-  count.clear();
-  test.clear();
-
-  /* build segments list */
-  seglist.resize(5 * iseglist);
-
-  /* build segments list */
-  OutputPath->Clear();
-//  OutputPath->Resize(iseglist);
-
-  typedef typename OutputPathType::ContinuousIndexType ContinuousIndexType;
-  typename InputImageType::PointType point;
-
-  ContinuousIndexType cindex;
-  for (i = 0; i < iseglist; ++i)
-    {
-
-    OutputPathPointerType path = OutputPathType::New();
-
-    path->Initialize();
-    point[0] = seglist[i * 5];
-    point[1] = seglist[i * 5 + 1];
-    InputImage->TransformPhysicalPointToContinuousIndex(point, cindex);
-    path->AddVertex(cindex);
-    cindex[0] = seglist[i * 5 + 2];
-    cindex[1] = seglist[i * 5 + 3];
-    path->AddVertex(cindex);
-
-    OutputPath->PushBack(path);
-    }
-  itkDebugMacro(<< "ImageToPathListAlignFilter::GenerateData() finished");
-
-} // end update function
-
-template <class TInputImage, class TOutputPath>
-void
-ImageToPathListAlignFilter<TInputImage, TOutputPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-//  os << indent << "Size : " << m_Size << std::endl;
-//  os << indent << "Path Value : " << m_PathValue << std::endl;
-//  os << indent << "Background Value : " << m_BackgroundValue << std::endl;
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h
deleted file mode 100644
index 26b8f1c84b1ba6ab47644027d48b28e7d124a64f..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbLikelihoodPathListFilter_h
-#define otbLikelihoodPathListFilter_h
-
-#include "otbPathListToPathListFilter.h"
-#include "otbMacro.h"
-#include <string>
-
-namespace otb
-{
-/** \class LikelihoodPathListFilter
- *  \brief Affect a value to each path of the list based on the image
- *
- * PathList and image are given as an input, the filter affect a value to each
- * path: this value is equal to the sum of the pixels crossed by the path
- * (using a PolyLineImageConstIterator) divided by the number of points in the
- * path
- *
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TPath, class TImage>
-class ITK_EXPORT LikelihoodPathListFilter
-  : public PathListToPathListFilter<TPath>
-{
-public:
-  /** Standard typedefs */
-  typedef LikelihoodPathListFilter        Self;
-  typedef PathListToPathListFilter<TPath> Superclass;
-  typedef itk::SmartPointer<Self>         Pointer;
-  typedef itk::SmartPointer<const Self>   ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(LikelihoodPathListFilter, PathListToPathListFilter);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PathType          PathType;
-  typedef typename Superclass::PathListType      PathListType;
-  typedef typename Superclass::PathPointerType   PathPointerType;
-  typedef typename PathListType::Pointer         PathListPointerType;
-  typedef typename PathListType::ConstIterator   IteratorType;
-  typedef typename PathType::VertexType          VertexType;
-  typedef typename PathType::VertexListType      VertexListType;
-  typedef typename VertexListType::ConstIterator VertexIteratorType;
-  typedef double                                 RealType;
-
-  typedef TImage                           ImageType;
-  typedef typename ImageType::Pointer      ImagePointerType;
-  typedef typename ImageType::ConstPointer ImageConstPointerType;
-
-  /**
-   * Set the input Likelihood image.
-   * \param image The Likelihood image.
-   */
-  void SetInputImage(const ImageType * image);
-
-  /**
-   * Get the input Likelihood image.
-   * \return The input Likelihood image.
-   */
-  const ImageType * GetInputImage(void);
-
-protected:
-  /** Constructor */
-  LikelihoodPathListFilter();
-  /** Destructor */
-  ~LikelihoodPathListFilter() override {}
-  /** GenerateData method */
-  void GenerateData() override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  LikelihoodPathListFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  std::string m_Key;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbLikelihoodPathListFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.hxx b/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.hxx
deleted file mode 100644
index f1bcde145d843ae512d228c20b78da49c740f6ad..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbLikelihoodPathListFilter.hxx
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbLikelihoodPathListFilter_hxx
-#define otbLikelihoodPathListFilter_hxx
-
-#include "otbLikelihoodPathListFilter.h"
-#include "otbPolyLineImageConstIterator.h"
-#include "itkMetaDataObject.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TPath, class TImage>
-LikelihoodPathListFilter<TPath, TImage>
-::LikelihoodPathListFilter()
-{
-  m_Key = "Value";
-  this->SetNumberOfRequiredInputs(2);
-  this->SetNumberOfRequiredInputs(2);
-}
-template <class TPath, class TImage>
-void
-LikelihoodPathListFilter<TPath, TImage>
-::SetInputImage(const ImageType * image)
-{
-  this->itk::ProcessObject::SetNthInput(1, const_cast<ImageType *>(image));
-}
-template <class TPath, class TImage>
-const typename LikelihoodPathListFilter<TPath, TImage>
-::ImageType *
-LikelihoodPathListFilter<TPath, TImage>
-::GetInputImage(void)
-{
-  if (this->GetNumberOfInputs() < 1)
-    {
-    return nullptr;
-    }
-  return static_cast<const ImageType *>(this->itk::ProcessObject::GetInput(1));
-}
-
-template <class TPath, class TImage>
-void
-LikelihoodPathListFilter<TPath, TImage>
-::GenerateData()
-{
-  // I/O wiring
-  ImageConstPointerType inputImagePtr = this->GetInputImage();
-  const PathListType *  inputPtr  = this->GetInput();
-  PathListType *        outputPtr = this->GetOutput();
-
-  typedef otb::PolyLineImageConstIterator<ImageType, PathType> ImageIteratorType;
-
-  for (IteratorType it = inputPtr->Begin(); it != inputPtr->End(); ++it)
-    {
-    PathPointerType path = it.Get();
-    ImageIteratorType imageIt(inputImagePtr, path);
-    double cumulatedValues = 0.0;
-    double nbPoints = 0.0;
-    for (imageIt.GoToBegin(); !imageIt.IsAtEnd(); ++imageIt, ++nbPoints)
-      {
-      cumulatedValues += static_cast<double>(imageIt.Get());
-      }
-    itk::MetaDataDictionary& dict = path->GetMetaDataDictionary();
-    itk::EncapsulateMetaData<double>(dict, m_Key, cumulatedValues / nbPoints);
-    outputPtr->PushBack(path);
-    }
-}
-/**
- * PrintSelf Method
- */
-template <class TPath, class TImage>
-void
-LikelihoodPathListFilter<TPath, TImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h
deleted file mode 100644
index 6fb1aef06fff2f50bd862718d6a8763357afe71e..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbLinkPathListFilter_h
-#define otbLinkPathListFilter_h
-
-#include "otbPathListToPathListFilter.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/** \class LinkPathListFilter
- *  \brief This filters link path from the input path list according to distance and angular criterions.
- *
- *  This filter examines both ends of each path to link and is able to link several path into one single path.
- *  The two criterions to link a path are :
- *  - The two ends to link must be closer than the user defined threshold in terms of euclidean distance,
- *  - The angle at the link must not be sharp (less than the user defined threshold).
- *
- *  Please note that this filter may invert the order of the vertices in the newly created path.
- *
- *  This filter is part of the road extraction framework.
- *
-   * \sa ParallelLinePathListFilter
- *
-   * \ingroup PathFilters
- *
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TPath>
-class ITK_EXPORT LinkPathListFilter
-  : public PathListToPathListFilter<TPath>
-{
-public:
-  /** Standard typedefs */
-  typedef LinkPathListFilter              Self;
-  typedef PathListToPathListFilter<TPath> Superclass;
-  typedef itk::SmartPointer<Self>         Pointer;
-  typedef itk::SmartPointer<const Self>   ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(LinkPathListFilter, PathListToPathListFilter);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PathType          PathType;
-  typedef typename Superclass::PathListType      PathListType;
-  typedef typename Superclass::PathPointerType   PathPointerType;
-  typedef typename PathListType::Pointer         PathListPointerType;
-  typedef typename PathListType::ConstIterator   IteratorType;
-  typedef typename PathType::VertexType          VertexType;
-  typedef typename PathType::VertexListType      VertexListType;
-  typedef typename VertexListType::ConstIterator VertexIteratorType;
-  typedef double                                 RealType;
-
-  itkSetMacro(AngularThreshold, RealType);
-  itkGetMacro(AngularThreshold, RealType);
-  itkSetMacro(DistanceThreshold, RealType);
-  itkGetMacro(DistanceThreshold, RealType);
-  itkSetMacro(ModuloPI, bool);
-  itkGetMacro(ModuloPI, bool);
-
-protected:
-  /** Constructor */
-  LinkPathListFilter();
-  /** Destructor */
-  ~LinkPathListFilter() override {}
-  /** GenerateData method */
-  void GenerateData() override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  /**
-   * Verify the angular condition to link a path.
-   * \param v1 First vertex (before first path ending),
-   * \param v2 second vertex (first path ending),
-   * \param v3 third vertex (second path beginning),
-   * \param v4 fourth vertex (second path after beginning),
-   * \return True or false whether the condition is verified or not.
-   **/
-  bool VerifyAngularCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4);
-
-  /**
-   * Actually link the end of path p1 to the beginning of path p2.
-   * \param p1 First path to link,
-   * \param revert1 whether p1 need to be reverted or not,
-   * \param p2 second path to link,
-   * \param revert2 whether p2 need to be reverted or not,
-   * \return the linked path.
-   */
-  PathPointerType LinkPath(PathPointerType p1, bool revert1, PathPointerType p2, bool revert2);
-
-private:
-  LinkPathListFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  RealType m_AngularThreshold;
-  RealType m_DistanceThreshold;
-
-  /// Do not use the sign of the orientation of the lines
-  bool m_ModuloPI;
-
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbLinkPathListFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.hxx b/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.hxx
deleted file mode 100644
index 7b2570338264626746d1614b3c6967d9718877b4..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbLinkPathListFilter.hxx
+++ /dev/null
@@ -1,317 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbLinkPathListFilter_hxx
-#define otbLinkPathListFilter_hxx
-
-#include "otbLinkPathListFilter.h"
-#include "otbMath.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TPath>
-LinkPathListFilter<TPath>
-::LinkPathListFilter()
-{
-  m_DistanceThreshold = 10.;
-  m_AngularThreshold = 3.14;
-  m_ModuloPI = false;
-}
-
-template <class TPath>
-void
-LinkPathListFilter<TPath>
-::GenerateData()
-{
-  // IO
-  const PathListType * inputPtr  = this->GetInput();
-  PathListType *       outputPtr = this->GetOutput();
-
-  // Input iterator
-  IteratorType inputIt = inputPtr->Begin();
-
-  std::vector<bool> eraseFlagVector;
-
-  // First we copy all input path to output
-  while (inputIt != inputPtr->End())
-    {
-    outputPtr->PushBack(inputIt.Get());
-    eraseFlagVector.push_back(false);
-    ++inputIt;
-    }
-
-  IteratorType outputIt1 = outputPtr->Begin();
-  unsigned int index1 = 0;
-
-  while (outputIt1 != outputPtr->End())
-    {
-    if (!eraseFlagVector[index1])
-      {
-      IteratorType outputIt2 = outputIt1;
-      ++outputIt2;
-      // indicate if a path was found and wath is its index
-      unsigned int pathToLinkIndex = 0;
-      double       distance = -1.0;
-      unsigned int index2 = index1 + 1;
-      bool         found = false;
-      bool         revert1 = false;
-      bool         revert2 = false;
-      if (!eraseFlagVector[index1])
-        {
-        while (outputIt2 != outputPtr->End())
-          {
-          if (!eraseFlagVector[index2])
-            {
-            //otbMsgDevMacro(<<"Examining links between path "<<index1<<" and path "<<index2);
-            // Examining end of path1 with beginning of path2
-            VertexIteratorType vSourceIt = outputIt1.Get()->GetVertexList()->End();
-            VertexIteratorType vTargetIt = outputIt2.Get()->GetVertexList()->Begin();
-            --vSourceIt;
-            VertexType v2 = vSourceIt.Value();
-            --vSourceIt;
-            VertexType v1 = vSourceIt.Value();
-            VertexType v3 = vTargetIt.Value();
-            ++vTargetIt;
-            VertexType v4 = vTargetIt.Value();
-            double     tmpDistance = std::sqrt(std::pow(v2[0] - v3[0], 2) + std::pow(v2[1] - v3[1], 2));
-            if ((tmpDistance < static_cast<double>(m_DistanceThreshold)) && ((!found) || (tmpDistance < distance)))
-              {
-              if (VerifyAngularCondition(v1, v2, v3, v4))
-                {
-                // we found a better candidate
-                //otbMsgDevMacro(<<"Link between end of path "<<index1<<" and beginning of path "<<index2<<" is currently the best choice");
-                distance = tmpDistance;
-                pathToLinkIndex = index2;
-                revert1 = false;
-                revert2 = false;
-                if (!found)
-                  {
-                  found = true;
-                  }
-                }
-              }
-            // Examining end of path1 with end of path2
-            vTargetIt = outputIt2.Get()->GetVertexList()->End();
-            --vTargetIt;
-            v3 = vTargetIt.Value();
-            --vTargetIt;
-            v4 = vTargetIt.Value();
-            tmpDistance = std::sqrt(std::pow(v2[0] - v3[0], 2) + std::pow(v2[1] - v3[1], 2));
-
-            if ((tmpDistance < static_cast<double>(m_DistanceThreshold)) && ((!found) || (tmpDistance < distance)))
-              {
-              if (VerifyAngularCondition(v1, v2, v3, v4))
-                {
-                // we found a better candidate
-                //otbMsgDevMacro(<<"Link between end of path "<<index1<<" and end of path "<<index2<<" is currently the best choice");
-                distance = tmpDistance;
-                pathToLinkIndex = index2;
-                revert1 = false;
-                revert2 = true;
-                if (!found)
-                  {
-                  found = true;
-                  }
-                }
-              }
-            // Examining beginning of path1 with end of path2
-            vSourceIt = outputIt1.Get()->GetVertexList()->Begin();
-            v2 = vSourceIt.Value();
-            ++vSourceIt;
-            v1 = vSourceIt.Value();
-            tmpDistance = std::sqrt(std::pow(v2[0] - v3[0], 2) + std::pow(v2[1] - v3[1], 2));
-
-            if ((tmpDistance < static_cast<double>(m_DistanceThreshold)) && ((!found) || (tmpDistance < distance)))
-              {
-              if (VerifyAngularCondition(v1, v2, v3, v4))
-                {
-                // we found a better candidate
-                //otbMsgDevMacro(<<"Link between beginning of path "<<index1<<" and end of path "<<index2<<" is currently the best choice");
-                distance = tmpDistance;
-                pathToLinkIndex = index2;
-                revert1 = true;
-                revert2 = true;
-                if (!found)
-                  {
-                  found = true;
-                  }
-                }
-              }
-            // Examining beginning of path1 with beginning of path2
-            vTargetIt = outputIt2.Get()->GetVertexList()->Begin();
-            v3 = vTargetIt.Value();
-            ++vTargetIt;
-            v4 = vTargetIt.Value();
-            tmpDistance = std::sqrt(std::pow(v2[0] - v3[0], 2) + std::pow(v2[1] - v3[1], 2));
-            if ((tmpDistance < static_cast<double>(m_DistanceThreshold)) && ((!found) || (tmpDistance < distance)))
-              {
-              if (VerifyAngularCondition(v1, v2, v3, v4))
-                {
-                // we found a better candidate
-                //otbMsgDevMacro(<<"Link between beginning of path "<<index1<<" and beginning of path "<<index2<<" is currently the best choice");
-                distance = tmpDistance;
-                pathToLinkIndex = index2;
-                revert1 = true;
-                revert2 = false;
-                if (!found)
-                  {
-                  found = true;
-                  }
-                }
-              }
-            }
-          ++index2;
-          ++outputIt2;
-          }
-        if (found)
-          {
-          //otbMsgDevMacro(<<"Search ended, merging path "<<index1<<" and path "<<pathToLinkIndex);
-          // an appropriate path was found
-          outputIt2 = outputPtr->Begin() + pathToLinkIndex;
-          PathPointerType newPath = this->LinkPath(outputIt1.Get(), revert1, outputIt2.Get(), revert2);
-          outputPtr->PushBack(newPath);
-          // add a non erased flag for the new path
-          eraseFlagVector.push_back(false);
-          // mark the old path as erased
-          eraseFlagVector[index1] = true;
-          eraseFlagVector[pathToLinkIndex] = true;
-          }
-        }
-      }
-    ++index1;
-    // This replaces ++outputIt1 because the iterators is somehow invalidated by a pushback.
-    outputIt1 = outputPtr->Begin() + index1;
-    }
-
-  // search ended, now removing the erased path
-  typename std::vector<bool>::reverse_iterator it = eraseFlagVector.rbegin();
-  index1 = eraseFlagVector.size() - 1;
-  while (it != eraseFlagVector.rend())
-    {
-    if (eraseFlagVector[index1])
-      {
-      outputPtr->Erase(index1);
-      }
-    --index1;
-    ++it;
-    }
-}
-/**
- * Verify the angular condition to link a path.
- * \param v1 First vertex (before first path ending),
- * \param v2 second vertex (first path ending),
- * \param v3 third vertex (second path beginning),
- * \param v4 fourth vertex (second path after beginning),
- * \return True or false whether the condition is verified or not.
- **/
-template <class TPath>
-bool
-LinkPathListFilter<TPath>
-::VerifyAngularCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4)
-{
-  double alpha1 = std::atan2((v2[1] - v1[1]), (v2[0] - v1[0]));
-  double alpha2 = std::atan2((v4[1] - v3[1]), (v4[0] - v3[0]));
-  double alpha3 = std::atan2((v3[1] - v2[1]), (v3[0] - v2[0]));
-
-  if (m_ModuloPI)
-    {
-    alpha1 = (alpha1 >= 0) ? alpha1 : (alpha1 + CONST_PI);
-    alpha2 = (alpha2 >= 0) ? alpha2 : (alpha2 + CONST_PI);
-    alpha3 = (alpha3 >= 0) ? alpha3 : (alpha3 + CONST_PI);
-    }
-  else
-    {
-    alpha1 = (alpha1 >= 0) ? alpha1 : (alpha1 + CONST_2PI);
-    alpha2 = (alpha2 >= 0) ? alpha2 : (alpha2 + CONST_2PI);
-    alpha3 = (alpha3 >= 0) ? alpha3 : (alpha3 + CONST_2PI);
-    }
-
-  bool resp = (std::abs(alpha1 - alpha2) < static_cast<double>(m_AngularThreshold))
-              && (std::abs(alpha1 - alpha3) < static_cast<double>(m_AngularThreshold))
-              && (std::abs(alpha2 - alpha3) < static_cast<double>(m_AngularThreshold));
-  return resp;
-}
-/**
- * Actually link the end of path p1 to the beginning of path p2.
- * \param p1 First path to link,
- * \param revert1 whether p1 need to be reverted or not,
- * \param p2 second path to link,
- * \param revert2 whether p2 need to be reverted or not,
- * \return the linked path.
- */
-template <class TPath>
-typename LinkPathListFilter<TPath>
-::PathPointerType
-LinkPathListFilter<TPath>
-::LinkPath(PathPointerType p1, bool revert1, PathPointerType p2, bool revert2)
-{
-  PathPointerType resp = PathType::New();
-
-  VertexIteratorType it;
-
-  if (revert1)
-    {
-    for (it = (p1->GetVertexList()->End()); it != p1->GetVertexList()->Begin(); )
-      {
-      --it;
-      resp->AddVertex((it).Value());
-      }
-    }
-  else
-    {
-    for (it = p1->GetVertexList()->Begin(); it != p1->GetVertexList()->End(); ++it)
-      {
-      resp->AddVertex((it).Value());
-      }
-    }
-
-  if (revert2)
-    {
-    for (it = (p2->GetVertexList()->End()); it != p2->GetVertexList()->Begin(); )
-      {
-      --it;
-      resp->AddVertex((it).Value());
-      }
-    }
-  else
-    {
-    for (it = p2->GetVertexList()->Begin(); it != p2->GetVertexList()->End(); ++it)
-      {
-      resp->AddVertex(it.Value());
-      }
-    }
-  return resp;
-}
-/**
- * PrintSelf Method
- */
-template <class TPath>
-void
-LinkPathListFilter<TPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h b/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h
deleted file mode 100644
index 9406349db143cd333c4ad3359a4196c38667bde8..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbModulusAndDirectionImageToImageFilter_h
-#define otbModulusAndDirectionImageToImageFilter_h
-
-#include "itkImageToImageFilter.h"
-
-namespace otb
-{
-
-/** \class ModulusAndDirectionImageToImageFilter
- *
- * \brief Base class for modulus and direction image filters.
- *
- * This is the base class for alls class' generate an image dulus and
- * by using an modulus and a direction images intputs.
- * SetInput() method set the modulus image input and
- * SetInputDirection() set the image direction input.
- *
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInputImage,
-    class TInputImageDirection,
-    class TOutputImage>
-class ITK_EXPORT ModulusAndDirectionImageToImageFilter :  public itk::ImageToImageFilter<TInputImage, TOutputImage>
-{
-public:
-  /**   Extract dimensions as well of the images of entry of exit. */
-  itkStaticConstMacro(InputImageDimension,
-                      unsigned int,
-                      TInputImage::ImageDimension);
-  itkStaticConstMacro(OutputImageDimension,
-                      unsigned int,
-                      TOutputImage::ImageDimension);
-
-  /** typedef for the classes standards. */
-  typedef ModulusAndDirectionImageToImageFilter              Self;
-  typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                            Pointer;
-  typedef itk::SmartPointer<const Self>                      ConstPointer;
-
-  /** Method for management of the object factory. */
-  itkNewMacro(Self);
-
-  /** Return the name of the class. */
-  itkTypeMacro(ModulusAndDirectionImageToImageFilter, itk::ImageToImageFilter);
-
-  typedef typename Superclass::InputImageType  InputImageType;
-  typedef TInputImageDirection                 InputImageDirectionType;
-  typedef typename Superclass::OutputImageType OutputImageType;
-
-  /** Set/Get the image input of this process object.  */
-  using Superclass::SetInput;
-  void SetInput(const InputImageType *input) override;
-  virtual void SetInputDirection(const InputImageDirectionType *direction);
-  const InputImageType * GetInput(void);
-  const InputImageDirectionType * GetInputDirection(void);
-
-protected:
-  ModulusAndDirectionImageToImageFilter();
-  ~ModulusAndDirectionImageToImageFilter() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  ModulusAndDirectionImageToImageFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-};
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbModulusAndDirectionImageToImageFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.hxx b/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.hxx
deleted file mode 100644
index 159b2b95d789e01d3d855e773007fa7ad30e51e1..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbModulusAndDirectionImageToImageFilter.hxx
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbModulusAndDirectionImageToImageFilter_hxx
-#define otbModulusAndDirectionImageToImageFilter_hxx
-
-#include "otbModulusAndDirectionImageToImageFilter.h"
-#include "itkProcessObject.h"
-
-namespace otb
-{
-
-/**
- *
- */
-template <class TInputImage, class TOutputImage, class TOutputImageDirection>
-ModulusAndDirectionImageToImageFilter<TInputImage, TOutputImage, TOutputImageDirection>::
-ModulusAndDirectionImageToImageFilter()
-{
-  this->SetNumberOfRequiredInputs(2);
-  this->SetNumberOfRequiredInputs(2);
-  this->SetNumberOfRequiredOutputs(1);
-  this->SetNumberOfRequiredOutputs(1);
-
-  this->SetNthOutput(0, OutputImageType::New());
-}
-
-template <class TInputImage, class TInputImageDirection, class TOutputImage>
-void
-ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>::
-SetInput(const InputImageType *input)
-{
-  // Process object is not const-correct so the const_cast is required here
-  this->itk::ProcessObject::SetNthInput(0,
-                                        const_cast<InputImageType *>(input));
-}
-
-template <class TInputImage, class TInputImageDirection, class TOutputImage>
-void
-ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>::
-SetInputDirection(const InputImageDirectionType *direction)
-{
-  // Process object is not const-correct so the const_cast is required here
-  this->itk::ProcessObject::SetNthInput(1,
-                                        const_cast<InputImageDirectionType *>(direction));
-}
-
-/** Return the input image modulus */
-template <class TInputImage, class TInputImageDirection, class TOutputImage>
-const typename ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>::InputImageType *
-ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>::
-GetInput(void)
-{
-  if (this->GetNumberOfInputs() < 1)
-    {
-    return nullptr;
-    }
-
-  return static_cast<const TInputImage *>
-           (this->itk::ProcessObject::GetInput(0));
-}
-
-/** Return the intput image direction */
-template <class TInputImage, class TInputImageDirection, class TOutputImage>
-const typename ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection,
-    TOutputImage>::InputImageDirectionType *
-ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>::
-GetInputDirection(void)
-{
-  if (this->GetNumberOfInputs() < 2)
-    {
-    return nullptr;
-    }
-
-  return static_cast<const TInputImageDirection *>
-           (this->itk::ProcessObject::GetInput(1));
-
-}
-
-/**
- * Standard "PrintSelf" method
- */
-template <class TInputImage, class TInputImageDirection, class TOutputImage>
-void
-ModulusAndDirectionImageToImageFilter<TInputImage, TInputImageDirection, TOutputImage>::
-PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h b/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h
deleted file mode 100644
index b5f2ccb57daa26d30ec5aa8ab1137b312f3e8db6..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.h
+++ /dev/null
@@ -1,111 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNeighborhoodScalarProductFilter_h
-#define otbNeighborhoodScalarProductFilter_h
-
-#include "otbImageToModulusAndDirectionImageFilter.h"
-
-namespace otb
-{
-/** \class NeighborhoodScalarProductFilter
- *  \brief This filter is designed to be part of a pipeline aiming at linear feature extraction, such as roads.
- *
- *  This filter takes as input a two-band image resulting from a gradient operator. The first channel contains
- *  the gradient value in the first image direction, the second contains the gradient value in the second image direction.
- *
- *  Assuming that the linear feature we want to detect is darker than its surrounding environnement, we can deduce that
- *  the gradient direction will be opposite on each side of the road. Therefore, we compute for each pixel to compute the scalar
- *  product of the gradient vector for each opposite pixels in the neighborhood of radius 1 of the pixel to compute.
- *
- * The lower negativ scalar product value along these four pairs of pixel gives us the direction in which there is most
- * likely a linear feature.
- *
- * This filters has two outputs :
- * - The first output (from the GetOutput() method) gives the modulus of the lower negativ scalar product value for this pixel.
- * - The second output (from the GetOutputDirection() method) gives the direction in radian of this linear feature.
- *
- * Please note that there are only 8 possible values for the direction image, corresponding to two directions for each pair of opposite
- * pixels. In our conventions, negatives angle values represent opposite gradient vectors, whereas positive angle values represent convergent
- * gradient vectors.
- *  \ingroup Streamed
- *  \ingroup Threaded
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInputImage, class TOutputModulus, class TOutputDirection>
-class ITK_EXPORT NeighborhoodScalarProductFilter
-  : public ImageToModulusAndDirectionImageFilter<TInputImage, TOutputModulus, TOutputDirection>
-{
-public:
-  /** Standard typedefs */
-  typedef NeighborhoodScalarProductFilter                                                      Self;
-  typedef ImageToModulusAndDirectionImageFilter<TInputImage, TOutputModulus, TOutputDirection> Superclass;
-  typedef itk::SmartPointer<Self>                                                              Pointer;
-  typedef itk::SmartPointer<const Self>                                                        ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(NeighborhoodScalarProductFilter, ImageToModulusAndDirectionImageFilter);
-
-  /** Template parameters typedefs */
-  typedef TInputImage                              InputImageType;
-  typedef typename InputImageType::ConstPointer    InputImageConstPointerType;
-  typedef typename InputImageType::PixelType       InputPixelType;
-  typedef TOutputModulus                           OutputModulusType;
-  typedef typename OutputModulusType::Pointer      OutputModulusPointerType;
-  typedef typename OutputModulusType::RegionType   RegionType;
-  typedef typename OutputModulusType::SizeType     SizeType;
-  typedef typename OutputModulusType::IndexType    IndexType;
-  typedef TOutputDirection                         OutputDirectionType;
-  typedef typename OutputDirectionType::Pointer    OutputDirectionPointerType;
-  typedef typename OutputDirectionType::RegionType OutputImageRegionType;
-
-protected:
-  /** Constructor */
-  NeighborhoodScalarProductFilter();
-  /** Destructor */
-  ~NeighborhoodScalarProductFilter() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** NeighborhoodScalarProductImageFilter can be implemented as a multithreaded filter.
-   * Therefore, this implementation provides a ThreadedGenerateData() routine
-   * which is called for each processing thread. The output image data is
-   * allocated automatically by the superclass prior to calling
-   * ThreadedGenerateData().  ThreadedGenerateData can only write to the
-   * portion of the output image specified by the parameter
-   * "outputRegionForThread"
-   *
-   * \sa ImageToImageFilter::ThreadedGenerateData(),
-   *     ImageToImageFilter::GenerateData()  */
-  void ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread,
-                            itk::ThreadIdType threadId) override;
-private:
-  NeighborhoodScalarProductFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbNeighborhoodScalarProductFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.hxx b/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.hxx
deleted file mode 100644
index a2f66c9a02e6430f105d371e4ff41002f8b8beba..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbNeighborhoodScalarProductFilter.hxx
+++ /dev/null
@@ -1,181 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNeighborhoodScalarProductFilter_hxx
-#define otbNeighborhoodScalarProductFilter_hxx
-
-#include "otbNeighborhoodScalarProductFilter.h"
-#include "itkImageRegionIterator.h"
-#include "itkConstNeighborhoodIterator.h"
-#include "itkNeighborhoodAlgorithm.h"
-#include "itkProgressReporter.h"
-
-#include "otbMath.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputModulus, class TOutputDirection>
-NeighborhoodScalarProductFilter<TInputImage, TOutputModulus, TOutputDirection>
-::NeighborhoodScalarProductFilter()
-{}
-
-template <class TInputImage, class TOutputModulus, class TOutputDirection>
-void
-NeighborhoodScalarProductFilter<TInputImage, TOutputModulus, TOutputDirection>
-::ThreadedGenerateData(const OutputImageRegionType& outputRegionForThread, itk::ThreadIdType threadId)
-{
-  // some typedefs
-  typedef itk::ConstNeighborhoodIterator<InputImageType>                           NeighborhoodIteratorType;
-  typedef typename NeighborhoodIteratorType::RadiusType                            RadiusType;
-  typedef typename NeighborhoodIteratorType::OffsetType                            OffsetType;
-  typedef itk::ImageRegionIterator<OutputModulusType>                              OutputIteratorType;
-  typedef itk::ImageRegionIterator<OutputDirectionType>                            OutputDirectionIteratorType;
-  typedef itk::NeighborhoodAlgorithm::ImageBoundaryFacesCalculator<InputImageType> BoundaryFacesCalculatorType;
-  typedef typename BoundaryFacesCalculatorType::FaceListType                       FaceListType;
-  typedef typename FaceListType::iterator                                          FaceListIteratorType;
-
-  // Pointers on inputs/outputs
-  InputImageType *           inputPtr = const_cast<InputImageType *>(this->GetInput());
-  OutputModulusPointerType   outputPtr = this->GetOutput();
-  OutputDirectionPointerType outputDirPtr = this->GetOutputDirection();
-
-  // Neighborhood radius
-  RadiusType r;
-  r.Fill(1);
-
-  // Find the data-set boundary "faces"
-  BoundaryFacesCalculatorType bC;
-  FaceListType                faceList = bC(inputPtr, outputRegionForThread, r);
-  FaceListIteratorType        fit;
-
-  // support progress methods/callbacks
-  itk::ProgressReporter progress(this, threadId, outputRegionForThread.GetNumberOfPixels());
-
-  // Process each of the boundary faces.  These are N-d regions which border
-  // the edge of the buffer.
-  for (fit = faceList.begin(); fit != faceList.end(); ++fit)
-    {
-    NeighborhoodIteratorType neighInputIt(r, inputPtr, *fit);
-    OutputIteratorType outputIt(outputPtr, *fit);
-    OutputDirectionIteratorType outputDirIt(outputDirPtr, *fit);
-    neighInputIt.GoToBegin();
-    outputIt.GoToBegin();
-    outputDirIt.GoToBegin();
-
-    while ((!neighInputIt.IsAtEnd()) && (!outputIt.IsAtEnd()) && (!outputDirIt.IsAtEnd()))
-      {
-      // local variable initialization
-      int    neighborhoodNumberMax = 0;
-      double scalarMaxValue = 0;
-      //TODO for a more general algorithm this might be replaced by:
-      //double scalarMaxValue = itk::NumericTraits<double>::NonpositiveMin();
-      int flagPosNegDirection = 0;
-
-      // walk through each case
-      for (int neighborhoodNumber = 0; neighborhoodNumber < 4; ++neighborhoodNumber)
-        {
-        double     scalarCurrentValue = 0.0;
-        OffsetType offset1;
-        OffsetType offset2;
-        switch (neighborhoodNumber)
-          {
-          case 0:
-            offset1[0] = 1;
-            offset1[1] = -1;
-            offset2[0] = -1;
-            offset2[1] = 1;
-            break;
-          case 1:
-            offset1[0] = 1;
-            offset1[1] = 0;
-            offset2[0] = -1;
-            offset2[1] = 0;
-            break;
-          case 2:
-            offset1[0] = 1;
-            offset1[1] = 1;
-            offset2[0] = -1;
-            offset2[1] = -1;
-            break;
-          case 3:
-            offset1[0] = 0;
-            offset1[1] = 1;
-            offset2[0] = 0;
-            offset2[1] = -1;
-            break;
-          }
-        // Get the gradient values
-        InputPixelType pixel1 = neighInputIt.GetPixel(offset1);
-        InputPixelType pixel2 = neighInputIt.GetPixel(offset2);
-
-        // Compute the scalar product
-        scalarCurrentValue = -(pixel1[0] * pixel2[0] + pixel1[1] * pixel2[1]);
-
-        // If the value is higher than the current max value
-        if (scalarCurrentValue > scalarMaxValue)
-          {
-          // keep this configuration
-          scalarMaxValue = scalarCurrentValue;
-          neighborhoodNumberMax = neighborhoodNumber;
-
-          // Also keep the direction
-          if (pixel1[0] < 0)
-            {
-            flagPosNegDirection = 1;
-            }
-          else
-            {
-            flagPosNegDirection = 0;
-            }
-
-          }
-        }
-      // Compute the direction
-      double angle = static_cast<double>((1 + neighborhoodNumberMax)) * static_cast<double>(CONST_PI_4);
-      if (flagPosNegDirection)
-        {
-        angle -= CONST_PI;
-        }
-
-      // Set the output values
-      outputIt.Set(scalarMaxValue);
-      outputDirIt.Set(angle);
-      ++neighInputIt;
-      ++outputIt;
-      ++outputDirIt;
-      progress.CompletedPixel();
-      }
-    }
-}
-/**
- * PrintSelf Method
- */
-template <class TInputImage, class TOutputModulus, class TOutputDirection>
-void
-NeighborhoodScalarProductFilter<TInputImage, TOutputModulus, TOutputDirection>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h
deleted file mode 100644
index 4e6d12cce270fde7ccf6d77c7be4c8e4b55b7ae4..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbNonMaxRemovalByDirectionFilter.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNonMaxRemovalByDirectionFilter_h
-#define otbNonMaxRemovalByDirectionFilter_h
-
-#include "otbModulusAndDirectionImageToImageFilter.h"
-#include "otbBinaryFunctorNeighborhoodImageFilter.h"
-
-#include "otbMath.h"
-
-namespace otb
-{
-namespace Functor
-{
-/** \class NonMaxRemovalByDirectionFunctor
- *  \brief This functor is used by the NonMaxRemovalByDirectionFilter
- *  \sa NonMaxRemovalByDirectionFilter
- *  \ingroup Functor
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInput1, class TInput2, class TOutput>
-class NonMaxRemovalByDirectionFunctor
-{
-public:
-  NonMaxRemovalByDirectionFunctor() {}
-  virtual ~NonMaxRemovalByDirectionFunctor() {}
-  inline TOutput operator ()(const TInput1& itA, const TInput2& itB)
-  {
-    TOutput resp = 0;
-    if (itA.GetCenterPixel() != 0)
-      {
-      typename TInput1::OffsetType offset1, offset2;
-      offset1.Fill(0);
-      offset2.Fill(0);
-      int neighborhoodNumber;
-      if (itB.GetCenterPixel() > 0)
-        {
-        neighborhoodNumber = static_cast<int>(itB.GetCenterPixel() / (CONST_PI_4) -1);
-        }
-      else
-        {
-        neighborhoodNumber = static_cast<int>((itB.GetCenterPixel() + CONST_PI) / (CONST_PI_4) -1);
-        }
-      switch (neighborhoodNumber)
-        {
-        case 0:
-          offset1[0] =  1;
-          offset1[1] = -1;
-          offset2[0] = -1;
-          offset2[1] =  1;
-          break;
-        case 1:
-          offset1[0] =  1;
-          offset1[1] =  0;
-          offset2[0] = -1;
-          offset2[1] =  0;
-          break;
-        case 2:
-          offset1[0] =  1;
-          offset1[1] =  1;
-          offset2[0] = -1;
-          offset2[1] = -1;
-          break;
-        case 3:
-          offset1[0] =  0;
-          offset1[1] =  1;
-          offset2[0] =  0;
-          offset2[1] = -1;
-          break;
-        }
-      if ((itA.GetCenterPixel() > itA.GetPixel(offset1))
-          && (itA.GetCenterPixel() > itA.GetPixel(offset2)))
-        {
-        resp =  itA.GetCenterPixel();
-        }
-      }
-    return resp;
-  }
-};
-}
-/** \class NonMaxRemovalByDirectionFilter
- *  \brief This filters removes (sets to null intensity) pixels which are not the maxima of the
- *  scalar product modulus value in the given direction.
- *
- * \ingroup Streamed
- * \ingroup Threaded
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInputModulus, class TInputDirection, class TOutputImage>
-class ITK_EXPORT NonMaxRemovalByDirectionFilter
-  : public ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef NonMaxRemovalByDirectionFilter                                                      Self;
-  typedef ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                                                             Pointer;
-  typedef itk::SmartPointer<const Self>                                                       ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(NonMaxRemovalByDirectionFilter, ModulusAndDirectionImageToImageFilter);
-
-  /** typedef of the computing filter (this allows us to derive from ModulusAndDirectionToImageFilter as well as
-      using the BinaryFunctorNeighBorhoodImageFilter, which is appropriate here */
-  typedef Functor::NonMaxRemovalByDirectionFunctor<
-      typename itk::ConstNeighborhoodIterator<TInputModulus>,
-      typename itk::ConstNeighborhoodIterator<TInputDirection>,
-      typename TOutputImage::PixelType>  FunctorType;
-  typedef otb::BinaryFunctorNeighborhoodImageFilter<TInputModulus, TInputDirection, TOutputImage,
-      FunctorType> ComputingFilterType;
-
-protected:
-  /** Constructor */
-  NonMaxRemovalByDirectionFilter() {};
-  /** Destructor */
-  ~NonMaxRemovalByDirectionFilter() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override
-  {
-    Superclass::PrintSelf(os, indent);
-  }
-  /** Main computation method */
-  void GenerateData(void) override
-  {
-    typename ComputingFilterType::Pointer filter = ComputingFilterType::New();
-    filter->SetInput1(this->GetInput());
-    filter->SetInput2(this->GetInputDirection());
-    filter->GraftOutput(this->GetOutput());
-    filter->Update();
-    this->GraftOutput(filter->GetOutput());
-  }
-
-private:
-  NonMaxRemovalByDirectionFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h b/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h
deleted file mode 100644
index 3cabe035adffb2aca8f72e1c236dbe930767dcf5..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbParallelLinePathListFilter_h
-#define otbParallelLinePathListFilter_h
-
-#include "otbPathListToPathListFilter.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/** \class ParallelLinePathListFilter
- *  \brief Detects parallel lines in imagery, the required input data are a PathList object.
- *
- * The class consists of three basic functions that determine the angle between two lines,
- * the distance between the lines and the common part of the lines. First, all input lines
- * are checked if there is a second line running in the same direction. Thereafter, all line
- * pairs that already fulfilled the angular criterion are checked whether they are close to
- * each other or not, i.e. the orthogonal distance between them is calculated. Finally, it
- * has to be verified if the two lines have a common part since lines may fulfill the two
- * first criteria but be located in different parts of the image. In order to adapt the
- * detection algorithm to the user's needs, the thresholds AngularThreshold, DistanceThreshold
- * and CommonDistanceThreshold can be set.
- *
- * A possible processing chain would be to extract lines with a line detector, to convert the
- * result to PathList object (an ObjectList of PolyLineParametricPath), to link short line
- * segments with the otbLinkPathListFilter to longer lines and to finally detect all parallel
- * long lines.
- *
-   * \sa LinkPathListFilter
- *
-   * \ingroup PathFilters
- *
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TPath>
-class ITK_EXPORT ParallelLinePathListFilter
-  : public PathListToPathListFilter<TPath>
-{
-public:
-  /** Standard typedefs */
-  typedef ParallelLinePathListFilter      Self;
-  typedef PathListToPathListFilter<TPath> Superclass;
-  typedef itk::SmartPointer<Self>         Pointer;
-  typedef itk::SmartPointer<const Self>   ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(ParallelLinePathListFilter, PathListToPathListFilter);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PathType          PathType;
-  typedef typename Superclass::PathListType      PathListType;
-  typedef typename Superclass::PathPointerType   PathPointerType;
-  typedef typename PathListType::Pointer         PathListPointerType;
-  typedef typename PathListType::ConstIterator   IteratorType;
-  typedef typename PathType::VertexType          VertexType;
-  typedef typename PathType::VertexListType      VertexListType;
-  typedef typename VertexListType::ConstIterator VertexIteratorType;
-  typedef double                                 RealType;
-
-  itkSetMacro(AngularThreshold, RealType);
-  itkGetMacro(AngularThreshold, RealType);
-  itkSetMacro(DistanceThreshold, RealType);
-  itkGetMacro(DistanceThreshold, RealType);
-  itkSetMacro(CommonDistanceThreshold, RealType);
-  itkGetMacro(CommonDistanceThreshold, RealType);
-
-protected:
-  /** Constructor */
-  ParallelLinePathListFilter();
-  /** Destructor */
-  ~ParallelLinePathListFilter() override {}
-  /** GenerateData method */
-  void GenerateData() override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  /**
-  * Verify the angular condition to find parallel lines.
-  * This function verifies if two lines are parallel by
-  * computing the angle in relation to the y-axis.
-  * First line segment: v1 is the first vertex, v2 the second one
-  * (not necessarily the path ending).
-  * Second line segment: v3 is the first vertex, v4 the second one
-  * (not necessarily the path ending).
-  * Return true if the condition is verified.
-  *
-  * This is the first criteria to be fulfilled.
-  **/
-  bool VerifyAngularCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4);
-
-  /**
-  * Verify the maximum distance condition to find parallel lines.
-  * The orthogonal distance between two parallel lines is calculated.
-  * First line segment: v1 is the first vertex, v2 the second one
-  * (not necessarily the path ending).
-  * Second line segment: v3 is the first vertex, v4 the second one
-  * (not necessarily the path ending).
-  * Return true if the condition is verified.
-  *
-  * This is the second criteria to be fulfilled.
-  **/
-  bool VerifyMaxDistanceCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4);
-
-  /**
-  * Verify the common distance condition to find parallel lines.
-  * The overlapping part of the parallel lines is computed. In case
-  * no overlapping part exists or the value is below the specified
-  * threshold, false is returned.
-  * First line segment: v1 is the first vertex, v2 the second one
-  * (not necessarily the path ending).
-  * Second line segment: v3 is the first vertex, v4 the second one
-  * (not necessarily the path ending).
-  * Return true if the condition is verified.
-  *
-  * This is the third criteria to be fulfilled.
-  **/
-  bool VerifyCommonDistanceCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4);
-
-  /**
-   * Write the first parallel path.
-   * p1: First parallel path (line segment),
-   */
-  PathPointerType WriteParallelPath(PathPointerType p1);
-
-private:
-  ParallelLinePathListFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  RealType m_AngularThreshold;
-  RealType m_DistanceThreshold;
-  RealType m_CommonDistanceThreshold;
-
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbParallelLinePathListFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.hxx b/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.hxx
deleted file mode 100644
index 44eb3c082fa64a768954134cb6fa251f40f6e99f..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbParallelLinePathListFilter.hxx
+++ /dev/null
@@ -1,536 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbParallelLinePathListFilter_hxx
-#define otbParallelLinePathListFilter_hxx
-
-#include "otbParallelLinePathListFilter.h"
-#include "otbMath.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TPath>
-ParallelLinePathListFilter<TPath>
-::ParallelLinePathListFilter()
-{
-  m_DistanceThreshold = 100.;
-  m_CommonDistanceThreshold = 10.;
-  m_AngularThreshold = 3.14;
-}
-
-template <class TPath>
-void
-ParallelLinePathListFilter<TPath>
-::GenerateData()
-{
-  // IO
-  const PathListType * inputPtr  = this->GetInput();
-  PathListType *       outputPtr = this->GetOutput();
-
-  // Input iterator
-  IteratorType inputIt = inputPtr->Begin();
-
-  std::vector<bool>         eraseFlagVector1;
-  std::vector<unsigned int> parallelLineIndex;
-
-  // First we copy all input path to output
-  while (inputIt != inputPtr->End())
-    {
-    // Write the next input path always to the
-    // last element of the list. This last element is
-    // newly created.
-    outputPtr->PushBack(inputIt.Get());
-
-    // If a new element is copied to the output vector,
-    // "false" is written to the corresponding index of
-    // the vector eraseFlagVector.
-    eraseFlagVector1.push_back(false);
-
-    ++inputIt;
-    }
-
-  unsigned int VectorSize = static_cast<unsigned int>(eraseFlagVector1.size());
-  //std::cout<<" Number of Lines: "<< VectorSize <<std::endl;
-
-  IteratorType outputIt1 = outputPtr->Begin();
-  unsigned int index1 = 0;
-  unsigned int firstLineCounter = 0, parallelLineCounter = 0;
-  unsigned int commonDistCounter = 0, maxDistCounter = 0;
-
-// Iterate through all lines of the pathlist
-  while (firstLineCounter < VectorSize)
-    {
-    if (!eraseFlagVector1[index1])
-      {
-      IteratorType outputIt2 = outputIt1;
-      ++outputIt2;
-      unsigned int index2 = index1 + 1;
-
-      // Check if any of the following lines are parallel
-      while (outputIt2 != outputPtr->End())
-        {
-
-        if (!eraseFlagVector1[index2])
-          { // Read the first and the last vertex of each line pair that is checked
-          VertexIteratorType vSourceIt = outputIt1.Get()->GetVertexList()->Begin();
-          VertexType         v1 = vSourceIt.Value();
-          vSourceIt = outputIt1.Get()->GetVertexList()->End();
-          --vSourceIt;
-          VertexType v2 = vSourceIt.Value();
-
-          VertexIteratorType vTargetIt = outputIt2.Get()->GetVertexList()->Begin();
-          VertexType         v3 = vTargetIt.Value();
-          vTargetIt = outputIt2.Get()->GetVertexList()->End();
-          --vTargetIt;
-          VertexType v4 = vTargetIt.Value();
-
-          // Check for parallel lines
-          if (VerifyAngularCondition(v1, v2, v3, v4))
-            {
-            ++parallelLineCounter;
-            if (VerifyMaxDistanceCondition(v1, v2, v3, v4))
-              {
-              ++maxDistCounter;
-              if (VerifyCommonDistanceCondition(v1, v2, v3, v4))
-                {
-                ++commonDistCounter;
-                // Write index of first parallel path
-                parallelLineIndex.push_back(index1);
-
-                // Write index of second parallel path
-                parallelLineIndex.push_back(index2);
-                }
-              }
-            }
-          }
-
-        ++index2;
-        ++outputIt2;
-        }
-      }
-
-    // mark the old path as erased
-    eraseFlagVector1[index1] = true;
-    ++firstLineCounter;
-    ++index1;
-    ++outputIt1;
-    } // end of for loop
-
-  otbMsgDevMacro( << "Number of line pairs that pass the angular condition:          " << parallelLineCounter );
-  otbMsgDevMacro( << "Number of line pairs that pass the maximum distance condition: " << maxDistCounter );
-  otbMsgDevMacro( << "Number of line pairs that pass the common distance condition:  " << commonDistCounter  );
-
-  // Write all parallel lines and set the non-erase flagg.
-  typename std::vector<unsigned int>::iterator lineIt1 = parallelLineIndex.begin();
-  unsigned int                                 sortLineIndex = 0;
-  while (lineIt1 != parallelLineIndex.end())
-    {
-    IteratorType outputIt3 = outputPtr->Begin() + parallelLineIndex[sortLineIndex];
-
-    PathPointerType newPath1 = this->WriteParallelPath(outputIt3.Get());
-    outputPtr->PushBack(newPath1);
-    // add a non-erase flag for the new path
-    eraseFlagVector1.push_back(false);
-    ++sortLineIndex;
-    otbMsgDevMacro( << "Number of lines written in the path list: " << sortLineIndex );
-    ++lineIt1;
-    }
-
-  // Search ended, now removing the erased path from the first line pointer
-  typename std::vector<bool>::reverse_iterator it1 = eraseFlagVector1.rbegin();
-  index1 = eraseFlagVector1.size() - 1;
-  while (it1 != eraseFlagVector1.rend())
-    {
-    if (eraseFlagVector1[index1])
-      {
-      outputPtr->Erase(index1);
-      }
-
-    --index1;
-    ++it1;
-    }
-
-}
-/**
- * Verify the angular condition to find parallel lines.
- * This function verifies if two lines are parallel by
- * computing the angle in relation to the y-axis.
- * First line segment: v1 is the first vertex, v2 the second one
- * (not necessarily the path ending).
- * Second line segment: v3 is the first vertex, v4 the second one
- * (not necessarily the path ending).
- * Return true if the condition is verified.
- *
- * This is the first criteria to be fulfilled.
- **/
-template <class TPath>
-bool
-ParallelLinePathListFilter<TPath>
-::VerifyAngularCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4)
-{
-  double alpha1 = std::atan2((v2[1] - v1[1]), (v2[0] - v1[0]));
-  double alpha2 = std::atan2((v4[1] - v3[1]), (v4[0] - v3[0]));
-
-  alpha1 = (alpha1 >= 0) ? alpha1 : (alpha1 + CONST_PI);
-  alpha2 = (alpha2 >= 0) ? alpha2 : (alpha2 + CONST_PI);
-
-  // Return true if the angle between the two lines is smaller than
-  // the specified threshold.
-  bool angle = (std::abs(alpha1 - alpha2) < static_cast<double>(m_AngularThreshold));
-
-  return angle;
-}
-
-/**
- * Verify the maximum distance condition to find parallel lines.
- * The orthogonal distance between two parallel lines is calculated.
- * First line segment: v1 is the first vertex, v2 the second one
- * (not necessarily the path ending).
- * Second line segment: v3 is the first vertex, v4 the second one
- * (not necessarily the path ending).
- * Return true if the condition is verified.
- *
- * This is the second criteria to be fulfilled.
- **/
-template <class TPath>
-bool
-ParallelLinePathListFilter<TPath>
-::VerifyMaxDistanceCondition(VertexType v1, VertexType v2, VertexType v3, VertexType itkNotUsed(v4))
-{
-  // Compute the direction vector of the first line
-  VertexType vectorDir12;
-
-  vectorDir12[0] = v2[0] - v1[0];
-  vectorDir12[1] = v2[1] - v1[1];
-
-  // Compute the orthogonal distance between the two parallel lines
-  // with equation d = |(v3 - v1)X(v2 - v1)|/|v2 - v1|
-  double distance = 0., denominator = 0., nominator = 0.;
-  denominator = std::abs((v3[0] - v1[0]) * vectorDir12[1] - (v3[1] - v1[1]) * vectorDir12[0]);
-  nominator = sqrt(pow(vectorDir12[0], 2) + pow(vectorDir12[1], 2));
-  distance = denominator / nominator;
-  //std::cout<< "Distance between two parallel lines: " << distance <<std::endl;
-
-  // Check if the orthogonal distance between the lines
-  // is beneath the chosen threshold.
-  bool dist = (distance <= static_cast<double>(m_DistanceThreshold));
-
-  return dist;
-}
-
-/**
- * Verify the common distance condition to find parallel lines.
- * The overlapping part of the parallel lines is computed. In case
- * no overlapping part exists or the value is below the specified
- * threshold, false is returned.
- * First line segment: v1 is the first vertex, v2 the second one
- * (not necessarily the path ending).
- * Second line segment: v3 is the first vertex, v4 the second one
- * (not necessarily the path ending).
- * Return true if the condition is verified.
- *
- * This is the third criteria to be fulfilled.
- **/
-template <class TPath>
-bool
-ParallelLinePathListFilter<TPath>
-::VerifyCommonDistanceCondition(VertexType v1, VertexType v2, VertexType v3, VertexType v4)
-{
-// Compute the length of each line
-  double length12 = 0.;
-  // double length34 = 0.;
-  length12 = sqrt(pow((v2[0] - v1[0]), 2) + pow((v2[1] - v1[1]), 2));
-  //length34 = sqrt(pow((v4[0] - v3[0]), 2) + pow((v4[1] - v3[1]), 2));
-
-  // Set v1[0] to zero and align the y-axis of
-  // the new coordinate system with line one (v1 and v2).
-  // Compute the coordinates of the first and of the
-  // second line in the new coordinate system.
-  VertexType tempv1, tempv2, tempv3, tempv4;
-
-  //Initialization
-  tempv1.Fill(0.);
-  tempv2.Fill(0.);
-  tempv3.Fill(0.);
-  tempv4.Fill(0.);
-
-  if (v1[1] == v2[1])
-    {
-    if (v1[0] < v2[0])
-      {
-      tempv1[0] = 0., tempv1[1] = 0.;
-      tempv2[0] = 0., tempv2[1] = length12;
-      tempv3[0] = v3[0] - v1[0], tempv3[1] = v3[1] - v1[1];
-      tempv4[0] = v4[0] - v1[0], tempv4[1] = v4[1] - v1[1];
-      }
-    else
-      {
-      tempv2[0] = 0., tempv2[1] = 0.;
-      tempv1[0] = 0., tempv1[1] = length12;
-      tempv3[0] = v3[0] - v2[0], tempv3[1] = v3[1] - v2[1];
-      tempv4[0] = v4[0] - v2[0], tempv4[1] = v4[1] - v2[1];
-      }
-    }
-  // Check the direction of the line (vector).
-  // The origin of the new coordinate system is
-  // set to the smaller of the two vertices.
-  // Then, a rotation and translation of the vertices
-  // of the second line (v3 and v4) to the new coordinate
-  // system is performed.
-
-  VertexType temptransv3, temptransv4;
-
-  if (v1[1] < v2[1])
-    {
-    if (v1[0] == v2[0])
-      {
-      tempv1[0] = 0., tempv1[1] = 0.;
-      tempv2[0] = 0., tempv2[1] = length12;
-      tempv3[0] = v3[0] - v1[0], tempv3[1] = v3[1] - v1[1];
-      tempv4[0] = v4[0] - v1[0], tempv4[1] = v4[1] - v1[1];
-      }
-
-    else
-      {
-      // Coordinates of the first line in the new coordinate system
-      tempv1[0] = 0.;
-      tempv1[1] = 0.;
-      tempv2[0] = 0.;
-      tempv2[1] = length12;
-
-      // Rotate the system clockwise
-      double sinealpha;
-      if (v2[0] > v1[0])
-        {
-        sinealpha = (v2[0] - v1[0]) / length12;
-        }
-      else
-        {
-        sinealpha = (v1[0] - v2[0]) / length12;
-        }
-      double alpha1 = std::asin(sinealpha);
-
-      // Translation
-      temptransv3[0] = v3[0] - v1[0];
-      temptransv3[1] = v3[1] - v1[1];
-      temptransv4[0] = v4[0] - v1[0];
-      temptransv4[1] = v4[1] - v1[1];
-
-      // Rotation
-      tempv3[0] = temptransv3[0] * cos(alpha1) + temptransv3[1] * sin(alpha1);
-      tempv3[1] = temptransv3[1] * cos(alpha1) - temptransv3[0] * sin(alpha1);
-      tempv4[0] = temptransv4[0] * cos(alpha1) + temptransv4[1] * sin(alpha1);
-      tempv4[1] = temptransv4[1] * cos(alpha1) - temptransv4[0] * sin(alpha1);
-
-      otbMsgDevMacro(<< "tempv1[0], tempv1[1], tempv2[0], tempv2[1]: " );
-      otbMsgDevMacro(<< tempv1[0] << ", " << tempv1[1] << ", " << tempv2[0] << ", " << tempv2[1] );
-      otbMsgDevMacro(<< "Alpha: " << alpha1 );
-      otbMsgDevMacro(<< "tempv3[0], tempv3[1], tempv4[0], tempv4[1]: "
-                       << tempv3[0] << ", " << tempv3[1] << ", "
-                       << tempv4[0] << ", " << tempv4[1] );
-      otbMsgDevMacro(<< "Calculated length of the second line: "
-                        << sqrt(pow((tempv4[0] - tempv3[0]), 2) + pow((tempv4[1] - tempv3[1]), 2)) );
-      otbMsgDevMacro(<< "Original length of line 1:       " << length12 );
-      }
-    }
-
-  if (v2[1] < v1[1])
-    {
-
-    if (v1[0] == v2[0])
-      {
-      tempv2[0] = 0., tempv2[1] = 0.;
-      tempv1[0] = 0., tempv1[1] = length12;
-      tempv3[0] = v3[0] - v2[0], tempv3[1] = v3[1] - v2[1];
-      tempv4[0] = v4[0] - v2[0], tempv4[1] = v4[1] - v2[1];
-      }
-    else
-      {
-      tempv1[0] = 0.;
-      tempv1[1] = 0.;
-      tempv2[0] = 0.;
-      tempv2[1] = length12;
-
-      // Rotate the system clockwise
-      double sinealpha;
-      if (v2[0] > v1[0])
-        {
-        sinealpha = (v2[0] - v1[0]) / length12;
-        }
-      else
-        {
-        sinealpha = (v1[0] - v2[0]) / length12;
-        }
-
-      double alpha1 = std::asin(sinealpha);
-
-      // Translation
-      temptransv3[0] = v3[0] - v2[0];
-      temptransv3[1] = v3[1] - v2[1];
-      temptransv4[0] = v4[0] - v2[0];
-      temptransv4[1] = v4[1] - v2[1];
-
-      // Rotation
-      tempv3[0] = temptransv3[0] * cos(alpha1) + temptransv3[1] * sin(alpha1);
-      tempv3[1] = temptransv3[1] * cos(alpha1) - temptransv3[0] * sin(alpha1);
-      tempv4[0] = temptransv4[0] * cos(alpha1) + temptransv4[1] * sin(alpha1);
-      tempv4[1] = temptransv4[1] * cos(alpha1) - temptransv4[0] * sin(alpha1);
-
-      otbMsgDevMacro( << "tempv1[0], tempv1[1], tempv2[0], tempv2[1]: " );
-      otbMsgDevMacro( << tempv1[0] << ", " << tempv1[1] << ", " << tempv2[0] << ", " << tempv2[1] );
-      otbMsgDevMacro( << "Alpha: " << alpha1 );
-      otbMsgDevMacro( << "tempv3[0], tempv3[1], tempv4[0], tempv4[1]: "
-                       << tempv3[0] << ", " << tempv3[1] << ", " << tempv4[0] << ", " << tempv4[1] );
-      otbMsgDevMacro( << "Calculated length of the second line: "
-                       << sqrt(pow((tempv4[0] - tempv3[0]), 2) + pow((tempv4[1] - tempv3[1]), 2)) );
-      otbMsgDevMacro( << "Original length of line 1:       " << length12 );
-      }
-    }
-
-  // Compute the length of the overlapping part
-  // of the two lines. This is done by simply
-  // comparing the y-values of the lines (remember
-  // that both lines are parallel and also parallel
-  // to the new y-axis).
-  double commonDist = 0.;
-
-  if (tempv3[1] >= tempv4[1])
-    {
-    if (tempv3[1] >= 0 && tempv3[1] <= tempv2[1])
-      {
-      if (tempv4[1] >= 0)
-        {
-        commonDist = std::abs(tempv4[1] - tempv3[1]);
-        }
-
-      else if (tempv4[1] < 0)
-        {
-        commonDist = tempv3[1];
-        }
-      }
-    else if (tempv3[1] >= 0 && tempv3[1] >= tempv2[1])
-      {
-      if (tempv4[1] >= 0)
-        {
-        commonDist = tempv2[1] - tempv4[1];
-        }
-
-      else if (tempv4[1] < 0)
-        {
-        commonDist = tempv2[1];
-        }
-
-      }
-    else if (tempv4[1] >= tempv2[1])
-      { // No overlapping parts exist. The (negative) distance
-        // between the two closest endpoints is calculated.
-      commonDist = -std::abs(tempv4[1] - tempv2[1]);
-      }
-    else if (tempv3[1] < 0)
-      { // No overlapping parts exist. The (negative) distance
-        // between the two closest endpoints is calculated.
-      commonDist = tempv3[1];
-      }
-    }
-
-  else
-    {
-    if (tempv4[1] >= 0 && tempv4[1] <= tempv2[1])
-      {
-      if (tempv3[1] >= 0)
-        {
-        commonDist = std::abs(tempv3[1] - tempv4[1]);
-        }
-
-      else if (tempv3[1] < 0)
-        {
-        commonDist = tempv4[1];
-        }
-      }
-    else if (tempv4[1] >= 0 && tempv4[1] >= tempv2[1])
-      {
-      if (tempv3[1] >= 0)
-        {
-        commonDist = tempv2[1] - tempv3[1];
-        }
-
-      else if (tempv3[1] < 0)
-        {
-        commonDist = tempv2[1];
-        }
-
-      }
-    else if (tempv3[1] >= tempv2[1])
-      { // No overlapping parts exist. The (negative) distance
-        // between the two closest endpoints is calculated.
-      commonDist = -std::abs(tempv3[1] - tempv2[1]);
-      }
-    else if (tempv4[1] < 0)
-      { // No overlapping parts exist. The (negative) distance
-        // between the two closest endpoints is calculated.
-      commonDist = tempv4[1];
-      }
-    }
-  // The common parallel parts of the two lines have to be greater than
-  // the provided threshold.
-  otbMsgDevMacro( << "Calculated common distance of the parallel lines: " << commonDist );
-  bool common = (commonDist >= static_cast<double>(m_CommonDistanceThreshold));
-
-  return common;
-}
-
-/**
- * Write parallel line in a new path list.
- * p1: First parallel path (line segment)
- */
-template <class TPath>
-typename ParallelLinePathListFilter<TPath>
-::PathPointerType
-ParallelLinePathListFilter<TPath>
-::WriteParallelPath(PathPointerType p1)
-{
-  PathPointerType resp = PathType::New();
-
-  VertexIteratorType it;
-
-  for (it = p1->GetVertexList()->Begin(); it != p1->GetVertexList()->End(); ++it)
-    {
-    resp->AddVertex((it).Value());
-    }
-
-  return resp;
-}
-
-/**
- * PrintSelf Method
- */
-template <class TPath>
-void
-ParallelLinePathListFilter<TPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h
deleted file mode 100644
index cc60ea4b97a1a93fbf256effb390d614bb4e7a82..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbRemoveIsolatedByDirectionFilter.h
+++ /dev/null
@@ -1,134 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRemoveIsolatedByDirectionFilter_h
-#define otbRemoveIsolatedByDirectionFilter_h
-
-#include "otbModulusAndDirectionImageToImageFilter.h"
-#include "otbBinaryFunctorNeighborhoodImageFilter.h"
-
-namespace otb
-{
-namespace Functor
-{
-/** \class RemoveIsolatedByDirectionFunctor
- *  \brief Binary neighborhood functor to remove isolated pixels by direction.
- *  Used by the RemoveIsolatedByDirectionFilter.
- *  \sa RemoveIsolatedByDirectionFilter
- *  \ingroup Functor
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInput1, class TInput2, class TOutput>
-class RemoveIsolatedByDirectionFunctor
-{
-public:
-  RemoveIsolatedByDirectionFunctor() {}
-  virtual ~RemoveIsolatedByDirectionFunctor() {}
-  inline TOutput operator ()(const TInput1& itA, const TInput2& itB)
-  {
-    double currentDirection = itB.GetCenterPixel();
-    int    nEqualNeighbors = 0;
-    for (int neighborhoodIndex = 0; neighborhoodIndex < 9; ++neighborhoodIndex)
-      {
-      if (itB.GetPixel(neighborhoodIndex) == currentDirection)
-        {
-        ++nEqualNeighbors;
-        }
-      }
-    if (nEqualNeighbors <= 1)
-      {
-      //should never be 0 as it is at least equal to itself
-      return 0;
-      }
-    else
-      {
-      return static_cast<TOutput>(itA.GetCenterPixel());
-      }
-  }
-};
-}
-/** \class RemoveIsolatedByDirectionFilter
- *  \brief This filter removes (sets to null intensity) pixels isolated by direction.
- *
- *  For a given pixel, the filter walk through its neighborhood in direction image, counting pixels having
- *  the same direction as the center pixel. If there is no such a pixel, the center pixel is considered to be
- *  isolated in direction, and thus will be removed (set to 0). If the pixel is not isolated in direction, the output
- *  value is the value of the pixel in the modulus image.
- *  Of course this filter requires the direction to be discrete, in order to be able to count the directions.
- *
- * \ingroup Streamed
- * \ingroup Threaded
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInputModulus, class TInputDirection, class TOutputImage>
-class ITK_EXPORT RemoveIsolatedByDirectionFilter
-  : public ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef RemoveIsolatedByDirectionFilter                                                     Self;
-  typedef ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                                                             Pointer;
-  typedef itk::SmartPointer<const Self>                                                       ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(RemoveIsolatedByDirectionFilter, ModulusAndDirectionImageToImageFilter);
-
-  /** typedef of the computing filter (this allows us to derive from ModulusAndDirectionToImageFilter as well as
-      using the BinaryFunctorNeighBorhoodImageFilter, which is appropriate here */
-  typedef Functor::RemoveIsolatedByDirectionFunctor<
-      typename itk::ConstNeighborhoodIterator<TInputModulus>,
-      typename itk::ConstNeighborhoodIterator<TInputDirection>,
-      typename TOutputImage::PixelType>  FunctorType;
-  typedef otb::BinaryFunctorNeighborhoodImageFilter<TInputModulus, TInputDirection, TOutputImage,
-      FunctorType> ComputingFilterType;
-
-protected:
-  /** Constructor */
-  RemoveIsolatedByDirectionFilter() {};
-  /** Destructor */
-  ~RemoveIsolatedByDirectionFilter() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override
-  {
-    Superclass::PrintSelf(os, indent);
-  }
-  /** Main computation method */
-  void GenerateData(void) override
-  {
-    typename ComputingFilterType::Pointer filter = ComputingFilterType::New();
-    filter->SetInput1(this->GetInput());
-    filter->SetInput2(this->GetInputDirection());
-    filter->GraftOutput(this->GetOutput());
-    filter->Update();
-    this->GraftOutput(filter->GetOutput());
-  }
-
-private:
-  RemoveIsolatedByDirectionFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbRemoveTortuousPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbRemoveTortuousPathListFilter.h
deleted file mode 100644
index abe69a7b58a8664696e69c5832a6e05102085dea..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbRemoveTortuousPathListFilter.h
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRemoveTortuousPathListFilter_h
-#define otbRemoveTortuousPathListFilter_h
-
-#include "otbUnaryFunctorObjectListBooleanFilter.h"
-#include "otbPathMeanDistanceFunctor.h"
-#include "otbObjectList.h"
-
-namespace otb
-{
-/** \class RemoveTortuousPathListFilter
-   *  \brief This filter remove path considered as tortuous.
-   *
-   *  A path is considered to be tortuous if the mean distance between each consecutive vertices
-   *  is strictly lower than the user provided threshold.
-   *
-   * This class is just a shortcut to the UnaryFunctorObjectListBooleanFilter with
-   * the PathMeanDistanceFunctor.
-   *
-   *<b>Recent API changes:</b>
-   * Now part of the UnaryFunctorObjectListBooleanFilter hierarchy, replace call to SetMeanDistanceThreshold()
-   * by GetFunctor().SetThreshold().
-   *
-   * The inequality is now a strict one.
-   *
-   * \sa BreakAngularPathListFilter
-   * \sa SimplifyPathFilter
-   * \sa UnaryFunctorObjectListBooleanFilter
-   * \sa PathMeanDistanceFunctor
-   *
-   * \example FeatureExtraction/ExtractRoadByStepsExample.cxx
-   *
- *
- * \ingroup OTBRoadExtraction
- */
-
-//   template <class TPath>
-template <class TPath>
-class ITK_EXPORT RemoveTortuousPathListFilter :
-  public UnaryFunctorObjectListBooleanFilter<
-      ObjectList<TPath>,
-      ObjectList<TPath>,
-      PathMeanDistanceFunctor<typename TPath::Pointer> >
-{};
-
-} // End namespace otb
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h b/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h
deleted file mode 100644
index b0d4fffb991f383be9bbec4f9a51c187e16ab0c6..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbRemoveWrongDirectionFilter.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRemoveWrongDirectionFilter_h
-#define otbRemoveWrongDirectionFilter_h
-
-#include "otbModulusAndDirectionImageToImageFilter.h"
-#include "itkBinaryFunctorImageFilter.h"
-#include "otbMath.h"
-
-namespace otb
-{
-namespace Functor
-{
-/** \class RemoveWrongDirectionFunctor
- *  \brief This functor is used by the RemoveWrongDirectionFilter
- *
- *  \sa RemoveWrongDirectionFilter
- *  \ingroup Functor
- *
- * \example FeatureExtraction/ExtractRoadByStepsExample.cxx
- *
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInput1, class TInput2, class TOutput>
-class RemoveWrongDirectionFunctor
-{
-public:
-  RemoveWrongDirectionFunctor() {}
-  virtual ~RemoveWrongDirectionFunctor() {}
-  inline TOutput operator ()(const TInput1& A, const TInput2& B)
-  {
-    if (B < CONST_PI_8)
-      {
-      return 0;
-      }
-    else
-      {
-      return A;
-      }
-  }
-};
-}
-/** \class RemoveWrongDirectionFilter
- *  \brief This filter removes (sets to null intensity) pixels with wrong direction.
- *
- *  This filter is part of the road extraction framework. By using the Spectral Angle filter,
- *  we can assume that the direction of a road on our scalar product image is positive (greater
- *  than \f$ \pi/8 \f$).
- *  Therefore in the input modulus and direction images, pixels whose direction is lower than
- *  this threshold are suppressed
- *  (in fact, their intensity is set to 0).
- *
- * \sa NeighborhoodScalarProductFilter
- * \ingroup Streamed
- * \ingroup Threaded
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInputModulus, class TInputDirection, class TOutputImage>
-class ITK_EXPORT RemoveWrongDirectionFilter
-  : public ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef RemoveWrongDirectionFilter                                                          Self;
-  typedef ModulusAndDirectionImageToImageFilter<TInputModulus, TInputDirection, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                                                             Pointer;
-  typedef itk::SmartPointer<const Self>                                                       ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(RemoveWrongDirectionFilter, ModulusAndDirectionImageToImageFilter);
-
-  /** typedef of the computing filter (this allows us to derive from ModulusAndDirectionToImageFilter as well as
-      using the BinaryFunctorImageFilter, which is appropriate here */
-  typedef Functor::RemoveWrongDirectionFunctor<
-      typename TInputModulus::PixelType,
-      typename TInputDirection::PixelType,
-      typename TOutputImage::PixelType>  FunctorType;
-  typedef itk::BinaryFunctorImageFilter<TInputModulus, TInputDirection, TOutputImage, FunctorType> ComputingFilterType;
-
-protected:
-  /** Constructor */
-  RemoveWrongDirectionFilter() {};
-  /** Destructor */
-  ~RemoveWrongDirectionFilter() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override
-  {
-    Superclass::PrintSelf(os, indent);
-  }
-  /** Main computation method */
-  void GenerateData(void) override
-  {
-    typename ComputingFilterType::Pointer filter = ComputingFilterType::New();
-    filter->SetInput1(this->GetInput());
-    filter->SetInput2(this->GetInputDirection());
-    filter->GraftOutput(this->GetOutput());
-    filter->Update();
-    this->GraftOutput(filter->GetOutput());
-  }
-
-private:
-  RemoveWrongDirectionFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h b/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h
deleted file mode 100644
index 77c19f0ca336f0300b9d1349bed6951d2608467a..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.h
+++ /dev/null
@@ -1,171 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRoadExtractionFilter_h
-#define otbRoadExtractionFilter_h
-
-
-#include "otbSpectralAngleDistanceImageFilter.h"
-#include "otbGenericRoadExtractionFilter.h"
-
-namespace otb
-{
-/**
- * \class RoadExtractionFilter
- * \brief This class performs the extraction of roads from an image.
- *
- * This composite filter implements a fast and robust road extraction
- * for high resolution satellite images. This is a composite filter using the
- * SpectralAngleDistanceImageFilter and the GenericRoadExtractionFilter and is
- * intended to be used with optical high resolution data. The full method is
- * described in E. Christophe and J. Inglada, "Robust Road Extraction for High
- * Resolution Satellite Images," in IEEE International Conference on
- * Image Processing, ICIP 2007.
- *
- * The algorithm uses all spectral
- * bands based on the spectral angle with a reference pixel. Then, the line
- * detection is done using a Gaussian gradient with a scalar product to find
- * the road directions. Finally, extracted roads are vectorized and
- * processed to improve the results removing some occultations and false
- * detections.
- *
- * This filter is fast, as the detection typically takes 3 seconds for a
- * 1000 \f$ \times \f$ 1000 images with four spectral bands. Results can be
- * used as an initialization for more complex algorithms.
- *
- * \sa SpectralAngleDistanceImageFilter
- * \sa GenericRoadExtractionFilter
- *
- * \example FeatureExtraction/ExtractRoadExample.cxx
- *
- *
- * \ingroup OTBRoadExtraction
- */
-template <class TInputImage, class TOutputPath>
-class ITK_EXPORT RoadExtractionFilter
-  : public ImageToPathListFilter<TInputImage, TOutputPath>
-{
-public:
-  /** Standard typedefs */
-  typedef RoadExtractionFilter                            Self;
-  typedef ImageToPathListFilter<TInputImage, TOutputPath> Superclass;
-  typedef itk::SmartPointer<Self>                         Pointer;
-  typedef itk::SmartPointer<const Self>                   ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(RoadExtractionFilter, ImageToPathListFilter);
-  /** Template parameters typedefs */
-  typedef typename Superclass::InputImageType     InputImageType;
-  typedef typename Superclass::OutputPathType     OutputPathType;
-  typedef typename Superclass::OutputPathListType OutputPathListType;
-  typedef typename InputImageType::PixelType      InputPixelType;
-  typedef double                                  InternalPixelType;
-
-  typedef otb::VectorImage<InternalPixelType, InputImageType::ImageDimension> VectorImageType;
-  typedef otb::Image<InternalPixelType, InputImageType::ImageDimension>       SpectralAngleType;
-  typedef otb::Image<InternalPixelType, InputImageType::ImageDimension>       ModulusType;
-  typedef otb::Image<InternalPixelType, InputImageType::ImageDimension>       DirectionType;
-
-  typedef itk::CovariantVector<InternalPixelType, InputImageType::ImageDimension>
-  VectorPixelType;
-  typedef otb::Image<VectorPixelType, InputImageType::ImageDimension> CovariantVectorImageType;
-
-  /* Template parameters typedefs for composites filters */
-  typedef SpectralAngleDistanceImageFilter<
-      InputImageType,
-      SpectralAngleType>                      SpectralAngleDistanceImageFilterType;
-
-  typedef GenericRoadExtractionFilter<SpectralAngleType, OutputPathType>
-  GenericRoadExtractionFilterType;
-
-  /** Template parameters typedefs for internals filters */
-  typedef typename GenericRoadExtractionFilterType::SigmaType                 SigmaType;
-  typedef typename GenericRoadExtractionFilterType::AmplitudeThresholdType    AmplitudeThresholdType;
-  typedef typename GenericRoadExtractionFilterType::ToleranceType             ToleranceType;
-  typedef typename GenericRoadExtractionFilterType::MaxAngleType              MaxAngleType;
-  typedef typename GenericRoadExtractionFilterType::MeanDistanceThresholdType MeanDistanceThresholdType;
-  typedef typename GenericRoadExtractionFilterType::LinkRealType              LinkRealType;
-
-  /** Get/Set the reference pixel (use by the SpectralAngleDistanceImageFilter)*/
-  otbGetObjectMemberConstReferenceMacro(SpectralAngleDistanceImageFilter, ReferencePixel, InputPixelType);
-  otbSetObjectMemberMacro(SpectralAngleDistanceImageFilter, ReferencePixel, InputPixelType);
-
-  /** Get/Set the alpha value */
-  otbGetObjectMemberConstReferenceMacro(GenericRoadExtractionFilter, Alpha, double);
-  otbSetObjectMemberMacro(GenericRoadExtractionFilter, Alpha, double);
-
-  /** Get/Set the amplitude threshold to start following a path (use by the VectorizationPathListFilter)*/
-  otbSetObjectMemberMacro(GenericRoadExtractionFilter, AmplitudeThreshold, AmplitudeThresholdType);
-  otbGetObjectMemberMacro(GenericRoadExtractionFilter, AmplitudeThreshold, AmplitudeThresholdType);
-
-  /** Get/Set  the tolerance for segment consistency (tolerance in terms of distance) (use by the SimplifyPathListFilter)*/
-  otbGetObjectMemberMacro(GenericRoadExtractionFilter, Tolerance, ToleranceType);
-  otbSetObjectMemberMacro(GenericRoadExtractionFilter, Tolerance, ToleranceType);
-
-  /** Set/Get the max angle (use bye the BreakAngularPathListFilter)*/
-  otbSetObjectMemberMacro(GenericRoadExtractionFilter, MaxAngle, MaxAngleType);
-  otbGetObjectMemberConstMacro(GenericRoadExtractionFilter, MaxAngle, MaxAngleType);
-
-  /** Get/Set the tolerance for segment consistency (tolerance in terms of distance) (use by RemoveTortuousPathListFilter)*/
-  otbGetObjectMemberMacro(GenericRoadExtractionFilter, FirstMeanDistanceThreshold, MeanDistanceThresholdType);
-  otbSetObjectMemberMacro(GenericRoadExtractionFilter, FirstMeanDistanceThreshold, MeanDistanceThresholdType);
-  otbGetObjectMemberMacro(GenericRoadExtractionFilter, SecondMeanDistanceThreshold, MeanDistanceThresholdType);
-  otbSetObjectMemberMacro(GenericRoadExtractionFilter, SecondMeanDistanceThreshold, MeanDistanceThresholdType);
-
-  /** Get/Set the angular threshold (use by LinkPathFilter)*/
-  otbSetObjectMemberMacro(GenericRoadExtractionFilter, AngularThreshold, LinkRealType);
-  otbGetObjectMemberMacro(GenericRoadExtractionFilter, AngularThreshold, LinkRealType);
-  /** Get/Set the distance threshold (use by LinkPathFilter)*/
-  otbSetObjectMemberMacro(GenericRoadExtractionFilter, DistanceThreshold, LinkRealType);
-  otbGetObjectMemberMacro(GenericRoadExtractionFilter, DistanceThreshold, LinkRealType);
-
-protected:
-  /** Constructor */
-  RoadExtractionFilter();
-  /** Destructor */
-  ~RoadExtractionFilter() override {}
-
-  /** Prepare main computation method */
-  void BeforeGenerateData(void);
-
-  /** Main computation method */
-  void GenerateData(void) override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-
-  RoadExtractionFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  /** SpectralAngleDistanceImageFilter use by the composite filter */
-  typename SpectralAngleDistanceImageFilterType::Pointer m_SpectralAngleDistanceImageFilter;
-  typename GenericRoadExtractionFilterType::Pointer m_GenericRoadExtractionFilter;
-
-};
-
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRoadExtractionFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.hxx b/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.hxx
deleted file mode 100644
index 67ee3a9fbbc7bce8f6aa09f2a87f88995a9e1613..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbRoadExtractionFilter.hxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRoadExtractionFilter_hxx
-#define otbRoadExtractionFilter_hxx
-
-#include "otbRoadExtractionFilter.h"
-#include "otbMath.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputPath>
-RoadExtractionFilter<TInputImage, TOutputPath>
-::RoadExtractionFilter()
-{
-  this->SetNumberOfRequiredInputs(1);
-  this->SetNumberOfRequiredOutputs(1);
-
-  m_SpectralAngleDistanceImageFilter = SpectralAngleDistanceImageFilterType::New();
-  m_GenericRoadExtractionFilter = GenericRoadExtractionFilterType::New();
-
-}
-
-/**
- * Main computation method
- */
-template <class TInputImage, class TOutputPath>
-void
-RoadExtractionFilter<TInputImage, TOutputPath>
-::GenerateData()
-{
-  // Input images pointers
-  typename InputImageType::ConstPointer inputImage     = this->GetInput();
-  typename OutputPathListType::Pointer  outputPathList  = this->GetOutput();
-
-  m_SpectralAngleDistanceImageFilter->SetInput(inputImage);
-
-  m_GenericRoadExtractionFilter->SetInput(m_SpectralAngleDistanceImageFilter->GetOutput());
-
-  m_GenericRoadExtractionFilter->Update();
-  for (typename GenericRoadExtractionFilterType::OutputPathListType::ConstIterator it
-         = m_GenericRoadExtractionFilter->GetOutput()->Begin();
-       it != m_GenericRoadExtractionFilter->GetOutput()->End();
-       ++it)
-    {
-    outputPathList->PushBack(it.Get());
-    }
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage, class TOutputPath>
-void
-RoadExtractionFilter<TInputImage, TOutputPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "m_ReferencePixel: " << m_SpectralAngleDistanceImageFilter->GetReferencePixel() << std::endl;
-}
-
-} // End namespace otb
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbSimplifyPathListFilter.h b/Modules/Detection/RoadExtraction/include/otbSimplifyPathListFilter.h
deleted file mode 100644
index 2c0f99fad114390d0c5517ddad580fc5da6f43b0..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbSimplifyPathListFilter.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbSimplifyPathListFilter_h
-#define otbSimplifyPathListFilter_h
-
-#include "otbUnaryFunctorObjectListFilter.h"
-#include "otbSimplifyPathFunctor.h"
-#include "otbObjectList.h"
-
-namespace otb
-{
-/** \class SimplifyPathListFilter
-   *  \brief This filter performs a simplification of the path in the input list.
-   *
-   *  It reduces the number of vertices in each path, according to a tolerance criterion. It aims at
-   *  removing aligned vertices while keeping sharp angular points.
-   *
-   *  In order to ensure the unicity of its output, each path is considered first from begin to end, then
-   *  from begin to the first vertex before the end. At each step, the consistency of the path is checked :
-   *  the equation of the line passing by the first and last vertices is computed. Then, for each
-   *  vertices between them, the euclidean distance to this line is computed. If for one vertex, this distance
-   *  is upper than the tolerance threshold, the path is considered to be inconsistent and no vertices can be removed.
-   *
-   *  If the path is considered consistent (which will occur at least with a 2 vertices path),
-   * only the beginning and ending
-   *  vertices are kept and a new search iteration begin at its end.
-   *
-   *  This filter is part of the road extraction framework.
-   *
-   * This class is just a shortcut to the UnaryFunctorObjectListFilter with
-   * the SimplifyPathFunctor.
-   *
-   *   <b>Recent API changes:</b>
-   * Now part of the UnaryFunctorObjectListFilter hierarchy, replace call to SetTolerance()
-   * by GetFunctor().SetTolerance().
-   *
-   *
-   * \sa BreakAngularPathListFilter
-   * \sa RemoveTortuousPathFilter.
-   * \sa UnaryFunctorObjectListFilter
-   * \sa SimplifyPathFunctor
-   *
-   * \example FeatureExtraction/ExtractRoadByStepsExample.cxx
-   *
- *
- * \ingroup OTBRoadExtraction
- */
-
-template <class TPath>
-class ITK_EXPORT SimplifyPathListFilter :
-  public UnaryFunctorObjectListFilter<
-      ObjectList<TPath>,
-      ObjectList<TPath>,
-      SimplifyPathFunctor<TPath, TPath> >
-{};
-
-} // End namespace otb
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h b/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h
deleted file mode 100644
index 476725d3af8d4261353de5e8a2b61165305d9873..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.h
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbVectorDataToRoadDescriptionFilter_h
-#define otbVectorDataToRoadDescriptionFilter_h
-
-#include "otbVectorDataToSpecificDescriptionFilterBase.h"
-#include "otbVectorData.h"
-
-//#include "otbNDVIDataNodeFeatureFunction.h"
-//#include "otbSpectralAngleDataNodeFeatureFunction.h"
-#include "otbParserConditionDataNodeFeatureFunction.h"
-#include "otbDBOverlapDataNodeFeatureFunction.h"
-
-namespace otb
-{
-/** \class VectorDataToRoadDescriptionFilter
-  * \brief VectorDataToRoadDescriptionFilter associates a score to each
-  * adapted input VectorData DataNode.
-  *
-  * VectorDataToRoadDescriptionFilter is dedicated to road description.
-  * Input and output are both VectorDatas in index coordinate.
-  * Each DataNode of the output VectorData contains its scores
-  * regarding to the associated descriptors.
-  * The support is an Optical Image and the descriptor are:
-  * - (NDVI >= threshold) per cent along the tested lines
-  * - mean Spectral Angle regarding a reference pixel along the tested lines
-  * - DB Overlap compute the number of building crossed by the data node in percent
-  *   regarding all the buildings within a data node neighborhood
-  *
-  * \ingroup VectorDataFilter
-  * \sa VectorDataToSpecificDescriptionFilterBase
-  * \sa VectorDataToBuildingDescriptionFilter
- *
- * \ingroup OTBRoadExtraction
- */
-
-template <class TVectorData, class TOpticalImage>
-class ITK_EXPORT VectorDataToRoadDescriptionFilter :
-public otb::VectorDataToSpecificDescriptionFilterBase<TVectorData>
-{
-public:
-  /** Standard class typedefs. */
-  typedef VectorDataToRoadDescriptionFilter            Self;
-  typedef otb::VectorDataToSpecificDescriptionFilterBase<TVectorData>
-                                                       Superclass;
-  typedef itk::SmartPointer<Self>                      Pointer;
-  typedef itk::SmartPointer<const Self>                ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(VectorDataToRoadDescriptionFilter, VectorDataToSpecificDescriptionFilterBase);
-
-  /** Some typedefs. */
-  typedef TVectorData                             VectorDataType;
-  typedef typename TVectorData::Pointer           VectorDataPointer;
-  typedef typename VectorDataType::DataNodeType   DataNodeType;
-  typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType>
-                                                  TreeIteratorType;
-  typedef typename DataNodeType::ValuePrecisionType
-                                                  PrecisionType;
-  typedef typename DataNodeType::PrecisionType
-                                                  CoordRepType;
-
-  typedef TOpticalImage                           OpticalImageType;
-  typedef typename TOpticalImage::Pointer         OpticalImageTypePointer;
-
-  typedef std::vector<std::string>                DescriptorsListType;
-
-  /*
-  typedef otb::NDVIDataNodeFeatureFunction<OpticalImageType, CoordRepType, PrecisionType>
-                                                  NDVIFeatureFunctionType;
-  typedef otb::SpectralAngleDataNodeFeatureFunction<OpticalImageType, CoordRepType, PrecisionType>
-                                                  SpectralAngleFeatureFunctionType;
-  */
-  typedef otb::ParserConditionDataNodeFeatureFunction<OpticalImageType, CoordRepType, PrecisionType>
-                                                  ParserConditionFeatureFunctionType;
-
-  typedef otb::DBOverlapDataNodeFeatureFunction<CoordRepType, PrecisionType>
-                                                  DBOverlapFeatureFunctionType;
-
-  typedef itk::DataObject::Pointer DataObjectPointer;
-  typedef itk::DataObject          DataObject;
-
-  virtual void AddOpticalImage(const OpticalImageType * support);
-  const OpticalImageType * GetOpticalImage();
-
-  virtual void AddBuildingsDB(const VectorDataType * support);
-  const VectorDataType * GetBuildingsDB();
-
-  const DescriptorsListType& GetDescriptorsList() const
-  {
-    return m_DescriptorsList;
-  }
-
-protected:
-  /** Constructor */
-  VectorDataToRoadDescriptionFilter();
-  /** Destructor */
-  ~VectorDataToRoadDescriptionFilter() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Triggers the Computation of the Descriptors */
-  void GenerateData(void) override;
-
-private:
-  VectorDataToRoadDescriptionFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  typename ParserConditionFeatureFunctionType::Pointer  m_NDVIFeatureFunction;
-  typename ParserConditionFeatureFunctionType::Pointer  m_SpectralAngleFeatureFunction;
-  typename DBOverlapFeatureFunctionType::Pointer        m_DBOverlapFeatureFunction;
-  DescriptorsListType m_DescriptorsList;
-
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbVectorDataToRoadDescriptionFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.hxx b/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.hxx
deleted file mode 100644
index e58488f53621c3e3423510e7b750bd7c4cee54ca..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/include/otbVectorDataToRoadDescriptionFilter.hxx
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbVectorDataToRoadDescriptionFilter_hxx
-#define otbVectorDataToRoadDescriptionFilter_hxx
-
-#include "otbVectorDataToRoadDescriptionFilter.h"
-
-namespace otb
-{
-
-// Constructor
-template <class TVectorData, class TOpticalImage>
-VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::VectorDataToRoadDescriptionFilter()
-{
-  this->SetNumberOfRequiredInputs(3);
-
-  m_NDVIFeatureFunction = ParserConditionFeatureFunctionType::New();
-  m_NDVIFeatureFunction->SetExpression("ndvi(b3, b4) > 0.4");
-
-  m_SpectralAngleFeatureFunction = ParserConditionFeatureFunctionType::New();
-  m_SpectralAngleFeatureFunction->SetExpression("spectralAngle > 0.25");
-
-  //Example for QuickBird images (on a specific image)
-  typename ParserConditionFeatureFunctionType::PixelType refPixel;
-  refPixel.SetSize(4);
-  refPixel[0] = 252;
-  refPixel[1] = 357;
-  refPixel[2] = 232;
-  refPixel[3] = 261;
-  m_SpectralAngleFeatureFunction->SetSpectralAngleReferencePixel(refPixel);
-
-  m_DBOverlapFeatureFunction = DBOverlapFeatureFunctionType::New();
-
-  m_DescriptorsList.push_back("NONDVI");
-  m_DescriptorsList.push_back("ROADSA");
-  m_DescriptorsList.push_back("NOBUIL");
-}
-
-template <class TVectorData, class TOpticalImage>
-void
-VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::AddOpticalImage(const OpticalImageType * support)
-{
-  this->AddSupport(const_cast<OpticalImageType *>(support), 0);
-}
-
-template <class TVectorData, class TOpticalImage>
-const typename VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::OpticalImageType *
-VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::GetOpticalImage()
-{
-  return static_cast<const OpticalImageType *>
-    (this->GetSupport(0));
-}
-
-
-template <class TVectorData, class TOpticalImage>
-void
-VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::AddBuildingsDB(const VectorDataType * support)
-{
-  this->AddSupport(const_cast<VectorDataType *>(support), 1);
-}
-
-template <class TVectorData, class TOpticalImage>
-const typename VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::VectorDataType *
-VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::GetBuildingsDB()
-{
-  return static_cast<const VectorDataType *>
-    (this->GetSupport(1));
-}
-
-template <class TVectorData, class TOpticalImage>
-void
-VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::GenerateData()
-{
-  m_NDVIFeatureFunction->SetInputImage(const_cast<OpticalImageType *>(this->GetOpticalImage()));
-  m_SpectralAngleFeatureFunction->SetInputImage(const_cast<OpticalImageType *>(this->GetOpticalImage()));
-  m_DBOverlapFeatureFunction->SetInputVectorData(const_cast<VectorDataType *>(this->GetBuildingsDB()));
-
-  // Retrieving root node
-  typename DataNodeType::Pointer root = this->GetOutput(0)->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  typename DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  // Adding the layer to the data tree
-  this->GetOutput(0)->GetDataTree()->Add(document, root);
-  // Create the folder node
-  typename DataNodeType::Pointer folder = DataNodeType::New();
-  folder->SetNodeType(otb::FOLDER);
-  // Adding the layer to the data tree
-  this->GetOutput(0)->GetDataTree()->Add(folder, document);
-
-  TreeIteratorType itVector(this->GetInput()->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder())
-      {
-      typename DataNodeType::Pointer currentGeometry = itVector.Get();
-      currentGeometry->SetFieldAsDouble("NONDVI", (double)(m_NDVIFeatureFunction->Evaluate(*(currentGeometry.GetPointer()))[0]));
-      currentGeometry->SetFieldAsDouble("ROADSA", (double)(m_SpectralAngleFeatureFunction->Evaluate(*(currentGeometry.GetPointer()))[0]));
-      currentGeometry->SetFieldAsDouble("NOBUIL", (double)(m_DBOverlapFeatureFunction->Evaluate(*(currentGeometry.GetPointer()))[0]));
-
-      this->GetOutput(0)->GetDataTree()->Add(currentGeometry, folder);
-      }
-    ++itVector;
-    }
-}
-
-// PrintSelf Method
-template <class TVectorData, class TOpticalImage>
-void
-VectorDataToRoadDescriptionFilter<TVectorData, TOpticalImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Detection/RoadExtraction/otb-module.cmake b/Modules/Detection/RoadExtraction/otb-module.cmake
deleted file mode 100644
index 0af2a5ba034b1c7a2444e4e744eac1921589de45..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/otb-module.cmake
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set(DOCUMENTATION "Everything users need to extract roads.")
-
-otb_module(OTBRoadExtraction
-  DEPENDS
-    OTBVectorDataBase
-    OTBITK
-    OTBImageBase
-    OTBVectorDataManipulation
-    OTBImageManipulation
-    OTBMathParser
-    OTBPath
-    OTBObjectList
-    OTBCommon
-
-  TEST_DEPENDS
-    OTBTestKernel
-    OTBImageIO
-    OTBProjection
-    OTBVectorDataIO
-
-  DESCRIPTION
-    "${DOCUMENTATION}"
-)
diff --git a/Modules/Detection/RoadExtraction/test/AlignementsQB.cxx b/Modules/Detection/RoadExtraction/test/AlignementsQB.cxx
deleted file mode 100644
index 2188101cb207bdb24ff483f41d4fa3a71cbddd6e..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/AlignementsQB.cxx
+++ /dev/null
@@ -1,142 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <iostream>
-#include "itkPolyLineParametricPath.h"
-
-#include "otbImageFileWriter.h"
-#include "otbImageFileReader.h"
-#include "otbExtractROI.h"
-#include "otbImageToPathListAlignFilter.h"
-#include "otbDrawPathFilter.h"
-//#include "otbColorImageViewer.h"
-
-#include <stdio.h>
-
-int main(int argc, char ** argv)
-{
-  if (argc != 3)
-    {
-
-    std::cout << "Usage : " << argv[0] << " inputImage outputImage" << std::endl;
-    return 1;
-
-    }
-
-  const char * inputFilename  = argv[1];
-  const char * outputFilename = argv[2];
-
-  typedef unsigned char InputPixelType;
-  typedef unsigned char OutputPixelType;
-
-  const unsigned int Dimension = 2;
-
-  typedef otb::Image<InputPixelType,  Dimension> InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef otb::ImageFileReader<InputImageType>  ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  ReaderType::Pointer reader = ReaderType::New();
-  WriterType::Pointer writer = WriterType::New();
-
-  reader->SetFileName(inputFilename);
-  writer->SetFileName(outputFilename);
-
-  reader->Update();
-
-  std::cout << "Lecture terminee" << std::endl;
-
-  typedef otb::ExtractROI<InputPixelType, InputPixelType> ROIFilterType;
-
-  ROIFilterType::Pointer roiFilter = ROIFilterType::New();
-
-  roiFilter->SetInput(reader->GetOutput());
-  roiFilter->SetStartX(10);
-  roiFilter->SetStartY(0);
-  roiFilter->SetSizeX(256);
-  roiFilter->SetSizeY(256);
-
-  roiFilter->Update();
-
-  std::cout << "Extraction ROI" << std::endl;
-
-  typedef itk::PolyLineParametricPath<Dimension>                    PathType;
-  typedef otb::ImageToPathListAlignFilter<InputImageType, PathType> ListAlignFilterType;
-
-  ListAlignFilterType::Pointer alignFilter = ListAlignFilterType::New();
-
-  alignFilter->SetInput(roiFilter->GetOutput());
-
-  alignFilter->Update();
-
-  std::cout << "Alignements termines" << std::endl;
-
-  typedef ROIFilterType::OutputImageType BackgroundImageType;
-
-  typedef otb::DrawPathFilter<BackgroundImageType, PathType, OutputImageType> DrawPathFilterType;
-
-  DrawPathFilterType::Pointer drawPathFilter = DrawPathFilterType::New();
-
-  typedef ListAlignFilterType::OutputPathListType ListType;
-
-  ListType* listePaths = alignFilter->GetOutput();
-
-  ListType::Iterator listIt = listePaths->Begin();
-
-  BackgroundImageType::Pointer backgroundImage = roiFilter->GetOutput();
-
-  roiFilter->Update();
-
-  unsigned int color = 0;
-
-  while (listIt != listePaths->End())
-    {
-
-    drawPathFilter->SetImageInput(backgroundImage);
-    drawPathFilter->SetInputPath(listIt.Get());
-    //drawPathFilter->SetPathValue( color );
-
-    drawPathFilter->Update();
-
-    backgroundImage = drawPathFilter->GetOutput();
-
-    ++listIt;
-    ++color;
-
-    }
-
-  writer->SetInput(drawPathFilter->GetOutput());
-
-  writer->Update();
-
-/*  typedef otb::ColorImageViewer<unsigned char, double>    ViewerType;
-  ViewerType                      viewer;
-
-  viewer.SetLabel( "Input Image" );
-  viewer.SetImage( drawPathFilter->GetOutput() );
-
-  viewer.Show();
-  Fl::run();
-*/
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/CMakeLists.txt b/Modules/Detection/RoadExtraction/test/CMakeLists.txt
deleted file mode 100644
index 8c99e4420f49ffb44aa1701a95ad0c237988a736..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/CMakeLists.txt
+++ /dev/null
@@ -1,218 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-otb_module_test()
-
-set(OTBRoadExtractionTests
-otbRoadExtractionTestDriver.cxx
-otbLikelihoodPathListFilter.cxx
-otbRemoveWrongDirectionFilter.cxx
-otbSimplifyPathListFilter.cxx
-otbAlignImageToPath.cxx
-otbNonMaxRemovalByDirectionFilter.cxx
-otbRoadExtractionFilter.cxx
-otbLinkPathListFilter.cxx
-otbRemoveTortuousPathListFilter.cxx
-otbParallelLinePathListFilter.cxx
-otbRemoveIsolatedByDirectionFilter.cxx
-otbVectorDataToRoadDescriptionFilter.cxx
-otbSimplifyManyPathListFilter.cxx
-otbNeighborhoodScalarProductFilter.cxx
-otbDrawPathAlign.cxx
-otbBreakAngularPathListFilter.cxx
-)
-
-add_executable(otbRoadExtractionTestDriver ${OTBRoadExtractionTests})
-target_link_libraries(otbRoadExtractionTestDriver ${OTBRoadExtraction-Test_LIBRARIES})
-otb_module_target_label(otbRoadExtractionTestDriver)
-
-# Tests Declaration
-
-otb_add_test(NAME feTvLikelihoodPathListFilter COMMAND otbRoadExtractionTestDriver
-  --compare-ascii ${EPSILON_3}
-  ${BASELINE_FILES}/feTvLikelihoodPathOutput.txt
-  ${TEMP}/feTvLikelihoodPathOutput.txt
-  otbLikelihoodPathListFilter
-  ${INPUTDATA}/InputForRoadDetection_NonMaxRem.raw.hdr
-  ${TEMP}/feTvLikelihoodPathOutput.txt
-  157 335 204 376 |
-  21 305 35 308 77 354 85 358 |
-  73 160 126 173
-  )
-
-otb_add_test(NAME feTvRemoveWrongDirectionFilter COMMAND otbRoadExtractionTestDriver
-  --compare-image ${EPSILON_8}
-  ${BASELINE}/feTvRemoveWrongDirectionOutput.tif
-  ${TEMP}/feTvRemoveWrongDirectionOutput.tif
-  otbRemoveWrongDirectionFilter
-  ${INPUTDATA}/InputForRoadDetection_IsolatedRem.raw.hdr
-  ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr
-  ${TEMP}/feTvRemoveWrongDirectionOutput.tif
-  )
-
-otb_add_test(NAME feTvSimplifyPathListFilter COMMAND otbRoadExtractionTestDriver
-  --compare-ascii ${EPSILON_3}
-  ${BASELINE_FILES}/feTvSimplifyPathOutput.txt
-  ${TEMP}/feTvSimplifyPathOutput.txt
-  otbSimplifyPathListFilter
-  ${TEMP}/feTvSimplifyPathOutput.txt
-  1.0
-  1 1   5  1  7  1  11  1  21  1  31  1 |
-  1 1   5  1  7  1  11  1  21 11  31 11 |
-  1 1   5  5  7  7  11 11  21 21  31 31 41 41 |
-  1 1   5  1  7  1  11  1  21 11  31 11 41 11 58 11 70 11
-  )
-
-otb_add_test(NAME feTvAlignMV2ITK COMMAND otbRoadExtractionTestDriver
-  --compare-ascii ${EPSILON_3}     ${BASELINE_FILES}/feAlign.txt
-  ${TEMP}/feAlign.txt
-  otbAlignImageToPath
-  ${INPUTDATA}/poupees.raw.hdr
-  ${TEMP}/feAlign.txt)
-
-otb_add_test(NAME feTvNonMaxRemovalByDirectionFilter COMMAND otbRoadExtractionTestDriver
-  --compare-image ${EPSILON_8}
-  ${BASELINE}/feTvNonMaxRemovalByDirectionOutput.tif
-  ${TEMP}/feTvNonMaxRemovalByDirectionOutput.tif
-  otbNonMaxRemovalByDirectionFilter
-  ${INPUTDATA}/InputForRoadDetection_WrongRem.raw.hdr
-  ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr
-  ${TEMP}/feTvNonMaxRemovalByDirectionOutput.tif
-  )
-
-otb_add_test(NAME feTvRoadExtractionFilter COMMAND otbRoadExtractionTestDriver
-  --compare-image ${EPSILON_8}
-  ${BASELINE}/feTvOutputRoadDetection.tif
-  ${TEMP}/feTvOutputRoadDetection.tif
-  otbRoadExtractionFilter
-  ${INPUTDATA}/qb_RoadExtract.img.hdr
-  ${TEMP}/feTvOutputRoadDetection.tif
-  337 557 432 859  # ReferencePixel
-  1.0              # Alpha
-  0.00005          # AmplitudeThreshold
-  1.0              # Tolerance
-  22.5             # (degre) MaxAngle (3.14159265358979323846/8.)
-  1.0              # FirstMeanDistanceThreshold
-  10.0             # SecondMeanDistanceThreshold
-  25.           # DistanceThreshold for LinkPathFiler
-  22.5           # AngularThreshold for LinkPathFiler
-  )
-
-otb_add_test(NAME feTvLinkPathListFilter COMMAND otbRoadExtractionTestDriver
-  --compare-ascii ${EPSILON_3}
-  ${BASELINE_FILES}/feTvLinkPathOutput.txt
-  ${TEMP}/feTvLinkPathOutput.txt
-  otbLinkPathListFilter
-  ${TEMP}/feTvLinkPathOutput.txt
-  30  40
-  1 1 51 1 |
-  61 1 91 1 |
-  111 11 211 11 |
-  1 51 51 51 |
-  71 71 71 91 |
-  71 131 71 201 |
-  141 111 101 111 |
-  151 111 191 111 |
-  111  71 141  71 |
-  181  71 151  71 |
-  11 131  11 101 |
-  11 171  11 141
-  )
-
-otb_add_test(NAME feTvRemoveTortuousPathListFilter COMMAND otbRoadExtractionTestDriver
-  --compare-ascii ${EPSILON_3}
-  ${BASELINE_FILES}/feTvRemoveTortuousPathOutput.txt
-  ${TEMP}/feTvRemoveTortuousPathOutput.txt
-  otbRemoveTortuousPathListFilter
-  ${TEMP}/feTvRemoveTortuousPathOutput.txt
-  10.0
-  1 1   1 11  |
-  1 1   5  1  7  1  11  1  |
-  1 1   7  7 21 21  31 31 41 41 |
-  1 1   5  1  7  1  11  1  21 11  31 11 41 11 58 11 70 11
-  )
-
-otb_add_test(NAME feTvParallelLinePathListFilter COMMAND otbRoadExtractionTestDriver
-  otbParallelLinePathListFilter)
-
-otb_add_test(NAME feTvRemoveIsolatedByDirectionFilter COMMAND otbRoadExtractionTestDriver
-  --compare-image ${EPSILON_8}
-  ${BASELINE}/feTvRemoveIsolatedByDirectionOutput.tif
-  ${TEMP}/feTvRemoveIsolatedByDirectionOutput.tif
-  otbRemoveIsolatedByDirectionFilter
-  ${INPUTDATA}/InputForRoadDetectionScalarProductMod.raw.hdr
-  ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr
-  ${TEMP}/feTvRemoveIsolatedByDirectionOutput.tif
-  )
-
-otb_add_test(NAME fzTvVectorDataToRoadDescriptionFilter COMMAND otbRoadExtractionTestDriver
-  --compare-ogr ${EPSILON_9}
-  ${BASELINE_FILES}/fzTvVectorDataToRoadDescriptionFilterOutput.shp
-  ${TEMP}/fzTvVectorDataToRoadDescriptionFilterOutput.shp
-  otbVectorDataToRoadDescriptionFilter
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp
-  ${TEMP}/fzTvVectorDataToRoadDescriptionFilterOutput.shp
-  ${INPUTDATA}/DEM/srtm_directory
-  0
-  )
-
-otb_add_test(NAME feTpSimplifyManyPathListFilter COMMAND otbRoadExtractionTestDriver
-  otbSimplifyManyPathListFilter
-  ${TEMP}/feTvSimplifyManyPathOutput.txt
-  1.0
-  )
-
-otb_add_test(NAME feTvNeighborhoodScalarProductFilter COMMAND otbRoadExtractionTestDriver
-  --compare-n-images ${EPSILON_6} 2
-  ${BASELINE}/feTvNeighborhoodScalarProductModulusOutput.tif
-  ${TEMP}/feTvNeighborhoodScalarProductModulusOutput.tif
-  ${BASELINE}/feTvNeighborhoodScalarProductDirectionOutput.tif
-  ${TEMP}/feTvNeighborhoodScalarProductDirectionOutput.tif
-  otbNeighborhoodScalarProductFilter
-  ${INPUTDATA}/InputForRoadDetection_SpectralAngle.raw.hdr
-  ${TEMP}/feTvNeighborhoodScalarProductModulusOutput.tif
-  ${TEMP}/feTvNeighborhoodScalarProductDirectionOutput.tif
-  1.0
-  )
-
-otb_add_test(NAME feTvDrawPathTestAlign COMMAND otbRoadExtractionTestDriver
-  --compare-image ${NOTOL}  ${BASELINE}/feDrawPathAlignDeuxTraits.png
-  ${TEMP}/feDrawPathAlignDeuxTraits.png
-  otbDrawPathAlign
-  ${INPUTDATA}/DeuxTraits.png
-  ${TEMP}/feDrawPathAlignDeuxTraits.png)
-
-otb_add_test(NAME feTvBreakAngularPathListFilter COMMAND otbRoadExtractionTestDriver
-  --compare-ascii ${NOTOL}  ${BASELINE_FILES}/feBreakAngularPathListOutput.txt
-  ${TEMP}/feBreakAngularPathListOutput.txt
-  otbBreakAngularPathListFilter
-  ${TEMP}/feBreakAngularPathListOutput.txt
-  10 20 30 50 90 140 180 |
-  1 1  5 1  7 1  11 1  21 1  31 1 |
-  1 1  5 1  7 1  11 1  21 11  31 11 |
-  1 1  5 1  7 1  11 1  21 11  31 11 41 11  |
-  1 1  5 1  7 1  11 1  21 11  31 11 41 11 58 11 70 11 |
-  1 11  5 11  7 11  11 11  21 1  31 1 41 1 |
-  1 1  5 1  7 1  11 1  21 11  31 21 41 31  |
-  1 1  5 1  5 11  5 21 |
-  1 1  31 1 41 1
-  )
diff --git a/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx b/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx
deleted file mode 100644
index 567713ab741daf32e26794ade7f4be75cf9c8ffc..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbAlignImageToPath.cxx
+++ /dev/null
@@ -1,146 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-
-
-#include <iostream>
-#include "itkPolyLineParametricPath.h"
-
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbImageToPathListAlignFilter.h"
-
-#include "itkPathSource.h"
-
-#include <stdio.h>
-
-int otbAlignImageToPath(int itkNotUsed(argc), char * argv[])
-{
-  const char * inputFilename  = argv[1];
-  const char * outputFilename = argv[2];
-
-  typedef double InputPixelType;
-  typedef double OutputPixelType;
-  const unsigned int Dimension = 2;
-
-  typedef otb::Image<InputPixelType,  Dimension> InputImageType;
-
-  typedef itk::PolyLineParametricPath<Dimension> PathType;
-
-  PathType::Pointer ltoto = PathType::New();
-
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef otb::ImageFileReader<InputImageType> ReaderType;
-
-  typedef otb::ImageToPathListAlignFilter<InputImageType, PathType> ListAlignFilterType;
-  typedef ListAlignFilterType::ValueType                            ValueType;
-  typedef ListAlignFilterType::SizeType                             SizeType;
-  typedef otb::ImageFileWriter<OutputImageType>                     WriterType;
-
-  ReaderType::Pointer     reader = ReaderType::New();
-  WriterType::Pointer     writer = WriterType::New();
-  InputImageType::Pointer ImageIn = InputImageType::New();
-
-  ListAlignFilterType::Pointer testList = ListAlignFilterType::New();
-
-  reader->SetFileName(inputFilename);
-
-  //OTB-FA-00010-CS
-  testList->SetInput(reader->GetOutput());
-
-  typedef ListAlignFilterType::OutputPathListType ListAlignFilterOutputPathListType;
-
-  otbGenericMsgDebugMacro(<< "Before update");
-  testList->Update();
-  otbGenericMsgDebugMacro(<< "After update");
-
-  ValueType pathValue;
-  pathValue = testList->GetPathValue();
-  testList->SetPathValue(pathValue);
-
-  ValueType  backgroundValue;
-  backgroundValue = testList->GetBackgroundValue();
-  testList->SetBackgroundValue(backgroundValue);
-
-  SizeType   size;
-  size = testList->GetSize();
-  testList->SetSize(size);
-
-  bool isMeaningfulSegment;
-  isMeaningfulSegment = testList->GetisMeaningfulSegment();
-  testList->SetisMeaningfulSegment(isMeaningfulSegment);
-
-  int NbGradDirection;
-  NbGradDirection = testList->GetNbGradDirection();
-  testList->SetNbGradDirection(NbGradDirection);
-
-  int NbLineDirection;
-  NbLineDirection = testList->GetNbLineDirection();
-  testList->SetNbLineDirection(NbLineDirection);
-
-  double MinGradNorm;
-  MinGradNorm = testList->GetMinGradNorm();
-  testList->SetMinGradNorm(MinGradNorm);
-
-  double Eps;
-  Eps = testList->GetEps();
-  testList->SetEps(Eps);
-
-  ListAlignFilterOutputPathListType * sortiePath = testList->GetOutput();
-
-  otbGenericMsgDebugMacro(<< "Writing :");
-
-  FILE *file = fopen(outputFilename, "w");
-  if (file == nullptr)
-    {
-    fprintf(stderr, "Error, can't open file");
-    exit(-1);
-    }
-  typedef itk::ContinuousIndex<double, 2>            VertexType;
-  typedef itk::VectorContainer<unsigned, VertexType> VertexListType;
-  typedef VertexListType::ConstPointer               VertexListTypePointer;
-  VertexListTypePointer vertexList;
-  VertexType            cindex;
-  double                x1, y1;
-  //double                x2, y2;
-
-  int nbPath = sortiePath->Size();
-  otbGenericMsgDebugMacro(<< "NbSegment: " << nbPath);
-  fprintf(file, "Nb Segment: %d\n", nbPath);
-  for (int i = 0; i < nbPath; ++i)
-    {
-    vertexList = sortiePath->GetNthElement(i)->GetVertexList();
-    cindex = vertexList->GetElement(0);
-    x1 = cindex[0];
-    y1 = cindex[1];
-    cindex = vertexList->GetElement(1);
-    //x2 = cindex[0];
-    //y2 = cindex[1];
-    fprintf(file, "%8.3f %8.3f\n", x1, y1);
-    }
-  fclose(file);
-
-  //        writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx
deleted file mode 100644
index dde12b6ad8d6082b5ca64fedfa9d9a6bb0b0ab05..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbBreakAngularPathListFilter.cxx
+++ /dev/null
@@ -1,163 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbBreakAngularPathListFilter.h"
-
-#include "itkPolyLineParametricPath.h"
-#include <fstream>
-#include <vector>
-#include "otbMath.h"
-#include <cstdlib>
-
-int otbBreakAngularPathListFilter(int itkNotUsed(argc), char * argv[])
-{
-  const char * outfname = argv[1];
-
-  typedef std::vector<double>           PointsVectorType;
-  typedef std::vector<PointsVectorType> PointsMatrixType;
-  PointsMatrixType MatricePoints;
-  PointsVectorType ListPoints;
-  PointsVectorType ListMaxAngle;
-
-  int cpt = 2;
-
-  ListMaxAngle.clear();
-  while (argv[cpt][0] != '|')
-    {
-    ListMaxAngle.push_back(static_cast<double>(::atof(argv[cpt])));
-    ++cpt;
-    }
-  ++cpt;
-  ListPoints.clear();
-
-  while (argv[cpt] != nullptr)
-    {
-    if (argv[cpt][0] == '|')
-      {
-      if ((ListPoints.size() % 2) != 0)
-        {
-        itkGenericExceptionMacro(<< "Missing point in parameters !");
-        }
-      MatricePoints.push_back(ListPoints);
-      ListPoints.clear();
-      }
-    else
-      {
-      ListPoints.push_back(static_cast<double>(::atof(argv[cpt])));
-      }
-    ++cpt;
-    }
-  MatricePoints.push_back(ListPoints);
-
-  const unsigned int Dimension = 2;
-  typedef itk::PolyLineParametricPath<Dimension>       PathType;
-  typedef otb::BreakAngularPathListFilter<PathType>    BreakAngularPathListFilterType;
-  typedef BreakAngularPathListFilterType::PathListType PathListType;
-  PathType::ContinuousIndexType cindex;
-
-  PathListType::Pointer InputPathList = PathListType::New();
-
-  //Generate PathList
-  for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos)
-    {
-    PathType::Pointer path = PathType::New();
-    //Generate PathList
-    std::cout << "List " << std::endl;
-    for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it)
-      {
-      cindex[0] = *it;
-      ++it;
-      cindex[1] = *it;
-      std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl;
-      path->AddVertex(cindex);
-      }
-    InputPathList->PushBack(path);
-    }
-
-  // Instantiating object
-  BreakAngularPathListFilterType::Pointer breakAngularFilter = BreakAngularPathListFilterType::New();
-  breakAngularFilter->SetInput(InputPathList);
-
-  std::ofstream file;
-  file.open(outfname);
-
-  for (PointsVectorType::iterator itAngle = ListMaxAngle.begin(); itAngle != ListMaxAngle.end(); ++itAngle)
-    {
-
-    breakAngularFilter->SetMaxAngle((*itAngle) * otb::CONST_PI / 180.);
-    breakAngularFilter->Update();
-
-    PathListType::Pointer OutputPathList = breakAngularFilter->GetOutput();
-
-    typedef PathListType::ConstIterator   PathListIteratorType;
-    typedef PathType::VertexListType      VertexListType;
-    typedef VertexListType::ConstIterator VertexIteratorType;
-
-    unsigned int         counter = 1;
-    PathListIteratorType pathListIt = InputPathList->Begin();
-
-    file << "--------------------------------------------------------------------------" << std::endl;
-    file << "MAX ANGULAR :" << breakAngularFilter->GetMaxAngle() << "(" << (*itAngle) << " deg.)" << std::endl;
-    file << "INPUT list of Path " << ": " << std::endl;
-    while (pathListIt != InputPathList->End())
-      {
-      file << "Path " << counter << ": ";
-      for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-           vIt != pathListIt.Get()->GetVertexList()->End();
-           ++vIt)
-        {
-        if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-          {
-          file << ", ";
-          }
-        file << vIt.Value();
-        }
-      file << std::endl;
-      ++pathListIt;
-      ++counter;
-      }
-
-    counter = 1;
-    pathListIt = OutputPathList->Begin();
-    file << "OUTPUT list of Path " << ": " << std::endl;
-    while (pathListIt != OutputPathList->End())
-      {
-      file << "Path " << counter << ": ";
-      for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-           vIt != pathListIt.Get()->GetVertexList()->End();
-           ++vIt)
-        {
-        if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-          {
-          file << ", ";
-          }
-        file << vIt.Value();
-        }
-      file << std::endl;
-      ++pathListIt;
-      ++counter;
-      }
-
-    } //Enf for angle
-  file.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbDrawPathAlign.cxx b/Modules/Detection/RoadExtraction/test/otbDrawPathAlign.cxx
deleted file mode 100644
index c5847cc841ae136d46887fce8fd8b6e2c2d86fc1..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbDrawPathAlign.cxx
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-
-#include "itkMacro.h"
-#include "itkPolyLineParametricPath.h"
-
-#include "otbImageFileReader.h"
-#include "otbPathListSource.h"
-#include "otbImageToPathListAlignFilter.h"
-#include "otbDrawPathListFilter.h"
-#include "otbImageFileWriter.h"
-
-int otbDrawPathAlign(int itkNotUsed(argc), char * argv[])
-{
-  const char * inputFilename  = argv[1];
-  const char * outputFilename = argv[2];
-
-  typedef unsigned char InputPixelType;
-  typedef unsigned char OutputPixelType;
-  const unsigned int Dimension = 2;
-
-  typedef otb::Image<InputPixelType,  Dimension> InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef itk::PolyLineParametricPath<Dimension> PathType;
-
-  typedef otb::ImageFileReader<InputImageType>  ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  typedef otb::ImageToPathListAlignFilter<InputImageType, PathType> PathListType;
-  typedef PathListType::OutputPathListType                          OutputPathListType;
-
-  typedef otb::DrawPathListFilter<InputImageType, PathType, OutputImageType> DrawPathFilterType;
-
-  ReaderType::Pointer reader         = ReaderType::New();
-  WriterType::Pointer writer         = WriterType::New();
-
-  DrawPathFilterType::Pointer DrawPath = DrawPathFilterType::New();
-  PathType::Pointer           VertexList     = PathType::New();
-
-  reader->SetFileName(inputFilename);
-  writer->SetFileName(outputFilename);
-
-  typedef otb::ImageToPathListAlignFilter<InputImageType, PathType> PathListAlignType;
-  PathListAlignType::Pointer testList = PathListAlignType::New();
-
-  //OTB-FA-00010-CS
-  testList->SetInput(reader->GetOutput());
-  testList->Update();
-
-  OutputPathListType * sortiePath = testList->GetOutput();
-  int                  nbPath = sortiePath->Size();
-  std::cout << "NbPath: " << nbPath << std::endl;
-
-  InputImageType::ConstPointer imageIn   = reader->GetOutput();
-
-  DrawPath->SetInput(imageIn);
-  DrawPath->SetInputPath(sortiePath);
-
-  writer->SetInput(DrawPath->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx
deleted file mode 100644
index a1a7054b0fec3afe46e7d85c3451ad2cb38c598a..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbLikelihoodPathListFilter.cxx
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbLikelihoodPathListFilter.h"
-#include "otbPolyLineParametricPathWithValue.h"
-#include "otbImage.h"
-#include "otbImageFileReader.h"
-#include <fstream>
-
-int otbLikelihoodPathListFilter(int itkNotUsed(argc), char * argv[])
-{
-
-  std::cout << std::endl;
-
-  const char * infname = argv[1];
-  const char * outfname = argv[2];
-
-  typedef std::vector<double>           PointsVectorType;
-  typedef std::vector<PointsVectorType> PointsMatrixType;
-  PointsMatrixType MatricePoints;
-  PointsVectorType ListPoints;
-
-  int cpt = 3;
-  ListPoints.clear();
-
-  while (argv[cpt] != nullptr)
-    {
-    if (argv[cpt][0] == '|')
-      {
-      if ((ListPoints.size() % 2) != 0)
-        {
-        itkGenericExceptionMacro(<< "Missing point in parameters !");
-        }
-      MatricePoints.push_back(ListPoints);
-      ListPoints.clear();
-      }
-    else
-      {
-      ListPoints.push_back(static_cast<double>(::atof(argv[cpt])));
-      }
-    ++cpt;
-    }
-  MatricePoints.push_back(ListPoints);
-
-  const unsigned int Dimension = 2;
-  typedef double                                                  PixelType;
-  typedef otb::Image<PixelType, Dimension>                        ImageType;
-  typedef otb::ImageFileReader<ImageType>                         ReaderType;
-  typedef otb::PolyLineParametricPathWithValue<double, Dimension> PathType;
-  typedef otb::LikelihoodPathListFilter<PathType, ImageType>      LikelihoodPathListFilterType;
-  typedef LikelihoodPathListFilterType::PathListType              PathListType;
-  PathType::ContinuousIndexType cindex;
-
-  PathListType::Pointer InputPathList = PathListType::New();
-
-  //Generate PathList
-  for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos)
-    {
-    PathType::Pointer path = PathType::New();
-    //Generate PathList
-    std::cout << "List " << std::endl;
-    for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it)
-      {
-      cindex[0] = *it;
-      ++it;
-      cindex[1] = *it;
-      std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl;
-      path->AddVertex(cindex);
-      }
-    InputPathList->PushBack(path);
-    }
-
-  //Instantiating object
-  LikelihoodPathListFilterType::Pointer filter = LikelihoodPathListFilterType::New();
-  ReaderType::Pointer                   reader = ReaderType::New();
-  reader->SetFileName(infname);
-  reader->Update();
-
-  filter->SetInput(InputPathList);
-  filter->SetInputImage(reader->GetOutput());
-  filter->Update();
-
-  std::cout << "Filter execution ended" << std::endl;
-
-  PathListType::Pointer OutputPathList = filter->GetOutput();
-
-  typedef PathListType::ConstIterator   PathListIteratorType;
-  typedef PathType::VertexListType      VertexListType;
-  typedef VertexListType::ConstIterator VertexIteratorType;
-
-  std::ofstream file;
-  file.open(outfname);
-  unsigned int         counter = 1;
-  PathListIteratorType pathListIt = InputPathList->Begin();
-
-  file << "INPUT list of Path " << ": " << std::endl;
-  while (pathListIt != InputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  counter = 1;
-  pathListIt = OutputPathList->Begin();
-  file << "OUTPUT list of Path " << ": " << std::endl;
-  while (pathListIt != OutputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << " Value: " << pathListIt.Get()->GetValue();
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  file.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx
deleted file mode 100644
index c41995abfaa600794e2e725c52121ea06f1e47bb..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbLinkPathListFilter.cxx
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbLinkPathListFilter.h"
-#include "itkPolyLineParametricPath.h"
-#include "otbMath.h"
-#include <fstream>
-#include <cstdlib>
-
-int otbLinkPathListFilter(int itkNotUsed(argc), char * argv[])
-{
-
-  std::cout << std::endl;
-
-  const char * outfname = argv[1];
-  const double distance = atof(argv[2]);
-  const double angle = ::atof(argv[3]) * otb::CONST_PI / 180.;
-
-  typedef std::vector<double>           PointsVectorType;
-  typedef std::vector<PointsVectorType> PointsMatrixType;
-  PointsMatrixType MatricePoints;
-  PointsVectorType ListPoints;
-
-  int cpt = 4;
-  ListPoints.clear();
-
-  while (argv[cpt] != nullptr)
-    {
-    if (argv[cpt][0] == '|')
-      {
-      if ((ListPoints.size() % 2) != 0)
-        {
-        itkGenericExceptionMacro(<< "Missing point in parameters !");
-        }
-      MatricePoints.push_back(ListPoints);
-      ListPoints.clear();
-      }
-    else
-      {
-      ListPoints.push_back(static_cast<double>(::atof(argv[cpt])));
-      }
-    ++cpt;
-    }
-  MatricePoints.push_back(ListPoints);
-
-  const unsigned int Dimension = 2;
-  typedef itk::PolyLineParametricPath<Dimension> PathType;
-  typedef otb::LinkPathListFilter<PathType>      LinkPathListFilterType;
-  typedef LinkPathListFilterType::PathListType   PathListType;
-  PathType::ContinuousIndexType cindex;
-
-  PathListType::Pointer InputPathList = PathListType::New();
-
-  //Generate PathList
-  for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos)
-    {
-    PathType::Pointer path = PathType::New();
-    //Generate PathList
-    std::cout << "List " << std::endl;
-    for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it)
-      {
-      cindex[0] = *it;
-      ++it;
-      cindex[1] = *it;
-      std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl;
-      path->AddVertex(cindex);
-      }
-    InputPathList->PushBack(path);
-    }
-  //Instantiating object
-  LinkPathListFilterType::Pointer filter = LinkPathListFilterType::New();
-
-  filter->SetInput(InputPathList);
-  filter->SetDistanceThreshold(distance);
-  filter->SetAngularThreshold(angle);
-  filter->Update();
-
-  std::cout << "Filter execution ended" << std::endl;
-
-  PathListType::Pointer OutputPathList = filter->GetOutput();
-
-  typedef PathListType::ConstIterator   PathListIteratorType;
-  typedef PathType::VertexListType      VertexListType;
-  typedef VertexListType::ConstIterator VertexIteratorType;
-
-  std::ofstream file;
-  file.open(outfname);
-  unsigned int         counter = 1;
-  PathListIteratorType pathListIt = InputPathList->Begin();
-
-  file << "Maximum distance threshold: " << filter->GetDistanceThreshold() << " (" << distance << ")" << std::endl;
-  file << "Maximum angle threshold: " << filter->GetAngularThreshold() << " (" << angle * 180 / otb::CONST_PI << ")" <<
-  std::endl;
-  file << "INPUT list of Path " << ": " << std::endl;
-  while (pathListIt != InputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  counter = 1;
-  pathListIt = OutputPathList->Begin();
-  file << "OUTPUT list of Path " << ": " << std::endl;
-  while (pathListIt != OutputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  file.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbNeighborhoodScalarProductFilter.cxx b/Modules/Detection/RoadExtraction/test/otbNeighborhoodScalarProductFilter.cxx
deleted file mode 100644
index 75c62bb6ab0c1f770bdade075f0aabc90ad5cba7..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbNeighborhoodScalarProductFilter.cxx
+++ /dev/null
@@ -1,67 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbNeighborhoodScalarProductFilter.h"
-#include "otbImage.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "itkGradientRecursiveGaussianImageFilter.h"
-
-int otbNeighborhoodScalarProductFilter(int itkNotUsed(argc), char * argv[])
-{
-
-  const char * infname = argv[1];
-  const char * outfname = argv[2];
-  const char * diroutfname = argv[3];
-  const double sigma = atof(argv[4]);
-
-  const unsigned int Dimension = 2;
-  typedef double                                                                      PixelType;
-  typedef itk::CovariantVector<PixelType, Dimension>                                  VectorPixelType;
-  typedef otb::Image<VectorPixelType, Dimension>                                      VectorImageType;
-  typedef otb::Image<PixelType, Dimension>                                            ImageType;
-  typedef otb::NeighborhoodScalarProductFilter<VectorImageType, ImageType, ImageType> FilterType;
-  typedef otb::ImageFileReader<ImageType>                                             ReaderType;
-  typedef otb::ImageFileWriter<ImageType>                                             WriterType;
-  typedef itk::GradientRecursiveGaussianImageFilter<ImageType, VectorImageType>       GradientFilterType;
-
-  // Instantiating object
-  FilterType::Pointer         filter = FilterType::New();
-  ReaderType::Pointer         reader = ReaderType::New();
-  WriterType::Pointer         writer = WriterType::New();
-  GradientFilterType::Pointer gradient = GradientFilterType::New();
-
-  reader->SetFileName(infname);
-  reader->Update();
-
-  gradient->SetInput(reader->GetOutput());
-  gradient->SetSigma(sigma);
-  filter->SetInput(gradient->GetOutput());
-  writer->SetInput(filter->GetOutput());
-  writer->SetFileName(outfname);
-  writer->Update();
-  writer = WriterType::New();
-  writer->SetFileName(diroutfname);
-  writer->SetInput(filter->GetOutputDirection());
-  writer->Update();
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbNonMaxRemovalByDirectionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbNonMaxRemovalByDirectionFilter.cxx
deleted file mode 100644
index cb8970e5de831bd4818789b586443a52d29d468d..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbNonMaxRemovalByDirectionFilter.cxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbNonMaxRemovalByDirectionFilter.h"
-#include "otbImage.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-
-int otbNonMaxRemovalByDirectionFilter(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  typedef double                                                               PixelType;
-  typedef otb::Image<PixelType, Dimension>                                     ImageType;
-  typedef otb::ImageFileReader<ImageType>                                      ReaderType;
-  typedef otb::ImageFileWriter<ImageType>                                      WriterType;
-  typedef otb::NonMaxRemovalByDirectionFilter<ImageType, ImageType, ImageType> NonMaxRemovalByDirectionFilterType;
-
-  // Instantiating object
-  ReaderType::Pointer modReader = ReaderType::New();
-  ReaderType::Pointer dirReader = ReaderType::New();
-  WriterType::Pointer writer = WriterType::New();
-  modReader->SetFileName(argv[1]);
-  dirReader->SetFileName(argv[2]);
-  writer->SetFileName(argv[3]);
-  NonMaxRemovalByDirectionFilterType::Pointer filter = NonMaxRemovalByDirectionFilterType::New();
-  filter->SetInput(modReader->GetOutput());
-  filter->SetInputDirection(dirReader->GetOutput());
-  writer->SetInput(filter->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbParallelLinePathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbParallelLinePathListFilter.cxx
deleted file mode 100644
index f2b67fc6ad757b8e6e93f86608a698e1ed339880..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbParallelLinePathListFilter.cxx
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbParallelLinePathListFilter.h"
-#include "itkPolyLineParametricPath.h"
-#include <cstdlib>
-
-int otbParallelLinePathListFilter(int itkNotUsed(argc), char * itkNotUsed(argv) [])
-{
-
-  // We create some lines
-  const unsigned int Dimension = 2;
-  typedef itk::PolyLineParametricPath<Dimension> PathType;
-  typedef otb::ObjectList<PathType>              PathListType;
-
-  PathListType::Pointer lineList = PathListType::New();
-  PathListType::Pointer parallelList = PathListType::New();
-
-  typedef PathType::ContinuousIndexType ContinuousIndexType;
-  ContinuousIndexType cindex;
-
-  /*-----*/
-  PathType::Pointer aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 1;
-  cindex[1] = 1;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 1;
-  cindex[1] = 100;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-  parallelList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 10;
-  cindex[1] = 1;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 10;
-  cindex[1] = 100;
-  aLine->AddVertex(cindex);
-  parallelList->PushBack(aLine);
-  lineList->PushBack(aLine);
-
-  /*-----*/
-  aLine = PathType::New();
-  aLine->Initialize();
-  cindex[0] = 174;
-  cindex[1] = 99;
-  aLine->AddVertex(cindex);
-
-  cindex[0] = 281;
-  cindex[1] = 1;
-  aLine->AddVertex(cindex);
-
-  lineList->PushBack(aLine);
-
-  // Parallel lines are detected.
-
-  typedef otb::ParallelLinePathListFilter<PathType> ParallelLinePathType;
-  ParallelLinePathType::Pointer parallelLinePathListFilter = ParallelLinePathType::New();
-  parallelLinePathListFilter->SetDistanceThreshold(10);
-  parallelLinePathListFilter->SetAngularThreshold(10);
-  parallelLinePathListFilter->SetCommonDistanceThreshold(10);
-  parallelLinePathListFilter->SetInput(lineList);
-  parallelLinePathListFilter->Update();
-
-  PathListType::Pointer  pathList = parallelLinePathListFilter->GetOutput();
-  PathListType::Iterator listIt = pathList->Begin();
-
-  PathListType::Iterator parListIt = parallelList->Begin();
-
-  // A path is a line segment in this case.
-  while (listIt != pathList->End() && parListIt != parallelList->End())
-    {
-    PathType::VertexListType::ConstPointer vertexList = (listIt.Get())->GetVertexList();
-
-    PathType::VertexListType::ConstPointer parVertexList = (parListIt.Get())->GetVertexList();
-
-    PathType::VertexListType::ConstIterator pathIt = vertexList->Begin();
-    PathType::VertexListType::ConstIterator parPathIt = parVertexList->Begin();
-    // Loop over all the vertices in one path
-    while (pathIt != vertexList->End() &&
-           parPathIt != parVertexList->End())
-      {
-
-      if (pathIt.Value() != parPathIt.Value())
-        {
-        std::cout << pathIt.Index() << pathIt.Value() << std::endl;
-        return EXIT_FAILURE;
-
-        }
-      ++pathIt;
-      ++parPathIt;
-      }
-    ++listIt;
-    ++parListIt;
-    }
-
-  return EXIT_SUCCESS;
-
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbRemoveIsolatedByDirectionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRemoveIsolatedByDirectionFilter.cxx
deleted file mode 100644
index a2a9ade45086a8b60e17e1c71ab78a2d5dcc6cb9..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbRemoveIsolatedByDirectionFilter.cxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbRemoveIsolatedByDirectionFilter.h"
-#include "otbImage.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-
-int otbRemoveIsolatedByDirectionFilter(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  typedef double                                                                PixelType;
-  typedef otb::Image<PixelType, Dimension>                                      ImageType;
-  typedef otb::ImageFileReader<ImageType>                                       ReaderType;
-  typedef otb::ImageFileWriter<ImageType>                                       WriterType;
-  typedef otb::RemoveIsolatedByDirectionFilter<ImageType, ImageType, ImageType> RemoveIsolatedByDirectionFilterType;
-
-  // Instantiating object
-  ReaderType::Pointer modReader = ReaderType::New();
-  ReaderType::Pointer dirReader = ReaderType::New();
-  WriterType::Pointer writer = WriterType::New();
-  modReader->SetFileName(argv[1]);
-  dirReader->SetFileName(argv[2]);
-  writer->SetFileName(argv[3]);
-  RemoveIsolatedByDirectionFilterType::Pointer filter = RemoveIsolatedByDirectionFilterType::New();
-  filter->SetInput(modReader->GetOutput());
-  filter->SetInputDirection(dirReader->GetOutput());
-  writer->SetInput(filter->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx
deleted file mode 100644
index 21b28e0c90ec845d6c0e37887d2876a4fca2b6ee..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbRemoveTortuousPathListFilter.cxx
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbRemoveTortuousPathListFilter.h"
-#include "itkPolyLineParametricPath.h"
-#include <fstream>
-#include <cstdlib>
-
-int otbRemoveTortuousPathListFilter(int itkNotUsed(argc), char * argv[])
-{
-  const char * outfname = argv[1];
-  const double threshold = atof(argv[2]);
-
-  typedef std::vector<double>           PointsVectorType;
-  typedef std::vector<PointsVectorType> PointsMatrixType;
-  PointsMatrixType MatricePoints;
-  PointsVectorType ListPoints;
-
-  int cpt = 3;
-  ListPoints.clear();
-
-  while (argv[cpt] != nullptr)
-    {
-    if (argv[cpt][0] == '|')
-      {
-      if ((ListPoints.size() % 2) != 0)
-        {
-        itkGenericExceptionMacro(<< "Missing point in parameters !");
-        }
-      MatricePoints.push_back(ListPoints);
-      ListPoints.clear();
-      }
-    else
-      {
-      ListPoints.push_back(static_cast<double>(::atof(argv[cpt])));
-      }
-    ++cpt;
-    }
-  MatricePoints.push_back(ListPoints);
-
-  const unsigned int Dimension = 2;
-  typedef itk::PolyLineParametricPath<Dimension>          PathType;
-  typedef otb::RemoveTortuousPathListFilter<PathType>     RemoveTortuousPathListFilterType;
-  typedef RemoveTortuousPathListFilterType::InputListType PathListType;
-  PathType::ContinuousIndexType cindex;
-
-  PathListType::Pointer InputPathList = PathListType::New();
-
-  //Generate PathList
-  for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos)
-    {
-    PathType::Pointer path = PathType::New();
-    //Generate PathList
-    std::cout << "List " << std::endl;
-    for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it)
-      {
-      cindex[0] = *it;
-      ++it;
-      cindex[1] = *it;
-      std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl;
-      path->AddVertex(cindex);
-      }
-    InputPathList->PushBack(path);
-    }
-  // Instantiating object
-  RemoveTortuousPathListFilterType::Pointer filter = RemoveTortuousPathListFilterType::New();
-
-  filter->SetInput(InputPathList);
-  filter->GetFunctor().SetThreshold(threshold);
-  filter->Update();
-
-  PathListType::Pointer OutputPathList = filter->GetOutput();
-
-  typedef PathListType::ConstIterator   PathListIteratorType;
-  typedef PathType::VertexListType      VertexListType;
-  typedef VertexListType::ConstIterator VertexIteratorType;
-
-  std::ofstream file;
-  file.open(outfname);
-  unsigned int         counter = 1;
-  PathListIteratorType pathListIt = InputPathList->Begin();
-
-  file << "Minimum Mean Distance: " << filter->GetFunctor().GetThreshold() << " (" << threshold << ")" << std::endl;
-  file << "INPUT list of Path " << ": " << std::endl;
-  while (pathListIt != InputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  counter = 1;
-  pathListIt = OutputPathList->Begin();
-  file << "OUTPUT list of Path " << ": " << std::endl;
-  while (pathListIt != OutputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  file.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbRemoveWrongDirectionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRemoveWrongDirectionFilter.cxx
deleted file mode 100644
index 146623060c18a74dc415f0a51f8a939254d7c999..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbRemoveWrongDirectionFilter.cxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbRemoveWrongDirectionFilter.h"
-#include "otbImage.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-
-int otbRemoveWrongDirectionFilter(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  typedef double                                                           PixelType;
-  typedef otb::Image<PixelType, Dimension>                                 ImageType;
-  typedef otb::ImageFileReader<ImageType>                                  ReaderType;
-  typedef otb::ImageFileWriter<ImageType>                                  WriterType;
-  typedef otb::RemoveWrongDirectionFilter<ImageType, ImageType, ImageType> RemoveWrongDirectionFilterType;
-
-  // Instantiating object
-  ReaderType::Pointer modReader = ReaderType::New();
-  ReaderType::Pointer dirReader = ReaderType::New();
-  WriterType::Pointer writer = WriterType::New();
-  modReader->SetFileName(argv[1]);
-  dirReader->SetFileName(argv[2]);
-  writer->SetFileName(argv[3]);
-  RemoveWrongDirectionFilterType::Pointer filter = RemoveWrongDirectionFilterType::New();
-  filter->SetInput(modReader->GetOutput());
-  filter->SetInputDirection(dirReader->GetOutput());
-  writer->SetInput(filter->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbRoadExtractionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbRoadExtractionFilter.cxx
deleted file mode 100644
index 80e757ab1b4a624493fbbab5b141e221ff63aff4..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbRoadExtractionFilter.cxx
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbImage.h"
-#include "otbRoadExtractionFilter.h"
-#include "otbDrawPathListFilter.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbPolyLineParametricPathWithValue.h"
-#include "otbMath.h"
-
-int otbRoadExtractionFilter(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  typedef otb::VectorImage<double, Dimension>                     InputImageType;
-  typedef otb::Image<double, Dimension>                           OutputImageType;
-  typedef otb::PolyLineParametricPathWithValue<double, Dimension> PathType;
-
-  typedef otb::ImageFileReader<InputImageType>                                ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType>                               WriterType;
-  typedef otb::RoadExtractionFilter<InputImageType, PathType>                 RoadExtractionFilterType;
-  typedef RoadExtractionFilterType::InputPixelType                            InputPixelType;
-  typedef otb::DrawPathListFilter<OutputImageType, PathType, OutputImageType> DrawPathFilterType;
-
-  //Parameters
-  const char *   inputFileName(argv[1]);
-  const char *   outputFileName(argv[2]);
-  InputPixelType ReferencePixel;
-  ReferencePixel.Reserve(4);
-  ReferencePixel.SetElement(0, ::atof(argv[3]));
-  ReferencePixel.SetElement(1, ::atof(argv[4]));
-  ReferencePixel.SetElement(2, ::atof(argv[5]));
-  ReferencePixel.SetElement(3, ::atof(argv[6]));
-  const double Alpha = ::atof(argv[7]);
-  const double AmplitudeThreshold = ::atof(argv[8]);
-  const double Tolerance = ::atof(argv[9]);
-  const double MaxAngle = ((otb::CONST_PI * ::atof(argv[10])) / 180.);
-  const double FirstMeanDistanceThreshold  = ::atof(argv[11]);
-  const double SecondMeanDistanceThreshold  = ::atof(argv[12]);
-  const double LinkAngularThreshold = ((otb::CONST_PI * ::atof(argv[13])) / 180.);
-  const double LinkDistanceThreshold  = ::atof(argv[14]);
-
-  // Instantiating object
-  ReaderType::Pointer               reader = ReaderType::New();
-  RoadExtractionFilterType::Pointer roadExtraction = RoadExtractionFilterType::New();
-  DrawPathFilterType::Pointer       draw = DrawPathFilterType::New();
-  WriterType::Pointer               writer = WriterType::New();
-
-  //Initialization parameters
-  reader->SetFileName(inputFileName);
-
-  roadExtraction->SetInput(reader->GetOutput());
-  roadExtraction->SetReferencePixel(ReferencePixel);
-  roadExtraction->SetAlpha(Alpha);
-  roadExtraction->SetAmplitudeThreshold(AmplitudeThreshold);
-  roadExtraction->SetTolerance(Tolerance);
-  roadExtraction->SetMaxAngle(MaxAngle);
-  roadExtraction->SetFirstMeanDistanceThreshold(FirstMeanDistanceThreshold);
-  roadExtraction->SetSecondMeanDistanceThreshold(SecondMeanDistanceThreshold);
-  roadExtraction->SetAngularThreshold(LinkAngularThreshold);
-  roadExtraction->SetDistanceThreshold(LinkDistanceThreshold);
-
-  reader->GenerateOutputInformation();
-  OutputImageType::Pointer image = OutputImageType::New();
-  image->CopyInformation(reader->GetOutput());
-  image->SetRegions(image->GetLargestPossibleRegion());
-  image->Allocate();
-  image->FillBuffer(0);
-
-  draw->SetInput(image);
-  //Use internal value of path
-  draw->UseInternalPathValueOn();
-  draw->SetInputPath(roadExtraction->GetOutput());
-
-  writer->SetFileName(outputFileName);
-  writer->SetInput(draw->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbRoadExtractionTestDriver.cxx b/Modules/Detection/RoadExtraction/test/otbRoadExtractionTestDriver.cxx
deleted file mode 100644
index 2765863108877e2fb1ecda2ec2914a4e15316586..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbRoadExtractionTestDriver.cxx
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbTestMain.h"
-
-void RegisterTests()
-{
-  REGISTER_TEST(otbLikelihoodPathListFilter);
-  REGISTER_TEST(otbRemoveWrongDirectionFilter);
-  REGISTER_TEST(otbSimplifyPathListFilter);
-  REGISTER_TEST(otbAlignImageToPath);
-  REGISTER_TEST(otbNonMaxRemovalByDirectionFilter);
-  REGISTER_TEST(otbRoadExtractionFilter);
-  REGISTER_TEST(otbLinkPathListFilter);
-  REGISTER_TEST(otbRemoveTortuousPathListFilter);
-  REGISTER_TEST(otbParallelLinePathListFilter);
-  REGISTER_TEST(otbRemoveIsolatedByDirectionFilter);
-  REGISTER_TEST(otbVectorDataToRoadDescriptionFilter);
-  REGISTER_TEST(otbSimplifyManyPathListFilter);
-  REGISTER_TEST(otbNeighborhoodScalarProductFilter);
-  REGISTER_TEST(otbDrawPathAlign);
-  REGISTER_TEST(otbBreakAngularPathListFilter);
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbSimplifyManyPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbSimplifyManyPathListFilter.cxx
deleted file mode 100644
index 12a79b10a8160ea6d9fb4af08c92acb764607d27..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbSimplifyManyPathListFilter.cxx
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbSimplifyPathListFilter.h"
-#include "itkPolyLineParametricPath.h"
-#include <fstream>
-#include <cstdlib>
-
-/**
- * This filter is intended to test the multithreading capabilities
- * of the otb::UnaryFunctorObjectListFilter
- */
-
-int otbSimplifyManyPathListFilter(int itkNotUsed(argc), char * argv[])
-{
-  const char * outfname = argv[1];
-  const double tolerance = atof(argv[2]);
-
-//   typedef std::vector<double> PointsVectorType;
-//   typedef std::vector< PointsVectorType > PointsMatrixType;
-//   PointsMatrixType MatricePoints;
-//   PointsVectorType ListPoints;
-
-  const unsigned int Dimension = 2;
-  typedef itk::PolyLineParametricPath<Dimension>    PathType;
-  typedef otb::SimplifyPathListFilter<PathType>     SimplifyPathListFilterType;
-  typedef SimplifyPathListFilterType::InputListType PathListType;
-  PathType::ContinuousIndexType cindex;
-
-  PathListType::Pointer InputPathList = PathListType::New();
-
-  //Generate PathList
-  unsigned long int numberOfPaths = 10000;
-  srand(123456);
-
-  for (unsigned long int i = 0; i < numberOfPaths; ++i)
-    {
-    PathType::Pointer path = PathType::New();
-    //Generate PathList
-    unsigned int numberOfPoints = static_cast<int>((rand() / (RAND_MAX + 1.0)) * 90) + 10;
-//     std::cout << "List :" << numberOfPoints << " points" << std::endl;
-    cindex[0] = 0;
-    cindex[1] = 0;
-    for (unsigned int j = 0; j < numberOfPoints; ++j)
-      {
-      cindex[0] += (rand() / (RAND_MAX + 1.0)) * 100 - 50;
-      cindex[1] += (rand() / (RAND_MAX + 1.0)) * 100 - 50;
-//       std::cout << "Point Index :"<<cindex[0]<<", "<<cindex[1]<<std::endl;
-      path->AddVertex(cindex);
-      }
-    InputPathList->PushBack(path);
-    }
-  // Instantiating object
-  SimplifyPathListFilterType::Pointer simplifyFilter = SimplifyPathListFilterType::New();
-
-  simplifyFilter->SetInput(InputPathList);
-  simplifyFilter->GetFunctor().SetTolerance(tolerance);
-  simplifyFilter->Update();
-
-  PathListType::Pointer OutputPathList = simplifyFilter->GetOutput();
-
-  typedef PathListType::ConstIterator   PathListIteratorType;
-  typedef PathType::VertexListType      VertexListType;
-  typedef VertexListType::ConstIterator VertexIteratorType;
-
-  std::ofstream file;
-  file.open(outfname);
-  unsigned int         counter = 1;
-  PathListIteratorType pathListIt = InputPathList->Begin();
-
-  file << "TOLERANCE: " << simplifyFilter->GetFunctor().GetTolerance() << "(" << tolerance << ")" << std::endl;
-
-  pathListIt = OutputPathList->Begin();
-  file << "OUTPUT list of Path " << ": " << std::endl;
-  while (pathListIt != OutputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  file.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx b/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx
deleted file mode 100644
index 54095a10ec232ab00a3ac9cc1e55fd27d27a822f..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbSimplifyPathListFilter.cxx
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbSimplifyPathListFilter.h"
-#include "itkPolyLineParametricPath.h"
-#include <fstream>
-#include <cstdlib>
-
-int otbSimplifyPathListFilter(int itkNotUsed(argc), char * argv[])
-{
-  const char * outfname = argv[1];
-  const double tolerance = atof(argv[2]);
-
-  typedef std::vector<double>           PointsVectorType;
-  typedef std::vector<PointsVectorType> PointsMatrixType;
-  PointsMatrixType MatricePoints;
-  PointsVectorType ListPoints;
-
-  int cpt = 3;
-  ListPoints.clear();
-
-  while (argv[cpt] != nullptr)
-    {
-    if (argv[cpt][0] == '|')
-      {
-      if ((ListPoints.size() % 2) != 0)
-        {
-        itkGenericExceptionMacro(<< "Missing point in parameters !");
-        }
-      MatricePoints.push_back(ListPoints);
-      ListPoints.clear();
-      }
-    else
-      {
-      ListPoints.push_back(static_cast<double>(::atof(argv[cpt])));
-      }
-    ++cpt;
-    }
-  MatricePoints.push_back(ListPoints);
-
-  const unsigned int Dimension = 2;
-  typedef itk::PolyLineParametricPath<Dimension>    PathType;
-  typedef otb::SimplifyPathListFilter<PathType>     SimplifyPathListFilterType;
-  typedef SimplifyPathListFilterType::InputListType PathListType;
-  PathType::ContinuousIndexType cindex;
-
-  PathListType::Pointer InputPathList = PathListType::New();
-
-  //Generate PathList
-  for (PointsMatrixType::iterator listpos = MatricePoints.begin(); listpos != MatricePoints.end(); ++listpos)
-    {
-    PathType::Pointer path = PathType::New();
-    //Generate PathList
-    std::cout << "List " << std::endl;
-    for (PointsVectorType::iterator it = (*listpos).begin(); it != (*listpos).end(); ++it)
-      {
-      cindex[0] = *it;
-      ++it;
-      cindex[1] = *it;
-      std::cout << "Point Index :" << cindex[0] << ";" << cindex[1] << std::endl;
-      path->AddVertex(cindex);
-      }
-    InputPathList->PushBack(path);
-    }
-  // Instantiating object
-  SimplifyPathListFilterType::Pointer simplifyFilter = SimplifyPathListFilterType::New();
-
-  simplifyFilter->SetInput(InputPathList);
-  simplifyFilter->GetFunctor().SetTolerance(tolerance);
-  simplifyFilter->Update();
-
-  PathListType::Pointer OutputPathList = simplifyFilter->GetOutput();
-
-  typedef PathListType::ConstIterator   PathListIteratorType;
-  typedef PathType::VertexListType      VertexListType;
-  typedef VertexListType::ConstIterator VertexIteratorType;
-
-  std::ofstream file;
-  file.open(outfname);
-  unsigned int         counter = 1;
-  PathListIteratorType pathListIt = InputPathList->Begin();
-
-  file << "TOLERANCE: " << simplifyFilter->GetFunctor().GetTolerance() << "(" << tolerance << ")" << std::endl;
-  file << "INPUT list of Path " << ": " << std::endl;
-  while (pathListIt != InputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  counter = 1;
-  pathListIt = OutputPathList->Begin();
-  file << "OUTPUT list of Path " << ": " << std::endl;
-  while (pathListIt != OutputPathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  file.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/RoadExtraction/test/otbVectorDataToRoadDescriptionFilter.cxx b/Modules/Detection/RoadExtraction/test/otbVectorDataToRoadDescriptionFilter.cxx
deleted file mode 100644
index 98715c2b867184293e7943a188a534c96a928222..0000000000000000000000000000000000000000
--- a/Modules/Detection/RoadExtraction/test/otbVectorDataToRoadDescriptionFilter.cxx
+++ /dev/null
@@ -1,100 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "otbVectorDataToRoadDescriptionFilter.h"
-
-#include "otbVectorImage.h"
-#include "otbImageFileReader.h"
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataFileWriter.h"
-#include "otbVectorDataProperties.h"
-#include "otbRemoteSensingRegion.h"
-#include "otbVectorDataIntoImageProjectionFilter.h"
-
-
-
-
-
-int otbVectorDataToRoadDescriptionFilter(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputVD  = argv[1];
-  const char * inputImg = argv[2];
-  const char * inputDB  = argv[3];
-  const char * outputVD = argv[4];
-  const char * DEMDirectory = argv[5];
-  int DisplayWarnings   = atoi(argv[6]);
-
-  typedef double                             PrecisionType;
-  typedef otb::VectorData<PrecisionType, 2>  VectorDataType;
-  typedef otb::VectorImage<PrecisionType>    ImageType;
-
-  typedef otb::VectorDataToRoadDescriptionFilter<VectorDataType, ImageType>
-                                          VectorDataToRoadDescriptionFilterType;
-
-  typedef otb::ImageFileReader<ImageType> ImageReaderType;
-  typedef otb::VectorDataFileReader<VectorDataType>
-                                          VectorDataReaderType;
-  typedef otb::VectorDataFileWriter<VectorDataType>
-                                          VectorDataWriterType;
-  typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType>
-                                          VectorDataReProjFilter;
-
-
-  VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New();
-  VectorDataReaderType::Pointer DBReader = VectorDataReaderType::New();
-  ImageReaderType::Pointer      reader   = ImageReaderType::New();
-  VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New();
-  VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New();
-
-  VectorDataToRoadDescriptionFilterType::Pointer filter =
-    VectorDataToRoadDescriptionFilterType::New();
-
-  if (!DisplayWarnings)
-    {
-    reader->SetGlobalWarningDisplay(0);
-    }
-  otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDirectory);
-
-  reader->SetFileName(inputImg);
-  reader->UpdateOutputInformation();
-
-  DBReader->SetFileName(inputDB);
-  DBReader->Update();
-
-  vdReader->SetFileName(inputVD);
-  vdReader->Update();
-
-  vdReProjFilter->SetInputImage(reader->GetOutput());
-  vdReProjFilter->SetInputVectorData(vdReader->GetOutput());
-  vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true);
-  vdReProjFilter->Update();
-
-  filter->SetInput(vdReProjFilter->GetOutput());
-  filter->AddOpticalImage(reader->GetOutput());
-  filter->AddBuildingsDB(DBReader->GetOutput());
-
-  vdWriter->SetFileName(outputVD);
-  vdWriter->SetInput(filter->GetOutput());
-  vdWriter->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/UrbanArea/CMakeLists.txt b/Modules/Detection/UrbanArea/CMakeLists.txt
deleted file mode 100644
index 3bc279da0f37ffd74bdb90c4814be43d9ee1dec6..0000000000000000000000000000000000000000
--- a/Modules/Detection/UrbanArea/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-project(OTBUrbanArea)
-otb_module_impl()
diff --git a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h b/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h
deleted file mode 100644
index cfee272c5486c76220c4e513ea43b8647e518dbe..0000000000000000000000000000000000000000
--- a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.h
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbUrbanAreaDetectionImageFilter_h
-#define otbUrbanAreaDetectionImageFilter_h
-
-#include "otbImage.h"
-#include "otbWaterIndicesFunctor.h"
-#include "otbVegetationIndicesFunctor.h"
-#include "itkUnaryFunctorImageFilter.h"
-#include "itkBinaryErodeImageFilter.h"
-#include "itkBinaryDilateImageFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "itkMacro.h"
-#include "itkSobelEdgeDetectionImageFilter.h"
-#include "otbEdgeDetectorImageFilter.h"
-#include "otbEdgeDensityImageFilter.h"
-#include "otbBinaryImageDensityFunction.h"
-#include "otbVectorImageToIntensityImageFilter.h"
-
-namespace otb
-{
-
-namespace Functor
-{
-
-/** \class RadiometricNonWaterNonVegetationIndexFunctor
- *  \brief This functor computes ndwi and ndvi of an image
- *  \brief in order to find urban areas and generate a grayscale image
- *
- * \ingroup OTBUrbanArea
- */
-template<class TInput, class TOutput = double>
-class RadiometricNonWaterNonVegetationIndexFunctor
-{
-public:
-  typedef Functor::NDVI<double, double, double>  VegetationFunctorType;
-  typedef Functor::NDWI2<double, double, double> WaterFunctorType;
-  typedef TOutput                                ValueType;
-
-  VegetationFunctorType GetVegetationFunctor(){ return m_VegetationFunctor; }
-  WaterFunctorType GetWaterFunctor(){ return m_WaterFunctor; }
-
-  void SetRedIndex(int id){ m_VegetationFunctor.SetRedIndex(id); }
-  void SetGreenIndex(int id){ m_WaterFunctor.SetGIndex(id); }
-  void SetNIRIndex(int id)
-  {
-    m_VegetationFunctor.SetNIRIndex(id);
-    m_WaterFunctor.SetNIRIndex(id);
-  }
-
-  RadiometricNonWaterNonVegetationIndexFunctor(){}
-  virtual ~RadiometricNonWaterNonVegetationIndexFunctor(){}
-
-  inline TOutput operator ()(const TInput& pInPix)
-  {
-    TOutput lVIval, lWIval, lOutPix;
-
-    TInput zero = pInPix;
-    zero.Fill(0);
-    if (pInPix != zero)
-      {
-      lVIval = static_cast<ValueType>(std::max(0., m_VegetationFunctor(pInPix)));
-      lWIval = static_cast<ValueType>(std::max(0., m_WaterFunctor(pInPix)));
-
-      lOutPix = std::sqrt(std::abs((1 - lVIval) * (1 - lWIval)));
-      }
-    else lOutPix = 0;
-
-    return lOutPix;
-  }
-
-protected:
-  VegetationFunctorType m_VegetationFunctor;
-  WaterFunctorType      m_WaterFunctor;
-
-};
-
-/** \class RadiometricNonWaterNonVegetationDetectionFunctor
- *  \brief This functor uses computes RadiometricNonWaterNonVegetationIndexFunctor
- *  \brief and appli a threshold to produce a binary image
- *
- * \ingroup OTBUrbanArea
- */
-template<class TInput, class TOutput>
-class RadiometricNonWaterNonVegetationDetectionFunctor
-{
-public:
-  typedef RadiometricNonWaterNonVegetationIndexFunctor<TInput> RadiometricNonWaterNonVegetationIndexFunctorType;
-
-  RadiometricNonWaterNonVegetationDetectionFunctor()
-  {
-    m_LowerThreshold = 0.0;
-    m_UpperThreshold = 1.0;
-  }
-
-  virtual ~RadiometricNonWaterNonVegetationDetectionFunctor() {}
-  inline TOutput operator ()(const TInput& inPix)
-  {
-    // The vegetation and water areas are put to 0.
-    double indexesVal = static_cast<double>(m_RadiometricNonWaterNonVegetationIndexFunctor(inPix));
-
-    if ((indexesVal > m_LowerThreshold) && (indexesVal <= m_UpperThreshold))
-      {
-      return static_cast<TOutput>(1);
-      }
-    else
-      {
-      return static_cast<TOutput>(0);
-      }
-  }
-
-  void SetLowerThreshold(double threshold){ m_LowerThreshold = threshold; }
-  void SetUpperThreshold(double threshold){ m_UpperThreshold = threshold; }
-  double GetLowerThreshold(){ return m_LowerThreshold; }
-  double GetUpperThreshold(){ return m_UpperThreshold; }
-
-  void SetRedIndex(int id){ m_RadiometricNonWaterNonVegetationIndexFunctor.SetRedIndex(id); }
-  void SetGreenIndex(int id){ m_RadiometricNonWaterNonVegetationIndexFunctor.SetGreenIndex(id); }
-  void SetNIRIndex(int id){ m_RadiometricNonWaterNonVegetationIndexFunctor.SetNIRIndex(id); }
-
-protected:
-  RadiometricNonWaterNonVegetationIndexFunctorType m_RadiometricNonWaterNonVegetationIndexFunctor;
-  double                                           m_LowerThreshold;
-  double                                           m_UpperThreshold;
-
-};
-
-} //end namespace functor
-
-/** \class UrbanAreaDetectionImageFilter
- *  \brief This filter uses associated functors to produce a binary or grayscale image
- *  \brief where the white areas represents the urban areas.
- *
- * \ingroup OTBUrbanArea
- */
-template <class TInputImage, class TOutputImage,
-    class TFunction = Functor::RadiometricNonWaterNonVegetationIndexFunctor<
-        typename TInputImage::PixelType,
-        typename TOutputImage::PixelType> >
-class ITK_EXPORT UrbanAreaDetectionImageFilter :
-  public itk::ImageToImageFilter<TInputImage, TOutputImage>
-{
-public:
-  /** Standard class typedefs. */
-  typedef UrbanAreaDetectionImageFilter                      Self;
-  typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                            Pointer;
-  typedef itk::SmartPointer<const Self>                      ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(UrbanAreaDetectionImageFilter, itk::ImageToImageFilter);
-
-  /** Images typedefs */
-  typedef TInputImage                         VectorImageType;
-  typedef TOutputImage                        OutputImageType;
-  typedef double                              SingleImagePixelType;
-  typedef Image<SingleImagePixelType, 2>      SingleImageType;
-  typedef SingleImageType::SizeType           SizeType;
-  typedef typename OutputImageType::PixelType OutputImagePixelType;
-  typedef typename VectorImageType::PixelType VectorImagePixelType;
-
-  /** Filters typedefs */
-  // NonVegetationNonWaterIndexFilter
-  typedef Functor::RadiometricNonWaterNonVegetationDetectionFunctor<VectorImagePixelType,
-      OutputImagePixelType> FunctorType;
-  typedef itk::UnaryFunctorImageFilter <VectorImageType, OutputImageType,
-      FunctorType>                           UrbanAreaExtractionFilterType;
-  typedef typename UrbanAreaExtractionFilterType::Pointer
-  UrbanAreaExtrationFilterPointerType;
-  // Erode/Dilate Filters
-  typedef typename itk::BinaryBallStructuringElement<OutputImagePixelType,
-      2>                 StructuringElementType;
-  typedef typename itk::BinaryErodeImageFilter<OutputImageType, OutputImageType,
-      StructuringElementType>  ErodeFilterType;
-  typedef typename itk::BinaryDilateImageFilter<OutputImageType, OutputImageType,
-      StructuringElementType> DilateFilterType;
-  // Intensity
-  typedef VectorImageToIntensityImageFilter<VectorImageType, SingleImageType> IntensityFilterType;
-  typedef typename IntensityFilterType::Pointer                               IntensityFilterPointerType;
-  // EdgeDensityFilter
-  typedef BinaryImageDensityFunction<SingleImageType>
-  CountFunctionType;
-  typedef itk::SobelEdgeDetectionImageFilter<SingleImageType, SingleImageType> SobelType;
-  typedef EdgeDetectorImageFilter<SingleImageType, SingleImageType,
-      SobelType>                           SobelDetectorType;
-  typedef EdgeDensityImageFilter<SingleImageType, SingleImageType, SobelDetectorType,
-      CountFunctionType> EdgeDensityFilterType;
-  typedef typename EdgeDensityFilterType::Pointer
-  EdgeDensityFilterPointerType;
-  // Threshold
-  typedef itk::BinaryThresholdImageFilter<SingleImageType, OutputImageType> ThresholdFilterType;
-  typedef typename ThresholdFilterType::Pointer                             ThresholdFilterPointerType;
-  // Multiply
-  typedef itk::MultiplyImageFilter<VectorImageType, OutputImageType, VectorImageType> MultiplyImageFilterType;
-  typedef typename MultiplyImageFilterType::Pointer                                   MultiplyImageFilterPointerType;
-
-  /** Get/Set indices */
-  void SetRedIndex(int id){ m_UrbanAreaExtractionFilter->GetFunctor().SetRedIndex(id); }
-  void SetGreenIndex(int id){ m_UrbanAreaExtractionFilter->GetFunctor().SetGreenIndex(id); }
-  void SetNIRIndex(int id){ m_UrbanAreaExtractionFilter->GetFunctor().SetNIRIndex(id); }
-  unsigned int GetRedIndex(){ return m_UrbanAreaExtractionFilter->GetFunctor().GetRedIndex(); }
-  unsigned int GetGreenIndex(){ return m_UrbanAreaExtractionFilter->GetFunctor().GetGreenIndex(); }
-  unsigned int GetNIRIndex(){ return m_UrbanAreaExtractionFilter->GetFunctor().GetNIRIndex(); }
-  /** Get/Set threshold values */
-  itkGetMacro(ThresholdValue, double);
-  itkSetMacro(ThresholdValue, double);
-  itkGetMacro(ThresholdDensity, double);
-  itkSetMacro(ThresholdDensity, double);
-  itkGetMacro(SobelLowerThreshold, double);
-  itkSetMacro(SobelLowerThreshold, double);
-  itkGetMacro(SobelUpperThreshold, double);
-  itkSetMacro(SobelUpperThreshold, double);
-
-  /** Methods */
-  void GenerateData() override;
-
-protected:
-  UrbanAreaDetectionImageFilter();
-  ~UrbanAreaDetectionImageFilter() override{}
-
-private:
-  UrbanAreaDetectionImageFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  /** Filters */
-  IntensityFilterPointerType          m_IntensityFilter;
-  EdgeDensityFilterType::Pointer      m_EdgeDensityFilter;
-  SobelDetectorType::Pointer          m_SobelFilter;
-  ThresholdFilterPointerType          m_Thresholder;
-  UrbanAreaExtrationFilterPointerType m_UrbanAreaExtractionFilter;
-  MultiplyImageFilterPointerType      m_MultiplyFilter;
-
-  /** Thresholds */
-  double m_ThresholdValue;
-  double m_ThresholdDensity;
-
-  double m_SobelLowerThreshold;
-  double m_SobelUpperThreshold;
-
-}; // end class RadiometricNonWaterNonVegetationDetectionImageFilter
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbUrbanAreaDetectionImageFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.hxx b/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.hxx
deleted file mode 100644
index f9cc85fd1fe317ae0122d7185a102200295b964c..0000000000000000000000000000000000000000
--- a/Modules/Detection/UrbanArea/include/otbUrbanAreaDetectionImageFilter.hxx
+++ /dev/null
@@ -1,109 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbUrbanAreaDetectionImageFilter_hxx
-#define otbUrbanAreaDetectionImageFilter_hxx
-
-#include "otbUrbanAreaDetectionImageFilter.h"
-#include "itkProgressAccumulator.h"
-
-namespace otb
-{
-
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputImage, class TFunction>
-UrbanAreaDetectionImageFilter<TInputImage, TOutputImage, TFunction>
-::UrbanAreaDetectionImageFilter()
-{
-
-  m_IntensityFilter = IntensityFilterType::New();
-  m_EdgeDensityFilter = EdgeDensityFilterType::New();
-  m_SobelFilter = SobelDetectorType::New();
-  m_Thresholder = ThresholdFilterType::New();
-  m_UrbanAreaExtractionFilter = UrbanAreaExtractionFilterType::New();
-
-  m_MultiplyFilter = MultiplyImageFilterType::New();
-
-  /** Init the Pipeline */
-  // EdgeDensity
-  m_EdgeDensityFilter->SetInput(m_IntensityFilter->GetOutput());
-  m_EdgeDensityFilter->SetDetector(m_SobelFilter);
-  // Threshold
-  m_Thresholder->SetInput(m_EdgeDensityFilter->GetOutput());
-  // Mask Image
-  m_MultiplyFilter->SetInput2(m_Thresholder->GetOutput());
-  // NonVegetationNonWaterIndex
-  m_UrbanAreaExtractionFilter->SetInput(m_MultiplyFilter->GetOutput());
-
-  m_ThresholdValue = 0.5;
-  m_ThresholdDensity = 0.1;
-  m_SobelLowerThreshold = -100.0;
-  m_SobelUpperThreshold = 200.0;
-}
-
-/**
- * Parameters the filters of the pipeline
- */
-template <class TInputImage, class TOutputImage, class TFunction>
-void
-UrbanAreaDetectionImageFilter<TInputImage, TOutputImage, TFunction>
-::GenerateData()
-{
-
-  // Intensity
-  m_IntensityFilter->SetInput(this->GetInput());
-
-  // Edge Density
-  m_SobelFilter->SetLowerThreshold(m_SobelLowerThreshold);
-  m_SobelFilter->SetUpperThreshold(m_SobelUpperThreshold);
-  SizeType lSize;
-  lSize[0] = static_cast<unsigned int>(10);
-  lSize[1] = static_cast<unsigned int>(10);
-  m_EdgeDensityFilter->SetNeighborhoodRadius(lSize);
-
-  // Threshold
-  m_Thresholder->SetInsideValue(0);
-  m_Thresholder->SetOutsideValue(1);
-  m_Thresholder->SetLowerThreshold(-10.);
-  m_Thresholder->SetUpperThreshold(m_ThresholdDensity);
-
-  // Apply the mask on the input image
-  m_MultiplyFilter->SetInput1(this->GetInput());
-
-  // Give a threshold to urbanAreaFilter
-  m_UrbanAreaExtractionFilter->GetFunctor().SetLowerThreshold(m_ThresholdValue);
-
-  // Progress accumulator
-  itk::ProgressAccumulator::Pointer progress = itk::ProgressAccumulator::New();
-  progress->SetMiniPipelineFilter(this);
-  progress->RegisterInternalFilter(m_UrbanAreaExtractionFilter, 0.5f);
-
-  /** GraftOutput */
-  m_UrbanAreaExtractionFilter->GraftOutput(this->GetOutput());
-  m_UrbanAreaExtractionFilter->Update();
-  this->GraftOutput(m_UrbanAreaExtractionFilter->GetOutput());
-
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Detection/UrbanArea/otb-module.cmake b/Modules/Detection/UrbanArea/otb-module.cmake
deleted file mode 100644
index fdbd78381f39a9606ef054a34b63afe218380753..0000000000000000000000000000000000000000
--- a/Modules/Detection/UrbanArea/otb-module.cmake
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set(DOCUMENTATION "This module is concerned with the detection of urban area.")
-
-otb_module(OTBUrbanArea
-  DEPENDS
-    OTBStatistics
-    OTBITK
-    OTBImageBase
-    OTBEdge
-    OTBImageManipulation
-    OTBIndices
-
-  TEST_DEPENDS
-    OTBTestKernel
-    OTBImageIO
-
-  DESCRIPTION
-    "${DOCUMENTATION}"
-)
diff --git a/Modules/Detection/UrbanArea/test/CMakeLists.txt b/Modules/Detection/UrbanArea/test/CMakeLists.txt
deleted file mode 100644
index 48c2ed26443e5dd8564dfc84ecd9bceb0de148c8..0000000000000000000000000000000000000000
--- a/Modules/Detection/UrbanArea/test/CMakeLists.txt
+++ /dev/null
@@ -1,47 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-otb_module_test()
-
-set(OTBUrbanAreaTests
-otbUrbanAreaTestDriver.cxx
-otbUrbanAreaDetectionImageFilter.cxx
-)
-
-add_executable(otbUrbanAreaTestDriver ${OTBUrbanAreaTests})
-target_link_libraries(otbUrbanAreaTestDriver ${OTBUrbanArea-Test_LIBRARIES})
-otb_module_target_label(otbUrbanAreaTestDriver)
-
-# Tests Declaration
-
-
-otb_add_test(NAME raTvUrbanAreaDetectionImageFilter COMMAND otbUrbanAreaTestDriver
-  --compare-image ${EPSILON_8}   ${BASELINE}/raTvUrbanAreaDetection.png
-  ${TEMP}/raTvUrbanAreaDetection.png
-  otbUrbanAreaDetectionImageFilter
-  ${INPUTDATA}/qb_RoadExtract2sub200x200.tif
-  ${TEMP}/raTvUrbanAreaDetection.png
-  3    # red
-  2    # green
-  4    # nir
-  0.8  # threshold NDVI+NDWI
-  0.005 # threshold EdgeDensity
-  )
-
diff --git a/Modules/Detection/UrbanArea/test/otbUrbanAreaDetectionImageFilter.cxx b/Modules/Detection/UrbanArea/test/otbUrbanAreaDetectionImageFilter.cxx
deleted file mode 100644
index cac601a228731321ee4f17e2f45577f310261e5d..0000000000000000000000000000000000000000
--- a/Modules/Detection/UrbanArea/test/otbUrbanAreaDetectionImageFilter.cxx
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbVectorImage.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbUrbanAreaDetectionImageFilter.h"
-
-int otbUrbanAreaDetectionImageFilter(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  typedef double                                 PixelType;
-  typedef otb::VectorImage<PixelType, Dimension> InputVectorImageType;
-  typedef otb::Image<unsigned char, Dimension>   OutputImageType;
-
-  typedef otb::ImageFileReader<InputVectorImageType> ReaderType;
-
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  typedef otb::UrbanAreaDetectionImageFilter<InputVectorImageType,
-      OutputImageType> UrbanAreaDetectionFilterType;
-
-  // Instantiating objects
-  UrbanAreaDetectionFilterType::Pointer filter = UrbanAreaDetectionFilterType::New();
-  ReaderType::Pointer                   reader = ReaderType::New();
-  WriterType::Pointer                   writer = WriterType::New();
-
-  const char * inputFilename  = argv[1];
-  const char * outputFilename = argv[2];
-
-  reader->SetFileName(inputFilename);
-  writer->SetFileName(outputFilename);
-
-  filter->SetInput(reader->GetOutput());
-  filter->SetRedIndex(::atoi(argv[3]));
-  filter->SetGreenIndex(::atoi(argv[4]));
-  filter->SetNIRIndex(::atoi(argv[5]));
-  filter->SetThresholdValue(::atof(argv[6]));
-  filter->SetThresholdDensity(::atof(argv[7]));
-
-  writer->SetInput(filter->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Detection/UrbanArea/test/otbUrbanAreaTestDriver.cxx b/Modules/Detection/UrbanArea/test/otbUrbanAreaTestDriver.cxx
deleted file mode 100644
index 2d035d4ce44de5ef7094525271d5d64fc6603460..0000000000000000000000000000000000000000
--- a/Modules/Detection/UrbanArea/test/otbUrbanAreaTestDriver.cxx
+++ /dev/null
@@ -1,26 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbTestMain.h"
-
-void RegisterTests()
-{
-  REGISTER_TEST(otbUrbanAreaDetectionImageFilter);
-}
diff --git a/Modules/Feature/Edge/test/CMakeLists.txt b/Modules/Feature/Edge/test/CMakeLists.txt
index 687442cbfefdfdabffaa329e34f29029d1cb5a25..171dbfe4c705dfb54e101cc0c9697fcad5cb3fd7 100644
--- a/Modules/Feature/Edge/test/CMakeLists.txt
+++ b/Modules/Feature/Edge/test/CMakeLists.txt
@@ -120,7 +120,7 @@ otb_add_test(NAME bfTvPersistentVectorizationImageFilter COMMAND otbEdgeTestDriv
   ${BASELINE_FILES}/bfTvPersistentVectorizationImageFilterOutput.txt
   ${TEMP}/bfTvPersistentVectorizationImageFilterOutput.txt
   otbPersistentVectorizationFilter
-  ${INPUTDATA}/Seg1InputForRCC8Graph.tif
+  ${INPUTDATA}/labelImage_UnsignedChar.tif
   ${TEMP}/bfTvPersistentVectorizationImageFilterOutput.txt
   )
 
diff --git a/Modules/Feature/SeamCarving/CMakeLists.txt b/Modules/Feature/SeamCarving/CMakeLists.txt
deleted file mode 100644
index 48e2f8a8d73200ced3943178074537e8688b16ef..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-project(OTBSeamCarving)
-otb_module_impl()
diff --git a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h
deleted file mode 100644
index 7066a891f52719b0371d20eb5a13150e7a393def..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbAddCarvingPathFilter_h
-#define otbAddCarvingPathFilter_h
-
-#include "itkImageAndPathToImageFilter.h"
-#include "itkImageSliceIteratorWithIndex.h"
-
-namespace otb
-{
-/** \class AddCarvingPathFilter
- * \brief This class add pixels given in one path
- *
- * This filter add pixels found by the otb::ImageToCarvingPathFilter
- * thus increasing the image size.
-  * the image (if Direction is set to 0) or from left to right
-  * (if direction is set to 1). Pixel value is computed as the average
- * between the neighborhood pixels.
-  *
-  * This is one component necessary to apply the seam carving algorithm
-  * published by Shai Avidan, Ariel Shamir,
-  * Seam Carving for Content-Aware Image Resizing,
-  * ACM Transactions on Graphics, Volume 26, Number 3,
-  * SIGGRAPH 2007
-  *
-  * \par INPUTS
-   * The first input is an image, usually, the same one provided to the
- * otb::ImageToCarvingPathFilter
-   * The second input is a path, typically the output of otb::ImageToCarvingPathFilter.
-  *
-  * \par OUTPUTS
-  * The output is an image with a bigger size than the input image. There is one more
- * column if direction is 0 and one more line if direction is 1.
-  *
-  * \sa ImageToCarvingPathFilter
-  *
-  *
-  * \ingroup PathFilters
-  * \ingroup ImageFilters
- *
- * \ingroup OTBSeamCarving
-  */
-
-template <class TInputImage, class TInputPath, class TOutputImage>
-class ITK_EXPORT AddCarvingPathFilter : public itk::ImageAndPathToImageFilter<TInputImage, TInputPath, TOutputImage>
-{
-public:
-  /** Standard class typedefs. */
-  typedef AddCarvingPathFilter                                                  Self;
-  typedef itk::ImageAndPathToImageFilter<TInputImage, TInputPath, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                                               Pointer;
-  typedef itk::SmartPointer<const Self>                                         ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(AddCarvingPathFilter, itk::ImageAndPathToImageFilter);
-
-  /** Some convenient typedefs. */
-  typedef          TInputImage                   InputImageType;
-  typedef typename InputImageType::Pointer       InputImagePointer;
-  typedef typename InputImageType::ConstPointer  InputImageConstPointer;
-  typedef typename InputImageType::RegionType    InputImageRegionType;
-  typedef typename InputImageType::PixelType     InputImagePixelType;
-  typedef          TInputPath                    InputPathType;
-  typedef typename InputPathType::Pointer        InputPathPointer;
-  typedef typename InputPathType::ConstPointer   InputPathConstPointer;
-  typedef typename InputPathType::InputType      InputPathInputType;
-  typedef typename InputPathType::OutputType     InputPathOutputType;
-  typedef typename InputPathType::IndexType      InputPathIndexType;
-  typedef typename InputPathType::OffsetType     InputPathOffsetType;
-  typedef          TOutputImage                  OutputImageType;
-  typedef typename OutputImageType::Pointer      OutputImagePointer;
-  typedef typename OutputImageType::ConstPointer OutputImageConstPointer;
-
-  typedef typename OutputImageType::RegionType OutputImageRegionType;
-  typedef typename OutputImageType::PixelType  OutputImagePixelType;
-  typedef typename OutputImageType::ValueType  OutputImageValueType;
-
-//   typedef typename itk::ImageRegionConstIterator<InputImageType> InputIteratorType;
-//   typedef typename itk::ImageRegionIterator<OutputImageType> OutputIteratorType;
-  typedef typename itk::ImageSliceConstIteratorWithIndex<InputImageType> InputIteratorType;
-  typedef typename itk::ImageSliceIteratorWithIndex<OutputImageType>     OutputIteratorType;
-
-  /** Set/Get the path input of this process object.
-    Note: these methods are adding to get the proper name */
-  void SetInputPath(const TInputPath * path);
-
-  const TInputPath * GetInputPath(void);
-
-  itkSetMacro(Value, OutputImagePixelType);
-  itkGetConstReferenceMacro(Value, OutputImagePixelType);
-
-  /** Set and Get direction value */
-  itkSetMacro(Direction, unsigned int);
-  itkGetConstMacro(Direction, unsigned int);
-
-  void GenerateOutputInformation() override;
-  void GenerateInputRequestedRegion() override;
-
-protected:
-  AddCarvingPathFilter();
-  ~AddCarvingPathFilter() override {}
-
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  void GenerateData() override;
-
-private:
-  AddCarvingPathFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  OutputImagePixelType m_Value;
-  unsigned int         m_Direction;
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbAddCarvingPathFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.hxx b/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.hxx
deleted file mode 100644
index 5864bc0917135aa882a10265d23c3d21ed8a57cf..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/include/otbAddCarvingPathFilter.hxx
+++ /dev/null
@@ -1,278 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef otbAddCarvingPathFilter_hxx
-#define otbAddCarvingPathFilter_hxx
-
-#include "otbAddCarvingPathFilter.h"
-#include "itkMacro.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TInputPath, class TOutputImage>
-AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::AddCarvingPathFilter()
-{
-  m_Value = static_cast<OutputImagePixelType>(255.0);
-  m_Direction = 0;
-}
-/**
- * Main computation method.
- */
-template <class TInputImage, class TInputPath, class TOutputImage>
-inline void
-AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::SetInputPath(const TInputPath * path)
-{
-  this->SetPathInput(path);
-}
-template <class TInputImage, class TInputPath, class TOutputImage>
-const TInputPath *
-AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::GetInputPath(void)
-{
-  return this->GetPathInput();
-}
-
-template <class TInputImage, class TInputPath, class TOutputImage>
-void
-AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::GenerateData(void)
-{
-
-  const InputImageType * inputImage = this->GetImageInput();
-  const InputPathType *  inputPath = this->GetPathInput();
-  OutputImageType *      outputImage = this->GetOutput();
-
-  outputImage->SetBufferedRegion(outputImage->GetRequestedRegion());
-  outputImage->Allocate();
-
-  InputIteratorType inputIterator(inputImage,
-                                  inputImage->GetLargestPossibleRegion());
-  OutputIteratorType outputIterator(outputImage,
-                                    outputImage->GetLargestPossibleRegion());
-
-  unsigned int dir0;
-  unsigned int dir1;
-
-  if (m_Direction == 0)
-    {
-    dir0 = 0;
-    dir1 = 1;
-    }
-  else
-    {
-    dir0 = 1;
-    dir1 = 0;
-    }
-
-  inputIterator.SetFirstDirection(dir0);
-  inputIterator.SetSecondDirection(dir1);
-  inputIterator.GoToBegin();
-  outputIterator.SetFirstDirection(dir0);
-  outputIterator.SetSecondDirection(dir1);
-  outputIterator.GoToBegin();
-
-  int                                                   line = -1;
-  typename InputImageType::IndexType                    index;
-  typename InputPathType::VertexListType::ConstPointer  vertexList = inputPath->GetVertexList();
-  typename InputPathType::VertexListType::ConstIterator pathIterator;
-  typename InputImageType::IndexType                    indexToAdd;
-  typedef typename InputImageType::IndexType::IndexValueType IndexValueType;
-
-  typename InputImageType::SizeType inputSize;
-  inputSize = inputImage->GetLargestPossibleRegion().GetSize();
-
-  //go to the end of the path
-  pathIterator = vertexList->Begin();
-  while (pathIterator != vertexList->End())
-    {
-    ++pathIterator;
-    }
-  --pathIterator;
-
-  while (!outputIterator.IsAtEnd())
-    {
-    while (!outputIterator.IsAtEndOfSlice())
-      {
-      bool flag = false;
-      while (!outputIterator.IsAtEndOfLine())
-        {
-        index = outputIterator.GetIndex();
-
-        if (index[dir1] != line)
-          {
-          line = index[dir1];
-          typename InputImageType::PointType tmpIndex;
-          inputImage->TransformContinuousIndexToPhysicalPoint(pathIterator.Value(), tmpIndex);
-          inputImage->TransformPhysicalPointToIndex(tmpIndex, indexToAdd);
-          if (pathIterator != vertexList->Begin())
-            {
-            --pathIterator;
-            }
-          if (index[dir1] != indexToAdd[dir1])
-            {
-            itkExceptionMacro(<< "Error : " << index[dir1] << " , " << indexToAdd[dir1]);
-            }
-          }
-
-        if ((flag == true)
-            || ((index[dir0] != indexToAdd[dir0])
-                && (index[dir0] < static_cast<IndexValueType>(inputSize[dir0]))))
-          {
-          outputIterator.Set(inputIterator.Get());
-          ++inputIterator;
-          }
-        else
-          {
-          flag = true;
-          OutputImagePixelType newValue = itk::NumericTraits<OutputImagePixelType>::Zero;
-          int                  n = 0;
-          InputIteratorType    tmpIterator = inputIterator;
-          --tmpIterator;
-          if (!tmpIterator.IsAtReverseEndOfLine())
-            {
-            newValue = tmpIterator.Get();
-            ++n;
-            }
-          tmpIterator = inputIterator;
-          ++tmpIterator;
-          if (!tmpIterator.IsAtEndOfLine())
-            {
-            newValue += tmpIterator.Get();
-            ++n;
-            }
-          assert(n != 0);
-          newValue /= n;
-          outputIterator.Set(newValue);
-          }
-        ++outputIterator;
-
-        }
-
-      if ((outputIterator.GetIndex())[dir0] != (inputIterator.GetIndex())[dir0] + 1)
-        {
-        itkExceptionMacro(<< "Error 2: " << (outputIterator.GetIndex())[dir0] <<  " , "
-                          << (inputIterator.GetIndex())[dir0]);
-        }
-      inputIterator.NextLine();
-      outputIterator.NextLine();
-      }
-    inputIterator.NextSlice();
-    outputIterator.NextSlice();
-    }
-
-}
-
-/**
- * Printself Method
- */
-template <class TInputImage, class TInputPath, class TOutputImage>
-void
-AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "Path Value: " << m_Value << std::endl;
-}
-
-template <class TInputImage, class TInputPath, class TOutputImage>
-void
-AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::GenerateOutputInformation()
-{
-  // call the superclass' implementation of this method
-  Superclass::GenerateOutputInformation();
-
-  // get pointers to the input and output
-  typename Superclass::InputImageConstPointer inputPtr = this->GetInput();
-  typename Superclass::OutputImagePointer     outputPtr = this->GetOutput();
-
-  unsigned int dir0;
-  //unsigned int dir1;
-
-  if (m_Direction == 0)
-    {
-    dir0 = 0;
-    //dir1 = 1;
-    }
-  else
-    {
-    dir0 = 1;
-    //dir1 = 0;
-    }
-
-  // we need to compute the output spacing, the output image size, and the
-  // output image start index
-  const typename TInputImage::SpacingType&
-                                        inputSpacing = inputPtr->GetSignedSpacing();
-  const typename TInputImage::SizeType& inputSize
-    = inputPtr->GetLargestPossibleRegion().GetSize();
-  const typename TInputImage::IndexType& inputStartIndex
-    = inputPtr->GetLargestPossibleRegion().GetIndex();
-
-  typename TOutputImage::SpacingType outputSpacing;
-  typename TOutputImage::SizeType    outputSize;
-  typename TOutputImage::IndexType   outputStartIndex;
-
-  for (unsigned int i = 0; i < TOutputImage::ImageDimension; ++i)
-    {
-    outputSpacing[i] = inputSpacing[i];
-    outputSize[i] = (unsigned int) (inputSize[i]);
-    outputStartIndex[i] = inputStartIndex[i];
-    }
-  // we remove one column of the image
-  outputSize[dir0] = inputSize[dir0] + 1;
-
-  outputPtr->SetSignedSpacing(outputSpacing);
-
-  typename TOutputImage::RegionType outputLargestPossibleRegion;
-  outputLargestPossibleRegion.SetSize(outputSize);
-  outputLargestPossibleRegion.SetIndex(outputStartIndex);
-
-  outputPtr->SetLargestPossibleRegion(outputLargestPossibleRegion);
-}
-
-template <class TInputImage, class TInputPath, class TOutputImage>
-void
-AddCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::GenerateInputRequestedRegion()
-{
-  // call the superclass' implementation of this method
-  Superclass::GenerateInputRequestedRegion();
-  // get pointers to the input and output
-  InputImagePointer inputPtr =
-    const_cast<InputImageType *>(this->GetInput());
-  if (!inputPtr)
-    {
-    itkExceptionMacro(<< "Input has not been set.");
-    }
-
-  inputPtr->SetRequestedRegion(inputPtr->GetLargestPossibleRegion());
-
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h
deleted file mode 100644
index ad9142b72266dec5ef435f97e972d8adb24f574e..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageToCarvingPathFilter_h
-#define otbImageToCarvingPathFilter_h
-
-#include "otbImageToPathFilter.h"
-#include "itkImageSliceConstIteratorWithIndex.h"
-
-namespace otb
-{
-/**
- * \class ImageToCarvingPathFilter
- * \brief This filter find the minimum energy path of an image.
- *
- * This filter find the minimum energy path from top to bottom of
- * the image (if Direction is set to 0) or from left to right
- * (if direction is set to 1).
- *
- * This is one component necessary to apply the seam carving algorithm
- * published by Shai Avidan, Ariel Shamir,
- * Seam Carving for Content-Aware Image Resizing,
- * ACM Transactions on Graphics, Volume 26, Number 3,
- * SIGGRAPH 2007
- *
- * \par INPUTS
- * The input is an image, typically the output of a gradient filter.
- *
- * \par OUTPUTS
- * The output is
- * a polyline parametric path comprising one and only one pixel per line
- * (resp. column) if direction is 0 (resp. 1).
- *
- * \sa RemoveCarvingPathFilter
- *
- * \ingroup PathFilters
- * \ingroup ImageFilters
- *
- * \ingroup OTBSeamCarving
- */
-
-template <class TInputImage, class TOutputPath>
-class ITK_EXPORT ImageToCarvingPathFilter
-  : public ImageToPathFilter<TInputImage, TOutputPath>
-{
-public:
-  /** standards typedefs */
-  typedef ImageToCarvingPathFilter                    Self;
-  typedef ImageToPathFilter<TInputImage, TOutputPath> Superclass;
-  typedef itk::SmartPointer<Self>                     Pointer;
-  typedef itk::SmartPointer<const Self>               ConstPointer;
-
-  /// Creation through the object factory
-  itkNewMacro(Self);
-  /// Runtime information
-  itkTypeMacro(ImageToCarvingPathFilter, ImageToPathFilter);
-
-  /// Template parameters typedef
-  typedef typename Superclass::InputImageType        InputImageType;
-  typedef typename Superclass::InputImagePointerType InputImagePointerType;
-  typedef typename Superclass::OutputPathType        OutputPathType;
-  typedef typename Superclass::OutputPathPointerType OutputPathPointerType;
-
-  typedef typename InputImageType::PixelType PixelType;
-
-  /** Set and Get foreground value */
-  itkSetMacro(ForegroundValue, PixelType);
-  itkGetConstMacro(ForegroundValue, PixelType);
-
-  /** Set and Get direction value */
-  itkSetMacro(Direction, unsigned int);
-  itkGetConstMacro(Direction, unsigned int);
-
-  /** Get EnergyPerPix value */
-  itkGetConstMacro(EnergyPerPix, double);
-
-protected:
-  ImageToCarvingPathFilter();
-  ~ImageToCarvingPathFilter() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  void GenerateOutputInformation() override {}  //does nothing
-  void GenerateData() override;
-
-private:
-  ImageToCarvingPathFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  PixelType    m_ForegroundValue;
-  unsigned int m_Direction;
-  double       m_EnergyPerPix;
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbImageToCarvingPathFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.hxx b/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.hxx
deleted file mode 100644
index 11123630270d2e508b792d13397913d0b4c84bc3..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/include/otbImageToCarvingPathFilter.hxx
+++ /dev/null
@@ -1,262 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageToCarvingPathFilter_hxx
-#define otbImageToCarvingPathFilter_hxx
-
-#include "otbImageToCarvingPathFilter.h"
-#include "otbMacro.h"
-#include "itkConstantPadImageFilter.h"
-#include "itkConstShapedNeighborhoodIterator.h"
-#include "itkImageRegionConstIterator.h"
-#include "itkNumericTraits.h"
-#include "itkImageLinearConstIteratorWithIndex.h"
-
-namespace otb
-{
-/*
- * Constructor.
- */
-template <class TInputImage, class TOutputPath>
-ImageToCarvingPathFilter<TInputImage, TOutputPath>
-::ImageToCarvingPathFilter()
-{
-  m_ForegroundValue = PixelType(255);
-  m_Direction = 0;
-  m_EnergyPerPix = 0.0;
-}
-
-/**
- * Main computation method.
- */
-template <class TInputImage, class TOutputPath>
-void
-ImageToCarvingPathFilter<TInputImage, TOutputPath>
-::GenerateData(void)
-{
-
-  const InputImageType * inputImage = this->GetInput();
-  OutputPathType *       outputPath       = this->GetOutput();
-
-  typedef itk::ImageSliceConstIteratorWithIndex
-  <InputImageType> IteratorType;
-  typedef itk::NeighborhoodIterator<InputImageType>
-  NeighborhoodIteratorType;
-
-  IteratorType it(inputImage,
-                  inputImage->GetLargestPossibleRegion());
-  it.GoToBegin();
-
-  PixelType maxValue = itk::NumericTraits<PixelType>::max();
-
-  typename InputImageType::Pointer energyImage = InputImageType::New();
-  energyImage->SetRegions(inputImage->GetLargestPossibleRegion());
-  energyImage->Allocate();
-
-  typename NeighborhoodIteratorType::RadiusType radius;
-  radius.Fill(1);
-  NeighborhoodIteratorType neighIt(radius, energyImage,
-                                   energyImage->GetLargestPossibleRegion());
-  neighIt.GoToBegin();
-
-  unsigned int dir0;
-  unsigned int dir1;
-
-  typename IteratorType::OffsetType UP0;
-  typename IteratorType::OffsetType UP1;
-  typename IteratorType::OffsetType UP2;
-  typename IteratorType::OffsetType NEXT;
-
-  const typename IteratorType::OffsetType LEFT   = {{-1, 0}};
-  const typename IteratorType::OffsetType RIGHT  = {{1, 0}};
-  const typename IteratorType::OffsetType UP     = {{0, -1}};
-  const typename IteratorType::OffsetType DOWN   = {{0, 1}};
-  const typename IteratorType::OffsetType LEFTUP   = {{-1, -1}};
-//    const typename IteratorType::OffsetType RIGHTDOWN ={{1, 1}};
-  const typename IteratorType::OffsetType RIGHTUP  = {{1, -1}};
-  const typename IteratorType::OffsetType LEFTDOWN = {{-1, 1}};
-//    const typename IteratorType::OffsetType CENTER ={{0, 0}};
-
-  if (m_Direction == 0)
-    {
-    dir0 = 0;
-    dir1 = 1;
-    UP0 = LEFTUP;
-    UP1 = UP;
-    UP2 = RIGHTUP;
-    NEXT = DOWN;
-    }
-  else
-    {
-    dir0 = 1;
-    dir1 = 0;
-    UP0 = LEFTUP;
-    UP1 = LEFT;
-    UP2 = LEFTDOWN;
-    NEXT = RIGHT;
-    }
-
-  /** Compute the energy image top-down or left-right
-   * with cumulative energy (dynamic programming first step) */
-  it.SetFirstDirection(dir0);
-  it.SetSecondDirection(dir1);
-  it.GoToBegin();
-  neighIt.GoToBegin();
-  while (!it.IsAtEnd())
-    {
-    while (!it.IsAtEndOfSlice())
-      {
-      while (!it.IsAtEndOfLine())
-        {
-        neighIt.SetLocation(it.GetIndex()); //TODO bad for performances... find a better option
-        // this is really about 20% of total processing time !!!
-
-        PixelType min = maxValue;
-        bool      isInside = false;
-        bool      flag = false;
-        if (neighIt.GetPixel(UP0, isInside) < min)
-          {
-          if (isInside)
-            {
-            min = neighIt.GetPixel(UP0);
-            flag = true;
-            }
-          }
-        if (neighIt.GetPixel(UP1, isInside) < min)
-          {
-          if (isInside)
-            {
-            min = neighIt.GetPixel(UP1);
-            flag = true;
-            }
-          }
-        if (neighIt.GetPixel(UP2, isInside) < min)
-          {
-          if (isInside)
-            {
-            min = neighIt.GetPixel(UP2);
-            flag = true;
-            }
-          }
-
-        if (!flag) //no previous value
-          {
-          min = 0;
-          }
-
-        PixelType newValue = it.Get() + min;
-        neighIt.SetCenterPixel(newValue);
-
-        ++it;
-
-        }
-      it.NextLine();
-      }
-    it.NextSlice();
-    }
-
-  /** Follow the minima bottom-up or right-left
-   * (dynamic programming second step) */
-
-  //find the starting point to follow on the last line
-  typedef itk::ImageLinearConstIteratorWithIndex<InputImageType>
-  LinearIteratorType;
-
-  LinearIteratorType LinIt(energyImage,
-                           energyImage->GetLargestPossibleRegion());
-  LinIt.SetDirection(dir0);
-  LinIt.GoToReverseBegin();
-  typedef typename InputImageType::IndexType IndexType;
-
-  PixelType min = maxValue;
-  IndexType indexToAdd;
-  while (!LinIt.IsAtReverseEndOfLine())
-    {
-    if (LinIt.Get() < min)
-      {
-      min = LinIt.Get();
-      indexToAdd = LinIt.GetIndex();
-      }
-    --LinIt;
-    }
-  outputPath->AddVertex(indexToAdd);
-  m_EnergyPerPix = ((double) min) / (inputImage->GetLargestPossibleRegion().GetSize())[dir1];
-
-  //follow the min
-  neighIt.SetLocation(indexToAdd);
-  bool flag = true;
-  while (flag)
-    {
-    flag = false;
-    PixelType minValue = maxValue;
-    IndexType indexToAdd2;
-    bool      isInside = false;
-
-    if (neighIt.GetPixel(UP0, isInside) < min)
-      {
-      if (isInside)
-        {
-        minValue = neighIt.GetPixel(UP0);
-        indexToAdd2 = neighIt.GetIndex(UP0);
-        flag = true;
-        }
-      }
-
-    if (neighIt.GetPixel(UP1, isInside) < minValue)
-      {
-      if (isInside)
-        {
-        minValue = neighIt.GetPixel(UP1);
-        indexToAdd2 = neighIt.GetIndex(UP1);
-        flag = true;
-        }
-      }
-
-    if (neighIt.GetPixel(UP2, isInside) < minValue)
-      {
-      if (isInside)
-        {
-        minValue = neighIt.GetPixel(UP2);
-        indexToAdd2 = neighIt.GetIndex(UP2);
-        flag = true;
-        }
-      }
-
-    if (flag)
-      {
-      outputPath->AddVertex(indexToAdd2);
-      neighIt.SetLocation(indexToAdd2);
-      }
-
-    }
-
-}
-
-template <class TInputImage, class TOutputPath>
-void
-ImageToCarvingPathFilter<TInputImage, TOutputPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << "Foreground value : " << m_ForegroundValue << std::endl;
-}
-} // end namespace otb
-
-#endif
diff --git a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h b/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h
deleted file mode 100644
index c503944f713ee8a93ea76f5eb209557ee829ea45..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRemoveCarvingPathFilter_h
-#define otbRemoveCarvingPathFilter_h
-
-#include "itkImageAndPathToImageFilter.h"
-#include "itkImageSliceIteratorWithIndex.h"
-
-namespace otb
-{
-/** \class RemoveCarvingPathFilter
- * \brief This class remove pixels given in one path
- *
- *
- *
- * This filter remove pixels found by the otb::ImageToCarvingPathFilter
- * thus decreasing the image size.
-  * the image (if Direction is set to 0) or from left to right
-  * (if direction is set to 1).
-  *
-  * This is one component necessary to apply the seam carving algorithm
-  * published by Shai Avidan, Ariel Shamir,
-  * Seam Carving for Content-Aware Image Resizing,
-  * ACM Transactions on Graphics, Volume 26, Number 3,
-  * SIGGRAPH 2007
-  *
-  * \par INPUTS
-   * The first input is an image, usually, the same one provided to the
- * otb::ImageToCarvingPathFilter
-   * The second input is a path, typically the output of otb::ImageToCarvingPathFilter.
-  *
-  * \par OUTPUTS
-  * The output is an image with a smaller size than the input image. There is one less
- * column if direction is 0 and one less line if direction is 1.
-  *
-  * \sa ImageToCarvingPathFilter
-  *
-  *
-  * \ingroup PathFilters
-  * \ingroup ImageFilters
- *
- * \ingroup OTBSeamCarving
-  */
-
-template <class TInputImage, class TInputPath, class TOutputImage>
-class ITK_EXPORT RemoveCarvingPathFilter : public itk::ImageAndPathToImageFilter<TInputImage, TInputPath, TOutputImage>
-{
-public:
-  /** Standard class typedefs. */
-  typedef RemoveCarvingPathFilter                                               Self;
-  typedef itk::ImageAndPathToImageFilter<TInputImage, TInputPath, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                                               Pointer;
-  typedef itk::SmartPointer<const Self>                                         ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(RemoveCarvingPathFilter, itk::ImageAndPathToImageFilter);
-
-  /** Some convenient typedefs. */
-  typedef          TInputImage                   InputImageType;
-  typedef typename InputImageType::Pointer       InputImagePointer;
-  typedef typename InputImageType::ConstPointer  InputImageConstPointer;
-  typedef typename InputImageType::RegionType    InputImageRegionType;
-  typedef typename InputImageType::PixelType     InputImagePixelType;
-  typedef          TInputPath                    InputPathType;
-  typedef typename InputPathType::Pointer        InputPathPointer;
-  typedef typename InputPathType::ConstPointer   InputPathConstPointer;
-  typedef typename InputPathType::InputType      InputPathInputType;
-  typedef typename InputPathType::OutputType     InputPathOutputType;
-  typedef typename InputPathType::IndexType      InputPathIndexType;
-  typedef typename InputPathType::OffsetType     InputPathOffsetType;
-  typedef          TOutputImage                  OutputImageType;
-  typedef typename OutputImageType::Pointer      OutputImagePointer;
-  typedef typename OutputImageType::ConstPointer OutputImageConstPointer;
-
-  typedef typename OutputImageType::RegionType OutputImageRegionType;
-  typedef typename OutputImageType::PixelType  OutputImagePixelType;
-  typedef typename OutputImageType::ValueType  OutputImageValueType;
-
-//   typedef typename itk::ImageRegionConstIterator<InputImageType> InputIteratorType;
-//   typedef typename itk::ImageRegionIterator<OutputImageType> OutputIteratorType;
-  typedef typename itk::ImageSliceConstIteratorWithIndex<InputImageType> InputIteratorType;
-  typedef typename itk::ImageSliceIteratorWithIndex<OutputImageType>     OutputIteratorType;
-
-  /** Set/Get the path input of this process object.
-      Note: these methods are adding to get the proper name */
-  void SetInputPath(const TInputPath * path);
-
-  const TInputPath * GetInputPath(void);
-
-  itkSetMacro(Value, OutputImagePixelType);
-  itkGetConstReferenceMacro(Value, OutputImagePixelType);
-
-  /** Set and Get direction value */
-  itkSetMacro(Direction, unsigned int);
-  itkGetConstMacro(Direction, unsigned int);
-
-  void GenerateOutputInformation() override;
-
-protected:
-  RemoveCarvingPathFilter();
-  ~RemoveCarvingPathFilter() override {}
-
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  void GenerateData() override;
-
-private:
-  RemoveCarvingPathFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  OutputImagePixelType m_Value;
-  unsigned int         m_Direction;
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRemoveCarvingPathFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.hxx b/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.hxx
deleted file mode 100644
index 46640119ef2d1a78837cc0d9ab133ba0fb6a137e..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/include/otbRemoveCarvingPathFilter.hxx
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#ifndef otbRemoveCarvingPathFilter_hxx
-#define otbRemoveCarvingPathFilter_hxx
-
-#include "otbRemoveCarvingPathFilter.h"
-#include "itkMacro.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TInputPath, class TOutputImage>
-RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::RemoveCarvingPathFilter()
-{
-  m_Value = static_cast<OutputImagePixelType>(255.0);
-  m_Direction = 0;
-}
-
-template <class TInputImage, class TInputPath, class TOutputImage>
-inline void
-RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::SetInputPath(const TInputPath * path)
-{
-  this->SetPathInput(path);
-}
-
-template <class TInputImage, class TInputPath, class TOutputImage>
-const TInputPath *
-RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::GetInputPath(void)
-{
-  return this->GetPathInput();
-}
-
-/**
- * Main computation method.
- */
-template <class TInputImage, class TInputPath, class TOutputImage>
-void
-RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::GenerateData(void)
-{
-
-  const InputImageType * inputImage = this->GetImageInput();
-  const InputPathType *  inputPath = this->GetPathInput();
-  OutputImageType *      outputImage = this->GetOutput();
-
-  outputImage->SetBufferedRegion(outputImage->GetRequestedRegion());
-  outputImage->Allocate();
-
-  InputIteratorType inputIterator(inputImage,
-                                  inputImage->GetLargestPossibleRegion());
-  OutputIteratorType outputIterator(outputImage,
-                                    outputImage->GetLargestPossibleRegion());
-
-  unsigned int dir0;
-  unsigned int dir1;
-
-  if (m_Direction == 0)
-    {
-    dir0 = 0;
-    dir1 = 1;
-    }
-  else
-    {
-    dir0 = 1;
-    dir1 = 0;
-    }
-
-  inputIterator.SetFirstDirection(dir0);
-  inputIterator.SetSecondDirection(dir1);
-  inputIterator.GoToBegin();
-  outputIterator.SetFirstDirection(dir0);
-  outputIterator.SetSecondDirection(dir1);
-  outputIterator.GoToBegin();
-
-  int                                                   line = -1;
-  typename InputImageType::IndexType                    index;
-  typename InputPathType::VertexListType::ConstPointer  vertexList = inputPath->GetVertexList();
-  typename InputPathType::VertexListType::ConstIterator pathIterator;
-  typename InputImageType::IndexType                    indexToRemove;
-
-  //go to the end of the path
-  pathIterator = vertexList->Begin();
-  while (pathIterator != vertexList->End())
-    {
-    ++pathIterator;
-    }
-  --pathIterator;
-
-  while (!inputIterator.IsAtEnd())
-    {
-    while (!inputIterator.IsAtEndOfSlice())
-      {
-      while (!inputIterator.IsAtEndOfLine())
-        {
-        index = inputIterator.GetIndex();
-
-        if (index[dir1] != line)
-          {
-          line = index[dir1];
-          typename InputImageType::PointType tmpIndex;
-          inputImage->TransformContinuousIndexToPhysicalPoint(pathIterator.Value(), tmpIndex);
-          inputImage->TransformPhysicalPointToIndex(tmpIndex, indexToRemove);
-
-          if (pathIterator != vertexList->Begin())
-            {
-            --pathIterator;
-            }
-          if (index[dir1] != indexToRemove[dir1])
-            {
-            itkExceptionMacro(<< "Error!!!");
-            }
-          }
-        if (index[dir0] != indexToRemove[dir0])
-          {
-          outputIterator.Set(inputIterator.Get());
-          ++outputIterator;
-          }
-        ++inputIterator;
-        }
-      inputIterator.NextLine();
-      outputIterator.NextLine();
-      }
-    inputIterator.NextSlice();
-    outputIterator.NextSlice();
-    }
-
-}
-
-/**
- * Printself Method
- */
-template <class TInputImage, class TInputPath, class TOutputImage>
-void
-RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "Path Value: " << m_Value << std::endl;
-}
-
-template <class TInputImage, class TInputPath, class TOutputImage>
-void
-RemoveCarvingPathFilter<TInputImage, TInputPath, TOutputImage>
-::GenerateOutputInformation()
-{
-  // call the superclass' implementation of this method
-  Superclass::GenerateOutputInformation();
-
-  // get pointers to the input and output
-  typename Superclass::InputImageConstPointer inputPtr = this->GetInput();
-  typename Superclass::OutputImagePointer     outputPtr = this->GetOutput();
-
-  unsigned int dir0;
-  //unsigned int dir1;
-
-  if (m_Direction == 0)
-    {
-    dir0 = 0;
-    //dir1 = 1;
-    }
-  else
-    {
-    dir0 = 1;
-    //dir1 = 0;
-    }
-
-  // we need to compute the output spacing, the output image size, and the
-  // output image start index
-  const typename TInputImage::SpacingType&
-                                        inputSpacing = inputPtr->GetSignedSpacing();
-  const typename TInputImage::SizeType& inputSize
-    = inputPtr->GetLargestPossibleRegion().GetSize();
-  const typename TInputImage::IndexType& inputStartIndex
-    = inputPtr->GetLargestPossibleRegion().GetIndex();
-
-  typename TOutputImage::SpacingType outputSpacing;
-  typename TOutputImage::SizeType    outputSize;
-  typename TOutputImage::IndexType   outputStartIndex;
-
-  for (unsigned int i = 0; i < TOutputImage::ImageDimension; ++i)
-    {
-    outputSpacing[i] = inputSpacing[i];
-    outputSize[i] = (unsigned int) (inputSize[i]);
-    outputStartIndex[i] = inputStartIndex[i];
-    }
-  // we remove one column of the image
-  outputSize[dir0] = inputSize[dir0] - 1;
-
-  outputPtr->SetSignedSpacing(outputSpacing);
-
-  typename TOutputImage::RegionType outputLargestPossibleRegion;
-  outputLargestPossibleRegion.SetSize(outputSize);
-  outputLargestPossibleRegion.SetIndex(outputStartIndex);
-
-  outputPtr->SetLargestPossibleRegion(outputLargestPossibleRegion);
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Feature/SeamCarving/otb-module.cmake b/Modules/Feature/SeamCarving/otb-module.cmake
deleted file mode 100644
index d0f0c8465d5031e2097b607a671cbfe534636d43..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/otb-module.cmake
+++ /dev/null
@@ -1,38 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set(DOCUMENTATION "This module contains necessary components to apply the seam
-carving algorithm published by Shai Avidan, Ariel Shamir, Seam Carving for
-Content-Aware  Resizing, ACM Transactions on Graphics, Volume 26, Number 3, SIGGRAPH
-2007.")
-
-otb_module(OTBSeamCarving
-  DEPENDS
-    OTBPath
-    OTBCommon
-    OTBITK
-
-  TEST_DEPENDS
-    OTBTestKernel
-    OTBImageBase
-
-  DESCRIPTION
-    "${DOCUMENTATION}"
-)
diff --git a/Modules/Feature/SeamCarving/test/CMakeLists.txt b/Modules/Feature/SeamCarving/test/CMakeLists.txt
deleted file mode 100644
index f8775d775c5a1ca807d63b5504e0a58401cae263..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/test/CMakeLists.txt
+++ /dev/null
@@ -1,32 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-otb_module_test()
-
-set(OTBSeamCarvingTests
-otbSeamCarvingTestDriver.cxx
-)
-
-add_executable(otbSeamCarvingTestDriver ${OTBSeamCarvingTests})
-target_link_libraries(otbSeamCarvingTestDriver ${OTBSeamCarving-Test_LIBRARIES})
-otb_module_target_label(otbSeamCarvingTestDriver)
-
-# Tests Declaration
-
diff --git a/Modules/Feature/SeamCarving/test/otbSeamCarvingTestDriver.cxx b/Modules/Feature/SeamCarving/test/otbSeamCarvingTestDriver.cxx
deleted file mode 100644
index fb60f6825789081e61c2b52bad4e851b9758170f..0000000000000000000000000000000000000000
--- a/Modules/Feature/SeamCarving/test/otbSeamCarvingTestDriver.cxx
+++ /dev/null
@@ -1,25 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbTestMain.h"
-
-void RegisterTests()
-{
-}
diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h b/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h
deleted file mode 100644
index 6d8d3fb4e696f8ff9d426f83133276001766e4b6..0000000000000000000000000000000000000000
--- a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbBinaryImageMinimalBoundingRegionCalculator_h
-#define otbBinaryImageMinimalBoundingRegionCalculator_h
-
-#include "itkImageToImageFilter.h"
-#include "itkObjectFactory.h"
-
-namespace otb
-{
-/**
- * \class BinaryImageMinimalBoundingRegionCalculator
- * \brief This class compute the smallest region of the image
- * containing every pixel with the foreground value.
- *
- * This class is used for instance in the RCC8 calculator filter,
- * where the input region used for computation has to be the smallest possible
- * for costs reasons. The Pad arg allows the user to get a region of pad  pixel larger
- * at each bound in case a security margin has to be kept.
- *
- * \sa ImageToImageRCC8Calculator
- *
- * \ingroup OTBImageManipulation
- */
-template <class TInputImage>
-class ITK_EXPORT BinaryImageMinimalBoundingRegionCalculator
-  : public itk::ImageToImageFilter<TInputImage, TInputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef BinaryImageMinimalBoundingRegionCalculator        Self;
-  typedef itk::ImageToImageFilter<TInputImage, TInputImage> Superclass;
-  typedef itk::SmartPointer<Self>                           Pointer;
-  typedef itk::SmartPointer<const Self>                     ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(BinaryImageMinimalBoundingRegionCalculator, ImageToImageFilter);
-
-  typedef TInputImage                         InputImageType;
-  typedef typename InputImageType::PixelType  PixelType;
-  typedef typename InputImageType::RegionType RegionType;
-  typedef typename InputImageType::Pointer    InputImagePointerType;
-  /** Toogle the pad option */
-  itkGetMacro(Region, RegionType);
-  itkSetMacro(InsideValue, PixelType);
-  itkGetMacro(InsideValue, PixelType);
-  itkSetMacro(Pad, unsigned int);
-  itkGetMacro(Pad, unsigned int);
-
-protected:
-  /** Constructor */
-  BinaryImageMinimalBoundingRegionCalculator();
-  /** Destructor */
-  ~BinaryImageMinimalBoundingRegionCalculator() override {}
-  /** Main computation method */
-  void GenerateData(void) override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-private:
-  BinaryImageMinimalBoundingRegionCalculator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-  /** The computed region */
-  RegionType m_Region;
-  /** Toogle if pad wanted */
-  unsigned int m_Pad;
-  /** Inside value */
-  PixelType m_InsideValue;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbBinaryImageMinimalBoundingRegionCalculator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.hxx b/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.hxx
deleted file mode 100644
index cfe5d95b6b9d8099421302cab87764d99d84e8a3..0000000000000000000000000000000000000000
--- a/Modules/Filtering/ImageManipulation/include/otbBinaryImageMinimalBoundingRegionCalculator.hxx
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbBinaryImageMinimalBoundingRegionCalculator_hxx
-#define otbBinaryImageMinimalBoundingRegionCalculator_hxx
-
-#include "otbBinaryImageMinimalBoundingRegionCalculator.h"
-#include "itkImageSliceConstIteratorWithIndex.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/*
- * Constructor
- */
-template <class TInputImage>
-BinaryImageMinimalBoundingRegionCalculator<TInputImage>
-::BinaryImageMinimalBoundingRegionCalculator()
-{
-  // The pad option is desactivated by default
-  m_Pad = 0;
-  // Set the default region
-  typename InputImageType::SizeType  size;
-  typename InputImageType::IndexType index;
-  size[0] = 0;
-  size[1] = 0;
-  index[0] = 0;
-  index[1] = 0;
-  m_Region.SetSize(size);
-  m_Region.SetIndex(index);
-  m_InsideValue = static_cast<PixelType>(255);
-}
-/**
- * Main computation method
- */
-template <class TInputImage>
-void
-BinaryImageMinimalBoundingRegionCalculator<TInputImage>
-::GenerateData(void)
-{
-  // Input images pointers
-  const InputImageType* image = this->GetInput();
-  // Iterator definition
-  typedef itk::ImageSliceConstIteratorWithIndex<InputImageType> SliceIteratorType;
-  // Indexes containing upper-left and lower-right corner
-  typename InputImageType::IndexType min;
-  typename InputImageType::IndexType max;
-  min[0] = 0;
-  min[1] = 0;
-  max[1] = 0;
-  max[1] = 0;
-  for (unsigned int axis = 0; axis < InputImageType::ImageDimension; ++axis)
-    { // Create the forward iterator to find lower bound
-    SliceIteratorType fit(image, image->GetLargestPossibleRegion());
-
-    fit.SetFirstDirection(!axis);
-    fit.SetSecondDirection(axis);
-    fit.GoToBegin();
-
-    // Walk through the two images line by line
-    while (!fit.IsAtEnd())
-      {
-      while (!fit.IsAtEndOfSlice())
-        {
-        while (!fit.IsAtEndOfLine())
-          {
-          // If a common intersection is found
-          if (fit.Get() == m_InsideValue)
-            {
-            // then the lower bound is found
-            min[axis] = fit.GetIndex()[axis];
-            fit.GoToReverseBegin(); // skip to the end
-            break;
-            }
-          ++fit;
-          }
-        fit.NextLine();
-        }
-      fit.NextSlice();
-      }
-    // Create the reverse iterator to find upper bound
-    SliceIteratorType rit(image, image->GetLargestPossibleRegion());
-    rit.SetFirstDirection(!axis);
-    rit.SetSecondDirection(axis);
-    rit.GoToReverseBegin();
-    // Walk through the two images line by line
-    while (!rit.IsAtReverseEnd())
-      {
-      while (!rit.IsAtReverseEndOfSlice())
-        {
-        while (!rit.IsAtReverseEndOfLine())
-          {
-          // If a common intersection is found
-          if (rit.Get() == m_InsideValue)
-            {
-            max[axis] = rit.GetIndex()[axis];
-            rit.GoToBegin(); //Skip to reverse end
-            break;
-            }
-          --rit;
-
-          }
-        rit.PreviousLine();
-
-        }
-      rit.PreviousSlice();
-      }
-    }
-
-  typename InputImageType::SizeType  size;
-  typename InputImageType::IndexType index;
-
-  for (unsigned int i = 0; i < InputImageType::ImageDimension; ++i)
-    {
-    size[i] = max[i] - min[i] + 1;
-    index[i] = min[i];
-    }
-
-  m_Region.SetIndex(index);
-  m_Region.SetSize(size);
-
-  if (m_Pad)
-    {
-    m_Region.PadByRadius(m_Pad);
-    }
-
-  m_Region.Crop(image->GetLargestPossibleRegion());
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage>
-void
-BinaryImageMinimalBoundingRegionCalculator<TInputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-} // End namespace otb
-
-#endif
diff --git a/Modules/Filtering/ImageManipulation/test/CMakeLists.txt b/Modules/Filtering/ImageManipulation/test/CMakeLists.txt
index e8317ea3781b71aeff5124c768480cea1b8efd5c..53e76737f0b54cf6717ef348095b401642d630c8 100644
--- a/Modules/Filtering/ImageManipulation/test/CMakeLists.txt
+++ b/Modules/Filtering/ImageManipulation/test/CMakeLists.txt
@@ -51,7 +51,6 @@ otbVectorRescaleIntensityImageFilter.cxx
 otbLog10ThresholdedImageFilterTest.cxx
 otbExtractROIResample.cxx
 otbLocalGradientVectorImageFilter.cxx
-otbBinaryImageMinimalBoundingRegionCalculator.cxx
 otbPerBandVectorImageFilterWithSobelFilter.cxx
 otbBinaryImageDensityFunction.cxx
 otbThresholdVectorImageFilter.cxx
@@ -451,18 +450,6 @@ otb_add_test(NAME bfTvLocalGradientVectorImageFilter COMMAND otbImageManipulatio
   ${INPUTDATA}/cupriteSubHsi.tif
   ${TEMP}/bfTvLocalGradientVectorImageFilter.tif)
 
-otb_add_test(NAME bfTvBoundingRegionCalculator COMMAND otbImageManipulationTestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/bfBoundingRegionCalculatorOutput.txt
-  ${TEMP}/bfBoundingRegionCalculatorOutput.txt
-  otbBinaryImageMinimalBoundingRegionCalculator
-  4
-  ${TEMP}/bfBoundingRegionCalculatorOutput.txt
-  ${INPUTDATA}/rcc8_mire1.png
-  ${INPUTDATA}/rcc8_mire2.png
-  ${INPUTDATA}/rcc8_mire3.png
-  ${INPUTDATA}/rcc8_mire4.png
-  )
 
 otb_add_test(NAME bfTvPerBandVectorImageFilterWithSobelFilter COMMAND otbImageManipulationTestDriver
   --compare-image ${EPSILON_7}
diff --git a/Modules/Filtering/ImageManipulation/test/otbBinaryImageMinimalBoundingRegionCalculator.cxx b/Modules/Filtering/ImageManipulation/test/otbBinaryImageMinimalBoundingRegionCalculator.cxx
deleted file mode 100644
index 90d3167cbb890262026198319a4b781b9af99b73..0000000000000000000000000000000000000000
--- a/Modules/Filtering/ImageManipulation/test/otbBinaryImageMinimalBoundingRegionCalculator.cxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbImage.h"
-#include "otbBinaryImageMinimalBoundingRegionCalculator.h"
-#include "otbImageFileReader.h"
-#include "otbImageList.h"
-
-int otbBinaryImageMinimalBoundingRegionCalculator(int itkNotUsed(argc), char* argv[])
-{
-  const unsigned int Dimension = 2;
-
-  int    nbImages  = atoi(argv[1]);
-  char * outfile   = argv[2];
-
-  typedef unsigned char                    PixelType;
-  typedef otb::Image<PixelType, Dimension> ImageType;
-  typedef otb::ImageFileReader<ImageType>  ReaderType;
-  typedef otb::BinaryImageMinimalBoundingRegionCalculator<ImageType>
-  BoundingRegionCalculatorType;
-  typedef BoundingRegionCalculatorType::RegionType RegionType;
-  typedef otb::ImageList<ImageType>                ImageListType;
-  typedef ImageListType::Iterator                  IteratorType;
-  // reference image list
-  ImageListType::Pointer images = ImageListType::New();
-
-  // Reading input images
-  std::ofstream out;
-  out.open(outfile, std::ios::out);
-  out << "Test results from otbBinaryImageBoundingRegionCalculator test." << std::endl;
-  for (int i = 1; i <= nbImages; ++i)
-    {
-    ReaderType::Pointer reader = ReaderType::New();
-    reader->SetFileName(argv[2 + i]);
-    reader->Update();
-    images->PushBack(reader->GetOutput());
-    }
-
-  // Declaration
-  BoundingRegionCalculatorType::Pointer brct;
-  // Computing bounding region for each image
-  for (IteratorType it = images->Begin(); it != images->End(); ++it)
-    {
-    brct = BoundingRegionCalculatorType::New();
-    brct->SetInput(it.Get());
-    brct->Update();
-    RegionType region = brct->GetRegion();
-    out << region.GetIndex() << "\t" << region.GetSize() << std::endl;
-    }
-  out << std::endl << "Testing the pad option" << std::endl << std::endl;
-  for (IteratorType it = images->Begin(); it != images->End(); ++it)
-    {
-    brct = BoundingRegionCalculatorType::New();
-    brct->SetPad(1);
-    brct->SetInput(it.Get());
-    brct->Update();
-    RegionType region = brct->GetRegion();
-    out << region.GetIndex() << "\t" << region.GetSize() << std::endl;
-    }
-
-  out.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx b/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx
index 98efbed44de03307f9ab8818fc8dcd85d67110a9..0b24cab0e47dd8544329617ada28fc1433a2897a 100644
--- a/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx
+++ b/Modules/Filtering/ImageManipulation/test/otbImageManipulationTestDriver.cxx
@@ -51,7 +51,6 @@ void RegisterTests()
   REGISTER_TEST(otbLog10ThresholdedImageFilterTest);
   REGISTER_TEST(otbExtractROIResample);
   REGISTER_TEST(otbLocalGradientVectorImageFilterTest);
-  REGISTER_TEST(otbBinaryImageMinimalBoundingRegionCalculator);
   REGISTER_TEST(otbPerBandVectorImageFilterWithSobelFilter);
   REGISTER_TEST(otbBinaryImageDensityFunction);
   REGISTER_TEST(otbThresholdVectorImageFilterTest);
diff --git a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h b/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h
deleted file mode 100644
index f04fbd9892dcfbc7f378e0bdd6efce28e586f366..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.h
+++ /dev/null
@@ -1,126 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbParserConditionDataNodeFeatureFunction_h
-#define otbParserConditionDataNodeFeatureFunction_h
-
-#include "otbDataNodeImageFunction.h"
-#include "otbPolyLineImageConstIterator.h"
-#include "otbMaskMuParserFunctor.h"
-#include <string>
-
-namespace otb
-{
-/** \class ParserConditionDataNodeFeatureFunction
-  * \brief Compute a ParserCondition based feature alongside a
-  * datanode.
-  *
-  * This function evaluate a condition alongside a datanode.
-  * The descriptor is the percentage of pixels iterated for which
-  * the condition is true.
-  *
-  * \ingroup Functions
-  * \sa DataNodeImageFunction
-  * \sa SpectralAngleDataNodeFeatureFunction
- *
- * \ingroup OTBMathParser
-  */
-
-template <
-class TImage,
-class TCoordRep = double,
-class TPrecision = double
->
-class ITK_EXPORT ParserConditionDataNodeFeatureFunction :
-    public DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision>
-{
-public:
-  /** Standard class typedefs. */
-  typedef ParserConditionDataNodeFeatureFunction                         Self;
-  typedef DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision>
-                                                              Superclass;
-  typedef itk::SmartPointer<Self>                             Pointer;
-  typedef itk::SmartPointer<const Self>                       ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(ParserConditionDataNodeFeatureFunction, DataNodeImageFunction);
-
-  /** Some typedefs. */
-  typedef typename Superclass::DataNodeType           DataNodeType;
-  typedef typename DataNodeType::LineType             LineType;
-
-  typedef TImage                                      InputImageType;
-  typedef typename InputImageType::ConstPointer       InputImageConstPointer;
-  typedef typename InputImageType::PixelType          PixelType;
-  typedef typename InputImageType::InternalPixelType  ScalarRealType;
-  typedef typename InputImageType::IndexType          IndexType;
-  typedef typename InputImageType::IndexValueType     IndexValueType;
-
-  typedef TCoordRep                                   CoordRepType;
-
-  typedef TPrecision                                  PrecisionType;
-
-  typedef PolyLineImageConstIterator<InputImageType, LineType>
-                                                      ImageLineIteratorType;
-
-  typedef Functor::MaskMuParserFunctor<PixelType>      ParserConditionFunctorType;
-  typedef typename ParserConditionFunctorType::Pointer ParserConditionFunctorPointer;
-
-  typedef std::vector<PrecisionType>                  OutputType;
-
-  OutputType Evaluate( const DataNodeType& node ) const override;
-
-  std::string GetExpression() const
-  {
-    return m_ParserConditionFunctor->GetExpression();
-  }
-
-  void SetExpression(std::string expression)
-  {
-    m_ParserConditionFunctor->SetExpression(expression);
-  }
-
-  void SetSpectralAngleReferencePixel(const PixelType& pixel)
-  {
-    m_ParserConditionFunctor->SetSpectralAngleReferencePixel(pixel);
-  }
-
-protected:
-  ParserConditionDataNodeFeatureFunction();
-  ~ParserConditionDataNodeFeatureFunction() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  ParserConditionDataNodeFeatureFunction(const Self&) = delete;
-  void operator=(const Self&) = delete;
-
-  /** ParserCondition Functor */
-  ParserConditionFunctorPointer  m_ParserConditionFunctor;
-};
-
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbParserConditionDataNodeFeatureFunction.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.hxx b/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.hxx
deleted file mode 100644
index a32c38294f18b8a09a165f97bd7f347677813351..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MathParser/include/otbParserConditionDataNodeFeatureFunction.hxx
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbParserConditionDataNodeFeatureFunction_hxx
-#define otbParserConditionDataNodeFeatureFunction_hxx
-
-#include "otbParserConditionDataNodeFeatureFunction.h"
-
-namespace otb
-{
-
-/**
- * Constructor
- */
-template <class TImage, class TCoordRep, class TPrecision>
-ParserConditionDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>
-::ParserConditionDataNodeFeatureFunction()
-{
-  m_ParserConditionFunctor = ParserConditionFunctorType::New();
-}
-
-/**
- * Standard "PrintSelf" method
- */
-template <class TImage, class TCoordRep, class TPrecision>
-void
-ParserConditionDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>
-::PrintSelf( std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf( os, indent );
-  //os << indent << "ParserCondition : "    << m_ParserConditionFunctor << std::endl;
-}
-
-template <class TImage, class TCoordRep, class TPrecision>
-typename ParserConditionDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>
-::OutputType
- ParserConditionDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>
-::Evaluate( const DataNodeType& node ) const
-{
-  // The parser evaluation can't be const since the parser state
-  // changes at the first evaluation, but in fact we don't modify
-  // anything here.
-  // To fit with the rest of the framework, we try to keep the Evaluate
-  // function const
-  Self* _this = const_cast<Self*>(this);
-  ParserConditionFunctorType& parser = *(_this->m_ParserConditionFunctor);
-  // Ugly things over
-
-
-  const typename ImageLineIteratorType::PathType* path;
-
-  switch (node.GetNodeType())
-    {
-    case FEATURE_POINT:
-      {
-      itkExceptionMacro(<< "This DataNode type is not handle yet");
-      break;
-      }
-    case FEATURE_LINE:
-      {
-      path = node.GetLine();
-      break;
-      }
-    case FEATURE_POLYGON:
-      {
-      path = node.GetPolygonExteriorRing();
-      break;
-      }
-    default:
-      {
-      itkExceptionMacro(<< "This DataNode type is not handle yet");
-      break;
-      }
-    }
-
-  ImageLineIteratorType lineIt(this->GetInputImage(), path);
-  lineIt.GoToBegin();
-
-  double nbValidPixel = 0.;
-  double nbVisitedPixel = 0.;
-
-  while(!lineIt.IsAtEnd())
-    {
-    if(this->IsInsideBuffer(lineIt.GetIndex()))
-      {
-      if( parser(this->GetInputImage()->GetPixel(lineIt.GetIndex())) )
-        {
-        nbValidPixel += 1;
-        }
-      nbVisitedPixel += 1;
-      }
-    ++lineIt;
-    }
-
-  OutputType output;
-  if(nbVisitedPixel == 0)
-    {
-    output.push_back(static_cast<PrecisionType>(0.));
-    }
-  else
-    {
-    output.push_back(static_cast<PrecisionType>(nbValidPixel/nbVisitedPixel));
-    }
-
-  output.push_back(static_cast<PrecisionType>(nbValidPixel));
-  output.push_back(static_cast<PrecisionType>(nbVisitedPixel));
-  return output;
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Filtering/MathParser/test/CMakeLists.txt b/Modules/Filtering/MathParser/test/CMakeLists.txt
index 9f082865ac762f233a0383f097e990260d26203e..f2dbcdfd271d6eecd4f97d9e075847a7f49b85c3 100644
--- a/Modules/Filtering/MathParser/test/CMakeLists.txt
+++ b/Modules/Filtering/MathParser/test/CMakeLists.txt
@@ -23,7 +23,6 @@ otb_module_test()
 set(OTBMathParserTests
 otbMathParserTestDriver.cxx
 otbMaskMuParserFilterTest.cxx
-otbParserConditionDataNodeFeatureFunction.cxx
 otbParserTest.cxx
 otbImageListToSingleImageFilterTest.cxx
 otbBandMathImageFilter.cxx
@@ -48,32 +47,6 @@ otb_add_test(NAME bfTvMaskMuParserFilterTest COMMAND otbMathParserTestDriver
   "(b1>100)*(b2>120)"
   )
 
-otb_add_test(NAME bfTvParserConditionDataNodeFeatureFunction_Line_NDVI COMMAND otbMathParserTestDriver
-  --compare-ogr ${EPSILON_9}
-  ${BASELINE_FILES}/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp
-  ${TEMP}/bfTvParserConditionDataNodeFeatureFunction_Line_NDVI.shp
-  otbParserConditionDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/DEM/srtm_directory
-  ${TEMP}/bfTvParserConditionDataNodeFeatureFunction_Line_NDVI.shp
-  "ndvi(b3,b4) > 0.047"
-  0
-  )
-
-otb_add_test(NAME bfTvParserConditionDataNodeFeatureFunction_Polygon_NDVI COMMAND otbMathParserTestDriver
-  --compare-ogr ${EPSILON_6}
-  ${BASELINE_FILES}/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp
-  ${TEMP}/bfTvParserConditionDataNodeFeatureFunction_Polygon_NDVI.shp
-  otbParserConditionDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/DEM/srtm_directory
-  ${TEMP}/bfTvParserConditionDataNodeFeatureFunction_Polygon_NDVI.shp
-  "ndvi(b3,b4) > 0.047"
-  0
-  )
-
 otb_add_test(NAME coTvParser COMMAND otbMathParserTestDriver
   otbParserTest
   )
diff --git a/Modules/Filtering/MathParser/test/otbMathParserTestDriver.cxx b/Modules/Filtering/MathParser/test/otbMathParserTestDriver.cxx
index 5ef579c49abbcd1d1a033f9c42ac09072d8aad97..4f12db6c962a985a8c7a0d92e2a449f28e8aef28 100644
--- a/Modules/Filtering/MathParser/test/otbMathParserTestDriver.cxx
+++ b/Modules/Filtering/MathParser/test/otbMathParserTestDriver.cxx
@@ -23,7 +23,6 @@
 void RegisterTests()
 {
   REGISTER_TEST(otbMaskMuParserFilterTest);
-  REGISTER_TEST(otbParserConditionDataNodeFeatureFunction);
   REGISTER_TEST(otbParserTest);
   REGISTER_TEST(otbImageListToSingleImageFilter);
   REGISTER_TEST(otbBandMathImageFilter);
diff --git a/Modules/Filtering/MathParser/test/otbParserConditionDataNodeFeatureFunction.cxx b/Modules/Filtering/MathParser/test/otbParserConditionDataNodeFeatureFunction.cxx
deleted file mode 100644
index 4982b50ced444f777c2ae95ef66d2990c174319a..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MathParser/test/otbParserConditionDataNodeFeatureFunction.cxx
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include "otbParserConditionDataNodeFeatureFunction.h"
-
-#include "otbVectorImage.h"
-#include "otbImageFileReader.h"
-#include "otbVectorData.h"
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataIntoImageProjectionFilter.h"
-#include "otbVectorDataFileWriter.h"
-#include "itkPreOrderTreeIterator.h"
-
-
-int otbParserConditionDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputVD = argv[1];
-  const char * inputImg = argv[2];
-  const char * DEMDir = argv[3];
-  const char * outputVD = argv[4];
-  const char * expression = argv[5];
-  int DisplayWarnings = atoi(argv[6]);
-
-  typedef double CoordRepType;
-  typedef double PrecisionType;
-  typedef otb::VectorImage<PrecisionType> ImageType;
-  typedef otb::ImageFileReader<ImageType> ImageReaderType;
-  typedef otb::VectorData<CoordRepType, 2, PrecisionType> VectorDataType;
-  typedef VectorDataType::DataNodeType DataNodeType;
-  typedef otb::VectorDataFileReader<VectorDataType> VectorDataReaderType;
-  typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType> VectorDataReProjFilter;
-  typedef otb::VectorDataFileWriter<VectorDataType> VectorDataWriterType;
-  typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType> TreeIteratorType;
-
-  typedef otb::ParserConditionDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType>
-      ParserConditionDataNodeFeaturefunctionType;
-  typedef ParserConditionDataNodeFeaturefunctionType::OutputType ParserConditionFeatureOutputType;
-
-  ImageReaderType::Pointer imgReader = ImageReaderType::New();
-  VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New();
-  VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New();
-  VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New();
-  ParserConditionDataNodeFeaturefunctionType::Pointer
-      ParserConditionFeatureFunction = ParserConditionDataNodeFeaturefunctionType::New();
-
-  if (!DisplayWarnings)
-    {
-    imgReader->SetGlobalWarningDisplay(0);
-    }
-
-  otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDir);
-
-  vdReader->SetFileName(inputVD);
-  vdReader->Update();
-
-  imgReader->SetFileName(inputImg);
-  imgReader->UpdateOutputInformation();
-  imgReader->Update(); //Needed to set m_EndIndex, m_StartIndex in otbDataNodeImageFunction
-
-  vdReProjFilter->SetInputImage(imgReader->GetOutput());
-  vdReProjFilter->SetInputVectorData(vdReader->GetOutput());
-  vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true);
-  vdReProjFilter->Update();
-
-  ParserConditionFeatureFunction->SetExpression(expression);
-  ParserConditionFeatureFunction->SetInputImage(imgReader->GetOutput());
-
-  // Output
-  VectorDataType::Pointer outVD = VectorDataType::New();
-  // Retrieving root node
-  DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(document, root);
-  // Create the folder node
-  DataNodeType::Pointer folder = DataNodeType::New();
-  folder->SetNodeType(otb::FOLDER);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(folder, document);
-
-  TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature())
-      {
-      const DataNodeType::Pointer currentGeometry = itVector.Get();
-      ParserConditionFeatureOutputType currentResult;
-      currentResult = ParserConditionFeatureFunction->Evaluate(*(currentGeometry.GetPointer()));
-      currentGeometry->SetFieldAsDouble("NDVI", (double) (currentResult[0]));
-      outVD->GetDataTree()->Add(currentGeometry, folder);
-      }
-    ++itVector;
-    }
-
-  vdWriter->SetInput(outVD);
-  vdWriter->SetFileName(outputVD);
-  vdWriter->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/MorphologicalPyramid/CMakeLists.txt b/Modules/Filtering/MorphologicalPyramid/CMakeLists.txt
deleted file mode 100644
index fdbf5b6d47d68fab8095ce62a22602de84cc7092..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-project(OTBMorphologicalPyramid)
-otb_module_impl()
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h
deleted file mode 100644
index b74ea6f27e557e57d9f33e79217a4170cab9d26b..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.h
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidAnalysisFilter_h
-#define otbMorphologicalPyramidAnalysisFilter_h
-
-#include "otbImageToImageListFilter.h"
-
-namespace otb
-{
-/** \class MorphologicalPyramidAnalysisFilter
- * \brief Multiscale analysis filter using the morphological pyramid algorithm.
- *
- * Pyramidal decomposition is based on the following statement : once an
- * image has been smoothed with a linear filter, it does not contain
- * any more high-frequency details. Therefore, it can be down-sampled
- * without any loss of information, according to Shannon Theorem. By
- * iterating the same smoothing on the down-sampled image, a
- * multi-resolution decomposition of the scene is
- * computed. If the smoothing filter is a morphological filter, this
- * is no longer true, as the filter is not linear. However, by keeping
- * the details possibly lost in the down-sampling operation, such a
- * decomposition can be used.
- *
- * The MorphologicalPyramidAnalysisFilter provide such a
- * decomposition. It's computation process is an iterative analyse
- * involving smoothing by the morphological filter, computing the
- * details lost in the smoothing, down-sampling the current image, and
- * computing the details lost in the down-sampling.
- *
- * \ingroup MultiScale
- * \sa MorphologicalPyramidSynthesisFilter, OpeningClosingMorphologicalFilter,
- * ClosingOpeningMorphologicalFilter
- *
- * \ingroup OTBMorphologicalPyramid
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-class ITK_EXPORT MorphologicalPyramidAnalysisFilter
-  : public ImageToImageListFilter<TInputImage, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef MorphologicalPyramidAnalysisFilter                Self;
-  typedef ImageToImageListFilter<TInputImage, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                           Pointer;
-  typedef itk::SmartPointer<const Self>                     ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(MorphologicalPyramidAnalysisFilter, MorphologicalPyramidAnalysisFilter);
-  /** Input image dimension constant macro */
-  itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension);
-  /** Template parameters typedefs */
-  typedef TMorphoFilter                         MorphoFilterType;
-  typedef typename MorphoFilterType::KernelType KernelType;
-  /** Output related typedefs */
-  typedef typename Superclass::OutputImageType        OutputImageType;
-  typedef typename Superclass::OutputImageListType    OutputImageListType;
-  typedef typename OutputImageListType::Pointer       OutputImageListPointerType;
-  typedef typename Superclass::OutputImagePointerType OutputImagePointerType;
-  /** Input related typedefs */
-  typedef typename Superclass::InputImageType       InputImageType;
-  typedef typename Superclass::InputImageRegionType InputImageRegionType;
-  typedef typename InputImageType::Pointer          InputImagePointerType;
-  typedef typename InputImageType::ConstPointer     InputImageConstPointerType;
-  typedef typename InputImageType::SizeType         SizeType;
-  typedef typename InputImageType::ValueType        ValueType;
-  typedef typename InputImageType::PixelType        PixelType;
-  typedef typename InputImageType::SpacingType      SpacingType;
-  /** Accessors */
-  itkSetMacro(NumberOfLevels, int);
-  itkSetMacro(DecimationRatio, double);
-  itkGetConstReferenceMacro(NumberOfLevels, int);
-  itkGetConstReferenceMacro(DecimationRatio, double);
-  /**
-   * Get The Analyse image at each level of the pyramid.
-   * \return The analysed image at each level of the pyramid.
-   */
-  OutputImageListType* GetOutput(void) override;
-  /**
-   * Get The SupFilter details
-   * \return The brighter details extracted from the filtering operation.
-   */
-  OutputImageListType * GetSupFilter(void);
-  /**
-   * Get The InfFilter details
-   * \return The darker details extracted from the filtering operation.
-   */
-  OutputImageListType * GetInfFilter(void);
-  /**
-   * Get The SupDeci details
-   * \return The brighter details extracted from the resampling operation.
-   */
-  OutputImageListType * GetSupDeci(void);
-  /**
-   * Get The InfDeci details
-   * \return The brighter details extracted from the resampling operation.
-   */
-  OutputImageListType * GetInfDeci(void);
-
-protected:
-  /** Constructor */
-  MorphologicalPyramidAnalysisFilter();
-  /** Destructor */
-  ~MorphologicalPyramidAnalysisFilter() override;
-  void GenerateOutputInformation() override {}  // does nothing
-  /** Main computation method */
-  void GenerateData() override;
-  /** Printself method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  /** Number of levels of the algorithm */
-  int m_NumberOfLevels;
-  /** Subsampling scale used */
-  double m_DecimationRatio;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbMorphologicalPyramidAnalysisFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.hxx
deleted file mode 100644
index efa6eb0b51ea324ee4742cf7f7cc0c912dc060d3..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidAnalysisFilter.hxx
+++ /dev/null
@@ -1,294 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidAnalysisFilter_hxx
-#define otbMorphologicalPyramidAnalysisFilter_hxx
-
-#include "otbMorphologicalPyramidAnalysisFilter.h"
-
-#include "itkSubtractImageFilter.h"
-#include "itkMaximumImageFilter.h"
-#include "itkImageDuplicator.h"
-#include "otbMorphologicalPyramidResampler.h"
-#include "itkProgressAccumulator.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::MorphologicalPyramidAnalysisFilter()
-{
-  this->SetNumberOfRequiredOutputs(2);
-  m_DecimationRatio = 2.0;
-  m_NumberOfLevels = 4;
-  OutputImageListPointerType supFilter = OutputImageListType::New();
-  this->SetNthOutput(0, supFilter.GetPointer());
-  OutputImageListPointerType infFilter = OutputImageListType::New();
-  this->SetNthOutput(1, infFilter.GetPointer());
-  OutputImageListPointerType outputList = OutputImageListType::New();
-  this->SetNthOutput(2, outputList.GetPointer());
-  OutputImageListPointerType supDeci =   OutputImageListType::New();
-  this->SetNthOutput(3, supDeci.GetPointer());
-  OutputImageListPointerType infDeci =   OutputImageListType::New();
-  this->SetNthOutput(4, infDeci.GetPointer());
-}
-/**
- * Destructor
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::~MorphologicalPyramidAnalysisFilter() {}
-/**
- * Get The Analyse image at each level of the pyramid.
- * \return The analysed image at each level of the pyramid.
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::OutputImageListType*
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::GetOutput(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(2));
-}
-/**
- * Get The SupFilter details
- * \return The brighter details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::OutputImageListType*
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::GetSupFilter(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(0));
-}
-/**
- * Get The InfFilter details
- * \return The darker details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::OutputImageListType*
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::GetInfFilter(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(1));
-}
-/**
- * Get The SupDeci details
- * \return The brighter details extracted from the resampling operation.
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::OutputImageListType*
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::GetSupDeci(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(3));
-}
-/**
- * Get The InfDeci details
- * \return The brighter details extracted from the resampling operation.
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-typename MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::OutputImageListType*
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::GetInfDeci(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(4));
-}
-/**
- * Main computation method
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-void
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::GenerateData(void)
-{
-  // Input image pointer
-  OutputImageListType * OutputImageList   = this->GetOutput();
-
-  // Output images pointers
-  OutputImageListType * supFilter = this->GetSupFilter();
-  OutputImageListType * infFilter = this->GetInfFilter();
-  OutputImageListType * supDeci = this->GetSupDeci();
-  OutputImageListType * infDeci = this->GetInfDeci();
-
-  // typedefs of the filters
-  typedef itk::SubtractImageFilter<InputImageType, InputImageType, OutputImageType> SubtractFilterType;
-  typedef itk::MaximumImageFilter<InputImageType, InputImageType, InputImageType>   MaxFilterType;
-  typedef itk::ImageDuplicator<InputImageType>                                      DuplicatorType;
-  typedef otb::MorphologicalPyramid::Resampler<InputImageType, OutputImageType>     ResamplerType;
-
-  // Input Image duplication to the currentImage Pointer
-  typename DuplicatorType::Pointer duplicator = DuplicatorType::New();
-  duplicator->SetInputImage(this->GetInput());
-  duplicator->Update();
-  typename InputImageType::Pointer currentImage = duplicator->GetOutput();
-  typename InputImageType::Pointer upsampled;
-
-  // Structuring element size computation
-  const int structElementDimension = static_cast<int>(std::ceil(this->GetDecimationRatio() / 2.));
-
-  // Structuring element creation
-  KernelType structuringElement;
-  structuringElement.SetRadius(structElementDimension);
-  structuringElement.CreateStructuringElement();
-
-  // Filters declarations
-  typename MorphoFilterType::Pointer   morphoFilter;
-  typename MaxFilterType::Pointer      max;
-  typename SubtractFilterType::Pointer subtract1, subtract2, subtract3, subtract4;
-  typename ResamplerType::Pointer      resampler1, resampler2;
-
-  // Size declaration
-  typename InputImageType::SizeType size;
-
-  // local variables declarations and initializations
-  int i = 0;
-  int sizeTmp;
-  //--------------------------------------------------------//
-  //                      Main loop                         //
-  //--------------------------------------------------------//
-  // While the number of iterations is not reached
-  otbMsgDevMacro(<< "Entering main loop");
-  while (i < this->GetNumberOfLevels())
-    {
-
-    // morphological filtering
-    morphoFilter = MorphoFilterType::New();
-    morphoFilter->SetKernel(structuringElement);
-    morphoFilter->SetInput(currentImage);
-    morphoFilter->Update();
-
-    // Maximum between current and filtered image
-    max = MaxFilterType::New();
-    max->SetInput1(morphoFilter->GetOutput());
-    max->SetInput2(currentImage);
-    max->Update();
-
-    // SupFilter detail image computation
-    subtract1 = SubtractFilterType::New();
-    subtract1->SetInput1(max->GetOutput());
-    subtract1->SetInput2(morphoFilter->GetOutput());
-    subtract1->Update();
-    otbMsgDevMacro(
-      << "MorphologicalPyramidAnalysisFilter: subtract1 OK " <<
-      subtract1->GetOutput()->GetLargestPossibleRegion().GetSize());
-    supFilter->PushBack(subtract1->GetOutput());
-    otbMsgDevMacro("MorphologicalPyramidAnalysisFilter: step " << i << " - Image appended to SupFilter");
-
-    // InfFilter detail image computation
-    subtract2 = SubtractFilterType::New();
-    subtract2->SetInput1(max->GetOutput());
-    subtract2->SetInput2(currentImage);
-    subtract2->Update();
-    otbMsgDevMacro(
-      << "MorphologicalPyramidAnalysisFilter: subtract2 OK " <<
-      subtract2->GetOutput()->GetLargestPossibleRegion().GetSize());
-    infFilter->PushBack(subtract2->GetOutput());
-    otbMsgDevMacro("MorphologicalPyramidAnalysisFilter: step " << i << " - Image appended to InfFilter");
-
-    // New  Size
-    size = morphoFilter->GetOutput()->GetLargestPossibleRegion().GetSize();
-    for (unsigned int j = 0; j < InputImageType::ImageDimension; ++j)
-      {
-      sizeTmp = size[j];
-      // As we knwow that our values will always be positive ones, we can simulate round by ceil(value+0.5)
-      size[j] = static_cast<unsigned int>(std::ceil((static_cast<double>(sizeTmp) / this->GetDecimationRatio()) + 0.5));
-      }
-    otbMsgDevMacro(<< "New size: " << size);
-
-    // Image subsampling
-    // Current image becomes the newly subsampled image
-    resampler1 = ResamplerType::New();
-    resampler1->SetInput(morphoFilter->GetOutput());
-    resampler1->SetSize(size);
-    resampler1->Update();
-    currentImage = resampler1->GetOutput();
-
-    otbMsgDevMacro(
-      << "MorphologicalPyramidAnalysisFilter: DownSampling OK " << currentImage->GetLargestPossibleRegion().GetSize());
-    // New current image is appended to the output list
-    OutputImageList->PushBack(currentImage);
-
-    // Image upsampling
-    resampler2 = ResamplerType::New();
-    resampler2->SetInput(resampler1->GetOutput());
-    resampler2->SetSize(morphoFilter->GetOutput()->GetLargestPossibleRegion().GetSize());
-    resampler2->Update();
-
-    otbMsgDevMacro(
-      << "MorphologicalPyramidAnalysisFilter: UpSampling OK " <<
-      resampler2->GetOutput()->GetLargestPossibleRegion().GetSize());
-    // Computation of the details lost in the subsampling operation
-    max = MaxFilterType::New();
-    max->SetInput1(morphoFilter->GetOutput());
-    max->SetInput2(resampler2->GetOutput());
-    max->Update();
-    otbMsgDevMacro(
-      << "MorphologicalPyramidAnalysisFilter: Max OK " << max->GetOutput()->GetLargestPossibleRegion().GetSize());
-
-    // InfDeci detail image computation
-    subtract4 = SubtractFilterType::New();
-    subtract4->SetInput1(max->GetOutput());
-    subtract4->SetInput2(morphoFilter->GetOutput());
-    subtract4->Update();
-    otbMsgDevMacro(
-      << "MorphologicalPyramidAnalysisFilter: subtract4 OK " <<
-      subtract4->GetOutput()->GetLargestPossibleRegion().GetSize());
-    infDeci->PushBack(subtract4->GetOutput());
-    otbMsgDevMacro("MorphologicalPyramidAnalysisFilter: step " << i << " - Image appended to InfDeci");
-
-    // SupDeci detail image computation
-    subtract3 = SubtractFilterType::New();
-    subtract3->SetInput1(max->GetOutput());
-    subtract3->SetInput2(resampler2->GetOutput());
-    subtract3->Update();
-    otbMsgDevMacro(
-      << "MorphologicalPyramidAnalysisFilter: subtract3 OK " <<
-      subtract3->GetOutput()->GetLargestPossibleRegion().GetSize());
-    supDeci->PushBack(subtract3->GetOutput());
-    otbMsgDevMacro("MorphologicalPyramidAnalysisFilter: step " << i << " - Image appended to SupDeci");
-
-    // Iteration ounter incrementation
-    ++i;
-    }
-  otbMsgDevMacro(<< "Exiting main loop");
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage, class TOutputImage, class TMorphoFilter>
-void
-MorphologicalPyramidAnalysisFilter<TInputImage, TOutputImage, TMorphoFilter>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "DecimationRatio: " << m_DecimationRatio << std::endl;
-  os << indent << "NumberOfLevels: " << m_NumberOfLevels << std::endl;
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h
deleted file mode 100644
index 65768b624caba0047b54cb4ced32745a59326cca..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidMRToMSConverter_h
-#define otbMorphologicalPyramidMRToMSConverter_h
-
-#include "otbImageListToImageListFilter.h"
-
-namespace otb
-{
-namespace MorphologicalPyramid
-{
-/**
- * \class MRToMSConverter
- * \brief This class convert a multi resolution decomposition from the morphological pyramid to a multi-scale one.
- *
- * This class convert a multi resolution decomposition from the morphological pyramid to a multi-scale one.
- *
- * The operation consists in iterativly upsampling and adding decimation details to a given detail image.
- *
- * \sa MorphologicalPyramidAnalyseFilter
- * \sa MorphologicalPyramidSynthesisFilter
- *
- * \ingroup OTBMorphologicalPyramid
- */
-template <class TInputImage, class TOutputImage>
-class ITK_EXPORT MRToMSConverter
-  : public ImageListToImageListFilter<TInputImage, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef MRToMSConverter                                       Self;
-  typedef ImageListToImageListFilter<TInputImage, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                               Pointer;
-  typedef itk::SmartPointer<const Self>                         ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(MRToMSConverter, ImageListToImageListFilter);
-  /** Input parameters typedefs */
-  typedef TInputImage                                    InputImageType;
-  typedef typename Superclass::InputImagePointer         InputImagePointer;
-  typedef typename Superclass::InputImageListType        InputImageListType;
-  typedef typename Superclass::InputImageListPointerType InputImageListPointerType;
-  typedef typename InputImageListType::Iterator          InputImageListIteratorType;
-  /** Output parameters typedefs */
-  typedef TOutputImage                                    OutputImageType;
-  typedef typename Superclass::OutputImagePointer         OutputImagePointerType;
-  typedef typename Superclass::OutputImageListType        OutputImageListType;
-  typedef typename Superclass::OutputImageListPointerType OutputImageListPointerType;
-
-  /**
-   * Set The input list.
-   * \param imageList The analysed image at each level of the pyramid.
-   */
-  using Superclass::SetInput;
-  void SetInput(const InputImageListType * imageList) override;
-  /**
-   * Set The SupFilter details
-   * \param imageList The brighter details extracted from the filtering operation.
-   */
-  void SetSupFilter(InputImageListType * imageList);
-  /**
-   * Set The InfFilter details
-   * \param imageList The darker details extracted from the filtering operation.
-   */
-  void SetInfFilter(InputImageListType * imageList);
-  /**
-   * Set The SupDeci details
-   * \param imageList The brighter details extracted from the filtering operation.
-   */
-  void SetSupDeci(InputImageListType * imageList);
-  /**
-   * Set The InfDeci details
-   * \param imageList The darker details extracted from the filtering operation.
-   */
-  void SetInfDeci(InputImageListType * imageList);
-  /**
-   * Get the input list.
-   * \return The list of the analysed image at each pyramid level.
-   */
-  InputImageListType* GetInput(void) override;
-  /**
-   * Get The SupFilter details
-   * \return The brighter details extracted from the filtering operation.
-   */
-  InputImageListType* GetSupFilter(void);
-  /**
-   * Get The InfFilter details
-   * \return The darker details extracted from the filtering operation.
-   */
-  InputImageListType* GetInfFilter(void);
-  /**
-   * Get The SupDeci details
-   * \return The brighter details extracted from the resampling operation.
-   */
-  InputImageListType* GetSupDeci(void);
-  /**
-   * Get The InfDeci details
-   * \return The brighter details extracted from the resampling operation.
-   */
-  InputImageListType* GetInfDeci(void);
-  /**
-   * Get The inputList at full resolution.
-   * \return The analysed image at each pyramid level
-   * resampled at full resolution.
-   */
-  OutputImageListType* GetOutput(void) override;
-  /**
-   * Get The SupFilter details at full resolution.
-   * \return The brighter details extracted from the filtering operation
-   * resampled at full resolution.
-   */
-  OutputImageListType * GetSupFilterFullResolution(void);
-  /**
-   * Get The InfFilter details at full resolution.
-   * \return The darker details extracted from the filtering operation
-   * resampled at full resolution.
-   */
-  OutputImageListType * GetInfFilterFullResolution(void);
-  /**
-   * Get The SupDeci details at full resolution.
-   * \return The brighter details extracted from the resampling operation
-   * resampled at full resolution.
-   */
-  OutputImageListType * GetSupDeciFullResolution(void);
-  /**
-   * Get The InfDeci details at full resolution.
-   * \return The darker details extracted from the resampling operation
-   * resampled at full resolution.
-   */
-  OutputImageListType * GetInfDeciFullResolution(void);
-
-protected:
-  /** Constructor */
-  MRToMSConverter();
-  /** Destructor */
-  ~MRToMSConverter() override {}
-
-  /** Main computation method */
-  void GenerateData() override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  MRToMSConverter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace MorphologicalPyramid
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbMorphologicalPyramidMRToMSConverter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.hxx
deleted file mode 100644
index 51f9ff57e667d987d420a3a02d2c8a120da27e46..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidMRToMSConverter.hxx
+++ /dev/null
@@ -1,359 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidMRToMSConverter_hxx
-#define otbMorphologicalPyramidMRToMSConverter_hxx
-
-#include "otbMorphologicalPyramidMRToMSConverter.h"
-#include "otbMorphologicalPyramidResampler.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-namespace MorphologicalPyramid
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputImage>
-MRToMSConverter<TInputImage, TOutputImage>
-::MRToMSConverter()
-{
-  this->SetNumberOfRequiredInputs(2);
-  this->SetNumberOfRequiredOutputs(2);
-  OutputImageListPointerType supFilter = OutputImageListType::New();
-  this->SetNthOutput(0, supFilter.GetPointer());
-  OutputImageListPointerType infFilter = OutputImageListType::New();
-  this->SetNthOutput(1, infFilter.GetPointer());
-  OutputImageListPointerType outputList = OutputImageListType::New();
-  this->SetNthOutput(2, outputList.GetPointer());
-  OutputImageListPointerType supDeci =   OutputImageListType::New();
-  this->SetNthOutput(3, supDeci.GetPointer());
-  OutputImageListPointerType infDeci =   OutputImageListType::New();
-  this->SetNthOutput(4, infDeci.GetPointer());
-}
-/**
- * Get The inputList at full resolution.
- * \return The analysed image at each pyramid level
- * resampled at full resolution.
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::OutputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetOutput(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(2));
-}
-/**
- * Get The SupFilter details at full resolution.
- * \return The brighter details extracted from the filtering operation.
- * resampled at full resolution.
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::OutputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetSupFilterFullResolution(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(0));
-}
-/**
- * Get The InfFilter details at full resolution.
- * \return The darker details extracted from the filtering operation.
- * resampled at full resolution.
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::OutputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetInfFilterFullResolution(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(1));
-}
-/**
- * Get The SupDeci details at full resolution.
- * \return The brighter details extracted from the resampling operation.
- * resampled at full resolution.
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::OutputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetSupDeciFullResolution(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(3));
-}
-/**
- * Get The InfDeci details  at full resolution.
- * \return The brighter details extracted from the resampling operation.
- * resampled at full resolution.
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::OutputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetInfDeciFullResolution(void)
-{
-  return dynamic_cast<OutputImageListType*>(this->itk::ProcessObject::GetOutput(4));
-}
-/**
- * Set The input list.
- * \param imageList The analysed image at each level of the pyramid.
- */
-template <class TInputImage, class TOutputImage>
-void
-MRToMSConverter<TInputImage, TOutputImage>
-::SetInput(const InputImageListType * imageList)
-{
-  this->SetNthInput(2, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Set The SupFilter details
- * \param imageList The brighter details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MRToMSConverter<TInputImage, TOutputImage>
-::SetSupFilter(InputImageListType * imageList)
-{
-  this->SetNthInput(0, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Set The InfFilter details
- * \param imageList The darker details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MRToMSConverter<TInputImage, TOutputImage>
-::SetInfFilter(InputImageListType * imageList)
-{
-  this->SetNthInput(1, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Set The SupDeci details
- * \param imageList The brighter details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MRToMSConverter<TInputImage, TOutputImage>
-::SetSupDeci(InputImageListType * imageList)
-{
-  this->SetNthInput(3, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Set The InfDeci details
- * \param imageList The darker details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MRToMSConverter<TInputImage, TOutputImage>
-::SetInfDeci(InputImageListType * imageList)
-{
-  this->SetNthInput(4, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Get the input list.
- * \return The list of the analysed image at each pyramid level.
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::InputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetInput(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(2));
-}
-/**
- * Get The SupFilter details.
- * \return The brighter details extracted from the filtering operation
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::InputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetSupFilter(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(0));
-}
-/**
- * Get The InfFilter details.
- * \return The darker details extracted from the filtering operation
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::InputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetInfFilter(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(1));
-}
-/**
- * Get The SupDeci details.
- * \return The brighter details extracted from the resampling operation
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::InputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetSupDeci(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(3));
-}
-/**
- * Get The InfDeci details.
- * \return The darker details extracted from the resampling operation.
- */
-template <class TInputImage, class TOutputImage>
-typename MRToMSConverter<TInputImage, TOutputImage>
-::InputImageListType*
-MRToMSConverter<TInputImage, TOutputImage>
-::GetInfDeci(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(4));
-}
-/**
- * Main computation method
- */
-template <class TInputImage, class TOutputImage>
-void
-MRToMSConverter<TInputImage, TOutputImage>
-::GenerateData()
-{
-  // Input images lists pointers
-  InputImageListPointerType supFilter = this->GetSupFilter();
-  InputImageListPointerType infFilter = this->GetInfFilter();
-  InputImageListPointerType supDeci = this->GetSupDeci();
-  InputImageListPointerType infDeci = this->GetInfDeci();
-  InputImageListPointerType inputList = this->GetInput();
-
-  // Output images lists pointers
-  OutputImageListPointerType supFilterFullResolution = this->GetSupFilterFullResolution();
-  OutputImageListPointerType infFilterFullResolution = this->GetInfFilterFullResolution();
-  OutputImageListPointerType supDeciFullResolution = this->GetSupDeciFullResolution();
-  OutputImageListPointerType infDeciFullResolution = this->GetInfDeciFullResolution();
-  OutputImageListPointerType outputList = this->GetOutput();
-
-  // typedef of the resampling filter
-  typedef otb::MorphologicalPyramid::Resampler<InputImageType, OutputImageType> ResamplerType;
-
-  // Definition of the resampler filters
-  typename ResamplerType::Pointer resampler;
-
-  // Full resolution size
-  typename InputImageType::SizeType frsize = supFilter->Front()->GetLargestPossibleRegion().GetSize();
-  otbMsgDevMacro(<< "MRToMSConverter: Full resolution size: " << frsize);
-
-  // SupFilter resampling
-  otbMsgDevMacro(<< "MRToMSConverter: SupFilter resampling.");
-  InputImageListIteratorType it = supFilter->Begin();
-  // The first image does not need any resampling
-  supFilterFullResolution->PushBack(it.Get());
-  ++it;
-  for (; it != supFilter->End(); ++it)
-    {
-    resampler = ResamplerType::New();
-    resampler->SetSize(frsize);
-    resampler->SetInput(it.Get());
-    resampler->Update();
-    supFilterFullResolution->PushBack(resampler->GetOutput());
-    }
-  otbMsgDevMacro(<< "MRToMSConverter: InfFilter resampling.");
-  // InfFilter resampling
-  it = infFilter->Begin();
-  // The first image does not need any resampling
-  infFilterFullResolution->PushBack(it.Get());
-  ++it;
-  for (; it != infFilter->End(); ++it)
-    {
-    resampler = ResamplerType::New();
-    resampler->SetSize(frsize);
-    resampler->SetInput(it.Get());
-    resampler->Update();
-    infFilterFullResolution->PushBack(resampler->GetOutput());
-    }
-
-  if (inputList)
-    {
-    otbMsgDevMacro(<< "MRToMSConverter: Optional inputList resampling.");
-    // Analyse image resampling
-    it = inputList->Begin();
-    // The first image does not need any resampling
-    outputList->PushBack(it.Get());
-    ++it;
-    for (; it != inputList->End(); ++it)
-      {
-      resampler = ResamplerType::New();
-      resampler->SetSize(frsize);
-      resampler->SetInput(it.Get());
-      resampler->Update();
-      outputList->PushBack(resampler->GetOutput());
-      }
-    }
-
-  if (supDeci)
-    {
-    otbMsgDevMacro(<< "MRToMSConverter: Optional supDeci resampling.");
-    // SupDeci resampling
-    it = supDeci->Begin();
-    // The first image does not need any resampling
-    supDeciFullResolution->PushBack(it.Get());
-    ++it;
-    for (; it != supDeci->End(); ++it)
-      {
-      resampler = ResamplerType::New();
-      resampler->SetSize(frsize);
-      resampler->SetInput(it.Get());
-      resampler->Update();
-      supDeciFullResolution->PushBack(resampler->GetOutput());
-      }
-    }
-
-  if (infDeci)
-    {
-    otbMsgDevMacro(<< "MRToMSConverter: Optional infDeci resampling.");
-    // InfDeci resampling
-    it = infDeci->Begin();
-    // The first image does not need any resampling
-    infDeciFullResolution->PushBack(it.Get());
-    ++it;
-    for (; it != infDeci->End(); ++it)
-      {
-      resampler = ResamplerType::New();
-      resampler->SetSize(frsize);
-      resampler->SetInput(it.Get());
-      resampler->Update();
-      infDeciFullResolution->PushBack(resampler->GetOutput());
-      }
-    }
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage, class TOutputImage>
-void
-MRToMSConverter<TInputImage, TOutputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace MorphologicalPyramid
-} // End namespace otb
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h
deleted file mode 100644
index 7ce6013ba36c5a2a8b28627f6135a13ea942abfa..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.h
+++ /dev/null
@@ -1,104 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidResampler_h
-#define otbMorphologicalPyramidResampler_h
-
-#include "itkImageToImageFilter.h"
-
-namespace otb
-{
-namespace MorphologicalPyramid
-{
-/**
- * \class Resampler
- * \brief This class performs the resampling of the given image to the given size.
- *
- * This class performs the resampling of the given image to the given size.It is used
- * in the MorphologicalPyramidAnalyseFilter and MorphologicalPyramidSynthesisFilter.
- *
- * The resampling is done by the itk::ResampleImageFilter, templated with the interpolator
- * itk::LinearInterpolateImageFunction and the transform itk::ScaleTransform.
- *
- * \sa MorphologicalPyramidAnalyseFilter
- * \sa MorphologicalPyramidSynthesisFilter
- * \sa ResampleImageFilter
- * \sa LinearInterpolateImageFunction
- * \sa ScaleTransform
- *
- * \ingroup OTBMorphologicalPyramid
- */
-template <class TInputImage, class TOutputImage>
-class ITK_EXPORT Resampler
-  : public itk::ImageToImageFilter<TInputImage, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef Resampler                                          Self;
-  typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                            Pointer;
-  typedef itk::SmartPointer<const Self>                      ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(Resampler, ImageToImageFilter);
-  /** Template parameters typedefs */
-  typedef TInputImage                           InputImageType;
-  typedef TOutputImage                          OutputImageType;
-  typedef typename OutputImageType::Pointer     OutputImagePointer;
-  typedef typename InputImageType::Pointer      InputImagePointer;
-  typedef typename OutputImageType::RegionType  OutputImageRegionType;
-  typedef typename TInputImage::PixelType       PixelType;
-  typedef typename InputImageType::ConstPointer InputImageConstPointer;
-  typedef typename OutputImageType::SizeType    SizeType;
-  typedef typename OutputImageType::SpacingType SpacingType;
-  /** Size parameter accessor */
-  itkSetMacro(Size, SizeType);
-  itkGetMacro(Size, SizeType);
-
-protected:
-  /** Constructor */
-  Resampler();
-  /** Destructor */
-  ~Resampler() override {}
-  /** Generate output information */
-  void GenerateOutputInformation() override;
-  /** Configure input requested region to be the largest possible region */
-  void GenerateInputRequestedRegion() override;
-  /** Configure output requested region to be the largest possible region */
-  void EnlargeOutputRequestedRegion(itk::DataObject * itkNotUsed(output)) override;
-  /** Main computation method */
-  void GenerateData() override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-private:
-  Resampler(const Self &) = delete;
-  void operator =(const Self&) = delete;
-  /// Output image size
-  SizeType m_Size;
-};
-} // End namespace MorphologicalPyramid
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbMorphologicalPyramidResampler.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.hxx
deleted file mode 100644
index 97cbf4a3c122c794ba8e2b735c49ff8ca3f64d79..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidResampler.hxx
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidResampler_hxx
-#define otbMorphologicalPyramidResampler_hxx
-#include "otbMorphologicalPyramidResampler.h"
-#include "itkResampleImageFilter.h"
-#include "itkScalableAffineTransform.h"
-#include "itkNearestNeighborInterpolateImageFunction.h"
-#include "itkProgressAccumulator.h"
-
-namespace otb
-{
-namespace MorphologicalPyramid
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputImage>
-Resampler<TInputImage, TOutputImage>
-::Resampler()
-{
-  for (unsigned int i = 0; i < InputImageType::ImageDimension; ++i)
-    {
-    m_Size[i] = 0;
-    }
-}
-/**
- * Configure input requested region to be the largest possible region.
- */
-template <class TInputImage, class TOutputImage>
-void
-Resampler<TInputImage, TOutputImage>
-::GenerateInputRequestedRegion()
-{
-  // Superclass method call
-  Superclass::GenerateInputRequestedRegion();
-  // Input and output image pointers retrieval
-  InputImagePointer  inputPtr = const_cast<InputImageType *> (this->GetInput());
-  OutputImagePointer outputPtr = this->GetOutput();
-  // If the pointers are not correct
-  if (!inputPtr || !outputPtr)
-    {
-    // exit
-    return;
-    }
-  // else
-  // Configure input requested region to be the largest possible region
-  inputPtr->SetRequestedRegion(inputPtr->GetLargestPossibleRegion());
-}
-/**
- * Configure output requested region to be the largest possible region
- */
-template <class TInputImage, class TOutputImage>
-void
-Resampler<TInputImage, TOutputImage>
-::EnlargeOutputRequestedRegion(itk::DataObject *itkNotUsed(output))
-{
-  this->GetOutput()->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion());
-}
-/**
- * Generate output information
- */
-template <class TInputImage, class TOutputImage>
-void
-Resampler<TInputImage, TOutputImage>
-::GenerateOutputInformation()
-{
-  // Superclass method call
-  Superclass::GenerateOutputInformation();
-  // Input and output image pointers retrieval
-  InputImageConstPointer inputPtr  = this->GetInput();
-  OutputImagePointer     outputPtr = this->GetOutput();
-  // If the pointers are not correct
-  if (!inputPtr || !outputPtr)
-    {
-    // exit
-    return;
-    }
-  unsigned int i;
-  // Computing output spacing, size and index from input data
-  const typename InputImageType::SpacingType& inputSpacing    = inputPtr->GetSignedSpacing();
-  const typename InputImageType::IndexType&   inputStartIndex = inputPtr->GetLargestPossibleRegion().GetIndex();
-  typename OutputImageType::IndexType         outputStartIndex;
-  typename OutputImageType::SpacingType       spacing;
-  for (i = 0; i < OutputImageType::ImageDimension; ++i)
-    {
-    outputStartIndex[i] =  inputStartIndex[i];
-    }
-
-  outputPtr->SetSignedSpacing(inputSpacing);
-  typename OutputImageType::RegionType outputLargestPossibleRegion;
-  outputLargestPossibleRegion.SetSize(this->GetSize());
-  outputLargestPossibleRegion.SetIndex(outputStartIndex);
-  outputPtr->SetLargestPossibleRegion(outputLargestPossibleRegion);
-}
-/**
- * Main computation method
- */
-template <class TInputImage, class TOutputImage>
-void
-Resampler<TInputImage, TOutputImage>
-::GenerateData()
-{
-  typename OutputImageType::Pointer result;
-
-  // Filters typedefs
-  typedef itk::ResampleImageFilter<InputImageType, OutputImageType>   ResampleFilterType;
-  typedef itk::ScalableAffineTransform<double, InputImageType::ImageDimension> TransformType;
-  typedef itk::LinearInterpolateImageFunction<InputImageType, double> InterpolatorType;
-
-  // Resampling filter creation
-  typename ResampleFilterType::Pointer resampler = ResampleFilterType::New();
-  typename InterpolatorType::Pointer   interpolator = InterpolatorType::New();
-  typename TransformType::Pointer      transform = TransformType::New();
-
-  // Scale parameters computation
-  typename TransformType::InputVectorType scales;
-  typename InputImageType::SizeType    inputSize = this->GetInput()->GetLargestPossibleRegion().GetSize();
-  typename InputImageType::SpacingType inputSpacing = this->GetInput()->GetSignedSpacing();
-  scales[0] = static_cast<double>(inputSize[0]) / static_cast<double>(m_Size[0]);
-  scales[1] = static_cast<double>(inputSize[1]) / static_cast<double>(m_Size[1]);
-  transform->SetScale(scales);
-  transform->SetCenter(this->GetInput()->GetOrigin());
-  typename TransformType::OutputVectorType translation;
-  translation[0] = 0.5 * inputSpacing[0] * (scales[0] - 1.0);
-  translation[1] = 0.5 * inputSpacing[1] * (scales[1] - 1.0);
-  transform->SetTranslation(translation);
-
-
-  // Resampling filter set up
-  resampler->SetTransform(transform);
-  resampler->SetInterpolator(interpolator);
-  resampler->SetOutputOrigin(this->GetInput()->GetOrigin());
-  resampler->SetSize(this->GetSize());
-  resampler->SetOutputSpacing( this->GetInput()->GetSpacing() );
-  resampler->SetOutputDirection( this->GetInput()->GetDirection() );
-  resampler->ReleaseDataFlagOn();
-
-  // Progress accumulator
-  itk::ProgressAccumulator::Pointer progress = itk::ProgressAccumulator::New();
-  progress->SetMiniPipelineFilter(this);
-  progress->RegisterInternalFilter(resampler, .5f);
-
-  // Input image connexion
-  resampler->SetInput(this->GetInput());
-  resampler->Update();
-  result = resampler->GetOutput();
-
-  /** Output filter connexion */
-  this->GraftOutput(result);
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage, class TOutputImage>
-void
-Resampler<TInputImage, TOutputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "Size: " << m_Size << std::endl;
-}
-} // End namespace MorphologicalPyramid
-} // End namespace otb
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h
deleted file mode 100644
index ea999b2a6d399ac17c860be768c528f5166feff2..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.h
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidSegmentationFilter_h
-#define otbMorphologicalPyramidSegmentationFilter_h
-
-#include "otbImageListToImageListFilter.h"
-namespace otb
-{
-/** \class MorphologicalPyramidSegmentationFilter
- * \brief This filter performs a segmentation of the details supFilter and infFilter extracted
- * with the morphological pyramid.
- *
- * The first step is to convert the multi-resolution analysis from the pyramid to a multi-scale one using the
- * MRToMSConverter filter.
- *
- * The segmentation algorithm used is based on seeds extraction using the ImageToPointSetFilter, followed by
- * a connected threshold segmentation using the ConnectedThresholdImageFilter. A final relabelling step is done
- * with the LabelImageFilter and RelabelImageFilter to remove object whose sizes are to small regarding the
- * MinimumObjectSize parameter. The threshold for seeds extraction and segmentation are computed using quantiles.
- *
- * A pre processing step is applied by multiplying the full resolution brighter details (resp. darker details)
- * with the original image (resp. the inverted original image). This performs an enhancement of the regions contour
- * precision.
- *
- * The details from the pyramid are set via the SetBrighterDetails() and SetDarkerDetails() methods. The brighter and
- * darker details depends on the filter used in the pyramid analysis. If the OpeningClosing filter is used, then the
- * brighter details are those from the supFilter image list, whereas if the ClosingOpening filter is used, the brighter
- * details are those from the infFilter list.
- *
- * The output of the segmentation filter is a single segmentation images list, containing first the brighter details
- * segmentation from higher scale to lower, and then the darker details in the same order. The attention of the used
- * is drawn to the fact that since the label filter used internally will deal with a large number of labels, so the
- * OutputPixelType is required to be sufficiently precise. Unsigned short or Unsigned long would be a good choice,
- * unless the user has a very good reason to think that a less precise type will be sufficient.
- *
- * \ingroup MultiScale
- * \sa MorphologicalPyramidSynthesisFilter, OpeningClosingMorphologicalFilter,
- * ClosingOpeningMorphologicalFilter, Segmenter, MRToMSConverter, Resampler
- *
- * \ingroup OTBMorphologicalPyramid
- */
-template <class TInputImage, class TOutputImage>
-class ITK_EXPORT MorphologicalPyramidSegmentationFilter
-  : public ImageListToImageListFilter<TInputImage, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef MorphologicalPyramidSegmentationFilter                Self;
-  typedef ImageListToImageListFilter<TInputImage, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                               Pointer;
-  typedef itk::SmartPointer<const Self>                         ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(MorphologicalPyramidSegmentationFilter, ImageListToImageListFilter);
-  /** Input image dimension constant macro */
-  itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension);
-  /** Output related typedefs */
-  typedef typename Superclass::OutputImageType        OutputImageType;
-  typedef typename OutputImageType::PixelType         OutputPixelType;
-  typedef typename Superclass::OutputImageListType    OutputImageListType;
-  typedef typename OutputImageListType::Pointer       OutputImageListPointerType;
-  typedef typename Superclass::OutputImagePointerType OutputImagePointerType;
-  typedef typename OutputImageListType::Iterator      OutputImageListIteratorType;
-  /** Input related typedefs */
-  typedef typename Superclass::InputImageType     InputImageType;
-  typedef typename InputImageType::PixelType      InputPixelType;
-  typedef typename InputImageType::Pointer        InputImagePointerType;
-  typedef typename Superclass::InputImageListType InputImageListType;
-  typedef typename InputImageListType::Pointer    InputImageListPointerType;
-  /** Vector of number of objects */
-  typedef std::vector<OutputPixelType> NumberOfObjectsVectorType;
-  /** Min object size parameter accessor */
-  itkSetMacro(MinimumObjectSize, unsigned long);
-  itkGetMacro(MinimumObjectSize, unsigned long);
-  /** Quantile for seeds extraction */
-  itkSetMacro(SeedsQuantile, double);
-  itkGetMacro(SeedsQuantile, double);
-  /** Quantile for connected thresholding */
-  itkSetMacro(ConnectedThresholdQuantile, double);
-  itkGetMacro(ConnectedThresholdQuantile, double);
-  /**
-   * Get a vector containing the number of segmented objects for each image.
-   * \return The vector.
-   */
-  NumberOfObjectsVectorType GetNumberOfObjectsVector(void);
-  /**
-   * Set the reference image.
-   * \param image The reference image which was decomposed by the pyramid.
-   */
-  void SetReferenceImage(InputImageType * image);
-  /**
-   * Set the brighter details from the pyramid. The brighter details are the supFilter or
-   * infFilter details from the pyramid, depending on the morphological filter used.
-   * \param imageList The brighter details extracted from the filtering operation.
-   */
-  void SetBrighterDetails(InputImageListType * imageList);
-  /**
-   * Set the darker details from the pyramid. The darker details are the supFilter or
-   * infFilter details from the pyramid, depending on the morphological filter used.
-   * \param imageList The darker details extracted from the filtering operation.
-   */
-  void SetDarkerDetails(InputImageListType * imageList);
-  /**
-   * Get the reference image
-   * \return The reference image.
-   */
-  InputImageType* GetReferenceImage(void);
-  /**
-   * Get the brighter details from the pyramid. The brighter details are the supFilter or
-   * infFilter details from the pyramid, depending on the morphological filter used.
-   * \return The brighter details extracted from the resampling operation.
-   */
-  InputImageListType* GetBrighterDetails(void);
-  /**
-   * Get the darker details from the pyramid. The darker details are the supFilter or
-   * infFilter details from the pyramid, depending on the morphological filter used.
-   * \return The darker details extracted from the resampling operation.
-   */
-  InputImageListType *GetDarkerDetails(void);
-
-protected:
-  /** Constructor */
-  MorphologicalPyramidSegmentationFilter();
-  /** Destructor */
-  ~MorphologicalPyramidSegmentationFilter() override;
-  void GenerateOutputInformation() override {}  // does nothing
-  /** Main computation method */
-  void GenerateData() override;
-  /** Printself method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-private:
-  unsigned long m_MinimumObjectSize;
-  /** Quantile for seeds determination */
-  double m_SeedsQuantile;
-  /** Quantile to set the connectedThresholdFilter threshold */
-  double m_ConnectedThresholdQuantile;
-  /** Number of segmented objects per images */
-  NumberOfObjectsVectorType m_NumberOfObjectsVector;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbMorphologicalPyramidSegmentationFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.hxx
deleted file mode 100644
index eab84021facc5864d3204878b836da3088359f84..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmentationFilter.hxx
+++ /dev/null
@@ -1,212 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidSegmentationFilter_hxx
-#define otbMorphologicalPyramidSegmentationFilter_hxx
-
-#include "otbMorphologicalPyramidSegmentationFilter.h"
-
-#include "otbMorphologicalPyramidMRToMSConverter.h"
-#include "otbMorphologicalPyramidSegmenter.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputImage>
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::MorphologicalPyramidSegmentationFilter()
-{
-  this->SetNumberOfRequiredInputs(3);
-  m_MinimumObjectSize = 10;
-  m_SeedsQuantile = 0.9;
-  m_ConnectedThresholdQuantile = 0.9;
-}
-/**
- * Destructor
- */
-template <class TInputImage, class TOutputImage>
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::~MorphologicalPyramidSegmentationFilter() {}
-
-/**
- * Set the reference image.
- * \param image The reference image which was decomposed by the pyramid.
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::SetReferenceImage(InputImageType * image)
-{
-  this->SetNthInput(0, const_cast<InputImageType *>(image));
-}
-/**
- * Set the brighter details from the pyramid. The brighter details are the supFilter or
- * infFilter details from the pyramid, depending on the morphological filter used.
- * \param imageList The brighter details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::SetBrighterDetails(InputImageListType * imageList)
-{
-  this->SetNthInput(1, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Set the darker details from the pyramid. The darker details are the supFilter or
- * infFilter details from the pyramid, depending on the morphological filter used.
- * \param imageList The darker details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::SetDarkerDetails(InputImageListType * imageList)
-{
-  this->SetNthInput(2, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Get the reference image
- * \return The reference image.
- */
-template <class TInputImage, class TOutputImage>
-typename MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::InputImageType*
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::GetReferenceImage(void)
-{
-  return dynamic_cast<InputImageType *>(this->itk::ProcessObject::GetInput(0));
-}
-/**
- * Get the brighter details from the pyramid. The brighter details are the supFilter or
- * infFilter details from the pyramid, depending on the morphological filter used.
- * \param imageList The brighter details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-typename MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::InputImageListType*
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::GetBrighterDetails(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(1));
-}
-/**
- * Get the darker details from the pyramid. The darker details are the supFilter or
- * infFilter details from the pyramid, depending on the morphological filter used.
- * \return The darker details extracted from the resampling operation.
- */
-template <class TInputImage, class TOutputImage>
-typename MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::InputImageListType*
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::GetDarkerDetails(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(2));
-}
-
-/**
- * Get a vector containing the number of segmented objects for each image.
- * \return The vector.
- */
-template <class TInputImage, class TOutputImage>
-typename MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::NumberOfObjectsVectorType
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::GetNumberOfObjectsVector(void)
-{
-  return m_NumberOfObjectsVector;
-}
-/**
- * Main computation method
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::GenerateData(void)
-{
-  // Reference image pointer
-  InputImagePointerType referenceImage = this->GetReferenceImage();
-  otbMsgDevMacro("SegmentationFilter: reference image size: " << referenceImage->GetLargestPossibleRegion().GetSize());
-
-  // Output images list pointer
-  OutputImageListPointerType outputList = this->GetOutput();
-
-  // Multi resolution to multi scale filter typedef
-  typedef otb::MorphologicalPyramid::MRToMSConverter<InputImageType, InputImageType> MRToMSConverterType;
-
-  // Segmentation filter typedef
-  typedef otb::MorphologicalPyramid::Segmenter<InputImageType, OutputImageType> SegmenterType;
-
-  // MR To MS conversion
-  typename MRToMSConverterType::Pointer mrtoms = MRToMSConverterType::New();
-  mrtoms->SetSupFilter(this->GetBrighterDetails());
-  mrtoms->SetInfFilter(this->GetDarkerDetails());
-  mrtoms->Update();
-
-  // Full resolution Input images lists pointers
-  InputImageListPointerType brighter = mrtoms->GetSupFilterFullResolution();
-  InputImageListPointerType darker = mrtoms->GetInfFilterFullResolution();
-
-  // Segmentation filter definition
-  typename InputImageListType::Iterator it;
-  // Segment the supFilter details
-  for (it = brighter->Begin(); it != brighter->End(); ++it)
-    {
-    typename SegmenterType::Pointer segmenter = SegmenterType::New();
-    segmenter->SetMinimumObjectSize(m_MinimumObjectSize);
-    segmenter->SetSeedsQuantile(m_SeedsQuantile);
-    segmenter->SetConnectedThresholdQuantile(m_ConnectedThresholdQuantile);
-    segmenter->SetOriginalImage(referenceImage);
-    segmenter->SetDetailsImage(it.Get());
-    segmenter->Update();
-    m_NumberOfObjectsVector.push_back(segmenter->GetNumberOfObjects());
-    outputList->PushBack(segmenter->GetOutput());
-    }
-
-  // Segment the infFilter details
-  for (it = darker->Begin(); it != darker->End(); ++it)
-    {
-    typename SegmenterType::Pointer segmenter = SegmenterType::New();
-    segmenter->SetMinimumObjectSize(m_MinimumObjectSize);
-    segmenter->SetSeedsQuantile(m_SeedsQuantile);
-    segmenter->SetConnectedThresholdQuantile(m_ConnectedThresholdQuantile);
-    segmenter->SetOriginalImage(referenceImage);
-    segmenter->SetSegmentDarkDetailsBool(true);
-
-    segmenter->SetDetailsImage(it.Get());
-    segmenter->Update();
-    m_NumberOfObjectsVector.push_back(segmenter->GetNumberOfObjects());
-    outputList->PushBack(segmenter->GetOutput());
-    }
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSegmentationFilter<TInputImage, TOutputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h
deleted file mode 100644
index 873ee46da44eab0b49cf18fef11e36406b55c3e2..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.h
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidSegmenter_h
-#define otbMorphologicalPyramidSegmenter_h
-
-#include "itkImageToImageFilter.h"
-
-namespace otb
-{
-namespace MorphologicalPyramid
-{
-/**
- * \class Segmenter
- * \brief This class performs the segmentation of a detail image extracted from a
- * morphological pyramid analysis.
- *
- * This class performs the segmentation of a detail image extracted from a
- * morphological pyramid analysis.
- *
- * The Segmentation is performed using the ConnectedThresholdImageFilter. The seeds
- * are extracted from the image using the ImageToPointSetFilter. The thresolds are set
- * by using quantiles computed with the HistogramGenerator.
- *
- * \sa MorphologicalPyramidAnalyseFilter
- * \sa MorphologicalPyramidSynthesisFilter
- * \sa ResampleImageFilter
- * \sa LinearInterpolateImageFunction
- * \sa ScaleTransform
- *
- * \ingroup OTBMorphologicalPyramid
- */
-template <class TInputImage, class TOutputImage>
-class ITK_EXPORT Segmenter
-  : public itk::ImageToImageFilter<TInputImage, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef Segmenter                                          Self;
-  typedef itk::ImageToImageFilter<TInputImage, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                            Pointer;
-  typedef itk::SmartPointer<const Self>                      ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(Segmenter, ImageToImageFilter);
-  /** Template parameters typedefs */
-  typedef TInputImage                           InputImageType;
-  typedef typename InputImageType::PixelType    InputPixelType;
-  typedef typename InputImageType::Pointer      InputImagePointerType;
-  typedef TOutputImage                          OutputImageType;
-  typedef typename OutputImageType::Pointer     OutputImagePointerType;
-  typedef typename OutputImageType::PixelType   OutputPixelType;
-  typedef typename OutputImageType::RegionType  OutputImageRegionType;
-  typedef typename OutputImageType::SizeType    SizeType;
-  typedef typename OutputImageType::SpacingType SpacingType;
-
-  /** ImageDimension constants */
-  itkStaticConstMacro(DetailsImageDimension, unsigned int,
-                      TInputImage::ImageDimension);
-  itkStaticConstMacro(OriginalImageDimension, unsigned int,
-                      TInputImage::ImageDimension);
-  itkStaticConstMacro(OutputImageDimension, unsigned int,
-                      TOutputImage::ImageDimension);
-  /**
-   * Set the details image.
-   * \param detailsImage The details image from the morphological pyramid
-   */
-  void SetDetailsImage(const InputImageType * detailsImage);
-  /**
-   * Get the details image.
-   * \return detailsImage The input details image.
-   */
-  InputImageType * GetDetailsImage(void);
-  /**
-   * Set the original image.
-   * \param originalImage The original image to segment.
-   */
-  void SetOriginalImage(const InputImageType * originalImage);
-  /**
-   * Get the original image.
-   * \return originalImage The original image to segment.
-   */
-  InputImageType * GetOriginalImage(void);
-
-  /** Min object size parameter accessor */
-  itkSetMacro(MinimumObjectSize, unsigned long);
-  itkGetMacro(MinimumObjectSize, unsigned long);
-  /** Quantile for seeds extraction */
-  itkSetMacro(SeedsQuantile, double);
-  itkGetMacro(SeedsQuantile, double);
-  /** Quantile for connected thresholding */
-  itkSetMacro(ConnectedThresholdQuantile, double);
-  itkGetMacro(ConnectedThresholdQuantile, double);
-  /** Toogle the darker detail segmentation */
-  itkSetMacro(SegmentDarkDetailsBool, bool);
-  itkGetMacro(SegmentDarkDetailsBool, bool);
-  itkBooleanMacro(SegmentDarkDetailsBool);
-  /** Get the number of segmented objects */
-  itkGetMacro(NumberOfObjects, OutputPixelType);
-
-protected:
-  /** Constructor */
-  Segmenter();
-  /** Destructor */
-  ~Segmenter() override {}
-  /** Main computation method */
-  void GenerateData(void) override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /**
-   * Configure the input datas.
-   */
-  void GenerateInputRequestedRegion(void) override;
-  /**
-   * Configure the output data.
-   */
-  using Superclass::EnlargeOutputRequestedRegion;
-  void EnlargeOutputRequestedRegion(void);
-
-private:
-  Segmenter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-  /** Minimum size for the segmented object */
-  unsigned long m_MinimumObjectSize;
-  /** Quantile for seeds determination */
-  double m_SeedsQuantile;
-  /** Quantile to set the connectedThresholdFilter threshold */
-  double m_ConnectedThresholdQuantile;
-  /** Set to true if the details to segment are darker than background */
-  bool m_SegmentDarkDetailsBool;
-  /** Number of segmented objects */
-  OutputPixelType m_NumberOfObjects;
-};
-} // End namespace MorphologicalPyramid
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbMorphologicalPyramidSegmenter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.hxx
deleted file mode 100644
index 555b483dd25bdc150964a02d9fc8dab61beb90ac..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSegmenter.hxx
+++ /dev/null
@@ -1,319 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidSegmenter_hxx
-#define otbMorphologicalPyramidSegmenter_hxx
-
-#include "otbMorphologicalPyramidSegmenter.h"
-
-#include "otbImage.h"
-#include "itkUnaryFunctorImageFilter.h"
-#include "itkConnectedThresholdImageFilter.h"
-#include "itkConnectedComponentImageFilter.h"
-#include "itkRelabelComponentImageFilter.h"
-#include "itkThresholdImageFilter.h"
-#include "itkMultiplyImageFilter.h"
-#include "itkCastImageFilter.h"
-#include "itkInvertIntensityImageFilter.h"
-#include "itkRescaleIntensityImageFilter.h"
-#include "otbThresholdImageToPointSetFilter.h"
-#include "itkScalarImageToHistogramGenerator.h"
-#include "itkMinimumMaximumImageCalculator.h"
-
-namespace otb
-{
-namespace MorphologicalPyramid
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputImage>
-Segmenter<TInputImage, TOutputImage>
-::Segmenter()
-{
-  this->SetNumberOfRequiredInputs(2);
-  m_SeedsQuantile = 0.9;
-  m_MinimumObjectSize = 10;
-  m_SegmentDarkDetailsBool = false;
-  m_NumberOfObjects = 0;
-  m_ConnectedThresholdQuantile = 0.9;
-}
-/**
- * Set the details image.
- * \param detailsImage The details image from the morphological pyramid
- */
-template <class TInputImage, class TOutputImage>
-void
-Segmenter<TInputImage, TOutputImage>
-::SetDetailsImage(const InputImageType * detailsImage)
-{
-  this->SetNthInput(0, const_cast<TInputImage *>(detailsImage));
-}
-/**
- * Set the details image.
- * \return detailsImage The input details image.
- */
-template <class TInputImage, class TOutputImage>
-typename Segmenter<TInputImage, TOutputImage>::InputImageType *
-Segmenter<TInputImage, TOutputImage>
-::GetDetailsImage(void)
-{
-  return const_cast<InputImageType *>(this->GetInput(0));
-}
-/**
-  * Set the original image.
-  * \param originalImage The original image to segment.
-  */
-template <class TInputImage, class TOutputImage>
-void
-Segmenter<TInputImage, TOutputImage>
-::SetOriginalImage(const InputImageType * originalImage)
-{
-  this->SetNthInput(1, const_cast<TInputImage *>(originalImage));
-}
-/**
- * Get the original image.
- * \return originalImage The original image to segment.
- */
-template <class TInputImage, class TOutputImage>
-typename Segmenter<TInputImage, TOutputImage>::InputImageType *
-Segmenter<TInputImage, TOutputImage>
-::GetOriginalImage(void)
-{
-  return const_cast<InputImageType *>(this->GetInput(1));
-}
-/**
- * Configure the input datas.
- */
-template <class TInputImage, class TOutputImage>
-void
-Segmenter<TInputImage, TOutputImage>
-::GenerateInputRequestedRegion()
-{
-  // call the superclass' implementation of this method
-  Superclass::GenerateInputRequestedRegion();
-
-  // get pointers to the inputs
-  InputImagePointerType detailsPtr =
-    const_cast<InputImageType *>(this->GetInput(0));
-
-  InputImagePointerType origPtr =
-    const_cast<InputImageType *>(this->GetInput(1));
-
-  if (!detailsPtr || !origPtr)
-    {
-    return;
-    }
-
-  // We need to
-  // configure the inputs such that all the data is available.
-  detailsPtr->SetRequestedRegion(detailsPtr->GetLargestPossibleRegion());
-  origPtr->SetRequestedRegion(origPtr->GetLargestPossibleRegion());
-}
-/**
- * Configure the output data
- */
-template <class TInputImage, class TOutputImage>
-void
-Segmenter<TInputImage, TOutputImage>
-::EnlargeOutputRequestedRegion(void)
-{
-  this->GetOutput()
-  ->SetRequestedRegion(this->GetOutput()->GetLargestPossibleRegion());
-}
-
-/**
- * Main computation method
- */
-template <class TInputImage, class TOutputImage>
-void
-Segmenter<TInputImage, TOutputImage>
-::GenerateData()
-{
-  // Input images pointers
-  InputImagePointerType details = this->GetDetailsImage();
-  InputImagePointerType original = this->GetOriginalImage();
-
-  // Typedefs for details image enhancement
-  typedef double                                                                   FloatPixelType;
-  typedef otb::Image<FloatPixelType, InputImageType::ImageDimension>               FloatImageType;
-  typedef itk::InvertIntensityImageFilter<InputImageType, InputImageType>          InvertFilterType;
-  typedef itk::MultiplyImageFilter<FloatImageType, FloatImageType, InputImageType> MultiplyFilterType;
-  typedef itk::CastImageFilter<InputImageType, FloatImageType>                     CastImageFilterType;
-  typedef itk::MinimumMaximumImageCalculator<InputImageType>                       MinMaxCalculatorType;
-
-  //Typedefs for seeds extraction
-  typedef itk::PointSet<InputPixelType, InputImageType::ImageDimension>     PointSetType;
-  typedef otb::ThresholdImageToPointSetFilter<InputImageType, PointSetType> PointSetFilterType;
-  typedef typename PointSetType::PointsContainer::Iterator                  PointSetIteratorType;
-
-  // Typedefs for segmentation
-  typedef itk::ConnectedThresholdImageFilter<InputImageType, InputImageType>  ConnectedFilterType;
-  typedef itk::ConnectedComponentImageFilter<InputImageType, OutputImageType> LabelFilterType;
-  typedef itk::RelabelComponentImageFilter<OutputImageType, OutputImageType>  RelabelFilterType;
-  typedef itk::ThresholdImageFilter<OutputImageType>                          ThresholdFilterType;
-
-  // Typedefs for statistics computation
-  typedef itk::Statistics::ScalarImageToHistogramGenerator<InputImageType> HistGeneratorType;
-
-  /////////////////////////////////////
-  //// Details image enhancement //////
-  /////////////////////////////////////
-
-  // Filters instantiation
-  typename InvertFilterType::Pointer     invert;
-  typename CastImageFilterType::Pointer  cast1 = CastImageFilterType::New();
-  typename CastImageFilterType::Pointer  cast2 = CastImageFilterType::New();
-  typename MultiplyFilterType::Pointer   mult = MultiplyFilterType::New();
-  typename MinMaxCalculatorType::Pointer minMax =  MinMaxCalculatorType::New();
-
-  // Pipeline connection
-  cast1->SetInput(details);
-
-  minMax->SetImage(original);
-  minMax->ComputeMaximum();
-
-  // If we want to segment darker detail, the original image must have its itensity inverted
-  if (m_SegmentDarkDetailsBool)
-    {
-    invert = InvertFilterType::New();
-    invert->SetInput(original);
-    invert->SetMaximum(minMax->GetMaximum());
-    cast2->SetInput(invert->GetOutput());
-    }
-  else
-    {
-    cast2->SetInput(original);
-    }
-  mult->SetInput1(cast1->GetOutput());
-  mult->SetInput2(cast2->GetOutput());
-  mult->Update();
-
-  /////////////////////////////////////
-  //// Thresholds computation /////////
-  /////////////////////////////////////
-
-  // Filter instantiation
-  typename HistGeneratorType::Pointer histogram = HistGeneratorType::New();
-  // Seeds Threshold is computed from the quantile
-  histogram->SetInput(details);
-  histogram->SetNumberOfBins(255);
-  histogram->SetMarginalScale(10.0);
-  histogram->Compute();
-  InputPixelType pointSetThreshold =
-    static_cast<InputPixelType>(histogram->GetOutput()->Quantile(0, m_SeedsQuantile));
-
-  // Segmentation Threshold is computed from the quantile
-  histogram = HistGeneratorType::New();
-  histogram->SetInput(mult->GetOutput());
-  histogram->SetNumberOfBins(255);
-  histogram->SetMarginalScale(10.0);
-  histogram->Compute();
-  InputPixelType connectedThresholdValue =
-    static_cast<InputPixelType>(histogram->GetOutput()->Quantile(0, m_ConnectedThresholdQuantile));
-
-  /////////////////////////////////////
-  //// Seeds extraction ///////////////
-  /////////////////////////////////////
-
-  typename PointSetFilterType::Pointer pointSetFilter = PointSetFilterType::New();
-  pointSetFilter->SetInput(0, details);
-  pointSetFilter->SetLowerThreshold(pointSetThreshold);
-  pointSetFilter->Update();
-
-  /////////////////////////////////////
-  //// Segmentation ///////////////////
-  /////////////////////////////////////
-
-  // Filters instantiation
-  typename ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New();
-  typename LabelFilterType::Pointer     labeler = LabelFilterType::New();
-  typename RelabelFilterType::Pointer   relabeler = RelabelFilterType::New();
-  typename ThresholdFilterType::Pointer threshold = ThresholdFilterType::New();
-
-  //Passing seeds to the connected filter
-  connectedThreshold = ConnectedFilterType::New();
-  connectedThreshold->ClearSeeds();
-  connectedThreshold->SetInput(mult->GetOutput());
-  PointSetIteratorType it = pointSetFilter->GetOutput()->GetPoints()->Begin();
-  while (it != pointSetFilter->GetOutput()->GetPoints()->End())
-    {
-    typename OutputImageType::IndexType index;
-    index[0] = static_cast<long int>(it.Value()[0]);
-    index[1] = static_cast<long int>(it.Value()[1]);
-    connectedThreshold->AddSeed(index);
-    ++it;
-    }
-
-  // segmentation
-  connectedThreshold->SetLower(connectedThresholdValue);
-
-  // labelling
-  labeler = LabelFilterType::New();
-  relabeler = RelabelFilterType::New();
-  labeler->SetInput(connectedThreshold->GetOutput());
-  relabeler->SetInput(labeler->GetOutput());
-  relabeler->SetMinimumObjectSize(m_MinimumObjectSize);
-  relabeler->Update();
-
-  // In some cases it might happen that the whole extent of the image is segmented as a single region.
-  // Since this is not desirable, we test this case here to avoid it.
-  threshold = ThresholdFilterType::New();
-  threshold->SetInput(relabeler->GetOutput());
-  OutputPixelType num = 0;
-  if (relabeler->GetNumberOfObjects() == 1)
-    {
-    unsigned int surface = mult->GetOutput()->GetLargestPossibleRegion().GetSize()[0]
-                           * mult->GetOutput()->GetLargestPossibleRegion().GetSize()[1];
-    if (relabeler->GetSizeOfObjectsInPixels()[0] == surface)
-      {
-      num = 0;
-      }
-    else
-      {
-      num = 1;
-      }
-    }
-  else
-    {
-    num = static_cast<OutputPixelType>(relabeler->GetNumberOfObjects());
-    }
-  threshold->ThresholdOutside(0, num);
-
-  // Output connection
-  threshold->GraftOutput(this->GetOutput());
-  threshold->Update();
-  this->GraftOutput(threshold->GetOutput());
-  m_NumberOfObjects = num;
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage, class TOutputImage>
-void
-Segmenter<TInputImage, TOutputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-
-}
-} // End namespace MorphologicalPyramid
-} // End namespace otb
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h
deleted file mode 100644
index 20a8f447aef515dbb646b154de76e1fe832bca29..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.h
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidSynthesisFilter_h
-#define otbMorphologicalPyramidSynthesisFilter_h
-
-#include "otbImageToImageListFilter.h"
-
-namespace otb
-{
-/**
- * \class MorphologicalPyramidSynthesisFilter
- * \brief Recomposition of the multiscale analysis performed with
- * a MorphologicalPyramidAnalyseFilter.
- *
- * Once a morphological pyramidal decompisition has been made, it is
- * possible to rebuild without any loss of information the original
- * image at full resolution. The MorphologicalPyramidsynthesisFilter
- * provides such a functionality. At each iteration, it performs the
- * up-sampling of the current image using the
- * otb::morphologicalPyramid::Resampler filter, the addition of
- * the details lost in down-sampling, and the addition of the details
- * lost in smoothing.
- *
- * \ingroup MultiScale
- * \sa MorphologicalPyramidAnalyseFilter
- * \sa MorphologicalPyramidResampler
- *
- * \ingroup OTBMorphologicalPyramid
- */
-template <class TInputImage, class TOutputImage>
-class ITK_EXPORT MorphologicalPyramidSynthesisFilter
-  : public ImageToImageListFilter<TInputImage, TOutputImage>
-{
-public:
-  /** Standard typedefs */
-  typedef MorphologicalPyramidSynthesisFilter               Self;
-  typedef ImageToImageListFilter<TInputImage, TOutputImage> Superclass;
-  typedef itk::SmartPointer<Self>                           Pointer;
-  typedef itk::SmartPointer<const Self>                     ConstPointer;
-  /** Creation through object factory macro */
-  itkNewMacro(Self);
-  /** Type macro */
-  itkTypeMacro(MorphologicalPyramidSynthesisFilter, MorphologicalPyramidSynthesisFilter);
-  /** Input image dimension constant macro */
-  itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension);
-  /** Output related typedefs */
-  typedef typename Superclass::OutputImageType                      OutputImageType;
-  typedef typename Superclass::OutputImageListType                  OutputImageListType;
-  typedef typename OutputImageListType::Pointer                     OutputImageListPointerType;
-  typedef typename Superclass::OutputImagePointerType               OutputImagePointerType;
-  typedef typename Superclass::OutputImageListType::Iterator        ImageListIterator;
-  typedef typename Superclass::OutputImageListType::ReverseIterator ImageListReverseIterator;
-  /** Input related typedefs */
-  typedef typename Superclass::InputImageType       InputImageType;
-  typedef typename Superclass::InputImageRegionType InputImageRegionType;
-  typedef typename InputImageType::Pointer          InputImagePointer;
-  typedef typename InputImageType::ConstPointer     InputImageConstPointer;
-  typedef typename InputImageType::SizeType         SizeType;
-  typedef typename InputImageType::ValueType        ValueType;
-  typedef typename InputImageType::PixelType        PixelType;
-  typedef typename InputImageType::SpacingType      SpacingType;
-  typedef otb::ImageList<InputImageType>            InputImageListType;
-  typedef typename InputImageListType::Pointer      InputImageListPointerType;
-  /** Size vector typedefs */
-  typedef std::vector<SizeType>                     SizeVectorType;
-  typedef typename SizeVectorType::iterator         SizeIterator;
-  typedef typename SizeVectorType::reverse_iterator SizeReverseIterator;
-  /**
-   * Set The SupFilter details
-   * \param imageList The brighter details extracted from the filtering operation.
-   */
-  void SetSupFilter(InputImageListType * imageList);
-  /**
-   * Set The InfFilter details
-   * \param imageList The darker details extracted from the filtering operation.
-   */
-  void SetInfFilter(InputImageListType * imageList);
-  /**
-   * Set The SupDeci details
-   * \param imageList The brighter details extracted from the filtering operation.
-   */
-  void SetSupDeci(InputImageListType * imageList);
-  /**
-   * Set The InfDeci details
-   * \param imageList The darker details extracted from the filtering operation.
-   */
-  void SetInfDeci(InputImageListType * imageList);
-  /**
-   * Get The SupFilter details
-   * \return The brighter details extracted from the filtering operation.
-   */
-  InputImageListType* GetSupFilter(void);
-  /**
-   * Get The InfFilter details
-   * \return The darker details extracted from the filtering operation.
-   */
-  InputImageListType* GetInfFilter(void);
-  /**
-   * Get The SupDeci details
-   * \return The brighter details extracted from the resampling operation.
-   */
-  InputImageListType* GetSupDeci(void);
-  /**
-   * Get The InfDeci details
-   * \return The brighter details extracted from the resampling operation.
-   */
-  InputImageListType* GetInfDeci(void);
-
-protected:
-  /** Constructor */
-  MorphologicalPyramidSynthesisFilter();
-  /** Destructor */
-  ~MorphologicalPyramidSynthesisFilter() override;
-  void GenerateOutputInformation() override {}  // does nothing
-  /** Main computation method */
-  void GenerateData() override;
-  /** Printself method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbMorphologicalPyramidSynthesisFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.hxx b/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.hxx
deleted file mode 100644
index 3f8d81ccf76f316314434ba1c39437c007115289..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/include/otbMorphologicalPyramidSynthesisFilter.hxx
+++ /dev/null
@@ -1,260 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbMorphologicalPyramidSynthesisFilter_hxx
-#define otbMorphologicalPyramidSynthesisFilter_hxx
-
-#include "otbMorphologicalPyramidSynthesisFilter.h"
-
-#include "otbMorphologicalPyramidResampler.h"
-#include "itkSubtractImageFilter.h"
-#include "itkAddImageFilter.h"
-#include "itkImageDuplicator.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputImage>
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::MorphologicalPyramidSynthesisFilter()
-{
-  this->SetNumberOfRequiredInputs(5);
-}
-/**
- * Destructor
- */
-template <class TInputImage, class TOutputImage>
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::~MorphologicalPyramidSynthesisFilter() {}
-/**
- * Set The SupFilter details
- * \param imageList The brighter details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::SetSupFilter(InputImageListType * imageList)
-{
-  this->SetNthInput(1, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Set The InfFilter details
- * \param imageList The darker details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::SetInfFilter(InputImageListType * imageList)
-{
-  this->SetNthInput(2, const_cast<InputImageListType *>(imageList));
-}
-
-/**
-  * Set The SupDeci details
-  * \param imageList The brighter details extracted from the filtering operation.
-  */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::SetSupDeci(InputImageListType * imageList)
-{
-  this->SetNthInput(3, const_cast<InputImageListType *>(imageList));
-}
-/**
- * Set The InfDeci details
- * \param imageList The darker details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::SetInfDeci(InputImageListType * imageList)
-{
-  this->SetNthInput(4, const_cast<InputImageListType *>(imageList));
-}
-
-/**
- * Get The SupFilter details
- * \return The brighter details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-typename MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::InputImageListType*
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::GetSupFilter(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(1));
-}
-/**
- * Get The InfFilter details
- * \return The darker details extracted from the filtering operation.
- */
-template <class TInputImage, class TOutputImage>
-typename MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::InputImageListType*
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::GetInfFilter(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(2));
-}
-/**
- * Get The SupDeci details
- * \return The brighter details extracted from the resampling operation.
- */
-template <class TInputImage, class TOutputImage>
-typename MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::InputImageListType*
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::GetSupDeci(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(3));
-}
-/**
- * Get The InfDeci details
- * \return The darker details extracted from the resampling operation.
- */
-template <class TInputImage, class TOutputImage>
-typename MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::InputImageListType*
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::GetInfDeci(void)
-{
-  return dynamic_cast<InputImageListType *>(this->itk::ProcessObject::GetInput(4));
-}
-/**
- * Main computation method
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::GenerateData(void)
-{
-  otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter : Entering main method.");
-  // Input image pointer
-  InputImageListType * supFilter = this->GetSupFilter();
-  InputImageListType * infFilter = this->GetInfFilter();
-  InputImageListType * supDeci = this->GetSupDeci();
-  InputImageListType * infDeci = this->GetInfDeci();
-
-  // Output pointer
-  OutputImageListType * OutputImageList   = this->GetOutput();
-
-  // typedefs of the filters
-  typedef itk::SubtractImageFilter<InputImageType, InputImageType, OutputImageType> SubtractFilterType;
-  typedef itk::AddImageFilter<InputImageType, InputImageType, InputImageType>       AddFilterType;
-  typedef otb::MorphologicalPyramid::Resampler<InputImageType, InputImageType>      ResamplerType;
-  typedef itk::ImageDuplicator<InputImageType>                                      DuplicatorType;
-
-  // Input Image duplication to the currentImage Pointer
-  typename DuplicatorType::Pointer duplicator = DuplicatorType::New();
-  duplicator->SetInputImage(this->GetInput());
-  duplicator->Update();
-
-  // Input Image duplication to the currentImage Pointer
-  typename InputImageType::Pointer currentImage = duplicator->GetOutput();
-
-  // Filters declarations
-  typename AddFilterType::Pointer      add1, add2;
-  typename SubtractFilterType::Pointer subtract1, subtract2;
-  typename ResamplerType::Pointer      resampler;
-
-  // Size vector computation
-  SizeVectorType size;
-
-  ImageListIterator it = supFilter->Begin();
-
-  while (it != supFilter->End())
-    {
-    size.push_back(it.Get()->GetLargestPossibleRegion().GetSize());
-    ++it;
-    }
-  otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter : Size vector computation OK");
-
-  // Iterators definition
-  ImageListReverseIterator itinfFilter = infFilter->ReverseBegin();
-  ImageListReverseIterator itsupFilter = supFilter->ReverseBegin();
-  ImageListReverseIterator itinfDeci = infDeci->ReverseBegin();
-  ImageListReverseIterator itsupDeci = supDeci->ReverseBegin();
-  SizeReverseIterator      itSize = size.rbegin();
-
-  int i = 1;
-//--------------------------------------------------------//
-//                      Main loop                         //
-//--------------------------------------------------------//
-  while (itinfFilter != infFilter->ReverseEnd()
-         && itsupFilter != supFilter->ReverseEnd()
-         && itinfDeci != infDeci->ReverseEnd()
-         && itsupDeci != supDeci->ReverseEnd()
-         && itSize != size.rend())
-    {
-
-    ++i;
-    // Upsampling current image
-    resampler = ResamplerType::New();
-    resampler->SetSize(*itSize);
-    resampler->SetInput(currentImage);
-    resampler->Update();
-    otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter: step " << i << " Upsampling OK");
-    // Adding *sup details from current level
-    add1 = AddFilterType::New();
-    add1->SetInput1(resampler->GetOutput());
-    add1->SetInput2(itsupFilter.Get());
-    add2 = AddFilterType::New();
-    add2->SetInput1(add1->GetOutput());
-    add2->SetInput2(itsupDeci.Get());
-
-    // Adding *inf details from current level
-    subtract1 = SubtractFilterType::New();
-    subtract1->SetInput1(add2->GetOutput());
-    subtract1->SetInput2(itinfFilter.Get());
-    subtract2 = SubtractFilterType::New();
-    subtract2->SetInput1(subtract1->GetOutput());
-    subtract2->SetInput2(itinfDeci.Get());
-    subtract2->Update();
-    otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter: step " << i << " Details addition OK");
-
-    // Updating current image
-    currentImage = subtract2->GetOutput();
-    OutputImageList->PushBack(currentImage);
-
-    // Iterators incrementation
-    ++itsupFilter;
-    ++itinfFilter;
-    ++itsupDeci;
-    ++itinfDeci;
-    ++itSize;
-    }
-  otbMsgDevMacro(<< "MorphologicalPyramidSynthesisFilter: Exiting main method.");
-}
-/**
- * PrintSelf method
- */
-template <class TInputImage, class TOutputImage>
-void
-MorphologicalPyramidSynthesisFilter<TInputImage, TOutputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-
-#endif
diff --git a/Modules/Filtering/MorphologicalPyramid/otb-module.cmake b/Modules/Filtering/MorphologicalPyramid/otb-module.cmake
deleted file mode 100644
index 677f456dbaf8e456576007b5ba645deeb8e4a3f0..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/otb-module.cmake
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set(DOCUMENTATION "If the smoothing filter used in the pyramidal analysis is a
-morphological filter, one cannot safely subsample the filtered image without loss
-of information. However, by keeping the details possibly lost in the
-down-sampling operation, such a decomposition can be used. The Morphological Pyramid is an
-approach to such a decomposition. This module contains classes useful in meeting
-that goal.")
-
-otb_module(OTBMorphologicalPyramid
-  DEPENDS
-    OTBCommon
-    OTBITK
-    OTBImageBase
-    OTBObjectList
-    OTBPointSet
-
-  TEST_DEPENDS
-    OTBImageIO
-    OTBMorphologicalProfiles
-    OTBTestKernel
-
-  DESCRIPTION
-    "${DOCUMENTATION}"
-)
diff --git a/Modules/Filtering/MorphologicalPyramid/test/CMakeLists.txt b/Modules/Filtering/MorphologicalPyramid/test/CMakeLists.txt
deleted file mode 100644
index 90bf757fdcb09ac89bbd1b9deb5899cd11f81b1f..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/test/CMakeLists.txt
+++ /dev/null
@@ -1,148 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-otb_module_test()
-
-set(OTBMorphologicalPyramidTests
-otbMorphologicalPyramidTestDriver.cxx
-otbMorphologicalPyramidAnalysisFilter.cxx
-otbMorphologicalPyramidSegmenter.cxx
-otbMorphologicalPyramidSynthesisFilter.cxx
-otbMorphologicalPyramidMRToMSConverter.cxx
-otbMorphologicalPyramidResampler.cxx
-otbMorphologicalPyramidSegmentationFilter.cxx
-)
-
-add_executable(otbMorphologicalPyramidTestDriver ${OTBMorphologicalPyramidTests})
-target_link_libraries(otbMorphologicalPyramidTestDriver ${OTBMorphologicalPyramid-Test_LIBRARIES})
-otb_module_target_label(otbMorphologicalPyramidTestDriver)
-
-# Tests Declaration
-
-otb_add_test(NAME msTvMorphoPyrAnalysisFilter COMMAND otbMorphologicalPyramidTestDriver
-  --compare-n-images ${NOTOL} 5
-  ${BASELINE}/msPyrAn_mire_log_an_2.png
-  ${TEMP}/msPyrAn_mire_log_an_2.png
-  ${BASELINE}/msPyrAn_mire_log_sf_2.png
-  ${TEMP}/msPyrAn_mire_log_sf_2.png
-  ${BASELINE}/msPyrAn_mire_log_if_2.png
-  ${TEMP}/msPyrAn_mire_log_if_2.png
-  ${BASELINE}/msPyrAn_mire_log_sd_2.png
-  ${TEMP}/msPyrAn_mire_log_sd_2.png
-  ${BASELINE}/msPyrAn_mire_log_id_2.png
-  ${TEMP}/msPyrAn_mire_log_id_2.png
-  otbMorphologicalPyramidAnalysisFilter
-  ${INPUTDATA}/mire_log.png
-  ${TEMP}/msPyrAn_mire_log
-  png
-  2
-  2.0)
-
-otb_add_test(NAME msTvMorphoPyrSegmentBright COMMAND otbMorphologicalPyramidTestDriver
-  --compare-image ${NOTOL}
-  ${BASELINE}/msPyrSegmenter_IKO_Halles_4_2_sf.tif
-  ${TEMP}/msPyrSegmenter_IKO_Halles_4_2_sf.tif
-  otbMorphologicalPyramidSegmenter
-  ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif
-  ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif
-  ${TEMP}/msPyrSegmenter_IKO_Halles_4_2_sf.tif
-  0
-  0.9
-  0.9
-  10
-  )
-set_property(TEST msTvMorphoPyrSegmentBright PROPERTY DEPENDS msTvMorphoPyrMRToMSConverter)
-
-otb_add_test(NAME msTvMorphoPyrSegmentDark COMMAND otbMorphologicalPyramidTestDriver
-  --compare-image ${NOTOL}
-  ${BASELINE}/msPyrSegmenter_IKO_Halles_4_2_if.tif
-  ${TEMP}/msPyrSegmenter_IKO_Halles_4_2_if.tif
-  otbMorphologicalPyramidSegmenter
-  ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_if_full.tif
-  ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif
-  ${TEMP}/msPyrSegmenter_IKO_Halles_4_2_if.tif
-  1
-  0.9
-  0.9
-  10
-  )
-set_property(TEST msTvMorphoPyrSegmentDark PROPERTY DEPENDS msTvMorphoPyrMRToMSConverter)
-
-otb_add_test(NAME msTvMorphoPyrSynthesisFilter COMMAND otbMorphologicalPyramidTestDriver
-  --compare-image ${NOTOL}
-  ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif
-  ${TEMP}/msPyrSynth_IKO_Halles_4_2.tif
-  otbMorphologicalPyramidSynthesisFilter
-  ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif
-  ${TEMP}/msPyrSynth_IKO_Halles_4_2.tif
-  4
-  2.0)
-
-otb_add_test(NAME msTvMorphoPyrMRToMSConverter COMMAND otbMorphologicalPyramidTestDriver
-  --compare-n-images ${EPSILON_8} 3
-  ${BASELINE}/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif
-  ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif
-  ${BASELINE}/msPyrMRToMS_IKO_Halles_4_2_if_full.tif
-  ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_if_full.tif
-  ${BASELINE}/msPyrMRToMS_IKO_Halles_4_2_an_full.tif
-  ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_an_full.tif
-  otbMorphologicalPyramidMRToMSConverter
-  ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif
-  ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_sf_full.tif
-  ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_if_full.tif
-  ${TEMP}/msPyrMRToMS_IKO_Halles_4_2_an_full.tif
-  4
-  2.0)
-
-otb_add_test(NAME msTvMorphoPyrResampler COMMAND otbMorphologicalPyramidTestDriver
-  --compare-n-images ${EPSILON_8} 2
-  ${BASELINE}/msPyrResampler_IKO_LesHalles_256_2.tif
-  ${TEMP}/msPyrResampler_IKO_LesHalles_256_2.tif
-  ${BASELINE}/msPyrResampler_IKO_LesHalles_full.tif
-  ${TEMP}/msPyrResampler_IKO_LesHalles_full.tif
-  otbMorphologicalPyramidResampler
-  ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif
-  ${TEMP}/msPyrResampler_IKO_LesHalles_256_2.tif
-  ${TEMP}/msPyrResampler_IKO_LesHalles_full.tif
-  256
-  256
-  )
-
-otb_add_test(NAME msTvMorphoPyrSegmentationFilter COMMAND otbMorphologicalPyramidTestDriver
-  --compare-n-images ${NOTOL} 4
-  ${BASELINE}/msPyrSegmentation_IKO_Halles_2.tif
-  ${TEMP}/msPyrSegmentation_IKO_Halles_2.tif
-  ${BASELINE}/msPyrSegmentation_IKO_Halles_4.tif
-  ${TEMP}/msPyrSegmentation_IKO_Halles_4.tif
-  ${BASELINE}/msPyrSegmentation_IKO_Halles_5.tif
-  ${TEMP}/msPyrSegmentation_IKO_Halles_5.tif
-  ${BASELINE}/msPyrSegmentation_IKO_Halles_7.tif
-  ${TEMP}/msPyrSegmentation_IKO_Halles_7.tif
-  otbMorphologicalPyramidSegmentationFilter
-  ${INPUTDATA}/ROI_IKO_PAN_LesHalles.tif
-  ${TEMP}/msPyrSegmentation_IKO_Halles_
-  tif
-  4
-  2.0
-  0.9
-  0.9
-  10
-  )
-
diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidAnalysisFilter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidAnalysisFilter.cxx
deleted file mode 100644
index c2704c3627f73b4d0a830b6fdaf65a4d46cb44fe..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidAnalysisFilter.cxx
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbMorphologicalPyramidAnalysisFilter.h"
-#include "otbOpeningClosingMorphologicalFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbImage.h"
-
-int otbMorphologicalPyramidAnalysisFilter(int itkNotUsed(argc), char * argv[])
-{
-  const char *       inputFilename = argv[1];
-  const char *       outputFilenamePrefix = argv[2];
-  const char *       outputFilenameSuffix = argv[3];
-  const unsigned int numberOfLevels = atoi(argv[4]);
-  const float        decimationRatio = atof(argv[5]);
-
-  const unsigned int Dimension = 2;
-  typedef unsigned char InputPixelType;
-  typedef unsigned char OutputPixelType;
-
-  typedef otb::Image<InputPixelType, Dimension>  InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef otb::ImageFileReader<InputImageType>  ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  typedef itk::BinaryBallStructuringElement<InputPixelType, Dimension> StructuringElementType;
-  typedef otb::OpeningClosingMorphologicalFilter<InputImageType, InputImageType, StructuringElementType>
-  OpeningClosingFilterType;
-  typedef otb::MorphologicalPyramidAnalysisFilter<InputImageType, OutputImageType, OpeningClosingFilterType>
-  PyramidFilterType;
-  typedef PyramidFilterType::OutputImageListType::Iterator ImageListIterator;
-
-  // Reading input image
-  ReaderType::Pointer reader = ReaderType::New();
-  reader->SetFileName(inputFilename);
-
-  // Instantiation
-  PyramidFilterType::Pointer pyramid = PyramidFilterType::New();
-  pyramid->SetNumberOfLevels(numberOfLevels);
-  pyramid->SetDecimationRatio(decimationRatio);
-  pyramid->SetInput(reader->GetOutput());
-  pyramid->Update();
-
-  // Retrieving iterators on the results images
-  ImageListIterator itAnalyse = pyramid->GetOutput()->Begin();
-  ImageListIterator itSupFilter = pyramid->GetSupFilter()->Begin();
-  ImageListIterator itInfFilter = pyramid->GetInfFilter()->Begin();
-  ImageListIterator itInfDeci = pyramid->GetInfDeci()->Begin();
-  ImageListIterator itSupDeci =  pyramid->GetSupDeci()->Begin();
-
-  WriterType::Pointer writer =  WriterType::New();
-
-  int i = 1;
-  //      std::stringstream oss;
-  std::ostringstream oss;
-  // Writing the results images
-  while ((itAnalyse != pyramid->GetOutput()->End())
-         && (itSupFilter != pyramid->GetSupFilter()->End())
-         && (itInfFilter != pyramid->GetInfFilter()->End())
-         && (itInfDeci != pyramid->GetInfDeci()->End())
-         && (itSupDeci != pyramid->GetSupDeci()->End())
-         )
-    {
-    oss << outputFilenamePrefix << "_an_" << i << "." << outputFilenameSuffix;
-    writer->SetInput(itAnalyse.Get());
-    writer->SetFileName(oss.str());
-    writer->Update();
-    oss.str("");
-    oss << outputFilenamePrefix << "_sf_" << i << "." << outputFilenameSuffix;
-    writer->SetInput(itSupFilter.Get());
-    writer->SetFileName(oss.str());
-    writer->Update();
-    oss.str("");
-    oss << outputFilenamePrefix << "_if_" << i << "." << outputFilenameSuffix;
-    writer->SetInput(itInfFilter.Get());
-    writer->SetFileName(oss.str());
-    writer->Update();
-    oss.str("");
-    oss << outputFilenamePrefix << "_id_" << i << "." << outputFilenameSuffix;
-    writer->SetInput(itInfDeci.Get());
-    writer->SetFileName(oss.str());
-    writer->Update();
-    std::cout << "File " << oss.str() << " written" << std::endl;
-    oss.str("");
-    oss << outputFilenamePrefix << "_sd_" << i << "." << outputFilenameSuffix;
-    writer->SetInput(itSupDeci.Get());
-    writer->SetFileName(oss.str());
-    writer->Update();
-    oss.str("");
-    ++itAnalyse;
-    ++itSupFilter;
-    ++itInfFilter;
-    ++itInfDeci;
-    ++itSupDeci;
-    ++i;
-    }
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidMRToMSConverter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidMRToMSConverter.cxx
deleted file mode 100644
index cfc82520f07c0d3996c88da2a996b42b1058f4b2..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidMRToMSConverter.cxx
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbMorphologicalPyramidAnalysisFilter.h"
-#include "otbMorphologicalPyramidMRToMSConverter.h"
-#include "otbOpeningClosingMorphologicalFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbImage.h"
-
-int otbMorphologicalPyramidMRToMSConverter(int itkNotUsed(argc), char * argv[])
-{
-  const char *       inputFilename = argv[1];
-  const char *       outputFilename1 = argv[2];
-  const char *       outputFilename2 = argv[3];
-  const char *       outputFilename3 = argv[4];
-  const unsigned int numberOfLevels = atoi(argv[5]);
-  const float        decimationRatio = atof(argv[6]);
-
-  const unsigned int Dimension = 2;
-  typedef double InputPixelType;
-  typedef double OutputPixelType;
-
-  typedef otb::Image<InputPixelType, Dimension>  InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef otb::ImageFileReader<InputImageType>  ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  typedef itk::BinaryBallStructuringElement<InputPixelType, Dimension> StructuringElementType;
-  typedef otb::OpeningClosingMorphologicalFilter<InputImageType, InputImageType, StructuringElementType>
-  OpeningClosingFilterType;
-  typedef otb::MorphologicalPyramidAnalysisFilter<InputImageType, InputImageType, OpeningClosingFilterType>
-  PyramidAnalysisFilterType;
-  typedef otb::MorphologicalPyramid::MRToMSConverter<InputImageType, OutputImageType> MRToMSConverterType;
-
-  // Reading input image
-  ReaderType::Pointer reader = ReaderType::New();
-  reader->SetFileName(inputFilename);
-
-  // Analysis
-  PyramidAnalysisFilterType::Pointer pyramidAnalysis = PyramidAnalysisFilterType::New();
-  pyramidAnalysis->SetNumberOfLevels(numberOfLevels);
-  pyramidAnalysis->SetDecimationRatio(decimationRatio);
-  pyramidAnalysis->SetInput(reader->GetOutput());
-
-  // From multi resolution to multi scale
-  MRToMSConverterType::Pointer mrtoms = MRToMSConverterType::New();
-  mrtoms->SetInput(pyramidAnalysis->GetOutput());
-  mrtoms->SetSupFilter(pyramidAnalysis->GetSupFilter());
-  mrtoms->SetSupDeci(pyramidAnalysis->GetSupDeci());
-  mrtoms->SetInfFilter(pyramidAnalysis->GetInfFilter());
-  mrtoms->SetInfDeci(pyramidAnalysis->GetInfDeci());
-  mrtoms->Update();
-
-  // Writing the output images
-  WriterType::Pointer writer1 = WriterType::New();
-  writer1->SetFileName(outputFilename1);
-  writer1->SetInput(mrtoms->GetSupFilterFullResolution()->Back());
-  writer1->Update();
-
-  WriterType::Pointer writer2 = WriterType::New();
-  writer2->SetFileName(outputFilename2);
-  writer2->SetInput(mrtoms->GetInfFilterFullResolution()->Back());
-  writer2->Update();
-
-  WriterType::Pointer writer3 = WriterType::New();
-  writer3->SetFileName(outputFilename3);
-  writer3->SetInput(mrtoms->GetOutput()->Back());
-  writer3->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidResampler.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidResampler.cxx
deleted file mode 100644
index 0d43971cf29e675072a0437c1f9e2f91a6d805e6..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidResampler.cxx
+++ /dev/null
@@ -1,77 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbMorphologicalPyramidResampler.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbImage.h"
-
-int otbMorphologicalPyramidResampler(int itkNotUsed(argc), char * argv[])
-{
-  const char*        inputFilename = argv[1];
-  const char*        outputFilename1 = argv[2];
-  const char*        outputFilename2 = argv[3];
-  const unsigned int size_x = atoi(argv[4]);
-  const unsigned int size_y = atoi(argv[5]);
-
-  const unsigned int Dimension = 2;
-  typedef double InputPixelType;
-  typedef double OutputPixelType;
-
-  typedef otb::Image<InputPixelType, Dimension>  InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef otb::ImageFileReader<InputImageType>  ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  typedef otb::MorphologicalPyramid::Resampler<InputImageType, OutputImageType>
-  ResamplerType;
-
-  // Input image reading
-  ReaderType::Pointer reader = ReaderType::New();
-  reader->SetFileName(inputFilename);
-
-  InputImageType::SizeType size;
-  size[0] = size_x;
-  size[1] = size_y;
-
-  // Instantiation
-  ResamplerType::Pointer resampler = ResamplerType::New();
-  resampler->SetInput(reader->GetOutput());
-  resampler->SetSize(size);
-
-  // File writing
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetInput(resampler->GetOutput());
-  writer->SetFileName(outputFilename1);
-  writer->Update();
-
-  ResamplerType::Pointer resampler2 = ResamplerType::New();
-  resampler2->SetInput(resampler->GetOutput());
-  resampler2->SetSize(reader->GetOutput()->GetLargestPossibleRegion().GetSize());
-
-  WriterType::Pointer writer2 = WriterType::New();
-  writer2->SetInput(resampler2->GetOutput());
-  writer2->SetFileName(outputFilename2);
-  writer2->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmentationFilter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmentationFilter.cxx
deleted file mode 100644
index 959150db21b47e4ddd2131fe26736ff19a11a6a5..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmentationFilter.cxx
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbMorphologicalPyramidSegmentationFilter.h"
-#include "otbOpeningClosingMorphologicalFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "otbMorphologicalPyramidAnalysisFilter.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbImage.h"
-
-int otbMorphologicalPyramidSegmentationFilter(int itkNotUsed(argc), char * argv[])
-{
-  const char*        inputFilename = argv[1];
-  const char*        outputFilenamePrefix = argv[2];
-  const char *       outputFilenameSuffix = argv[3];
-  const unsigned int numberOfLevels = atoi(argv[4]);
-  const double       decimationRatio = atof(argv[5]);
-  const float        seedsQuantile = atof(argv[6]);
-  const float        segmentationQuantile = atof(argv[7]);
-  const unsigned int minObjectSize = atoi(argv[8]);
-
-  const unsigned int Dimension = 2;
-  typedef double         InputPixelType;
-  typedef unsigned short OutputPixelType;
-
-  typedef otb::Image<InputPixelType, Dimension>  InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef otb::ImageFileReader<InputImageType>  ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  typedef itk::BinaryBallStructuringElement<InputPixelType, Dimension> StructuringElementType;
-  typedef otb::OpeningClosingMorphologicalFilter<InputImageType, InputImageType, StructuringElementType>
-  OpeningClosingFilterType;
-  typedef otb::MorphologicalPyramidAnalysisFilter<InputImageType, InputImageType, OpeningClosingFilterType>
-  PyramidFilterType;
-  typedef otb::MorphologicalPyramidSegmentationFilter<InputImageType, OutputImageType>
-  SegmentationFilterType;
-  typedef SegmentationFilterType::OutputImageListIteratorType OutputListIteratorType;
-
-  // Input images reading
-  ReaderType::Pointer reader = ReaderType::New();
-  reader->SetFileName(inputFilename);
-
-  //Analyse
-  PyramidFilterType::Pointer pyramid = PyramidFilterType::New();
-  pyramid->SetNumberOfLevels(numberOfLevels);
-  pyramid->SetDecimationRatio(decimationRatio);
-  pyramid->SetInput(reader->GetOutput());
-
-  // Segmentation
-  SegmentationFilterType::Pointer segmentation = SegmentationFilterType::New();
-  segmentation->SetReferenceImage(reader->GetOutput());
-  segmentation->SetBrighterDetails(pyramid->GetSupFilter());
-  segmentation->SetDarkerDetails(pyramid->GetInfFilter());
-  segmentation->SetSeedsQuantile(seedsQuantile);
-  segmentation->SetConnectedThresholdQuantile(segmentationQuantile);
-  segmentation->SetMinimumObjectSize(minObjectSize);
-  segmentation->Update();
-
-  // Output writing
-  OutputListIteratorType it = segmentation->GetOutput()->Begin();
-  WriterType::Pointer    writer;
-  int                    index = 1;
-  std::stringstream      oss;
-  while (it != segmentation->GetOutput()->End())
-    {
-    oss << outputFilenamePrefix << index << "." << outputFilenameSuffix;
-    writer = WriterType::New();
-    writer->SetInput(it.Get());
-    writer->SetFileName(oss.str());
-    writer->Update();
-    std::cout << oss.str() << " file written." << std::endl;
-    oss.str("");
-    ++index;
-    ++it;
-    }
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmenter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmenter.cxx
deleted file mode 100644
index 12b2ac54df9a3ec70a7e2d8490ed48f1fc2bff51..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSegmenter.cxx
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbMorphologicalPyramidSegmenter.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbImage.h"
-
-int otbMorphologicalPyramidSegmenter(int itkNotUsed(argc), char * argv[])
-{
-  const char*        inputFilename = argv[1];
-  const char*        originalFilename = argv[2];
-  const char*        outputFilename1 = argv[3];
-  const bool         segmentDark = atoi(argv[4]);
-  const float        seedsQuantile = atof(argv[5]);
-  const float        segmentationQuantile = atof(argv[6]);
-  const unsigned int minObjectSize = atoi(argv[7]);
-
-  const unsigned int Dimension = 2;
-  typedef double         InputPixelType;
-  typedef unsigned short OutputPixelType;
-
-  typedef otb::Image<InputPixelType, Dimension>  InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef otb::ImageFileReader<InputImageType>  ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  typedef otb::MorphologicalPyramid::Segmenter<InputImageType, OutputImageType>
-  SegmenterType;
-
-  // Input images reading
-  ReaderType::Pointer reader = ReaderType::New();
-  reader->SetFileName(inputFilename);
-  ReaderType::Pointer reader2 = ReaderType::New();
-  reader2->SetFileName(originalFilename);
-
-  // Instantiation
-  SegmenterType::Pointer segmenter = SegmenterType::New();
-  segmenter->SetDetailsImage(reader->GetOutput());
-  segmenter->SetOriginalImage(reader2->GetOutput());
-  segmenter->SetSegmentDarkDetailsBool(segmentDark);
-  segmenter->SetSeedsQuantile(seedsQuantile);
-  segmenter->SetConnectedThresholdQuantile(segmentationQuantile);
-  segmenter->SetMinimumObjectSize(minObjectSize);
-
-  // File writing
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetInput(segmenter->GetOutput());
-  writer->SetFileName(outputFilename1);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSynthesisFilter.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSynthesisFilter.cxx
deleted file mode 100644
index 084ba8bd43b89bd77f8b326dddf1b231725f3eec..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidSynthesisFilter.cxx
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-
-#include "otbMorphologicalPyramidAnalysisFilter.h"
-#include "otbMorphologicalPyramidSynthesisFilter.h"
-#include "otbOpeningClosingMorphologicalFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbImage.h"
-
-int otbMorphologicalPyramidSynthesisFilter(int itkNotUsed(argc), char * argv[])
-{
-  const char *       inputFilename = argv[1];
-  const char *       outputFilename = argv[2];
-  const unsigned int numberOfLevels = atoi(argv[3]);
-  const float        decimationRatio = atof(argv[4]);
-
-  const unsigned int Dimension = 2;
-  typedef unsigned char InputPixelType;
-  typedef unsigned char OutputPixelType;
-
-  typedef otb::Image<InputPixelType, Dimension>  InputImageType;
-  typedef otb::Image<OutputPixelType, Dimension> OutputImageType;
-
-  typedef otb::ImageFileReader<InputImageType>  ReaderType;
-  typedef otb::ImageFileWriter<OutputImageType> WriterType;
-
-  typedef itk::BinaryBallStructuringElement<InputPixelType, Dimension> StructuringElementType;
-  typedef otb::OpeningClosingMorphologicalFilter<InputImageType, InputImageType, StructuringElementType>
-  OpeningClosingFilterType;
-  typedef otb::MorphologicalPyramidAnalysisFilter<InputImageType, OutputImageType, OpeningClosingFilterType>
-  PyramidAnalysisFilterType;
-  typedef otb::MorphologicalPyramidSynthesisFilter<InputImageType, OutputImageType>
-  PyramidSynthesisFilterType;
-
-  // Reading input image
-  ReaderType::Pointer reader = ReaderType::New();
-  reader->SetFileName(inputFilename);
-
-  // Analysis
-  PyramidAnalysisFilterType::Pointer pyramidAnalysis = PyramidAnalysisFilterType::New();
-  pyramidAnalysis->SetNumberOfLevels(numberOfLevels);
-  pyramidAnalysis->SetDecimationRatio(decimationRatio);
-  pyramidAnalysis->SetInput(reader->GetOutput());
-  pyramidAnalysis->Update();
-
-  // Synthesis
-  PyramidSynthesisFilterType::Pointer pyramidSynthesis = PyramidSynthesisFilterType::New();
-  pyramidSynthesis->SetInput(pyramidAnalysis->GetOutput()->Back());
-  pyramidSynthesis->SetSupFilter(pyramidAnalysis->GetSupFilter());
-  pyramidSynthesis->SetSupDeci(pyramidAnalysis->GetSupDeci());
-  pyramidSynthesis->SetInfFilter(pyramidAnalysis->GetInfFilter());
-  pyramidSynthesis->SetInfDeci(pyramidAnalysis->GetInfDeci());
-  pyramidSynthesis->Update();
-
-  // Writing the output image
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetFileName(outputFilename);
-  writer->SetInput(pyramidSynthesis->GetOutput()->Back());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidTestDriver.cxx b/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidTestDriver.cxx
deleted file mode 100644
index 7eae072f41716ed76033b26bbd70d0592fd0ce36..0000000000000000000000000000000000000000
--- a/Modules/Filtering/MorphologicalPyramid/test/otbMorphologicalPyramidTestDriver.cxx
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbTestMain.h"
-
-void RegisterTests()
-{
-  REGISTER_TEST(otbMorphologicalPyramidAnalysisFilter);
-  REGISTER_TEST(otbMorphologicalPyramidSegmenter);
-  REGISTER_TEST(otbMorphologicalPyramidSynthesisFilter);
-  REGISTER_TEST(otbMorphologicalPyramidMRToMSConverter);
-  REGISTER_TEST(otbMorphologicalPyramidResampler);
-  REGISTER_TEST(otbMorphologicalPyramidSegmentationFilter);
-}
diff --git a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h b/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h
deleted file mode 100644
index 5ca5b65c5285040ec2079884721d9ec09de46ca5..0000000000000000000000000000000000000000
--- a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbVectorizationPathListFilter_h
-#define otbVectorizationPathListFilter_h
-
-#include "otbPathListSource.h"
-#include "itkImageRegionIterator.h"
-#include "itkNeighborhoodIterator.h"
-#include "itkConstantBoundaryCondition.h"
-#include "otbImage.h"
-
-namespace otb
-{
-/** \class VectorizationPathListFilter
- *  \brief This filter performs a vectorization from a line detector modulus and direction outputs.
- *
- *  The output of this filter is an otb::ObjectList<TOutputPath>.
- *
- *  This filter performs vectorization at non-grid position by using the barycenter of the few pixels with
- *  non-null intensity in the given direction. A threshold can be set to tune the sensibility of the first point
- *  detection. Path with less than three vertices are not kept by the filter.
- *
- * \ingroup PathListSource
- *
- * \ingroup OTBPath
- */
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-class ITK_EXPORT VectorizationPathListFilter
-  : public PathListSource<TOutputPath>
-{
-public:
-  /** Standard typedefs */
-  typedef VectorizationPathListFilter   Self;
-  typedef PathListSource<TOutputPath>   Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(VectorizationPathListFilter, PathListSource);
-
-  /** Template parameters typedefs */
-  typedef TInputModulus                           InputModulusType;
-  typedef typename InputModulusType::ConstPointer InputModulusConstPointerType;
-  typedef typename InputModulusType::PixelType    InputPixelType;
-  typedef typename InputModulusType::PointType    PointType;
-  typedef typename InputModulusType::IndexType    IndexType;
-
-  typedef TInputDirection                              InputDirectionType;
-  typedef typename InputDirectionType::ConstPointer    InputDirectionConstPointerType;
-  typedef TOutputPath                                  OutputPathType;
-  typedef typename OutputPathType::Pointer             OutputPathPointerType;
-  typedef typename OutputPathType::ContinuousIndexType VertexType;
-
-  /** Derived typedefs */
-  typedef typename Superclass::OutputPathListType        OutputPathListType;
-  typedef typename Superclass::OutputPathListPointerType OutputPathListPointerType;
-
-  /** Set/get the input modulus */
-  using Superclass::SetInput;
-  void SetInput(InputModulusType * inputModulus);
-  const InputModulusType * GetInput(void);
-
-  /** Set/get the input direction */
-  void SetInputDirection(InputDirectionType * inputDirection);
-  const InputDirectionType * GetInputDirection(void);
-
-  itkSetMacro(AmplitudeThreshold, InputPixelType);
-  itkGetMacro(AmplitudeThreshold, InputPixelType);
-
-protected:
-
-  /** Other internal useful typedefs */
-  typedef otb::Image<bool, InputModulusType::ImageDimension> FlagImageType;
-  typedef typename FlagImageType::Pointer                    FlagImagePointerType;
-
-  typedef itk::ImageRegionConstIterator<InputModulusType>   ModRegionIteratorType;
-  typedef itk::ImageRegionConstIterator<InputDirectionType> DirRegionIteratorType;
-  typedef itk::ImageRegionIterator<FlagImageType>           FlagRegionIteratorType;
-
-  typedef itk::ConstantBoundaryCondition<InputModulusType>   ModBCType;
-  typedef itk::ConstantBoundaryCondition<InputDirectionType> DirBCType;
-  typedef itk::ConstantBoundaryCondition<FlagImageType>      FlagBCType;
-
-  typedef itk::ConstNeighborhoodIterator<InputModulusType, ModBCType>   ModNeighborhoodIteratorType;
-  typedef itk::ConstNeighborhoodIterator<InputDirectionType, ModBCType> DirNeighborhoodIteratorType;
-  typedef itk::NeighborhoodIterator<FlagImageType, FlagBCType>          FlagNeighborhoodIteratorType;
-
-  typedef typename ModNeighborhoodIteratorType::RadiusType RadiusType;
-  typedef typename ModNeighborhoodIteratorType::OffsetType OffsetType;
-  typedef std::vector<OffsetType>                          OffsetVectorType;
-
-  typedef typename OutputPathType::VertexListType VertexListType;
-  typedef typename VertexListType::ConstPointer   VertexListPointerType;
-  typedef typename VertexListType::ConstIterator  VertexIteratorType;
-
-  /** Constructor */
-  VectorizationPathListFilter();
-  /** Destructor */
-  ~VectorizationPathListFilter() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Main computation method */
-  void GenerateData(void) override;
-  /**
-   * Compute a vector of the 8  neighbors to explore from the direction and the type of search (forward or backward).
-   * \param direction The direction
-   * \param flagReverse The type of search
-   * \return The neighborhood vector
-   */
-  OffsetVectorType GetEightNeighborOffsetFromDirection(double direction, unsigned int flagReverse);
-  /**
-   * Compute a vector of the 3  neighbors to explore from the direction and the type of search (forward or backward).
-   * \param direction The direction
-   * \param flagReverse The type of search
-   * \return The neighborhood vector
-   */
-  OffsetVectorType GetThreeNeighborOffsetFromDirection(double direction, unsigned int flagReverse);
-private:
-  VectorizationPathListFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-  /** Amplitude threshold to start following a path */
-  InputPixelType m_AmplitudeThreshold;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbVectorizationPathListFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.hxx b/Modules/Filtering/Path/include/otbVectorizationPathListFilter.hxx
deleted file mode 100644
index 66ac753b113d61519262f03e0dbf29c4eaf60c38..0000000000000000000000000000000000000000
--- a/Modules/Filtering/Path/include/otbVectorizationPathListFilter.hxx
+++ /dev/null
@@ -1,677 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbVectorizationPathListFilter_hxx
-#define otbVectorizationPathListFilter_hxx
-
-#include "otbVectorizationPathListFilter.h"
-#include "otbMacro.h"
-#include "otbMath.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::VectorizationPathListFilter()
-{
-  this->SetNumberOfRequiredInputs(2);
-  this->SetNumberOfRequiredInputs(2);
-  m_AmplitudeThreshold = 1.0;
-}
-
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-void
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::SetInput(InputModulusType * inputModulus)
-{
-  this->itk::ProcessObject::SetNthInput(0, const_cast<InputModulusType *>(inputModulus));
-}
-
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-const typename VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::InputModulusType *
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::GetInput(void)
-{
-  if (this->GetNumberOfInputs() < 1)
-    {
-    return nullptr;
-    }
-  return static_cast<const TInputModulus*>(this->itk::ProcessObject::GetInput(0));
-}
-
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-void
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::SetInputDirection(InputDirectionType * inputDirection)
-{
-  this->itk::ProcessObject::SetNthInput(1, const_cast<InputDirectionType *>(inputDirection));
-}
-
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-const typename VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::InputDirectionType *
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::GetInputDirection(void)
-{
-  if (this->GetNumberOfInputs() < 2)
-    {
-    return nullptr;
-    }
-  return static_cast<const TInputDirection *>(this->itk::ProcessObject::GetInput(1));
-}
-
-/**
- * Main computation method
- */
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-void
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::GenerateData(void)
-{
-  InputModulusConstPointerType   modPtr = this->GetInput();
-  InputDirectionConstPointerType dirPtr = this->GetInputDirection();
-  OutputPathListPointerType      outPtr = this->GetOutput();
-
-  typedef typename OffsetVectorType::iterator OffsetIteratorType;
-
-  RadiusType radius;
-  radius.Fill(2);
-  OffsetVectorType offsetVector;
-
-  // Creation of the flag image
-  FlagImagePointerType flagImage = FlagImageType::New();
-  flagImage->SetRegions(modPtr->GetLargestPossibleRegion());
-  flagImage->Allocate();
-  flagImage->FillBuffer(false);
-
-  // Iterators instantiation
-  ModRegionIteratorType modIt(modPtr, modPtr->GetLargestPossibleRegion());
-  DirRegionIteratorType dirIt(dirPtr, dirPtr->GetLargestPossibleRegion());
-  FlagRegionIteratorType flagIt(flagImage, flagImage->GetLargestPossibleRegion());
-
-  for (modIt.GoToBegin(), dirIt.GoToBegin(), flagIt.GoToBegin();
-       (!modIt.IsAtEnd()) && (!dirIt.IsAtEnd()) && (!flagIt.IsAtEnd());
-       ++modIt, ++dirIt, ++flagIt)
-    {
-    if ((modIt.Get() > m_AmplitudeThreshold) && (!flagIt.Get()))
-      {
-      //this is a beginning, to follow in two directions
-      OutputPathPointerType pathTempDirect = OutputPathType::New();
-      OutputPathPointerType pathTempReverse = OutputPathType::New();
-      OutputPathPointerType path = OutputPathType::New();
-
-      bool   flagFinish;
-      int    flagReverse = 0;
-      double totalAmplitude = 0;
-
-      ModNeighborhoodIteratorType nModIt(radius, modPtr, modPtr->GetLargestPossibleRegion());
-      DirNeighborhoodIteratorType nDirIt(radius, dirPtr, dirPtr->GetLargestPossibleRegion());
-      FlagNeighborhoodIteratorType nFlagIt(radius, flagImage, flagImage->GetLargestPossibleRegion());
-
-      for (flagReverse = 0; flagReverse < 2; ++flagReverse)
-        {
-        nModIt.SetLocation(modIt.GetIndex());
-        nDirIt.SetLocation(dirIt.GetIndex());
-        nFlagIt.SetLocation(flagIt.GetIndex());
-        // temporary point
-        PointType  point;
-        VertexType vertex;
-        modPtr->TransformIndexToPhysicalPoint(nModIt.GetIndex(), point);
-        modPtr->TransformPhysicalPointToContinuousIndex(point, vertex);
-        if (flagReverse == 0)
-          {
-          flagIt.Set(true);
-
-          //  otbMsgDebugMacro(<<"Adding new vertex: "<<vertex);
-
-          pathTempDirect->AddVertex(vertex);
-          }
-        flagFinish = false;
-        while (!flagFinish)
-          {
-          offsetVector = GetThreeNeighborOffsetFromDirection(nDirIt.GetCenterPixel(), flagReverse);
-          OffsetIteratorType vecIt = offsetVector.begin();
-          bool               flagFound = false;
-          while (vecIt != offsetVector.end() && !flagFound)
-            {
-            flagFound = nModIt.GetPixel(*vecIt) > 0
-                        && !nFlagIt.GetPixel(*vecIt);
-            ++vecIt;
-            }
-          if (flagFound)
-            {
-            point.Fill(0);
-            PointType tmpPoint;
-            totalAmplitude = 0;
-            for (vecIt = offsetVector.begin(); vecIt != offsetVector.end(); ++vecIt)
-              {
-              double currentAmplitude = nModIt.GetPixel(*vecIt);
-              modPtr->TransformIndexToPhysicalPoint(nModIt.GetIndex(*vecIt), tmpPoint);
-              point[0] += currentAmplitude * tmpPoint[0];
-              point[1] += currentAmplitude * tmpPoint[1];
-              totalAmplitude += currentAmplitude;
-              }
-            point[0] = point[0] / totalAmplitude;
-            point[1] = point[1] / totalAmplitude;
-            modPtr->TransformPhysicalPointToContinuousIndex(point, vertex);
-            if (flagReverse == 0)
-              {
-//               otbMsgDevMacro(<<"Adding new vertex (direct): "<<vertex);
-
-              pathTempDirect->AddVertex(vertex);
-              }
-            else
-              {
-
-//               otbMsgDevMacro(<<"Adding new vertex (reverse): "<<vertex);
-
-              pathTempReverse->AddVertex(vertex);
-              }
-            // flag the pixel use
-            nFlagIt.SetCenterPixel(true);
-            //update the neighbor iterators so they are centered on the nearest pixel to the barycenter
-            IndexType newIndex;
-            if (modPtr->TransformPhysicalPointToIndex(point, newIndex))
-              {
-//              otbMsgDevMacro(<<"Moving to new center: " << newIndex);
-              nModIt.SetLocation(newIndex);
-              nDirIt.SetLocation(newIndex);
-              nFlagIt.SetLocation(newIndex);
-
-              if (nModIt.GetCenterPixel() == 0)
-                {
-                //we need to check that in case the barycenter is out...
-                flagFinish = true;
-                }
-              if (nFlagIt.GetCenterPixel())
-                {
-                //we don't want to go back to the same pixels
-                flagFinish = true;
-                }
-              }
-            else
-              {
-              //new point outside image
-              flagFinish = true;
-              }
-            }
-          else
-            {
-            flagFinish = true;
-            }
-          }
-        }
-      VertexListPointerType vertexDirect = pathTempDirect->GetVertexList();
-      VertexListPointerType vertexReverse = pathTempReverse->GetVertexList();
-
-      unsigned int numberVertex = 0;
-
-      VertexIteratorType vertexReverseIt = vertexReverse->End();
-      if (vertexReverseIt != vertexReverse->Begin())
-        {
-        --vertexReverseIt;
-        while (vertexReverseIt != vertexReverse->Begin())
-          {
-          path->AddVertex(vertexReverseIt.Value());
-          ++numberVertex;
-          --vertexReverseIt;
-          }
-        path->AddVertex(vertexReverseIt.Value());
-        }
-
-      VertexIteratorType vertexDirectIt = vertexDirect->Begin();
-      while (vertexDirectIt != vertexDirect->End())
-        {
-        path->AddVertex(vertexDirectIt.Value());
-        ++vertexDirectIt;
-        ++numberVertex;
-        }
-
-      // otbMsgDebugMacro(<<"Path number of vertices: "<<numberVertex);
-
-      if (numberVertex > 3)
-        {
-        outPtr->PushBack(path);
-        }
-      }
-    }
-}
-
-/**
- * Compute the 8 neighbors to explore from the direction and the type of search (forward or backward).
- * \param direction The direction
- * \param flagReverse The type of search
- * \return The neighborhood
- */
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-typename VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::OffsetVectorType
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::GetEightNeighborOffsetFromDirection(double direction, unsigned int flagReverse)
-{
-  int              neighborhoodNumber = 0;
-  OffsetVectorType offset;
-  offset.reserve(8);
-  if (direction > 0)
-    {
-    //find the direction in terms of 0, 1, 2, 3
-    neighborhoodNumber = (int) (direction / (CONST_PI_4) -1);
-    }
-  else
-    {
-    neighborhoodNumber = (int) ((direction + CONST_PI) / (CONST_PI_4) -1);
-    neighborhoodNumber = (neighborhoodNumber + 4);
-    //if the direction was <0 need to convert to 4, 5, 6, 7
-    }
-  if (flagReverse)
-    {
-    //if the reverse flag is activated we need to look on the other side
-    neighborhoodNumber = (neighborhoodNumber + 4) % 8;
-    }
-  OffsetType tmpOffset;
-  switch (neighborhoodNumber)
-    {
-    case 0:
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-
-      tmpOffset[0] = 2;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-
-      break;
-
-    case 1:
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-
-      tmpOffset[0] = 2;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      break;
-
-    case 2:
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      break;
-
-    case 3:
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-
-      tmpOffset[0] = -2;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      break;
-
-    case 4:
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-
-      tmpOffset[0] = -2;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -2;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      break;
-
-    case 5:
-      tmpOffset[0] = -1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-
-      tmpOffset[0] = -2;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      break;
-
-    case 6:
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      break;
-
-    case 7:
-      tmpOffset[0] = 1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-
-      tmpOffset[0] = 2;
-      tmpOffset[1] = -2;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 2;
-      tmpOffset[1] = 2;
-      offset.push_back(tmpOffset);
-      break;
-    }
-  return offset;
-}
-
-/**
- * Compute the 3 neighbors to explore from the direction and the type of search (forward or backward).
- * \param direction The direction
- * \param flagReverse The type of search
- * \return The neighborhood
- */
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-typename VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::OffsetVectorType
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::GetThreeNeighborOffsetFromDirection(double direction, unsigned int flagReverse)
-{
-  int              neighborhoodNumber = 0;
-  OffsetVectorType offset;
-  offset.reserve(3);
-  if (direction > 0)
-    {
-    //find the direction in terms of 0, 1, 2, 3
-    neighborhoodNumber = (int) (direction / (CONST_PI_4) -1);
-    }
-  else
-    {
-    neighborhoodNumber = (int) ((direction + CONST_PI) / (CONST_PI_4) -1);
-    neighborhoodNumber = (neighborhoodNumber + 4);
-    //if the direction was <0 need to convert to 4, 5, 6, 7
-    }
-  if (flagReverse)
-    {
-    //if the reverse flag is activated we need to look on the other side
-    neighborhoodNumber = (neighborhoodNumber + 4) % 8;
-    }
-  OffsetType tmpOffset;
-//  otbMsgDevMacro(<<"Direction: " << neighborhoodNumber)
-  switch (neighborhoodNumber)
-    {
-    case 0:
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-
-      break;
-
-    case 1:
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-
-      break;
-
-    case 2:
-      tmpOffset[0] = 0;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-
-      break;
-
-    case 3:
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-
-      break;
-
-    case 4:
-      tmpOffset[0] = -1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = -1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-
-      break;
-
-    case 5:
-      tmpOffset[0] = -1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-
-      break;
-
-    case 6:
-      tmpOffset[0] = 0;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-
-      break;
-
-    case 7:
-      tmpOffset[0] = 1;
-      tmpOffset[1] = -1;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 0;
-      offset.push_back(tmpOffset);
-      tmpOffset[0] = 1;
-      tmpOffset[1] = 1;
-      offset.push_back(tmpOffset);
-
-      break;
-    }
-  return offset;
-}
-
-/**
- * PrintSelf Method
- */
-template <class TInputModulus, class TInputDirection, class TOutputPath>
-void
-VectorizationPathListFilter<TInputModulus, TInputDirection, TOutputPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-} // End namespace otb
-#endif
diff --git a/Modules/Filtering/Path/test/CMakeLists.txt b/Modules/Filtering/Path/test/CMakeLists.txt
index 699c24a3ca0a9e7761c463280b97dc4e468282da..79fe10a22d30c9ca5bd5d652c8e663fea243964d 100644
--- a/Modules/Filtering/Path/test/CMakeLists.txt
+++ b/Modules/Filtering/Path/test/CMakeLists.txt
@@ -36,7 +36,6 @@ otbDrawPathFilter.cxx
 otbOrientationPath.cxx
 otbPolyLineImageConstIterator.cxx
 otbRegionImageToRectangularPathListFilter.cxx
-otbVectorizationPathListFilter.cxx
 otbClosePathFunctor.cxx
 otbPolyLineImageIterator.cxx
 )
@@ -62,12 +61,12 @@ otb_add_test(NAME feTvImageToEdgePathFilterBis COMMAND otbPathTestDriver
 
 otb_add_test(NAME feTvImageToEdgePathFilter COMMAND otbPathTestDriver
   --compare-image ${EPSILON_8}
-  ${BASELINE}/feImageToEdgePathFilter_rcc8_mire4.png
-  ${TEMP}/feImageToEdgePathFilter_rcc8_mire4.png
+  ${BASELINE}/feImageToEdgePathFilterOutput.tif
+  ${TEMP}/feImageToEdgePathFilterOutput.tif
   otbImageToEdgePathFilter
-  ${INPUTDATA}/rcc8_mire4.png
-  ${TEMP}/feImageToEdgePathFilter_rcc8_mire4.png
-  255
+  ${INPUTDATA}/labelImage_UnsignedChar.tif
+  ${TEMP}/feImageToEdgePathFilterOutput.tif
+  3
   )
 
 otb_add_test(NAME feTuCompacityPathCircle COMMAND otbPathTestDriver
@@ -165,31 +164,6 @@ otb_add_test(NAME feTvRegionImageToRectangularPathListFilter COMMAND otbPathTest
   0.9 #fit score
   10)  #minimum size
 
-otb_add_test(NAME feTvVectorizationPathListFilterImageOutput COMMAND otbPathTestDriver
-  --compare-image ${EPSILON_8}
-  ${BASELINE}/feTvVectorizationPathListOutput.png
-  ${TEMP}/feTvVectorizationPathListOutput.png
-  otbVectorizationPathListFilter
-  ${INPUTDATA}/InputForRoadDetection_NonMaxRem.raw.hdr
-  ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr
-  ${TEMP}/feTvVectorizationPathListOutputIgnored.txt
-  ${TEMP}/feTvVectorizationPathListOutput.png
-  0.0001
-  )
-
-otb_add_test(NAME feTvVectorizationPathListFilterAsciiOutput COMMAND otbPathTestDriver
-  --compare-ascii ${EPSILON_3}
-  ${BASELINE_FILES}/feTvVectorizationPathListOutput.txt
-  ${TEMP}/feTvVectorizationPathListOutput.txt
-  otbVectorizationPathListFilter
-  ${INPUTDATA}/InputForRoadDetection_NonMaxRem.raw.hdr
-  ${INPUTDATA}/InputForRoadDetectionScalarProductDir.raw.hdr
-  ${TEMP}/feTvVectorizationPathListOutput.txt
-  ${TEMP}/feTvVectorizationPathListOutputIgnored.png
-  0.0005
-  )
-
-
 otb_add_test(NAME bfTvClosePathFunctor COMMAND otbPathTestDriver
   --compare-ascii ${NOTOL}
   ${BASELINE_FILES}/bfClosePathFunctorTest.txt
diff --git a/Modules/Filtering/Path/test/otbPathTestDriver.cxx b/Modules/Filtering/Path/test/otbPathTestDriver.cxx
index 5d1b508991581b0c74237020d6a8eb0d819f6c48..36352f2ca861edbda39448ed175d19b844c00ee3 100644
--- a/Modules/Filtering/Path/test/otbPathTestDriver.cxx
+++ b/Modules/Filtering/Path/test/otbPathTestDriver.cxx
@@ -36,7 +36,6 @@ void RegisterTests()
   REGISTER_TEST(otbOrientationPath);
   REGISTER_TEST(otbPolyLineImageConstIterator);
   REGISTER_TEST(otbRegionImageToRectangularPathListFilter);
-  REGISTER_TEST(otbVectorizationPathListFilter);
   REGISTER_TEST(otbClosePathFunctor);
   REGISTER_TEST(otbPolyLineImageIterator);
 }
diff --git a/Modules/Filtering/Path/test/otbVectorizationPathListFilter.cxx b/Modules/Filtering/Path/test/otbVectorizationPathListFilter.cxx
deleted file mode 100644
index d4bf64c81c83e7628b6561ed906de841d124190a..0000000000000000000000000000000000000000
--- a/Modules/Filtering/Path/test/otbVectorizationPathListFilter.cxx
+++ /dev/null
@@ -1,107 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbVectorizationPathListFilter.h"
-#include "itkPolyLineParametricPath.h"
-#include "otbImageFileReader.h"
-#include <fstream>
-
-#include "otbDrawPathListFilter.h"
-#include "otbImageFileWriter.h"
-
-int otbVectorizationPathListFilter(int itkNotUsed(argc), char * argv[])
-{
-  const char * modfname = argv[1];
-  const char * dirfname = argv[2];
-  const char * outfname = argv[3];
-  const char * outImagefname = argv[4];
-  const double thresh = atof(argv[5]);
-
-  const unsigned int Dimension = 2;
-  typedef double                                                              PixelType;
-  typedef unsigned char                                                       OutputPixelType;
-  typedef otb::Image<PixelType, Dimension>                                    ImageType;
-  typedef otb::Image<OutputPixelType, Dimension>                              OutputImageType;
-  typedef otb::ImageFileWriter<OutputImageType>                               WriterType;
-  typedef otb::ImageFileReader<ImageType>                                     ReaderType;
-  typedef itk::PolyLineParametricPath<Dimension>                              PathType;
-  typedef otb::DrawPathListFilter<OutputImageType, PathType, OutputImageType> DrawFilterType;
-  typedef otb::VectorizationPathListFilter<ImageType, ImageType, PathType>    VectorizationPathListFilterType;
-  typedef VectorizationPathListFilterType::OutputPathListType                 PathListType;
-  typedef PathListType::ConstIterator                                         PathListIteratorType;
-  typedef PathType::VertexListType                                            VertexListType;
-  typedef VertexListType::ConstIterator                                       VertexIteratorType;
-  // Instantiating objects
-  VectorizationPathListFilterType::Pointer filter = VectorizationPathListFilterType::New();
-  ReaderType::Pointer                      modReader = ReaderType::New();
-  ReaderType::Pointer                      dirReader = ReaderType::New();
-
-  modReader->SetFileName(modfname);
-  dirReader->SetFileName(dirfname);
-
-  filter->SetInput(modReader->GetOutput());
-  filter->SetInputDirection(dirReader->GetOutput());
-  filter->SetAmplitudeThreshold(thresh);
-  filter->Update();
-
-  PathListType::Pointer pathList = filter->GetOutput();
-  PathListIteratorType  pathListIt = pathList->Begin();
-
-  std::ofstream file;
-  file.open(outfname);
-  unsigned int counter = 0;
-
-  while (pathListIt != pathList->End())
-    {
-    file << "Path " << counter << ": ";
-    for (VertexIteratorType vIt = pathListIt.Get()->GetVertexList()->Begin();
-         vIt != pathListIt.Get()->GetVertexList()->End();
-         ++vIt)
-      {
-      if (vIt != pathListIt.Get()->GetVertexList()->Begin())
-        {
-        file << ", ";
-        }
-      file << vIt.Value();
-      }
-    file << std::endl;
-    ++pathListIt;
-    ++counter;
-    }
-  file.close();
-
-  OutputImageType::Pointer output = OutputImageType::New();
-  output->SetRegions(modReader->GetOutput()->GetLargestPossibleRegion());
-  output->Allocate();
-  output->FillBuffer(255);
-
-  DrawFilterType::Pointer drawer = DrawFilterType::New();
-  drawer->SetInput(output);
-  drawer->SetInputPath(filter->GetOutput());
-  drawer->SetPathValue(0);
-
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetFileName(outImagefname);
-  writer->SetInput(drawer->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h b/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h
deleted file mode 100644
index 056a1003cbb58712343a0cc63fa3193483d6eb17..0000000000000000000000000000000000000000
--- a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.h
+++ /dev/null
@@ -1,116 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbOrthoRectificationFilter_h
-#define otbOrthoRectificationFilter_h
-
-#include <sstream>
-#include <stdio.h>
-
-#include "otbGenericRSResampleImageFilter.h"
-#include "otbCompositeTransform.h"
-#include "otbInverseSensorModel.h"
-
-#include "otbVectorImage.h"
-#include "otbImage.h"
-
-namespace otb
-{
-/** \class OrthoRectificationFilter
- *
- * \brief Class for Orthorectifying an image
- *
- * This class is used to apply map projection and sensor model transformation
- * to orthorectify an image, with or without DEM.
- *
- * \ingroup Projection
- *
- * \example Projections/OrthoRectificationExample.cxx
- *
- *
- * \ingroup OTBProjection
- */
-
-template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision = double>
-class ITK_EXPORT OrthoRectificationFilter :
-    public GenericRSResampleImageFilter<TInputImage, TOutputImage>
-{
-public:
-  /** Standard class typedefs */
-  typedef GenericRSResampleImageFilter<TInputImage,
-      TOutputImage>                     Superclass;
-  typedef OrthoRectificationFilter      Self;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-  /** types definitions */
-  typedef typename TInputImage::IndexType   IndexType;
-  typedef typename TInputImage::SizeType    SizeType;
-  typedef typename TInputImage::SpacingType SpacingType;
-  typedef typename TInputImage::PointType   PointType;
-  typedef typename TInputImage::RegionType  RegionType;
-
-  typedef typename TOutputImage::PixelType OutputPixelType;
-
-  /** output map projection */
-  typedef TMapProjection                   MapProjectionType;
-  typedef typename TMapProjection::Pointer MapProjectionPointerType;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(OrthoRectificationFilter, GenericRSResampleImageFilter);
-
-  /** Accessors */
-  virtual void SetMapProjection(MapProjectionType* arg)
-  {
-    if (this->m_MapProjection != arg)
-      {
-      this->m_MapProjection = arg;
-      this->Modified();
-      }
-  }
-  itkGetObjectMacro(MapProjection, MapProjectionType);
-
-protected:
-  OrthoRectificationFilter();
-  ~OrthoRectificationFilter() override;
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  void GenerateInputRequestedRegion() override;
-  void GenerateOutputInformation(void) override;
-
-private:
-  OrthoRectificationFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  /** Map Projection used to transform cartographic coordinates in geographic  coordinates */
-  MapProjectionPointerType m_MapProjection;
-
-};
-
-} // namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbOrthoRectificationFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.hxx b/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.hxx
deleted file mode 100644
index c383f86a9cb2bfb58e39c9511eda1f4088cef048..0000000000000000000000000000000000000000
--- a/Modules/Filtering/Projection/include/otbOrthoRectificationFilter.hxx
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbOrthoRectificationFilter_hxx
-#define otbOrthoRectificationFilter_hxx
-
-#include "otbOrthoRectificationFilter.h"
-#include "itkMetaDataObject.h"
-
-namespace otb
-{
-
-template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision>
-OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision>
-::OrthoRectificationFilter(): m_MapProjection(nullptr)
-{}
-
-template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision>
-OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision>
-::~OrthoRectificationFilter()
-{}
-
-template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision>
-void OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "OrthoRectification" << "\n";
-}
-
-template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision>
-void
-OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision>
-::GenerateInputRequestedRegion()
-{
-  Superclass::GenerateInputRequestedRegion();
-}
-
-template <class TInputImage, class TOutputImage, class TMapProjection, class TInterpolatorPrecision>
-void
-OrthoRectificationFilter<TInputImage, TOutputImage, TMapProjection, TInterpolatorPrecision>
-::GenerateOutputInformation()
-{
-  // call the superclass' implementation of this method
-  Superclass::GenerateOutputInformation();
-
-  if(!m_MapProjection.IsNull()  && !m_MapProjection->GetWkt().empty())
-    {
-    // fill up the metadata information for ProjectionRef
-    itk::MetaDataDictionary&  dict          = this->GetOutput()->GetMetaDataDictionary();
-    std::string               projectionRef = m_MapProjection->GetWkt();
-    itk::EncapsulateMetaData<std::string>(dict, MetaDataKey::ProjectionRefKey, projectionRef);
-
-    // Fill the GenericRSTransform with those information
-    this->SetOutputProjectionRef(projectionRef);
-    this->UpdateTransform();
-    }
-}
-
-} //namespace otb
-
-#endif
diff --git a/Modules/Filtering/Projection/test/CMakeLists.txt b/Modules/Filtering/Projection/test/CMakeLists.txt
index e2e346b3c1805dd0124080886dde1d0356cdd5ee..b2e82e3676835ab5d7883aee53e014939ae41d3e 100644
--- a/Modules/Filtering/Projection/test/CMakeLists.txt
+++ b/Modules/Filtering/Projection/test/CMakeLists.txt
@@ -24,7 +24,6 @@ set(OTBProjectionTests
 otbSensorModel.cxx
 otbProjectionTestDriver.cxx
 otbVectorDataProjectionFilterFromGeoToMap.cxx
-otbOrthoRectificationFilter.cxx
 otbGenericRSResampleImageFilter.cxx
 otbGeometriesProjectionFilter.cxx
 otbGenericRSTransformGenericTest.cxx
@@ -44,7 +43,6 @@ otbVectorDataProjectionFilterFromMapToImage.cxx
 otbGenericRSTransformFromImage.cxx
 otbCompositeTransform.cxx
 otbLeastSquareAffineTransformEstimator.cxx
-otbSpectralAngleDataNodeFeatureFunction.cxx
 otbGCPsToRPCSensorModelImageFilterCheckRpcModel.cxx
 otbGeographicalDistance.cxx
 otbTileImageFilterRSTransformTest.cxx
@@ -188,6 +186,16 @@ RAPIDEYE/level1B/2008-12-25T005918_RE3_1B-NAC_397971_12345_band3.ntf
 SENTINEL1/S1A_S6_SLC__1SSV_20150619T195043/measurement/s1a-s6-slc-vv-20150619t195043-20150619t195101-006447-00887d-001.tiff
 )
 
+set(TOLERANCE_RATIO
+0
+0
+0
+0
+0
+0
+0.0002
+)
+
 set(IMG_TYPE
 "pleiades-1"
 "wv2-1"
@@ -303,6 +311,8 @@ foreach(current_img ${IMG_TEST_ORTHO})
 	list(GET RESOL ${IMGNB} current_resol         )
 	list(GET GRIDSPACING ${IMGNB} current_grid_spacing)
 	list(GET ISCOMPLEX ${IMGNB} current_is_compex)
+  list(GET TOLERANCE_RATIO ${IMGNB} current_tolerance_ratio)
+
 	math(EXPR IMGNB "${IMGNB} + 1")
 
 	set( MODENB 0)
@@ -313,7 +323,8 @@ foreach(current_img ${IMG_TEST_ORTHO})
 	  otb_add_test(NAME prTvOrthoRectification_${current_imgtype}_${current_mode} COMMAND otbProjectionTestDriver
 		  --compare-image ${EPSILON_4}  ${BASELINE}/prTvOrthoRectification_${current_imgtype}_${current_mode}.tif
 		  ${TEMP}/prTvOrthoRectification_${current_imgtype}_${current_mode}.tif
-		  otbOrthoRectificationFilter
+                  --tolerance-ratio ${current_tolerance_ratio}
+		  otbGenericRSResampleImageFilter
 		  LARGEINPUT{${current_img}?&geom=${INPUTDATA}/${current_geomgcp}.geom}
 		  ${TEMP}/prTvOrthoRectification_${current_imgtype}_${current_mode}.tif
 		  ${current_originx}
@@ -336,19 +347,6 @@ endforeach()
 #----------------- OrthoRectification tests (end) -----------------------
 #------------------------------------------------------------------------
 
-otb_add_test(NAME prTvotbGenericRSResampleImageFilter COMMAND otbProjectionTestDriver
-  --compare-image ${EPSILON_4}
-  ${BASELINE}/prTvotbGenericRSResampleImageFilterOutput.tif
-  ${TEMP}/prTvotbGenericRSResampleImageFilterOutput.tif
-  otbGenericRSResampleImageFilter
-  LARGEINPUT{QUICKBIRD/TOULOUSE/000000128955_01_P001_PAN/02APR01105228-P1BS-000000128955_01_P001.TIF}
-  1000
-  15
-  0
-  1
-  ${TEMP}/prTvotbGenericRSResampleImageFilterOutput.tif
-  )
-
 otb_add_test(NAME prTvGeometriesProjectionFilterLines COMMAND otbProjectionTestDriver
   --compare-ogr ${EPSILON_9}
   ${BASELINE_FILES}/prTvVectorDataProjectionFilterLines.shp
@@ -583,29 +581,6 @@ otb_add_test(NAME prTvLeastSquareAffineTransformEstimator COMMAND otbProjectionT
   352 807 919 10023 12102 14181
   )
 
-otb_add_test(NAME bfTvSpectralAngleDataNodeFeatureFunction_Polygon COMMAND otbProjectionTestDriver
-  --compare-ogr ${EPSILON_3}
-  ${BASELINE_FILES}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp
-  ${TEMP}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp
-  otbSpectralAngleDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/DEM/srtm_directory
-  ${TEMP}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Polygon.shp
-  0 )
-
-otb_add_test(NAME bfTvSpectralAngleDataNodeFeatureFunction_Line COMMAND otbProjectionTestDriver
-  --compare-ogr ${EPSILON_9}
-  ${BASELINE_FILES}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp
-  ${TEMP}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp
-  otbSpectralAngleDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/DEM/srtm_directory
-  ${TEMP}/bfTvSpectralAngleDataNodeFeatureFunctionOutput_Line.shp
-  0
-  )
-
 set(VALID_CONDITION err=12)
 if(OTB_OSSIM_VERSION LESS 20200)
 set(VALID_CONDITION err=10)
@@ -1209,28 +1184,3 @@ set(GenericConversionChecking_INPUTS
       #${INPUTDATA}/DEM/srtm_directory
       #3 )
   #endforeach()
-
-
-
-  set(SENSOR_TYPES
-    "QUICKBIRD/TOULOUSE/000000128955_01_P001_PAN/02APR01105228-P1BS-000000128955_01_P001.TIF"
-    "GEOEYE/LES_ROCHES/po_350134_bgrn_0000000.tif"
-    "WORLDVIEW2/ROME/WV-2_standard_8band_bundle_16bit/052298844010_01_P001_MUL/09DEC10103019-M2AS-052298844010_01_P001.TIF"
-    )
-
-  foreach( file ${SENSOR_TYPES})
-    # Get the sensor name
-    set(sharp_regexp "([0-9A-Za-z_]*)[ ]*/[ ]*(.*)")
-    string(REGEX REPLACE "${sharp_regexp}" "\\1" sensor_name "${file}")
-    # Tests
-    otb_add_test(NAME prTvotbGenericRSResampleImageFilterFromMap_${sensor_name} COMMAND otbProjectionTestDriver
-      --compare-image ${EPSILON_4}
-      ${BASELINE}/prTvotbGenericRSResampleImageFilterOutputFromMap_${sensor_name}.tif
-      ${TEMP}/prTvotbGenericRSResampleImageFilterOutputFromMap_${sensor_name}.tif
-      otbGenericRSResampleImageFilterFromMap
-      LARGEINPUT{${file}}
-      15
-      0
-      ${TEMP}/prTvotbGenericRSResampleImageFilterOutputFromMap_${sensor_name}.tif
-      )
-  endforeach()
diff --git a/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx b/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx
index 20dc63f23e52b24bdfadf74aabb6159f61f6372b..f9eb115fcf556b9104b6b157d4fa0425e3ebd0a1 100644
--- a/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx
+++ b/Modules/Filtering/Projection/test/otbGCPsToRPCSensorModelImageFilterAndOrtho.cxx
@@ -21,8 +21,7 @@
 #include "otbImageFileReader.h"
 #include "otbGCPsToRPCSensorModelImageFilter.h"
 #include "otbImageFileWriter.h"
-#include "otbGenericMapProjection.h"
-#include "otbOrthoRectificationFilter.h"
+#include "otbGenericRSResampleImageFilter.h"
 #include "otbMacro.h"
 
 int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[])
@@ -47,8 +46,7 @@ int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[])
   typedef GCPsToSensorModelFilterType::Point2DType        Point2DType;
   typedef GCPsToSensorModelFilterType::Point3DType        Point3DType;
   typedef otb::ImageFileWriter<ImageType>                                  WriterType;
-  typedef otb::GenericMapProjection<otb::TransformDirection::INVERSE> MapProjectionType;
-  typedef otb::OrthoRectificationFilter<ImageType, ImageType, MapProjectionType> OrthoRectifFilterType;
+  typedef otb::GenericRSResampleImageFilter<ImageType, ImageType> OrthoRectifFilterType;
 
   ReaderType::Pointer reader = ReaderType::New();
   reader->SetFileName(infname);
@@ -91,9 +89,6 @@ int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[])
 
   OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New();
 
-
-  MapProjectionType::Pointer  utmMapProjection = MapProjectionType::New();
-
   orthoRectifFilter->SetInput(rpcEstimator->GetOutput());
 
   ImageType::IndexType start;
@@ -116,9 +111,9 @@ int otbGCPsToRPCSensorModelImageFilterAndOrtho(int argc, char* argv[])
   origin[1] = strtod(argv[4], nullptr);         //Origin northing
   orthoRectifFilter->SetOutputOrigin(origin);
 
-  utmMapProjection->SetWkt(otb::SpatialReference::FromUTM(atoi(argv[9]),argv[10][0]=='N'?otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt());
+  std::string wkt = otb::SpatialReference::FromUTM(atoi(argv[9]),argv[10][0]=='N'?otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt();
 
-  orthoRectifFilter->SetMapProjection(utmMapProjection);
+  orthoRectifFilter->SetOutputProjectionRef(wkt);
 
   ImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel());
   no_data.Fill(0.0);
diff --git a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
index c61ad46200e62e100276c9cb1a3a661071918535..31027d1eae899c096547675667a3c57403498061 100644
--- a/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
+++ b/Modules/Filtering/Projection/test/otbGenericRSResampleImageFilter.cxx
@@ -19,183 +19,124 @@
  */
 
 
-#include "otbGenericRSResampleImageFilter.h"
+
+// iostream is used for general output
+#include <iostream>
+#include <stdlib.h>
+#include <complex>
 
 #include "otbImageFileReader.h"
 #include "otbImageFileWriter.h"
+#include "otbGenericMapProjection.h"
+#include "itkUnaryFunctorImageFilter.h"
 
-#include <ogr_spatialref.h>
-
-// Extract ROI
-#include "otbMultiChannelExtractROI.h"
-
-// Images definition
-const unsigned int Dimension = 2;
-typedef double                                      PixelType;
-typedef otb::VectorImage<PixelType, Dimension>      ImageType;
-typedef ImageType::SizeType                         SizeType;
-
-typedef otb::GenericRSResampleImageFilter<ImageType,
-                                          ImageType> ImageResamplerType;
-typedef ImageResamplerType::OriginType              OriginType;
-typedef ImageResamplerType::SpacingType             SpacingType;
-
-typedef otb::ImageFileReader<ImageType>             ReaderType;
-typedef otb::ImageFileWriter<ImageType>    WriterType;
-
+#include "otbDEMHandler.h"
+#include "otbUnaryImageFunctorWithVectorImageFilter.h"
+#include "otbGenericRSResampleImageFilter.h"
+#include "otbComplexToIntensityImageFilter.h"
+#include "otbPerBandVectorImageFilter.h"
 
-int otbGenericRSResampleImageFilter(int itkNotUsed(argc), char* argv[])
+int otbGenericRSResampleImageFilter(int argc, char* argv[])
 {
+  if (argc != 15)
+    {
+    std::cout << argv[0] <<
+    " <input filename> <output filename> <origin easting> <origin northing>"
+    " <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>"
+    " <grid_spacing> <mode> <mode.info> <is_complex>"
+              << std::endl;
 
-  // SmartPointer instantiation
-  ImageResamplerType::Pointer resampler = ImageResamplerType::New();
-
-  const char * infname = argv[1];
-  const char * outfname = argv[6];
-  unsigned int isize    = atoi(argv[2]);
-  double iGridSpacing    = atof(argv[3]);
-  int    useInRpc          = atoi(argv[4]);
-  int    useOutRpc          = atoi(argv[5]);
-
-
-  ReaderType::Pointer         reader    = ReaderType::New();
-
-  // Read the input image
-  reader->SetFileName(infname);
-  reader->UpdateOutputInformation();
-
-  // Fill the output size with the user selection
-  SizeType      size;
-  size.Fill(isize);
-
-  // Set the origin & the spacing of the output
-  OriginType  origin;
-  origin[0] = 367340;
-  origin[1] = 4.83467e+06;
-
-  SpacingType  spacing;
-  spacing[0] = 0.6;
-  spacing[1] = -0.6;
-
-  // Build the output projection ref : UTM ref
-  OGRSpatialReference    oSRS;
-  oSRS.SetProjCS("UTM");
-  oSRS.SetUTM(31, true);
-  char * utmRef = nullptr;
-  oSRS.exportToWkt(&utmRef);
+    return EXIT_FAILURE;
+    }
 
-  // Displacement Field spacing
-  SpacingType  gridSpacing;
-  gridSpacing[0] = iGridSpacing;
-  gridSpacing[1] = -iGridSpacing;
-
-  // Default value builder
-  ImageType::PixelType defaultValue;
-  itk::NumericTraits<ImageType::PixelType>::SetLength(defaultValue, reader->GetOutput()->GetNumberOfComponentsPerPixel());
-
-  // Set the Resampler Parameters
-  resampler->SetInput(reader->GetOutput());
-  resampler->SetDisplacementFieldSpacing(gridSpacing);
-  resampler->SetOutputOrigin(origin);
-  resampler->SetOutputSize(size);
-  resampler->SetOutputSpacing(spacing);
-  resampler->SetOutputProjectionRef(utmRef);
-  resampler->SetEdgePaddingValue(defaultValue);
-  if (useInRpc)
+  typedef std::complex<double>                                                      ComplexPixelType;
+  typedef otb::VectorImage<ComplexPixelType,2>                                     ComplexVectorImageType;
+  typedef otb::VectorImage<double, 2>                                               VectorImageType;
+  typedef otb::ImageFileReader<VectorImageType>                                     ReaderType;
+  typedef otb::ImageFileReader<ComplexVectorImageType>                              ComplexReaderType;
+  typedef otb::ImageFileWriter<VectorImageType>                                     WriterType;
+
+  // Handling of complex images
+  typedef otb::Image<ComplexPixelType> ComplexImageType;
+  typedef otb::Image<double>           ImageType;
+  typedef otb::ComplexToIntensityImageFilter<ComplexImageType, ImageType> IntensityFilterType;
+  typedef otb::PerBandVectorImageFilter<ComplexVectorImageType,VectorImageType,IntensityFilterType> PerBandIntensityFilterType;
+  typedef otb::GenericRSResampleImageFilter<VectorImageType, VectorImageType> OrthoRectifFilterType;
+
+  //Allocate pointer
+  ReaderType::Pointer reader = ReaderType::New();
+  ComplexReaderType::Pointer cReader = ComplexReaderType::New();
+  WriterType::Pointer writer = WriterType::New();
+  PerBandIntensityFilterType::Pointer intensityFilter = PerBandIntensityFilterType::New();
+  
+  OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New();
+
+  writer->SetFileName(argv[2]);
+  
+  bool isComplex = atoi(argv[14]);
+
+  if(isComplex)
     {
-    resampler->SetInputRpcGridSize(20);
-    resampler->EstimateInputRpcModelOn();
+      cReader->SetFileName(argv[1]);
+      cReader->GenerateOutputInformation();
+      intensityFilter->SetInput(cReader->GetOutput());
+      VectorImageType::PixelType no_data(cReader->GetOutput()->GetNumberOfComponentsPerPixel());
+      no_data.Fill(0);
+      orthoRectifFilter->SetEdgePaddingValue(no_data);
+      orthoRectifFilter->SetInput(intensityFilter->GetOutput());
     }
-
-  if (useOutRpc)
+  else
     {
-    resampler->SetOutputRpcGridSize(20);
-    resampler->EstimateOutputRpcModelOn();
+      reader->SetFileName(argv[1]);
+      reader->GenerateOutputInformation();
+      VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel());
+      no_data.Fill(0);
+      orthoRectifFilter->SetEdgePaddingValue(no_data);
+      orthoRectifFilter->SetInput(reader->GetOutput());
     }
 
+  VectorImageType::IndexType start;
+  start[0] = 0;
+  start[1] = 0;
+  orthoRectifFilter->SetOutputStartIndex(start);
 
-  // Write the resampled image
-  WriterType::Pointer writer= WriterType::New();
-  writer->SetNumberOfDivisionsTiledStreaming(4);
-  writer->SetFileName(outfname);
-  writer->SetInput(resampler->GetOutput());
-  writer->Update();
+  VectorImageType::SizeType size;
+  size[0] = atoi(argv[5]);      // X size
+  size[1] = atoi(argv[6]);            //Y size
+  orthoRectifFilter->SetOutputSize(size);
 
-  std::cout << resampler << std::endl;
+  VectorImageType::SpacingType spacing;
+  spacing[0] = atof(argv[7]);
+  spacing[1] = atof(argv[8]);
+  orthoRectifFilter->SetOutputSpacing(spacing);
 
-  return EXIT_SUCCESS;
-}
-
-
-int otbGenericRSResampleImageFilterFromMap(int itkNotUsed(argc), char* argv[])
-{
-  typedef otb::MultiChannelExtractROI<PixelType, PixelType>  ExtractROIType;
-
-  // SmartPointer instantiation
-  ExtractROIType::Pointer extractor = ExtractROIType::New();
-  ImageResamplerType::Pointer resampler = ImageResamplerType::New();
+  VectorImageType::PointType origin;
+  origin[0] = strtod(argv[3], nullptr);         //Origin easting
+  origin[1] = strtod(argv[4], nullptr);         //Origin northing
+  orthoRectifFilter->SetOutputOrigin(origin);
 
-  const char * infname   = argv[1];
-  const char * outfname  = argv[4];
-  double iGridSpacing    = atof(argv[2]);
-  int    useInRpc        = atoi(argv[3]);
-
-  // Reader Instantiation
-  ReaderType::Pointer         reader    = ReaderType::New();
-  reader->SetFileName(infname);
-  reader->UpdateOutputInformation();
-
-  SpacingType  spacing;
-  spacing[0] =  2.5;
-  spacing[1] = -2.5;
+  std::string wkt = otb::SpatialReference::FromUTM(atoi(argv[9]),atoi(argv[10]) ? otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt();
+  orthoRectifFilter->SetOutputProjectionRef(wkt);
 
   // Displacement Field spacing
-  SpacingType  gridSpacing;
-  gridSpacing[0] = iGridSpacing;
-  gridSpacing[1] = -iGridSpacing;
-
-  // Default value builder
-  ImageType::PixelType defaultValue;
-  itk::NumericTraits<ImageType::PixelType>::SetLength(defaultValue, reader->GetOutput()->GetNumberOfComponentsPerPixel());
-
-  // Extract a roi centered on the input center
-  ImageType::RegionType roi;
-  ImageType::IndexType  roiIndex;
-  SizeType              roiSize;
-
-  // Fill the size
-  roiSize.Fill(250);
-
-  // Fill the start index
-  roiIndex[0] = (unsigned int)((reader->GetOutput()->GetLargestPossibleRegion().GetSize()[0] - roiSize[0]) /2);
-  roiIndex[1] = (unsigned int)((reader->GetOutput()->GetLargestPossibleRegion().GetSize()[1] - roiSize[1]) /2);
-
-  roi.SetIndex(roiIndex);
-  roi.SetSize(roiSize);
-
-  extractor->SetExtractionRegion(roi);
-  extractor->SetInput(reader->GetOutput());
-  extractor->UpdateOutputInformation();
-
-  // Set the Resampler Parameters
-  resampler->SetInput(extractor->GetOutput());
-  resampler->SetDisplacementFieldSpacing(gridSpacing);
-  resampler->SetOutputParametersFromMap("UTM", spacing);
-
-  if (useInRpc)
-    {
-    resampler->SetInputRpcGridSize(20);
-    resampler->EstimateInputRpcModelOn();
-    }
-
-  // Write the resampled image
-  WriterType::Pointer writer= WriterType::New();
-  writer->SetAutomaticTiledStreaming();
-  writer->SetFileName(outfname);
-  writer->SetInput(resampler->GetOutput());
+  VectorImageType::SpacingType  gridSpacing;
+  gridSpacing[0] = atof(argv[11]);
+  gridSpacing[1] = -atof(argv[11]);
+  orthoRectifFilter->SetDisplacementFieldSpacing(gridSpacing);
+  
+  // manage demHandler
+  if (atoi(argv[12])==1) //mode = no DEM
+  {
+	  otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(135.8);
+  }
+  else if ( (atoi(argv[12])==2) || (atoi(argv[12])==3) ) //mode = DEM SRTM || DEM GTIFF
+  {
+	  otb::DEMHandler::Instance()->OpenDEMDirectory(argv[13]);
+  }
+
+  writer->SetInput(orthoRectifFilter->GetOutput());
+  writer->SetNumberOfDivisionsTiledStreaming(4);
   writer->Update();
 
-  std::cout << resampler << std::endl;
-
   return EXIT_SUCCESS;
 }
diff --git a/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx b/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx
deleted file mode 100644
index e832b5dc0ff2163ec5abe0c0518544932f845552..0000000000000000000000000000000000000000
--- a/Modules/Filtering/Projection/test/otbOrthoRectificationFilter.cxx
+++ /dev/null
@@ -1,144 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-// iostream is used for general output
-#include <iostream>
-#include <stdlib.h>
-#include <complex>
-
-#include "otbImageFileReader.h"
-#include "otbImageFileWriter.h"
-#include "otbGenericMapProjection.h"
-#include "itkUnaryFunctorImageFilter.h"
-//#include "itkComplexToModulusImageFilter.h"
-#include "otbDEMHandler.h"
-#include "otbUnaryImageFunctorWithVectorImageFilter.h"
-#include "otbOrthoRectificationFilter.h"
-#include "otbComplexToIntensityImageFilter.h"
-#include "otbPerBandVectorImageFilter.h"
-
-int otbOrthoRectificationFilter(int argc, char* argv[])
-{
-  if (argc != 15)
-    {
-    std::cout << argv[0] <<
-    " <input filename> <output filename> <origin easting> <origin northing>"
-    " <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>"
-    " <grid_spacing> <mode> <mode.info> <is_complex>"
-              << std::endl;
-
-    return EXIT_FAILURE;
-    }
-
-  typedef std::complex<double>                                                      ComplexPixelType;
-  typedef otb::VectorImage<ComplexPixelType,2>                                     ComplexVectorImageType;
-  typedef otb::VectorImage<double, 2>                                               VectorImageType;
-  typedef otb::ImageFileReader<VectorImageType>                                     ReaderType;
-  typedef otb::ImageFileReader<ComplexVectorImageType>                              ComplexReaderType;
-  typedef otb::ImageFileWriter<VectorImageType>                                     WriterType;
-
-  // Handling of complex images
-  typedef otb::Image<ComplexPixelType> ComplexImageType;
-  typedef otb::Image<double>           ImageType;
-  typedef otb::ComplexToIntensityImageFilter<ComplexImageType, ImageType> IntensityFilterType;
-  typedef otb::PerBandVectorImageFilter<ComplexVectorImageType,VectorImageType,IntensityFilterType> PerBandIntensityFilterType;
-  typedef otb::GenericMapProjection<otb::TransformDirection::INVERSE> MapProjectionType;
-  typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, MapProjectionType> OrthoRectifFilterType;
-
-  //Allocate pointer
-  ReaderType::Pointer reader = ReaderType::New();
-  ComplexReaderType::Pointer cReader = ComplexReaderType::New();
-  WriterType::Pointer writer = WriterType::New();
-  PerBandIntensityFilterType::Pointer intensityFilter = PerBandIntensityFilterType::New();
-  
-  OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New();
-
-  writer->SetFileName(argv[2]);
-  
-  bool isComplex = atoi(argv[14]);
-
-  if(isComplex)
-    {
-      cReader->SetFileName(argv[1]);
-      cReader->GenerateOutputInformation();
-      intensityFilter->SetInput(cReader->GetOutput());
-      VectorImageType::PixelType no_data(cReader->GetOutput()->GetNumberOfComponentsPerPixel());
-      no_data.Fill(0);
-      orthoRectifFilter->SetEdgePaddingValue(no_data);
-      orthoRectifFilter->SetInput(intensityFilter->GetOutput());
-    }
-  else
-    {
-      reader->SetFileName(argv[1]);
-      reader->GenerateOutputInformation();
-      VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel());
-      no_data.Fill(0);
-      orthoRectifFilter->SetEdgePaddingValue(no_data);
-      orthoRectifFilter->SetInput(reader->GetOutput());
-    }
-
-  VectorImageType::IndexType start;
-  start[0] = 0;
-  start[1] = 0;
-  orthoRectifFilter->SetOutputStartIndex(start);
-
-  VectorImageType::SizeType size;
-  size[0] = atoi(argv[5]);      // X size
-  size[1] = atoi(argv[6]);            //Y size
-  orthoRectifFilter->SetOutputSize(size);
-
-  VectorImageType::SpacingType spacing;
-  spacing[0] = atof(argv[7]);
-  spacing[1] = atof(argv[8]);
-  orthoRectifFilter->SetOutputSpacing(spacing);
-
-  VectorImageType::PointType origin;
-  origin[0] = strtod(argv[3], nullptr);         //Origin easting
-  origin[1] = strtod(argv[4], nullptr);         //Origin northing
-  orthoRectifFilter->SetOutputOrigin(origin);
-
-  MapProjectionType::Pointer utmMapProjection = MapProjectionType::New();
-  utmMapProjection->SetWkt(otb::SpatialReference::FromUTM(atoi(argv[9]),atoi(argv[10]) ? otb::SpatialReference::hemisphere::north : otb::SpatialReference::hemisphere::south).ToWkt());
-  orthoRectifFilter->SetMapProjection(utmMapProjection);
-
-  // Displacement Field spacing
-  VectorImageType::SpacingType  gridSpacing;
-  gridSpacing[0] = atof(argv[11]);
-  gridSpacing[1] = -atof(argv[11]);
-  orthoRectifFilter->SetDisplacementFieldSpacing(gridSpacing);
-  
-  // manage demHandler
-  if (atoi(argv[12])==1) //mode = no DEM
-  {
-	  otb::DEMHandler::Instance()->SetDefaultHeightAboveEllipsoid(135.8);
-  }
-  else if ( (atoi(argv[12])==2) || (atoi(argv[12])==3) ) //mode = DEM SRTM || DEM GTIFF
-  {
-	  otb::DEMHandler::Instance()->OpenDEMDirectory(argv[13]);
-  }
-
-  writer->SetInput(orthoRectifFilter->GetOutput());
-  writer->SetNumberOfDivisionsTiledStreaming(4);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx b/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx
index 6f985e5f5c797ef0a758fb4e70eb198d42b629ad..acbe2a16407fa3b09ef58adf069c95c836bc83ab 100644
--- a/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx
+++ b/Modules/Filtering/Projection/test/otbProjectionTestDriver.cxx
@@ -24,9 +24,7 @@ void RegisterTests()
 {
   REGISTER_TEST(otbSensorModel);
   REGISTER_TEST(otbVectorDataProjectionFilterFromGeoToMap);
-  REGISTER_TEST(otbOrthoRectificationFilter);
   REGISTER_TEST(otbGenericRSResampleImageFilter);
-  REGISTER_TEST(otbGenericRSResampleImageFilterFromMap);
   REGISTER_TEST(otbGeometriesProjectionFilter);
   REGISTER_TEST(otbGenericRSTransformGenericTest);
   REGISTER_TEST(otbVectorDataTransformFilter);
@@ -46,7 +44,6 @@ void RegisterTests()
   REGISTER_TEST(otbGenericRSTransformImageAndMNTToWGS84ConversionChecking);
   REGISTER_TEST(otbCompositeTransform);
   REGISTER_TEST(otbLeastSquareAffineTransformEstimator);
-  REGISTER_TEST(otbSpectralAngleDataNodeFeatureFunction);
   REGISTER_TEST(otbGCPsToRPCSensorModelImageFilterCheckRpcModel);
   REGISTER_TEST(otbGeographicalDistance);
   REGISTER_TEST(otbTileImageFilterRSTransformTest);
diff --git a/Modules/Filtering/Projection/test/otbSpectralAngleDataNodeFeatureFunction.cxx b/Modules/Filtering/Projection/test/otbSpectralAngleDataNodeFeatureFunction.cxx
deleted file mode 100644
index eb239242e2ad774a69c3480b8d447904c0945516..0000000000000000000000000000000000000000
--- a/Modules/Filtering/Projection/test/otbSpectralAngleDataNodeFeatureFunction.cxx
+++ /dev/null
@@ -1,127 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "otbSpectralAngleDataNodeFeatureFunction.h"
-
-#include "otbVectorImage.h"
-#include "otbImageFileReader.h"
-#include "otbVectorData.h"
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataIntoImageProjectionFilter.h"
-#include "otbVectorDataFileWriter.h"
-#include "itkPreOrderTreeIterator.h"
-
-
-int otbSpectralAngleDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputVD  = argv[1];
-  const char * inputImg = argv[2];
-  const char * DEMDir   = argv[3];
-  const char * outputVD = argv[4];
-  int DisplayWarnings   = atoi(argv[5]);
-
-  typedef double                                      CoordRepType;
-  typedef double                                      PrecisionType;
-  typedef otb::VectorImage<PrecisionType>             ImageType;
-  typedef otb::ImageFileReader<ImageType>             ImageReaderType;
-  typedef otb::VectorData<CoordRepType, 2, PrecisionType>
-                                                      VectorDataType;
-  typedef VectorDataType::DataNodeType                DataNodeType;
-  typedef otb::VectorDataFileReader<VectorDataType>   VectorDataReaderType;
-  typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType>
-                                                      VectorDataReProjFilter;
-  typedef otb::VectorDataFileWriter<VectorDataType>   VectorDataWriterType;
-  typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType>
-                                                      TreeIteratorType;
-
-  typedef otb::SpectralAngleDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType>
-                                                      FeaturefunctionType;
-  typedef FeaturefunctionType::OutputType
-                                                      FeatureOutputType;
-
-  ImageReaderType::Pointer imgReader = ImageReaderType::New();
-  VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New();
-  VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New();
-  VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New();
-  FeaturefunctionType::Pointer featureFunction = FeaturefunctionType::New();
-
-  if (!DisplayWarnings)
-   {
-    imgReader->SetGlobalWarningDisplay(0);
-   }
-
-  otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDir);
-
-  vdReader->SetFileName(inputVD);
-  vdReader->Update();
-
-  imgReader->SetFileName(inputImg);
-  imgReader->UpdateOutputInformation();
-  imgReader->Update(); //Needed to set m_EndIndex, m_StartIndex in otbDataNodeImageFunction
-
-  vdReProjFilter->SetInputImage(imgReader->GetOutput());
-  vdReProjFilter->SetInputVectorData(vdReader->GetOutput());
-  vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true);
-  vdReProjFilter->Update();
-
-  std::cout<< "vdReProjFilter->GetOutput()->Size(): "
-        << vdReProjFilter->GetOutput()->Size() << std::endl;
-
-  featureFunction->SetInputImage(imgReader->GetOutput());
-  featureFunction->SetRadius(0);
-
-  // Output
-  VectorDataType::Pointer outVD = VectorDataType::New();
-  // Retrieving root node
-  DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(document, root);
-  // Create the folder node
-  DataNodeType::Pointer folder = DataNodeType::New();
-  folder->SetNodeType(otb::FOLDER);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(folder, document);
-
-  TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature())
-         {
-          const DataNodeType::Pointer currentGeometry = itVector.Get();
-          FeatureOutputType currentResult;
-          currentResult = featureFunction->Evaluate(*(currentGeometry.GetPointer()));
-          currentGeometry->SetFieldAsDouble("RADIOM", (double)(currentResult[0]));
-          outVD->GetDataTree()->Add(currentGeometry, folder);
-         }
-    ++itVector;
-    }
-
-  vdWriter->SetInput(outVD);
-  vdWriter->SetFileName(outputVD);
-  vdWriter->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h
deleted file mode 100644
index 5a0d897384035224960895f0ce23a76dacc68d80..0000000000000000000000000000000000000000
--- a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbDBOverlapDataNodeFeatureFunction_h
-#define otbDBOverlapDataNodeFeatureFunction_h
-
-#include "otbDataNodeVectorDataFunction.h"
-
-#include "itkPreOrderTreeIterator.h"
-
-namespace otb
-{
-/** \class DBOverlapDataNodeFeatureFunction
-  * \brief
-  *
-  *
-  * \ingroup Functions
-  * \sa DataNodeVectorDataFunction
- *
- * \ingroup OTBVectorDataManipulation
-  */
-
-template <
-class TCoordRep = double,
-class TPrecision = double
->
-class ITK_EXPORT DBOverlapDataNodeFeatureFunction :
-    public DataNodeVectorDataFunction<std::vector<TPrecision>, TCoordRep, TPrecision>
-{
-public:
-  /** Standard class typedefs. */
-  typedef DBOverlapDataNodeFeatureFunction                    Self;
-  typedef DataNodeVectorDataFunction<std::vector<TPrecision>, TCoordRep, TPrecision>
-                                                              Superclass;
-  typedef itk::SmartPointer<Self>                             Pointer;
-  typedef itk::SmartPointer<const Self>                       ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(DBOverlapDataNodeFeatureFunction, DataNodeVectorDataFunction);
-
-  /** Some typedefs. */
-  typedef typename Superclass::DataNodeType           DataNodeType;
-  typedef typename DataNodeType::PointType            PointType;
-  typedef typename DataNodeType::LineType             LineType;
-  typedef typename LineType::VertexType               VertexType;
-  typedef typename DataNodeType::PolygonType          PolygonType;
-
-  typedef typename Superclass::VectorDataType         VectorDataType;
-  typedef typename VectorDataType::DataTreeType       DataTreeType;
-  typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType>
-                                                      TreeIteratorType;
-
-  typedef TCoordRep                                   CoordRepType;
-
-  typedef TPrecision                                  PrecisionType;
-
-  typedef std::vector<PrecisionType>                  OutputType;
-
-  OutputType Evaluate( const DataNodeType& node ) const override;
-
-  /** Set/Get methods */
-  itkGetConstMacro(DistanceThreshold, PrecisionType);
-  itkSetMacro(DistanceThreshold, PrecisionType);
-
-  /** Method to compute the distance of a point to a segment */
-  double ComputeEuclideanDistanceMetricToSegment(VertexType q1, VertexType q2, VertexType p) const;
-
-protected:
-  DBOverlapDataNodeFeatureFunction();
-  ~DBOverlapDataNodeFeatureFunction() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  DBOverlapDataNodeFeatureFunction(const Self&) = delete;
-  void operator=(const Self&) = delete;
-
-  /** Road / Building distance Threshold */
-  PrecisionType               m_DistanceThreshold;
-};
-
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbDBOverlapDataNodeFeatureFunction.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.hxx b/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.hxx
deleted file mode 100644
index 3ede4ecc7f096b033ae7ff40a85a0c14fc832c04..0000000000000000000000000000000000000000
--- a/Modules/Filtering/VectorDataManipulation/include/otbDBOverlapDataNodeFeatureFunction.hxx
+++ /dev/null
@@ -1,176 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbDBOverlapDataNodeFeatureFunction_hxx
-#define otbDBOverlapDataNodeFeatureFunction_hxx
-
-#include "otbDBOverlapDataNodeFeatureFunction.h"
-
-namespace otb
-{
-
-/**
- * Constructor
- */
-template <class TCoordRep, class TPrecision>
-DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision>
-::DBOverlapDataNodeFeatureFunction()
- :m_DistanceThreshold(50)//in physical coordinates
-{
-}
-
-/**
- * Standard "PrintSelf" method
- */
-template <class TCoordRep, class TPrecision>
-void
-DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision>
-::PrintSelf(
-  std::ostream& os,
-  itk::Indent indent) const
-{
-  Superclass::PrintSelf( os, indent );
-  os << indent << "Distance Threshold: " << m_DistanceThreshold << std::endl;
-}
-
-/**
- * Method to compute the distance of a point to a segment
- */
-template <class TCoordRep, class TPrecision>
-double
-DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision>
-::ComputeEuclideanDistanceMetricToSegment(VertexType q1, VertexType q2, VertexType p) const
-{
-  // Length of the segment
-  double l2 = q1.SquaredEuclideanDistanceTo(q2);
-
-  // Is the projection of p on the segment inside (0<u<1) or
-  // inside the segment bounds
-  double u = ((p[0] - q1[0]) *(q2[0] - q1[0] ) +
-    (p[1] - q1[1]) *(q2[1] - q1[1])) / l2;
-
-  if( u < 1e-10 ) u = 0.;
-  if( u -1. > 1e-10 ) u = 1.;
-  double x = q1[0] + u *(q2[0] - q1[0] );
-  double y = q1[1] + u *(q2[1] - q1[1] );
-  double dx = x - p[0];
-  double dy = y - p[1];
-
-  return std::sqrt(dx*dx + dy*dy);
- }
-
-template <class TCoordRep, class TPrecision>
-typename DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision>
-::OutputType
-DBOverlapDataNodeFeatureFunction<TCoordRep, TPrecision>
-::Evaluate( const DataNodeType& node ) const
-{
-  OutputType output;
-
-  //build the tmp DataTree containing polygon within the radius
-  typename VectorDataType::Pointer tmpDataTree = VectorDataType::New();
-  typename DataNodeType::Pointer root = tmpDataTree->GetDataTree()->GetRoot()->Get();
-  typename DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  tmpDataTree->GetDataTree()->Add(document, root);
-
-  TreeIteratorType itVector(this->GetInputVectorData()->GetDataTree());
-  itVector.GoToBegin();
-    while (!itVector.IsAtEnd())
-      {
-      if (itVector.Get()->IsPolygonFeature())
-        {
-        typename DataNodeType::Pointer currentGeometry = itVector.Get();
-        unsigned int i=0;
-        while (i<currentGeometry->GetPolygonExteriorRing()->GetVertexList()->Size())
-          {
-          unsigned int j=0;
-          while (j<node.GetLine()->GetVertexList()->Size()-1)
-            {
-            double dist;
-            dist = this->ComputeEuclideanDistanceMetricToSegment(node.GetLine()->GetVertexList()->GetElement(j),
-                                                     node.GetLine()->GetVertexList()->GetElement(j+1),
-                                                     currentGeometry->GetPolygonExteriorRing()->GetVertexList()->GetElement(i));
-            //std::cout << "dist: " << dist << std::endl;
-            //std::cout << "m_DistanceThreshold: " << m_DistanceThreshold << std::endl;
-            if (dist <= m_DistanceThreshold)
-              {
-              //Add the current polygon to the tmp DataTree
-              //jump to the next one
-              tmpDataTree->GetDataTree()->Add(currentGeometry, document);
-              j = node.GetLine()->GetVertexList()->Size();
-              i = currentGeometry->GetPolygonExteriorRing()->GetVertexList()->Size();
-              }
-            ++j;
-            }
-          ++i;
-          }
-        }
-      ++itVector;
-      }
-
-  /*
-  std::cout << this->GetInputVectorData()->GetDataTree()->Count() << std::endl;
-  std::cout << tmpDataTree->GetDataTree()->Count() << std::endl;
-  */
-  unsigned int crossAcc = 0;
-  unsigned int nbBuildings = 0;
-
-  TreeIteratorType it(tmpDataTree->GetDataTree());
-  it.GoToBegin();
-  while (!it.IsAtEnd())
-    {
-    if (it.Get()->IsPolygonFeature())
-      {
-      typename DataNodeType::Pointer currentGeometry = it.Get();
-      nbBuildings ++;
-      for (unsigned int i=0; i<node.GetLine()->GetVertexList()->Size()-1; ++i)
-        {
-
-        if(currentGeometry->GetPolygonExteriorRing()->NbCrossing(node.GetLine()->GetVertexList()->GetElement(i),
-                                                                 node.GetLine()->GetVertexList()->GetElement(i+1)))
-          {
-          crossAcc ++;
-          break;
-          }
-        }
-      }
-    ++it;
-    }
-
-  if(nbBuildings == 0)
-    {
-    output.push_back(static_cast<PrecisionType>(0.));
-    }
-  else
-    {
-    output.push_back(static_cast<PrecisionType>((double)(crossAcc)/(double)(nbBuildings)));
-    }
-
-  output.push_back(static_cast<PrecisionType>(crossAcc));
-  output.push_back(static_cast<PrecisionType>(nbBuildings));
-
-  return output;
-}
-
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h
deleted file mode 100644
index 303db1003b0aeae9e2b39c24a551d57bc2b3bb4c..0000000000000000000000000000000000000000
--- a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_h
-#define otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_h
-
-#include "otbDataNodeImageFunction.h"
-
-#include "otbBinarySpectralAngleFunctor.h"
-#include "otbPolyLineImageConstIterator.h"
-#include "itkLineConstIterator.h"
-#include "itkVariableLengthVector.h"
-
-namespace otb
-{
-/** \class RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction
-  * \brief Compute the spectral angle between the radiometry along
-  * a line and its neighborhood
-  *
-  * This function compares the radiometry along a datanode with the
-  * radiometry of the neighborhood.
-  *
-  * It computes the mean of a rectangular area around each line segment,
-  * and the mean of two rectangular areas on each side of the line segment.
-  * The descriptor is the spectral angle between the two values,
-  * scaled by \$f\pi\$f.
-  *
-  * The width of the area around a line segment can be specified with
-  * SetCenterRadius.
-  *
-  * The neighborhood area can be specified by two radius, using SetNeighborhoodBeginRadius
-  * and SetNeighborhoodEndRadius.
-  *
-  *
-  * \ingroup Functions
-  * \sa DataNodeImageFunction
-  * \sa NDVIDataNodeFeatureFunction
- *
- * \ingroup OTBVectorDataManipulation
-  */
-
-template <
-class TImage,
-class TCoordRep = double,
-class TPrecision = double
->
-class ITK_EXPORT RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction :
-    public DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision>
-{
-public:
-  /** Standard class typedefs. */
-  typedef RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction                Self;
-  typedef DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision>
-                                                              Superclass;
-  typedef itk::SmartPointer<Self>                             Pointer;
-  typedef itk::SmartPointer<const Self>                       ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction, DataNodeImageFunction);
-
-  /** Some typedefs. */
-  typedef typename Superclass::DataNodeType           DataNodeType;
-  typedef typename DataNodeType::LineType             LineType;
-  typedef typename LineType::Pointer                  LinePointer;
-  typedef typename LineType::ContinuousIndexType      ContinuousIndexType;
-  typedef typename LineType::VertexListConstIteratorType VertexListConstIteratorType;
-
-  typedef TImage                                      InputImageType;
-  typedef typename InputImageType::ConstPointer       InputImageConstPointer;
-  typedef typename InputImageType::PixelType          PixelType;
-  typedef typename InputImageType::InternalPixelType  ScalarRealType;
-  typedef typename InputImageType::IndexType          IndexType;
-  typedef typename InputImageType::IndexValueType     IndexValueType;
-
-  typedef TCoordRep                                   CoordRepType;
-
-  typedef TPrecision                                  PrecisionType;
-
-  typedef itk::VariableLengthVector<PrecisionType>    ReferencePixelType;
-
-  typedef PolyLineImageConstIterator<InputImageType, LineType> ImageLineIteratorType;
-  typedef itk::LineConstIterator<InputImageType>      LineIteratorType;
-
-  typedef Functor::BinarySpectralAngleFunctor<PixelType, ReferencePixelType, PrecisionType>
-                                                      SpectralAngleFunctorType;
-
-  typedef std::pair<IndexType, IndexType>             IndexPairType;
-  typedef std::vector<PrecisionType>                  OutputType;
-
-  /* Compute the descriptor value along this DataNode */
- OutputType Evaluate( const DataNodeType& node ) const override;
-
-  /* Get the radius used to define the area around a line segment.
-   * A radius of 0 means that the area is reduced to a line joining
-   * the two segments extremities. */
-  itkGetConstMacro(CenterRadius, unsigned int);
-
-  /* Set the radius used to define the area around a line segment.
-   * A radius of 0 means that the area is reduced to a line joining
-   * the two segments extremities. */
-  itkSetMacro(CenterRadius, unsigned int);
-
-  /* Get the radius used to define the start of the neighboring area.
-   * Typically this value must be greater than CenterRadius */
-  itkGetConstMacro(NeighborhoodBeginRadius, unsigned int);
-
-  /* Set the radius used to define the start of the neighboring area.
-   * Typically this value must be greater than CenterRadius */
-  itkSetMacro(NeighborhoodBeginRadius, unsigned int);
-
-  /* Get the radius used to define the end of the neighboring area.
-   * Typically this value must be greater than NeighborhoodBeginRadius */
-  itkGetConstMacro(NeighborhoodEndRadius, unsigned int);
-
-  /* Set the radius used to define the end of the neighboring area.
-   * Typically this value must be greater than NeighborhoodBeginRadius */
-  itkSetMacro(NeighborhoodEndRadius, unsigned int);
-
-protected:
-  RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction();
-  ~RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction(const Self&) = delete;
-  void operator=(const Self&) = delete;
-
-  /** Center radius */
-  unsigned int m_CenterRadius;
-
-  /** Neighborhood start radius */
-  unsigned int m_NeighborhoodBeginRadius;
-
-  /** Neighborhood end radius */
-  unsigned int m_NeighborhoodEndRadius;
-
-};
-
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.hxx b/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.hxx
deleted file mode 100644
index eadf8f167ae171fba94d11b0f94a362cdea0435e..0000000000000000000000000000000000000000
--- a/Modules/Filtering/VectorDataManipulation/include/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.hxx
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_hxx
-#define otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_hxx
-
-#include "otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h"
-
-namespace otb
-{
-
-/**
- * Constructor
- */
-template<class TImage, class TCoordRep, class TPrecision>
-RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction() :
-  m_CenterRadius(1), m_NeighborhoodBeginRadius(2), m_NeighborhoodEndRadius(3)
-{
-}
-
-/**
- * Standard "PrintSelf" method
- */
-template<class TImage, class TCoordRep, class TPrecision>
-void RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::PrintSelf(std::ostream& os,
-                                                                                    itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-template<class TImage, class TCoordRep, class TPrecision>
-typename RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::OutputType RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<
-    TImage, TCoordRep, TPrecision>::Evaluate(const DataNodeType& node) const
-{
-
-  // TODO faire avce un ikk
-  const typename ImageLineIteratorType::PathType* path;
-
-  switch (node.GetNodeType())
-    {
-    case FEATURE_POINT:
-      {
-      itkExceptionMacro(<< "This DataNode type is not handled yet");
-      break;
-      }
-    case FEATURE_LINE:
-      {
-      path = node.GetLine();
-      break;
-      }
-    case FEATURE_POLYGON:
-      {
-      path = node.GetPolygonExteriorRing();
-      break;
-      }
-    default:
-      {
-      itkExceptionMacro(<< "This DataNode type is not handle yet");
-      break;
-      }
-    }
-
-  std::vector<std::pair<IndexType, IndexType> > splitedLineIdNeigh;
-  std::vector<std::pair<IndexType, IndexType> > splitedLineIdCentral;
-
-  // Split line and polygon into segment (ie. line with two vertex
-  VertexListConstIteratorType it1 = path->GetVertexList()->Begin();
-  VertexListConstIteratorType it2 = path->GetVertexList()->Begin();
-  VertexListConstIteratorType itStop = path->GetVertexList()->End();
-
-  ++it2;
-  if (it2 == itStop)
-    {
-    itkExceptionMacro(<< "Invalid DataNode, must at least contain two points");
-    }
-
-  while (it1 != itStop && it2 != itStop)
-    {
-    IndexType id1, id2;
-    id1[0] = static_cast<int> (it1.Value()[0]);
-    id1[1] = static_cast<int> (it1.Value()[1]);
-    id2[0] = static_cast<int> (it2.Value()[0]);
-    id2[1] = static_cast<int> (it2.Value()[1]);
-
-    // Compute the direction of the current line
-    itk::Vector<double, 2> direction;
-    direction[0] = it2.Value()[0] - it1.Value()[0];
-    direction[1] = it2.Value()[1] - it1.Value()[1];
-    direction.Normalize();
-
-    // Compute the orthogonal direction of the current line
-    itk::Vector<double, 2> orthogonalDirection;
-    orthogonalDirection[0] = direction[1];
-    orthogonalDirection[1] = -direction[0];
-
-    splitedLineIdCentral.push_back(IndexPairType(id1, id2));
-    for (unsigned int j = 1; j <= m_CenterRadius; ++j)
-      {
-      IndexType shift11, shift12;
-      shift11[0] = id1[0] - j * orthogonalDirection[0];
-      shift11[1] = id1[1] - j * orthogonalDirection[1];
-      shift12[0] = id1[0] + j * orthogonalDirection[0];
-      shift12[1] = id1[1] + j * orthogonalDirection[1];
-      IndexType shift21, shift22;
-      shift21[0] = id2[0] - j * orthogonalDirection[0];
-      shift21[1] = id2[1] - j * orthogonalDirection[1];
-      shift22[0] = id2[0] + j * orthogonalDirection[0];
-      shift22[1] = id2[1] + j * orthogonalDirection[1];
-
-      splitedLineIdCentral.push_back(IndexPairType(shift11, shift21));
-      splitedLineIdCentral.push_back(IndexPairType(shift12, shift22));
-      }
-
-    for (unsigned int j = m_NeighborhoodBeginRadius; j <= m_NeighborhoodEndRadius; ++j)
-      {
-      IndexType shift11, shift12;
-      shift11[0] = id1[0] - j * orthogonalDirection[0];
-      shift11[1] = id1[1] - j * orthogonalDirection[1];
-      shift12[0] = id1[0] + j * orthogonalDirection[0];
-      shift12[1] = id1[1] + j * orthogonalDirection[1];
-      IndexType shift21, shift22;
-      shift21[0] = id2[0] - j * orthogonalDirection[0];
-      shift21[1] = id2[1] - j * orthogonalDirection[1];
-      shift22[0] = id2[0] + j * orthogonalDirection[0];
-      shift22[1] = id2[1] + j * orthogonalDirection[1];
-
-      splitedLineIdNeigh.push_back(IndexPairType(shift11, shift21));
-      splitedLineIdNeigh.push_back(IndexPairType(shift12, shift22));
-      }
-    ++it1;
-    ++it2;
-    }
-
-  // in FEATURE_POLYGON case, first point appears twice (first vertex and last vertew, thus we create a line of 1 point...)
-  if (node.GetNodeType() == FEATURE_POLYGON)
-    {
-    splitedLineIdCentral.pop_back();
-    splitedLineIdNeigh.pop_back();
-    splitedLineIdNeigh.pop_back();
-    }
-
-  double centralNbVisitedPixel = 0.;
-
-  PixelType centralRadiomAcc(this->GetInputImage()->GetNumberOfComponentsPerPixel());
-  centralRadiomAcc.Fill(0);
-
-  for (unsigned int i = 0; i < splitedLineIdCentral.size(); ++i)
-    {
-    LineIteratorType lineIt(this->GetInputImage(), splitedLineIdCentral[i].first, splitedLineIdCentral[i].second);
-    lineIt.GoToBegin();
-
-    while (!lineIt.IsAtEnd())
-      {
-      if (this->IsInsideBuffer(lineIt.GetIndex()))
-        {
-        centralRadiomAcc += this->GetInputImage()->GetPixel( lineIt.GetIndex() );
-        centralNbVisitedPixel += 1;
-        }
-      ++lineIt;
-      }
-    }
-
-  double neighNbVisitedPixel = 0.;
-
-  PixelType neighborRadiomAcc(this->GetInputImage()->GetNumberOfComponentsPerPixel());
-  neighborRadiomAcc.Fill(0);
-
-  for (unsigned int i = 0; i < splitedLineIdNeigh.size(); ++i)
-    {
-    LineIteratorType lineIt(this->GetInputImage(), splitedLineIdNeigh[i].first, splitedLineIdNeigh[i].second);
-    lineIt.GoToBegin();
-
-    while (!lineIt.IsAtEnd())
-      {
-      if (this->IsInsideBuffer(lineIt.GetIndex()))
-        {
-        neighborRadiomAcc += this->GetInputImage()->GetPixel( lineIt.GetIndex() );
-        neighNbVisitedPixel += 1;
-        }
-      ++lineIt;
-      }
-    }
-
-  OutputType output;
-  if (centralNbVisitedPixel > 0 && neighNbVisitedPixel > 0)
-    {
-    // Compute averaged radiometry in both areas
-    centralRadiomAcc  /= centralNbVisitedPixel;
-    neighborRadiomAcc /= neighNbVisitedPixel;
-
-    // Compute the spectral angle between the center area and the neighbor area
-    SpectralAngleFunctorType spectralAngleFunctor;
-    double angle = spectralAngleFunctor(neighborRadiomAcc, centralRadiomAcc);
-
-    // Make sure we are in [0, 1] interval
-    angle /= otb::CONST_PI;
-
-    output.push_back(static_cast<PrecisionType> (angle));
-    }
-  else
-    {
-    output.push_back(static_cast<PrecisionType> (0.));
-    }
-
-  // TODO: handle streaming, need to output the current state
-  return output;
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h b/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h
deleted file mode 100644
index 1bc3dce3fea38484b86e8629213bf652ef138aeb..0000000000000000000000000000000000000000
--- a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.h
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbSpectralAngleDataNodeFeatureFunction_h
-#define otbSpectralAngleDataNodeFeatureFunction_h
-
-#include "otbDataNodeImageFunction.h"
-
-#include "otbBinarySpectralAngleFunctor.h"
-#include "otbPolyLineImageConstIterator.h"
-#include "itkLineConstIterator.h"
-#include "itkVariableLengthVector.h"
-
-namespace otb
-{
-/** \class SpectralAngleDataNodeFeatureFunction
-  * \brief Compute a spectral angle based feature alongside a
-  * datanode.
-  *
-  * This function compute a spectral angle alongside a datanode.
-  * The feature is the mean spectral angle regarding a
-  * reference pixel alongside the tested datanode.
-  *
-  * The output has three elements:
-  * - #0: mean spectral angle of a neighborhood around the datanode, weighted to fit in [0, 1] interval
-  * - #1: accumulator of the spectral angle alongside the datanode
-  * - #2: number of visited pixel
-  *
-  * \ingroup Functions
-  * \sa DataNodeImageFunction
-  * \sa NDVIDataNodeFeatureFunction
- *
- * \ingroup OTBVectorDataManipulation
-  */
-
-template <
-class TImage,
-class TCoordRep = double,
-class TPrecision = double
->
-class ITK_EXPORT SpectralAngleDataNodeFeatureFunction :
-    public DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision>
-{
-public:
-  /** Standard class typedefs. */
-  typedef SpectralAngleDataNodeFeatureFunction                Self;
-  typedef DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision>
-                                                              Superclass;
-  typedef itk::SmartPointer<Self>                             Pointer;
-  typedef itk::SmartPointer<const Self>                       ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(SpectralAngleDataNodeFeatureFunction, DataNodeImageFunction);
-
-  /** Some typedefs. */
-  typedef typename Superclass::DataNodeType           DataNodeType;
-  typedef typename DataNodeType::LineType             LineType;
-  typedef typename LineType::Pointer                  LinePointer;
-  typedef typename LineType::ContinuousIndexType      ContinuousIndexType;
-  typedef typename LineType::VertexListConstIteratorType VertexListConstIteratorType;
-
-  typedef TImage                                      InputImageType;
-  typedef typename InputImageType::ConstPointer       InputImageConstPointer;
-  typedef typename InputImageType::PixelType          PixelType;
-  typedef typename InputImageType::InternalPixelType  ScalarRealType;
-  typedef typename InputImageType::IndexType          IndexType;
-  typedef typename InputImageType::IndexValueType     IndexValueType;
-
-  typedef TCoordRep                                   CoordRepType;
-
-  typedef TPrecision                                  PrecisionType;
-
-  typedef itk::VariableLengthVector<PrecisionType>    ReferencePixelType;
-
-  typedef PolyLineImageConstIterator<InputImageType, LineType> ImageLineIteratorType;
-  typedef itk::LineConstIterator<InputImageType>      LineIteratorType;
-
-  typedef Functor::BinarySpectralAngleFunctor<PixelType, ReferencePixelType, PrecisionType>
-                                                      SpectralAngleFunctorType;
-
-  typedef std::pair<IndexType, IndexType>             IndexPairType;
-  typedef std::vector<PrecisionType>                  OutputType;
-
-  OutputType Evaluate( const DataNodeType& node ) const override;
-
-  /** Set/Get methods */
-  itkGetConstMacro(RefPixel, PixelType);
-  itkSetMacro(RefPixel, PixelType);
-
-  itkGetConstMacro(Radius, unsigned int);
-  itkSetMacro(Radius, unsigned int);
-
-protected:
-  SpectralAngleDataNodeFeatureFunction();
-  ~SpectralAngleDataNodeFeatureFunction() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  SpectralAngleDataNodeFeatureFunction(const Self&) = delete;
-  void operator=(const Self&) = delete;
-
-  /** SpectralAngle Functor & ReferencePixel*/
-  ReferencePixelType          m_RefPixel;
-  SpectralAngleFunctorType    m_SpectralAngleFunctor;
-
-  /** Neighborhood radius */
-  unsigned int m_Radius;
-};
-
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbSpectralAngleDataNodeFeatureFunction.hxx"
-#endif
-
-#endif
diff --git a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.hxx b/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.hxx
deleted file mode 100644
index c2ed9e81e295505f4fbaad58afeeaa772f77770e..0000000000000000000000000000000000000000
--- a/Modules/Filtering/VectorDataManipulation/include/otbSpectralAngleDataNodeFeatureFunction.hxx
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbSpectralAngleDataNodeFeatureFunction_hxx
-#define otbSpectralAngleDataNodeFeatureFunction_hxx
-
-#include "otbSpectralAngleDataNodeFeatureFunction.h"
-
-namespace otb
-{
-
-/**
- * Constructor
- */
-template<class TImage, class TCoordRep, class TPrecision>
-SpectralAngleDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::SpectralAngleDataNodeFeatureFunction() :
-  m_Radius(2)
-{
-  //Example for QuickBird images (on a specific image)
-  m_RefPixel.SetSize(4);
-  m_RefPixel.SetElement(0, 252.284);
-  m_RefPixel.SetElement(1, 357.3);
-  m_RefPixel.SetElement(2, 232.644);
-  m_RefPixel.SetElement(3, 261.558);
-}
-
-/**
- * Standard "PrintSelf" method
- */
-template<class TImage, class TCoordRep, class TPrecision>
-void SpectralAngleDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::PrintSelf(std::ostream& os,
-                                                                                    itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "Reference Pixel: " << m_RefPixel << std::endl;
-}
-
-template<class TImage, class TCoordRep, class TPrecision>
-typename SpectralAngleDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>::OutputType SpectralAngleDataNodeFeatureFunction<
-    TImage, TCoordRep, TPrecision>::Evaluate(const DataNodeType& node) const
-{
-
-  // TODO faire avce un ikk
-  const typename ImageLineIteratorType::PathType* path;
-
-  switch (node.GetNodeType())
-    {
-    case FEATURE_POINT:
-      {
-      itkExceptionMacro(<< "This DataNode type is not handle yet");
-      break;
-      }
-    case FEATURE_LINE:
-      {
-      path = node.GetLine();
-      break;
-      }
-    case FEATURE_POLYGON:
-      {
-      path = node.GetPolygonExteriorRing();
-      break;
-      }
-    default:
-      {
-      itkExceptionMacro(<< "This DataNode type is not handle yet");
-      break;
-      }
-    }
-
-  std::vector<std::pair<IndexType, IndexType> > splitedLineIdNeigh;
-  std::vector<std::pair<IndexType, IndexType> > splitedLineIdCentral;
-
-  // Split line and polygon into segment (ie. line with two vertex
-  VertexListConstIteratorType it1 = path->GetVertexList()->Begin();
-  VertexListConstIteratorType it2 = path->GetVertexList()->Begin();
-  VertexListConstIteratorType itStop = path->GetVertexList()->End();
-
-  ++it2;
-  if (it2 == itStop)
-    {
-    itkExceptionMacro(<< "Invalid DataNode, must at least contain two points");
-    }
-
-  while (it1 != itStop && it2 != itStop)
-    {
-    IndexType id1, id2;
-    id1[0] = static_cast<int> (it1.Value()[0]);
-    id1[1] = static_cast<int> (it1.Value()[1]);
-    id2[0] = static_cast<int> (it2.Value()[0]);
-    id2[1] = static_cast<int> (it2.Value()[1]);
-
-    // Compute the direction of the current line
-    itk::Vector<double, 2> direction;
-    direction[0] = it2.Value()[0] - it1.Value()[0];
-    direction[1] = it2.Value()[1] - it1.Value()[1];
-    direction.Normalize();
-
-    // Compute the orthogonal direction of the current line
-    itk::Vector<double, 2> orthogonalDirection;
-    orthogonalDirection[0] = direction[1];
-    orthogonalDirection[1] = -direction[0];
-
-    splitedLineIdCentral.push_back(IndexPairType(id1, id2));
-
-    for (unsigned int j = 1; j <= m_Radius; ++j)
-      {
-      IndexType shift11, shift12;
-      shift11[0] = id1[0] - j * orthogonalDirection[0];
-      shift11[1] = id1[1] - j * orthogonalDirection[1];
-      shift12[0] = id1[0] + j * orthogonalDirection[0];
-      shift12[1] = id1[1] + j * orthogonalDirection[1];
-      IndexType shift21, shift22;
-      shift21[0] = id2[0] - j * orthogonalDirection[0];
-      shift21[1] = id2[1] - j * orthogonalDirection[1];
-      shift22[0] = id2[0] + j * orthogonalDirection[0];
-      shift22[1] = id2[1] + j * orthogonalDirection[1];
-
-      splitedLineIdCentral.push_back(IndexPairType(shift11, shift21));
-      splitedLineIdCentral.push_back(IndexPairType(shift12, shift22));
-      }
-
-    ++it1;
-    ++it2;
-    }
-
-  // in FEATURE_POLYGON case, first point appears twice (first vertex and last vertew, thus we create a line of 1 point...)
-  if (node.GetNodeType() == FEATURE_POLYGON)
-    {
-    splitedLineIdCentral.pop_back();
-    }
-
-  double centralAccSpectralAngle = 0.;
-  //double centralAccSpectralAngleSecondOrder = 0.;
-  double centralNbVisitedPixel = 0.;
-
-  for (unsigned int i = 0; i < splitedLineIdCentral.size(); ++i)
-    {
-    LineIteratorType lineIt(this->GetInputImage(), splitedLineIdCentral[i].first, splitedLineIdCentral[i].second);
-    lineIt.GoToBegin();
-
-    while (!lineIt.IsAtEnd())
-      {
-      if (this->IsInsideBuffer(lineIt.GetIndex()))
-        {
-        PixelType currPixel = this->GetInputImage()->GetPixel( lineIt.GetIndex() );
-        double angle = m_SpectralAngleFunctor(currPixel, this->GetRefPixel());
-        centralAccSpectralAngle += angle;
-        //centralAccSpectralAngleSecondOrder += angle * angle;
-        centralNbVisitedPixel += 1;
-        }
-      ++lineIt;
-      }
-    }
-
-  OutputType output;
-
-  double meanCentral = 0.;
-  //double stddevCentral = 0.;
-  if (centralNbVisitedPixel != 0.)
-    {
-    meanCentral = static_cast<double> (centralAccSpectralAngle) / centralNbVisitedPixel;
-    //stddevCentral = std::sqrt( centralAccSpectralAngleSecondOrder/centralNbVisitedPixel - meanCentral*meanCentral );
-    }
-
-  if (meanCentral == 0.)
-    {
-    output.push_back(static_cast<PrecisionType> (0.));
-    }
-  else
-    {
-    // Compute the descriptor here
-    // meanCentral is in [0, pi]
-    // We need a descriptor in [0 1]
-
-    double descriptor = meanCentral / otb::CONST_PI;
-    output.push_back(static_cast<PrecisionType>( descriptor ));
-    }
-
-  output.push_back(static_cast<PrecisionType> (centralAccSpectralAngle));
-  output.push_back(static_cast<PrecisionType> (centralNbVisitedPixel));
-
-  return output;
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Filtering/VectorDataManipulation/test/CMakeLists.txt b/Modules/Filtering/VectorDataManipulation/test/CMakeLists.txt
index 8513e931ac8918b27fe82f9d51d17cacbeb759a9..a4f17c2c5abfea6b32e5f7bc1bdd3270b66e4334 100644
--- a/Modules/Filtering/VectorDataManipulation/test/CMakeLists.txt
+++ b/Modules/Filtering/VectorDataManipulation/test/CMakeLists.txt
@@ -22,12 +22,10 @@ otb_module_test()
 
 set(OTBVectorDataManipulationTests
 otbVectorDataManipulationTestDriver.cxx
-otbDBOverlapDataNodeFeatureFunction.cxx
 otbVectorDataExtractROI.cxx
 otbPolygonCompacityFunctor.cxx
 otbVectorDataToRandomLineGenerator.cxx
 otbConcatenateVectorDataFilter.cxx
-otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.cxx
 )
 
 add_executable(otbVectorDataManipulationTestDriver ${OTBVectorDataManipulationTests})
@@ -36,18 +34,6 @@ otb_module_target_label(otbVectorDataManipulationTestDriver)
 
 # Tests Declaration
 
-otb_add_test(NAME bfTvDBOverlapDataNodeFeatureFunction COMMAND otbVectorDataManipulationTestDriver
-  --compare-ogr ${NOTOL}
-  ${BASELINE_FILES}/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp
-  ${TEMP}/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp
-  otbDBOverlapDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp
-  ${TEMP}/bfTvDBOverlapDataNodeFeatureFunctionOutput.shp
-  0
-  )
-
-
 otb_add_test(NAME coTvVectorDataExtractROI COMMAND otbVectorDataManipulationTestDriver
   --compare-ogr ${NOTOL}
   ${BASELINE_FILES}/coVectorDataExtractROIOutput.shp
@@ -84,12 +70,10 @@ otb_add_test(NAME bfTvVectorDataToRandomLineGenerator COMMAND otbVectorDataManip
   ${BASELINE_FILES}/bfTvVectorDataToRandomLineGeneratorOutput.shp
   ${TEMP}/bfTvVectorDataToRandomLineGeneratorOutput.shp
   otbVectorDataToRandomLineGenerator
-  ${INPUTDATA}/ObjectReco/Boats/maur_B010202_01Polygons.shp
+  ${INPUTDATA}/Capitole-Shadows.shp
   ${TEMP}/bfTvVectorDataToRandomLineGeneratorOutput.shp
   )
 
-
-
 otb_add_test(NAME bfTvConcatenateVectorDataFilter COMMAND otbVectorDataManipulationTestDriver
   --compare-ogr ${NOTOL}
   ${BASELINE_FILES}/otbConcatenateVectorDataFilter_Output.shp
@@ -99,24 +83,3 @@ otb_add_test(NAME bfTvConcatenateVectorDataFilter COMMAND otbVectorDataManipulat
   ${INPUTDATA}/waterways.shp
   ${TEMP}/otbConcatenateVectorDataFilter_Output.shp
   )
-
-otb_add_test(NAME bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_Polygon COMMAND otbVectorDataManipulationTestDriver
-  --compare-ogr ${EPSILON_3}
-  ${BASELINE_FILES}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp
-  ${TEMP}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp
-  otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/DEM/srtm_directory
-  ${TEMP}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Polygon.shp
-  0 )
-otb_add_test(NAME bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction_Line COMMAND otbVectorDataManipulationTestDriver
-  --compare-ogr ${EPSILON_9}
-  ${BASELINE_FILES}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp
-  ${TEMP}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp
-  otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/DEM/srtm_directory
-  ${TEMP}/bfTvRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunctionOutput_Line.shp
-  0 )
diff --git a/Modules/Filtering/VectorDataManipulation/test/otbDBOverlapDataNodeFeatureFunction.cxx b/Modules/Filtering/VectorDataManipulation/test/otbDBOverlapDataNodeFeatureFunction.cxx
deleted file mode 100644
index 7bc471de7647fdd08f38f284fcabda330f9a50bb..0000000000000000000000000000000000000000
--- a/Modules/Filtering/VectorDataManipulation/test/otbDBOverlapDataNodeFeatureFunction.cxx
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "otbDBOverlapDataNodeFeatureFunction.h"
-
-#include "otbVectorData.h"
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataFileWriter.h"
-
-
-int otbDBOverlapDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputVD  = argv[1];
-  const char * inputDB  = argv[2];
-  const char * outputVD = argv[3];
-  int DisplayWarnings   = atoi(argv[4]);
-
-  typedef double                                      CoordRepType;
-  typedef double                                      PrecisionType;
-  typedef otb::VectorData<CoordRepType, 2, PrecisionType>
-                                                      VectorDataType;
-  typedef VectorDataType::DataNodeType                DataNodeType;
-  typedef otb::VectorDataFileReader<VectorDataType>   VectorDataReaderType;
-  typedef otb::VectorDataFileWriter<VectorDataType>   VectorDataWriterType;
-  typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType>
-                                                      TreeIteratorType;
-
-  typedef otb::DBOverlapDataNodeFeatureFunction<CoordRepType, PrecisionType>
-                                                      DataNodeFunctionType;
-  typedef DataNodeFunctionType::OutputType
-                                                      FeatureOutputType;
-
-  VectorDataReaderType::Pointer   vdReader = VectorDataReaderType::New();
-  VectorDataReaderType::Pointer vdDBReader = VectorDataReaderType::New();
-  VectorDataWriterType::Pointer   vdWriter = VectorDataWriterType::New();
-  DataNodeFunctionType::Pointer   function = DataNodeFunctionType::New();
-
-  if (!DisplayWarnings)
-   {
-    vdReader->SetGlobalWarningDisplay(0);
-   }
-
-  vdReader->SetFileName(inputVD);
-  vdReader->Update();
-
-  vdDBReader->SetFileName(inputDB);
-  vdDBReader->Update();
-
-  function->SetInputVectorData(vdDBReader->GetOutput());
-  function->SetDistanceThreshold(0.003);
-
-  // Output
-  VectorDataType::Pointer outVD = VectorDataType::New();
-  // Retrieving root node
-  DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(document, root);
-  // Create the folder node
-  DataNodeType::Pointer folder = DataNodeType::New();
-  folder->SetNodeType(otb::FOLDER);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(folder, document);
-
-  TreeIteratorType itVector(vdReader->GetOutput()->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature())
-         {
-          const DataNodeType::Pointer currentGeometry = itVector.Get();
-          FeatureOutputType currentResult;
-          currentResult = function->Evaluate(*(currentGeometry.GetPointer()));
-          currentGeometry->SetFieldAsDouble("DBOVER", (double)(currentResult[0]));
-          outVD->GetDataTree()->Add(currentGeometry, folder);
-         }
-    ++itVector;
-    }
-
-  vdWriter->SetInput(outVD);
-  vdWriter->SetFileName(outputVD);
-  vdWriter->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/VectorDataManipulation/test/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.cxx b/Modules/Filtering/VectorDataManipulation/test/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.cxx
deleted file mode 100644
index a5481e05d3f0b64f74f0b2e2153722fa960ff722..0000000000000000000000000000000000000000
--- a/Modules/Filtering/VectorDataManipulation/test/otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.cxx
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction.h"
-
-#include "otbVectorImage.h"
-#include "otbImageFileReader.h"
-#include "otbVectorData.h"
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataIntoImageProjectionFilter.h"
-#include "otbVectorDataFileWriter.h"
-#include "itkPreOrderTreeIterator.h"
-
-
-int otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputVD  = argv[1];
-  const char * inputImg = argv[2];
-  const char * DEMDir   = argv[3];
-  const char * outputVD = argv[4];
-  int DisplayWarnings   = atoi(argv[5]);
-
-  typedef double                                      CoordRepType;
-  typedef double                                      PrecisionType;
-  typedef otb::VectorImage<PrecisionType>             ImageType;
-  typedef otb::ImageFileReader<ImageType>             ImageReaderType;
-  typedef otb::VectorData<CoordRepType, 2, PrecisionType>
-                                                      VectorDataType;
-  typedef VectorDataType::DataNodeType                DataNodeType;
-  typedef otb::VectorDataFileReader<VectorDataType>   VectorDataReaderType;
-  typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType>
-                                                      VectorDataReProjFilter;
-  typedef otb::VectorDataFileWriter<VectorDataType>   VectorDataWriterType;
-  typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType>
-                                                      TreeIteratorType;
-
-  typedef otb::RadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType>
-                                                      FeaturefunctionType;
-  typedef FeaturefunctionType::OutputType
-                                                      FeatureOutputType;
-
-  ImageReaderType::Pointer imgReader = ImageReaderType::New();
-  VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New();
-  VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New();
-  VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New();
-  FeaturefunctionType::Pointer featureFunction = FeaturefunctionType::New();
-
-  if (!DisplayWarnings)
-   {
-    imgReader->SetGlobalWarningDisplay(0);
-   }
-
-  otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDir);
-
-  vdReader->SetFileName(inputVD);
-  vdReader->Update();
-
-  imgReader->SetFileName(inputImg);
-  imgReader->UpdateOutputInformation();
-  imgReader->Update(); //Needed to set m_EndIndex, m_StartIndex in otbDataNodeImageFunction
-
-  vdReProjFilter->SetInputImage(imgReader->GetOutput());
-  vdReProjFilter->SetInputVectorData(vdReader->GetOutput());
-  vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true);
-  vdReProjFilter->Update();
-
-  std::cout<< "vdReProjFilter->GetOutput()->Size(): "
-        << vdReProjFilter->GetOutput()->Size() << std::endl;
-
-  featureFunction->SetInputImage(imgReader->GetOutput());
-
-  // Output
-  VectorDataType::Pointer outVD = VectorDataType::New();
-  // Retrieving root node
-  DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(document, root);
-  // Create the folder node
-  DataNodeType::Pointer folder = DataNodeType::New();
-  folder->SetNodeType(otb::FOLDER);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(folder, document);
-
-  TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature())
-         {
-          const DataNodeType::Pointer currentGeometry = itVector.Get();
-          FeatureOutputType currentResult;
-          currentResult = featureFunction->Evaluate(*(currentGeometry.GetPointer()));
-          currentGeometry->SetFieldAsDouble("RADIOM_HOM", (double)(currentResult[0]));
-          outVD->GetDataTree()->Add(currentGeometry, folder);
-         }
-    ++itVector;
-    }
-
-  vdWriter->SetInput(outVD);
-  vdWriter->SetFileName(outputVD);
-  vdWriter->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Filtering/VectorDataManipulation/test/otbVectorDataManipulationTestDriver.cxx b/Modules/Filtering/VectorDataManipulation/test/otbVectorDataManipulationTestDriver.cxx
index c4230b11556a036ec89fa39103beba40d12a5252..d09a9aaed3041af20589dc65f6f1a6903c3e4437 100644
--- a/Modules/Filtering/VectorDataManipulation/test/otbVectorDataManipulationTestDriver.cxx
+++ b/Modules/Filtering/VectorDataManipulation/test/otbVectorDataManipulationTestDriver.cxx
@@ -22,10 +22,8 @@
 
 void RegisterTests()
 {
-  REGISTER_TEST(otbDBOverlapDataNodeFeatureFunction);
   REGISTER_TEST(otbVectorDataExtractROI);
   REGISTER_TEST(otbPolygonCompacityFunctor);
   REGISTER_TEST(otbVectorDataToRandomLineGenerator);
   REGISTER_TEST(otbConcatenateVectorDataFilter);
-  REGISTER_TEST(otbRadiometryHomogenousWithNeighborhoodDataNodeFeatureFunction);
 }
diff --git a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h b/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h
deleted file mode 100644
index 224f16af2c1b9b5f91200dd65209a03e4b231501..0000000000000000000000000000000000000000
--- a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.h
+++ /dev/null
@@ -1,184 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbStandardDSCostFunction_h
-#define otbStandardDSCostFunction_h
-
-#include "itkSingleValuedCostFunction.h"
-
-#include "otbVectorDataToDSValidatedVectorDataFilter.h"
-#include <string>
-
-namespace otb
-{
-/** \class StandardDSCostFunction
-  * \brief Standard Cost Function used to estimate the fuzzy model parameters
-  * in the Dempster-Shafer framework
-  *
-  * This class has been developed to estimate, with the help of the Amoeba
-  * optimizer, the fuzzy model parameters to be used in the class
-  * otb::VectorDataToDSValidatedVectorDataFilter. The cost value compute the
-  * cost according to:
-  * - an enriched ground truth vector data (using VectorDataToRoadDescription)
-  * - an enriched negative sample VectorData or at least random samples
-  * - an hypothesis (the same as the considered DSValidationFilter)
-  *      (by default (NONDVI, ROADSA, NOBUIL))
-  * - a weight between 0 and 1 (0.5 by default) corresponding to the situation
-  *      policy regarding under detection/false detection (1 no under detection
-  *      0 no false detection)
-  * For now the cost function use the NONDVI Feature, ROADSA Feature and and
-  * the NOBUIL Feature.
-  * For each evolution of the VectorDataToDSValidatedVectorDataFilter,
-  * this cost function must be adapted.
-  *
-  * \ingroup CostFunction
-  * \sa VectorDataToDSValidatedVectorDataFilter
-  * \sa AmoebaOptimizer
- *
- * \ingroup OTBDempsterShafer
- */
-
-template <class TDSValidationFilter>
-class ITK_EXPORT StandardDSCostFunction :
-public itk::SingleValuedCostFunction
-{
-public:
-  /** Standard class typedefs. */
-  typedef StandardDSCostFunction                       Self;
-  typedef itk::SingleValuedCostFunction                Superclass;
-  typedef itk::SmartPointer<Self>                      Pointer;
-  typedef itk::SmartPointer<const Self>                ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(StandardDSCostFunction, itk::SingleValuedCostFunction);
-
-  typedef Superclass::MeasureType                      MeasureType;   //double
-  typedef Superclass::DerivativeType                   DerivativeType; //Array<double>
-  typedef Superclass::ParametersType                   ParametersType; //Array<double>
-
-  typedef TDSValidationFilter                          DSValidationFilterType;
-  typedef typename DSValidationFilterType::VectorDataType
-                                                       VectorDataType;
-  typedef typename DSValidationFilterType::TreeIteratorType
-                                                       TreeIteratorType;
-  typedef typename DSValidationFilterType::LabelSetType
-                                                       LabelSetType;
-
-  typedef FuzzyDescriptorsModelManager                 FuzzyDescriptorsModelManagerType;
-
-  typedef FuzzyDescriptorsModelManager::DescriptorListType
-                                                       DescriptorListType;
-  typedef FuzzyDescriptorsModelManager::DescriptorsModelType
-                                                       DescriptorsModelType;
-  typedef FuzzyDescriptorsModelManager::PairType       PairType;
-
-  typedef Parser                                       ParserType;
-
-  /** This method returns the value of the cost function corresponding
-    * to the specified parameters.    */
-  MeasureType GetValue( const ParametersType & parameters ) const override;
-
-  /** This method returns the derivative of the cost function corresponding
-    * to the specified parameters.   */
-  void GetDerivative( const ParametersType & parameters,
-                               DerivativeType & derivative ) const override;
-
-  unsigned int GetNumberOfParameters(void) const override;
-
-  itkSetMacro(Weight, double);
-  itkGetConstMacro(Weight, double);
-
-  itkSetMacro(CriterionFormula, std::string);
-  itkGetConstMacro(CriterionFormula, std::string);
-
-  void SetDescriptorList(DescriptorListType list)
-  {
-    m_DescriptorList = list;
-  }
-
-  DescriptorListType GetDescriptorList()
-  {
-    return m_DescriptorList;
-  }
-
-  itkSetObjectMacro(GTVectorData, VectorDataType);
-  itkGetConstObjectMacro(GTVectorData, VectorDataType);
-
-  itkSetObjectMacro(NSVectorData, VectorDataType);
-  itkGetConstObjectMacro(NSVectorData, VectorDataType);
-
-
-  LabelSetType GetBeliefHypothesis()
-  {
-    return m_BeliefHypothesis;
-  }
-
-  void SetBeliefHypothesis(LabelSetType hypothesis)
-  {
-    m_BeliefHypothesis = hypothesis;
-  }
-
-  LabelSetType GetPlausibilityHypothesis()
-  {
-    return m_PlausibilityHypothesis;
-  }
-
-  void SetPlausibilityHypothesis(LabelSetType hypothesis)
-  {
-    m_PlausibilityHypothesis = hypothesis;
-  }
-
-protected:
-  /** Constructor */
-  StandardDSCostFunction();
-  /** Destructor */
-  ~StandardDSCostFunction() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  StandardDSCostFunction(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-
-  typename VectorDataType::Pointer            m_GTVectorData; //Ground Truth
-  typename VectorDataType::Pointer            m_NSVectorData; //Negative Samples
-
-  typename ParserType::Pointer       m_Parser;
-  std::string                        m_CriterionFormula;
-
-  double                             m_Weight; //range ]0; 1[
-
-  LabelSetType                       m_BeliefHypothesis;
-  LabelSetType                       m_PlausibilityHypothesis;
-
-  DescriptorListType                 m_DescriptorList;
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbStandardDSCostFunction.hxx"
-#endif
-
-#endif
diff --git a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.hxx b/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.hxx
deleted file mode 100644
index 236c1e5e9ae83b087987a43347be174f80a4d5ac..0000000000000000000000000000000000000000
--- a/Modules/Learning/DempsterShafer/include/otbStandardDSCostFunction.hxx
+++ /dev/null
@@ -1,172 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbStandardDSCostFunction_hxx
-#define otbStandardDSCostFunction_hxx
-
-#include "otbStandardDSCostFunction.h"
-
-namespace otb
-{
-// Constructor
-template <class TDSValidationFilter>
-StandardDSCostFunction<TDSValidationFilter>
-::StandardDSCostFunction() :
-  m_CriterionFormula("((Belief + Plausibility)/2.)"),
-  m_Weight(0.5)
-{
- m_GTVectorData = VectorDataType::New();
- m_NSVectorData = VectorDataType::New();
- m_Parser =  ParserType::New();
-}
-
-template <class TDSValidationFilter>
-unsigned int
-StandardDSCostFunction<TDSValidationFilter>
-::GetNumberOfParameters() const
- {
-  return m_DescriptorList.size()*4;
- }
-
-template <class TDSValidationFilter>
-typename StandardDSCostFunction<TDSValidationFilter>
-::MeasureType
- StandardDSCostFunction<TDSValidationFilter>
-::GetValue(const ParametersType & parameters) const
- {
-  if (parameters.size() != m_DescriptorList.size()*4)
-    {
-    itkExceptionMacro(<< "Wrong model!" )
-    }
-
-  //Initialize parser
-  m_Parser->SetExpr(m_CriterionFormula);
-
-  DescriptorsModelType descModel;
-  for (unsigned int i = 0; i < m_DescriptorList.size(); ++i)
-    {
-    std::vector<double> tmp;
-    for (unsigned int j = 0; j < 4; ++j)
-      {
-      tmp.push_back(parameters[4*i+j]);
-      }
-    PairType pair( m_DescriptorList[i], tmp);
-    descModel.push_back(pair);
-    }
-
-  typename DSValidationFilterType::Pointer internalFunctionGT = DSValidationFilterType::New();
-  internalFunctionGT->SetCriterionFormula("1");
-  internalFunctionGT->SetInput(m_GTVectorData);
-  internalFunctionGT->SetBeliefHypothesis(m_BeliefHypothesis);
-  internalFunctionGT->SetPlausibilityHypothesis(m_PlausibilityHypothesis);
-  try
-    {
-    internalFunctionGT->SetDescriptorModels(descModel);
-    }
-  catch ( itk::ExceptionObject & )
-    {
-    return 1;
-    }
-  internalFunctionGT->Update();
-
-  typename DSValidationFilterType::Pointer internalFunctionNS = DSValidationFilterType::New();
-  internalFunctionNS->SetCriterionFormula("1");
-  internalFunctionNS->SetInput(m_NSVectorData);
-  internalFunctionNS->SetBeliefHypothesis(m_BeliefHypothesis);
-  internalFunctionNS->SetBeliefHypothesis(m_PlausibilityHypothesis);
-  try
-    {
-    internalFunctionNS->SetDescriptorModels(descModel);
-    }
-  catch (itk::ExceptionObject &)
-    {
-    return 1;
-    }
-  internalFunctionNS->Update();
-
-  double accGT = 0.0;
-  double accNS = 0.0;
-  double nGT = 0.0;
-  double nNS = 0.0;
-
-  TreeIteratorType itVectorGT(internalFunctionGT->GetOutput()->GetDataTree());
-  itVectorGT.GoToBegin();
-  while (!itVectorGT.IsAtEnd())
-    {
-    if (!itVectorGT.Get()->IsRoot() && !itVectorGT.Get()->IsDocument() && !itVectorGT.Get()->IsFolder())
-      {
-      double belief = itVectorGT.Get()->GetFieldAsDouble("Belief");
-      double plausibility = itVectorGT.Get()->GetFieldAsDouble("Plausi");
-
-      m_Parser->DefineVar("Belief", &belief);
-      m_Parser->DefineVar("Plausibility", &plausibility);
-
-      accGT += ((1 - m_Parser->Eval()) * (1 - m_Parser->Eval()));
-      nGT += 1.0;
-
-      m_Parser->ClearVar();
-      }
-    itVectorGT++;
-    }
-
-  TreeIteratorType itVectorNS(internalFunctionNS->GetOutput()->GetDataTree());
-  itVectorNS.GoToBegin();
-  while (!itVectorNS.IsAtEnd())
-    {
-    if (!itVectorNS.Get()->IsRoot() && !itVectorNS.Get()->IsDocument() && !itVectorNS.Get()->IsFolder())
-      {
-      double belief = itVectorNS.Get()->GetFieldAsDouble("Belief");
-      double plausibility = itVectorNS.Get()->GetFieldAsDouble("Plausi");
-
-      m_Parser->DefineVar("Belief", &belief);
-      m_Parser->DefineVar("Plausibility", &plausibility);
-
-      accNS += (m_Parser->Eval() * m_Parser->Eval());
-      nNS += 1.0;
-
-      m_Parser->ClearVar();
-      }
-    itVectorNS++;
-    }
-  return (m_Weight * accGT / nGT + (1 - m_Weight) * accNS / nNS);
-}
-
-template <class TDSValidationFilter>
-void
-StandardDSCostFunction<TDSValidationFilter>
-::GetDerivative(const ParametersType & itkNotUsed(parameters), DerivativeType & itkNotUsed(derivative)) const
- {
-  //Not necessary for Amoeba Optimizer
-  itkExceptionMacro(<< "Not Supposed to be used when using Amoeba Optimizer!")
- }
-
-// PrintSelf Method
-template <class TDSValidationFilter>
-void
-StandardDSCostFunction<TDSValidationFilter>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-
-}// end namespace otb
-
-#endif
diff --git a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h b/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h
deleted file mode 100644
index 43a3b9a6f953f658e9217d9a39f6d23a1482acc2..0000000000000000000000000000000000000000
--- a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.h
+++ /dev/null
@@ -1,204 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbVectorDataToDSValidatedVectorDataFilter_h
-#define otbVectorDataToDSValidatedVectorDataFilter_h
-
-#include "otbMassOfBelief.h"
-
-#include "otbVectorDataToVectorDataFilter.h"
-
-#include "itkPreOrderTreeIterator.h"
-#include "otbVectorData.h"
-#include "otbFuzzyDescriptorsModelManager.h"
-
-#include "otbFuzzyVariable.h"
-#include "otbJointMassOfBeliefFilter.h"
-#include "otbParser.h"
-#include <string>
-
-namespace otb
-{
-/** \class VectorDataToDSValidatedVectorDataFilter
-  * \brief VectorData filter validating data nodes using
-  * Dempster-Shafer theory.
-  *
-  * This filter takes as input a vector data containing
-  * features score and validate (or not) each data node
-  * according to these features score, a fuzzy model corresponding
-  * to each feature and a criterion according to the Dempster-Shafer
-  * theory. By default the filter is (for now) parametrized to process
-  * VectorDatas providing by the VectorDataToRoadDescriptionFilter.
-  * The hypothesis must be set using the SetHypothesis method.
-  * The convention is for each feature Fe, a mass of Belief is defined
-  * with two variables named Fe and Fe_. Thus, an hypothesis must declared:
-  * VectorDataToVectorDataFilter::LabelSetType hyp;
-  * hyp.insert("Fe(i)");
-  * hyp.insert("Fe(j)_");
-  * hyp.insert("Fe(k)_");
-  *
-  * Fe(i), Fe(j) and Fe(k) being descriptors.
-  *
-  * The criterion can be set through SetCriterionFormula() as a
-  * string referring to "Belief" and "Plausibility" from the
-  * Dempster-Shafer theory. By default the criterion is:
-  * "((Belief + Plausibility)/2) >= 0.5"
-  *
-  * The considered features will be the intersection between
-  * the features embedded in this filter and the features embedded
-  * in the input vector data. For now, the filter uses "NONDVI" and
-  * "ROADSA" features.
-  *
-  *
-  * \ingroup VectorDataFilter
-  * \sa VectorDataToRoadDescriptionFilter
-  * \sa VectorDataToBuildingDescriptionFilter
- *
- * \ingroup OTBDempsterShafer
- */
-
-template <class TVectorData, class TPrecision=float>
-class ITK_EXPORT VectorDataToDSValidatedVectorDataFilter :
-public otb::VectorDataToVectorDataFilter<TVectorData, TVectorData>
-{
-public:
-  /** Standard class typedefs. */
-  typedef VectorDataToDSValidatedVectorDataFilter      Self;
-  typedef VectorDataToVectorDataFilter<TVectorData,
-    TVectorData>                                       Superclass;
-  typedef itk::SmartPointer<Self>                      Pointer;
-  typedef itk::SmartPointer<const Self>                ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(VectorDataToDSValidatedVectorDataFilter, VectorDataToVectorDataFilter);
-
-  /** Some typedefs. */
-  typedef TVectorData                               VectorDataType;
-  typedef typename VectorDataType::Pointer          VectorDataPointer;
-  typedef typename VectorDataType::DataNodeType     DataNodeType;
-  typedef itk::PreOrderTreeIterator<typename VectorDataType::DataTreeType>
-                                                    TreeIteratorType;
-
-  typedef TPrecision                                PrecisionType;
-  typedef MassOfBelief<std::string, PrecisionType>
-                                                    MassOfBeliefFunctionType;
-  typedef typename MassOfBeliefFunctionType::LabelSetType
-                                                    LabelSetType;
-  typedef JointMassOfBeliefFilter<MassOfBeliefFunctionType>
-                                                    JointMassOfBeliefFilterType;
-  typedef Parser                                    ParserType;
-
-  typedef itk::DataObject::Pointer DataObjectPointer;
-  typedef itk::DataObject          DataObject;
-
-
-  typedef FuzzyVariable<std::string, PrecisionType>           FuzzyVarType;
-
-  typedef FuzzyDescriptorsModelManager::PairType              PairType;
-  typedef FuzzyDescriptorsModelManager::DescriptorsModelType  DescriptorModelsType;
-
-  /** Descriptor model accessors. */
-  virtual void AddDescriptor(const std::string& key, std::vector<double> model);
-  virtual void ClearDescriptors();
-
-  void SetDescriptorModels( DescriptorModelsType model );
-  DescriptorModelsType GetDescriptorModels()
-  {
-    return m_DescriptorModels;
-  }
-
-  /** Parameter accessors. */
-  itkGetConstMacro(CriterionFormula, std::string);
-  itkSetMacro(CriterionFormula, std::string);
-
-  itkGetMacro(CriterionThreshold, double);
-  itkSetMacro(CriterionThreshold, double);
-
-  LabelSetType GetBeliefHypothesis()
-  {
-    return m_BeliefHypothesis;
-  }
-
-  void SetBeliefHypothesis(LabelSetType hypothesis)
-  {
-    m_BeliefHypothesis = hypothesis;
-  }
-
-  LabelSetType GetPlausibilityHypothesis()
-  {
-    return m_PlausibilityHypothesis;
-  }
-
-  void SetPlausibilityHypothesis(LabelSetType hypothesis)
-  {
-    m_PlausibilityHypothesis = hypothesis;
-  }
-
-  unsigned int GetNumberOfParameters()
-  {
-    return (m_DescriptorModels.size() * 4);
-  }
-
-
-protected:
-  /** Triggers the Computation */
-  void GenerateData(void) override;
-  /** Constructor */
-  VectorDataToDSValidatedVectorDataFilter();
-  /** Destructor */
-  ~VectorDataToDSValidatedVectorDataFilter() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-  std::string GetNextID()
-    {
-      std::ostringstream oss;
-      oss << m_CurrentID++;
-      return oss.str();
-    }
-
-private:
-  VectorDataToDSValidatedVectorDataFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  // Descriptor bench
-  DescriptorModelsType                            m_DescriptorModels;
-  std::vector< typename FuzzyVarType::Pointer >   m_FuzzyVars;
-  LabelSetType                                    m_Universe,
-                                                  m_BeliefHypothesis,
-                                                  m_PlausibilityHypothesis;
-  double                                          m_Bel, m_Plau;
-  typename ParserType::Pointer                    m_Parser;
-
-  std::string                                     m_CriterionFormula;
-  double                                          m_CriterionThreshold;
-  unsigned int                                    m_CurrentID;
-};
-
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbVectorDataToDSValidatedVectorDataFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.hxx b/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.hxx
deleted file mode 100644
index 8e07927bb6fd9106cce86ea182c59e9da92d690c..0000000000000000000000000000000000000000
--- a/Modules/Learning/DempsterShafer/include/otbVectorDataToDSValidatedVectorDataFilter.hxx
+++ /dev/null
@@ -1,228 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbVectorDataToDSValidatedVectorDataFilter_hxx
-#define otbVectorDataToDSValidatedVectorDataFilter_hxx
-
-#include "otbVectorDataToDSValidatedVectorDataFilter.h"
-#include <iostream>
-
-namespace otb
-{
-
-// Constructor
-template <class TVectorData, class TPrecision>
-  VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
-::VectorDataToDSValidatedVectorDataFilter() :
-  m_Bel(0.0),
-  m_Plau(0.0),
-  m_CriterionFormula("((Belief + Plausibility)/2.)"),
-  m_CriterionThreshold(0.5),
-  m_CurrentID(0)
-{
-  this->SetNumberOfRequiredInputs(1);
-
-  m_Parser =  ParserType::New();
-}
-
-
-template <class TVectorData, class TPrecision>
-void
-VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
-::AddDescriptor(const std::string& key, std::vector<double>  model)
-{
-  bool alreadyExist = false;
-
-  if (model.size() != 4)
-    {
-     itkExceptionMacro(<< "Wrong model! Size(=" << model.size() << ") > 4" )
-    }
-  else if (model[0]<0 || model[1]<model[0] || model[2]<model[1] || model[2]>1)
-    {
-     itkExceptionMacro(<< "Wrong model! Values have to be 0<=v1<=v2<=v3<=1" )
-    }
-  else if (model[3]<.75 || model[3]>1.0)
-    {
-      itkExceptionMacro(<< "Wrong model! Values have to be 0.75<=v4<=1" )
-    }
-  else
-    {
-    for (unsigned int i=0; i<m_DescriptorModels.size(); ++i)
-      {
-      if (m_DescriptorModels[i].first.compare(key) == 0)
-        {
-        for (unsigned int j=0; j<4; ++j)
-          {
-           m_DescriptorModels[i].second.at(j) = model[j];
-          }
-        alreadyExist = true;
-        }
-      }
-    if (!alreadyExist)
-      {
-      m_DescriptorModels.push_back(std::pair<std::string, std::vector<double> >(key, model));
-      }
-    }
-
-  this->Modified();
-}
-
-
-template <class TVectorData, class TPrecision>
-void
-VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
-::ClearDescriptors()
-{
-  m_DescriptorModels.clear();
-}
-
-template <class TVectorData, class TPrecision>
-void
-VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
-::SetDescriptorModels(DescriptorModelsType model)
-{
-  for (unsigned int i=0; i<model.size(); ++i)
-    {
-     this->AddDescriptor(model[i].first, model[i].second);
-    }
-}
-
-
-template <class TVectorData, class TPrecision>
-void
-VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
-::GenerateData()
-{
-  //Initialize Dempster Shafer tools
-  if( m_DescriptorModels.size() == 0 )
-    {
-    itkExceptionMacro(<< "No defined Descriptor. Please add a descriptor model.");
-    }
-
-  for (unsigned int i=0; i<m_DescriptorModels.size(); ++i)
-    {
-    typename FuzzyVarType::Pointer fuz = FuzzyVarType::New();
-    std::string fuzName, fuzName_;
-    fuzName  = m_DescriptorModels[i].first;
-    fuzName_ = m_DescriptorModels[i].first + "_";
-
-    fuz->SetMembership(fuzName,
-                       0.0,
-                       0.0,
-                       m_DescriptorModels[i].second[0],
-                       m_DescriptorModels[i].second[1],
-                       0.0,
-                       m_DescriptorModels[i].second[3]);
-    fuz->SetMembership(fuzName_,
-                       m_DescriptorModels[i].second[1],
-                       m_DescriptorModels[i].second[2],
-                       1.0,
-                       1.0,
-                       0.0,
-                       m_DescriptorModels[i].second[3]);
-
-    m_FuzzyVars.push_back(fuz);
-
-    m_Universe.insert(fuzName);
-    m_Universe.insert(fuzName_);
-    }
-
-  //Initialize parser
-  m_Parser->SetExpr(m_CriterionFormula);
-  m_Parser->DefineVar("Belief", &m_Bel);
-  m_Parser->DefineVar("Plausibility", &m_Plau);
-
-  // Output
-  this->GetOutput(0)->SetMetaDataDictionary(this->GetInput()->GetMetaDataDictionary());
-  // Retrieving root node
-  typename DataNodeType::Pointer root = this->GetOutput(0)->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  typename DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  // Adding the layer to the data tree
-  this->GetOutput(0)->GetDataTree()->Add(document, root);
-  // Create the folder node
-  typename DataNodeType::Pointer folder = DataNodeType::New();
-  folder->SetNodeType(otb::FOLDER);
-  // Adding the layer to the data tree
-  this->GetOutput(0)->GetDataTree()->Add(folder, document);
-  this->GetOutput(0)->SetProjectionRef(this->GetInput()->GetProjectionRef());
-
-  TreeIteratorType itVector(this->GetInput()->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (!itVector.Get()->IsRoot() && !itVector.Get()->IsDocument() && !itVector.Get()->IsFolder())
-      {
-      typename DataNodeType::Pointer currentGeometry = itVector.Get();
-      typename JointMassOfBeliefFilterType::Pointer jointMassFilter = JointMassOfBeliefFilterType::New();
-
-      for (unsigned int i=0; i<m_DescriptorModels.size(); ++i)
-        {
-        if (currentGeometry->HasField(m_DescriptorModels[i].first))
-          {
-          LabelSetType H, H_;
-          std::string fuzName, fuzName_;
-          fuzName  = m_DescriptorModels[i].first;
-          fuzName_ = m_DescriptorModels[i].first + "_";
-
-          typename MassOfBeliefFunctionType::Pointer mass = MassOfBeliefFunctionType::New();
-          mass->InitializePowerSetMasses(m_Universe);
-
-          H.insert(fuzName);
-          H_.insert(fuzName_);
-
-          mass->SetMass(H, m_FuzzyVars[i]->GetMembership(fuzName, currentGeometry->GetFieldAsDouble(fuzName)));
-          mass->SetMass(H_, m_FuzzyVars[i]->GetMembership(fuzName_, currentGeometry->GetFieldAsDouble(fuzName)));
-
-          mass->EstimateUncertainty();
-
-          jointMassFilter->PushBackInput(mass);
-          }
-        }
-      jointMassFilter->Update();
-      m_Bel  = jointMassFilter->GetOutput()->GetBelief(m_BeliefHypothesis);
-      m_Plau = jointMassFilter->GetOutput()->GetPlausibility(m_PlausibilityHypothesis);
-
-     if (m_Parser->Eval() >= m_CriterionThreshold)
-        {
-        currentGeometry->SetNodeId(this->GetNextID());
-        currentGeometry->SetFieldAsDouble("Belief", m_Bel);
-        currentGeometry->SetFieldAsDouble("Plausi", m_Plau);
-        this->GetOutput(0)->GetDataTree()->Add(currentGeometry, folder);
-        }
-      }
-    ++itVector;
-    }
-}
-
-
-// PrintSelf Method
-template <class TVectorData, class TPrecision>
-void
-VectorDataToDSValidatedVectorDataFilter<TVectorData, TPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Learning/DempsterShafer/test/CMakeLists.txt b/Modules/Learning/DempsterShafer/test/CMakeLists.txt
index d999a90fa0638dc4c981451209009bb73d925a46..9ebe35857fe75dfddf2560633365b8cfe8145a65 100644
--- a/Modules/Learning/DempsterShafer/test/CMakeLists.txt
+++ b/Modules/Learning/DempsterShafer/test/CMakeLists.txt
@@ -24,7 +24,6 @@ set(OTBDempsterShaferTests
 otbDempsterShaferTestDriver.cxx
 otbMassOfBeliefDSApplied.cxx
 otbConfusionMatrixToMassOfBeliefTest.cxx
-otbVectorDataToDSValidatedVectorDataFilter.cxx
 otbDempsterShaferFusionTests.cxx
 otbDSFusionOfClassifiersImageFilterTest.cxx
 otbJointMassOfBeliefFilter.cxx
@@ -85,16 +84,6 @@ otb_add_test(NAME fzTvConfusionMatrixToMassOfBeliefTestRecall COMMAND otbDempste
   otbConfusionMatrixToMassOfBeliefTest
   RECALL)
 
-otb_add_test(NAME fzTvVectorDataToDSValidatedVectorDataFilter COMMAND otbDempsterShaferTestDriver
-  --compare-ogr ${EPSILON_9}
-  ${BASELINE_FILES}/fzTvDSValidatedRoadVectorDataOutput.shp
-  ${TEMP}/fzTvDSValidatedRoadVectorDataOutput.shp
-  otbVectorDataToDSValidatedVectorDataFilter
-  ${TEMP}/fzTvVectorDataToRoadDescriptionFilterOutput.shp
-  ${TEMP}/fzTvDSValidatedRoadVectorDataOutput.shp
-  )
-set_property(TEST fzTvVectorDataToDSValidatedVectorDataFilter PROPERTY DEPENDS fzTvVectorDataToRoadDescriptionFilter)
-
 otb_add_test(NAME fzDSFusionTestConfMatFileVCMTestPrecision COMMAND otbDempsterShaferTestDriver
   otbDempsterShaferFusionConfMatFileTest
   ${INPUTDATA}/Classification/QB_1_ortho_C1_V.csv
diff --git a/Modules/Learning/DempsterShafer/test/otbDempsterShaferTestDriver.cxx b/Modules/Learning/DempsterShafer/test/otbDempsterShaferTestDriver.cxx
index c38750c9cbd2443e8282a74b0005689c78455836..d8b30b333994660ead3a090f59519756a05a8330 100644
--- a/Modules/Learning/DempsterShafer/test/otbDempsterShaferTestDriver.cxx
+++ b/Modules/Learning/DempsterShafer/test/otbDempsterShaferTestDriver.cxx
@@ -24,7 +24,6 @@ void RegisterTests()
 {
   REGISTER_TEST(otbMassOfBeliefDSApplied);
   REGISTER_TEST(otbConfusionMatrixToMassOfBeliefTest);
-  REGISTER_TEST(otbVectorDataToDSValidatedVectorDataFilter);
   REGISTER_TEST(otbDempsterShaferFusionOptRecConfMatTest);
   REGISTER_TEST(otbDempsterShaferFusionOptRecTest);
   REGISTER_TEST(otbDempsterShaferFusionOptTest);
diff --git a/Modules/Learning/DempsterShafer/test/otbVectorDataToDSValidatedVectorDataFilter.cxx b/Modules/Learning/DempsterShafer/test/otbVectorDataToDSValidatedVectorDataFilter.cxx
deleted file mode 100644
index d237ea5d2f5de3a453a862dac05964355ea6d0c8..0000000000000000000000000000000000000000
--- a/Modules/Learning/DempsterShafer/test/otbVectorDataToDSValidatedVectorDataFilter.cxx
+++ /dev/null
@@ -1,93 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "otbVectorDataToDSValidatedVectorDataFilter.h"
-
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataFileWriter.h"
-
-
-int otbVectorDataToDSValidatedVectorDataFilter(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputVD  = argv[1];
-  const char * outputVD = argv[2];
-
-  typedef float                           PrecisionType;
-  typedef otb::VectorData<PrecisionType>  VectorDataType;
-  typedef otb::VectorDataFileReader<VectorDataType>
-                                          VectorDataReaderType;
-  typedef otb::VectorDataFileWriter<VectorDataType>
-                                          VectorDataWriterType;
-
-  typedef otb::VectorDataToDSValidatedVectorDataFilter<VectorDataType, PrecisionType>
-                                          VectorDataValidationFilterType;
-  typedef VectorDataValidationFilterType::LabelSetType
-                                          LabelSetType;
-  typedef otb::FuzzyDescriptorsModelManager
-                                          FuzzyManagerType;
-  VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New();
-  VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New();
-
-  VectorDataValidationFilterType::Pointer filter =
-    VectorDataValidationFilterType::New();
-
-  vdReader->SetFileName(inputVD);
-  vdReader->Update();
-
-  filter->SetInput(vdReader->GetOutput());
-  //filter->GetDescriptorModels();
-  FuzzyManagerType::Print(filter->GetDescriptorModels());
-  LabelSetType plau, bel;
-  plau.insert("NONDVI");
-  plau.insert("ROADSA");
-  plau.insert("NOBUIL");
-  filter->SetPlausibilityHypothesis(plau);
-  bel.insert("ROADSA");
-  bel.insert("NONDVI");
-  bel.insert("NOBUIL");
-  filter->SetBeliefHypothesis(bel);
-
-  std::vector<double> stdModel;
-  stdModel.push_back(0.25);
-  stdModel.push_back(0.50);
-  stdModel.push_back(0.75);
-  stdModel.push_back(0.90);
-  filter->AddDescriptor("NONDVI", stdModel);
-  filter->AddDescriptor("ROADSA", stdModel);
-  filter->AddDescriptor("NOBUIL", stdModel);
-
-  FuzzyManagerType::Print(filter->GetDescriptorModels());
-
-  vdWriter->SetFileName(outputVD);
-  vdWriter->SetInput(filter->GetOutput());
-  vdWriter->Update();
-
-  std::cout << "Input VectorData Size : "
-            << vdReader->GetOutput()->Size() << std::endl
-            << "CriterionFormula : "
-            << filter->GetCriterionFormula() << std::endl
-            << "Output VecttorData Size : "
-            << filter->GetOutput()->Size()
-            << std::endl;
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Learning/Unsupervised/include/otbSharkKMeansMachineLearningModel.h b/Modules/Learning/Unsupervised/include/otbSharkKMeansMachineLearningModel.h
index 77e8691cf6eb6298639156171113bec261d0e6de..69574043779cf5b6144a34f5b6e446721047ec2e 100644
--- a/Modules/Learning/Unsupervised/include/otbSharkKMeansMachineLearningModel.h
+++ b/Modules/Learning/Unsupervised/include/otbSharkKMeansMachineLearningModel.h
@@ -48,6 +48,7 @@
 #include "shark/Models/Clustering/Centroids.h"
 #include "shark/Models/Clustering/ClusteringModel.h"
 #include "shark/Algorithms/KMeans.h"
+#include "shark/Models/Normalizer.h"
 
 #if defined(__GNUC__) || defined(__clang__)
 #pragma GCC diagnostic pop
@@ -124,9 +125,14 @@ public:
   /** Set the number of class for the kMeans algorithm.*/
   itkSetMacro( K, unsigned );
 
-  /** If true, normalized input data sample list */
-  itkGetMacro( Normalized, bool );
-  itkSetMacro( Normalized, bool );
+  /** Initialize the centroids for the kmeans algorithm */
+  void SetCentroidsFromData(const shark::Data<shark::RealVector>& data)
+  {
+    m_Centroids.setCentroids(data);
+    this->Modified();
+  }
+
+  void ExportCentroids(const std::string& filename);
 
 protected:
   /** Constructor */
@@ -142,9 +148,6 @@ protected:
   virtual void DoPredictBatch(const InputListSampleType *, const unsigned int &startIndex, const unsigned int &size,
                               TargetListSampleType *, ConfidenceListSampleType * = nullptr, ProbaListSampleType * = nullptr) const override;
 
-  template<typename DataType>
-  DataType NormalizeData(const DataType &data) const;
-
   /** PrintSelf method */
   void PrintSelf(std::ostream &os, itk::Indent indent) const override;
 
@@ -153,16 +156,13 @@ private:
   void operator=(const Self &) = delete;
 
   // Parameters set by the user
-  bool m_Normalized;
   unsigned int m_K;
   unsigned int m_MaximumNumberOfIterations;
   bool m_CanRead;
 
-
   /** Centroids results form kMeans */
   shark::Centroids m_Centroids;
 
-
   /** shark Model could be SoftClusteringModel or HardClusteringModel */
   boost::shared_ptr<ClusteringModelType> m_ClusteringModel;
 
diff --git a/Modules/Learning/Unsupervised/include/otbSharkKMeansMachineLearningModel.hxx b/Modules/Learning/Unsupervised/include/otbSharkKMeansMachineLearningModel.hxx
index 3838d38aaa5e56bd4f69531711a7d6e1f45cc880..6554c67d318439e7f3d2f1560f9aa1eda5661957 100644
--- a/Modules/Learning/Unsupervised/include/otbSharkKMeansMachineLearningModel.hxx
+++ b/Modules/Learning/Unsupervised/include/otbSharkKMeansMachineLearningModel.hxx
@@ -35,11 +35,10 @@
 
 #include "otb_shark.h"
 #include "otbSharkUtils.h"
-#include "shark/Algorithms/Trainers/NormalizeComponentsUnitVariance.h" //normalize
 #include "shark/Algorithms/KMeans.h" //k-means algorithm
 #include "shark/Models/Clustering/HardClusteringModel.h"
 #include "shark/Models/Clustering/SoftClusteringModel.h"
-#include "shark/Algorithms/Trainers/NormalizeComponentsUnitVariance.h"
+#include <shark/Data/Csv.h> //load the csv file
 
 #if defined(__GNUC__) || defined(__clang__)
 #pragma GCC diagnostic pop
@@ -52,7 +51,7 @@ namespace otb
 template<class TInputValue, class TOutputValue>
 SharkKMeansMachineLearningModel<TInputValue, TOutputValue>
 ::SharkKMeansMachineLearningModel() :
-        m_Normalized( false ), m_K(2), m_MaximumNumberOfIterations( 10 )
+        m_K(2), m_MaximumNumberOfIterations( 10 )
 {
   // Default set HardClusteringModel
   this->m_ConfidenceIndex = true;
@@ -77,27 +76,11 @@ SharkKMeansMachineLearningModel<TInputValue, TOutputValue>
   otb::Shark::ListSampleToSharkVector( this->GetInputListSample(), vector_data );
   shark::Data<shark::RealVector> data = shark::createDataFromRange( vector_data );
 
-  // Normalized input value if necessary
-  if( m_Normalized )
-    data = NormalizeData( data );
-
   // Use a Hard Clustering Model for classification
   shark::kMeans( data, m_K, m_Centroids, m_MaximumNumberOfIterations );
   m_ClusteringModel = boost::make_shared<ClusteringModelType>( &m_Centroids );
 }
 
-template<class TInputValue, class TOutputValue>
-template<typename DataType>
-DataType
-SharkKMeansMachineLearningModel<TInputValue, TOutputValue>
-::NormalizeData(const DataType &data) const
-{
-  shark::Normalizer<> normalizer;
-  shark::NormalizeComponentsUnitVariance<> normalizingTrainer( true );//zero mean
-  normalizingTrainer.train( normalizer, data );
-  return normalizer( data );
-}
-
 template<class TInputValue, class TOutputValue>
 typename SharkKMeansMachineLearningModel<TInputValue, TOutputValue>
 ::TargetSampleType
@@ -258,6 +241,14 @@ SharkKMeansMachineLearningModel<TInputValue, TOutputValue>
   return true;
 }
 
+template<class TInputValue, class TOutputValue>
+void
+SharkKMeansMachineLearningModel<TInputValue, TOutputValue>
+::ExportCentroids(const std::string & filename)
+{
+  shark::exportCSV(m_Centroids.centroids(), filename, ' ');
+}
+
 template<class TInputValue, class TOutputValue>
 void
 SharkKMeansMachineLearningModel<TInputValue, TOutputValue>
diff --git a/Modules/OBIA/RCC8/CMakeLists.txt b/Modules/OBIA/RCC8/CMakeLists.txt
deleted file mode 100644
index 6fca751fa59c10469a9a3699bad9ee2b893dcd8b..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-project(OTBRCC8)
-
-set(OTBRCC8_LIBRARIES OTBRCC8)
-otb_module_impl()
diff --git a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h
deleted file mode 100644
index 9169b4ecd88b7b116268d4e70297078ddd320348..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageListToRCC8GraphFilter_h
-#define otbImageListToRCC8GraphFilter_h
-
-#include "otbRCC8GraphSource.h"
-#include "otbImageList.h"
-
-namespace otb
-{
-/** \class ImageListToRCC8GraphFilter
- * \brief Base class for filters taking an images list as input to
- * produce a RCC8 graph.
- *
- * \ingroup OTBRCC8
- */
-template <class TInputImage, class TOutputGraph>
-class ITK_EXPORT ImageListToRCC8GraphFilter
-  : public RCC8GraphSource<TOutputGraph>
-{
-public:
-  /** Standard typedefs */
-  typedef ImageListToRCC8GraphFilter    Self;
-  typedef RCC8GraphSource<TOutputGraph> Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Type macro */
-  itkNewMacro(Self);
-  /** Creation through object factory macro */
-  itkTypeMacro(ImageListToRCC8GraphFilter, RCC8GraphSource);
-  /** Template input parameters typedefs */
-  typedef          TInputImage                      InputImageType;
-  typedef typename InputImageType::ConstPointer     InputImagePointer;
-  typedef typename InputImageType::RegionType       InputImageRegionType;
-  typedef typename InputImageType::PixelType        InputImagePixelType;
-  typedef typename InputImageType::SizeType         SizeType;
-  typedef typename InputImageType::ValueType        ValueType;
-  typedef ImageList<InputImageType>                 InputImageListType;
-  typedef typename InputImageListType::Pointer      InputImageListPointerType;
-  typedef typename InputImageListType::ConstPointer InputImageListConstPointer;
-  /** Template output parameters typedefs */
-  typedef TOutputGraph                                OutputGraphType;
-  typedef typename Superclass::OutputGraphPointerType OutputGraphPointerType;
-  typedef typename OutputGraphType::VertexType        VertexType;
-  typedef typename VertexType::Pointer                VertexPointerType;
-  typedef typename OutputGraphType::RCC8ValueType     RCC8ValueType;
-  /** InputImage dimension constant */
-  itkStaticConstMacro(InputImageDimension, unsigned int, TInputImage::ImageDimension);
-  /** Overriding the SetInput() and GetInput() methods */
-  using Superclass::SetInput;
-  virtual void SetInput(const InputImageListType * imageList);
-  virtual InputImageListType * GetInput(void);
-
-protected:
-  /** Constructor */
-  ImageListToRCC8GraphFilter();
-  /** Destructor */
-  ~ImageListToRCC8GraphFilter() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  ImageListToRCC8GraphFilter(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbImageListToRCC8GraphFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.hxx b/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.hxx
deleted file mode 100644
index cab322360e9c030331788328f1e7069c0dd3c63d..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbImageListToRCC8GraphFilter.hxx
+++ /dev/null
@@ -1,79 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageListToRCC8GraphFilter_hxx
-#define otbImageListToRCC8GraphFilter_hxx
-
-#include "otbImageListToRCC8GraphFilter.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputImage, class TOutputGraph>
-ImageListToRCC8GraphFilter<TInputImage, TOutputGraph>
-::ImageListToRCC8GraphFilter()
-{
-  this->SetNumberOfRequiredInputs(1);
-}
-/**
- * Input Connection
- * \param image The input image.
- */
-template <class TInputImage, class TOutputGraph>
-void
-ImageListToRCC8GraphFilter<TInputImage, TOutputGraph>
-::SetInput(const InputImageListType *imageList)
-{
-  // A single input image
-  this->itk::ProcessObject::SetNthInput(0, const_cast<InputImageListType*>(imageList));
-}
-/**
- * Input image retrieval
- * \return The input image.
- */
-template <class TInputImage, class TOutputGraph>
-typename ImageListToRCC8GraphFilter<TInputImage, TOutputGraph>::InputImageListType *
-ImageListToRCC8GraphFilter<TInputImage, TOutputGraph>
-::GetInput(void)
-{
-  // If there is no input
-  if (this->GetNumberOfInputs() < 1)
-    {
-    // exit
-    return nullptr;
-    }
-  // else return the first input
-  return static_cast<InputImageListType *>
-           (this->itk::ProcessObject::GetInput(0));
-}
-/**
- * PrintSelf Method
- */
-template <class TInputImage, class TOutputGraph>
-void
-ImageListToRCC8GraphFilter<TInputImage, TOutputGraph>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h
deleted file mode 100644
index 5c198e6720935e7699397a4132035b1b1a65f40f..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.h
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageMultiSegmentationToRCC8GraphFilter_h
-#define otbImageMultiSegmentationToRCC8GraphFilter_h
-
-#include "otbImageListToRCC8GraphFilter.h"
-
-namespace otb
-{
-/**
- * \class ImageMultiSegmentationToRCC8GraphFilter
- * \brief This class takes a list of labelled segmentation images
- * and build the RCC8 graph of the set of regions it represents.
- *
- * \ingroup OTBRCC8
- */
-template <class TInputImage, class TOutputGraph>
-class ITK_EXPORT ImageMultiSegmentationToRCC8GraphFilter
-  : public ImageListToRCC8GraphFilter<TInputImage, TOutputGraph>
-{
-public:
-  /** Standard class typedefs. */
-  typedef ImageMultiSegmentationToRCC8GraphFilter               Self;
-  typedef ImageListToRCC8GraphFilter<TInputImage, TOutputGraph> Superclass;
-  typedef itk::SmartPointer<Self>                               Pointer;
-  typedef itk::SmartPointer<const Self>                         ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(ImageMultiSegmentationToRCC8GraphFilter, ImageListToRCC8GraphFilter);
-  /** Input related typedefs */
-  typedef TInputImage                                InputImageType;
-  typedef typename InputImageType::PixelType         PixelType;
-  typedef typename InputImageType::Pointer           InputImagePointerType;
-  typedef typename Superclass::InputImageListType    InputImageListType;
-  typedef typename InputImageListType::Pointer       InputImageListPointerType;
-  typedef typename InputImageListType::ConstIterator ConstListIteratorType;
-  /** Output related typedefs */
-  typedef TOutputGraph                                   OutputGraphType;
-  typedef typename OutputGraphType::Pointer              OutputGraphPointerType;
-  typedef typename OutputGraphType::VertexType           VertexType;
-  typedef typename VertexType::Pointer                   VertexPointerType;
-  typedef typename VertexType::PathType                  PathType;
-  typedef typename OutputGraphType::VertexDescriptorType VertexDescriptorType;
-  /** Knowledge enum typedef */
-  typedef typename OutputGraphType::RCC8ValueType      RCC8ValueType;
-  typedef enum {NO_INFO, LEVEL_1, LEVEL_3, FULL}       KnowledgeValueType;
-  typedef std::pair<KnowledgeValueType, RCC8ValueType> KnowledgeStateType;
-  /** Toogle optimisation flag */
-  itkBooleanMacro(Optimisation);
-  itkSetMacro(Optimisation, bool);
-
-  /**
-   * Get the number of occurrences of the given value
-   * \return The value.
-   */
-  unsigned int GetRelationsCount(RCC8ValueType val);
-
-  /**
-   * Get number of relations
-   * \return The number of relations.
-   */
-  unsigned int GetNumberOfRelations(void);
-
-protected:
-  /** Constructor */
-  ImageMultiSegmentationToRCC8GraphFilter();
-  /** Destructor */
-  ~ImageMultiSegmentationToRCC8GraphFilter() override;
-  /** Main computation method */
-  void GenerateData() override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /**
-   * Get the composition knowledge.
-   * \param r1 First RCC8 relation value,
-   * \param r2 Second RCC8 relation value,
-   * \return The knowledge associated with the composition.
-   */
-  KnowledgeStateType GetKnowledge(RCC8ValueType r1, RCC8ValueType r2);
-
-private:
-  /** Optimisation flag */
-  bool         m_Optimisation;
-  unsigned int m_Accumulator[8];
-
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbImageMultiSegmentationToRCC8GraphFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.hxx b/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.hxx
deleted file mode 100644
index 8b9906bc6b92547e7bf10d9696597b9ea6f8f296..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbImageMultiSegmentationToRCC8GraphFilter.hxx
+++ /dev/null
@@ -1,315 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageMultiSegmentationToRCC8GraphFilter_hxx
-#define otbImageMultiSegmentationToRCC8GraphFilter_hxx
-
-#include "otbImageMultiSegmentationToRCC8GraphFilter.h"
-#include "itkMinimumMaximumImageCalculator.h"
-#include "otbPolygonToPolygonRCC8Calculator.h"
-#include "otbRCC8VertexIterator.h"
-#include "otbRCC8InEdgeIterator.h"
-#include "otbRCC8OutEdgeIterator.h"
-#include "itkProgressReporter.h"
-#include "otbImageToEdgePathFilter.h"
-#include "otbSimplifyPathListFilter.h"
-
-namespace otb
-{
-/**
- * Constructor.
- */
-template <class TInputImage, class TOutputGraph>
-ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph>
-::ImageMultiSegmentationToRCC8GraphFilter()
-{
-  m_Optimisation = false;
-}
-/**
- * Destructor.
- */
-template <class TInputImage, class TOutputGraph>
-ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph>
-::~ImageMultiSegmentationToRCC8GraphFilter()
-{}
-
-template <class TInputImage, class TOutputGraph>
-unsigned int
-ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph>
-::GetRelationsCount(RCC8ValueType val)
-{
-  return m_Accumulator[val];
-}
-
-template <class TInputImage, class TOutputGraph>
-unsigned int
-ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph>
-::GetNumberOfRelations()
-{
-  unsigned int result = 0;
-  for (unsigned int i = 0; i < 8; ++i)
-    {
-    result += m_Accumulator[i];
-
-    }
-  return result;
-}
-template <class TInputImage, class TOutputGraph>
-typename ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph>
-::KnowledgeStateType
-ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph>
-::GetKnowledge(RCC8ValueType r1, RCC8ValueType r2)
-{
-  m_Accumulator[0] = 0;
-  m_Accumulator[1] = 0;
-  m_Accumulator[2] = 0;
-  m_Accumulator[3] = 0;
-  m_Accumulator[4] = 0;
-  m_Accumulator[5] = 0;
-  m_Accumulator[6] = 0;
-  m_Accumulator[7] = 0;
-
-  // otbMsgDebugMacro(<<"RCC8GraphFilter: entering GetKnowledge method.");
-  // This is the RCC8 composition table
-  const int knowledge[8][8]
-    =
-    {
-    /**         DC  EC  PO TPP TPPi NTPP i  EQ */
-    /** DC */ {-3, -2, -2, -2,  0, -2,  0,  0},
-    /** EC  */ {-1, -3, -2, -3, -1, -3,  0,  1},
-    /** PO  */ {-1, -1, -3, -3, -1, -3, -1,  2},
-    /** TPP */ { 0, -1, -2, -3, -3,  5, -1,  3},
-    /** TPPi*/ {-1, -1, -1, -3, -1, -3,  6,  4},
-    /** NTPP*/ { 0,  0, -2,  5, -2,  5, -3,  5},
-    /** NTPPi*/ {-1, -1, -1, -1,  6, -3,  6,  6},
-    /** EQ  */ { 0,  1,  2,  3,  4,  5,  6,  7}
-    };
-
-  int value = knowledge[r1][r2];
-  // Each negative case correspond to a level of knowledge
-  if (value >= 0)
-    {
-    // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method: FULL");
-    return KnowledgeStateType(FULL, static_cast<RCC8ValueType>(value));
-    }
-  else if (value == -1)
-    {
-    // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method: LEVEL_1");
-    return KnowledgeStateType(LEVEL_1, OTB_RCC8_DC);
-    }
-  else if (value == -2)
-    {
-    // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method.LEVEL_3");
-    return KnowledgeStateType(LEVEL_3, OTB_RCC8_DC);
-    }
-  else
-    {
-    // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method.NO_INFO");
-    return KnowledgeStateType(NO_INFO, OTB_RCC8_DC);
-    }
-}
-/**
- * Main computation method.
- */
-template <class TInputImage, class TOutputGraph>
-void
-ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph>
-::GenerateData()
-{
-  // Input image list pointer
-  InputImageListPointerType segList = this->GetInput();
-
-  // Output graph pointer
-  OutputGraphPointerType graph = this->GetOutput();
-
-  // invert value vector
-  RCC8ValueType invert[8] = {OTB_RCC8_DC, OTB_RCC8_EC, OTB_RCC8_PO, OTB_RCC8_TPPI,
-                             OTB_RCC8_TPP, OTB_RCC8_NTPPI, OTB_RCC8_NTPP, OTB_RCC8_EQ};
-
-  // Some typedefs
-  typedef otb::ImageToEdgePathFilter<InputImageType, PathType> EdgeExtractionFilterType;
-  typedef otb::SimplifyPathListFilter<PathType>                SimplifyPathFilterType;
-  typedef typename SimplifyPathFilterType::InputListType       PathListType;
-
-  typedef itk::MinimumMaximumImageCalculator<InputImageType> MinMaxCalculatorType;
-  typedef PolygonToPolygonRCC8Calculator<PathType>           RCC8CalculatorType;
-  typedef RCC8VertexIterator<OutputGraphType>                VertexIteratorType;
-  typedef RCC8InEdgeIterator<OutputGraphType>                InEdgeIteratorType;
-
-
-  // Vector of label
-  std::vector<PixelType> maxLabelVector;
-
-  // Vertex indexes
-  unsigned int vertexIndex = 0;
-  unsigned int segmentationImageIndex = 0;
-  unsigned int nbVertices = 0;
-
-  // For each segmentation image
-  for (ConstListIteratorType it = segList->Begin(); it != segList->End(); ++it)
-    {
-    // Compute the maximum label
-    typename MinMaxCalculatorType::Pointer minMax = MinMaxCalculatorType::New();
-    minMax->SetImage(it.Get());
-    minMax->ComputeMaximum();
-    maxLabelVector.push_back(minMax->GetMaximum());
-    otbMsgDebugMacro(<< "Number of objects in image " << segmentationImageIndex << ": "
-                     << minMax->GetMaximum());
-
-    // then for each region of the images
-    for (PixelType label = 1; label <= maxLabelVector.back(); ++label)
-      {
-      typename PathListType::Pointer             region = PathListType::New();
-      typename EdgeExtractionFilterType::Pointer extraction = EdgeExtractionFilterType::New();
-      extraction->SetInput(it.Get());
-      extraction->SetForegroundValue(label);
-      extraction->Update();
-      region->PushBack(extraction->GetOutput());
-      typename SimplifyPathFilterType::Pointer simplifier = SimplifyPathFilterType::New();
-      simplifier->SetInput(region);
-      simplifier->GetFunctor().SetTolerance(0.1);
-      simplifier->Update();
-
-      // Create a new vertex
-      VertexPointerType vertex = VertexType::New();
-      // Set its properties
-      vertex->SetPath(simplifier->GetOutput()->GetNthElement(0));
-      vertex->SetSegmentationLevel(segmentationImageIndex / 2);
-      vertex->SetSegmentationType(segmentationImageIndex % 2);
-      // Put it in the graph
-      graph->SetVertex(vertexIndex, vertex);
-      ++vertexIndex;
-      ++nbVertices;
-      }
-    ++segmentationImageIndex;
-    }
-
-  itk::ProgressReporter progress(this, 0, nbVertices*nbVertices);
-
-  VertexIteratorType vIt1(graph);
-  VertexIteratorType vIt2(graph);
-
-  // For each couple of vertices
-  for (vIt1.GoToBegin(); !vIt1.IsAtEnd(); ++vIt1)
-    {
-    for (vIt2.GoToBegin(); !vIt2.IsAtEnd(); ++vIt2)
-      {
-      //We do not examine each couple because of the RCC8 symmetry
-      if (vIt1.GetIndex() < vIt2.GetIndex())
-        {
-
-        // Compute the RCC8 relation
-        typename RCC8CalculatorType::Pointer calc = RCC8CalculatorType::New();
-        calc->SetPolygon1(vIt1.Get()->GetPath());
-        calc->SetPolygon2(vIt2.Get()->GetPath());
-        RCC8ValueType value = OTB_RCC8_DC;
-
-        // if the optimisations are activated
-        if (m_Optimisation)
-          {
-          //  otbMsgDebugMacro(<<"RCC8GraphFilter: Entering optimisation loop");
-          InEdgeIteratorType inIt1(vIt1.GetIndex(), graph);
-          InEdgeIteratorType inIt2(vIt2.GetIndex(), graph);
-          // otbMsgDebugMacro(<<"Optimisation loop: iterators initialised");
-          VertexDescriptorType betweenIndex;
-          KnowledgeStateType know(NO_INFO, OTB_RCC8_DC);
-          inIt1.GoToBegin();
-
-          // Iterate through the edges going to the first vertex
-          while (!inIt1.IsAtEnd() && (know.first != FULL))
-            {
-            betweenIndex = inIt1.GetSourceIndex();
-            inIt2.GoToBegin();
-            bool edgeFound = false;
-            while (!inIt2.IsAtEnd() && (know.first != FULL))
-              {
-              // try to find an intermediate vertex between the two ones which
-              // we vant to compute the relationship
-              if (inIt2.GetSourceIndex() == betweenIndex)
-                {
-                // if an intermediate vertex is found
-                edgeFound = true;
-                // otbMsgDebugMacro(<<"Optimisation loop: found an intermediary vertex:" <<betweenIndex);
-                // See if it brings some info on the RCCC8 value
-                know = GetKnowledge(invert[inIt1.GetValue()], inIt2.GetValue());
-                calc->SetLevel1APrioriKnowledge(know.first == LEVEL_1);
-                calc->SetLevel3APrioriKnowledge(know.first == LEVEL_3);
-                //  otbMsgDebugMacro(<<"Optimisation loop: knowledge: "<<know.first<<","<<know.second);
-                }
-              ++inIt2;
-              }
-            // If no intermediate was found
-            if (!edgeFound)
-              {
-              //  otbMsgDebugMacro(<<"Optimisation loop: found an intermediary vertex:" <<betweenIndex);
-              // Try using a DC relationship
-              know = GetKnowledge(invert[inIt1.GetValue()], OTB_RCC8_DC);
-              calc->SetLevel1APrioriKnowledge(know.first == LEVEL_1);
-              calc->SetLevel3APrioriKnowledge(know.first == LEVEL_3);
-              // otbMsgDebugMacro(<<"Optimisation loop: knowledge: "<<know.first<<","<<know.second);
-              }
-            ++inIt1;
-            }
-          // If the search has fully determined the RCC8
-          if (know.first == FULL)
-            {
-            // Get the value
-            value = know.second;
-            }
-          else
-            {
-            // Else trigger the computation
-            // (which will take the optimisation phase info into account)
-            calc->Compute();
-            value = calc->GetValue();
-            }
-          // otbMsgDebugMacro(<<"RCC8GraphFilter: Leaving optimisation loop");
-          }
-        // If the optimisations are not activated
-        else
-          {
-          calc->Compute();
-          value = calc->GetValue();
-          }
-        m_Accumulator[value] += 1;
-        m_Accumulator[invert[value]] += 1;
-        // If the vertices are connected
-        if (value > OTB_RCC8_DC)
-          {
-          // Add the edge to the graph.
-          otbMsgDevMacro(<< "Adding edge: " << vIt1.GetIndex() << " -> " << vIt2.GetIndex() << ": " << value);
-          graph->AddEdge(vIt1.GetIndex(), vIt2.GetIndex(), value);
-          }
-        }
-      progress.CompletedPixel();
-      progress.CompletedPixel();
-      }
-    }
-}
-
-template <class TInputImage, class TOutputGraph>
-void
-ImageMultiSegmentationToRCC8GraphFilter<TInputImage, TOutputGraph>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // end namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h b/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h
deleted file mode 100644
index d2a4fb922a0b22534b1ee8e10775c094be823ddf..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.h
+++ /dev/null
@@ -1,203 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageToImageRCC8Calculator_h
-#define otbImageToImageRCC8Calculator_h
-
-#include "itkImageToImageFilter.h"
-#include "itkObjectFactory.h"
-#include "otbRCC8Value.h"
-#include "otbImage.h"
-
-namespace otb
-{
-/**
- * \class ImageToImageRCC8Calculator
- * \brief This class compute the RCC8 relation between the regions from two segmentation images.
- *
- * The RCC8 system comes from qualitative spatial reasoning.
- * It is a set of pairwise disjoint exhaustive relation between two closed region of space.
- * There are 8 possible relations :
- * DC: Disconnected
- * EC: Externaly connected
- * PO: Partial overlap
- * TPP: Tangential proper part
- * NTPP: Non tangential proper part
- * TPPI: Tangential proper part inverse
- * NTPPI: Non tangential proper part inverse
- * EQ: Equivalence
- *
- * The goal of this class is to determine which of these 8 relations link the two inputs regions represented
- * by the segmentation images. Since this class will further be used iteratively on a possibly large set
- * of region, it is optimised : the decision is managed by a decision tree, and the input data size is reduced
- * to the smallest set needed to determine the relation.
- *
- * \ingroup OTBRCC8
- */
-template <class TInputImage>
-class ITK_EXPORT ImageToImageRCC8Calculator : public itk::ImageToImageFilter<TInputImage, TInputImage>
-{
-public:
-  /** Standard class typedefs. */
-  typedef ImageToImageRCC8Calculator                        Self;
-  typedef itk::ImageToImageFilter<TInputImage, TInputImage> Superclass;
-  typedef itk::SmartPointer<Self>                           Pointer;
-  typedef itk::SmartPointer<const Self>                     ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(ImageToImageRCC8Calculator, ImageToImageFilter);
-  /** Types definitions for the input image. */
-  typedef TInputImage                      ImageType;
-  typedef typename ImageType::Pointer      ImagePointerType;
-  typedef typename ImageType::ConstPointer ImageConstPointerType;
-  typedef typename ImageType::PixelType    PixelType;
-  typedef typename ImageType::IndexType    IndexType;
-  typedef typename ImageType::RegionType   RegionType;
-  /** Internal bool image type */
-  typedef bool                                                 BoolPixelType;
-  typedef otb::Image<BoolPixelType, ImageType::ImageDimension> BoolImageType;
-  typedef typename BoolImageType::Pointer                      BoolImagePointerType;
-
-  /** RCC8 values type */
-  typedef RCC8Value RCC8ValueType;
-  /**
-   * Get the RCC8 relation.
-   * \return The RCC8 relation value.
-   */
-  RCC8ValueType GetValue(void);
-  /**
-   * Set the first input image.
-   * \param image
-   */
-  void SetInput1(ImageType * image);
-  /**
-   * Set the second input image.
-   * \param image
-   */
-  void SetInput2(ImageType * image);
-  /**
-   * Get the first input image.
-   * \return The first input image.
-   */
-  ImageType * GetInput1(void);
-  /**
-   * Get the second input image.
-   * \return The second input image.
-   */
-  ImageType * GetInput2(void);
-  /** Set/Get the inside value of the region of image 1*/
-  itkSetMacro(InsideValue1, PixelType);
-  itkGetMacro(InsideValue1, PixelType);
-  /** Set/Get the inside value of the region of image 2*/
-  itkSetMacro(InsideValue2, PixelType);
-  itkGetMacro(InsideValue2, PixelType);
-  /** Set external knowledge to help the decision process */
-  itkSetMacro(Level1APrioriKnowledge, bool);
-  itkSetMacro(Level3APrioriKnowledge, bool);
-  itkGetMacro(Level1APrioriKnowledge, bool);
-  itkGetMacro(Level3APrioriKnowledge, bool);
-protected:
-  /** Constructor */
-  ImageToImageRCC8Calculator();
-  /** Destructor */
-  ~ImageToImageRCC8Calculator() override {}
-  /**
-   * Compute the minimal image region required.
-   * \return The minimal region required.
-   */
-  RegionType ComputeMinimalRegion(void);
-  /**
-   * Compute the intersection between regions edges.
-   * \return true if the intersection is not empty.
-   */
-  bool ComputeEdgeEdgeBool(void);
-  /**
-   * Compute the intersection between exterior of region1 and
-   * interior of region2.
-   * \return true if the intersection is not empty.
-   */
-  bool ComputeExterInterBool(void);
-  /**
-   * Compute the intersection between interior of region1 and
-   * exterior of region2.
-   * \return true if the intersection is not empty.
-   */
-  bool ComputeInterExterBool(void);
-  /**
-   * Compute the intersection between regions interiors.
-   * \return true if the intersection is not empty.
-   */
-  bool ComputeInterInterBool(void);
-  /**
-   * Compute the relation value from the input booleans. Please note
-   * that the actual computed value is set to the m_Value parameters, and has
-   * nothing to do with the returned boolean, which indicates if the determination
-   * process was successful.
-   * \param edgeEdgeBool True if edge-edge intersection is not empty.
-   * \param interExterBool True if interior-exterior intersection is not empty.
-   * \param exterInterBool True if exterior-interior intersection is not empty.
-   * \return True if the decision process was successful.
-   */
-  bool ComputeRelation(bool edgeEdgeBool, bool interExterBool, bool exterInterBool);
-  /**
-   * Test if the boolean image is totally black or not. This is a based on the lazy operator
-   * paradigm.
-   * \param image The image to test.
-   * \return True or false.
-   */
-  bool IsBoolImageNotEmpty(BoolImagePointerType image);
-  /**
-   * Compute a bool image of minimal ROI size, surrounded by a false padding, and corresponding
-   * to the input image.
-   * \param image The image to convert.
-   * \param insideValue The inside value.
-   * \return The converted image
-   */
-  BoolImagePointerType ConvertToBoolImage(ImagePointerType image, PixelType insideValue);
-  /** Main computation method */
-  void GenerateData(void) override;
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  /** The RCC8 relation value */
-  RCC8ValueType m_Value;
-  /** The minimal ROI needed to compute the relation value */
-  RegionType m_MinimalROI;
-  /**  Decision tree Level 1 A priori knowledge */
-  bool m_Level1APrioriKnowledge;
-  /**  Decision tree Level 3 A priori knowledge */
-  bool m_Level3APrioriKnowledge;
-  /** Inside value 1 */
-  PixelType m_InsideValue1;
-  /** Inside value 2 */
-  PixelType m_InsideValue2;
-  /** Internal bool image representation*/
-  BoolImagePointerType m_BoolImage1;
-  BoolImagePointerType m_BoolImage2;
-};
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbImageToImageRCC8Calculator.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.hxx b/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.hxx
deleted file mode 100644
index decd905bf7c446e19bfd0206bea0e59bd43e77ed..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbImageToImageRCC8Calculator.hxx
+++ /dev/null
@@ -1,528 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbImageToImageRCC8Calculator_hxx
-#define otbImageToImageRCC8Calculator_hxx
-
-#include "otbImageToImageRCC8Calculator.h"
-#include "itkUnaryFunctorImageFilter.h"
-#include "itkBinaryDilateImageFilter.h"
-#include "itkBinaryBallStructuringElement.h"
-#include "itkInvertIntensityImageFilter.h"
-#include "itkSubtractImageFilter.h"
-#include "itkAndImageFilter.h"
-#include "itkImageRegionIterator.h"
-#include "otbBinaryImageMinimalBoundingRegionCalculator.h"
-#include "otbMacro.h"
-
-//TODELETE  #include "otbImageFileWriter.h"
-//TODELETE  #include "itkCastImageFilter.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template<class TInputImage>
-ImageToImageRCC8Calculator<TInputImage>
-::ImageToImageRCC8Calculator()
-{
-  m_Value        = OTB_RCC8_DC;
-  m_InsideValue1  = static_cast<PixelType>(255);
-  m_InsideValue2  = static_cast<PixelType>(255);
-  m_Level1APrioriKnowledge = false;
-  m_Level3APrioriKnowledge = false;
-  this->SetNumberOfRequiredInputs(2);
-}
-/**
- * Set the first input image.
- * \param image
- */
-template<class TInputImage>
-void
-ImageToImageRCC8Calculator<TInputImage>
-::SetInput1(ImageType * image)
-{
-  this->SetNthInput(0, const_cast<ImageType *>(image));
-}
-/**
- * Set the second input image.
- * \param image
- */
-template<class TInputImage>
-void
-ImageToImageRCC8Calculator<TInputImage>
-::SetInput2(ImageType * image)
-{
-  this->SetNthInput(1, const_cast<ImageType *>(image));
-}
-/**
- * Get the first input image.
- * \return The first input image.
- */
-template<class TInputImage>
-typename ImageToImageRCC8Calculator<TInputImage>
-::ImageType*
-ImageToImageRCC8Calculator<TInputImage>
-::GetInput1(void)
-{
-  return dynamic_cast<ImageType*>(this->itk::ProcessObject::GetInput(0));
-}
-/**
- * Get the second input image.
- * \return The second input image.
- */
-template<class TInputImage>
-typename ImageToImageRCC8Calculator<TInputImage>
-::ImageType*
-ImageToImageRCC8Calculator<TInputImage>
-::GetInput2(void)
-{
-  return dynamic_cast<ImageType*>(this->itk::ProcessObject::GetInput(1));
-}
-/**
- * Get the RCC8 relation.
- * \return The RCC8 relation value.
- */
-template <class TInputImage>
-typename ImageToImageRCC8Calculator<TInputImage>
-::RCC8ValueType
-ImageToImageRCC8Calculator<TInputImage>
-::GetValue(void)
-{
-  return m_Value;
-}
-/**
- * Compute the minimal image region required.
- * \return The minimal region required.
- */
-template <class TInputImage>
-typename ImageToImageRCC8Calculator<TInputImage>
-::RegionType
-ImageToImageRCC8Calculator<TInputImage>
-::ComputeMinimalRegion(void)
-{
-  // Input images pointers
-  typename ImageType::Pointer    image1 = this->GetInput1();
-  typename ImageType::Pointer    image2 = this->GetInput2();
-  typename ImageType::RegionType region1, region2, region;
-  typedef otb::BinaryImageMinimalBoundingRegionCalculator<ImageType> RegionCalculator;
-  typename RegionCalculator::Pointer rc = RegionCalculator::New();
-  rc->SetInput(image1);
-  rc->SetPad(2);
-  rc->SetInsideValue(this->GetInsideValue1());
-  rc->Update();
-  region1 = rc->GetRegion();
-  rc = RegionCalculator::New();
-  rc->SetInput(image2);
-  rc->SetPad(2);
-  rc->SetInsideValue(this->GetInsideValue2());
-  rc->Update();
-  region2 = rc->GetRegion();
-  // otbMsgDebugMacro(<<"RCC8Calculator->ComputeMinimalRegion() Region1: index: "<<region1.GetIndex()<<" size: "<<region1.GetSize());
-  // otbMsgDebugMacro(<<"RCC8Calculator->ComputeMinimalRegion() Region2: index: "<<region2.GetIndex()<<" size: "<<region2.GetSize());
-
-  //TODELETE     std::cout<<"RCC8Calculator->ComputeMinimalRegion() Region1: index: "<<region1.GetIndex()<<" size: "<<region1.GetSize()<<std::endl;
-//TODELETE      std::cout<<"RCC8Calculator->ComputeMinimalRegion() Region2: index: "<<region2.GetIndex()<<" size: "<<region2.GetSize()<<std::endl;
-
-  typename ImageType::SizeType  size;
-  typename ImageType::IndexType index;
-
-  for (unsigned int i = 0; i < ImageType::ImageDimension; ++i)
-    {
-    index[i] = std::min(region1.GetIndex()[i], region2.GetIndex()[i]);
-    int potSize = std::max(region1.GetIndex()[i] + region1.GetSize()[i],
-                           region2.GetIndex()[i] + region2.GetSize()[i]);
-    size[i] = (potSize - index[i] < 0 ? 0 : potSize - index[i]);
-    }
-  region.SetIndex(index);
-  region.SetSize(size);
-  region.PadByRadius(2);
-  region.Crop(image1->GetLargestPossibleRegion());
-  region.Crop(image2->GetLargestPossibleRegion());
-  // otbMsgDebugMacro(<<"RCC8Calculator->ComputeMinimalRegion(): index: "<<index<<" size: "<<size);
-  //TODELETE   std::cout<<"RCC8Calculator->ComputeMinimalRegion(): index: "<<index<<" size: "<<size<<std::endl;
-  return region;
-}
-/**
- * Compute a bool image of minimal ROI size, surrounded by a false padding, and corresponding
- * to the input image.
- * \param image The image to convert.
- * \param insideValue The inside value.
- * \return The converted image
- */
-template<class TInputImage>
-typename ImageToImageRCC8Calculator<TInputImage>
-::BoolImagePointerType
-ImageToImageRCC8Calculator<TInputImage>
-::ConvertToBoolImage(ImagePointerType image, PixelType insideValue)
-{
-  typedef itk::ImageRegionConstIterator<ImageType> ConstIterator;
-  typedef itk::ImageRegionIterator<BoolImageType>  Iterator;
-  typename BoolImageType::Pointer  output = BoolImageType::New();
-  typename BoolImageType::SizeType boolImageSize;
-  boolImageSize[0] = m_MinimalROI.GetSize()[0] + 2;
-  boolImageSize[1] = m_MinimalROI.GetSize()[1] + 2;
-  typename BoolImageType::IndexType boolImageIndex;
-  boolImageIndex[0] = m_MinimalROI.GetIndex()[0] - 1;
-  boolImageIndex[1] = m_MinimalROI.GetIndex()[1] - 1;
-  //otbMsgDebugMacro(<<"RCC8Calculator->ConvertToBoolImage() size: "<<boolImageSize<<" index: "<<boolImageIndex);
-
-  typename BoolImageType::RegionType boolRegion;
-  boolRegion.SetSize(boolImageSize);
-  boolRegion.SetIndex(boolImageIndex);
-  output->SetRegions(boolRegion);
-  output->Allocate();
-  output->FillBuffer(false);
-
-  ConstIterator inputIt(image, m_MinimalROI);
-  Iterator outputIt(output, m_MinimalROI);
-  inputIt.GoToBegin();
-  outputIt.GoToBegin();
-  while (!inputIt.IsAtEnd() && !outputIt.IsAtEnd())
-    {
-    outputIt.Set(inputIt.Get() == insideValue);
-    ++inputIt;
-    ++outputIt;
-    }
-
-  return output;
-}
-/**
- * Compute the intersection between regions edges.
- * \return true if the intersection is not empty.
- */
-template<class TInputImage>
-bool
-ImageToImageRCC8Calculator<TInputImage>
-::ComputeEdgeEdgeBool(void)
-{
-
-  /// Definition of the Filters used to compute the boolean
-  typedef itk::SubtractImageFilter<BoolImageType, BoolImageType,
-      BoolImageType>
-  SubtractFilterType;
-  typedef itk::BinaryBallStructuringElement<bool,
-      BoolImageType::ImageDimension>
-  BinaryBallStructuringElementType;
-  typedef itk::BinaryDilateImageFilter<BoolImageType, BoolImageType, BinaryBallStructuringElementType> DilateFilterType;
-  typedef itk::AndImageFilter<BoolImageType, BoolImageType, BoolImageType>                             AndFilterType;
-  /// Declaration and instantiation
-  typename DilateFilterType::Pointer   dilateFilter1 = DilateFilterType::New();
-  typename DilateFilterType::Pointer   dilateFilter2 = DilateFilterType::New();
-  typename SubtractFilterType::Pointer subtractFilter1 = SubtractFilterType::New();
-  typename SubtractFilterType::Pointer subtractFilter2 = SubtractFilterType::New();
-  typename AndFilterType::Pointer      andFilter = AndFilterType::New();
-  /// Configuration of the erosion filter
-  BinaryBallStructuringElementType structElement1, structElement2;
-  structElement1.SetRadius(1);
-  structElement2.SetRadius(1);
-  structElement1.CreateStructuringElement();
-  structElement2.CreateStructuringElement();
-  dilateFilter1->SetKernel(structElement1);
-  dilateFilter2->SetKernel(structElement2);
-  /// The erosion is performed to get the surrounding edge of this
-  /// region by subtraction to the original image
-  dilateFilter1->SetInput(m_BoolImage1);
-  dilateFilter1->Update();
-  subtractFilter1->SetInput2(m_BoolImage1);
-  subtractFilter1->SetInput1(dilateFilter1->GetOutput());
-  subtractFilter1->Update();
-  /// The erosion is performed to get the surrounding edge of this
-  /// region by subtraction to the original image
-  dilateFilter2->SetInput(m_BoolImage2);
-  dilateFilter2->Update();
-  subtractFilter2->SetInput2(m_BoolImage2);
-  subtractFilter2->SetInput1(dilateFilter2->GetOutput());
-  subtractFilter2->Update();
-  /// Now we can compute the intersection between the 2 edges
-  andFilter->SetInput1(subtractFilter1->GetOutput());
-  andFilter->SetInput2(subtractFilter2->GetOutput());
-  andFilter->Update();
-  /// test if the intersection is empty or not
-  return this->IsBoolImageNotEmpty(andFilter->GetOutput());
-}
-/**
- * Compute the intersection between exterior of region1 and
- * interior of region2.
- * \return true if the intersection is not empty.
- */
-template<class TInputImage>
-bool
-ImageToImageRCC8Calculator<TInputImage>
-::ComputeExterInterBool(void)
-{
-  /// Definition of the filters used
-  typedef itk::InvertIntensityImageFilter<BoolImageType, BoolImageType>    InvertFilterType;
-  typedef itk::AndImageFilter<BoolImageType, BoolImageType, BoolImageType> AndFilterType;
-  /// Declaration and instantiation
-  typename InvertFilterType::Pointer invert = InvertFilterType::New();
-  typename AndFilterType::Pointer    andFilter = AndFilterType::New();
-  /// The exterior is the inverted input image
-  invert->SetMaximum(true);
-  invert->SetInput(m_BoolImage1);
-  andFilter->SetInput1(m_BoolImage2);
-  andFilter->SetInput2(invert->GetOutput());
-  andFilter->Update();
-  /// test if the intersection is empty or not
-  return IsBoolImageNotEmpty(andFilter->GetOutput());
-}
-/**
- * Compute the intersection between interior of region1 and
- * exterior of region2.
- * \return true if the intersection is not empty.
- */
-template<class TInputImage>
-bool
-ImageToImageRCC8Calculator<TInputImage>
-::ComputeInterExterBool(void)
-{
-  /// Definition of the filters used
-  typedef itk::InvertIntensityImageFilter<BoolImageType, BoolImageType>    InvertFilterType;
-  typedef itk::AndImageFilter<BoolImageType, BoolImageType, BoolImageType> AndFilterType;
-//TODELETE     typedef otb::Image<unsigned char, 2> TmpImageType;
-//TODELETE     typedef itk::CastImageFilter<BoolImageType, TmpImageType> CastFilterType;
-
-//TODELETE     typedef ImageFileWriter<TmpImageType> WriterType;
-/// Declaration and instantiation
-  typename InvertFilterType::Pointer invert = InvertFilterType::New();
-  typename AndFilterType::Pointer    andFilter = AndFilterType::New();
-  /// The exterior is the inverted input image
-  invert->SetMaximum(true);
-  invert->SetInput(m_BoolImage2);
-
-//TODELETE     typename CastFilterType::Pointer caster = CastFilterType::New();
-//TODELETE    caster->SetInput(invert->GetOutput());
-//TODELETE     typename WriterType::Pointer writer = WriterType::New();
-//TODELETE      writer->SetFileName("invert.tif");
-//TODELETE     writer->SetInput(caster->GetOutput());
-//TODELETE      writer->Update();
-
-  andFilter->SetInput1(m_BoolImage1);
-  andFilter->SetInput2(invert->GetOutput());
-  andFilter->Update();
-
-//TODELETE     caster = CastFilterType::New();
-//TODELETE     caster->SetInput(andFilter->GetOutput());
-//TODELETE     writer = WriterType::New();
-//TODELETE     writer->SetFileName("and.tif");
-//TODELETE     writer->SetInput(caster->GetOutput());
-//TODELETE     writer->Update();
-
-  /// test if the intersection is empty or not
-  return IsBoolImageNotEmpty(andFilter->GetOutput());
-}
-/**
- * Compute the intersection between regions interiors.
- * \return true if the intersection is not empty.
- */
-template<class TInputImage>
-bool
-ImageToImageRCC8Calculator<TInputImage>
-::ComputeInterInterBool(void)
-{
-  /// Definition of the filters used
-  typedef itk::AndImageFilter<BoolImageType, BoolImageType, BoolImageType> AndFilterType;
-
-  /// Declaration and instantiation
-  typename AndFilterType::Pointer andFilter = AndFilterType::New();
-  /// The exterior is the inverted input image
-  andFilter->SetInput1(m_BoolImage1);
-  andFilter->SetInput2(m_BoolImage2);
-  andFilter->Update();
-  /// test if the intersection is empty or not
-  return IsBoolImageNotEmpty(andFilter->GetOutput());
-}
-/**
- * Compute the relation value from the input booleans. Please note
- * that the actual computed value is set to the m_Value parameters, and has
- * nothing to do with the returned boolean, which indicates if the determination
- * process was successful.
- * \param edgeEdgeBool True if edge-edge intersection is not empty.
- * \param interExterBool True if interior-exterior intersection is not empty.
- * \param exterInterBool True if exterior-interior intersection is not empty.
- * \return True if the decision process was successful.
- */
-template<class TInputImage>
-bool
-ImageToImageRCC8Calculator<TInputImage>
-::ComputeRelation(bool edgeEdgeBool, bool interExterBool, bool exterInterBool)
-{
-  // otbMsgDebugMacro(<<"RCC8Calculator->ComputeRelation()");
-  // This decision process is based on a decision tree
-  if ((!interExterBool) && (edgeEdgeBool) && (!exterInterBool))
-    {
-    m_Value = OTB_RCC8_EQ;
-    return true;
-    }
-  else if ((!interExterBool) && (edgeEdgeBool) && (exterInterBool))
-    {
-    m_Value = OTB_RCC8_TPP;
-    return true;
-    }
-  else if ((interExterBool) && (!edgeEdgeBool) && (!exterInterBool))
-    {
-    m_Value = OTB_RCC8_NTPPI;
-    return true;
-    }
-  else if ((interExterBool) && (!edgeEdgeBool) && (exterInterBool))
-    {
-    m_Value = OTB_RCC8_DC;
-    return true;
-    }
-  else if ((interExterBool) && (edgeEdgeBool) && (!exterInterBool))
-    {
-    m_Value = OTB_RCC8_TPPI;
-    return true;
-    }
-  else
-    {
-    return false;
-    }
-}
-/**
- * Test if the boolean image is totally black or not. This is a based on the lazy operator
- * paradigm.
- * \param image The image to test.
- * \return True or false.
- */
-template<class TInputImage>
-bool
-ImageToImageRCC8Calculator<TInputImage>
-::IsBoolImageNotEmpty(BoolImagePointerType image)
-{
-  typedef itk::ImageRegionConstIterator<BoolImageType> IteratorType;
-  // TODO : we'll eventually need to change something.
-  IteratorType it(image, image->GetLargestPossibleRegion());
-  it.GoToBegin();
-  while (!it.IsAtEnd())
-    {
-    if (it.Get())
-      {
-      return true;
-      }
-    ++it;
-    }
-  return false;
-}
-/**
- * Main computation method.
- */
-template <class TInputImage>
-void
-ImageToImageRCC8Calculator<TInputImage>
-::GenerateData(void)
-{
-  // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData()");
-  /// First we compute the minimal region of interest we will use for the relation computation
-  m_MinimalROI = this->ComputeMinimalRegion();
-  /// If they are disjoint, the answer is trivial
-  if ((m_MinimalROI.GetSize()[0] <= 1) || (m_MinimalROI.GetSize()[1] <= 1))
-    {
-    /// The relation is DC
-    m_Value = OTB_RCC8_DC;
-    // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): Disjoint regions");
-    }
-  else
-    {
-    /// else each input images is cast to boolean type and reduced to
-    // the minimal region
-    m_BoolImage1 = ConvertToBoolImage(this->GetInput1(), m_InsideValue1);
-    m_BoolImage2 = ConvertToBoolImage(this->GetInput2(), m_InsideValue2);
-    // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): Bool images computed: "<<m_BoolImage1->GetLargestPossibleRegion().GetSize());
-    /// Then the boolean which will be used to determine the relation
-    /// are declared
-    bool edgeEdgeBool, interExterBool, exterInterBool, interInterBool;
-    /// The boolean edgeEdge is needed in each case, so it si computed
-    /// now
-    edgeEdgeBool = ComputeEdgeEdgeBool();
-    // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): edgeEdge "<<edgeEdgeBool);
-    //TODELETE  std::cout<<"RCC8Calculator->GenerateData(): edgeEdge "<<edgeEdgeBool<<std::endl;
-    /// Here comes the outside knowledge
-    if (this->GetLevel1APrioriKnowledge())
-      {
-      /// If the Level1APrioriKnowledge is set, then the
-      /// interExterBool is set to true
-      // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): Level1APrioriKnowledge.");
-      interExterBool = true;
-      }
-    else
-      {
-      /// Else it must be computed
-      interExterBool = ComputeInterExterBool();
-      // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): interExter "<<interExterBool);
-      }
-    /// At this stage we can determine if the relation is of type NTPP
-    //TODELETE  std::cout<<"RCC8Calculator->GenerateData(): interExter "<<interExterBool<<std::endl;
-    if ((!interExterBool) && (!edgeEdgeBool))
-      {
-      m_Value = OTB_RCC8_NTPP;
-      }
-    else
-      {
-      /// If not, we must consider the intersection between exterior
-      if (this->GetLevel3APrioriKnowledge())
-        {
-        /// If the Level3APRioriKnowledge flag is set, this boolean
-        /// can be determined from the two others
-        // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): Level3APrioriKnowledge.");
-        exterInterBool = true;
-        }
-      else
-        {
-        /// Else it must be computed
-        exterInterBool = ComputeExterInterBool();
-        // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): ExterInter "<<exterInterBool);
-        }
-      //TODELETE      std::cout<<"RCC8Calculator->GenerateData(): ExterInter "<<exterInterBool<<std::endl;
-      /// If it is not sufficient to compute the relation
-      if (!ComputeRelation(edgeEdgeBool, interExterBool, exterInterBool))
-        {
-        /// Compute the last boolean
-        interInterBool = ComputeInterInterBool();
-        //TODELETE    std::cout<<"RCC8Calculator->GenerateData(): InterInter "<<interInterBool<<std::endl;
-        // otbMsgDebugMacro(<<"RCC8Calculator->GenerateData(): InterInter "<<interInterBool);
-        /// Which allow the full determination
-        if ((interExterBool) && (edgeEdgeBool) && (exterInterBool) && (!interInterBool))
-          {
-          m_Value = OTB_RCC8_EC;
-          }
-        else
-          {
-          m_Value = OTB_RCC8_PO;
-          }
-        }
-      }
-    }
-}
-/**
-* PrintSelf method
-*/
-template<class TInputImage>
-void
-ImageToImageRCC8Calculator<TInputImage>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-
-} // end namespace itk
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h b/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h
deleted file mode 100644
index 7c2d8175a3cccfa6282af5e58125269886fd980b..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.h
+++ /dev/null
@@ -1,182 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbPolygonListToRCC8GraphFilter_h
-#define otbPolygonListToRCC8GraphFilter_h
-
-#include "otbRCC8GraphSource.h"
-#include "otbPolygonToPolygonRCC8Calculator.h"
-#include "otbRCC8VertexIterator.h"
-#include "otbRCC8InEdgeIterator.h"
-#include "otbRCC8OutEdgeIterator.h"
-
-namespace otb
-{
-/**
- * \class PolygonListToRCC8GraphFilter
- * \brief This class computes an RCC8 graph from a set of polygons.
- * \sa ImageMultiSegmentationToRCC8GraphFilter
- *
- * \ingroup OTBRCC8
- */
-template <class TPolygonList, class TOutputGraph>
-class ITK_EXPORT PolygonListToRCC8GraphFilter
-  : public RCC8GraphSource<TOutputGraph>
-{
-public:
-  /** Standard class typedefs. */
-  typedef PolygonListToRCC8GraphFilter  Self;
-  typedef RCC8GraphSource<TOutputGraph> Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(PolygonListToRCC8GraphFilter, RCC8GraphSource);
-
-  /** Input related typedef */
-  typedef TPolygonList                           PolygonListType;
-  typedef typename PolygonListType::ConstPointer PolygonListConstPointerType;
-  typedef typename PolygonListType::ObjectType   PolygonType;
-  typedef typename PolygonType::Pointer          PolygonPointerType;
-
-  /** Output related typedefs */
-  typedef TOutputGraph                                   OutputGraphType;
-  typedef typename OutputGraphType::Pointer              OutputGraphPointerType;
-  typedef typename OutputGraphType::VertexType           VertexType;
-  typedef typename VertexType::Pointer                   VertexPointerType;
-  typedef typename VertexType::PathType                  PathType;
-  typedef typename OutputGraphType::VertexDescriptorType VertexDescriptorType;
-
-  /** Knowledge enum typedef */
-  typedef typename OutputGraphType::RCC8ValueType      RCC8ValueType;
-  typedef enum {NO_INFO, LEVEL_1, LEVEL_3, FULL}       KnowledgeValueType;
-  typedef std::pair<KnowledgeValueType, RCC8ValueType> KnowledgeStateType;
-
-  /** RCC8 calculator typedef */
-  typedef PolygonToPolygonRCC8Calculator<PolygonType> RCC8CalculatorType;
-
-  /** Graph iterators typedefs */
-  typedef RCC8VertexIterator<OutputGraphType>  VertexIteratorType;
-  typedef RCC8InEdgeIterator<OutputGraphType>  InEdgeIteratorType;
-  typedef RCC8OutEdgeIterator<OutputGraphType> OutEdgeIteratorType;
-
-  typedef typename VertexIteratorType::VertexDescriptorType EdgePairElementType;
-  typedef std::pair<EdgePairElementType, EdgePairElementType> EdgePairType;
-  typedef std::map<EdgePairType, RCC8ValueType> EdgeMapType;
-  typedef std::vector<EdgeMapType>              EdgeMapVectorType;
-
-  typedef std::vector<unsigned int> SegmentationRangesType;
-
-  /** Toogle optimisation flag */
-  itkBooleanMacro(Optimisation);
-  itkSetMacro(Optimisation, bool);
-  itkBooleanMacro(UseInverted);
-  itkSetMacro(UseInverted, bool);
-
-  void SetSegmentationRanges(SegmentationRangesType ranges)
-  {
-    m_SegmentationRanges = ranges;
-  }
-
-  const SegmentationRangesType& GetSegmentationRanges() const
-  {
-    return m_SegmentationRanges;
-  }
-
-  /**
-   * Get the number of occurrences of the given value
-   * \return The value.
-   */
-  unsigned int GetRelationsCount(RCC8ValueType val);
-
-  /**
-   * Get number of relations
-   * \return The number of relations.
-   */
-  unsigned int GetNumberOfRelations(void);
-
-  using Superclass::SetInput;
-  /** Set the input of the filter */
-  virtual void SetInput(const PolygonListType *input);
-  /** Get the input of the filter */
-  const PolygonListType * GetInput(void);
-
-protected:
-  /** Constructor */
-  PolygonListToRCC8GraphFilter();
-  /** Destructor */
-  ~PolygonListToRCC8GraphFilter() override;
-  /** Main computation method */
-  void GenerateData() override;
-
-  /** Multi-threading implementation */
-
-  virtual void BeforeThreadedGenerateData();
-
-  virtual void AfterThreadedGenerateData();
-
-  /** startIndex and stopIndex represent the indices of the vertex to
-  examine in thread threadId */
-  virtual void ThreadedGenerateData(unsigned int startIndex, unsigned int stopIndex, itk::ThreadIdType threadId);
-
-  /** Static function used as a "callback" by the MultiThreader.  The threading
-   * library will call this routine for each thread, which will delegate the
-   * control to ThreadedGenerateData(). */
-  static ITK_THREAD_RETURN_TYPE ThreaderCallback(void *arg);
-
-  /** Internal structure used for passing image data into the threading library */
-  struct ThreadStruct
-  {
-    Pointer Filter;
-  };
-
-  /** End Multi-threading implementation */
-
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /**
-   * Get the composition knowledge.
-   * \param r1 First RCC8 relation value,
-   * \param r2 Second RCC8 relation value,
-   * \return The knowledge associated with the composition.
-   */
-  KnowledgeStateType GetKnowledge(RCC8ValueType r1, RCC8ValueType r2);
-
-private:
-  /** Optimisation flag */
-  bool              m_Optimisation;
-  unsigned int      m_Accumulator[8];
-  EdgeMapVectorType m_EdgesPerThread;
-
-  /** This array stores the indices corresponding to each segmentation */
-  SegmentationRangesType m_SegmentationRanges;
-
-  /** If set to true, the filter will also add the invert relationship
-    * between v2 and v1 */
-  bool m_UseInverted;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbPolygonListToRCC8GraphFilter.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.hxx b/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.hxx
deleted file mode 100644
index 10842bf64866a0753828b9cf23f056173dd90ee1..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbPolygonListToRCC8GraphFilter.hxx
+++ /dev/null
@@ -1,460 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbPolygonListToRCC8GraphFilter_hxx
-#define otbPolygonListToRCC8GraphFilter_hxx
-
-#include "otbPolygonListToRCC8GraphFilter.h"
-#include "itkProgressReporter.h"
-
-namespace otb
-{
-/**
- * Constructor.
- */
-template <class TPolygonList, class TOutputGraph>
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::PolygonListToRCC8GraphFilter()
-{
-  this->SetNumberOfRequiredInputs(1);
-  m_Optimisation = false;
-  m_UseInverted = false;
-}
-/**
- * Destructor.
- */
-template <class TPolygonList, class TOutputGraph>
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::~PolygonListToRCC8GraphFilter()
-{}
-
-template <class TPolygonList, class TOutputGraph>
-void
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::SetInput(const PolygonListType *input)
-{
-  // Process object is not const-correct so the const_cast is required here
-  this->itk::ProcessObject::SetNthInput(0,
-                                        const_cast<PolygonListType *>(input));
-}
-
-template <class TPolygonList, class TOutputGraph>
-const typename PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>::PolygonListType *
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::GetInput(void)
-{
-  if (this->GetNumberOfInputs() < 1)
-    {
-    return nullptr;
-    }
-
-  return static_cast<const TPolygonList *>
-           (this->itk::ProcessObject::GetInput(0));
-}
-
-template <class TPolygonList, class TOutputGraph>
-unsigned int
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::GetRelationsCount(RCC8ValueType val)
-{
-  return m_Accumulator[val];
-}
-
-template <class TPolygonList, class TOutputGraph>
-unsigned int
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::GetNumberOfRelations()
-{
-  unsigned int result = 0;
-  for (unsigned int i = 0; i < 8; ++i)
-    {
-    result += m_Accumulator[i];
-
-    }
-  return result;
-}
-template <class TPolygonList, class TOutputGraph>
-typename PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::KnowledgeStateType
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::GetKnowledge(RCC8ValueType r1, RCC8ValueType r2)
-{
-  m_Accumulator[0] = 0;
-  m_Accumulator[1] = 0;
-  m_Accumulator[2] = 0;
-  m_Accumulator[3] = 0;
-  m_Accumulator[4] = 0;
-  m_Accumulator[5] = 0;
-  m_Accumulator[6] = 0;
-  m_Accumulator[7] = 0;
-
-  // otbMsgDebugMacro(<<"RCC8GraphFilter: entering GetKnowledge method.");
-  // This is the RCC8 composition table
-  const int knowledge[8][8]
-    =
-    {
-    /**         DC  EC  PO TPP TPPi NTPP i  EQ */
-    /** DC */ {-3, -2, -2, -2,  0, -2,  0,  0},
-    /** EC  */ {-1, -3, -2, -3, -1, -3,  0,  1},
-    /** PO  */ {-1, -1, -3, -3, -1, -3, -1,  2},
-    /** TPP */ { 0, -1, -2, -3, -3,  5, -1,  3},
-    /** TPPi*/ {-1, -1, -1, -3, -1, -3,  6,  4},
-    /** NTPP*/ { 0,  0, -2,  5, -2,  5, -3,  5},
-    /** NTPPi*/ {-1, -1, -1, -1,  6, -3,  6,  6},
-    /** EQ  */ { 0,  1,  2,  3,  4,  5,  6,  7}
-    };
-
-  int value = knowledge[r1][r2];
-  // Each negative case correspond to a level of knowledge
-  if (value >= 0)
-    {
-    // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method: FULL");
-    return KnowledgeStateType(FULL, static_cast<RCC8ValueType>(value));
-    }
-  else if (value == -1)
-    {
-    // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method: LEVEL_1");
-    return KnowledgeStateType(LEVEL_1, OTB_RCC8_DC);
-    }
-  else if (value == -2)
-    {
-    // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method.LEVEL_3");
-    return KnowledgeStateType(LEVEL_3, OTB_RCC8_DC);
-    }
-  else
-    {
-    // otbMsgDebugMacro(<<"RCC8GraphFilter: leaving GetKnowledge method.NO_INFO");
-    return KnowledgeStateType(NO_INFO, OTB_RCC8_DC);
-    }
-}
-/**
- * Main computation method.
- */
-template <class TPolygonList, class TOutputGraph>
-void
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::GenerateData()
-{
-  // Call a method that can be overridden by a subclass to perform
-  // some calculations prior to splitting the main computations into
-  // separate threads
-  this->BeforeThreadedGenerateData();
-
-  // Set up the multithreaded processing
-  ThreadStruct str;
-  str.Filter = this;
-
-  // // Initializing edges vectors per thread
-  EdgeMapType defaultEdgeMap;
-  m_EdgesPerThread = EdgeMapVectorType(this->GetNumberOfThreads(), defaultEdgeMap);
-
-  // Setting up multithreader
-  this->GetMultiThreader()->SetNumberOfThreads(this->GetNumberOfThreads());
-  this->GetMultiThreader()->SetSingleMethod(this->ThreaderCallback, &str);
-
-  // multithread the execution
-  this->GetMultiThreader()->SingleMethodExecute();
-
-  // Call a method that can be overridden by a subclass to perform
-  // some calculations after all the threads have completed
-  this->AfterThreadedGenerateData();
-}
-
-template <class TPolygonList, class TOutputGraph>
-void
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::BeforeThreadedGenerateData()
-{
-  // Output graph pointer
-  OutputGraphPointerType      graph = this->GetOutput();
-  PolygonListConstPointerType inputPtr = this->GetInput();
-
-// Initializing output graph
-  graph->SetNumberOfVertices(inputPtr->Size());
-  graph->Build();
-
-  // Vertex indexes
-  unsigned int nbVertices = 0;
-
-  typedef typename PolygonListType::ConstIterator PolygonListConstIteratorType;
-
-  // Loads the polygons list to graph nodes
-  for (PolygonListConstIteratorType it = inputPtr->Begin();
-       it != inputPtr->End(); ++it)
-    {
-    // Create a new vertex
-    VertexPointerType vertex = VertexType::New();
-    // Set its properties
-    vertex->SetPath(it.Get());
-
-    // look for the appropriate segmentation index
-
-    unsigned int segIndex = 1;
-
-    while (segIndex < m_SegmentationRanges.size() &&
-           (nbVertices < m_SegmentationRanges[segIndex - 1] || nbVertices >= m_SegmentationRanges[segIndex]))
-      {
-      ++segIndex;
-      }
-
-    vertex->SetSegmentationLevel(segIndex - 1);
-
-    // Put it in the graph
-    graph->SetVertex(nbVertices, vertex);
-    otbMsgDevMacro(<< "Adding vertex: " << nbVertices);
-    ++nbVertices;
-    }
-}
-
-template <class TPolygonList, class TOutputGraph>
-void
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::ThreadedGenerateData(unsigned int startIndex, unsigned int stopIndex, itk::ThreadIdType threadId)
-{
-  //std::cout<<"Starting thread "<<threadId <<" to work on range ["<<startIndex<<", "<<stopIndex<<"]"<<std::endl;
-
-  // Output graph pointer
-  OutputGraphPointerType      graph = this->GetOutput();
-  PolygonListConstPointerType inputPtr = this->GetInput();
-
-  // invert value vector
-  RCC8ValueType invert[8] = {OTB_RCC8_DC, OTB_RCC8_EC, OTB_RCC8_PO, OTB_RCC8_TPPI,
-                             OTB_RCC8_TPP, OTB_RCC8_NTPPI, OTB_RCC8_NTPP, OTB_RCC8_EQ};
-
-  unsigned int nbVertices = graph->GetNumberOfVertices();
-  itk::ProgressReporter progress(this, threadId, ((int) stopIndex - (int) startIndex)*nbVertices);
-
-  otbMsgDevMacro(<< "Adjacency matrix size: " << nbVertices * nbVertices);
-
-  VertexIteratorType vIt1(graph);
-  VertexIteratorType vIt2(graph);
-
-  unsigned int count = 0;
-
-  // For each couple of vertices
-  for (vIt1.GoToBegin(); !vIt1.IsAtEnd(); ++vIt1)
-    {
-    // TODO: this is not correct and should be replaced by a
-    // vIt1(graph, index1, index2), which does not exist for the moment
-    if ((count >= startIndex) && (count < stopIndex))
-      {
-      for (vIt2.GoToBegin(); !vIt2.IsAtEnd(); ++vIt2)
-        {
-        //We do not examine each couple because of the RCC8 symmetry
-        if (vIt1.GetIndex() < vIt2.GetIndex())
-          {
-
-          // Compute the RCC8 relation
-          typename RCC8CalculatorType::Pointer calc = RCC8CalculatorType::New();
-          calc->SetPolygon1(vIt1.Get()->GetPath());
-          calc->SetPolygon2(vIt2.Get()->GetPath());
-          RCC8ValueType value = OTB_RCC8_DC;
-
-          // if the optimisations are activated
-          if (m_Optimisation)
-            {
-            //  otbMsgDebugMacro(<<"RCC8GraphFilter: Entering optimisation loop");
-            InEdgeIteratorType inIt1(vIt1.GetIndex(), graph);
-            InEdgeIteratorType inIt2(vIt2.GetIndex(), graph);
-            // otbMsgDebugMacro(<<"Optimisation loop: iterators initialised");
-            VertexDescriptorType betweenIndex;
-            KnowledgeStateType know(NO_INFO, OTB_RCC8_DC);
-            inIt1.GoToBegin();
-
-            // Iterate through the edges going to the first vertex
-            while (!inIt1.IsAtEnd() && (know.first != FULL))
-              {
-              betweenIndex = inIt1.GetSourceIndex();
-              inIt2.GoToBegin();
-              bool edgeFound = false;
-              while (!inIt2.IsAtEnd() && (know.first != FULL))
-                {
-                // try to find an intermediate vertex between the two ones which
-                // we vant to compute the relationship
-                if (inIt2.GetSourceIndex() == betweenIndex)
-                  {
-                  // if an intermediate vertex is found
-                  edgeFound = true;
-                  // otbMsgDebugMacro(<<"Optimisation loop: found an intermediary vertex:" <<betweenIndex);
-                  // See if it brings some info on the RCCC8 value
-                  know = GetKnowledge(invert[inIt1.GetValue()], inIt2.GetValue());
-                  calc->SetLevel1APrioriKnowledge(know.first == LEVEL_1);
-                  calc->SetLevel3APrioriKnowledge(know.first == LEVEL_3);
-                  //  otbMsgDebugMacro(<<"Optimisation loop: knowledge: "<<know.first<<","<<know.second);
-                  }
-                ++inIt2;
-                }
-              // If no intermediate was found
-              if (!edgeFound)
-                {
-                //  otbMsgDebugMacro(<<"Optimisation loop: found an intermediary vertex:" <<betweenIndex);
-                // Try using a DC relationship
-                know = GetKnowledge(invert[inIt1.GetValue()], OTB_RCC8_DC);
-                calc->SetLevel1APrioriKnowledge(know.first == LEVEL_1);
-                calc->SetLevel3APrioriKnowledge(know.first == LEVEL_3);
-                // otbMsgDebugMacro(<<"Optimisation loop: knowledge: "<<know.first<<","<<know.second);
-                }
-              ++inIt1;
-              }
-            // If the search has fully determined the RCC8
-            if (know.first == FULL)
-              {
-              // Get the value
-              value = know.second;
-              }
-            else
-              {
-              // Else trigger the computation
-              // (which will take the optimisation phase info into account)
-              calc->Compute();
-              value = calc->GetValue();
-              }
-            // otbMsgDebugMacro(<<"RCC8GraphFilter: Leaving optimisation loop");
-            }
-          // If the optimisations are not activated
-          else
-            {
-            calc->Compute();
-            value = calc->GetValue();
-            }
-          m_Accumulator[value] += 1;
-          m_Accumulator[invert[value]] += 1;
-          // If the vertices are connected
-          if (value > OTB_RCC8_DC)
-            {
-            // Add the edge to the graph.
-            otbMsgDevMacro(<< "Adding edge: " << vIt1.GetIndex() << " -> " << vIt2.GetIndex() << ": " << value);
-            if (value == OTB_RCC8_NTPPI)
-              {
-              m_EdgesPerThread[threadId][EdgePairType(vIt2.GetIndex(), vIt1.GetIndex())] = OTB_RCC8_NTPP;
-              }
-            else if (value == OTB_RCC8_TPPI)
-              {
-              m_EdgesPerThread[threadId][EdgePairType(vIt2.GetIndex(), vIt1.GetIndex())] = OTB_RCC8_TPP;
-              }
-            else
-              {
-              m_EdgesPerThread[threadId][EdgePairType(vIt1.GetIndex(), vIt2.GetIndex())] = value;
-              }
-            if (m_UseInverted)
-              {
-              m_EdgesPerThread[threadId][EdgePairType(vIt2.GetIndex(), vIt1.GetIndex())] = invert[value];
-              }
-            }
-          }
-        progress.CompletedPixel();
-        progress.CompletedPixel();
-        }
-      }
-    ++count;
-    }
-  otbMsgDebugMacro(<< "End thread " << threadId);
-}
-
-template <class TPolygonList, class TOutputGraph>
-void
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::AfterThreadedGenerateData()
-{
-  // in order to have the same output graph whatever the number of
-  // thread is, we use a map to sort the edges in lexicographical
-  // order
-
-  OutputGraphPointerType graph = this->GetOutput();
-  EdgeMapType            globalEdgeMap;
-
-  // merge all edges
-  for (typename EdgeMapVectorType::iterator vIt = m_EdgesPerThread.begin();
-       vIt != m_EdgesPerThread.end(); ++vIt)
-    {
-    for (typename EdgeMapType::iterator mIt = (*vIt).begin();
-         mIt != (*vIt).end(); ++mIt)
-      {
-      globalEdgeMap[mIt->first] = mIt->second;
-      }
-    }
-
-  // Report edges to the graph
-  for (typename EdgeMapType::iterator mIt = globalEdgeMap.begin();
-       mIt != globalEdgeMap.end(); ++mIt)
-    {
-    graph->AddEdge(mIt->first.first, mIt->first.second, mIt->second);
-    }
-}
-
-// Callback routine used by the threading library. This routine just calls
-// the ThreadedGenerateData method after setting the correct region for this
-// thread.
-
-template <class TPolygonList, class TOutputGraph>
-ITK_THREAD_RETURN_TYPE
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::ThreaderCallback(void *arg)
-{
-  ThreadStruct *str;
-  int           threadId, threadCount;
-  unsigned int  total, start, stop;
-
-  threadId = ((itk::MultiThreader::ThreadInfoStruct *) (arg))->ThreadID;
-  threadCount = ((itk::MultiThreader::ThreadInfoStruct *) (arg))->NumberOfThreads;
-  str = (ThreadStruct *) (((itk::MultiThreader::ThreadInfoStruct *) (arg))->UserData);
-
-  total = str->Filter->GetOutput()->GetNumberOfVertices();
-
-  if (threadId < static_cast<int>(total))
-    {
-
-    // Split the adjacency matrix in strip of equal dimension
-    start =
-      static_cast<unsigned int>(std::floor(total *
-                                          std::sqrt(static_cast<double>(threadId) /
-                                                   static_cast<double>(threadCount)) + 0.5));
-    stop =
-      static_cast<unsigned int>(std::floor(total *
-                                          std::sqrt(static_cast<double>(threadId +
-                                                                       1) / static_cast<double>(threadCount)) + 0.5));
-    if (stop > total) stop = total;
-
-    // For very small graphs it might occur that start = stop. In this
-    // case the vertex at that index will be processed in the next strip.
-    if (start != stop)
-      {
-      str->Filter->ThreadedGenerateData(start, stop, threadId);
-      }
-    }
-  // else
-  //   {
-  //   otherwise don't use this thread. Sometimes the threads don't
-  //   break up very well and it is just as efficient to leave a
-  //   few threads idle.
-  //   }
-
-  return ITK_THREAD_RETURN_VALUE;
-}
-
-template <class TPolygonList, class TOutputGraph>
-void
-PolygonListToRCC8GraphFilter<TPolygonList, TOutputGraph>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // end namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h b/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h
deleted file mode 100644
index b19cf4a7a31d6d30959b4fe39d193535021376f8..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbPolygonToPolygonRCC8Calculator_h
-#define otbPolygonToPolygonRCC8Calculator_h
-
-#include "itkObject.h"
-#include "otbRCC8Value.h"
-#include "otbImage.h"
-
-namespace otb
-{
-/**
- * \class PolygonToPolygonRCC8Calculator
- * \brief This class compute the RCC8 relation between the regions from two segmentation images.
- *
- * The RCC8 system comes from qualitative spatial reasoning.
- * It is a set of pairwise disjoint exhaustive relation between two closed region of space.
- * There are 8 possible relations :
- * DC: Disconnected
- * EC: Externaly connected
- * PO: Partial overlap
- * TPP: Tangential proper part
- * NTPP: Non tangential proper part
- * TPPI: Tangential proper part inverse
- * NTPPI: Non tangential proper part inverse
- * EQ: Equivalence
- *
- * The goal of this class is to determine which of these 8 relations link the two inputs regions represented
- * by the closed input path. Since this class will further be used iteratively on a possibly large set
- * of regiosn, it is optimised : the decision is managed by a decision tree.
- *
- * \ingroup OTBRCC8
- */
-template <class TInputPolygon>
-class ITK_EXPORT PolygonToPolygonRCC8Calculator : public itk::Object
-{
-public:
-  /** Standard class typedefs. */
-  typedef PolygonToPolygonRCC8Calculator Self;
-  typedef itk::Object                    Superclass;
-  typedef itk::SmartPointer<Self>        Pointer;
-  typedef itk::SmartPointer<const Self>  ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(PolygonToPolygonRCC8Calculator, Object);
-  /** Types definitions for the input image. */
-  typedef TInputPolygon                                     PolygonType;
-  typedef typename PolygonType::Pointer                     PolygonPointerType;
-  typedef typename PolygonType::ConstPointer                PolygonConstPointerType;
-  typedef typename PolygonType::VertexListType              VertexListType;
-  typedef typename PolygonType::ContinuousIndexType         ContinuousIndexType;
-  typedef typename PolygonType::RegionType::ImageRegionType RegionType;
-  typedef typename VertexListType::ConstIterator            VertexListConstIteratorType;
-  typedef std::vector<bool>                                 BoolVectorType;
-
-  /** RCC8 values type */
-  typedef RCC8Value RCC8ValueType;
-
-  /**
-   * Get the RCC8 relation.
-   * \return The RCC8 relation value.
-   */
-  RCC8ValueType GetValue(void);
-
-  /** Set external knowledge to help the decision process */
-  itkSetMacro(Level1APrioriKnowledge, bool);
-  itkSetMacro(Level3APrioriKnowledge, bool);
-  itkGetMacro(Level1APrioriKnowledge, bool);
-  itkGetMacro(Level3APrioriKnowledge, bool);
-
-  itkSetObjectMacro(Polygon1, PolygonType);
-  itkSetObjectMacro(Polygon2, PolygonType);
-  itkGetObjectMacro(Polygon1, PolygonType);
-  itkGetObjectMacro(Polygon2, PolygonType);
-
-  /** Main computation method */
-  void Compute(void);
-
-  virtual bool ComputeRelation(bool edgeEdgeBool, bool interExterBool, bool exterInterBool);
-
-  virtual bool ComputeInterExter(PolygonPointerType path1, PolygonPointerType path2);
-
-  virtual bool ComputeEdgeEdge(PolygonPointerType path1, PolygonPointerType path2);
-
-  virtual bool ComputeInterInter(PolygonPointerType path1, PolygonPointerType path2);
-
-  virtual bool RegionsIntersectionIsNull(const RegionType& region1, const RegionType& region2);
-
-protected:
-  /** Constructor */
-  PolygonToPolygonRCC8Calculator();
-  /** Destructor */
-  ~PolygonToPolygonRCC8Calculator() override {}
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  /** The RCC8 relation value */
-  RCC8ValueType m_Value;
-  /**  Decision tree Level 1 A priori knowledge */
-  bool m_Level1APrioriKnowledge;
-  /**  Decision tree Level 3 A priori knowledge */
-  bool m_Level3APrioriKnowledge;
-  /** Polygon of region 1 */
-  PolygonPointerType m_Polygon1;
-  /** Polygon of region 2 */
-  PolygonPointerType m_Polygon2;
-  /** Epsilon */
-  double m_Epsilon;
-
-};
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbPolygonToPolygonRCC8Calculator.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.hxx b/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.hxx
deleted file mode 100644
index bcb836fa4c5baf6e07c9a9bb782b6d90042455d9..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbPolygonToPolygonRCC8Calculator.hxx
+++ /dev/null
@@ -1,348 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbPolygonToPolygonRCC8Calculator_hxx
-#define otbPolygonToPolygonRCC8Calculator_hxx
-
-#include "otbPolygonToPolygonRCC8Calculator.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template<class TInputPolygon>
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::PolygonToPolygonRCC8Calculator()
-{
-  m_Value        = OTB_RCC8_DC;
-  m_Level1APrioriKnowledge = false;
-  m_Level3APrioriKnowledge = false;
-}
-/**
- * Get the RCC8 relation.
- * \return The RCC8 relation value.
- */
-template <class TInputPolygon>
-typename PolygonToPolygonRCC8Calculator<TInputPolygon>
-::RCC8ValueType
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::GetValue(void)
-{
-  return m_Value;
-}
-
-template<class TInputPolygon>
-void
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::Compute(void)
-{
-  // First check if bounding regions are disjoints
-  RegionType region1 = m_Polygon1->GetBoundingRegion().GetImageRegion();
-  RegionType region2 = m_Polygon2->GetBoundingRegion().GetImageRegion();
-
-  // If intersection is not null, we have to do the computation
-  if (!RegionsIntersectionIsNull(region1, region2))
-    {
-
-    bool edgeEdgeBool, interExterBool, exterInterBool, interInterBool;
-    /// The boolean edgeEdge is needed in each case, so it si computed
-    /// now
-    edgeEdgeBool = ComputeEdgeEdge(m_Polygon1, m_Polygon2);
-
-    //std::cout<<"EdgeEdge: "<<edgeEdgeBool<<std::endl;
-
-    if (this->GetLevel1APrioriKnowledge())
-      {
-      interExterBool = true;
-      }
-    else
-      {
-      /// Else it must be computed
-      interExterBool = ComputeInterExter(m_Polygon1, m_Polygon2);
-      }
-
-    //std::cout<<"InterExter: "<<interExterBool<<std::endl;
-
-    /// At this stage we can determine if the relation is of type NTPP
-    if ((!interExterBool) && (!edgeEdgeBool))
-      {
-      m_Value = OTB_RCC8_NTPP;
-      }
-    else
-      {
-      /// If not, we must consider the intersection between exterior
-      if (this->GetLevel3APrioriKnowledge())
-        {
-        /// If the Level3APRioriKnowledge flag is set, this boolean
-        /// can be determined from the two others
-        exterInterBool = true;
-        }
-      else
-        {
-        /// Else it must be computed
-        exterInterBool = ComputeInterExter(m_Polygon2, m_Polygon1);
-        }
-
-      //std::cout<<"ExterInter: "<<exterInterBool<<std::endl;
-
-      /// If it is not sufficient to compute the relation
-      if (!ComputeRelation(edgeEdgeBool, interExterBool, exterInterBool))
-        {
-        /// Compute the last boolean
-        interInterBool = ComputeInterInter(m_Polygon1, m_Polygon2);
-
-        //std::cout<<"InterInter: "<<interInterBool<<std::endl;
-
-        /// Which allow the full determination
-        if ((interExterBool) && (edgeEdgeBool) && (exterInterBool) && (!interInterBool))
-          {
-          m_Value = OTB_RCC8_EC;
-          }
-        else
-          {
-          m_Value = OTB_RCC8_PO;
-          }
-        }
-      }
-    }
-}
-
-template<class TInputPolygon>
-bool
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::RegionsIntersectionIsNull(const RegionType& region1, const RegionType& region2)
-{
-  for (unsigned int dim = 0; dim < RegionType::ImageDimension; ++dim)
-    {
-    if (region1.GetIndex()[dim] + static_cast<int>(region1.GetSize()[dim]) < region2.GetIndex()[dim])
-      {
-      return true;
-      }
-    else if (region2.GetIndex()[dim] + static_cast<int>(region2.GetSize()[dim]) < region1.GetIndex()[dim])
-      {
-      return true;
-      }
-    }
-  return false;
-}
-
-template<class TInputPolygon>
-bool
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::ComputeRelation(bool edgeEdgeBool, bool interExterBool, bool exterInterBool)
-{
-  // This decision process is based on a decision tree
-  if ((!interExterBool) && (edgeEdgeBool) && (!exterInterBool))
-    {
-    m_Value = OTB_RCC8_EQ;
-    return true;
-    }
-  else if ((!interExterBool) && (edgeEdgeBool) && (exterInterBool))
-    {
-    m_Value = OTB_RCC8_TPP;
-    return true;
-    }
-  else if ((interExterBool) && (!edgeEdgeBool) && (!exterInterBool))
-    {
-    m_Value = OTB_RCC8_NTPPI;
-    return true;
-    }
-  else if ((interExterBool) && (!edgeEdgeBool) && (exterInterBool))
-    {
-    m_Value = OTB_RCC8_DC;
-    return true;
-    }
-  else if ((interExterBool) && (edgeEdgeBool) && (!exterInterBool))
-    {
-    m_Value = OTB_RCC8_TPPI;
-    return true;
-    }
-  else
-    {
-    return false;
-    }
-}
-
-template<class TInputPolygon>
-bool
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::ComputeInterExter(PolygonPointerType polygon1, PolygonPointerType polygon2)
-{
-  bool                        resp = false;
-  VertexListConstIteratorType it = polygon1->GetVertexList()->Begin();
-  VertexListConstIteratorType it_end = polygon1->GetVertexList()->End();
-
-  ContinuousIndexType current = it.Value();
-  ContinuousIndexType first = current;
-  bool                isInside = polygon2->IsInside(current);
-  bool                firstIsInside = isInside;
-  bool                isExterior = !isInside && !polygon2->IsOnEdge(current);
-
-  //std::cout<<current<<" is inside: "<<isInside<<std::endl;
-  //std::cout<<current<<" is on edge: "<<polygon2->IsOnEdge(current)<<std::endl;
-
-  unsigned int index = 0;
-  if (isExterior)
-    {
-    resp = true;
-    }
-  ++it;
-  while (!resp && it != it_end)
-    {
-    bool nextIsInside = polygon2->IsInside(it.Value());
-
-    if (isInside && nextIsInside)
-      {
-      //std::cout<<current<<" is inside and "<<it.Value()<<" is inside, nb crossings: "<<polygon2->NbCrossing(current, it.Value())<<std::endl;
-      resp = polygon2->NbCrossing(current, it.Value()) > 0;
-      }
-    current = it.Value();
-    isInside  = nextIsInside;
-    isExterior = !isInside && !polygon2->IsOnEdge(current);
-    //std::cout<<current<<" is inside: "<<isInside<<std::endl;
-    //std::cout<<current<<" is on edge: "<<polygon2->IsOnEdge(current)<<std::endl;
-    if (isExterior)
-      {
-      resp = true;
-      }
-
-    ++index;
-    ++it;
-    }
-
-  if (!resp && isInside && firstIsInside)
-    {
-    resp = polygon2->NbCrossing(current, first) > 0;
-    //std::cout<<current<<" is inside and "<<first<<" is inside, nb crossings: "<<polygon2->NbCrossing(current, first)<<std::endl;
-    }
-
-  return resp;
-}
-
-template<class TInputPolygon>
-bool
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::ComputeInterInter(PolygonPointerType polygon1, PolygonPointerType polygon2)
-{
-  bool                        resp = false;
-  VertexListConstIteratorType it = polygon1->GetVertexList()->Begin();
-  VertexListConstIteratorType it_end = polygon1->GetVertexList()->End();
-  ContinuousIndexType         current = it.Value();
-  ContinuousIndexType         first = current;
-  bool                        currentIsInside = polygon2->IsInside(current);
-  bool                        firstIsInside = currentIsInside;
-
-  if (currentIsInside)
-    {
-    resp = true;
-    }
-  ++it;
-  while (!resp && it != it_end)
-    {
-    bool nextIsInside = polygon2->IsInside(it.Value());
-
-    if (!currentIsInside && !nextIsInside && !polygon2->IsOnEdge(current) && !polygon2->IsOnEdge(it.Value()))
-      {
-      unsigned int nbCrossings = polygon2->NbCrossing(current, it.Value());
-
-      resp = nbCrossings > 0;
-      }
-    currentIsInside = nextIsInside;
-    current = it.Value();
-
-    if (currentIsInside)
-      {
-      resp = true;
-      }
-    ++it;
-    }
-
-  if (!resp && !currentIsInside && !firstIsInside && !polygon2->IsOnEdge(current) && !polygon2->IsOnEdge(first))
-    {
-    unsigned int nbCrossings = polygon2->NbCrossing(current, first);
-
-    resp = nbCrossings > 0;
-    }
-  return resp;
-}
-template<class TInputPolygon>
-bool
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::ComputeEdgeEdge(PolygonPointerType polygon1, PolygonPointerType polygon2)
-{
-  bool                        resp = false;
-  VertexListConstIteratorType it = polygon1->GetVertexList()->Begin();
-  VertexListConstIteratorType it_end = polygon1->GetVertexList()->End();
-
-  ContinuousIndexType current = it.Value();
-  resp = polygon2->IsOnEdge(current);
-  //std::cout<<"IsOnEdge: "<<current<<": "<<polygon2->IsOnEdge(current)<<std::endl;
-  ContinuousIndexType first = current;
-  ++it;
-
-  while (!resp && it != it_end)
-    {
-    if (polygon2->NbTouching(current, it.Value()) > 0)
-      {
-      resp = true;
-      //std::cout<<"NbCrossing: "<<current<<" -> "<<it.Value()<<": "<<polygon2->NbCrossing(current, it.Value())<<std::endl;
-      }
-    if (polygon2->NbCrossing(current, it.Value()) > 0)
-      {
-      resp = true;
-      //std::cout<<"NbTouching: "<<current<<" -> "<<it.Value()<<": "<<polygon2->NbTouching(current, it.Value())<<std::endl;
-      }
-    current = it.Value();
-
-    if (polygon2->IsOnEdge(current))
-      {
-      resp = true;
-      //std::cout<<"IsOnEdge: "<<current<<": "<<polygon2->IsOnEdge(current)<<std::endl;
-      }
-    ++it;
-    }
-  if (!resp && polygon2->NbTouching(current, first) > 0)
-    {
-    resp = true;
-    //std::cout<<"NbCrossing: "<<current<<" -> "<<first<<": "<<polygon2->NbCrossing(current, first)<<std::endl;
-    }
-  if (polygon2->NbCrossing(current, first) > 0)
-    {
-    resp = true;
-    //std::cout<<"NbTouching: "<<current<<" -> "<<first<<": "<<polygon2->NbTouching(current, first)<<std::endl;
-    }
-
-  return resp;
-}
-/**
- * PrintSelf method
- */
-template<class TInputPolygon>
-void
-PolygonToPolygonRCC8Calculator<TInputPolygon>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // end namespace otb
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8Edge.h b/Modules/OBIA/RCC8/include/otbRCC8Edge.h
deleted file mode 100644
index e85d8d3c755e5bfb363551519bde0aafaab2ffbd..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8Edge.h
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8Edge_h
-#define otbRCC8Edge_h
-
-#include "itkDataObject.h"
-#include "itkObjectFactory.h"
-#include "otbRCC8Value.h"
-
-namespace otb
-{
-/** \class RCC8Edge
- *  \brief Base class to represent an edge in a RCC8 Graph.
- *
- * \sa RCC8Graph, RCC8VertexBase
- *
- * \ingroup OTBRCC8
- */
-class ITK_EXPORT RCC8Edge : public itk::DataObject
-{
-public:
-  /** Standard class typedefs */
-  typedef RCC8Edge                      Self;
-  typedef itk::DataObject               Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(RCC8Edge, DataObject);
-  /** RCC8 values typedef */
-  typedef RCC8Value RCC8ValueType;
-  /** RCC8 relation value accessors */
-  itkGetMacro(Value, RCC8ValueType);
-  itkSetMacro(Value, RCC8ValueType);
-
-protected:
-  /** Constructor */
-  RCC8Edge();
-  /** Desctructor */
-  ~RCC8Edge() override {}
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  /** The RCC8 value */
-  RCC8ValueType m_Value;
-};
-} // end namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.h b/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.h
deleted file mode 100644
index c7096be92632966c1df05f1c522c0c68f6baa411..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8EdgeIterator_h
-#define otbRCC8EdgeIterator_h
-
-#include "otbRCC8Graph.h"
-
-namespace otb
-{
-/**
- * \class RCC8EdgeIterator
- * \brief Iterates on the graph edges.
- *
- * \ingroup OTBRCC8
- */
-template <class TGraph>
-class ITK_EXPORT RCC8EdgeIterator
-{
-public:
-  /** self typedef */
-  typedef RCC8EdgeIterator Self;
-
-  /** Graph typedef */
-  typedef TGraph                                   GraphType;
-  typedef typename GraphType::InternalGraphType    InternalGraphType;
-  typedef typename GraphType::Pointer              GraphPointerType;
-  typedef typename GraphType::EdgePointerType      EdgePointerType;
-  typedef typename GraphType::VertexPointerType    VertexPointerType;
-  typedef typename GraphType::VertexDescriptorType VertexDescriptorType;
-  typedef typename GraphType::RCC8ValueType        RCC8ValueType;
-  /** typedef of the internal iterator */
-  typedef typename boost::graph_traits<InternalGraphType>::edge_iterator InternalIteratorType;
-  /** Typedef of the index map */
-  typedef typename boost::property_map<InternalGraphType, boost::vertex_index_t>::type IndexMapType;
-
-  /** Constructor */
-  RCC8EdgeIterator();
-  /** Copy constructor */
-  RCC8EdgeIterator(const Self &iter);
-  /**  Constructor with input graph */
-  RCC8EdgeIterator(TGraph * graph);
-  /**
-   * Get the current edge value.
-   * \return The value of the current edge pointed by the iterator.
-   */
-  RCC8ValueType GetValue(void);
-  /**
-    * Return the source vertex of the current edge.
-    * \return The source edge.
-    */
-  VertexPointerType GetSourceVertex(void);
-  /**
-   * Return the target vertex of the current edge.
-   * \return The target vertex.
-   */
-  VertexPointerType GetTargetVertex(void);
-  /**
-   * Return the source vertex index of the current edge.
-   * \return The source vertex index.
-   */
-  VertexDescriptorType GetSourceIndex(void);
-  /**
-   * Return the target vertex index of the current edge.
-   * \return The target vertex index.
-   */
-  VertexDescriptorType GetTargetIndex(void);
-
-  /**
-   * Return true if the iterator is at the end.
-   * \return True if the iterator is at the end.
-   */
-  bool IsAtEnd(void);
-  /**
-   * Go to the beginning.
-   */
-  void GoToBegin(void);
-  /**
-   * Increment.
-   */
-  Self& operator ++();
-  /**
-   * Decrement.
-   */
-  Self& operator --();
-  /**
-   * Add
-   */
-  Self& operator +(int i);
-
-  /**
-   * Remove
-   */
-  Self& operator -(int i);
-  /**
-   * Difference comparison operator.
-   */
-  bool operator !=(const Self& it);
-  /**
-   * Equality comparison operator.
-   */
-  bool operator ==(const Self& it);
-  /**
-   * Instantiation operator.
-   */
-  Self& operator =(const Self& it);
-private:
-  // End
-  InternalIteratorType m_End;
-  // Internal iterator.
-  InternalIteratorType m_Iter;
-  // Input graph pointer
-  GraphPointerType m_Graph;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8EdgeIterator.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.hxx b/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.hxx
deleted file mode 100644
index 43989016883e56e95e053e6e547d5b78e0e6ce99..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8EdgeIterator.hxx
+++ /dev/null
@@ -1,221 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8EdgeIterator_hxx
-#define otbRCC8EdgeIterator_hxx
-
-#include "otbRCC8EdgeIterator.h"
-
-namespace otb
-{
-/** Constructor */
-template <class TGraph>
-RCC8EdgeIterator<TGraph>
-::RCC8EdgeIterator()
-{
-  m_Graph = GraphType::New();
-  boost::tuples::tie(m_Iter, m_End) = edges(*m_Graph->GetGraph());
-}
-/**
- * Copy operator.
- */
-template <class TGraph>
-RCC8EdgeIterator<TGraph>
-::RCC8EdgeIterator(const Self& iter)
-{
-  m_Iter = iter.m_Iter;
-  m_Graph = iter.m_Graph;
-  m_End = iter.m_End;
-}
-/**
- *Constructor with input graph
- */
-template <class TGraph>
-RCC8EdgeIterator<TGraph>
-::RCC8EdgeIterator(TGraph * graph)
-{
-  m_Graph = graph;
-  boost::tuples::tie(m_Iter, m_End) = edges(*m_Graph->GetGraph());
-}
-/**
- * Get the current edge value.
- * \return The value of the current edge pointed by the iterator.
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::RCC8ValueType
-RCC8EdgeIterator<TGraph>
-::GetValue(void)
-{
-  return (*m_Graph->GetGraph())[*m_Iter]->GetValue();
-}
-/**
- * Return the source vertex of the current edge.
- * \return The source edge.
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::VertexPointerType
-RCC8EdgeIterator<TGraph>
-::GetSourceVertex(void)
-{
-  return (*m_Graph->GetGraph())[source(*m_Iter, (*m_Graph->GetGraph()))];
-}
-/**
- * Return the target vertex of the current edge.
- * \return The target vertex.
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::VertexPointerType
-RCC8EdgeIterator<TGraph>
-::GetTargetVertex(void)
-{
-  return (*m_Graph->GetGraph())[target(*m_Iter, (*m_Graph->GetGraph()))];
-}
-/**
- * Return the source vertex index of the current edge.
- * \return The source vertex index.
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::VertexDescriptorType
-RCC8EdgeIterator<TGraph>
-::GetSourceIndex(void)
-{
-  IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph()));
-  return index[source(*m_Iter, (*m_Graph->GetGraph()))];
-}
-/**
- * Return the target vertex index of the current edge.
- * \return The target vertex index.
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::VertexDescriptorType
-RCC8EdgeIterator<TGraph>
-::GetTargetIndex(void)
-{
-  IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph()));
-  return index[target(*m_Iter, (*m_Graph->GetGraph()))];
-}
-/**
- * Return true if the iterator is at the end.
- * \return True if the iterator is at the end.
- */
-template <class TGraph>
-bool
-RCC8EdgeIterator<TGraph>
-::IsAtEnd(void)
-{
-  return (m_Iter == m_End);
-}
-/**
- * Go to the beginning.
- */
-template <class TGraph>
-void
-RCC8EdgeIterator<TGraph>
-::GoToBegin(void)
-{
-  boost::tuples::tie(m_Iter, m_End) = edges(*m_Graph->GetGraph());
-}
-/**
- * Increment.
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::Self&
-RCC8EdgeIterator<TGraph>
-::operator++ ()
-  {
-  ++m_Iter;
-  return *this;
-  }
-/**
- * Decrement.
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::Self&
-RCC8EdgeIterator<TGraph>
-::operator-- ()
-  {
-  --m_Iter;
-  return *this;
-  }
-/**
- * Add
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::Self&
-RCC8EdgeIterator<TGraph>
-::operator + (int i)
-  {
-  m_Iter = m_Iter + i;
-  return *this;
-  }
-/**
- * Remove
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::Self&
-RCC8EdgeIterator<TGraph>
-::operator - (int i)
-  {
-  m_Iter = m_Iter - i;
-  return *this;
-  }
-/**
- * Difference comparison operator.
- */
-template <class TGraph>
-bool
-RCC8EdgeIterator<TGraph>
-::operator != (const Self &iter)
-  {
-  return (m_Iter != iter.m_Iter);
-  }
-/**
- * Equality comparison operator.
- */
-template <class TGraph>
-bool
-RCC8EdgeIterator<TGraph>
-::operator == (const Self &iter)
-  {
-  return (m_Iter == iter.m_Iter);
-  }
-/**
- * Instantiation operator.
- */
-template <class TGraph>
-typename RCC8EdgeIterator<TGraph>
-::Self&
-RCC8EdgeIterator<TGraph>
-::operator = (const Self &iter)
-  {
-  m_Iter = iter.m_Iter;
-  return *this;
-  }
-} // End namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8Graph.h b/Modules/OBIA/RCC8/include/otbRCC8Graph.h
deleted file mode 100644
index 9caa3ef59626a55d833fda5aaebebd1b09a28f6e..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8Graph.h
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8Graph_h
-#define otbRCC8Graph_h
-
-#include "otbRCC8Edge.h"
-
-//fix compilation in VS7.1 for boost 1.42
-//similar to the fix in Monteverdi
-#ifndef BOOST_NO_0X_HDR_INITIALIZER_LIST
-#define BOOST_NO_0X_HDR_INITIALIZER_LIST
-#endif
-
-#include "otb_boost_graph_header.h"
-
-#include "otbImage.h"
-#include "otbImageList.h"
-
-namespace otb
-{
-/**
- * \class RCC8Graph
- * \brief This class is a data structure designed to store RCC8 Graph
- * computed from a pyramidal segmentation.
- *
- * A batch of boost operation has been embedded in order to provide
- * basic functionality such as adding a new edge, or retrieving the
- * number of vertices. A method is also provided to retrieve the boost
- * graph object, in case more advanced processing is required. One
- * should remember that if a peculiar operation is needed for some
- * applications, one should provide a patch for this class including
- * the new functionnalities, for consistency reason.
- *
- * \ingroup OTBRCC8
- */
-template <class TVertex>
-class ITK_EXPORT RCC8Graph  :
-  public itk::DataObject
-{
-public:
-  /** Standard class typedefs. */
-  typedef RCC8Graph                     Self;
-  typedef itk::DataObject               Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(RCC8Graph, itk::DataObject);
-  /** Vertex typedef */
-  typedef TVertex                      VertexType;
-  typedef typename VertexType::Pointer VertexPointerType;
-  /** Edge typedef */
-  typedef RCC8Edge                         EdgeType;
-  typedef typename EdgeType::Pointer       EdgePointerType;
-  typedef typename EdgeType::RCC8ValueType RCC8ValueType;
-  /** Typedef for the boost graph representation */
-  typedef boost::adjacency_list
-  <boost::vecS, boost::vecS, boost::bidirectionalS,
-      VertexPointerType, EdgePointerType> InternalGraphType;
-  /** Edges and vertices descriptors typedefs (boost objects)*/
-  typedef typename InternalGraphType::vertex_descriptor VertexDescriptorType;
-  typedef typename InternalGraphType::edge_descriptor   EdgeDescriptorType;
-
-  /** Getters and Setters for the number of vertices */
-  itkSetMacro(NumberOfVertices, unsigned int);
-  itkGetConstReferenceMacro(NumberOfVertices, unsigned int);
-
-  /**
-   *  Return the internal boost graph object.
-   *  \return The internal boost graph object
-   */
-  InternalGraphType * GetGraph(void)
-  {
-    return &m_Graph;
-  }
-  /**
-   * Since the number of vertices is mandatory to instantiate the
-   * internal boost representation, the build method has to be called
-   * once this parameter is set.
-   */
-  void Build(void);
-  /**
-   * Set a vertex.
-   * \param index The index of the vertex in the graph.
-   * \param vertex The vertex to set.
-   */
-  void SetVertex(unsigned int index, VertexPointerType vertex);
-  /**
-   * Get a vertex.
-   * \param index The index of the vertex in the graph
-   * \return The vertex.
-   */
-  VertexPointerType GetVertex(unsigned int index);
-  /**
-   * Add an edge in the graph.
-   * \param index1 The index of the source vertex.
-   * \param index2 The index of the target vertex.
-   * \param r The RCC8 value.
-   */
-  void AddEdge(unsigned int index1, unsigned int index2, RCC8ValueType r);
-  /**
-   * Get number of edges
-   * /return The number of edges.
-   */
-  unsigned int GetNumberOfEdges(void);
-
-protected:
-  /** Constructor */
-  RCC8Graph();
-  /** Destructor */
-  ~RCC8Graph() override {}
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /**
-   * Initialize a range of vertex.
-   * \param num The index of the last vertices to initialize.
-   */
-  void InitializeGraph(unsigned int num);
-
-private:
-
-  /** Defines the number of vertices (ie total number of segmentation regions)*/
-  unsigned int m_NumberOfVertices;
-  /** Internal representation using the boost graph library */
-  InternalGraphType m_Graph;
-};
-} // end namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8Graph.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8Graph.hxx b/Modules/OBIA/RCC8/include/otbRCC8Graph.hxx
deleted file mode 100644
index f429442c2dd820447bc547283af733bf68f448b4..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8Graph.hxx
+++ /dev/null
@@ -1,135 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8Graph_hxx
-#define otbRCC8Graph_hxx
-
-#include "otbRCC8Graph.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TVertex>
-RCC8Graph<TVertex>
-::RCC8Graph()
-{
-  m_NumberOfVertices = 0;
-}
-/**
- * since the number of vertices is mandatory to instantiate the
- * internal boost representation, the build method has to be called
- * once this parameter is set.
- */
-template <class TVertex>
-void
-RCC8Graph<TVertex>
-::Build(void)
-{
-  this->InitializeGraph(m_NumberOfVertices - 1);
-}
-/**
- * Initialize a range of vertex.
- * \param num The index of the last vertices to initialize.
- */
-template <class TVertex>
-void
-RCC8Graph<TVertex>
-::InitializeGraph(unsigned int num)
-{
-  for (unsigned int i = boost::num_vertices(m_Graph); i <= num; ++i)
-    {
-    VertexDescriptorType id = boost::add_vertex(m_Graph);
-    VertexPointerType    vertex = VertexType::New();
-    m_Graph[id] = vertex;
-    }
-}
-/**
- * Set a vertex.
- * \param index The index of the vertex in the graph.
- * \param vertex The vertex to set.
- */
-template<class TVertex>
-void
-RCC8Graph<TVertex>
-::SetVertex(unsigned int index, VertexPointerType vertex)
-{
-  if (index >= m_NumberOfVertices)
-    {
-    this->InitializeGraph(index);
-    m_NumberOfVertices = index + 1;
-    }
-  VertexDescriptorType v = *boost::vertices(m_Graph).first;
-  m_Graph[v + index] = vertex;
-}
-/**
- * Get a vertex.
- * \param index The index of the vertex in the graph
- * \return The vertex.
- */
-template <class TVertex>
-typename RCC8Graph<TVertex>
-::VertexPointerType
-RCC8Graph<TVertex>
-::GetVertex(unsigned int index)
-{
-  VertexDescriptorType v = *boost::vertices(m_Graph).first;
-  return m_Graph[v + index];
-}
-/**
- * Add an edge in the graph.
- * \param index1 The index of the source vertex.
- * \param index2 The index of the target vertex.
- * \param r The rcc8 value associated to the edge.
- */
-template <class TVertex>
-void
-RCC8Graph<TVertex>
-::AddEdge(unsigned int index1, unsigned int index2, RCC8ValueType r)
-{
-  EdgeDescriptorType e = boost::add_edge(index1, index2, m_Graph).first;
-  EdgeType::Pointer  edge = EdgeType::New();
-  edge->SetValue(r);
-  m_Graph[e] = edge;
-}
-/**
-  * Get number of edges
-  * /return The number of edges.
-  */
-template <class TVertex>
-unsigned int
-RCC8Graph<TVertex>
-::GetNumberOfEdges(void)
-{
-  return num_edges(m_Graph);
-}
-/**
- * PrintSelf method
- */
-template <class TVertex>
-void
-RCC8Graph<TVertex>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // end namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h b/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h
deleted file mode 100644
index 0811898a0c6f4f3cbac0d80d93acb28481578bcd..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.h
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8GraphFileReader_h
-#define otbRCC8GraphFileReader_h
-
-#include "otbRCC8GraphSource.h"
-#include "itkMacro.h"
-#include <string>
-
-namespace otb
-{
-/** \class RCC8GraphFileReaderException
- * \brief Base exception class for IO problems during reading.
- *
- * \ingroup OTBRCC8
- */
-class ITK_EXPORT RCC8GraphFileReaderException
-  : public itk::ExceptionObject
-{
-public:
-  /** Run-time information. */
-  itkTypeMacro(RCC8GraphFileReaderException, ExceptionObject);
-
-  /** Constructor. */
-  RCC8GraphFileReaderException(const char *file, unsigned int line,
-                               const char* message = "Error in IO",
-                               const char* loc = "Unknown") :
-    ExceptionObject(file, line, message, loc) {}
-  /** Constructor. */
-  RCC8GraphFileReaderException(const std::string & file, unsigned int line,
-                               const char* message = "Error in IO",
-                               const char* loc = "Unknown") :
-    ExceptionObject(file, line, message, loc) {}
-};
-/**
- * \class RCC8GraphFileReader
- * \brief This class reads a RCC8 graph from a .dot file (graphviz format).
- *
- * The parsing algorithm reads the lines from the file, deciding if the line is
- * a vertex or edge line. It then call the correct parse method between ParseEdge
- * and ParseVertex. The ParseVertex use builds an AttributesMap and pass it to a new
- * vertex.
- *
- * \sa RCC8GraphFileWriter
- * \sa RCC8Graph
- *
- * \ingroup OTBRCC8
- */
-template <class TOutputGraph>
-class ITK_EXPORT RCC8GraphFileReader : public RCC8GraphSource<TOutputGraph>
-{
-public:
-  /** Standards typedef */
-  typedef RCC8GraphFileReader           Self;
-  typedef RCC8GraphSource<TOutputGraph> Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Creation through the object factory */
-  itkNewMacro(Self);
-  /** Runtime type information */
-  itkTypeMacro(RCC8GraphFileReader, RCC8GraphSource);
-  /** Output related typedefs */
-  typedef TOutputGraph                                OutputGraphType;
-  typedef typename Superclass::OutputGraphPointerType OutputGraphPointerType;
-  typedef typename OutputGraphType::VertexType        VertexType;
-  typedef typename VertexType::Pointer                VertexPointerType;
-  typedef typename OutputGraphType::RCC8ValueType     RCC8ValueType;
-
-  /** Set the filename  */
-  itkSetStringMacro(FileName);
-  /** Get the filename */
-  itkGetStringMacro(FileName);
-
-protected:
-  /** Constructor */
-  RCC8GraphFileReader();
-  /** Destructor */
-  ~RCC8GraphFileReader() override;
-  /** Main computation method */
-  void GenerateData() override;
-  /**
-   * Parse edge information from a given line.
-   * \param line The line to parse.
-   */
-  void ParseEdge(const std::string& line);
-  /**
-   * Parse vertex information from a given line.
-   * \param line The line to parse.
-   */
-  void  ParseVertex(const std::string& line);
-
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  /** File name */
-  std::string m_FileName;
-};
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8GraphFileReader.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.hxx b/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.hxx
deleted file mode 100644
index 2bab0d9fc2e0ef0ce2398a2fcadff43e9426a21d..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileReader.hxx
+++ /dev/null
@@ -1,159 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8GraphFileReader_hxx
-#define otbRCC8GraphFileReader_hxx
-
-#include "otbRCC8GraphFileReader.h"
-#include "otbRCC8VertexIterator.h"
-#include "otbMacro.h"
-#include <fstream>
-#include <iostream>
-#include <string>
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TOutputGraph>
-RCC8GraphFileReader<TOutputGraph>
-::RCC8GraphFileReader()
-{
-  m_FileName = "";
-}
-/**
- * Destructor
- */
-template <class TOutputGraph>
-RCC8GraphFileReader<TOutputGraph>
-::~RCC8GraphFileReader()
-{
-}
-/**
- * Parse edge information from a given line.
- * \param line The line to parse.
- */
-template <class TOutputGraph>
-void
-RCC8GraphFileReader<TOutputGraph>
-::ParseEdge(const std::string& line)
-{
-  typename std::string::size_type pos1 = line.find_first_of(" ", 0);
-  typename std::string::size_type pos2 = line.find_first_of(" ", pos1 + 1);
-  typename std::string::size_type pos3 = line.find_first_of(" ", pos2 + 1);
-  unsigned int                    source = atoi(line.substr(0, pos1).c_str());
-  unsigned int                    target = atoi(line.substr(pos2 + 1, pos3 - pos2 - 1).c_str());
-  typename std::string::size_type pos4 = line.find_first_of("\"", 0);
-  typename std::string::size_type pos5 = line.find_first_of("\" ", pos4 + 1);
-  RCC8ValueType                   value = static_cast<RCC8ValueType>(atoi(line.substr(pos4 + 1, pos5 - pos4 - 1).c_str()));
-  otbMsgDevMacro(<< "RCC8GraphFileReader: Edge line parsed: " << source << " -> "
-                 << target << " " << value);
-  this->GetOutput()->AddEdge(source, target, value);
-}
-/**
- * Parse vertex information from a given line.
- * \param line The line to parse.
- */
-template <class TOutputGraph>
-void
-RCC8GraphFileReader<TOutputGraph>
-::ParseVertex(const std::string& line)
-{
-  typename VertexType::AttributesMapType attr;
-  typename std::string::size_type        pos = line.find_first_of(" ", 0);
-  unsigned int                           index = atoi(line.substr(0, pos).c_str());
-  otbMsgDevMacro(<< "RCC8GraphFileReader: Vertex index: " << index);
-  typename std::string::size_type midPos, nextPos;
-
-  midPos = line.find_first_of("\"", pos + 2);
-  nextPos = line.find_first_of("\"", midPos + 1);
-  std::string key, value;
-  while ((midPos != std::string::npos) && (nextPos != std::string::npos))
-    {
-    key = line.substr(pos + 2, midPos - pos - 3);
-    value = line.substr(midPos + 1, nextPos - midPos - 1);
-    attr[key] = value;
-    otbMsgDevMacro(<< "RCC8GraphFileReader: Vertex attribute: " << key << " " << value);
-    pos = nextPos;
-    midPos = line.find_first_of("\"", pos + 2);
-    nextPos = line.find_first_of("\"", midPos + 1);
-    }
-  typename VertexType::Pointer vertex  = VertexType::New();
-  vertex->SetAttributesMap(attr);
-  this->GetOutput()->SetVertex(index, vertex);
-}
-
-/**
- * Generate data method
- */
-template <class TOutputGraph>
-void
-RCC8GraphFileReader<TOutputGraph>
-::GenerateData()
-{
-  std::ifstream fin;
-  std::string   line;
-
-  // open file input stream
-  fin.open(m_FileName);
-
-  // Test if the file has been opened correctly
-  if (!fin)
-    {
-    RCC8GraphFileReaderException e(__FILE__, __LINE__);
-    std::ostringstream msg;
-    msg << " Could not create IO object for file ";
-    msg << m_FileName << "." << std::endl;
-    e.SetDescription(msg.str());
-    throw e;
-    return;
-    }
-
-  // if so, parse it
-  while (!fin.eof())
-    {
-    std::getline(fin, line);
-    if (line.find("->") != std::string::npos)
-      {
-      // edge line
-      this->ParseEdge(line);
-      }
-    else if (line.find("[") != std::string::npos)
-      {
-      // vertex line
-      this->ParseVertex(line);
-      }
-    }
-  fin.close();
-}
-/**
- * PrintSelf method
- */
-template <class TInputGraph>
-void
-RCC8GraphFileReader<TInputGraph>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // end namespace otb
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h b/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h
deleted file mode 100644
index 4e4284dde3abfd86f2f5dc5a5e996c98d82c924c..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.h
+++ /dev/null
@@ -1,160 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8GraphFileWriter_h
-#define otbRCC8GraphFileWriter_h
-
-#include "itkProcessObject.h"
-#include "itkMacro.h"
-#include "otbRCC8Graph.h"
-#include <string>
-
-namespace otb
-{
-/** \class RCC8GraphFileWriterException
- * \brief Base exception class for IO problems during writing.
- *
- * \ingroup OTBRCC8
- */
-class ITK_EXPORT RCC8GraphFileWriterException
-  : public itk::ExceptionObject
-{
-public:
-  /** Run-time information. */
-  itkTypeMacro(RCC8GraphFileWriterException, ExceptionObject);
-
-  /** Constructor. */
-  RCC8GraphFileWriterException(const char *file, unsigned int line,
-                               const char* message = "Error in IO",
-                               const char* loc = "Unknown") :
-    ExceptionObject(file, line, message, loc) {}
-  /** Constructor. */
-  RCC8GraphFileWriterException(const std::string & file, unsigned int line,
-                               const char* message = "Error in IO",
-                               const char* loc = "Unknown") :
-    ExceptionObject(file, line, message, loc) {}
-};
-/**
- * \class RCC8GraphFileWriter
- * \brief This class writes a RCC8 Graph to a dot file (graphviz file format).
- *
- * The writer first loops on the vertices of the graph, getting the property map
- * from each vertex and printing it in a line.
- *
- * It then iterates on the edges of the graphs, printing source index, target index,
- * and RCC8 value in a line for each of them.
- *
- * \sa RCC8GraphFileReader
- * \sa RCC8Graph
- *
- * \ingroup OTBRCC8
- */
-template <class TInputGraph>
-class ITK_EXPORT RCC8GraphFileWriter
-  : public itk::ProcessObject
-{
-public:
-  /** Standards typedefs */
-  typedef RCC8GraphFileWriter           Self;
-  typedef itk::ProcessObject            Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Method for creation through the object factory */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(RCC8GraphFileWriter, ProcessObject);
-  /** Typedefs for the output graph type */
-  typedef TInputGraph                                   InputGraphType;
-  typedef typename InputGraphType::Pointer              InputGraphPointerType;
-  typedef typename InputGraphType::VertexType           VertexType;
-  typedef typename VertexType::Pointer                  VertexPointerType;
-  typedef typename InputGraphType::VertexDescriptorType VertexDescriptorType;
-  typedef typename InputGraphType::RCC8ValueType        RCC8ValueType;
-  typedef typename VertexType::AttributesMapType        AttributesMapType;
-  typedef typename AttributesMapType::iterator          IteratorType;
-
-  /** Set the filename */
-  itkSetStringMacro(FileName);
-  /** Get the filename */
-  itkGetStringMacro(FileName);
-
-  using Superclass::SetInput;
-  /**
-   * Set the input graph.
-   * \param inputGraph The graph to write.
-   */
-  virtual void SetInput(const InputGraphType* inputGraph);
-  /**
-   * Get the input graph.
-   * \return The input graph pointer.
-   */
-  virtual InputGraphPointerType GetInput();
-  /**
-   * Update method.
-   */
-  void Update(void) override;
-
-protected:
-  /** Constructor */
-  RCC8GraphFileWriter();
-  /** Destructor */
-  ~RCC8GraphFileWriter() override;
-  /**
-   * Main computation method.
-   */
-  void GenerateData(void) override;
-  /**
-   * Write Method.
-   * Performs checkings and invoke GenerateData().
-   */
-  virtual void Write(void);
-  /**
-   * Write an edge to file.
-   * \param of The output file stream.
-   * \param source The index of the source vertex.
-   * \param target The index of the target vertex.
-   * \param value  The value of the edge.
-   */
-  void WriteEdge(std::ofstream& of, VertexDescriptorType source,
-                 VertexDescriptorType target, RCC8ValueType value);
-  /**
-   * Write a vertex to file.
-   * \param of The output file stream.
-   * \param index The index of the edge to write.
-   * \param vertex The pointer to the vertex object.
-  */
-  void WriteVertex(std::ofstream& of, VertexDescriptorType index,
-                   VertexPointerType vertex);
-  /**
-   * PrintSelf method
-   */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  /** Filename of the graph file to write */
-  std::string m_FileName;
-};
-} // namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8GraphFileWriter.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.hxx b/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.hxx
deleted file mode 100644
index c864a7c47b9ee4b17f187ad5d0b7059c43cc575a..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphFileWriter.hxx
+++ /dev/null
@@ -1,236 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8GraphFileWriter_hxx
-#define otbRCC8GraphFileWriter_hxx
-
-#include "otbRCC8GraphFileWriter.h"
-#include "otbRCC8VertexIterator.h"
-#include "otbRCC8EdgeIterator.h"
-#include "otbMacro.h"
-#include <fstream>
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TInputGraph>
-RCC8GraphFileWriter<TInputGraph>
-::RCC8GraphFileWriter()
-{
-  this->SetNumberOfRequiredInputs(1);
-  m_FileName = "";
-}
-/**
- * Destructor
- */
-template <class TInputGraph>
-RCC8GraphFileWriter<TInputGraph>
-::~RCC8GraphFileWriter()
-{
-}
-/**
- * Set the input graph.
- * \param graph The graph to write.
- */
-template <class TInputGraph>
-void
-RCC8GraphFileWriter<TInputGraph>
-::SetInput(const InputGraphType * graph)
-{
-  this->itk::ProcessObject::SetNthInput(0, const_cast<TInputGraph *>(graph));
-}
-/**
- * Get the input graph.
- * \return The input graph pointer.
- */
-template <class TInputGraph>
-typename RCC8GraphFileWriter<TInputGraph>
-::InputGraphPointerType
-RCC8GraphFileWriter<TInputGraph>
-::GetInput(void)
-{
-  return static_cast<TInputGraph*>(this->itk::ProcessObject::GetInput(0));
-}
-/**
- * Update method.
- * (Call the Write() method).
- */
-template <class TInputGraph>
-void
-RCC8GraphFileWriter<TInputGraph>
-::Update(void)
-{
-  this->Write();
-}
-/**
- * Write Method.
- * Performs checkings and invoke GenerateData().
- */
-template <class TInputGraph>
-void
-RCC8GraphFileWriter<TInputGraph>
-::Write(void)
-{
-  InputGraphType * input = this->GetInput();
-
-  itkDebugMacro(<< "Writing a RCC8Graph file");
-
-  // Make sure input is available
-  if (input == nullptr)
-    {
-    itkExceptionMacro(<< "No input to writer!");
-    }
-
-  // Make sure that we can write the file given the name
-  //
-  if (m_FileName == "")
-    {
-    itkExceptionMacro(<< "No filename was specified");
-    }
-
-  // Pipeline updating sequence
-  input->UpdateOutputInformation();
-  input->PropagateRequestedRegion();
-  input->UpdateOutputData();
-  // GenerateData (actually write file)
-  this->GenerateData();
-}
-/**
- * Main computation method.
- */
-template <class TInputGraph>
-void
-RCC8GraphFileWriter<TInputGraph>
-::GenerateData()
-{
-  otbMsgDevMacro(<< "RCC8GraphFileWriter: GenerateData call");
-  // input graph pointer
-  InputGraphPointerType input = this->GetInput();
-
-  // iterators typedefs
-  typedef otb::RCC8VertexIterator<InputGraphType> VertexIteratorType;
-  typedef otb::RCC8EdgeIterator<InputGraphType>   EdgeIteratorType;
-
-  // Output file stream
-  std::ofstream out;
-
-  // open the outputfile
-  out.open(m_FileName, std::ios::out);
-
-  // Test if the file has been opened correctly
-  if (!out)
-    {
-    RCC8GraphFileWriterException e(__FILE__, __LINE__);
-    std::ostringstream msg;
-    msg << " Could not create IO object for file ";
-    msg << m_FileName << "." << std::endl;
-    e.SetDescription(msg.str());
-    throw e;
-    return;
-    }
-
-  // Start writing the graph to file
-  out << "digraph G {" << std::endl;
-
-  // For each vertex in the graph
-  VertexIteratorType vIt(input);
-  for (vIt.GoToBegin(); !vIt.IsAtEnd(); ++vIt)
-    {
-    this->WriteVertex(out, vIt.GetIndex(), vIt.Get());
-    }
-
-  // For each edge in the graph
-  EdgeIteratorType eIt(input);
-  for (eIt.GoToBegin(); !eIt.IsAtEnd(); ++eIt)
-    {
-    this->WriteEdge(out, eIt.GetSourceIndex(),
-                    eIt.GetTargetIndex(),
-                    eIt.GetValue());
-    }
-
-  // Ends the graph writing
-  out << "}" << std::endl;
-
-  // Close the file
-  out.close();
-}
-/**
- * Write an edge to file.
- * \param of The output file stream.
- * \param source The index of the source vertex.
- * \param target The index of the target vertex.
- * \param value  The value of the edge.
- */
-template <class TInputGraph>
-void
-RCC8GraphFileWriter<TInputGraph>
-::WriteEdge(std::ofstream& of, VertexDescriptorType source,
-            VertexDescriptorType target, RCC8ValueType value)
-{
-  otbMsgDevMacro(<< "RCC8GraphFileWriter: WriteEdge call: " << source << " " << target << " " << value);
-  of << source << " -> " << target << " ";
-  of << "[Value=\"" << value << "\"];";
-  of << std::endl;
-}
-/**
- * Write a vertex to file.
- * \param of The output file stream.
- * \param index The index of the edge to write.
- * \param vertex The pointer to the vertex object.
- */
-template <class TInputGraph>
-void
-RCC8GraphFileWriter<TInputGraph>
-::WriteVertex(std::ofstream& of, VertexDescriptorType index,
-              VertexPointerType vertex)
-{
-  AttributesMapType attr = vertex->GetAttributesMap();
-  otbMsgDevMacro(<< "RCC8GraphFileWriter: WriteVertex call: " << index);
-  of << index << " [";
-  IteratorType it = attr.begin();
-  while (it != attr.end())
-    {
-    of << (*it).first << "=\"";
-    of << (*it).second << "\"";
-    ++it;
-    if (it == attr.end())
-      {
-      of << "];" << std::endl;
-      }
-    else
-      {
-      of << ",";
-      }
-    }
-}
-/**
- * PrintSelf method
- */
-template <class TInputGraph>
-void
-RCC8GraphFileWriter<TInputGraph>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h b/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h
deleted file mode 100644
index 2a893e4d6c653c67094e26ef0999723bc278878a..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8GraphSource_h
-#define otbRCC8GraphSource_h
-
-#include "itkProcessObject.h"
-
-namespace otb
-{
-/** \class RCC8GraphSource
- *  \brief Base class for all the filters producing an otbRCC8Graph
- * \ingroup DataSources
- *
- * \ingroup OTBRCC8
- */
-template <class TOutputGraph>
-class ITK_EXPORT RCC8GraphSource
-  : public itk::ProcessObject
-{
-public:
-  /** Standard typedefs */
-  typedef RCC8GraphSource               Self;
-  typedef itk::ProcessObject            Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Type macro */
-  itkNewMacro(Self);
-  /** Creation through object factory macro */
-  itkTypeMacro(RCC8GraphSource, itk::ProcessObject);
-  /** Data object pointer type */
-  typedef itk::DataObject::Pointer DataObjectPointer;
-  /** Template parameter typedef*/
-  typedef TOutputGraph                      OutputGraphType;
-  typedef typename OutputGraphType::Pointer OutputGraphPointerType;
-  /** Overriding of the GetOutput() method */
-  virtual OutputGraphType * GetOutput(void);
-
-protected:
-  /** Constructor */
-  RCC8GraphSource();
-  /** Destructor */
-  ~RCC8GraphSource() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  RCC8GraphSource(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8GraphSource.hxx"
-#endif
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.hxx b/Modules/OBIA/RCC8/include/otbRCC8GraphSource.hxx
deleted file mode 100644
index ce8d6b707213701de9078dc906c0d4ecedef81bc..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8GraphSource.hxx
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8GraphSource_hxx
-#define otbRCC8GraphSource_hxx
-
-#include "otbRCC8GraphSource.h"
-
-namespace otb
-{
-/**
- *   Constructor
- */
-template <class TOutputGraph>
-RCC8GraphSource<TOutputGraph>
-::RCC8GraphSource()
-{
-  this->Superclass::SetNumberOfRequiredOutputs(1);
-  this->Superclass::SetNthOutput(0, TOutputGraph::New().GetPointer());
-}
-/**
- * Get the output Graph
- * \return The output graph produced.
- */
-template <class TOutputGraph>
-typename RCC8GraphSource<TOutputGraph>::OutputGraphType *
-RCC8GraphSource<TOutputGraph>
-::GetOutput(void)
-{
-  if (this->GetNumberOfOutputs() < 1)
-    {
-    return nullptr;
-    }
-  return static_cast<OutputGraphType *> (this->ProcessObject::GetOutput(0));
-}
-/**
- * PrintSelf Method
- */
-template<class TOutputGraph>
-void
-RCC8GraphSource<TOutputGraph>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.h b/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.h
deleted file mode 100644
index 8c3242ed14651805c7eee908bb8edb18a5362ca4..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8InEdgeIterator_h
-#define otbRCC8InEdgeIterator_h
-
-#include "otbRCC8Graph.h"
-
-namespace otb
-{
-/**
- * \class RCC8InEdgeIterator
- * \brief Iterates on the graph in edges from a vertex.
- *
- * \ingroup OTBRCC8
- */
-template <class TGraph>
-class ITK_EXPORT RCC8InEdgeIterator
-{
-public:
-  /** self typedef */
-  typedef RCC8InEdgeIterator Self;
-
-  /** Graph typedef */
-  typedef TGraph                                   GraphType;
-  typedef typename GraphType::InternalGraphType    InternalGraphType;
-  typedef typename GraphType::Pointer              GraphPointerType;
-  typedef typename GraphType::EdgePointerType      EdgePointerType;
-  typedef typename GraphType::VertexPointerType    VertexPointerType;
-  typedef typename GraphType::VertexDescriptorType VertexDescriptorType;
-  typedef typename GraphType::RCC8ValueType        RCC8ValueType;
-  /** typedef of the internal iterator */
-  typedef typename boost::graph_traits<InternalGraphType>::in_edge_iterator InternalIteratorType;
-  /** Typedef of the index map */
-  typedef typename boost::property_map<InternalGraphType, boost::vertex_index_t>::type IndexMapType;
-
-  /** Constructor */
-  RCC8InEdgeIterator();
-  /** Copy constructor */
-  RCC8InEdgeIterator(const Self &iter);
-  /**  Constructor with input graph */
-  RCC8InEdgeIterator(VertexDescriptorType vertex, GraphType * graph);
-  /**
-   * Get the current edge value.
-   * \return The value of the current edge pointed by the iterator.
-   */
-  RCC8ValueType GetValue(void);
-  /**
-    * Return the source vertex of the current edge.
-    * \return The source edge.
-    */
-  VertexPointerType GetSourceVertex(void);
-  /**
-   * Return the source vertex index of the current edge.
-   * \return The source vertex index.
-   */
-  VertexDescriptorType GetSourceIndex(void);
-  /**
-   * Return true if the iterator is at the end.
-   * \return True if the iterator is at the end.
-   */
-  bool IsAtEnd(void);
-  /**
-   * Go to the beginning.
-   */
-  void GoToBegin(void);
-  /**
-   * Increment.
-   */
-  Self& operator ++();
-  /**
-   * Decrement.
-   */
-  Self& operator --();
-  /**
-   * Add
-   */
-  Self& operator +(int i);
-
-  /**
-   * Remove
-   */
-  Self& operator -(int i);
-  /**
-   * Difference comparison operator.
-   */
-  bool operator !=(const Self& it);
-  /**
-   * Equality comparison operator.
-   */
-  bool operator ==(const Self& it);
-  /**
-   * Instantiation operator.
-   */
-  Self& operator =(const Self& it);
-private:
-  // End
-  InternalIteratorType m_End;
-  // Internal iterator.
-  InternalIteratorType m_Iter;
-  // Input graph pointer
-  GraphPointerType m_Graph;
-  // Target vertex index
-  VertexDescriptorType m_VertexIndex;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8InEdgeIterator.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.hxx b/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.hxx
deleted file mode 100644
index 5fb34dce81bd7e9f27a2b24dc2e3c851bcce20da..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8InEdgeIterator.hxx
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8InEdgeIterator_hxx
-#define otbRCC8InEdgeIterator_hxx
-
-#include "otbRCC8InEdgeIterator.h"
-
-namespace otb
-{
-/** Constructor */
-template <class TGraph>
-RCC8InEdgeIterator<TGraph>
-::RCC8InEdgeIterator()
-{
-  m_Graph = GraphType::New();
-  boost::tuples::tie(m_Iter, m_End) = in_edges(0, *m_Graph->GetGraph());
-}
-/**
- * Copy operator.
- */
-template <class TGraph>
-RCC8InEdgeIterator<TGraph>
-::RCC8InEdgeIterator(const Self& iter)
-{
-  m_Iter = iter.m_Iter;
-  m_Graph = iter.m_Graph;
-  m_VertexIndex = iter.m_VertexIndex;
-  m_End = iter.m_End;
-}
-/**
- *Constructor with input graph
- */
-template <class TGraph>
-RCC8InEdgeIterator<TGraph>
-::RCC8InEdgeIterator(VertexDescriptorType vertex, GraphType * graph)
-{
-  m_Graph = graph;
-  m_VertexIndex = vertex;
-  boost::tuples::tie(m_Iter, m_End) = in_edges(vertex, *m_Graph->GetGraph());
-}
-/**
- * Get the current edge value.
- * \return The value of the current edge pointed by the iterator.
- */
-template <class TGraph>
-typename RCC8InEdgeIterator<TGraph>
-::RCC8ValueType
-RCC8InEdgeIterator<TGraph>
-::GetValue(void)
-{
-  return (*m_Graph->GetGraph())[*m_Iter]->GetValue();
-}
-/**
- * Return the source vertex of the current edge.
- * \return The source edge.
- */
-template <class TGraph>
-typename RCC8InEdgeIterator<TGraph>
-::VertexPointerType
-RCC8InEdgeIterator<TGraph>
-::GetSourceVertex(void)
-{
-  return (*m_Graph->GetGraph())[source(*m_Iter, (*m_Graph->GetGraph()))];
-}
-/**
- * Return the source vertex index of the current edge.
- * \return The source vertex index.
- */
-template <class TGraph>
-typename RCC8InEdgeIterator<TGraph>
-::VertexDescriptorType
-RCC8InEdgeIterator<TGraph>
-::GetSourceIndex(void)
-{
-  IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph()));
-  return index[source(*m_Iter, (*m_Graph->GetGraph()))];
-}
-/**
- * Return true if the iterator is at the end.
- * \return True if the iterator is at the end.
- */
-template <class TGraph>
-bool
-RCC8InEdgeIterator<TGraph>
-::IsAtEnd(void)
-{
-  return (m_Iter == m_End);
-}
-/**
- * Go to the beginning.
- */
-template <class TGraph>
-void
-RCC8InEdgeIterator<TGraph>
-::GoToBegin(void)
-{
-  boost::tuples::tie(m_Iter, m_End) = in_edges(m_VertexIndex, *m_Graph->GetGraph());
-}
-/**
- * Increment.
- */
-template <class TGraph>
-typename RCC8InEdgeIterator<TGraph>
-::Self&
-RCC8InEdgeIterator<TGraph>
-::operator++ ()
-  {
-  ++m_Iter;
-  return *this;
-  }
-/**
- * Decrement.
- */
-template <class TGraph>
-typename RCC8InEdgeIterator<TGraph>
-::Self&
-RCC8InEdgeIterator<TGraph>
-::operator-- ()
-  {
-  --m_Iter;
-  return *this;
-  }
-/**
- * Add
- */
-template <class TGraph>
-typename RCC8InEdgeIterator<TGraph>
-::Self&
-RCC8InEdgeIterator<TGraph>
-::operator + (int i)
-  {
-  m_Iter = m_Iter + i;
-  return *this;
-  }
-/**
- * Remove
- */
-template <class TGraph>
-typename RCC8InEdgeIterator<TGraph>
-::Self&
-RCC8InEdgeIterator<TGraph>
-::operator - (int i)
-  {
-  m_Iter = m_Iter - i;
-  return *this;
-  }
-/**
- * Difference comparison operator.
- */
-template <class TGraph>
-bool
-RCC8InEdgeIterator<TGraph>
-::operator != (const Self &iter)
-  {
-  return (m_Iter != iter.m_Iter);
-  }
-/**
- * Equality comparison operator.
- */
-template <class TGraph>
-bool
-RCC8InEdgeIterator<TGraph>
-::operator == (const Self &iter)
-  {
-  return (m_Iter == iter.m_Iter);
-  }
-/**
- * Instantiation operator.
- */
-template <class TGraph>
-typename RCC8InEdgeIterator<TGraph>
-::Self&
-RCC8InEdgeIterator<TGraph>
-::operator = (const Self &iter)
-  {
-  m_Iter = iter.m_Iter;
-  return *this;
-  }
-} // End namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.h b/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.h
deleted file mode 100644
index 3d22bc092c7d8fcc56d71ccb350faca408442961..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.h
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8OutEdgeIterator_h
-#define otbRCC8OutEdgeIterator_h
-
-#include "otbRCC8Graph.h"
-
-namespace otb
-{
-/**
- * \class RCC8OutEdgeIterator
- * \brief Iterates on the graph out edges from a vertex.
- *
- * \ingroup OTBRCC8
- */
-template <class TGraph>
-class ITK_EXPORT RCC8OutEdgeIterator
-{
-public:
-  /** self typedef */
-  typedef RCC8OutEdgeIterator Self;
-
-  /** Graph typedef */
-  typedef TGraph                                   GraphType;
-  typedef typename GraphType::InternalGraphType    InternalGraphType;
-  typedef typename GraphType::Pointer              GraphPointerType;
-  typedef typename GraphType::EdgePointerType      EdgePointerType;
-  typedef typename GraphType::VertexPointerType    VertexPointerType;
-  typedef typename GraphType::VertexDescriptorType VertexDescriptorType;
-  typedef typename GraphType::RCC8ValueType        RCC8ValueType;
-  /** typedef of the internal iterator */
-  typedef typename boost::graph_traits<InternalGraphType>::out_edge_iterator InternalIteratorType;
-  /** Typedef of the index map */
-  typedef typename boost::property_map<InternalGraphType, boost::vertex_index_t>::type IndexMapType;
-
-  /** Constructor */
-  RCC8OutEdgeIterator();
-  /** Copy constructor */
-  RCC8OutEdgeIterator(const Self &iter);
-  /**  Constructor with input graph */
-  RCC8OutEdgeIterator(VertexDescriptorType vertex, TGraph * graph);
-  /**
-   * Get the current edge value.
-   * \return The value of the current edge pointed by the iterator.
-   */
-  RCC8ValueType GetValue(void);
-  /**
-   * Return the target vertex of the current edge.
-   * \return The target vertex.
-   */
-  VertexPointerType GetTargetVertex(void);
-  /**
-   * Return the target vertex index of the current edge.
-   * \return The target vertex index.
-   */
-  VertexDescriptorType GetTargetIndex(void);
-
-  /**
-   * Return true if the iterator is at the end.
-   * \return True if the iterator is at the end.
-   */
-  bool IsAtEnd(void);
-  /**
-   * Go to the beginning.
-   */
-  void GoToBegin(void);
-  /**
-   * Increment.
-   */
-  Self& operator ++();
-  /**
-   * Decrement.
-   */
-  Self& operator --();
-  /**
-   * Add
-   */
-  Self& operator +(int i);
-  /**
-   * Remove
-   */
-  Self& operator -(int i);
-  /**
-   * Difference comparison operator.
-   */
-  bool operator !=(const Self& it);
-  /**
-   * Equality comparison operator.
-   */
-  bool operator ==(const Self& it);
-  /**
-   * Instantiation operator.
-   */
-  Self& operator =(const Self& it);
-private:
-  // End
-  InternalIteratorType m_End;
-  // Internal iterator.
-  InternalIteratorType m_Iter;
-  // Input graph pointer
-  GraphPointerType m_Graph;
-  // source vertex descriptor
-  VertexDescriptorType m_VertexIndex;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8OutEdgeIterator.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.hxx b/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.hxx
deleted file mode 100644
index 811e850eda67dcac88f74c85c8f44369b92c413e..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8OutEdgeIterator.hxx
+++ /dev/null
@@ -1,198 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8OutEdgeIterator_hxx
-#define otbRCC8OutEdgeIterator_hxx
-
-#include "otbRCC8OutEdgeIterator.h"
-
-namespace otb
-{
-/** Constructor */
-template <class TGraph>
-RCC8OutEdgeIterator<TGraph>
-::RCC8OutEdgeIterator()
-{
-  m_Graph = GraphType::New();
-  tie(m_Iter, m_End) = out_edges(0, *m_Graph->GetGraph());
-}
-/**
- * Copy operator.
- */
-template <class TGraph>
-RCC8OutEdgeIterator<TGraph>
-::RCC8OutEdgeIterator(const Self& iter)
-{
-  m_Iter = iter.m_Iter;
-  m_Graph = iter.m_Graph;
-  m_VertexIndex = iter.m_VertexIndex;
-  m_End = iter.m_End;
-}
-/**
- *Constructor with input graph
- */
-template <class TGraph>
-RCC8OutEdgeIterator<TGraph>
-::RCC8OutEdgeIterator(VertexDescriptorType vertex, TGraph * graph)
-{
-  m_Graph = graph;
-  m_VertexIndex = vertex;
-  tie(m_Iter, m_End) = out_edges(vertex, *m_Graph->GetGraph());
-}
-/**
- * Get the current edge value.
- * \return The value of the current edge pointed by the iterator.
- */
-template <class TGraph>
-typename RCC8OutEdgeIterator<TGraph>
-::RCC8ValueType
-RCC8OutEdgeIterator<TGraph>
-::GetValue(void)
-{
-  return (*m_Graph->GetGraph())[*m_Iter]->GetValue();
-}
-/**
- * Return the target vertex of the current edge.
- * \return The target vertex.
- */
-template <class TGraph>
-typename RCC8OutEdgeIterator<TGraph>
-::VertexPointerType
-RCC8OutEdgeIterator<TGraph>
-::GetTargetVertex(void)
-{
-  return (*m_Graph->GetGraph())[target(*m_Iter, (*m_Graph->GetGraph()))];
-}
-/**
- * Return the target vertex index of the current edge.
- * \return The target vertex index.
- */
-template <class TGraph>
-typename RCC8OutEdgeIterator<TGraph>
-::VertexDescriptorType
-RCC8OutEdgeIterator<TGraph>
-::GetTargetIndex(void)
-{
-  IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph()));
-  return index[target(*m_Iter, (*m_Graph->GetGraph()))];
-}
-/**
- * Return true if the iterator is at the end.
- * \return True if the iterator is at the end.
- */
-template <class TGraph>
-bool
-RCC8OutEdgeIterator<TGraph>
-::IsAtEnd(void)
-{
-  return (m_Iter == m_End);
-}
-/**
- * Go to the beginning.
- */
-template <class TGraph>
-void
-RCC8OutEdgeIterator<TGraph>
-::GoToBegin(void)
-{
-  tie(m_Iter, m_End) = out_edges(m_VertexIndex, *m_Graph->GetGraph());
-}
-/**
- * Increment.
- */
-template <class TGraph>
-typename RCC8OutEdgeIterator<TGraph>
-::Self&
-RCC8OutEdgeIterator<TGraph>
-::operator++ ()
-  {
-  ++m_Iter;
-  return *this;
-  }
-/**
- * Decrement.
- */
-template <class TGraph>
-typename RCC8OutEdgeIterator<TGraph>
-::Self&
-RCC8OutEdgeIterator<TGraph>
-::operator-- ()
-  {
-  --m_Iter;
-  return *this;
-  }
-/**
- * Add
- */
-template <class TGraph>
-typename RCC8OutEdgeIterator<TGraph>
-::Self&
-RCC8OutEdgeIterator<TGraph>
-::operator + (int i)
-  {
-  m_Iter = m_Iter + i;
-  return *this;
-  }
-/**
- * Remove
- */
-template <class TGraph>
-typename RCC8OutEdgeIterator<TGraph>
-::Self&
-RCC8OutEdgeIterator<TGraph>
-::operator - (int i)
-  {
-  m_Iter = m_Iter - i;
-  return *this;
-  }
-/**
- * Difference comparison operator.
- */
-template <class TGraph>
-bool
-RCC8OutEdgeIterator<TGraph>
-::operator != (const Self &iter)
-  {
-  return (m_Iter != iter.m_Iter);
-  }
-/**
- * Equality comparison operator.
- */
-template <class TGraph>
-bool
-RCC8OutEdgeIterator<TGraph>
-::operator == (const Self &iter)
-  {
-  return (m_Iter == iter.m_Iter);
-  }
-/**
- * Instantiation operator.
- */
-template <class TGraph>
-typename RCC8OutEdgeIterator<TGraph>
-::Self&
-RCC8OutEdgeIterator<TGraph>
-::operator = (const Self &iter)
-  {
-  m_Iter = iter.m_Iter;
-  return *this;
-  }
-} // End namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h b/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h
deleted file mode 100644
index 3876c423319ecb4768529dbaa454a7d1f1e14bb4..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8VertexBase_h
-#define otbRCC8VertexBase_h
-
-#include "itkDataObject.h"
-#include "itkObjectFactory.h"
-#include <cstdlib>
-
-namespace otb
-{
-/** \class RCC8VertexBase
- *  \brief Base class to represent a vertex in a RCC8 Graph.
- *
- *  This class can be derived to add attributes to the vertices of the
- *  RCC8 graph.
- *
- * \sa RCC8Graph, RCC8Edge
- *
- * \ingroup OTBRCC8
- */
-template <class TPath>
-class ITK_EXPORT RCC8VertexBase
-  : public itk::DataObject
-{
-public:
-  /** Standard class typedefs */
-  typedef RCC8VertexBase                Self;
-  typedef itk::DataObject               Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(RCC8VertexBase, DataObject);
-  /** Input image associated typedefs*/
-  typedef TPath                                  PathType;
-  typedef typename PathType::Pointer             PathPointerType;
-  typedef typename PathType::ContinuousIndexType ContinuousIndexType;
-
-  /** char* vector attributes */
-  typedef std::map<std::string, std::string> AttributesMapType;
-
-  /** Segmentation image index accessors */
-  itkGetMacro(SegmentationLevel, unsigned int);
-  itkSetMacro(SegmentationLevel, unsigned int);
-  itkGetMacro(SegmentationType, bool);
-  itkSetMacro(SegmentationType, bool);
-  /** Object label in image accessor */
-  itkGetObjectMacro(Path, PathType);
-  itkSetObjectMacro(Path, PathType);
-  /**
-   * Set the VertexBase attributes from the attributes vector.
-   * \param attributes The vector containing the parsed attributes.
-   */
-  virtual void SetAttributesMap(AttributesMapType attributes);
-  /**
-   * Get an attributes vector representing the VertexBase attributes.
-   * \return The attributes vector
-   */
-  virtual AttributesMapType GetAttributesMap(void);
-
-protected:
-  /** Constructor */
-  RCC8VertexBase();
-  /** Desctructor */
-  ~RCC8VertexBase() override {}
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  /** The segmentation level */
-  unsigned int m_SegmentationLevel;
-  /** True if bright details, false otherwise */
-  bool m_SegmentationType;
-  /** The path of the edge of the region */
-  PathPointerType m_Path;
-};
-} // end namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8VertexBase.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.hxx b/Modules/OBIA/RCC8/include/otbRCC8VertexBase.hxx
deleted file mode 100644
index 3464483c73676d4ef2b909bc129cfd34058570cb..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexBase.hxx
+++ /dev/null
@@ -1,125 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8VertexBase_hxx
-#define otbRCC8VertexBase_hxx
-
-#include "otbRCC8VertexBase.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TPath>
-RCC8VertexBase<TPath>
-::RCC8VertexBase()
-{
-  m_SegmentationLevel = 0;
-  m_SegmentationType = true;
-  m_Path = PathType::New();
-  m_Path->Initialize();
-}
-/**
- * Set the VertexBase attributes from the attributes vector.
- * \param attributes The vector containing the parsed attributes.
- */
-template <class TPath>
-void
-RCC8VertexBase<TPath>
-::SetAttributesMap(AttributesMapType attributes)
-{
-  m_SegmentationLevel = static_cast<unsigned int>(atoi(attributes["SegmentationLevel"].c_str()));
-  m_SegmentationType = static_cast<bool>(atoi(attributes["SegmentationType"].c_str()));
-  unsigned int nbPoints = static_cast<unsigned int>(atoi(attributes["NumberOfPointsInPath"].c_str()));
-
-  std::ostringstream oss;
-
-  m_Path = PathType::New();
-  m_Path->Initialize();
-
-  for (unsigned int i = 0; i < nbPoints; ++i)
-    {
-    ContinuousIndexType newPoint;
-    oss << "P" << i << "x";
-    newPoint[0] = atof(attributes[oss.str()].c_str());
-    oss.str("");
-    oss << "P" << i << "y";
-    newPoint[1] = atof(attributes[oss.str()].c_str());
-    oss.str("");
-    m_Path->AddVertex(newPoint);
-    }
-}
-/**
- * Get an attributes vector representing the VertexBase attributes.
- * \return The attributes vector
- */
-template <class TPath>
-typename RCC8VertexBase<TPath>::AttributesMapType
-RCC8VertexBase<TPath>
-::GetAttributesMap(void)
-{
-  std::ostringstream oss;
-  AttributesMapType  results;
-  oss << m_SegmentationLevel;
-  results["SegmentationLevel"] = oss.str();
-  oss.str("");
-  oss << m_SegmentationType;
-  results["SegmentationType"] = oss.str();
-  oss.str("");
-  oss << m_Path->GetVertexList()->Size();
-  results["NumberOfPointsInPath"] = oss.str();
-  oss.str("");
-
-  typename PathType::VertexListType::ConstIterator it;
-  unsigned int                                     index = 0;
-
-  for (it = m_Path->GetVertexList()->Begin(); it != m_Path->GetVertexList()->End(); ++it, ++index)
-    {
-    ContinuousIndexType point = it.Value();
-    oss << "P" << index << "x";
-    std::string key = oss.str();
-    oss.str("");
-    oss << point[0];
-    results[key] = oss.str();
-    oss.str("");
-    oss << "P" << index << "y";
-    key = oss.str();
-    oss.str("");
-    oss << point[1];
-    results[key] = oss.str();
-    oss.str("");
-    }
-  return results;
-}
-/**
- * PrintSelf method
- */
-template <class TPath>
-void
-RCC8VertexBase<TPath>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "SegmentationLevel: " << m_SegmentationLevel << std::endl;
-  os << indent << "SegmentationType: " << m_SegmentationType << std::endl;
-}
-} // end namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.h b/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.h
deleted file mode 100644
index 51d771e11ae2298f66fdacb4b2ec3c16e7a28cea..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.h
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8VertexIterator_h
-#define otbRCC8VertexIterator_h
-
-#include "otbRCC8Graph.h"
-
-namespace otb
-{
-/**
- * \class RCC8VertexIterator
- * \brief Iterates on the graph vertices
- *
- * \ingroup OTBRCC8
- */
-template <class TGraph>
-class ITK_EXPORT RCC8VertexIterator
-{
-public:
-  /** self typedef */
-  typedef RCC8VertexIterator Self;
-
-  /** Graph typedef */
-  typedef TGraph                                   GraphType;
-  typedef typename GraphType::InternalGraphType    InternalGraphType;
-  typedef typename GraphType::Pointer              GraphPointerType;
-  typedef typename GraphType::VertexPointerType    VertexPointerType;
-  typedef typename GraphType::VertexDescriptorType VertexDescriptorType;
-  /** typedef of the internal iterator */
-  typedef typename boost::graph_traits<InternalGraphType>::vertex_iterator InternalIteratorType;
-  /** Typedef of the index map */
-  typedef typename boost::property_map<InternalGraphType, boost::vertex_index_t>::type IndexMapType;
-  /** Constructor */
-  RCC8VertexIterator();
-  /** Copy constructor */
-  RCC8VertexIterator(const Self &iter);
-  /**  Constructor with input graph */
-  RCC8VertexIterator(TGraph * graph);
-  /**
-   * Get the current vertex.
-   * \return The current vertex pointed by the iterator.
-   */
-  VertexPointerType Get(void);
-  /**
-   * Set the current vertex.
-   * \param vertex The vertex to set.
-   */
-  void Set(VertexPointerType vertex);
-  /**
-   * Get the current vertex index.
-   * \return The current vertex index.
-   */
-  VertexDescriptorType GetIndex(void);
-  /**
-   * Return true if the iterator is at the end.
-   * \return True if the iterator is at the end.
-   */
-  bool IsAtEnd(void);
-  /**
-   * Go to the beginning.
-   */
-  void GoToBegin(void);
-  /**
-   * Increment.
-   */
-  Self& operator ++();
-  /**
-   * Decrement.
-   */
-  Self& operator --();
-  /**
-   * Add
-   */
-  Self& operator +(int i);
-
-  /**
-   * Remove
-   */
-  Self& operator -(int i);
-  /**
-   * Difference comparison operator.
-   */
-  bool operator !=(const Self& it);
-  /**
-   * Equality comparison operator.
-   */
-  bool operator ==(const Self& it);
-  /**
-   * Instantiation operator.
-   */
-  Self& operator =(const Self& it);
-private:
-  // End
-  InternalIteratorType m_End;
-  // Internal iterator.
-  InternalIteratorType m_Iter;
-  // Input graph pointer
-  GraphPointerType m_Graph;
-};
-} // End namespace otb
-
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8VertexIterator.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.hxx b/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.hxx
deleted file mode 100644
index 29d13da47d71fa201169c86f2c03f14a6fddbc21..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexIterator.hxx
+++ /dev/null
@@ -1,197 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8VertexIterator_hxx
-#define otbRCC8VertexIterator_hxx
-
-#include "otbRCC8VertexIterator.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TGraph>
-RCC8VertexIterator<TGraph>
-::RCC8VertexIterator()
-{
-  m_Graph = GraphType::New();
-  boost::tie(m_Iter, m_End) = boost::vertices(*(m_Graph->GetGraph()));
-}
-/**
- * Copy operator.
- */
-template <class TGraph>
-RCC8VertexIterator<TGraph>
-::RCC8VertexIterator(const Self& iter)
-{
-  m_Iter = iter.m_Iter;
-  m_Graph = iter.m_Graph;
-  m_End = iter.m_End;
-}
-/**
- *Constructor with input graph
- */
-template <class TGraph>
-RCC8VertexIterator<TGraph>
-::RCC8VertexIterator(TGraph * graph)
-{
-  m_Graph = graph;
-  boost::tie(m_Iter, m_End) = boost::vertices(*(m_Graph->GetGraph()));
-}
-/**
- * Get the current object.
- * \return The current object pointed by the iterator.
- */
-template <class TGraph>
-typename RCC8VertexIterator<TGraph>
-::VertexPointerType
-RCC8VertexIterator<TGraph>
-::Get(void)
-{
-  return (*(m_Graph->GetGraph()))[*m_Iter];
-}
-/**
- * Set the current vertex.
- * \param vertex The vertex to set.
- */
-template <class TGraph>
-void
-RCC8VertexIterator<TGraph>
-::Set(VertexPointerType vertex)
-{
-  (*(m_Graph->GetGraph()))[*m_Iter] = vertex;
-}
-/**
- * Get the current vertex index.
- * \return The current vertex index.
- */
-template <class TGraph>
-typename RCC8VertexIterator<TGraph>
-::VertexDescriptorType
-RCC8VertexIterator<TGraph>
-::GetIndex(void)
-{
-  IndexMapType index = get(boost::vertex_index, (*m_Graph->GetGraph()));
-  return index[*m_Iter];
-}
-/**
-  * Return true if the iterator is at the end.
-  * \return True if the iterator is at the end.
-  */
-template <class TGraph>
-bool
-RCC8VertexIterator<TGraph>
-::IsAtEnd(void)
-{
-  return (m_Iter == m_End);
-}
-/**
- * Go to the beginning.
- */
-template <class TGraph>
-void
-RCC8VertexIterator<TGraph>
-::GoToBegin(void)
-{
-  boost::tie(m_Iter, m_End) = boost::vertices(*(m_Graph->GetGraph()));
-}
-/**
- * Increment.
- */
-template <class TGraph>
-typename RCC8VertexIterator<TGraph>
-::Self&
-RCC8VertexIterator<TGraph>
-::operator++ ()
-  {
-  ++m_Iter;
-  return *this;
-  }
-/**
- * Decrement.
- */
-template <class TGraph>
-typename RCC8VertexIterator<TGraph>
-::Self&
-RCC8VertexIterator<TGraph>
-::operator-- ()
-  {
-  --m_Iter;
-  return *this;
-  }
-/**
- * Add
- */
-template <class TGraph>
-typename RCC8VertexIterator<TGraph>
-::Self&
-RCC8VertexIterator<TGraph>
-::operator + (int i)
-  {
-  m_Iter = m_Iter + i;
-  return *this;
-  }
-/**
- * Remove
- */
-template <class TGraph>
-typename RCC8VertexIterator<TGraph>
-::Self&
-RCC8VertexIterator<TGraph>
-::operator - (int i)
-  {
-  m_Iter = m_Iter - i;
-  return *this;
-  }
-/**
- * Difference comparison operator.
- */
-template <class TGraph>
-bool
-RCC8VertexIterator<TGraph>
-::operator != (const Self &iter)
-  {
-  return (m_Iter != iter.m_Iter);
-  }
-/**
- * Equality comparison operator.
- */
-template <class TGraph>
-bool
-RCC8VertexIterator<TGraph>
-::operator == (const Self &iter)
-  {
-  return (m_Iter == iter.m_Iter);
-  }
-/**
- * Instantiation operator.
- */
-template <class TGraph>
-typename RCC8VertexIterator<TGraph>
-::Self&
-RCC8VertexIterator<TGraph>
-::operator = (const Self &iter)
-  {
-  m_Iter = iter.m_Iter;
-  return *this;
-  }
-} // End namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h b/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h
deleted file mode 100644
index 8b87a877ad3b3c54111a4f66b9d4dd120cd36a62..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8VertexWithCompacity_h
-#define otbRCC8VertexWithCompacity_h
-
-#include "otbRCC8VertexBase.h"
-
-namespace otb
-{
-/** \class RCC8VertexWithCompacity
- *  \brief Class to represent a vertex in a RCC8 Graph with the compacity value of
- *  the represented region.
- *
- * \sa RCC8Graph, RCC8Edge, RCC8VertexBase
- *
- * \ingroup OTBRCC8
- */
-template <class TPath, class TPrecision = float>
-class ITK_EXPORT RCC8VertexWithCompacity
-  : public RCC8VertexBase<TPath>
-{
-public:
-  /** Standard class typedefs */
-  typedef RCC8VertexWithCompacity       Self;
-  typedef otb::RCC8VertexBase<TPath>    Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(RCC8VertexWithCompacity, RCC8VertexBase);
-  /** Input image associated typedefs*/
-  typedef TPath PathType;
-  /** Precision  typedef */
-  typedef TPrecision PrecisionType;
-  /** char* vector attributes */
-  typedef  typename Superclass::AttributesMapType AttributesMapType;
-
-  /** Segmentation image index accessors */
-  itkGetMacro(Compacity, PrecisionType);
-  itkSetMacro(Compacity, PrecisionType);
-  /**
-   * Set the VertexWithCompacity attributes from the attributes vector.
-   * \param attributes The vector containing the parsed attributes.
-   */
-  void SetAttributesMap(AttributesMapType attributes) override;
-  /**
-   * Get an attributes vector representing the VertexWithCompacity attributes.
-   * \return The attributes vector
-   */
-  AttributesMapType GetAttributesMap(void) override;
-
-protected:
-  /** Constructor */
-  RCC8VertexWithCompacity();
-  /** Desctructor */
-  ~RCC8VertexWithCompacity() override {}
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  /** The compacity */
-  PrecisionType m_Compacity;
-};
-} // end namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8VertexWithCompacity.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.hxx b/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.hxx
deleted file mode 100644
index 9ad40b3424598407c9686e51f24835f57ff3c6e8..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithCompacity.hxx
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8VertexWithCompacity_hxx
-#define otbRCC8VertexWithCompacity_hxx
-
-#include "otbRCC8VertexWithCompacity.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TPath, class TPrecision>
-RCC8VertexWithCompacity<TPath, TPrecision>
-::RCC8VertexWithCompacity()
-{
-  m_Compacity = 0.0;
-}
-/**
- * Set the VertexWithCompacity attributes from the attributes vector.
- * \param attributes The vector containing the parsed attributes.
- */
-template <class TPath, class TPrecision>
-void
-RCC8VertexWithCompacity<TPath, TPrecision>
-::SetAttributesMap(AttributesMapType attributes)
-{
-  this->Superclass::SetAttributesMap(attributes);
-  m_Compacity = static_cast<TPrecision>(atof(attributes["Compacity"].c_str()));
-}
-/**
- * Get an attributes vector representing the VertexBase attributes.
- * \return The attributes vector
- */
-template <class TPath, class TPrecision>
-typename RCC8VertexWithCompacity<TPath, TPrecision>::AttributesMapType
-RCC8VertexWithCompacity<TPath, TPrecision>
-::GetAttributesMap(void)
-{
-  std::stringstream oss;
-  AttributesMapType results;
-  results = this->Superclass::GetAttributesMap();
-  oss << m_Compacity;
-  results["Compacity"] = oss.str();
-  oss.str("");
-  return results;
-}
-/**
- * PrintSelf method
- */
-template <class TPath, class TPrecision>
-void
-RCC8VertexWithCompacity<TPath, TPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "Compacity: " << m_Compacity << std::endl;
-}
-} // end namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.h b/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.h
deleted file mode 100644
index 6916c936f5fb7c376123c59e0801fb9623cd8105..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.h
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8VertexWithRegionCenter_h
-#define otbRCC8VertexWithRegionCenter_h
-
-#include "otbRCC8VertexBase.h"
-
-namespace otb
-{
-/** \class RCC8VertexWithRegionCenter
- *  \brief Class to represent a vertex in a RCC8 Graph with the compacity value of
- *  the represented region.
- *
- * \sa RCC8Graph, RCC8Edge, RCC8VertexBase
- *
- * \ingroup OTBRCC8
- */
-template <class TLabel, class TPrecision = float>
-class ITK_EXPORT RCC8VertexWithRegionCenter
-  : public RCC8VertexBase<TLabel>
-{
-public:
-  /** Standard class typedefs */
-  typedef RCC8VertexWithRegionCenter    Self;
-  typedef otb::RCC8VertexBase<TLabel>   Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(RCC8VertexWithRegionCenter, RCC8VertexBase);
-  /** Input image associated typedefs*/
-  typedef TLabel LabelType;
-  /** Precision  typedef */
-  typedef TPrecision PrecisionType;
-  /** char* vector attributes */
-  typedef  typename Superclass::AttributesMapType AttributesMapType;
-
-  itkGetMacro(RegionCenterXCoordinate, PrecisionType);
-  itkSetMacro(RegionCenterXCoordinate, PrecisionType);
-  itkGetMacro(RegionCenterYCoordinate, PrecisionType);
-  itkSetMacro(RegionCenterYCoordinate, PrecisionType);
-  /**
-   * Set the VertexWithRegionCenter attributes from the attributes vector.
-   * \param attributes The vector containing the parsed attributes.
-   */
-  void SetAttributesMap(AttributesMapType attributes);
-  /**
-   * Get an attributes vector representing the VertexWithRegionCenter attributes.
-   * \return The attributes vector
-   */
-  AttributesMapType GetAttributesMap(void);
-
-protected:
-  /** Constructor */
-  RCC8VertexWithRegionCenter();
-  /** Desctructor */
-  ~RCC8VertexWithRegionCenter() {}
-  /** PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const;
-
-private:
-  /** The compacity */
-  PrecisionType m_RegionCenterXCoordinate;
-  PrecisionType m_RegionCenterYCoordinate;
-};
-} // end namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbRCC8VertexWithRegionCenter.hxx"
-#endif
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.hxx b/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.hxx
deleted file mode 100644
index 42f9c3adc5872e069ebefc923dec5faf5578069b..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/include/otbRCC8VertexWithRegionCenter.hxx
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbRCC8VertexWithRegionCenter_hxx
-#define otbRCC8VertexWithRegionCenter_hxx
-
-#include "otbRCC8VertexWithRegionCenter.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TLabel, class TPrecision>
-RCC8VertexWithRegionCenter<TLabel, TPrecision>
-::RCC8VertexWithRegionCenter()
-{
-  m_RegionCenterXCoordinate = 0.0;
-  m_RegionCenterYCoordinate = 0.0;
-}
-/**
- * Set the VertexWithRegionCenter attributes from the attributes vector.
- * \param attributes The vector containing the parsed attributes.
- */
-template <class TLabel, class TPrecision>
-void
-RCC8VertexWithRegionCenter<TLabel, TPrecision>
-::SetAttributesMap(AttributesMapType attributes)
-{
-  this->Superclass::SetAttributesMap(attributes);
-  m_RegionCenterXCoordinate = static_cast<TPrecision>(atof(attributes["RegionCenterXCoordinate"].c_str()));
-  m_RegionCenterYCoordinate = static_cast<TPrecision>(atof(attributes["RegionCenterYCoordinate"].c_str()));
-}
-/**
- * Get an attributes vector representing the VertexBase attributes.
- * \return The attributes vector
- */
-template <class TLabel, class TPrecision>
-typename RCC8VertexWithRegionCenter<TLabel, TPrecision>::AttributesMapType
-RCC8VertexWithRegionCenter<TLabel, TPrecision>
-::GetAttributesMap(void)
-{
-  std::stringstream oss;
-  AttributesMapType results;
-  results = this->Superclass::GetAttributesMap();
-  oss << m_RegionCenterXCoordinate;
-  results["RegionCenterXCoordinate"] = oss.str();
-  oss.str("");
-  oss << m_RegionCenterYCoordinate;
-  results["RegionCenterYCoordinate"] = oss.str();
-  oss.str("");
-  return results;
-}
-/**
- * PrintSelf method
- */
-template <class TLabel, class TPrecision>
-void
-RCC8VertexWithRegionCenter<TLabel, TPrecision>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "RegionCenterXCoordinate: " << m_RegionCenterXCoordinate << std::endl;
-  os << indent << "RegionCenterXCoordinate: " << m_RegionCenterYCoordinate << std::endl;
-}
-} // end namespace otb
-#endif
diff --git a/Modules/OBIA/RCC8/otb-module.cmake b/Modules/OBIA/RCC8/otb-module.cmake
deleted file mode 100644
index 5e9a368a74170e6094b54479d9477820fd6e7511..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/otb-module.cmake
+++ /dev/null
@@ -1,45 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set(DOCUMENTATION "The region connection calculus (RCC) is used for qualitative
-spatial representation and . RCC abstractly describes regions by their possible
-relations to each other (8 basic relations are possible between two regions). The
-RCC8 constraint language has been popularly adopted by the GIS communities. This
-module provides classes related to this purpose.")
-
-otb_module(OTBRCC8
-  DEPENDS
-    OTBITK
-    OTBImageBase
-    OTBRoadExtraction
-    OTBImageManipulation
-    OTBPath
-    OTBCommon
-    OTBBoostAdapters
-    OTBObjectList
-
-  TEST_DEPENDS
-    OTBVectorDataBase
-    OTBTestKernel
-    OTBImageIO
-
-  DESCRIPTION
-    "${DOCUMENTATION}"
-)
diff --git a/Modules/OBIA/RCC8/src/CMakeLists.txt b/Modules/OBIA/RCC8/src/CMakeLists.txt
deleted file mode 100644
index 1b18d1544cc6d894fe150c1c4efa644f2b875ae1..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/src/CMakeLists.txt
+++ /dev/null
@@ -1,34 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set(OTBRCC8_SRC
-  otbRCC8Edge.cxx
-  )
-
-add_library(OTBRCC8 ${OTBRCC8_SRC})
-target_link_libraries(OTBRCC8 
-  ${OTBImageManipulation_LIBRARIES}
-  ${OTBImageBase_LIBRARIES}
-  ${OTBCommon_LIBRARIES}
-  ${OTBBoost_LIBRARIES}
-
-  )
-
-otb_module_target(OTBRCC8)
diff --git a/Modules/OBIA/RCC8/src/otbRCC8Edge.cxx b/Modules/OBIA/RCC8/src/otbRCC8Edge.cxx
deleted file mode 100644
index 361123310263e7d8c2b4165490e2cc799fd21f0a..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/src/otbRCC8Edge.cxx
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include "otbRCC8Edge.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-RCC8Edge::RCC8Edge()
-{
-  m_Value = OTB_RCC8_DC;
-}
-/**
- * PrintSelf method
- */
-void
-RCC8Edge::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-  os << indent << "RCC8 Value: " << m_Value << std::endl;
-}
-} // end namespace otb
diff --git a/Modules/OBIA/RCC8/test/CMakeLists.txt b/Modules/OBIA/RCC8/test/CMakeLists.txt
deleted file mode 100644
index 72b127feda0de107037af29017097f9bbde8b9c1..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/CMakeLists.txt
+++ /dev/null
@@ -1,170 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-otb_module_test()
-
-set(OTBRCC8Tests
-otbRCC8TestDriver.cxx
-otbRCC8GraphFileReader.cxx
-otbRCC8GraphIOEndToEnd.cxx
-otbPolygonListToRCC8GraphFilter.cxx
-otbRCC8VertexBase.cxx
-otbPolygonToPolygonRCC8Calculator.cxx
-otbImageToImageRCC8Calculator.cxx
-otbRCC8Edge.cxx
-otbRCC8VertexWithCompacity.cxx
-otbRCC8Graph.cxx
-otbRCC8GraphFileWriter.cxx
-otbImageMultiSegmentationToRCC8GraphFilter.cxx
-)
-
-add_executable(otbRCC8TestDriver ${OTBRCC8Tests})
-target_link_libraries(otbRCC8TestDriver ${OTBRCC8-Test_LIBRARIES})
-otb_module_target_label(otbRCC8TestDriver)
-
-# Tests Declaration
-
-otb_add_test(NAME srTvRCC8GraphFileReader COMMAND otbRCC8TestDriver
-  otbRCC8GraphFileReader
-  ${TEMP}/srRCC8GraphWriterOutput1.dot
-  )
-set_property(TEST srTvRCC8GraphFileReader PROPERTY DEPENDS srTvRCC8GraphFileWriter)
-
-otb_add_test(NAME srTvRCC8GraphIOEndToEnd COMMAND otbRCC8TestDriver
-  --compare-ascii        ${NOTOL}
-  ${BASELINE_FILES}/srRCC8GraphWriterOutput1.dot
-  ${TEMP}/srRCC8GraphIOEndToEndOut.dot
-  otbRCC8GraphIOEndToEnd
-  ${BASELINE_FILES}/srRCC8GraphWriterOutput1.dot
-  ${TEMP}/srRCC8GraphIOEndToEndOut.dot
-  )
-
-otb_add_test(NAME srTvPolygonListToRCC8GraphFilter COMMAND otbRCC8TestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/srTvPolygonListToRCC8GraphFilterOutput.dot
-  ${TEMP}/srTvPolygonListToRCC8GraphFilterOutput.dot
-  otbPolygonListToRCC8GraphFilter
-  ${TEMP}/srTvPolygonListToRCC8GraphFilterOutput.dot)
-
-otb_add_test(NAME srTvRCC8VertexBase COMMAND otbRCC8TestDriver
-  otbRCC8VertexBase
-  5
-  5
-  )
-
-otb_add_test(NAME srTvPolygonRCC8Calculator COMMAND otbRCC8TestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/srRCC8PolygonToPolygonCalculatorOutput.txt
-  ${TEMP}/srRCC8PolygonToPolygonCalculatorOutput.txt
-  otbPolygonToPolygonRCC8Calculator
-  4
-  ${TEMP}/srRCC8PolygonToPolygonCalculatorOutput.txt
-  ${INPUTDATA}/rcc8_mire1.png
-  ${INPUTDATA}/rcc8_mire2.png
-  ${INPUTDATA}/rcc8_mire3.png
-  ${INPUTDATA}/rcc8_mire4.png
-  )
-
-otb_add_test(NAME srTvRCC8Calculator COMMAND otbRCC8TestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/srRCC8CalculatorOutput.txt
-  ${TEMP}/srRCC8CalculatorOutput.txt
-  otbImageToImageRCC8Calculator
-  4
-  ${TEMP}/srRCC8CalculatorOutput.txt
-  ${INPUTDATA}/rcc8_mire1.png
-  ${INPUTDATA}/rcc8_mire2.png
-  ${INPUTDATA}/rcc8_mire3.png
-  ${INPUTDATA}/rcc8_mire4.png
-  )
-
-otb_add_test(NAME srTvRCC8Edge COMMAND otbRCC8TestDriver
-  otbRCC8Edge
-  )
-
-otb_add_test(NAME srTvRCC8VertexWithCompacity COMMAND otbRCC8TestDriver
-  otbRCC8VertexWithCompacity
-  5
-  5
-  0.125354
-  )
-
-otb_add_test(NAME srTvRCC8Graph COMMAND otbRCC8TestDriver
-  otbRCC8Graph
-  )
-
-otb_add_test(NAME srTvRCC8GraphFileWriter COMMAND otbRCC8TestDriver
-  --compare-ascii        ${NOTOL}
-  ${BASELINE_FILES}/srRCC8GraphWriterOutput1.dot
-  ${TEMP}/srRCC8GraphWriterOutput1.dot
-  otbRCC8GraphFileWriter
-  ${TEMP}/srRCC8GraphWriterOutput1.dot
-  )
-
-otb_add_test(NAME srTvMultiSegToRCC8GraphFilter1 COMMAND otbRCC8TestDriver
-  --compare-ascii        ${NOTOL}
-  ${BASELINE_FILES}/srRCC8GraphFilterOutput.dot
-  ${TEMP}/srRCC8GraphFilterOutput.dot
-  otbImageMultiSegmentationToRCC8GraphFilter
-  ${TEMP}/srRCC8GraphFilterOutput.dot
-  0
-  2
-  ${INPUTDATA}/Seg1InputForRCC8Graph.tif
-  ${INPUTDATA}/Seg2InputForRCC8Graph.tif
-  )
-
-otb_add_test(NAME srTvMultiSegToRCC8GraphFilter2 COMMAND otbRCC8TestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/srRCC8GraphFilterOutput2.dot
-  ${TEMP}/srRCC8GraphFilterOutput2.dot
-  otbImageMultiSegmentationToRCC8GraphFilter
-  ${TEMP}/srRCC8GraphFilterOutput2.dot
-  0
-  3
-  ${INPUTDATA}/Seg3InputForRCC8Graph.tif
-  ${INPUTDATA}/Seg4InputForRCC8Graph.tif
-  ${INPUTDATA}/Seg5InputForRCC8Graph.tif
-  )
-
-otb_add_test(NAME srTvMultiSegToRCC8GraphFilter2WithOpti COMMAND otbRCC8TestDriver
-  --compare-ascii ${NOTOL}
-  ${BASELINE_FILES}/srRCC8GraphFilterOutput2.dot
-  ${TEMP}/srRCC8GraphFilterOutput2WithOpti.dot
-  otbImageMultiSegmentationToRCC8GraphFilter
-  ${TEMP}/srRCC8GraphFilterOutput2WithOpti.dot
-  1
-  3
-  ${INPUTDATA}/Seg3InputForRCC8Graph.tif
-  ${INPUTDATA}/Seg4InputForRCC8Graph.tif
-  ${INPUTDATA}/Seg5InputForRCC8Graph.tif
-  )
-
-otb_add_test(NAME srTvMultiSegToRCC8GraphFilter1WithOpti COMMAND otbRCC8TestDriver
-  --compare-ascii        ${NOTOL}
-  ${BASELINE_FILES}/srRCC8GraphFilterOutput.dot
-  ${TEMP}/srRCC8GraphFilterOutputWithOpti.dot
-  otbImageMultiSegmentationToRCC8GraphFilter
-  ${TEMP}/srRCC8GraphFilterOutputWithOpti.dot
-  1
-  2
-  ${INPUTDATA}/Seg1InputForRCC8Graph.tif
-  ${INPUTDATA}/Seg2InputForRCC8Graph.tif
-  )
-
diff --git a/Modules/OBIA/RCC8/test/otbImageMultiSegmentationToRCC8GraphFilter.cxx b/Modules/OBIA/RCC8/test/otbImageMultiSegmentationToRCC8GraphFilter.cxx
deleted file mode 100644
index b212a1a3ff8e28f4d3d77959fb6765fdac815625..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbImageMultiSegmentationToRCC8GraphFilter.cxx
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbImageList.h"
-#include "otbPolygon.h"
-#include "otbRCC8VertexBase.h"
-#include "otbImageMultiSegmentationToRCC8GraphFilter.h"
-#include "otbImageFileReader.h"
-#include "otbRCC8GraphFileWriter.h"
-
-int otbImageMultiSegmentationToRCC8GraphFilter(int itkNotUsed(argc), char* argv[])
-{
-  const unsigned int Dimension = 2;
-  char *             outputFilename = argv[1];
-  int                useOptimisation = atoi(argv[2]);
-  unsigned int       nbImages = atoi(argv[3]);
-
-  // typedefs
-  typedef unsigned short                        LabelPixelType;
-  typedef otb::Image<LabelPixelType, Dimension> LabelImageType;
-  typedef otb::Polygon<>                        PolygonType;
-  typedef otb::RCC8VertexBase<PolygonType>      VertexType;
-  typedef otb::RCC8Graph<VertexType>            RCC8GraphType;
-  typedef otb::ImageMultiSegmentationToRCC8GraphFilter<LabelImageType, RCC8GraphType>
-  RCC8GraphFilterType;
-  typedef otb::ImageList<LabelImageType>          ImageListType;
-  typedef otb::ImageFileReader<LabelImageType>    ReaderType;
-  typedef otb::RCC8GraphFileWriter<RCC8GraphType> GraphWriterType;
-
-  ImageListType::Pointer inputList = ImageListType::New();
-
-  // Reading input images
-  for (unsigned int i = 0; i < nbImages; ++i)
-    {
-    ReaderType::Pointer reader = ReaderType::New();
-    reader->SetFileName(argv[4 + i]);
-    reader->Update();
-    inputList->PushBack(reader->GetOutput());
-    }
-  std::cout << "Input image loaded into images list." << std::endl;
-  // Instantiation
-  RCC8GraphFilterType::Pointer filter = RCC8GraphFilterType::New();
-  filter->SetInput(inputList);
-  filter->SetOptimisation(useOptimisation > 0);
-
-  // Writing output graph
-  GraphWriterType::Pointer writer = GraphWriterType::New();
-  writer->SetFileName(outputFilename);
-  writer->SetInput(filter->GetOutput());
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx b/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx
deleted file mode 100644
index 0a5d2e1f1c86ac6317c7c83a35d9711b73904d6c..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbImageToImageRCC8Calculator.cxx
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbImageToImageRCC8Calculator.h"
-#include "otbImageList.h"
-#include "otbImageFileReader.h"
-
-int otbImageToImageRCC8Calculator(int itkNotUsed(argc), char* argv[])
-{
-  const unsigned int Dimension = 2;
-
-  int    nbImages  = atoi(argv[1]);
-  char * outfile   = argv[2];
-
-  typedef unsigned char                              PixelType;
-  typedef otb::Image<PixelType, Dimension>           ImageType;
-  typedef otb::ImageFileReader<ImageType>            ReaderType;
-  typedef otb::ImageToImageRCC8Calculator<ImageType> CalculatorType;
-  typedef otb::ImageList<ImageType>                  ImageListType;
-  typedef ImageListType::Iterator                    IteratorType;
-  // reference image list
-  ImageListType::Pointer images = ImageListType::New();
-
-  // Reading input images
-  std::ofstream out;
-  out.open(outfile, std::ios::out);
-  out << "Test results from otbImageToImageRCC8calculator test." << std::endl;
-  for (int k = 1; k <= nbImages; ++k)
-    {
-    ReaderType::Pointer reader = ReaderType::New();
-    reader->SetFileName(argv[2 + k]);
-    reader->Update();
-    images->PushBack(reader->GetOutput());
-    }
-  // Declaration
-  CalculatorType::Pointer calc, calc1, calc2;
-  // Computing relations for each images couple
-  int i = 1;
-  int j = 1;
-  for (IteratorType it1 = images->Begin(); it1 != images->End(); ++it1)
-    {
-    for (IteratorType it2 = images->Begin(); it2 != images->End(); ++it2)
-      {
-      std::cout << "Test: computing relation " << i << "," << j << std::endl;
-      calc = CalculatorType::New();
-      calc->SetInput1(it1.Get());
-      calc->SetInput2(it2.Get());
-      calc->Update();
-      out << calc->GetValue() << "\t";
-
-      if (calc->GetValue() < 3
-          || calc->GetValue() == 4
-          || calc->GetValue() == 6)
-        {
-        calc1 = CalculatorType::New();
-        calc1->SetInput1(it1.Get());
-        calc1->SetInput2(it2.Get());
-        calc1->SetLevel1APrioriKnowledge(true);
-        calc1->Update();
-        if (calc1->GetValue() != calc->GetValue())
-          {
-          std::cout << "Test failed: Result with level1AprioriKnowledge ";
-          std::cout << "different from result without a priori knowledge" << std::endl;
-          std::cout << calc->GetValue() << "!=" << calc1->GetValue() << std::endl;
-          return EXIT_FAILURE;
-          }
-        }
-      if (calc->GetValue() < 4)
-        {
-        calc2 = CalculatorType::New();
-        calc2->SetInput1(it1.Get());
-        calc2->SetInput2(it2.Get());
-        calc2->SetLevel3APrioriKnowledge(true);
-        calc2->Update();
-        if (calc2->GetValue() != calc->GetValue())
-          {
-          std::cout << "Test failed: Result with level3AprioriKnowledge ";
-          std::cout << "different from result without a priori knowledge" << std::endl;
-          std::cout << calc->GetValue() << "!=" << calc2->GetValue() << std::endl;
-          return EXIT_FAILURE;
-          }
-        }
-      ++j;
-      }
-    j = 1;
-    ++i;
-    out << std::endl;
-    }
-  out.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbPolygonListToRCC8GraphFilter.cxx b/Modules/OBIA/RCC8/test/otbPolygonListToRCC8GraphFilter.cxx
deleted file mode 100644
index fd136fba08b08afb0be9a7e6ed23acf0ca4d9d6c..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbPolygonListToRCC8GraphFilter.cxx
+++ /dev/null
@@ -1,114 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbPolygon.h"
-#include "otbObjectList.h"
-#include "otbRCC8VertexBase.h"
-#include "otbPolygonListToRCC8GraphFilter.h"
-#include "otbRCC8GraphFileWriter.h"
-
-// typedefs
-typedef otb::Polygon<>                                                    PolygonType;
-typedef otb::ObjectList<PolygonType>                                      PolygonListType;
-typedef otb::RCC8VertexBase<PolygonType>                                  VertexType;
-typedef otb::RCC8Graph<VertexType>                                        RCC8GraphType;
-typedef otb::PolygonListToRCC8GraphFilter<PolygonListType, RCC8GraphType> RCC8GraphFilterType;
-typedef otb::RCC8GraphFileWriter<RCC8GraphType>                           GraphWriterType;
-
-
-PolygonType::VertexType Vertex(double i,double j)
-{
-  PolygonType::VertexType vertex;
-  vertex[0] = i;
-  vertex[1] = j;
-
-  return vertex;
-}
-
-
-int otbPolygonListToRCC8GraphFilter(int itkNotUsed(argc), char* argv[])
-{
-  char * outfile = argv[1];
-
-  PolygonListType::Pointer regions = PolygonListType::New();
-
-  RCC8GraphFilterType::SegmentationRangesType ranges;
-
-  ranges.push_back(0);
-
-  PolygonType::Pointer polygon = PolygonType::New();
-  polygon->AddVertex(Vertex(0,0));
-  polygon->AddVertex(Vertex(2,0));
-  polygon->AddVertex(Vertex(2,6));
-  polygon->AddVertex(Vertex(0,6));
-  regions->PushBack(polygon);
-
-  polygon = PolygonType::New();
-  polygon->AddVertex(Vertex(1,1));
-  polygon->AddVertex(Vertex(4,1));
-  polygon->AddVertex(Vertex(4,5));
-  polygon->AddVertex(Vertex(1,5));
-  regions->PushBack(polygon);
-
-  ranges.push_back(2);
-
-  polygon = PolygonType::New();
-  polygon->AddVertex(Vertex(3,1));
-  polygon->AddVertex(Vertex(4,1));
-  polygon->AddVertex(Vertex(4,2));
-  polygon->AddVertex(Vertex(3,2));
-  regions->PushBack(polygon);
-
-  polygon = PolygonType::New();
-  polygon->AddVertex(Vertex(5,1));
-  polygon->AddVertex(Vertex(8,1));
-  polygon->AddVertex(Vertex(8,5));
-  polygon->AddVertex(Vertex(5,5));
-  regions->PushBack(polygon);
-
-  ranges.push_back(4);
-
-  polygon = PolygonType::New();
-  polygon->AddVertex(Vertex(6,2));
-  polygon->AddVertex(Vertex(7,2));
-  polygon->AddVertex(Vertex(7,3));
-  polygon->AddVertex(Vertex(6,3));
-  regions->PushBack(polygon);
-
-  polygon = PolygonType::New();
-  polygon->AddVertex(Vertex(8,1));
-  polygon->AddVertex(Vertex(9,1));
-  polygon->AddVertex(Vertex(9,5));
-  polygon->AddVertex(Vertex(8,5));
-  regions->PushBack(polygon);
-
-  // Filter instantiation
-  RCC8GraphFilterType::Pointer filter = RCC8GraphFilterType::New();
-
-  filter->SetInput(regions);
-  filter->SetSegmentationRanges(ranges);
-
-  GraphWriterType::Pointer writer = GraphWriterType::New();
-  writer->SetInput(filter->GetOutput());
-  writer->SetFileName(outfile);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbPolygonToPolygonRCC8Calculator.cxx b/Modules/OBIA/RCC8/test/otbPolygonToPolygonRCC8Calculator.cxx
deleted file mode 100644
index 3f3aa4a6c1f9c203a7e0ae98d4b710a68786c9db..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbPolygonToPolygonRCC8Calculator.cxx
+++ /dev/null
@@ -1,158 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbPolygonToPolygonRCC8Calculator.h"
-#include "otbImageFileReader.h"
-#include "otbPolygon.h"
-#include "otbImageToEdgePathFilter.h"
-#include "otbSimplifyPathListFilter.h"
-
-int otbPolygonToPolygonRCC8Calculator(int itkNotUsed(argc), char* argv[])
-{
-  const unsigned int Dimension = 2;
-
-  int    nbImages  = atoi(argv[1]);
-  char * outfile   = argv[2];
-
-  typedef unsigned char                                      PixelType;
-  typedef otb::Polygon<>                                     PolygonType;
-  typedef otb::Image<PixelType, Dimension>                   ImageType;
-  typedef otb::ImageToEdgePathFilter<ImageType, PolygonType> EdgeExtractionFilterType;
-  typedef otb::SimplifyPathListFilter<PolygonType>           SimplifyPathFilterType;
-  typedef SimplifyPathFilterType::InputListType              PathListType;
-  typedef otb::ImageFileReader<ImageType>                    ReaderType;
-  typedef otb::PolygonToPolygonRCC8Calculator<PolygonType>   CalculatorType;
-
-  PolygonType::Pointer path = PolygonType::New();
-
-  PolygonType::ContinuousIndexType a1, a2, a3, a4, a5, a6, a7;
-
-  a1[0] = 0;
-  a1[1] = 0;
-  a2[0] = 10;
-  a2[1] = 0;
-  a3[0] = 10;
-  a3[1] = 10;
-  a4[0] = 10;
-  a4[1] = 0;
-
-  a5[0] = 5;
-  a5[1] = 5;
-
-  a6[0] = 5;
-  a6[1] = 0;
-
-  a7[0] = 100;
-  a7[1] = 100;
-
-  path->AddVertex(a1);
-  path->AddVertex(a2);
-  path->AddVertex(a3);
-  path->AddVertex(a4);
-
-  CalculatorType::Pointer calc = CalculatorType::New();
-
-  typedef PathListType::Iterator IteratorType;
-
-  // reference image list
-  PathListType::Pointer regions = PathListType::New();
-
-  // Reading input images
-  std::ofstream out;
-  out.open(outfile, std::ios::out);
-  out << "Test results from otbPolygonToPolygonRCC8calculator test." << std::endl;
-  for (int cpt = 1; cpt <= nbImages; ++cpt)
-    {
-    ReaderType::Pointer reader = ReaderType::New();
-    reader->SetFileName(argv[2 + cpt]);
-    EdgeExtractionFilterType::Pointer extraction = EdgeExtractionFilterType::New();
-    extraction->SetInput(reader->GetOutput());
-    extraction->SetForegroundValue(255);
-    extraction->Update();
-    regions->PushBack(extraction->GetOutput());
-    }
-
-  SimplifyPathFilterType::Pointer simplifier = SimplifyPathFilterType::New();
-  simplifier->SetInput(regions);
-  simplifier->GetFunctor().SetTolerance(0.1);
-  simplifier->Update();
-
-  // Declaration
-  CalculatorType::Pointer calc1, calc2, calc3;
-  // Computing relations for each images couple
-  unsigned int i = 1;
-  unsigned int j = 1;
-  for (IteratorType it1 = simplifier->GetOutput()->Begin(); it1 != simplifier->GetOutput()->End(); ++it1)
-    {
-    for (IteratorType it2 = simplifier->GetOutput()->Begin(); it2 != simplifier->GetOutput()->End(); ++it2)
-      {
-      std::cout << "Test: computing relation " << i << "," << j << std::endl;
-      calc1 = CalculatorType::New();
-      calc1->SetPolygon1(it1.Get());
-      calc1->SetPolygon2(it2.Get());
-      calc1->Compute();
-      out << calc1->GetValue() << "\t";
-      std::cout << "Result without a priori knowledge " << calc1->GetValue() << std::endl;
-
-      if (calc1->GetValue() < 3
-          || calc1->GetValue() == 4
-          || calc1->GetValue() == 6)
-        {
-        calc2 = CalculatorType::New();
-        calc2->SetPolygon1(it1.Get());
-        calc2->SetPolygon2(it2.Get());
-        calc2->SetLevel1APrioriKnowledge(true);
-        calc2->Compute();
-        std::cout << "Result with level1 a priori knowledge " << calc2->GetValue() << std::endl;
-        if (calc2->GetValue() != calc1->GetValue())
-          {
-          std::cout << "Test failed: Result with level1AprioriKnowledge ";
-          std::cout << "different from result without a priori knowledge" << std::endl;
-          std::cout << calc1->GetValue() << "!=" << calc2->GetValue() << std::endl;
-          return EXIT_FAILURE;
-          }
-        }
-      if (calc1->GetValue() < 4)
-        {
-        calc3 = CalculatorType::New();
-        calc3->SetPolygon1(it1.Get());
-        calc3->SetPolygon2(it2.Get());
-        calc3->SetLevel3APrioriKnowledge(true);
-        calc3->Compute();
-        std::cout << "Result with level3 a priori knowledge " << calc3->GetValue() << std::endl;
-        if (calc3->GetValue() != calc1->GetValue())
-          {
-          std::cout << "Test failed: Result with level3AprioriKnowledge ";
-          std::cout << "different from result without a priori knowledge" << std::endl;
-          std::cout << calc1->GetValue() << "!=" << calc3->GetValue() << std::endl;
-          return EXIT_FAILURE;
-          }
-        }
-      ++j;
-      }
-    j = 1;
-    ++i;
-    out << std::endl;
-    }
-  out.close();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbRCC8Edge.cxx b/Modules/OBIA/RCC8/test/otbRCC8Edge.cxx
deleted file mode 100644
index 31087db07704262c17156a98e79155651fbbc707..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbRCC8Edge.cxx
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbRCC8Edge.h"
-#include <cstdlib>
-
-int otbRCC8Edge(int itkNotUsed(argc), char * itkNotUsed(argv) [])
-{
-  typedef otb::RCC8Edge               RCC8EdgeType;
-  typedef RCC8EdgeType::RCC8ValueType RCC8ValueType;
-  RCC8ValueType value = otb::OTB_RCC8_DC;
-
-  // Instantiation
-  RCC8EdgeType::Pointer edge = RCC8EdgeType::New();
-  edge->SetValue(value);
-
-  if (edge->GetValue() != value)
-    {
-    std::cout << "Test failed: edge->GetValue()!=value" << std::endl;
-    return EXIT_FAILURE;
-    }
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbRCC8Graph.cxx b/Modules/OBIA/RCC8/test/otbRCC8Graph.cxx
deleted file mode 100644
index 47e5bb08efc4b453abf16a9ab4d0c495b80ed239..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbRCC8Graph.cxx
+++ /dev/null
@@ -1,152 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbRCC8VertexBase.h"
-#include "otbRCC8VertexIterator.h"
-#include "otbRCC8EdgeIterator.h"
-#include "otbRCC8InEdgeIterator.h"
-#include "otbRCC8OutEdgeIterator.h"
-#include "otbMacro.h"
-#include "otbPolygon.h"
-
-int otbRCC8Graph(int itkNotUsed(argc), char * itkNotUsed(argv) [])
-{
-  const unsigned int nbVertices = 2;
-  typedef otb::Polygon<>                          PathType;
-  typedef PathType::VertexType                    PointType;
-  typedef otb::RCC8VertexBase<PathType>           VertexType;
-  typedef otb::RCC8Graph<VertexType>              RCC8GraphType;
-  typedef otb::RCC8VertexIterator<RCC8GraphType>  VertexIteratorType;
-  typedef otb::RCC8EdgeIterator<RCC8GraphType>    EdgeIteratorType;
-
-  // Instantiation
-  RCC8GraphType::Pointer rcc8Graph = RCC8GraphType::New();
-  // Setting the number of vertices
-  rcc8Graph->SetNumberOfVertices(nbVertices - 1);
-  // Call to the build method
-  rcc8Graph->Build();
-
-  PointType p1, p2, p3, p4, p5, p6;
-
-  p1[0] = 0;
-  p1[1] = 0;
-  p2[0] = 10;
-  p2[1] = 10;
-  p3[0] = 10;
-  p3[1] = 0;
-  p4[0] = 20;
-  p4[1] = 20;
-  p5[0] = 20;
-  p5[1] = 10;
-  p6[0] = 10;
-  p6[1] = 20;
-
-  unsigned int vertex1SegLevel = 0;
-  unsigned int vertex2SegLevel = 10;
-  bool         vertex1SegType = true;
-  bool         vertex2SegType = false;
-
-  PathType::Pointer path1 = PathType::New();
-  path1->AddVertex(p1);
-  path1->AddVertex(p2);
-  path1->AddVertex(p3);
-
-  VertexType::Pointer vertex1 = VertexType::New();
-  vertex1->SetSegmentationLevel(vertex1SegLevel);
-  vertex1->SetSegmentationType(vertex1SegType);
-  vertex1->SetPath(path1);
-
-  PathType::Pointer path2 = PathType::New();
-  path2->AddVertex(p4);
-  path2->AddVertex(p5);
-  path2->AddVertex(p6);
-
-  VertexType::Pointer vertex2 = VertexType::New();
-  vertex2->SetSegmentationLevel(vertex2SegLevel);
-  vertex2->SetSegmentationType(vertex2SegType);
-  vertex2->SetPath(path2);
-
-  rcc8Graph->SetVertex(0, vertex1);
-  rcc8Graph->SetVertex(1, vertex2);
-
-  otbControlConditionTestMacro(rcc8Graph->GetNumberOfVertices() != nbVertices,
-                               "rcc8Graph->GetNumberOfVertices()!=nbVertices");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetSegmentationLevel() != vertex1SegLevel,
-                               "rcc8Graph->GetVertex(0)->GetSegmentationLevel()!=vertex1SegLevel");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetSegmentationType() != vertex1SegType,
-                               "rcc8Graph->GetVertex(0)->GetSegmentationType()!=vertex1SegType");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(0) != p1,
-                               "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(0)!=p1");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(1) != p2,
-                               "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(1)!=p2");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(2) != p3,
-                               "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(2)!=p3");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetSegmentationLevel() != vertex2SegLevel,
-                               "rcc8Graph->GetVertex(1)->GetSegmentationLevel()!=vertex2SegLevel");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetSegmentationType() != vertex2SegType,
-                               "rcc8Graph->GetVertex(1)->GetObjectLabelInImgage()!=vertex2SegType");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(0) != p4,
-                               "rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(0)!=p4");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(1) != p5,
-                               "rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(1)!=p5");
-  otbControlConditionTestMacro(rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(2) != p6,
-                               "rcc8Graph->GetVertex(1)->GetPath()->GetVertexList()->GetElement(2)!=p6");
-
-  VertexIteratorType v(rcc8Graph);
-  v.GoToBegin();
-  otbControlConditionTestMacro(v.Get()->GetSegmentationLevel() != vertex1SegLevel,
-                               "v.Get()->GetSegmentationLevel()!=vertex1SegLevel");
-  otbControlConditionTestMacro(v.Get()->GetSegmentationType() != vertex1SegType,
-                               "v.Get()->GetSegmentationType()!=vertex1SegType");
-  otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(0) != p1,
-                               "v.Get()->GetPath()->GetVertexList()->GetElement(0)!=p1");
-  otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(1) != p2,
-                               "v.Get()->GetPath()->GetVertexList()->GetElement(1)!=p2");
-  otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(2) != p3,
-                               "v.Get()->GetPath()->GetVertexList()->GetElement(2)!=p3");
-  ++v;
-  otbControlConditionTestMacro(v.Get()->GetSegmentationLevel() != vertex2SegLevel,
-                               "v.Get()->GetSegmentationLevel()!=vertex2SegLevel");
-  otbControlConditionTestMacro(v.Get()->GetSegmentationType() != vertex2SegType,
-                               "v.Get()->GetObjectLabelInImgage()!=vertex2SegType");
-  otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(0) != p4,
-                               "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(0)!=p4");
-  otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(1) != p5,
-                               "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(1)!=p5");
-  otbControlConditionTestMacro(v.Get()->GetPath()->GetVertexList()->GetElement(2) != p6,
-                               "rcc8Graph->GetVertex(0)->GetPath()->GetVertexList()->GetElement(2)!=p6");
-
-  // Testing the edge iterator
-  rcc8Graph->AddEdge(0, 1, otb::OTB_RCC8_NTPPI);
-
-  otbControlConditionTestMacro(rcc8Graph->GetNumberOfEdges() != 1,
-                               "rcc8Graph->GetNumberOfEdges()!=1");
-
-  EdgeIteratorType e(rcc8Graph);
-  e.GoToBegin();
-  otbControlConditionTestMacro(e.GetValue() != otb::OTB_RCC8_NTPPI,
-                               "e.GetValue()!=otb::OTB_RCC8_NTPPI");
-  otbControlConditionTestMacro(e.GetSourceIndex() != 0,
-                               "e.GetSourceIndex()!=0");
-  otbControlConditionTestMacro(e.GetTargetIndex() != 1,
-                               "e.GetTargetIndex()!=1");
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbRCC8GraphFileReader.cxx b/Modules/OBIA/RCC8/test/otbRCC8GraphFileReader.cxx
deleted file mode 100644
index 6c6807946062948b332eab371e1f49f47f1eb599..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbRCC8GraphFileReader.cxx
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbRCC8VertexIterator.h"
-#include "otbRCC8EdgeIterator.h"
-#include "otbRCC8VertexBase.h"
-#include "otbRCC8GraphFileReader.h"
-#include "otbMacro.h"
-#include "otbPolygon.h"
-
-int otbRCC8GraphFileReader(int itkNotUsed(argc), char* argv[])
-{
-  char * inputFilename = argv[1];
-  typedef otb::Polygon<>                          PathType;
-  typedef otb::RCC8VertexBase<PathType>           VertexType;
-  typedef otb::RCC8Graph<VertexType>              RCC8GraphType;
-  typedef otb::RCC8GraphFileReader<RCC8GraphType> RCC8GraphFileReaderType;
-  typedef otb::RCC8VertexIterator<RCC8GraphType>  VertexIteratorType;
-  typedef otb::RCC8EdgeIterator<RCC8GraphType>    EdgeIteratorType;
-
-  // Instantiation
-  RCC8GraphFileReaderType::Pointer rcc8GraphReader = RCC8GraphFileReaderType::New();
-  rcc8GraphReader->SetFileName(inputFilename);
-
-  rcc8GraphReader->Update();
-
-  // Getting the output graph
-  RCC8GraphType::Pointer graph = rcc8GraphReader->GetOutput();
-
-  // Checking vertices
-  VertexIteratorType vIt(graph);
-  unsigned int       count = 0;
-
-  otbControlConditionTestMacro(graph->GetNumberOfVertices() != 4,
-                               "graph->GetNumberOfVertices()!=4");
-  otbControlConditionTestMacro(graph->GetNumberOfEdges() != 6,
-                               "graph->GetNumberOfEdges()!=6");
-
-  // Checking edges
-  EdgeIteratorType eIt(graph);
-  count = 0;
-  for (eIt.GoToBegin(); !eIt.IsAtEnd(); ++eIt, ++count)
-    {
-    switch (count)
-      {
-      case 0:
-        otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_EC,
-                                     "eIt.GetValue()!=otb::OTB_RCC8_EC");
-        otbControlConditionTestMacro(eIt.GetSourceIndex() != 0,
-                                     "eIt.GetSourceIndex()!=0");
-        otbControlConditionTestMacro(eIt.GetTargetIndex() != 1,
-                                     "eIt.GetTargetIndex()!=1");
-        break;
-      case 1:
-        otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_PO,
-                                     "eIt.GetValue()!=otb::OTB_RCC8_PO");
-        otbControlConditionTestMacro(eIt.GetSourceIndex() != 1,
-                                     "eIt.GetSourceIndex()!=1");
-        otbControlConditionTestMacro(eIt.GetTargetIndex() != 2,
-                                     "eIt.GetTargetIndex()!=2");
-        break;
-      case 2:
-        otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_TPP,
-                                     "eIt.GetValue()!=otb::OTB_RCC8_TPP");
-        otbControlConditionTestMacro(eIt.GetSourceIndex() != 2,
-                                     "eIt.GetSourceIndex()!=2");
-        otbControlConditionTestMacro(eIt.GetTargetIndex() != 3,
-                                     "eIt.GetTargetIndex()!=3");
-        break;
-      case 3:
-        otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_TPPI,
-                                     "eIt.GetValue()!=otb::OTB_RCC8_TPPI");
-        otbControlConditionTestMacro(eIt.GetSourceIndex() != 0,
-                                     "eIt.GetSourceIndex()!=0");
-        otbControlConditionTestMacro(eIt.GetTargetIndex() != 2,
-                                     "eIt.GetTargetIndex()!=2");
-        break;
-      case 4:
-        otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_NTPP,
-                                     "eIt.GetValue()!=otb::OTB_RCC8_NTPP");
-        otbControlConditionTestMacro(eIt.GetSourceIndex() != 1,
-                                     "eIt.GetSourceIndex()!=1");
-        otbControlConditionTestMacro(eIt.GetTargetIndex() != 3,
-                                     "eIt.GetTargetIndex()!=3");
-        break;
-      case 5:
-        otbControlConditionTestMacro(eIt.GetValue() != otb::OTB_RCC8_NTPPI,
-                                     "eIt.GetValue()!=otb::OTB_RCC8_NTPPI");
-        otbControlConditionTestMacro(eIt.GetSourceIndex() != 0,
-                                     "eIt.GetSourceIndex()!=0");
-        otbControlConditionTestMacro(eIt.GetTargetIndex() != 3,
-                                     "eIt.GetTargetIndex()!=3");
-        break;
-      default:
-        otbControlConditionTestMacro(true, "Error in graph reading.");
-        break;
-      }
-    }
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbRCC8GraphFileWriter.cxx b/Modules/OBIA/RCC8/test/otbRCC8GraphFileWriter.cxx
deleted file mode 100644
index 943183126a0653768d444a6c7ba0221443947b3c..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbRCC8GraphFileWriter.cxx
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbRCC8VertexBase.h"
-#include "otbRCC8GraphFileWriter.h"
-#include "otbPolygon.h"
-
-int otbRCC8GraphFileWriter(int itkNotUsed(argc), char* argv[])
-{
-  const char * outputFile = argv[1];
-
-  typedef otb::Polygon<>                          PathType;
-  typedef otb::RCC8VertexBase<PathType>           VertexType;
-  typedef otb::RCC8Graph<VertexType>              RCC8GraphType;
-  typedef otb::RCC8GraphFileWriter<RCC8GraphType> RCC8GraphFileWriterType;
-
-  // Graph instantiation
-  RCC8GraphType::Pointer rcc8Graph = RCC8GraphType::New();
-  rcc8Graph->SetNumberOfVertices(4);
-  rcc8Graph->Build();
-
-  // Vertex filling
-  PathType::Pointer path = PathType::New();
-  path->Initialize();
-
-  PathType::ContinuousIndexType p1, p2, p3;
-
-  p1[0] = 0;
-  p1[1] = 0;
-
-  p2[0] = 10;
-  p2[1] = 10;
-
-  p3[0] = -5;
-  p3[1] = 2;
-
-  path->AddVertex(p1);
-  path->AddVertex(p2);
-  path->AddVertex(p3);
-
-  VertexType::Pointer vertex1, vertex2, vertex3, vertex4;
-  vertex1 = VertexType::New();
-  vertex1->SetSegmentationLevel(0);
-  vertex1->SetSegmentationType(0);
-  vertex1->SetPath(path);
-  rcc8Graph->SetVertex(0, vertex1);
-
-  vertex2 = VertexType::New();
-  vertex2->SetSegmentationLevel(1);
-  vertex2->SetSegmentationType(1);
-  vertex2->SetPath(path);
-  rcc8Graph->SetVertex(1, vertex2);
-
-  vertex3 = VertexType::New();
-  vertex3->SetSegmentationLevel(2);
-  vertex3->SetSegmentationType(0);
-  vertex3->SetPath(path);
-  rcc8Graph->SetVertex(2, vertex3);
-
-  vertex4 = VertexType::New();
-  vertex4->SetSegmentationLevel(3);
-  vertex4->SetSegmentationType(0);
-  vertex4->SetPath(path);
-  rcc8Graph->SetVertex(3, vertex4);
-
-  // Edge filling
-  rcc8Graph->AddEdge(0, 1, otb::OTB_RCC8_EC);
-  rcc8Graph->AddEdge(1, 2, otb::OTB_RCC8_PO);
-  rcc8Graph->AddEdge(2, 3, otb::OTB_RCC8_TPP);
-  rcc8Graph->AddEdge(0, 2, otb::OTB_RCC8_TPPI);
-  rcc8Graph->AddEdge(1, 3, otb::OTB_RCC8_NTPP);
-  rcc8Graph->AddEdge(0, 3, otb::OTB_RCC8_NTPPI);
-
-  // Instantiation
-  RCC8GraphFileWriterType::Pointer rcc8GraphWriter
-    = RCC8GraphFileWriterType::New();
-  rcc8GraphWriter->SetFileName(outputFile);
-  rcc8GraphWriter->SetInput(rcc8Graph);
-  rcc8GraphWriter->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbRCC8GraphIOEndToEnd.cxx b/Modules/OBIA/RCC8/test/otbRCC8GraphIOEndToEnd.cxx
deleted file mode 100644
index 2e274dac4c304505e2b28b82a530fce9d4a45bc9..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbRCC8GraphIOEndToEnd.cxx
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbRCC8VertexBase.h"
-#include "otbRCC8GraphFileReader.h"
-#include "otbRCC8GraphFileWriter.h"
-#include "otbPolygon.h"
-
-int otbRCC8GraphIOEndToEnd(int itkNotUsed(argc), char* argv[])
-{
-  char * inputFilename = argv[1];
-  char * outputFilename = argv[2];
-  typedef otb::Polygon<>                          PathType;
-  typedef otb::RCC8VertexBase<PathType>           VertexType;
-  typedef otb::RCC8Graph<VertexType>              RCC8GraphType;
-  typedef otb::RCC8GraphFileReader<RCC8GraphType> RCC8GraphFileReaderType;
-  typedef otb::RCC8GraphFileWriter<RCC8GraphType> RCC8GraphFileWriterType;
-
-  // End to end test
-  RCC8GraphFileReaderType::Pointer rcc8GraphReader = RCC8GraphFileReaderType::New();
-  rcc8GraphReader->SetFileName(inputFilename);
-  RCC8GraphFileWriterType::Pointer rcc8GraphWriter = RCC8GraphFileWriterType::New();
-  rcc8GraphWriter->SetInput(rcc8GraphReader->GetOutput());
-  rcc8GraphWriter->SetFileName(outputFilename);
-  rcc8GraphWriter->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbRCC8TestDriver.cxx b/Modules/OBIA/RCC8/test/otbRCC8TestDriver.cxx
deleted file mode 100644
index 8a060d25bf7c343f4a8daa8d4e93f7415bae2507..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbRCC8TestDriver.cxx
+++ /dev/null
@@ -1,36 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbTestMain.h"
-
-void RegisterTests()
-{
-  REGISTER_TEST(otbRCC8GraphFileReader);
-  REGISTER_TEST(otbRCC8GraphIOEndToEnd);
-  REGISTER_TEST(otbPolygonListToRCC8GraphFilter);
-  REGISTER_TEST(otbRCC8VertexBase);
-  REGISTER_TEST(otbPolygonToPolygonRCC8Calculator);
-  REGISTER_TEST(otbImageToImageRCC8Calculator);
-  REGISTER_TEST(otbRCC8Edge);
-  REGISTER_TEST(otbRCC8VertexWithCompacity);
-  REGISTER_TEST(otbRCC8Graph);
-  REGISTER_TEST(otbRCC8GraphFileWriter);
-  REGISTER_TEST(otbImageMultiSegmentationToRCC8GraphFilter);
-}
diff --git a/Modules/OBIA/RCC8/test/otbRCC8VertexBase.cxx b/Modules/OBIA/RCC8/test/otbRCC8VertexBase.cxx
deleted file mode 100644
index 6578e4f6ae038cad1485118ed773f18f7c757222..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbRCC8VertexBase.cxx
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbRCC8VertexBase.h"
-#include "otbPolygon.h"
-#include "otbMacro.h"
-
-int otbRCC8VertexBase(int itkNotUsed(argc), char* argv[])
-{
-  typedef otb::Polygon<> PathType;
-  unsigned int imageLevel = atoi(argv[1]);
-  bool         imageType = atoi(argv[2]);
-  typedef otb::RCC8VertexBase<PathType>     RCC8VertexType;
-  typedef RCC8VertexType::AttributesMapType AttributesMapType;
-  // Instantiation
-  RCC8VertexType::Pointer vertex1 = RCC8VertexType::New();
-
-  PathType::Pointer path = PathType::New();
-  path->Initialize();
-
-  PathType::ContinuousIndexType p1, p2, p3;
-
-  p1[0] = 0;
-  p1[1] = 0;
-
-  p2[0] = 10;
-  p2[1] = 10;
-
-  p3[0] = -5;
-  p3[1] = 2;
-
-  path->AddVertex(p1);
-  path->AddVertex(p2);
-  path->AddVertex(p3);
-
-  // Getters / setters tests
-  vertex1->SetSegmentationLevel(imageLevel);
-  vertex1->SetSegmentationType(imageType);
-  vertex1->SetPath(path);
-
-  otbControlConditionTestMacro(vertex1->GetSegmentationLevel() != imageLevel,
-                               "Test failed: vertex1->GetSegmentationLevel()!=imageLevel");
-  otbControlConditionTestMacro(vertex1->GetSegmentationType() != imageType,
-                               "Test failed: vertex1->GetSegmentationType()!=imageType");
-
-  otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(0) != p1,
-                               "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(0)!=p1");
-  otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(1) != p2,
-                               "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(1)!=p2");
-  otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(2) != p3,
-                               "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(2)!=p3");
-
-  // attributes vector set test
-  AttributesMapType attr1 = vertex1->GetAttributesMap();
-  otbControlConditionTestMacro(attr1["SegmentationLevel"].compare(std::string(argv[1])) != 0,
-                               "Test failed: vertex1->GetAttributesMap()[\"SegmentationLevel\"]!=std::string(argv[1])");
-  otbControlConditionTestMacro(atoi(attr1["SegmentationType"].c_str()) != static_cast<int>(imageType),
-                               "Test failed:atoi(attr1[\"SegmentationType\"].c_str())!=imageType ");
-
-  otbControlConditionTestMacro(atof(attr1["P0x"].c_str()) != p1[0],
-                               "Test failed: atof(attr1[\"P0x\"].c_str())!=p1[0]");
-  otbControlConditionTestMacro(atof(attr1["P0y"].c_str()) != p1[1],
-                               "Test failed: atof(attr1[\"P0y\"].c_str())!=p1[1]");
-  otbControlConditionTestMacro(atof(attr1["P1x"].c_str()) != p2[0],
-                               "Test failed: atof(attr1[\"P1x\"].c_str())!=p2[0]");
-  otbControlConditionTestMacro(atof(attr1["P1y"].c_str()) != p2[1],
-                               "Test failed: atof(attr1[\"P1y\"].c_str())!=p2[1]");
-  otbControlConditionTestMacro(atof(attr1["P2x"].c_str()) != p3[0],
-                               "Test failed: atof(attr1[\"P2x\"].c_str())!=p3[0]");
-  otbControlConditionTestMacro(atof(attr1["P2y"].c_str()) != p3[1],
-                               "Test failed: atof( attr1[\"P2y\"].c_str())!=p3[1]");
-
-  // attributes vector get test
-  RCC8VertexType::Pointer vertex2 = RCC8VertexType::New();
-  vertex2->SetAttributesMap(attr1);
-  otbControlConditionTestMacro(vertex1->GetSegmentationLevel() != vertex2->GetSegmentationLevel(),
-                               "Test failed: vertex1->GetSegmentationLevel()!=vertex2->GetSegmentationLevel()");
-  otbControlConditionTestMacro(vertex1->GetSegmentationType() != vertex2->GetSegmentationType(),
-                               "Test failed: vertex1->GetSegmentationType()!=vertex2->GetSegmentationType()");
-
-  otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(0) != p1,
-                               "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(0)!=p1");
-  otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(1) != p2,
-                               "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(1)!=p2");
-  otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(2) != p3,
-                               "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(2)!=p3");
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/OBIA/RCC8/test/otbRCC8VertexWithCompacity.cxx b/Modules/OBIA/RCC8/test/otbRCC8VertexWithCompacity.cxx
deleted file mode 100644
index 697aeda75e5b83da812d4ff32e112d5d88f34e70..0000000000000000000000000000000000000000
--- a/Modules/OBIA/RCC8/test/otbRCC8VertexWithCompacity.cxx
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbRCC8VertexWithCompacity.h"
-#include "otbMacro.h"
-#include "otbPolygon.h"
-
-int otbRCC8VertexWithCompacity(int itkNotUsed(argc), char* argv[])
-{
-  typedef otb::Polygon<> PathType;
-  typedef double         PrecisionType;
-
-  unsigned int  imageLevel = atoi(argv[1]);
-  bool          imageType = atoi(argv[2]);
-  PrecisionType compacity = atof(argv[3]);
-
-  typedef otb::RCC8VertexWithCompacity<PathType, PrecisionType> RCC8VertexType;
-  typedef RCC8VertexType::AttributesMapType                     AttributesMapType;
-  // Instantiation
-  RCC8VertexType::Pointer vertex1 = RCC8VertexType::New();
-
-  PathType::Pointer path = PathType::New();
-  path->Initialize();
-
-  PathType::ContinuousIndexType p1, p2, p3;
-
-  p1[0] = 0;
-  p1[1] = 0;
-
-  p2[0] = 10;
-  p2[1] = 10;
-
-  p3[0] = -5;
-  p3[1] = 2;
-
-  path->AddVertex(p1);
-  path->AddVertex(p2);
-  path->AddVertex(p3);
-
-  // Getters / setters tests
-  vertex1->SetSegmentationLevel(imageLevel);
-  vertex1->SetSegmentationType(imageType);
-  vertex1->SetPath(path);
-  vertex1->SetCompacity(compacity);
-
-  otbControlConditionTestMacro(vertex1->GetSegmentationLevel() != imageLevel,
-                               "Test failed: vertex1->GetSegmentationLevel()!=imageLevel");
-  otbControlConditionTestMacro(vertex1->GetSegmentationType() != imageType,
-                               "Test failed: vertex1->GetSegmentationType()!=imageType");
-
-  otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(0) != p1,
-                               "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(0)!=p1");
-  otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(1) != p2,
-                               "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(1)!=p2");
-  otbControlConditionTestMacro(vertex1->GetPath()->GetVertexList()->GetElement(2) != p3,
-                               "Test failed:vertex1->GetPath()->GetVertexList()->GetElement(2)!=p3");
-  otbControlConditionTestMacro(vertex1->GetCompacity() != compacity,
-                               "Test failed: vertex1->GetSegmentationImageIndex()!=imageIndex");
-  // attributes vector set test
-  AttributesMapType attr1 = vertex1->GetAttributesMap();
-
-  std::ostringstream oss;
-  oss << p1[0];
-  otbControlConditionTestMacro(attr1["P0x"].compare(oss.str()) != 0,
-                               "Test failed:attr1[\"P0x\"].compare(std::string(p1[0]))!=0");
-  oss.str("");
-  oss << p1[1];
-  otbControlConditionTestMacro(attr1["P0y"].compare(oss.str()) != 0,
-                               "Test failed:attr1[\"P0y\"].compare(std::string(p1[1]))!=0");
-  oss.str("");
-  oss << p2[0];
-  otbControlConditionTestMacro(attr1["P1x"].compare(oss.str()) != 0,
-                               "Test failed:attr1[\"P1x\"].compare(std::string(p2[0]))!=0");
-  oss.str("");
-  oss << p2[1];
-  otbControlConditionTestMacro(attr1["P1y"].compare(oss.str()) != 0,
-                               "Test failed:attr1[\"P1y\"].compare(std::string(p2[1]))!=0");
-  oss.str("");
-  oss << p3[0];
-  otbControlConditionTestMacro(attr1["P2x"].compare(oss.str()) != 0,
-                               "Test failed:attr1[\"P2x\"].compare(std::string(p3[0]))!=0");
-  oss.str("");
-  oss << p3[1];
-  otbControlConditionTestMacro(attr1["P2y"].compare(oss.str()) != 0,
-                               "Test failed:attr1[\"P2y\"].compare(std::string(p3[1]))!=0");
-
-  otbControlConditionTestMacro(attr1["Compacity"].compare(std::string(argv[3])) != 0,
-                               "Test failed: vertex1->GetAttributesMap()[\"Compacity\"]!=std::string(argv[2])");
-  // attributes vector get test
-  RCC8VertexType::Pointer vertex2 = RCC8VertexType::New();
-  vertex2->SetAttributesMap(attr1);
-  otbControlConditionTestMacro(vertex1->GetSegmentationLevel() != vertex2->GetSegmentationLevel(),
-                               "Test failed: vertex1->GetSegmentationLevel()!=vertex2->GetSegmentationLevel()");
-  otbControlConditionTestMacro(vertex1->GetSegmentationType() != vertex2->GetSegmentationType(),
-                               "Test failed: vertex1->GetSegmentationType()!=vertex2->GetSegmentationType()");
-
-  otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(0) != p1,
-                               "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(0)!=p1");
-  otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(1) != p2,
-                               "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(1)!=p2");
-  otbControlConditionTestMacro(vertex2->GetPath()->GetVertexList()->GetElement(2) != p3,
-                               "Test failed:vertex2->GetPath()->GetVertexList()->GetElement(2)!=p3");
-  otbControlConditionTestMacro(vertex1->GetCompacity() != vertex2->GetCompacity(),
-                               "Test failed: vertex1->GetCompacity()!=vertex2->GetCompacity()");
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Core/Metadata/include/otbBandName.h b/Modules/Radiometry/Indices/include/otbBandName.h
similarity index 83%
rename from Modules/Core/Metadata/include/otbBandName.h
rename to Modules/Radiometry/Indices/include/otbBandName.h
index 6bd25a144e5ac7a0506694035e591195a478e92c..118086139976cff411152658b054e26c59e93a44 100644
--- a/Modules/Core/Metadata/include/otbBandName.h
+++ b/Modules/Radiometry/Indices/include/otbBandName.h
@@ -27,11 +27,30 @@ namespace BandName
 {
 
 /**
-* Provides a way to identify bands when passing the parameters
-* to the radiometric functors.*
-*/
-enum BandName {BLUE, GREEN, RED, NIR, MIR};
-enum LandsatTMBandNames {TM1, TM2, TM3, TM4, TM5, TM60, TM61, TM62, TM7};
+ * Provides a way to identify bands when passing the parameters
+ * to the radiometric functors.*
+ */
+enum class CommonBandNames
+{
+  BLUE,
+  GREEN,
+  RED,
+  NIR,
+  MIR,
+  MAX
+};
+enum LandsatTMBandNames
+{
+  TM1,
+  TM2,
+  TM3,
+  TM4,
+  TM5,
+  TM60,
+  TM61,
+  TM62,
+  TM7
+};
 
 // Note for landsat equivalence
 // http://landsat.gsfc.nasa.gov/news/news-archive/sci_0017.html
@@ -57,8 +76,8 @@ enum LandsatTMBandNames {TM1, TM2, TM3, TM4, TM5, TM60, TM61, TM62, TM7};
 // 6              10.40-12.50 microm                Thermal IR
 // 7                2.08-2.35 microm                Mid-IR
 
-}
+} // namespace BandName
 
-}
+} // namespace otb
 
 #endif
diff --git a/Modules/Radiometry/Indices/include/otbBuiltUpIndicesFunctor.h b/Modules/Radiometry/Indices/include/otbBuiltUpIndicesFunctor.h
index ac8fff8d7e364ae00790595caaaeadada28ce211..426548fd5fc40aedf09bed790d64ccb4e2431d08 100644
--- a/Modules/Radiometry/Indices/include/otbBuiltUpIndicesFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbBuiltUpIndicesFunctor.h
@@ -21,161 +21,12 @@
 #ifndef otbBuiltUpIndicesFunctor_h
 #define otbBuiltUpIndicesFunctor_h
 
-#include "otbVegetationIndicesFunctor.h"
-#include <string>
+#include "otbRadiometricIndex.h"
 
 namespace otb
 {
 namespace Functor
 {
-/**
-   * \class TM4AndTM5IndexBase
-   * \brief Base class for TM4 And TM5 channels of Land Sat
-   * (equivalent to Red and NIR of SPOT5)
-   *
-   *  Implement operators for UnaryFunctorImageFilter templated with a
-   *  VectorImage and BinaryFunctorImageFilter templated with single
-   *  images.
-   *  Subclasses should NOT overload operators, they must  re-implement
-   *  the Evaluate() method.
-   *
-   * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template<class TInput1, class TInput2, class TOutput>
-class TM4AndTM5IndexBase
-{
-public:
-  /// Vector pixel type used to support both vector images and multiple
-  /// input images
-  typedef itk::VariableLengthVector<TInput1> InputVectorType;
-
-  //operators !=
-  bool operator !=(const TM4AndTM5IndexBase&) const
-  {
-    return true;
-  }
-  //operator ==
-  bool operator ==(const TM4AndTM5IndexBase& other) const
-  {
-    return !(*this != other);
-  }
-
-  // Operator on vector pixel type
-  inline TOutput operator ()(const InputVectorType& inputVector) const
-  {
-    return this->Evaluate(inputVector[m_TM4Index - 1], static_cast<TInput2>(inputVector[m_TM5Index - 1]));
-  }
-
-  // Binary operator
-  inline TOutput operator ()(const TInput1& tm4, const TInput2& tm5) const
-  {
-    return this->Evaluate(tm4, tm5);
-  }
-  /// Constructor
-  TM4AndTM5IndexBase() : m_TM4Index(4), m_TM5Index(5) {}
-  /// Desctructor
-  virtual ~TM4AndTM5IndexBase() {}
-
-  /// Set TM4 Index
-  void SetIndex1(unsigned int channel)
-  {
-    m_TM4Index = channel;
-  }
-  /// Get TM4 Index
-  unsigned int GetIndex1() const
-  {
-    return m_TM4Index;
-  }
-  /// Set TM5 Index
-  void SetIndex2(unsigned int channel)
-  {
-    m_TM5Index = channel;
-  }
-  /// Get TM5 Index
-  unsigned int GetIndex2() const
-  {
-    return m_TM5Index;
-  }
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::RED)
-      {
-      m_TM4Index = channel;
-      }
-    if (band == BandName::NIR)
-      {
-      m_TM5Index = channel;
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::RED)
-      {
-      return m_TM4Index;
-      }
-    if (band == BandName::NIR)
-      {
-      return m_TM5Index;
-      }
-  }
-
-  /** Return the index name */
-  virtual std::string GetName() const = 0;
-
-protected:
-  // This method must be reimplemented in subclasses to actually
-  // compute the index value
-  virtual TOutput Evaluate(const TInput1& tm4, const TInput2& tm5) const = 0;
-
-private:
-  unsigned int m_TM4Index;
-  unsigned int m_TM5Index;
-};
-
-/** \class NDBI
- *  \brief This functor computes the Normalized Difference Built Up Index (NDBI)
- *
- *  [Zha 2003]
- *
- *  \ingroup Functor
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template <class TInput1, class TInput2, class TOutput>
-class NDBI : public TM4AndTM5IndexBase<TInput1, TInput2, TOutput>
-{
-public:
-  /** Return the index name */
-  std::string GetName() const override
-  {
-    return "NDBI";
-  }
-
-  /// Constructor
-  NDBI() {}
-  /// Desctructor
-  ~NDBI() override {}
-  // Operator on r and nir single pixel values
-protected:
-  inline TOutput Evaluate(const TInput1& pTM4, const TInput2& pTM5) const override
-  {
-    double dTM4 = static_cast<double>(pTM4);
-    double dTM5 = static_cast<double>(pTM5);
-    if (dTM5 + dTM4 == 0)
-      {
-      return static_cast<TOutput>(0.);
-      }
-
-    return (static_cast<TOutput>((dTM5 - dTM4) / (dTM5 + dTM4)));
-  }
-};
-
 /** \class ISU
  *  \brief This functor computes the Index surfaces built (ISU)
  *
@@ -186,56 +37,29 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class ISU : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class ISU : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  ISU() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "ISU";
   }
 
-  /// Constructor
-  ISU() : m_A(100.), m_B(25.) {}
-  /// Desctructor
-  ~ISU() override {}
-
-  /** Set/Get A correction */
-  void SetA(const double pA)
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    m_A = pA;
-  }
-  double GetA(void) const
-  {
-    return (m_A);
-  }
-  /** Set/Get B correction */
-  void SetB(const double pB)
-  {
-    m_B = pB;
-  }
-  double GetB(void) const
-  {
-    return (m_B);
-  }
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-protected:
-  inline TOutput Evaluate(const TInput1& pRed, const TInput2& pNIR) const override
-  {
-    double dRed = static_cast<double>(pRed);
-    double dNIR = static_cast<double>(pNIR);
-    if (dNIR == 0)
-      {
+    if (nir == 0)
+    {
       return static_cast<TOutput>(0.);
       }
 
-    return (static_cast<TOutput>(m_A - (m_B * dRed) / (dNIR)));
+      return (static_cast<TOutput>(A - (B * red) / nir));
   }
 
-private:
-  double m_A;
-  double m_B;
+  static constexpr double A = 100.;
+  static constexpr double B = 25.;
 };
 
 } // namespace Functor
diff --git a/Modules/Radiometry/Indices/include/otbIndicesStackFunctor.h b/Modules/Radiometry/Indices/include/otbIndicesStackFunctor.h
new file mode 100644
index 0000000000000000000000000000000000000000..f7b8503f4a189540b5b5e721b9aecf7f3786578b
--- /dev/null
+++ b/Modules/Radiometry/Indices/include/otbIndicesStackFunctor.h
@@ -0,0 +1,102 @@
+/*
+ * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
+ *
+ * This file is part of Orfeo Toolbox
+ *
+ *     https://www.orfeo-toolbox.org/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef otbIndicesStackFunctor_h
+#define otbIndicesStackFunctor_h
+
+#include <vector>
+#include <stdexcept>
+#include "itkVariableLengthVector.h"
+
+namespace otb
+{
+
+namespace Functor
+{
+/**
+ * \class IndicesStackFunctor
+ * \brief A class to compute a stack of radiometric indices
+ *
+ * This functor can be built from a vector of TIndice*. its operator()
+ * will apply each functor of this vector to the input pixel, and
+ * return a VariableLengthVector containing the list resulting
+ * values. It can be used with otb::FunctorImageFilter
+ *
+ * \sa FunctorImageFilter
+ *
+ * \ingroup OTBIndices
+ */
+template <typename TIndice>
+class IndicesStackFunctor
+{
+public:
+  /// Read input / output types from TIndice
+  using IndiceType = TIndice;
+  using PixelType  = typename IndiceType::PixelType;
+  // Output will be a VariableLengthVector of values return by
+  // radiometric indices
+  using OutputType = itk::VariableLengthVector<typename IndiceType::OutputType>;
+
+  /**
+   * \param indices A std::vector<IndiceType*> for indices to compute
+   * the indice stack
+   * \throw std::runtime_error if indices is empty
+   */
+  IndicesStackFunctor(const std::vector<IndiceType*>& indices) : m_Indices(std::move(indices))
+  {
+    if (indices.empty())
+    {
+      throw std::runtime_error("Can not build IndicesStackFunctor from an empty list of indices.");
+    }
+  }
+
+  /**
+   * \param input A itk::VariableLengthVector<TInput> holding the
+   * pixel values for each band
+   * \return A VariableLengthVector<TInput::OutputType> holding all
+   * the indices values
+   */
+  void operator()(OutputType& out, const PixelType& in) const
+  {
+    size_t idx = 0;
+    for (auto indice : m_Indices)
+    {
+      out[idx] = (*indice)(in);
+      ++idx;
+    }
+  }
+  /**
+   * \return the size of the indices list (to be used by FunctorImgeFilter)
+   */
+  size_t OutputSize(...) const
+  {
+    return m_Indices.size();
+  }
+
+private:
+  /// The list of indices to use
+  std::vector<IndiceType*> m_Indices;
+};
+
+} // End namespace Functor
+
+} // End namespace otb
+
+#endif
diff --git a/Modules/Radiometry/Indices/include/otbLandsatTMIndices.h b/Modules/Radiometry/Indices/include/otbLandsatTMIndices.h
index 8dfa9cb4649682049b04f36f20fe789c739724de..aeb68d40248b1d9ae364638a060f0e60fd327b48 100644
--- a/Modules/Radiometry/Indices/include/otbLandsatTMIndices.h
+++ b/Modules/Radiometry/Indices/include/otbLandsatTMIndices.h
@@ -22,8 +22,8 @@
 #define otbLandsatTMIndices_h
 
 #include "otbMath.h"
-#include "itkVariableLengthVector.h"
 #include "otbBandName.h"
+#include "itkVariableLengthVector.h"
 #include "otbFuzzyVariable.h"
 #include <vector>
 #include <algorithm>
diff --git a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h b/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h
deleted file mode 100644
index 58120ad259a7666af506d883193f75299d85735a..0000000000000000000000000000000000000000
--- a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNDVIDataNodeFeatureFunction_h
-#define otbNDVIDataNodeFeatureFunction_h
-
-#include "otbDataNodeImageFunction.h"
-
-#include "otbVegetationIndicesFunctor.h"
-#include "otbPolyLineImageConstIterator.h"
-
-namespace otb
-{
-/** \class NDVIDataNodeFeatureFunction
-  * \brief Compute a NDVI based feature alongside a
-  * datanode.
-  *
-  * This function compute a feature alongside a datanode.
-  * The feature is (NDVI >= threshold) per cent along the
-  * tested datanode.
-  *
-  * \ingroup Functions
-  * \sa DataNodeImageFunction
-  * \sa SpectralAngleDataNodeFeatureFunction
- *
- * \ingroup OTBIndices
-  */
-
-template <
-class TImage,
-class TCoordRep = double,
-class TPrecision = double
->
-class ITK_EXPORT NDVIDataNodeFeatureFunction :
-    public DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision>
-{
-public:
-  /** Standard class typedefs. */
-  typedef NDVIDataNodeFeatureFunction                         Self;
-  typedef DataNodeImageFunction<TImage, std::vector<TPrecision>, TCoordRep, TPrecision>
-                                                              Superclass;
-  typedef itk::SmartPointer<Self>                             Pointer;
-  typedef itk::SmartPointer<const Self>                       ConstPointer;
-
-  /** Method for creation through the object factory. */
-  itkNewMacro(Self);
-
-  /** Run-time type information (and related methods). */
-  itkTypeMacro(NDVIDataNodeFeatureFunction, DataNodeImageFunction);
-
-  /** Some typedefs. */
-  typedef typename Superclass::DataNodeType           DataNodeType;
-  typedef typename DataNodeType::LineType             LineType;
-
-  typedef TImage                                      InputImageType;
-  typedef typename InputImageType::ConstPointer       InputImageConstPointer;
-  typedef typename InputImageType::PixelType          PixelType;
-  typedef typename InputImageType::InternalPixelType  ScalarRealType;
-  typedef typename InputImageType::IndexType          IndexType;
-  typedef typename InputImageType::IndexValueType     IndexValueType;
-
-  typedef TCoordRep                                   CoordRepType;
-
-  typedef TPrecision                                  PrecisionType;
-
-  typedef PolyLineImageConstIterator<InputImageType, LineType>
-                                                      ImageLineIteratorType;
-
-  typedef Functor::NDVI<ScalarRealType, ScalarRealType, PrecisionType>
-                                                      NDVIFunctorType;
-
-  typedef std::vector<PrecisionType>                  OutputType;
-
-  OutputType Evaluate( const DataNodeType& node ) const override;
-
-  /** Set/Get methods */
-  itkGetConstMacro(NDVIThreshold, PrecisionType);
-  itkSetMacro(NDVIThreshold, PrecisionType);
-
-  //TODO replace by metadata parsing
-  unsigned int GetREDChannelIndex() const
-  {
-    return m_NDVIFunctor.GetRedIndex()+1;
-  }
-
-  void SetREDChannelIndex(unsigned int id)
-  {
-    m_NDVIFunctor.SetRedIndex(id-1);
-  }
-
-  unsigned int GetNIRChannelIndex() const
-  {
-    return m_NDVIFunctor.GetNIRIndex()+1;
-  }
-
-  void SetNIRChannelIndex(unsigned int id)
-  {
-    m_NDVIFunctor.SetNIRIndex(id-1);
-  }
-
-protected:
-  NDVIDataNodeFeatureFunction();
-  ~NDVIDataNodeFeatureFunction() override {}
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  NDVIDataNodeFeatureFunction(const Self&) = delete;
-  void operator=(const Self&) = delete;
-
-  /** NDVI Threshold & Functor */
-  PrecisionType               m_NDVIThreshold;
-  NDVIFunctorType             m_NDVIFunctor;
-};
-
-}
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbNDVIDataNodeFeatureFunction.hxx"
-#endif
-
-#endif
diff --git a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.hxx b/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.hxx
deleted file mode 100644
index 910bc13c1f3baf276218f7af94ceb33a9fc0edb7..0000000000000000000000000000000000000000
--- a/Modules/Radiometry/Indices/include/otbNDVIDataNodeFeatureFunction.hxx
+++ /dev/null
@@ -1,141 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNDVIDataNodeFeatureFunction_hxx
-#define otbNDVIDataNodeFeatureFunction_hxx
-
-#include "otbNDVIDataNodeFeatureFunction.h"
-
-namespace otb
-{
-
-/**
- * Constructor
- */
-template <class TImage, class TCoordRep, class TPrecision>
-NDVIDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>
-::NDVIDataNodeFeatureFunction()
-{
-  m_NDVIThreshold = 0.3;    //Advised for QuickBird images
-  this->SetREDChannelIndex(3); //for QuickBird images
-  this->SetNIRChannelIndex(4); //for QuickBird images
-}
-
-/**
- * Standard "PrintSelf" method
- */
-template <class TImage, class TCoordRep, class TPrecision>
-void
-NDVIDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>
-::PrintSelf(
-  std::ostream& os,
-  itk::Indent indent) const
-{
-  Superclass::PrintSelf( os, indent );
-  os << indent << "NDVI Threshold: "    << m_NDVIThreshold << std::endl;
-  os << indent << "RED Channel Index: " << this->GetREDChannelIndex() << std::endl;
-  os << indent << "NIR Channel Index: " << this->GetNIRChannelIndex() << std::endl;
-}
-
-
-template <class TImage, class TCoordRep, class TPrecision>
-typename NDVIDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>
-::OutputType
- NDVIDataNodeFeatureFunction<TImage, TCoordRep, TPrecision>
-::Evaluate( const DataNodeType& node ) const
-{
-  if(!((this->GetREDChannelIndex() <= this->GetInputImage()->GetNumberOfComponentsPerPixel())
-      && (this->GetNIRChannelIndex() <= this->GetInputImage()->GetNumberOfComponentsPerPixel())
-      && (this->GetREDChannelIndex() > 0)
-      && (this->GetNIRChannelIndex() > 0)))
-    {
-    itkExceptionMacro(<< "Invalid RED or NIR Channel Index");
-    }
-
-  const typename ImageLineIteratorType::PathType* path;
-
-  switch (node.GetNodeType())
-        {
-        case FEATURE_POINT:
-          {
-          itkExceptionMacro(<< "This DataNode type is not handle yet");
-          break;
-          }
-        case FEATURE_LINE:
-          {
-          path = node.GetLine();
-          break;
-          }
-        case FEATURE_POLYGON:
-          {
-          path = node.GetPolygonExteriorRing();
-          break;
-          }
-        default:
-          {
-          itkExceptionMacro(<< "This DataNode type is not handle yet");
-          break;
-          }
-        }
-
-  ImageLineIteratorType lineIt(this->GetInputImage(), path);
-  lineIt.GoToBegin();
-
-  double nbValidPixel=0.;
-  double nbVisitedPixel=0.;
-
-  while(!lineIt.IsAtEnd())
-    {
-    if(this->IsInsideBuffer(lineIt.GetIndex()))
-      {
-      PixelType pixel = this->GetInputImage()->GetPixel(lineIt.GetIndex());
-      if(m_NDVIFunctor(pixel [this->GetREDChannelIndex() - 1],
-                       pixel [this->GetNIRChannelIndex() - 1]) >= this->GetNDVIThreshold())
-        {
-        nbValidPixel += 1;
-        }
-      nbVisitedPixel += 1;
-      }
-    ++lineIt;
-    }
-
-  OutputType output;
-
-  if(nbVisitedPixel == 0)
-    {
-    //std::cout << "nbValidPixel: " << nbValidPixel << "nbVisitedPixel" << nbVisitedPixel << std::endl;
-    //itkExceptionMacro(<< "The DataNode and the Support Image are disjointed");
-    output.push_back(static_cast<PrecisionType>(0.));
-    }
-  else
-    {
-    output.push_back(static_cast<PrecisionType>(nbValidPixel/nbVisitedPixel));
-    }
-
-  output.push_back(static_cast<PrecisionType>(nbValidPixel));
-  output.push_back(static_cast<PrecisionType>(nbVisitedPixel));
-
-  return output;
-}
-
-
-} // end namespace otb
-
-#endif
diff --git a/Modules/Radiometry/Indices/include/otbRadiometricIndex.h b/Modules/Radiometry/Indices/include/otbRadiometricIndex.h
new file mode 100644
index 0000000000000000000000000000000000000000..54179e85ed6314ada62ca18c4de27a94e3a2a8e3
--- /dev/null
+++ b/Modules/Radiometry/Indices/include/otbRadiometricIndex.h
@@ -0,0 +1,220 @@
+/*
+ * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
+ *
+ * This file is part of Orfeo Toolbox
+ *
+ *     https://www.orfeo-toolbox.org/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef otbRadiometricIndex_h
+#define otbRadiometricIndex_h
+
+#include "itkVariableLengthVector.h"
+#include "otbBandName.h"
+#include <array>
+#include <set>
+#include <string>
+#include <map>
+#include <stdexcept>
+
+using namespace otb::BandName;
+
+namespace otb
+{
+namespace Functor
+{
+/**
+ * \class RadiometricIndex
+ * \brief Base class for all radiometric indices
+ *
+ * This class is the base class for all radiometric indices.
+ *
+ * It offers services to:
+ * - Indicate which band are required among CommonBandNames enum
+ * - Set indices of each required band
+ * - Compute the indice response to a pixel by subclassing the pure
+ * virtual operator()
+ *
+ * This class is designed for performance on the critical path. For
+ * best performances use the Value() method when implementing
+ * operator() to avoid branches.
+ *
+ * \ingroup OTBIndices
+ */
+template <typename TInput, typename TOutput>
+class RadiometricIndex
+{
+public:
+  /// Types for input/output
+  using InputType  = TInput;
+  using PixelType  = itk::VariableLengthVector<InputType>;
+  using OutputType = TOutput;
+
+  /// Enum Among which bands are used
+  using BandNameType = CommonBandNames;
+
+  /// The number of bands, derived from the Enum MAX value
+  static constexpr size_t NumberOfBands = static_cast<size_t>(BandNameType::MAX);
+
+  static constexpr double Epsilon = 0.0000001;
+
+  // Necessary to be used as an abstract base class
+  virtual ~RadiometricIndex() = default;
+
+  /**
+   * \param requiredBands the set<CommonBandNames> of required bands
+   * \throw runtime_error if requiredBands contains CommonBandNames::MAX
+   */
+  RadiometricIndex(const std::set<BandNameType>& requiredBands) : m_RequiredBands(), m_BandIndices()
+  {
+    if (requiredBands.find(BandNameType::MAX) != requiredBands.end())
+    {
+      throw std::runtime_error("TBandNameEnum::MAX can not be used as a required band");
+    }
+
+    // Fill the required bands array
+    m_RequiredBands.fill(false);
+    m_BandIndices.fill(0);
+
+    for (auto b : requiredBands)
+    {
+      m_RequiredBands[static_cast<size_t>(b)] = true;
+    }
+  }
+
+  /**
+   * \return a set<CommandBandName> containing the required bands for
+   * this indice.
+   */
+  std::set<BandNameType> GetRequiredBands() const
+  {
+    std::set<BandNameType> resp;
+    for (size_t i = 0; i < NumberOfBands; ++i)
+    {
+      if (m_RequiredBands[i])
+      {
+        resp.insert(static_cast<BandNameType>(i));
+      }
+    }
+
+    return resp;
+  }
+
+  /**
+   * \param band The band to set (value in CommandBandName)
+   * \param index The index of the band to set (starts at 1 for first band)
+   * \throw runtime_error if band is CommandBandName::MAX
+   */
+  void SetBandIndex(BandNameType band, size_t index)
+  {
+    if (band == BandNameType::MAX)
+    {
+      throw std::runtime_error("Can not set index for CommandBandName::MAX");
+    }
+    m_BandIndices[static_cast<size_t>(band)] = index;
+  }
+
+  /**
+   * \param indicesMap a std::map<CommandBandName,size_t> containing all
+   * bands indices to set  (starts at 1 for first band)
+   * \throw runtime_error if indicesMap contains CommandBandName::MAX
+   */
+  void SetBandsIndices(const std::map<BandNameType, size_t>& indicesMap)
+  {
+    for (auto it : indicesMap)
+    {
+      SetBandIndex(it.first, it.second);
+    }
+  }
+
+  /**
+   * \param band The band for which to retrieve indice
+   * \return The indices of the band
+   * \throw runtime_error if band is CommandBandName::MAX
+   */
+  size_t GetBandIndex(BandNameType band) const
+  {
+    if (band == BandNameType::MAX)
+    {
+      throw std::runtime_error("Can not get index for CommandBandName::MAX");
+    }
+    return m_BandIndices[static_cast<size_t>(band)];
+  }
+
+  /**
+   * Astract method which will compute the radiometric indice
+   * \param input A itk::VariableLengthVector<TInput> holding the
+   * pixel values for each band
+   * \return The indice value as TOutput  (starts at 1 for first band)
+   */
+  virtual TOutput operator()(const itk::VariableLengthVector<TInput>& input) const = 0;
+
+protected:
+  /**
+   * Helper method to retrieve index for band name. With respect to
+   * the public method, this method will not throw an exception if
+   * CommandBandName::MAX is used as a parameter. Since it is meant for
+   * internal use in the critical path and not for client code, it
+   * will only assert that band is not CommandBandName::MAX in debug
+   * mode.
+   *
+   * \param band The band for which to retrieve indice
+   * \return The indices of the band
+   */
+  size_t UncheckedBandIndex(BandNameType band) const
+  {
+    assert(band != BandNameType::MAX && "Can not retrieve index for band CommandBandName::MAX");
+    return m_BandIndices[static_cast<size_t>(band)];
+  }
+
+  /**
+   * Helper method to parse input  itk::VariableLengthVector<TInput>
+   * and get the corresponding band value.
+   * For instance:
+   * \snippet auto red   = this->Value(CommonBandNamess::RED,input);
+   *
+   * As this function is on the critical performance path, no checks
+   * are made to see wether this band is really required for this
+   * indice. However an assertion will be raised in debug mode.
+   *
+   * \param band The band for which to retrieve the value
+   * \param input A itk::VariableLengthVector<TInput> holding the
+   * pixel values for each band
+   * \return The value of the band as double
+   *
+   */
+  double Value(BandNameType band, const itk::VariableLengthVector<TInput>& input) const
+  {
+    assert(m_RequiredBands[static_cast<size_t>(band)] && "Retrieving value for a band that is not in the required bands list");
+    return static_cast<double>(input[UncheckedBandIndex(band) - 1]);
+  }
+
+private:
+  // Explicitely disable default constructor
+  RadiometricIndex() = delete;
+
+  /// An array storing the required status for each band
+  using RequiredBandsContainer = std::array<bool, NumberOfBands>;
+  RequiredBandsContainer m_RequiredBands;
+
+  /// An array storing the indice for each band
+  using BandIndicesContainer = std::array<size_t, NumberOfBands>;
+  BandIndicesContainer m_BandIndices;
+};
+
+} // namespace Functor
+} // End namespace otb
+
+#endif
diff --git a/Modules/Radiometry/Indices/include/otbSoilIndicesFunctor.h b/Modules/Radiometry/Indices/include/otbSoilIndicesFunctor.h
index 1f8ee072431c31fbcd476db730c772ca2e80fec1..aaedbc7c0efe62610a54a97817c87e52ff26dd1d 100644
--- a/Modules/Radiometry/Indices/include/otbSoilIndicesFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbSoilIndicesFunctor.h
@@ -22,255 +22,14 @@
 #define otbSoilIndicesFunctor_h
 
 #include "otbMath.h"
-#include "itkVariableLengthVector.h"
-#include "otbBandName.h"
-#include <string>
+#include "otbRadiometricIndex.h"
 
 namespace otb
 {
 namespace Functor
 {
-/**
- * \class GAndRIndexBase
- *
- * \brief Base class for Green And Red channels of Spot Images
- *  XS1 corresponds to the green channel
- *  XS2 corresponds to the red channel
- *  XS3 corresponds to the Nir channel
- *  XS4 corresponds to the Mir channel (for Spot 4 & 5)
- *  Implement operators for UnaryFunctorImageFilter templated with a
- *  VectorImage and BinaryFunctorImageFilter templated with single
- *  images.
- *  Subclasses should NOT overload operators, they must  re-implement
- *  the Evaluate() method.
- *
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
-*/
-template<class TInput1, class TInput2, class TOutput>
-class GAndRIndexBase
-{
-public:
-  /// Vector pixel type used to support both vector images and multiple
-  /// input images
-  typedef itk::VariableLengthVector<TInput1> InputVectorType;
-
-  //operators !=
-  bool operator !=(const GAndRIndexBase&) const
-  {
-    return true;
-  }
-  //operator ==
-  bool operator ==(const GAndRIndexBase& other) const
-  {
-    return !(*this != other);
-  }
-
-  // Operator on vector pixel type
-  inline TOutput operator ()(const InputVectorType& inputVector) const
-  {
-    return this->Evaluate(inputVector[m_GreenIndex - 1], static_cast<TInput2>(inputVector[m_RedIndex - 1]));
-  }
-
-  // Binary operator
-  inline TOutput operator ()(const TInput1& g, const TInput2& r) const
-  {
-    return this->Evaluate(g, r);
-  }
-  /// Constructor
-  GAndRIndexBase() : m_EpsilonToBeConsideredAsZero(0.0000001), m_GreenIndex(1), m_RedIndex(2) {}
-  /// Desctructor
-  virtual ~GAndRIndexBase() {}
-
-  /// Set Green Index
-  void SetGreenIndex(unsigned int channel)
-  {
-    m_GreenIndex = channel;
-  }
-  /// Get Green Index
-  unsigned int GetGreenIndex() const
-  {
-    return m_GreenIndex;
-  }
-  /// Set Red Index
-  void SetRedIndex(unsigned int channel)
-  {
-    m_RedIndex = channel;
-  }
-  /// Get Red Index
-  unsigned int GetRedIndex() const
-  {
-    return m_RedIndex;
-  }
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::RED)
-      {
-      m_RedIndex = channel;
-      }
-    if (band == BandName::GREEN)
-      {
-      m_GreenIndex = channel;
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::RED)
-      {
-      return m_RedIndex;
-      }
-    if (band == BandName::GREEN)
-      {
-      return m_GreenIndex;
-      }
-  }
-
-  /** Return the index name */
-  virtual std::string GetName() const = 0;
-
-protected:
-  // This method must be reimplemented in subclasses to actually
-  // compute the index value
-  virtual TOutput Evaluate(const TInput1& g, const TInput2& r) const = 0;
-  double m_EpsilonToBeConsideredAsZero;
-
-private:
-  unsigned int m_GreenIndex;
-  unsigned int m_RedIndex;
-};
-
-/**
- * \class GAndRAndNirIndexBase
- * \brief Base class for Green And Red And NIR channels of Spot Images
- *
- *
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template<class TInput1, class TInput2, class TInput3, class TOutput>
-class GAndRAndNirIndexBase
-{
-public:
-  /// Vector pixel type used to support both vector images and multiple
-  /// input images
-  typedef itk::VariableLengthVector<TInput1> InputVectorType;
-
-  //operators !=
-  bool operator !=(const GAndRAndNirIndexBase&) const
-  {
-    return true;
-  }
-  //operator ==
-  bool operator ==(const GAndRAndNirIndexBase& other) const
-  {
-    return !(*this != other);
-  }
-
-  // Operator on vector pixel type
-  inline TOutput operator ()(const InputVectorType& inputVector) const
-  {
-    return this->Evaluate(static_cast<TInput1>(inputVector[m_GreenIndex - 1]),
-                          static_cast<TInput2>(inputVector[m_RedIndex - 1]),
-                          static_cast<TInput3>(inputVector[m_NIRIndex - 1]));
-  }
-
-  // Binary operator
-  inline TOutput operator ()(const TInput1& g, const TInput2& r, const TInput2& nir) const
-  {
-    return this->Evaluate(g, r, nir);
-  }
-  /// Constructor
-  GAndRAndNirIndexBase() : m_EpsilonToBeConsideredAsZero(0.0000001), m_GreenIndex(1), m_RedIndex(2),  m_NIRIndex(3) {}
-  /// Desctructor
-  virtual ~GAndRAndNirIndexBase() {}
-
-  /// Set Green Index
-  void SetGreenIndex(unsigned int channel)
-  {
-    m_GreenIndex = channel;
-  }
-  /// Get Green Index
-  unsigned int GetGreenIndex() const
-  {
-    return m_GreenIndex;
-  }
-  /// Set Red Index
-  void SetRedIndex(unsigned int channel)
-  {
-    m_RedIndex = channel;
-  }
-  /// Get Red Index
-  unsigned int GetRedIndex() const
-  {
-    return m_RedIndex;
-  }
-  /// Set Nir Index
-  void SetNIRIndex(unsigned int channel)
-  {
-    m_NIRIndex = channel;
-  }
-  /// Get Nir Index
-  unsigned int GetNIRIndex() const
-  {
-    return m_NIRIndex;
-  }
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::RED)
-      {
-      m_RedIndex = channel;
-      }
-    if (band == BandName::GREEN)
-      {
-      m_GreenIndex = channel;
-      }
-    if (band == BandName::NIR)
-      {
-      m_NIRIndex = channel;
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::RED)
-      {
-      return m_RedIndex;
-      }
-    if (band == BandName::GREEN)
-      {
-      return m_GreenIndex;
-      }
-    if (band == BandName::NIR)
-      {
-      return m_NIRIndex;
-      }
-  }
-
-  /** Return the index name */
-  virtual std::string GetName() const = 0;
-
-protected:
-  // This method must be reimplemented in subclasses to actually
-  // compute the index value
-  virtual TOutput Evaluate(const TInput1& g, const TInput2& r, const TInput2& nir) const = 0;
-
-  double m_EpsilonToBeConsideredAsZero;
-
-private:
-  unsigned int m_GreenIndex;
-  unsigned int m_RedIndex;
-  unsigned int m_NIRIndex;
-};
-
-/** \class IR
- *  \brief This functor computes the Redness Index (IR)
+/** \class RI
+ *  \brief This functor computes the Redness Index (RI)
  *
  *  [Pouget et al., "Caracteristiques spectrales des surfaces sableuses
  *   de la region cotiere nord-ouest de l'Egypte: application aux donnees
@@ -283,36 +42,29 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class IR : public GAndRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class RI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  RI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::GREEN})
   {
-    return "IR";
   }
 
-  /// Constructor
-  IR() {}
-  /// Desctructor
-  ~IR() override {}
-  // Operator on r and nir single pixel values
-protected:
-  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dGreen = static_cast<double>(pGreen);
-    double dRed = static_cast<double>(pRed);
-    if (std::abs(dGreen) < this->m_EpsilonToBeConsideredAsZero)
-      {
+    auto green = this->Value(CommonBandNames::GREEN, input);
+    auto red   = this->Value(CommonBandNames::RED, input);
+
+    if (std::abs(green) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return static_cast<TOutput>(0.);
       }
 
-    return static_cast<TOutput>(dRed * dRed / (dGreen * dGreen * dGreen));
+      return static_cast<TOutput>(red * red / (green * green * green));
   }
 };
 
-/** \class IC
+/** \class CI
  *  \brief This functor computes the Color Index (IC)
  *
  *  [Pouget et al., "Caracteristiques spectrales des surfaces sableuses
@@ -326,37 +78,30 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class IC : public GAndRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class CI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  CI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::GREEN})
   {
-    return "IC";
   }
 
-  /// Constructor
-  IC() {}
-  /// Desctructor
-  ~IC() override {}
-  // Operator on r and nir single pixel values
-protected:
-  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dGreen = static_cast<double>(pGreen);
-    double dRed = static_cast<double>(pRed);
-    if (std::abs(dGreen + dRed) < this->m_EpsilonToBeConsideredAsZero)
-      {
+    auto green = this->Value(CommonBandNames::GREEN, input);
+    auto red   = this->Value(CommonBandNames::RED, input);
+
+    if (std::abs(green + red) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return static_cast<TOutput>(0.);
       }
 
-    return (static_cast<TOutput>((dRed - dGreen) / (dRed + dGreen)));
+      return (static_cast<TOutput>((red - green) / (red + green)));
   }
 };
 
-/** \class IB
- *  \brief This functor computes the Brilliance Index (IB)
+/** \class BI
+ *  \brief This functor computes the Brilliance Index (BI)
  *
  *  [ ]
  *
@@ -365,33 +110,25 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class IB : public GAndRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class BI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  BI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::GREEN})
   {
-    return "IB";
   }
 
-  /// Constructor
-  IB() {}
-  /// Desctructor
-  ~IB() override {}
-  // Operator on r and nir single pixel values
-protected:
-  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dGreen = static_cast<double>(pGreen);
-    double dRed = static_cast<double>(pRed);
+    auto green = this->Value(CommonBandNames::GREEN, input);
+    auto red   = this->Value(CommonBandNames::RED, input);
 
-    return (static_cast<TOutput>(std::sqrt((dRed * dRed + dGreen * dGreen) / 2.)));
+    return (static_cast<TOutput>(std::sqrt((red * red + green * green) / 2.)));
   }
 };
 
-/** \class IB2
- *  \brief This functor computes the Brilliance Index (IB2)
+/** \class BI2
+ *  \brief This functor computes the Brilliance Index (BI2)
  *
  *  [ ]
  *
@@ -400,29 +137,21 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TInput3, class TOutput>
-class IB2 : public GAndRAndNirIndexBase<TInput1, TInput2, TInput3, TOutput>
+template <class TInput, class TOutput>
+class BI2 : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  BI2() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::GREEN, CommonBandNames::NIR})
   {
-    return "IB2";
   }
 
-  /// Constructor
-  IB2() {}
-  /// Desctructor
-  ~IB2() override {}
-  // Operator on r and nir single pixel values
-protected:
-  inline TOutput Evaluate(const TInput1& pGreen, const TInput2& pRed, const TInput2& pNir) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dGreen = static_cast<double>(pGreen);
-    double dRed = static_cast<double>(pRed);
-    double dNir = static_cast<double>(pNir);
+    auto green = this->Value(CommonBandNames::GREEN, input);
+    auto red   = this->Value(CommonBandNames::RED, input);
+    auto nir   = this->Value(CommonBandNames::NIR, input);
 
-    return (static_cast<TOutput>(std::sqrt((dRed * dRed + dGreen * dGreen + dNir * dNir) / 3.)));
+    return (static_cast<TOutput>(std::sqrt((red * red + green * green + nir * nir) / 3.)));
   }
 };
 
diff --git a/Modules/Radiometry/Indices/include/otbVegetationIndicesFunctor.h b/Modules/Radiometry/Indices/include/otbVegetationIndicesFunctor.h
index 7131e2cdc08cf575a0070e846b02ae172b0c516d..63bc7299527ad45a5ab829f6a69d53f6cab3ec94 100644
--- a/Modules/Radiometry/Indices/include/otbVegetationIndicesFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbVegetationIndicesFunctor.h
@@ -22,383 +22,13 @@
 #define otbVegetationIndicesFunctor_h
 
 #include "otbMath.h"
-#include "itkVariableLengthVector.h"
-#include "otbBandName.h"
-#include <string>
+#include "otbRadiometricIndex.h"
 
 namespace otb
 {
 
 namespace Functor
 {
-
-/**
-   * \class RAndNIRIndexBase
-   * \brief Base class for R And NIR based Index
-   *
-   *  Implement operators for UnaryFunctorImageFilter templated with a
-   *  VectorImage and BinaryFunctorImageFilter templated with single
-   *  images.
-   *  Subclasses should NOT overload operators, they must  re-implement
-   *  the Evaluate() method.
-   *
-   * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template<class TInput1, class TInput2, class TOutput>
-class RAndNIRIndexBase
-{
-public:
-  /// Vector pixel type used to support both vector images and multiple
-  /// input images
-  typedef itk::VariableLengthVector<TInput1> InputVectorType;
-
-  //operators !=
-  bool operator !=(const RAndNIRIndexBase&) const
-  {
-    return true;
-  }
-  //operator ==
-  bool operator ==(const RAndNIRIndexBase& other) const
-  {
-    return !(*this != other);
-  }
-
-  // Operator on vector pixel type
-  inline TOutput operator ()(const InputVectorType& inputVector) const
-  {
-    return this->Evaluate(inputVector[m_RedIndex - 1], static_cast<TInput2>(inputVector[m_NIRIndex - 1]));
-  }
-
-  // Binary operator
-  inline TOutput operator ()(const TInput1& r, const TInput2& nir) const
-  {
-    return this->Evaluate(r, nir);
-  }
-  /// Constructor
-  RAndNIRIndexBase() :  m_EpsilonToBeConsideredAsZero(0.0000001), m_RedIndex(3), m_NIRIndex(4) {}
-  /// Desctructor
-  virtual ~RAndNIRIndexBase() {}
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::RED)
-      {
-      m_RedIndex = channel;
-      }
-    if (band == BandName::NIR)
-      {
-      m_NIRIndex = channel;
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::RED)
-      {
-      return m_RedIndex;
-      }
-    if (band == BandName::NIR)
-      {
-      return m_NIRIndex;
-      }
-  }
-
-  /// Set Red Index
-  void SetRedIndex(unsigned int channel)
-  {
-    m_RedIndex = channel;
-  }
-  /// Get Red Index
-  unsigned int GetRedIndex() const
-  {
-    return m_RedIndex;
-  }
-  /// Set NIR Index
-  void SetNIRIndex(unsigned int channel)
-  {
-    m_NIRIndex = channel;
-  }
-  /// Get NIR Index
-  unsigned int GetNIRIndex() const
-  {
-    return m_NIRIndex;
-  }
-
-  /** Return the index name */
-  virtual std::string GetName() const = 0;
-
-protected:
-  // This method must be reimplemented in subclasses to actually
-  // compute the index value
-  virtual TOutput Evaluate(const TInput1& r, const TInput2& nir) const = 0;
-  double m_EpsilonToBeConsideredAsZero;
-
-private:
-  unsigned int m_RedIndex;
-  unsigned int m_NIRIndex;
-};
-
-/**
- * \class RAndBAndNIRIndexBase
- * \brief base class for R, B And NIR based Index
- *  Implement operators for UnaryFunctorImageFilter templated with a
- *  VectorImage and BinaryFunctorImageFilter templated with single
- *  images.
- *  Subclasses should NOT overload operators, they must  re-implement
- *  the Evaluate() method.
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template<class TInput1, class TInput2, class TInput3, class TOutput>
-class RAndBAndNIRIndexBase
-{
-public:
-  /// Vector pixel type used to support both vector images and multiple
-  /// input images
-  typedef itk::VariableLengthVector<TInput1> InputVectorType;
-
-  //operators !=
-  bool operator !=(const RAndBAndNIRIndexBase&) const
-  {
-    return true;
-  }
-
-  //operator ==
-  bool operator ==(const RAndBAndNIRIndexBase& other) const
-  {
-    return !(*this != other);
-  }
-
-  // Operator on vector pixel type
-  inline TOutput operator ()(const InputVectorType& inputVector)
-  {
-    return this->Evaluate(inputVector[m_RedIndex - 1],
-                          static_cast<TInput2>(inputVector[m_BlueIndex - 1]),
-                          static_cast<TInput3>(inputVector[m_NIRIndex - 1]));
-  }
-  // Binary operator
-  inline TOutput operator ()(const TInput1& r, const TInput2& b, const TInput2& nir)
-  {
-    return this->Evaluate(r, b, nir);
-  }
-  /// Constructor
-  RAndBAndNIRIndexBase() : m_EpsilonToBeConsideredAsZero(0.0000001), m_RedIndex(3), m_BlueIndex(1), m_NIRIndex(4) {}
-  /// Desctructor
-  virtual ~RAndBAndNIRIndexBase() {}
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::RED)
-      {
-      m_RedIndex = channel;
-      }
-    if (band == BandName::BLUE)
-      {
-      m_BlueIndex = channel;
-      }
-    if (band == BandName::NIR)
-      {
-      m_NIRIndex = channel;
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::RED)
-      {
-      return m_RedIndex;
-      }
-    if (band == BandName::BLUE)
-      {
-      return m_BlueIndex;
-      }
-    if (band == BandName::NIR)
-      {
-      return m_NIRIndex;
-      }
-  }
-
-  /// Set Red Index
-  void SetRedIndex(unsigned int channel)
-  {
-    m_RedIndex = channel;
-  }
-  /// Get Red Index
-  unsigned int GetRedIndex() const
-  {
-    return m_RedIndex;
-  }
-  /// Set Blue Index
-  void SetBlueIndex(unsigned int channel)
-  {
-    m_BlueIndex = channel;
-  }
-  /// Get Blue Index
-  unsigned int GetBlueIndex() const
-  {
-    return m_BlueIndex;
-  }
-
-  /// Set NIR Index
-  void SetNIRIndex(unsigned int channel)
-  {
-    m_NIRIndex = channel;
-  }
-  /// Get NIR Index
-  unsigned int GetNIRIndex() const
-  {
-    return m_NIRIndex;
-  }
-
-  /** Return the index name */
-  virtual std::string GetName() const = 0;
-
-protected:
-  // This method must be reimplemented in subclasses to actually
-  // compute the index value
-  virtual TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const = 0;
-  double m_EpsilonToBeConsideredAsZero;
-
-private:
-  unsigned int m_RedIndex;
-  unsigned int m_BlueIndex;
-  unsigned int m_NIRIndex;
-};
-
-/**
- * \class RAndGAndNIRIndexBase
- * \brief base class for R, G And NIR based Index
- *  Implement operators for UnaryFunctorImageFilter templated with a
- *  VectorImage and BinaryFunctorImageFilter templated with single
- *  images.
- *  Subclasses should NOT overload operators, they must  re-implement
- *  the Evaluate() method.
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template<class TInput1, class TInput2, class TInput3, class TOutput>
-class RAndGAndNIRIndexBase
-{
-public:
-  /// Vector pixel type used to support both vector images and multiple
-  /// input images
-  typedef itk::VariableLengthVector<TInput1> InputVectorType;
-
-  //operators !=
-  bool operator !=(const RAndGAndNIRIndexBase&) const
-  {
-    return true;
-  }
-  //operator ==
-  bool operator ==(const RAndGAndNIRIndexBase& other) const
-  {
-    return !(*this != other);
-  }
-
-  // Operator on vector pixel type
-  inline TOutput operator ()(const InputVectorType& inputVector)
-  {
-    return this->Evaluate(inputVector[m_RedIndex - 1],
-                          static_cast<TInput2>(inputVector[m_GreenIndex - 1]),
-                          static_cast<TInput3>(inputVector[m_NIRIndex - 1]));
-  }
-
-  // Binary operator
-  inline TOutput operator ()(const TInput1& r, const TInput2& g, const TInput2& nir)
-  {
-    return this->Evaluate(r, g, nir);
-  }
-  /// Constructor
-  RAndGAndNIRIndexBase() : m_EpsilonToBeConsideredAsZero(0.0000001), m_RedIndex(3), m_GreenIndex(2), m_NIRIndex(4)  {}
-  /// Desctructor
-  virtual ~RAndGAndNIRIndexBase() {}
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::RED)
-      {
-      m_RedIndex = channel;
-      }
-    if (band == BandName::GREEN)
-      {
-      m_GreenIndex = channel;
-      }
-    if (band == BandName::NIR)
-      {
-      m_NIRIndex = channel;
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::RED)
-      {
-      return m_RedIndex;
-      }
-    if (band == BandName::GREEN)
-      {
-      return m_GreenIndex;
-      }
-    if (band == BandName::NIR)
-      {
-      return m_NIRIndex;
-      }
-  }
-
-  /// Set Red Index
-  void SetRedIndex(unsigned int channel)
-  {
-    m_RedIndex = channel;
-  }
-  /// Get Red Index
-  unsigned int GetRedIndex() const
-  {
-    return m_RedIndex;
-  }
-  /// Set Green Index
-  void SetGreenIndex(unsigned int channel)
-  {
-    m_GreenIndex = channel;
-  }
-  /// Get Green Index
-  unsigned int GetGreenIndex() const
-  {
-    return m_GreenIndex;
-  }
-
-  /// Set NIR Index
-  void SetNIRIndex(unsigned int channel)
-  {
-    m_NIRIndex = channel;
-  }
-  /// Get NIR Index
-  unsigned int GetNIRIndex() const
-  {
-    return m_NIRIndex;
-  }
-
-  /** Return the index name */
-  virtual std::string GetName() const = 0;
-
-protected:
-  // This method must be reimplemented in subclasses to actually
-  // compute the index value
-  virtual TOutput Evaluate(const TInput1& r, const TInput2& g, const TInput3& nir) const = 0;
-  double m_EpsilonToBeConsideredAsZero;
-
-private:
-  unsigned int m_RedIndex;
-  unsigned int m_GreenIndex;
-  unsigned int m_NIRIndex;
-};
-
 /** \class NDVI
  *  \brief This functor computes the Normalized Difference Vegetation Index (NDVI)
  *
@@ -409,33 +39,31 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class NDVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class NDVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
+  NDVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
+  {
+  }
 
-  /** Return the index name */
-  std::string GetName() const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    return "NDVI";
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
+
+    return static_cast<TOutput>(Compute(red, nir));
   }
 
-  /// Constructor
-  NDVI() {}
-  /// Desctructor
-  ~NDVI() override {}
-  // Operator on r and nir single pixel values
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
+  // This static compute will be used in indices derived from NDVI
+  static double Compute(const double& red, const double& nir)
   {
-    double dr = static_cast<double>(r);
-    double dnir = static_cast<double>(nir);
-    if (std::abs(dnir + dr) < this->m_EpsilonToBeConsideredAsZero)
-      {
-      return static_cast<TOutput>(0.);
+    if (std::abs(nir + red) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
+      return 0.;
       }
 
-    return (static_cast<TOutput>((dnir - dr) / (dnir + dr)));
+      return (nir - red) / (nir + red);
   }
 };
 
@@ -449,29 +77,24 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class RVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class RVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-
-  /** Return the index name */
-  std::string GetName() const override
+  RVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "RVI";
   }
 
-  RVI() {}
-  ~RVI() override {}
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dr = static_cast<double>(r);
-    double dnir = static_cast<double>(nir);
-    if (std::abs(dr)  < this->m_EpsilonToBeConsideredAsZero)
-      {
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
+
+    if (std::abs(red) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return static_cast<TOutput>(0.);
       }
-    return (static_cast<TOutput>(dnir / dr));
+      return (static_cast<TOutput>(nir / red));
   }
 };
 
@@ -484,57 +107,31 @@ protected:
  * C. L. Wiegand, A. J. Richardson, D. E. Escobar, and A. H. Gerbermann,
  * "Vegetation Indices in Crop Assessments", REMOTE SENS. ENVIRON. 35:105-119 (1991)
  *
- *  \ingroup Functor2
+ *  \ingroup Functor
  * \ingroup Radiometry
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class PVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class PVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  PVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "PVI";
   }
 
-  PVI() : m_A(0.90893), m_B(7.46216), m_Coeff(0.74) {}
-  ~PVI() override {}
-  /** Set/Get A and B parameters */
-  void SetA(const double A)
-  {
-    m_A = A;
-    m_Coeff = 1. / (std::sqrt(m_A * m_A + 1.));
-  }
-  double GetA(void) const
-  {
-    return (m_A);
-  }
-  void SetB(const double B)
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    m_B = B;
-  }
-  double GetB(void) const
-  {
-    return (m_B);
-  }
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
-  {
-    double dnir = static_cast<double>(nir);
-    double dr = static_cast<double>(r);
-    return (static_cast<TOutput>((dnir - m_A * dr - m_B) * m_Coeff));
-  }
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-private:
+    return (static_cast<TOutput>((nir - A * red - B) * C));
+  }
 
   /** A and B parameters */
-  double m_A;
-  double m_B;
-  /** Denominator, pre-calculed when the A variable is set */
-  double m_Coeff;
-
+  static constexpr double A = 0.90893;
+  static constexpr double B = 7.46216;
+  static constexpr double C = 9.74;
 };
 
 /** \class SAVI
@@ -547,48 +144,28 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class SAVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class SAVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-
-  /** Return the index name */
-  std::string GetName() const override
+  SAVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "SAVI";
   }
 
-  SAVI() : m_L(0.5) {}
-  ~SAVI() override {}
-
-  /** Set/Get L correction */
-  void SetL(const double L)
-  {
-    m_L = L;
-  }
-  double GetL(void) const
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    return (m_L);
-  }
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
-  {
-    double dnir = static_cast<double>(nir);
-    double dr = static_cast<double>(r);
-    double denominator = dnir + dr + m_L;
-    if (std::abs(denominator)  < this->m_EpsilonToBeConsideredAsZero)
-      {
+    if (std::abs(nir + red + L) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return static_cast<TOutput>(0.);
       }
-    return (static_cast<TOutput>(((dnir - dr) * (1 + m_L)) / denominator));
+      return (static_cast<TOutput>(((nir - red) * (1 + L)) / (nir + red + L)));
   }
 
-private:
-
   /** L correction */
-  double m_L;
-
+  static constexpr double L = 0.5;
 };
 
 /** \class TSAVI
@@ -601,68 +178,33 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class TSAVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class TSAVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-
-  /** Return the index name */
-  std::string GetName() const override
+  TSAVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "TSAVI";
   }
 
-  TSAVI() : m_A(0.7), m_S(0.9), m_X(0.08) {}
-  ~TSAVI() override {}
-
-  /** Set/Get S and A parameters */
-  void SetS(const double S)
-  {
-    m_S = S;
-  }
-  double GetS(void) const
-  {
-    return (m_S);
-  }
-  void SetA(const double A)
-  {
-    m_A = A;
-  }
-  double GetA(void) const
-  {
-    return (m_A);
-  }
-  /** Set/Get X parameter */
-  void SetX(const double X)
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    m_X = X;
-  }
-  double GetX(void) const
-  {
-    return (m_X);
-  }
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
-  {
-    double dnir = static_cast<double>(nir);
-    double dr = static_cast<double>(r);
-    double denominator = m_A * dnir + dr + m_X * (1. + m_A * m_A);
-    if (std::abs(denominator) < this->m_EpsilonToBeConsideredAsZero)
-      {
+    double denominator = A * nir + red + X * (1. + A * A);
+
+    if (std::abs(denominator) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return static_cast<TOutput>(0.);
       }
-    return (static_cast<TOutput>((m_A * (dnir - m_A * dr - m_S)) / denominator));
+      return (static_cast<TOutput>((A * (nir - A * red - S)) / denominator));
   }
 
-private:
-
   /** A and S parameters */
-  double m_A;
-  double m_S;
+  static constexpr double A = 0.7;
+  static constexpr double S = 0.9;
   /** X parameter */
-  double m_X;
-
+  static constexpr double X = 0.08;
 };
 
 /** \class WDVI
@@ -675,41 +217,30 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class WDVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class WDVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  /// Constructor
+  WDVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "WDVI";
   }
 
-  /// Constructor
-  WDVI() : m_S(0.4) {}
-  /// Desctructor
-  ~WDVI() override {}
-  // Operator on r and nir single pixel values
-/** Set/Get Slop of soil line */
-  void SetS(const double s)
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    m_S = s;
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
+
+    return static_cast<TOutput>(Compute(red, nir));
   }
-  double GetS(void) const
+
+  static double Compute(const double& red, const double& nir)
   {
-    return (m_S);
+    return (nir - S * red);
   }
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
-  {
-    double dr = static_cast<double>(r);
-    double dnir = static_cast<double>(nir);
 
-    return (dnir - m_S * dr);
-  }
-private:
   /** Slope of soil line */
-  double m_S;
+  static constexpr double S = 0.4;
 };
 
 /** \class MSAVI
@@ -723,69 +254,37 @@ private:
  * \ingroup OTBIndices
  */
 
-template <class TInput1, class TInput2, class TOutput>
-class MSAVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class MSAVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  MSAVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "MSAVI";
   }
 
-  typedef NDVI<TInput1, TInput2, TOutput> NDVIFunctorType;
-  typedef SAVI<TInput1, TInput2, TOutput> SAVIFunctorType;
-  typedef WDVI<TInput1, TInput2, TOutput> WDVIFunctorType;
-  MSAVI() : m_S(0.4)
-  {
-    m_WDVIfunctor.SetS(m_S);
-  }
-  ~MSAVI() override {}
-/** Set/Get Slop of soil line */
-  void SetS(const double s)
-  {
-    m_S = s;
-    m_WDVIfunctor.SetS(m_S);
-  }
-  double GetS(void) const
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    return (m_S);
-  }
-  NDVIFunctorType GetNDVI(void) const
-  {
-    return (m_NDVIfunctor);
-  }
-  WDVIFunctorType GetWDVI(void) const
-  {
-    return (m_WDVIfunctor);
-  }
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
-  {
-    double dnir = static_cast<double>(nir);
-    double dr = static_cast<double>(r);
+    double ndvi = NDVI<TInput, TOutput>::Compute(red, nir);
+    double wdvi = WDVI<TInput, TOutput>::Compute(red, nir);
 
-    double dNDVI = this->GetNDVI() (r, nir);
-    double dWDVI = this->GetWDVI() (r, nir);
-    double dL = 1 - 2 * m_S * dNDVI * dWDVI;
+    double L = 1 - 2 * S * ndvi * wdvi;
 
-    double denominator = dnir + dr + dL;
+    double denominator = nir + red + L;
 
-    if (std::abs(denominator)  < this->m_EpsilonToBeConsideredAsZero)
-      {
+    if (std::abs(denominator) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return static_cast<TOutput>(0.);
       }
 
-    return (static_cast<TOutput>(((dnir - dr) * (1 + dL)) / denominator));
+      return (static_cast<TOutput>(((nir - red) * (1 + L)) / denominator));
   }
 
 private:
   /** Slope of soil line */
-  double                m_S;
-  NDVIFunctorType m_NDVIfunctor;
-  WDVIFunctorType       m_WDVIfunctor;
-
+  static constexpr double S = 0.4;
 };
 
 /** \class MSAVI2
@@ -798,30 +297,25 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class MSAVI2 : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class MSAVI2 : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  MSAVI2() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "MSAVI2";
   }
 
-  MSAVI2() {}
-  ~MSAVI2() override {}
-
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dnir = static_cast<double>(nir);
-    double dr = static_cast<double>(r);
-    double sqrt_value = (2 * dnir + 1) * (2 * dnir + 1) - 8 * (dnir - dr);
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
+
+    double sqrt_value = (2 * nir + 1) * (2 * nir + 1) - 8 * (nir - red);
     if (sqrt_value < 0.)
       {
       return static_cast<TOutput>(0.);
       }
-    return (static_cast<TOutput>((2 * dnir + 1 - std::sqrt(sqrt_value)) / 2.));
+      return (static_cast<TOutput>((2 * nir + 1 - std::sqrt(sqrt_value)) / 2.));
   }
 
 };
@@ -836,44 +330,39 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class GEMI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class GEMI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  GEMI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "GEMI";
   }
 
-  GEMI() {}
-  ~GEMI() override {}
-
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dnir = static_cast<double>(nir);
-    double dr = static_cast<double>(r);
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-    double dnu;
-    double dnumerateur_nu;
-    double ddenominateur_nu = dnir + dr + 0.5;
-    if (std::abs(ddenominateur_nu)  < this->m_EpsilonToBeConsideredAsZero)
-      {
-      dnu = 0;
+    double nu;
+    double num_nu;
+    double denom_nu = nir + red + 0.5;
+
+    if (std::abs(denom_nu) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
+      nu = 0;
       }
     else
       {
-      dnumerateur_nu = 2 * (dnir * dnir - dr * dr) + 1.5 * dnir + 0.5 * dr;
-      dnu = dnumerateur_nu / ddenominateur_nu;
+        num_nu = 2 * (nir * nir - red * red) + 1.5 * nir + 0.5 * red;
+        nu     = num_nu / denom_nu;
       }
 
-    double ddenominateur_GEMI = 1 - dr;
-    if (std::abs(ddenominateur_GEMI)  < this->m_EpsilonToBeConsideredAsZero)
+      double denom_GEMI = 1 - red;
+      if (std::abs(denom_GEMI) < RadiometricIndex<TInput, TOutput>::Epsilon)
       {
       return static_cast<TOutput>(0.);
       }
-    return (static_cast<TOutput>((dnu * (1 - 0.25 * dnu) - (dr - 0.125)) / ddenominateur_GEMI));
+      return (static_cast<TOutput>((nu * (1 - 0.25 * nu) - (red - 0.125)) / denom_GEMI));
   }
 
 };
@@ -890,87 +379,54 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TInput3, class TOutput>
-class AVI : public RAndGAndNIRIndexBase<TInput1, TInput2, TInput3, TOutput>
+template <class TInput, class TOutput>
+class AVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  AVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::GREEN, CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "AVI";
   }
 
-  AVI() : m_LambdaG(560.), m_LambdaR(660.), m_LambdaNir(830.) {}
-  ~AVI() override {}
-/** Set/Get Lambda red parameter*/
-  void SetLambdaR(const double lr)
-  {
-    m_LambdaR = lr;
-  }
-  double GetLambdaR(void) const
-  {
-    return (m_LambdaR);
-  }
-/** Set/Get Lambda green parameter */
-  void SetLambdaG(const double lg)
-  {
-    m_LambdaG = lg;
-  }
-  double GetLambdaG(void) const
-  {
-    return (m_LambdaG);
-  }
-/** Set/Get Lambda red parameter */
-  void SetLambdaNir(const double lnir)
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    m_LambdaNir = lnir;
-  }
-  double GetLambdaNir(void) const
-  {
-    return (m_LambdaNir);
-  }
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& g, const TInput3& nir) const override
-  {
-    double dr = static_cast<double>(r);
-    double dg = static_cast<double>(g);
-    double dnir = static_cast<double>(nir);
+    auto green = this->Value(CommonBandNames::GREEN, input);
+    auto red   = this->Value(CommonBandNames::RED, input);
+    auto nir   = this->Value(CommonBandNames::NIR, input);
 
-    double dfact1 = (m_LambdaNir - m_LambdaR) / m_LambdaR;
-    double dfact2 = (m_LambdaR - m_LambdaG) / m_LambdaR;
+    constexpr double dfact1 = (LambdaNir - LambdaR) / LambdaR;
+    constexpr double dfact2 = (LambdaR - LambdaG) / LambdaR;
     double dterm1;
     double dterm2;
-    if (std::abs(dnir - dr)  < this->m_EpsilonToBeConsideredAsZero)
-      {
+    if (std::abs(nir - red) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       dterm1 = 0;
       }
     else
       {
-      dterm1 = std::atan(dfact1 / (dnir - dr));
+        dterm1 = std::atan(dfact1 / (nir - red));
       }
 
-    if (std::abs(dg - dr)  < this->m_EpsilonToBeConsideredAsZero)
+      if (std::abs(green - red) < RadiometricIndex<TInput, TOutput>::Epsilon)
       {
       dterm2 = 0;
       }
     else
       {
-      dterm2 = std::atan(dfact2 / (dg - dr));
+        dterm2 = std::atan(dfact2 / (green - red));
       }
 
     return static_cast<TOutput>(dterm1 + dterm2);
 
   }
-private:
 
   /**  Central wavelength of the green channel (=Lambda1) */
-  double m_LambdaG;
+  static constexpr double LambdaG = 560;
 
   /**  Central wavelength of the red channel (=Lambda2) */
-  double m_LambdaR;
+  static constexpr double LambdaR = 660;
 
   /**  Central wavelength of the nir channel (=Lambda3) */
-  double m_LambdaNir;
+  static constexpr double LambdaNir = 830;
 };
 
 /** \class ARVI
@@ -985,134 +441,31 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TInput3, class TOutput>
-class ARVI : public RAndBAndNIRIndexBase<TInput1, TInput2, TInput3, TOutput>
-{
-public:
-  /** Return the index name */
-  std::string GetName() const override
-  {
-    return "ARVI";
-  }
-
-  ARVI() : m_Gamma(0.5) {}
-  ~ARVI() override {}
-
-  /** Set/Get Gamma parameter */
-  void SetGamma(const double gamma)
-  {
-    m_Gamma = gamma;
-  }
-  double GetGamma(void) const
-  {
-    return (m_Gamma);
-  }
-
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const override
-  {
-    double dr = static_cast<double>(r);
-    double db = static_cast<double>(b);
-    double dnir = static_cast<double>(nir);
-    double RHOrb = dr - m_Gamma * (db - dr);
-    double denominator = dnir + RHOrb;
-    if (std::abs(denominator)  < this->m_EpsilonToBeConsideredAsZero)
-      {
-      return static_cast<TOutput>(0.);
-      }
-    return (static_cast<TOutput>((dnir - RHOrb) / denominator));
-  }
-
-private:
-
-  /** Gamma parameter */
-  double m_Gamma;
-};
-
-/** \class TSARVI
- *  \brief This functor computes the Transformed Soil Atmospherical Resistant Vegetation Index (TSARVI)
- *
- *  [Yoram J. Kaufman and Didier Tanre, 1992]
- *
- *  \ingroup Functor
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template <class TInput1, class TInput2, class TInput3, class TOutput>
-class TSARVI : public RAndBAndNIRIndexBase<TInput1, TInput2, TInput3, TOutput>
+template <class TInput, class TOutput>
+class ARVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  ARVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::BLUE, CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "TSARVI";
   }
 
-  TSARVI() : m_A(0.0), m_B(0.0), m_X(0.08), m_Gamma(0.5) {}
-  ~TSARVI() override {}
-
-  /** Set/Get A and B parameters */
-  void SetA(const double A)
-  {
-    m_A = A;
-  }
-  double GetA(void) const
-  {
-    return (m_A);
-  }
-  void SetB(const double B)
-  {
-    m_B = B;
-  }
-  double GetB(void) const
-  {
-    return (m_B);
-  }
-  /** Set/Get X parameter */
-  void SetX(const double X)
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    m_X = X;
-  }
-  double GetX(void) const
-  {
-    return (m_X);
-  }
-  /** Set/Get the gamma parameter */
-  void SetGamma(const double gamma)
-  {
-    m_Gamma = gamma;
-  }
-  double GetGamma(void) const
-  {
-    return (m_Gamma);
-  }
+    auto blue = this->Value(CommonBandNames::BLUE, input);
+    auto red  = this->Value(CommonBandNames::RED, input);
+    auto nir  = this->Value(CommonBandNames::NIR, input);
 
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const override
-  {
-    double dr = static_cast<double>(r);
-    double db = static_cast<double>(b);
-    double dnir = static_cast<double>(nir);
-    double dRB = dr - m_Gamma * (db - dr);
-    double denominator = dRB + m_A * dnir - m_A * m_B + m_X * (1. + m_A * m_A);
-    if (std::abs(denominator)  < this->m_EpsilonToBeConsideredAsZero)
-      {
+    double RHOrb       = red - Gamma * (blue - red);
+    double denominator = nir + RHOrb;
+    if (std::abs(denominator) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return static_cast<TOutput>(0.);
       }
-    return (static_cast<TOutput>((m_A * (dnir - m_A * dRB - m_B)) / denominator));
+      return (static_cast<TOutput>((nir - RHOrb) / denominator));
   }
 
-private:
-
-  /** A and B parameters */
-  double m_A;
-  double m_B;
-  /** X parameter */
-  double m_X;
   /** Gamma parameter */
-  double m_Gamma;
-
+  static constexpr double Gamma = 0.5;
 };
 
 /** \class EVI
@@ -1127,81 +480,39 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TInput3, class TOutput>
-class EVI : public RAndBAndNIRIndexBase<TInput1, TInput2, TInput3, TOutput>
+template <class TInput, class TOutput>
+class EVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  EVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::BLUE, CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "EVI";
   }
 
-  EVI() : m_G(2.5), m_C1(6.0), m_C2(7.5), m_L(1.0) {}
-  ~EVI() override {}
-/** Set/Get G parameter */
-  void SetG(const double g)
-  {
-    m_G = g;
-  }
-  double GetG(void) const
-  {
-    return (m_G);
-  }
-  /** Set/Get C1 parameter */
-  void SetC1(const double c1)
-  {
-    m_C1 = c1;
-  }
-  double GetC1(void) const
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    return (m_C1);
-  }
-  /** Set/Get C2 parameter */
-  void SetC2(const double c2)
-  {
-    m_C2 = c2;
-  }
-  double GetC2(void) const
-  {
-    return (m_C2);
-  }
-  /** Set/Get L parameter */
-  void SetL(const double l)
-  {
-    m_L = l;
-  }
-  double GetL(void) const
-  {
-    return (m_L);
-  }
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& b, const TInput3& nir) const override
-  {
-    double dr = static_cast<double>(r);
-    double db = static_cast<double>(b);
-    double dnir = static_cast<double>(nir);
-    double denominator = dnir + m_C1 * dr - m_C2 * db + m_L;
-    if (std::abs(denominator) < this->m_EpsilonToBeConsideredAsZero)
-      {
+    auto blue = this->Value(CommonBandNames::BLUE, input);
+    auto red  = this->Value(CommonBandNames::RED, input);
+    auto nir  = this->Value(CommonBandNames::NIR, input);
+
+    double denominator = nir + C1 * red - C2 * blue + L;
+    if (std::abs(denominator) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return (static_cast<TOutput>(0.));
       }
-    return (static_cast<TOutput>(m_G * (dnir - dr) / denominator));
+      return (static_cast<TOutput>(G * (nir - red) / denominator));
   }
 
-private:
-
   /** Gain factor */
-  double m_G;
+  static constexpr double G = 2.5;
 
   /** Coefficient of the aerosol resistance term */
-  double m_C1;
+  static constexpr double C1 = 6.0;
 
   /** Coefficient of the aerosol resistance term */
-  double m_C2;
+  static constexpr double C2 = 7.5;
 
   /** Canopy background adjustment */
-  double m_L;
+  static constexpr double L = 1.0;
 };
 
 /** \class IPVI
@@ -1214,31 +525,26 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class IPVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class IPVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  IPVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "IPVI";
   }
 
-  IPVI() {}
-  ~IPVI() override {}
-
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dr = static_cast<double>(r);
-    double dnir = static_cast<double>(nir);
-    if (std::abs(dnir + dr)  < this->m_EpsilonToBeConsideredAsZero)
-      {
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
+
+    if (std::abs(nir + red) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
       return static_cast<TOutput>(0.);
       }
     else
       {
-      return (static_cast<TOutput>(dnir / (dnir + dr)));
+        return (static_cast<TOutput>(nir / (nir + red)));
       }
   }
 };
@@ -1253,40 +559,30 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class TNDVI : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class TNDVI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  TNDVI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-    return "TNDVI";
   }
 
-  typedef NDVI<TInput1, TInput2, TOutput> NDVIFunctorType;
-  TNDVI() {}
-  ~TNDVI() override {}
-
-  NDVIFunctorType GetNDVI(void) const
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    return (m_NDVIfunctor);
-  }
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
-  {
-    double dval = this->GetNDVI() (r, nir) + 0.5;
-    if (dval < 0)
-      {
+    double val = NDVI<TInput, TOutput>::Compute(red, nir) + 0.5;
+
+    if (val < 0)
+    {
       return  (static_cast<TOutput>(0));
       }
     else
       {
-      return (static_cast<TOutput>(std::sqrt(dval)));
+        return (static_cast<TOutput>(std::sqrt(val)));
       }
   }
-private:
-  NDVIFunctorType m_NDVIfunctor;
 };
 
 /** \class LAIFromNDVILogarithmic
@@ -1305,69 +601,62 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class LAIFromNDVILogarithmic : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class LAIFromNDVILogarithmic : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  LAIFromNDVILogarithmic()
+    : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR}), m_NdviSoil(0.1), m_NdviInf(0.89), m_ExtinctionCoefficient(0.71)
   {
-    return "LAIFromNDVILogarithmic";
   }
 
-  typedef NDVI<TInput1, TInput2, TOutput> NDVIFunctorType;
-  LAIFromNDVILogarithmic() : m_NdviSoil(0.10), m_NdviInf(0.89), m_ExtinctionCoefficient(0.71) {}
-  ~LAIFromNDVILogarithmic() override {}
-
-  NDVIFunctorType GetNDVI(void) const
-  {
-    return (m_NDVIfunctor);
-  }
-
-  void SetNdviSoil(const double val)
+  void SetNdviSoil(const double& val)
   {
     m_NdviSoil = val;
   }
-  double GetNdviSoil(void) const
+
+  const double& GetNdviSoil() const
   {
-    return (m_NdviSoil);
+    return m_NdviSoil;
   }
 
-  void SetNdviInf(const double val)
+  void SetNdviInf(const double& val)
   {
     m_NdviInf = val;
   }
-  double GetNdviInf(void) const
+
+  const double& GetNdviInf() const
   {
-    return (m_NdviInf);
+    return m_NdviInf;
   }
 
-  void SetExtinctionCoefficient(const double val)
+  void SetExtinctionCoefficient(const double& val)
   {
     m_ExtinctionCoefficient = val;
   }
-  double GetExtinctionCoefficient(void) const
+
+  const double& GetExtionctionCoefficient() const
   {
-    return (m_ExtinctionCoefficient);
+    return m_ExtinctionCoefficient;
   }
 
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    double dval = this->GetNDVI() (r, nir);
-    if (dval < 0)
-      {
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
+
+    double val = NDVI<TInput, TOutput>::Compute(red, nir);
+
+    if (val < 0)
+    {
       return  (static_cast<TOutput>(0));
       }
     else
       {
-      return (static_cast<TOutput>(
-    -(1.0/m_ExtinctionCoefficient)*std::log((dval- m_NdviInf)/(m_NdviSoil-m_NdviInf))
-    ));
+        return static_cast<TOutput>(-(1.0 / m_ExtinctionCoefficient) * std::log((val - m_NdviInf) / (m_NdviSoil - m_NdviInf)));
       }
   }
-private:
-  NDVIFunctorType m_NDVIfunctor;
+
   double m_NdviSoil;
   double m_NdviInf;
   double m_ExtinctionCoefficient;
@@ -1391,50 +680,42 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class LAIFromReflectancesLinear : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class LAIFromReflectancesLinear : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
-  {
-    return "LAIFromReflectancesLinear";
-  }
-
-  typedef NDVI<TInput1, TInput2, TOutput> NDVIFunctorType;
-  LAIFromReflectancesLinear() : m_RedCoef(-17.91), m_NirCoef(12.26) {}
-  ~LAIFromReflectancesLinear() override {}
-
-  NDVIFunctorType GetReflectances(void) const
+  LAIFromReflectancesLinear() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR}), m_RedCoef(-17.91), m_NirCoef(12.26)
   {
-    return (m_NDVIfunctor);
   }
 
-  void SetRedCoef(const double val)
+  void SetRedCoef(const double& val)
   {
     m_RedCoef = val;
   }
-  double GetRedCoef(void) const
+
+  const double& GetRedCoef() const
   {
-    return (m_RedCoef);
+    return m_RedCoef;
   }
 
-  void SetNirCoef(const double val)
+  void SetNirCoef(const double& val)
   {
     m_NirCoef = val;
   }
-  double GetNirCoef(void) const
+
+  const double& GetNirCoef() const
   {
-    return (m_NirCoef);
+    return m_NirCoef;
   }
 
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-      return (static_cast<TOutput>(m_RedCoef*r+m_NirCoef*nir));
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
+
+    return (static_cast<TOutput>(m_RedCoef * red + m_NirCoef * nir));
   }
-private:
-  NDVIFunctorType m_NDVIfunctor;
+
   double m_RedCoef;
   double m_NirCoef;
 };
@@ -1459,40 +740,29 @@ private:
   */
 
 
-  template <class TInput1, class TInput2, class TOutput>
-  class LAIFromNDVIFormosat2Functor : public RAndNIRIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class LAIFromNDVIFormosat2Functor : public RadiometricIndex<TInput, TOutput>
+{
+public:
+  LAIFromNDVIFormosat2Functor() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::NIR})
   {
-  public:
+  }
 
-    /** Return the index name */
-    std::string GetName() const override
-    {
-      return "LAIFromNDVIFormosat2Functor";
-    }
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
+  {
+    auto red = this->Value(CommonBandNames::RED, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-    /// Constructor
-    LAIFromNDVIFormosat2Functor() {}
-    /// Desctructor
-    ~LAIFromNDVIFormosat2Functor() override {}
-    // Operator on r and nir single pixel values
-  protected:
-    inline TOutput Evaluate(const TInput1& r, const TInput2& nir) const override
+    if (std::abs(nir + red) < RadiometricIndex<TInput, TOutput>::Epsilon)
     {
-    double a = 0.1519;
-    double b = 3.9443;
-    double c = 0.13;
-
-      double dr = static_cast<double>(r);
-      double dnir = static_cast<double>(nir);
-      if (std::abs(dnir + dr) < this->m_EpsilonToBeConsideredAsZero)
-        {
-        return static_cast<TOutput>(0.);
-        }
-
-      return  static_cast<TOutput>(a*(std::exp(static_cast<double>(dnir-dr)/static_cast<double>(dr+dnir)*b)-std::exp(c*b)));
-    };
-
+      return static_cast<TOutput>(0.);
+    }
+    return static_cast<TOutput>(A * (std::exp((nir - red) / (red + nir) * B) - std::exp(C * B)));
+  }
 
+  static constexpr double A = 0.1519;
+  static constexpr double B = 3.9443;
+  static constexpr double C = 0.13;
 };
 
 
diff --git a/Modules/Radiometry/Indices/include/otbWaterIndicesFunctor.h b/Modules/Radiometry/Indices/include/otbWaterIndicesFunctor.h
index e68d884d721fbdbe9fe4cbf67b2f4c034c8e66c3..19acf0fb19bd6681451935869625f2b1267d0665 100644
--- a/Modules/Radiometry/Indices/include/otbWaterIndicesFunctor.h
+++ b/Modules/Radiometry/Indices/include/otbWaterIndicesFunctor.h
@@ -22,168 +22,12 @@
 #define otbWaterIndicesFunctor_h
 
 #include "otbMath.h"
-#include "itkVariableLengthVector.h"
-#include "otbSqrtSpectralAngleFunctor.h"
-#include "otbBandName.h"
-#include <string>
+#include "otbRadiometricIndex.h"
 
 namespace otb
 {
 namespace Functor
 {
-/**
-   * \class WaterIndexBase
-   * \brief Base class
-   *
-   *  Implement operators for UnaryFunctorImageFilter templated with a
-   *  VectorImage and BinaryFunctorImageFilter templated with single
-   *  images.
-   *  Subclasses should NOT overload operators, they must  re-implement
-   *  the Evaluate() method.
-   *
-   * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template<class TInput1, class TInput2, class TOutput>
-class WaterIndexBase
-{
-public:
-  /// Vector pixel type used to support both vector images and multiple
-  /// input images
-  typedef itk::VariableLengthVector<TInput1> InputVectorType;
-
-  //operators !=
-  bool operator !=(const WaterIndexBase&) const
-  {
-    return true;
-  }
-  //operator ==
-  bool operator ==(const WaterIndexBase& other) const
-  {
-    return !(*this != other);
-  }
-
-  // Operator on vector pixel type
-  inline TOutput operator ()(const InputVectorType& inputVector) const
-  {
-    return this->Evaluate(inputVector[m_Index1 - 1], static_cast<TInput2>(inputVector[m_Index2 - 1]));
-  }
-
-  // Binary operator
-  inline TOutput operator ()(const TInput1& id1, const TInput2& id2) const
-  {
-    return this->Evaluate(id1, id2);
-  }
-  /// Constructor
-  WaterIndexBase() {}
-  /// Desctructor
-  virtual ~WaterIndexBase() {}
-
-  /// Set Index 1
-  void SetIndex1(unsigned int channel)
-  {
-    m_Index1 = channel;
-  }
-  /// Get Index 1
-  unsigned int GetIndex1() const
-  {
-    return m_Index1;
-  }
-  /// Set Index 2
-  void SetIndex2(unsigned int channel)
-  {
-    m_Index2 = channel;
-  }
-  /// Get Index 2
-  unsigned int GetIndex2() const
-  {
-    return m_Index2;
-  }
-
-  /** Return the index name */
-  virtual std::string GetName() const = 0;
-
-protected:
-  // This method must be reimplemented in subclasses to actually
-  // compute the index value
-  virtual TOutput Evaluate(const TInput1& id1, const TInput2& id2) const = 0;
-
-private:
-  unsigned int m_Index1;
-  unsigned int m_Index2;
-};
-
-/** \class WaterIndexFunctor
- *  \brief This functor will be used for most of water index functors.
- *
- *  \ingroup Functor
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template <class TInput1, class TInput2, class TOutput>
-class WaterIndexFunctor : public WaterIndexBase<TInput1, TInput2, TOutput>
-{
-public:
-  /** Return the index name */
-  std::string GetName() const override
-  {
-    return "WaterIndexFunctor";
-  }
-
-  WaterIndexFunctor() {}
-  ~WaterIndexFunctor() override {}
-protected:
-  inline TOutput Evaluate(const TInput1& id1, const TInput2& id2) const override
-  {
-    double dindex1 = static_cast<double>(id1);
-    double dindex2 = static_cast<double>(id2);
-    double ddenom = dindex1 + dindex2;
-    if (ddenom == 0)
-      {
-      return static_cast<TOutput>(0.);
-      }
-    return (static_cast<TOutput>((dindex1 - dindex2) / ddenom));
-  }
-};
-
-/** \class SRWI
- *  \brief This functor computes the Simple Ratio Water Index (SRWI)
- *  \brief For MODIS bands 860 & 1240
- *
- *   [Zarco-Tejada 2001]
- *
- *  \ingroup Functor
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template <class TInput1, class TInput2, class TOutput>
-class SRWI : public WaterIndexBase<TInput1, TInput2, TOutput>
-{
-public:
-  /** Return the index name */
-  virtual std::string GetName() const
-  {
-    return "SRWI";
-  }
-
-  SRWI() {}
-  virtual ~SRWI() {}
-protected:
-  inline TOutput Evaluate(const TInput1& rho860, const TInput2& rho1240) const
-  {
-    double drho860 = static_cast<double>(rho860);
-    double drho1240 = static_cast<double>(rho1240);
-    if (drho1240 == 0)
-      {
-      return static_cast<TOutput>(0.);
-      }
-    return (static_cast<TOutput>(drho860 / drho1240));
-  }
-};
-
 /** \class NDWI
  *  \brief This functor computes the Normalized Difference Water Index (NDWI)
  *  \brief Also called :
@@ -198,79 +42,26 @@ protected:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class NDWI : public WaterIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class NDWI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  NDWI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::NIR, CommonBandNames::MIR})
   {
-    return "NDWI";
   }
 
-  typedef WaterIndexFunctor<TInput1, TInput2, TOutput> WIFunctorType;
-  /// Constructor
-  NDWI() {}
-  /// Desctructor
-  ~NDWI() override {}
-  WIFunctorType GetWIFunctor(void) const
-  {
-    return (m_WIFunctor);
-  }
-  /// Set Index NIR
-  void SetNIRIndex(unsigned int channel)
-  {
-    this->SetIndex1(channel);
-  }
-  /// Get Index NIR
-  unsigned int GetNIRIndex() const
-  {
-    return this->GetIndex1();
-  }
-  /// Set Index MIR
-  void SetMIRIndex(unsigned int channel)
-  {
-    this->SetIndex2(channel);
-  }
-  /// Get Index MIR
-  unsigned int GetMIRIndex() const
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    return this->GetIndex2();
-  }
+    auto mir = this->Value(CommonBandNames::MIR, input);
+    auto nir = this->Value(CommonBandNames::NIR, input);
 
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::NIR)
-      {
-      this->SetIndex1(channel);
-      }
-    if (band == BandName::MIR)
-      {
-      this->SetIndex2(channel);
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::NIR)
-      {
-      return this->GetIndex1();
+    if (std::abs(nir + mir) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
+      return 0.;
       }
-    if (band == BandName::MIR)
-      {
-      return this->GetIndex2();
-      }
-  }
 
-protected:
-  inline TOutput Evaluate(const TInput1& nir, const TInput2& mir) const override
-  {
-    return (static_cast<TOutput>(GetWIFunctor() (nir, mir)));
+      return (nir - mir) / (nir + mir);
   }
-private:
-  // Water Index Classic Functor
-  WIFunctorType m_WIFunctor;
 };
 
 /** \class NDWI2
@@ -283,79 +74,26 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class NDWI2 : public WaterIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class NDWI2 : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  std::string GetName() const override
+  NDWI2() : RadiometricIndex<TInput, TOutput>({CommonBandNames::NIR, CommonBandNames::GREEN})
   {
-    return "NDWI2";
   }
 
-  typedef WaterIndexFunctor<TInput1, TInput2, TOutput> WIFunctorType;
-  /// Constructor
-  NDWI2() {}
-  /// Desctructor
-  ~NDWI2() override {}
-  WIFunctorType GetWIFunctor(void) const
-  {
-    return (m_WIFunctor);
-  }
-  /// Set Index G
-  void SetGIndex(unsigned int channel)
-  {
-    this->SetIndex1(channel);
-  }
-  /// Get Index G
-  unsigned int GetGIndex() const
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    return this->GetIndex1();
-  }
-  /// Set Index NIR
-  void SetNIRIndex(unsigned int channel)
-  {
-    this->SetIndex2(channel);
-  }
-  /// Get Index NIR
-  unsigned int GetNIRIndex() const
-  {
-    return this->GetIndex2();
-  }
+    auto green = this->Value(CommonBandNames::GREEN, input);
+    auto nir   = this->Value(CommonBandNames::NIR, input);
 
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::GREEN)
-      {
-      this->SetIndex1(channel);
-      }
-    if (band == BandName::NIR)
-      {
-      this->SetIndex2(channel);
+    if (std::abs(nir + green) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
+      return 0.;
       }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::GREEN)
-      {
-      return this->GetIndex1();
-      }
-    if (band == BandName::NIR)
-      {
-      return this->GetIndex2();
-      }
-  }
 
-protected:
-  inline TOutput Evaluate(const TInput1& g, const TInput2& nir) const override
-  {
-    return (static_cast<TOutput>(GetWIFunctor() (g, nir)));
+      return (green - nir) / (green + nir);
   }
-private:
-  // Water Index Classic Functor
-  WIFunctorType m_WIFunctor;
 };
 
 /** \class MNDWI
@@ -363,88 +101,7 @@ private:
  *
  *  [Xu & al., 2006 ]
  *
- *  \ingroup Functor
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template <class TInput1, class TInput2, class TOutput>
-class MNDWI : public WaterIndexBase<TInput1, TInput2, TOutput>
-{
-public:
-  /** Return the index name */
-  virtual std::string GetName() const
-  {
-    return "MNDWI";
-  }
-
-  typedef WaterIndexFunctor<TInput1, TInput2, TOutput> WIFunctorType;
-  /// Constructor
-  MNDWI() {}
-  /// Desctructor
-  virtual ~MNDWI() {}
-  WIFunctorType GetWIFunctor(void) const
-  {
-    return (m_WIFunctor);
-  }
-  /// Set Index G
-  void SetGIndex(unsigned int channel)
-  {
-    this->SetIndex1(channel);
-  }
-  /// Get Index G
-  unsigned int GetGIndex() const
-  {
-    return this->GetIndex1();
-  }
-  /// Set Index MIR
-  void SetMIRIndex(unsigned int channel)
-  {
-    this->SetIndex2(channel);
-  }
-  /// Get Index MIR
-  unsigned int GetMIRIndex() const
-  {
-    return this->GetIndex2();
-  }
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::GREEN)
-      {
-      this->SetIndex1(channel);
-      }
-    if (band == BandName::MIR)
-      {
-      this->SetIndex2(channel);
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::GREEN)
-      {
-      return this->GetIndex1();
-      }
-    if (band == BandName::MIR)
-      {
-      return this->GetIndex2();
-      }
-  }
-
-protected:
-  inline TOutput Evaluate(const TInput1& g, const TInput2& mir) const
-  {
-    return (static_cast<TOutput>(GetWIFunctor() (g, mir)));
-  }
-private:
-  // Water Index Classic Functor
-  WIFunctorType m_WIFunctor;
-};
-
-/** \class NDPI
- *  \brief This functor computes the Normalized Difference Pond Index (NDPI)
+ * Similar to Normalized Difference Pond Index (NDPI)
  *
  *  [J.P Lacaux & al., 2006 ]
  *
@@ -453,79 +110,26 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class NDPI : public WaterIndexBase<TInput1, TInput2, TOutput>
+template <class TInput, class TOutput>
+class MNDWI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  virtual std::string GetName() const
+  MNDWI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::MIR, CommonBandNames::GREEN})
   {
-    return "NDPI";
   }
 
-  typedef WaterIndexFunctor<TInput1, TInput2, TOutput> WIFunctorType;
-  /// Constructor
-  NDPI() {}
-  /// Desctructor
-  virtual ~NDPI() {}
-  WIFunctorType GetWIFunctor(void) const
-  {
-    return (m_WIFunctor);
-  }
-  /// Set Index MIR
-  void SetMIRIndex(unsigned int channel)
-  {
-    this->SetIndex1(channel);
-  }
-  /// Get Index MIR
-  unsigned int GetMIRIndex() const
-  {
-    return this->GetIndex1();
-  }
-  /// Set Index G
-  void SetGIndex(unsigned int channel)
-  {
-    this->SetIndex2(channel);
-  }
-  /// Get Index G
-  unsigned int GetGIndex() const
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    return this->GetIndex2();
-  }
+    auto green = this->Value(CommonBandNames::GREEN, input);
+    auto mir   = this->Value(CommonBandNames::MIR, input);
 
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::MIR)
-      {
-      this->SetIndex1(channel);
-      }
-    if (band == BandName::GREEN)
-      {
-      this->SetIndex2(channel);
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::MIR)
-      {
-      return this->GetIndex1();
-      }
-    if (band == BandName::GREEN)
-      {
-      return this->GetIndex2();
+    if (std::abs(mir + green) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
+      return 0.;
       }
-  }
 
-protected:
-  inline TOutput Evaluate(const TInput1& mir, const TInput2& g) const
-  {
-    return (static_cast<TOutput>(GetWIFunctor() (mir, g)));
+      return (green - mir) / (green + mir);
   }
-private:
-  // Water Index Classic Functor
-  WIFunctorType m_WIFunctor;
 };
 
 /** \class NDTI
@@ -538,221 +142,26 @@ private:
  *
  * \ingroup OTBIndices
  */
-template <class TInput1, class TInput2, class TOutput>
-class NDTI : public WaterIndexBase<TInput1, TInput2, TOutput>
-{
-public:
-  /** Return the index name */
-  virtual std::string GetName() const
-  {
-    return "NDTI";
-  }
-
-  typedef WaterIndexFunctor<TInput1, TInput2, TOutput> WIFunctorType;
-  /// Constructor
-  NDTI() {}
-  /// Desctructor
-  virtual ~NDTI() {}
-  WIFunctorType GetWIFunctor(void) const
-  {
-    return (m_WIFunctor);
-  }
-  // FIXME why now using Red and Green fully spelled as everywhere
-  //else ???
-  /// Set Index R
-  void SetRIndex(unsigned int channel)
-  {
-    this->SetIndex1(channel);
-  }
-  /// Get Index R
-  unsigned int GetRIndex() const
-  {
-    return this->GetIndex1();
-  }
-  /// Set Index G
-  void SetGIndex(unsigned int channel)
-  {
-    this->SetIndex2(channel);
-  }
-  /// Get Index G
-  unsigned int GetGIndex() const
-  {
-    return this->GetIndex2();
-  }
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::RED)
-      {
-      this->SetIndex1(channel);
-      }
-    if (band == BandName::GREEN)
-      {
-      this->SetIndex2(channel);
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::RED)
-      {
-      return this->GetIndex1();
-      }
-    if (band == BandName::GREEN)
-      {
-      return this->GetIndex2();
-      }
-  }
-
-protected:
-  inline TOutput Evaluate(const TInput1& r, const TInput2& g) const
-  {
-    return (static_cast<TOutput>(GetWIFunctor() (r, g)));
-  }
-private:
-  // Water Index Classic Functor
-  WIFunctorType m_WIFunctor;
-};
-
-/** \class WaterSqrtSpectralAngleFunctor
- *  \brief This functor uses a spectral angle with a particular reference pixel.
- *
- *
- *  \ingroup Functor
- * \ingroup Radiometry
- *
- * \ingroup OTBIndices
- */
-template <class TInputVectorPixel, class TOutputPixel>
-class WaterSqrtSpectralAngleFunctor : public SqrtSpectralAngleFunctor<TInputVectorPixel, TOutputPixel>
+template <class TInput, class TOutput>
+class NDTI : public RadiometricIndex<TInput, TOutput>
 {
 public:
-  /** Return the index name */
-  virtual std::string GetName() const
+  NDTI() : RadiometricIndex<TInput, TOutput>({CommonBandNames::RED, CommonBandNames::GREEN})
   {
-    return "WaterSqrtSpectralAngleFunctor";
-  }
-  typedef WaterSqrtSpectralAngleFunctor                             Self;
-  typedef SqrtSpectralAngleFunctor<TInputVectorPixel, TOutputPixel> Superclass;
-  typedef TInputVectorPixel                                         InputVectorPixelType;
-  WaterSqrtSpectralAngleFunctor()
-  {
-
-    //Set the channels indices
-    m_BlueIndex = 0;
-    m_GreenIndex = 1;
-    m_RedIndex = 2;
-    m_NIRIndex = 3;
-
-    //Set reference water value
-    InputVectorPixelType reference;
-    reference.SetSize(4);
-    reference[0] = 136.0; reference[1] = 132.0; reference[2] = 47.0; reference[3] = 24.0;
-    this->SetReferenceWaterPixel(reference);
   }
-  ~WaterSqrtSpectralAngleFunctor() override {}
 
-  /** Set Reference Pixel */
-  void SetReferenceWaterPixel(InputVectorPixelType ref)
+  TOutput operator()(const itk::VariableLengthVector<TInput>& input) const override
   {
-    if (ref.GetSize() != 4)
-      {
-      }
-    InputVectorPixelType reference;
-    reference.SetSize(4);
-    reference[m_BlueIndex] = ref[0]; reference[m_GreenIndex] = ref[1]; reference[m_RedIndex] = ref[2];
-    reference[m_NIRIndex] = ref[3];
-    this->SetReferencePixel(reference);
-
-  }
+    auto green = this->Value(CommonBandNames::GREEN, input);
+    auto red   = this->Value(CommonBandNames::RED, input);
 
-  /** Getters and setters */
-  void SetBlueChannel(unsigned int channel)
-  {
-    m_BlueIndex = channel;
-  }
-  unsigned int GetBlueChannel() const
-  {
-    return m_BlueIndex;
-  }
-  void SetGreenChannel(unsigned int channel)
-  {
-    m_GreenIndex = channel;
-  }
-  unsigned int GetGreenChannel() const
-  {
-    return m_GreenIndex;
-  }
-  void SetRedChannel(unsigned int channel)
-  {
-    m_RedIndex = channel;
-  }
-  unsigned int GetRedChannel() const
-  {
-    return m_RedIndex;
-  }
-  void SetNIRChannel(unsigned int channel)
-  {
-    m_NIRIndex = channel;
-  }
-  unsigned int GetNIRChannel() const
-  {
-    return m_NIRIndex;
-  }
-
-  /** Set index, generic method */
-  void SetIndex(BandName::BandName band, unsigned int channel)
-  {
-    if (band == BandName::RED)
-      {
-      m_RedIndex = channel;
-      }
-    if (band == BandName::GREEN)
-      {
-      m_GreenIndex = channel;
-      }
-    if (band == BandName::BLUE)
-      {
-      m_BlueIndex = channel;
-      }
-    if (band == BandName::NIR)
-      {
-      m_NIRIndex = channel;
-      }
-  }
-  /** Get index, generic method */
-  unsigned int GetIndex(BandName::BandName band) const
-  {
-    if (band == BandName::RED)
-      {
-      return m_RedIndex;
+    if (std::abs(red + green) < RadiometricIndex<TInput, TOutput>::Epsilon)
+    {
+      return 0.;
       }
-    if (band == BandName::GREEN)
-      {
-      return m_GreenIndex;
-      }
-    if (band == BandName::BLUE)
-      {
-      return m_BlueIndex;
-      }
-    if (band == BandName::NIR)
-      {
-      return m_NIRIndex;
-      }
-  }
 
-protected:
-  inline TOutputPixel Evaluate(const TInputVectorPixel& inPix) const override
-  {
-    return static_cast<TOutputPixel>(Superclass::Evaluate(inPix));
+      return (red - green) / (green + red);
   }
-
-  /** Channels */
-  int m_BlueIndex;
-  int m_GreenIndex;
-  int m_RedIndex;
-  int m_NIRIndex;
 };
 
 } // namespace Functor
diff --git a/Modules/Radiometry/Indices/include/otbWaterSqrtSpectralAngleImageFilter.h b/Modules/Radiometry/Indices/include/otbWaterSqrtSpectralAngleImageFilter.h
index 0ac02c7d6fec990ecbf17b7f981dad2e00603300..adbe0dee543242d0156ac2aafb22444f32b52c60 100644
--- a/Modules/Radiometry/Indices/include/otbWaterSqrtSpectralAngleImageFilter.h
+++ b/Modules/Radiometry/Indices/include/otbWaterSqrtSpectralAngleImageFilter.h
@@ -21,12 +21,116 @@
 #ifndef otbWaterSqrtSpectralAngleImageFilter_h
 #define otbWaterSqrtSpectralAngleImageFilter_h
 
-#include "otbWaterIndicesFunctor.h"
+#include "otbSqrtSpectralAngleFunctor.h"
 #include "itkUnaryFunctorImageFilter.h"
 
 namespace otb
 {
 
+namespace Functor
+{
+/** \class WaterSqrtSpectralAngleFunctor
+ *  \brief This functor uses a spectral angle with a particular reference pixel.
+ *
+ *
+ *  \ingroup Functor
+ * \ingroup Radiometry
+ *
+ * \ingroup OTBIndices
+ */
+template <class TInputVectorPixel, class TOutputPixel>
+class WaterSqrtSpectralAngleFunctor : public SqrtSpectralAngleFunctor<TInputVectorPixel, TOutputPixel>
+{
+public:
+  typedef WaterSqrtSpectralAngleFunctor                             Self;
+  typedef SqrtSpectralAngleFunctor<TInputVectorPixel, TOutputPixel> Superclass;
+  typedef TInputVectorPixel                                         InputVectorPixelType;
+  WaterSqrtSpectralAngleFunctor()
+  {
+
+    // Set the channels indices
+    m_BlueIndex  = 0;
+    m_GreenIndex = 1;
+    m_RedIndex   = 2;
+    m_NIRIndex   = 3;
+
+    // Set reference water value
+    InputVectorPixelType reference;
+    reference.SetSize(4);
+    reference[0] = 136.0;
+    reference[1] = 132.0;
+    reference[2] = 47.0;
+    reference[3] = 24.0;
+    this->SetReferenceWaterPixel(reference);
+  }
+  ~WaterSqrtSpectralAngleFunctor() override
+  {
+  }
+
+  /** Set Reference Pixel */
+  void SetReferenceWaterPixel(InputVectorPixelType ref)
+  {
+    if (ref.GetSize() != 4)
+    {
+    }
+    InputVectorPixelType reference;
+    reference.SetSize(4);
+    reference[m_BlueIndex]  = ref[0];
+    reference[m_GreenIndex] = ref[1];
+    reference[m_RedIndex]   = ref[2];
+    reference[m_NIRIndex]   = ref[3];
+    this->SetReferencePixel(reference);
+  }
+
+  /** Getters and setters */
+  void SetBlueChannel(unsigned int channel)
+  {
+    m_BlueIndex = channel;
+  }
+  unsigned int GetBlueChannel() const
+  {
+    return m_BlueIndex;
+  }
+  void SetGreenChannel(unsigned int channel)
+  {
+    m_GreenIndex = channel;
+  }
+  unsigned int GetGreenChannel() const
+  {
+    return m_GreenIndex;
+  }
+  void SetRedChannel(unsigned int channel)
+  {
+    m_RedIndex = channel;
+  }
+  unsigned int GetRedChannel() const
+  {
+    return m_RedIndex;
+  }
+  void SetNIRChannel(unsigned int channel)
+  {
+    m_NIRIndex = channel;
+  }
+  unsigned int GetNIRChannel() const
+  {
+    return m_NIRIndex;
+  }
+
+protected:
+  inline TOutputPixel Evaluate(const TInputVectorPixel& inPix) const override
+  {
+    return static_cast<TOutputPixel>(Superclass::Evaluate(inPix));
+  }
+
+  /** Channels */
+  int m_BlueIndex;
+  int m_GreenIndex;
+  int m_RedIndex;
+  int m_NIRIndex;
+};
+} // End namespace Functor
+
+
 /** \class WaterSqrtSpectralAngleImageFilter
  *  \brief Compute a radiometric water indice
  *
@@ -46,7 +150,6 @@ namespace otb
  *
  * \ingroup OTBIndices
  */
-
 template <class TInputVectorImage, class TOutputImage,
     class TFunction = Functor::WaterSqrtSpectralAngleFunctor <
         typename TInputVectorImage::PixelType,
diff --git a/Modules/Radiometry/Indices/test/CMakeLists.txt b/Modules/Radiometry/Indices/test/CMakeLists.txt
index 3e5c8354670345f66bd113cf0c312d76dbcc88c9..1424624291fd33d8f96baac6b64d02de0418e5e8 100644
--- a/Modules/Radiometry/Indices/test/CMakeLists.txt
+++ b/Modules/Radiometry/Indices/test/CMakeLists.txt
@@ -22,13 +22,11 @@ otb_module_test()
 
 set(OTBIndicesTests
 otbIndicesTestDriver.cxx
-otbNDVIDataNodeFeatureFunction.cxx
+otbRadiometricIndicesTest.cxx
 otbLandsatTMIndexNDSITest.cxx
 otbLandsatTMIndexBIOTest.cxx
-otbLAIFromReflectancesLinearFunctorTest.cxx
 otbLandsatTMIndexMIR2Test.cxx
 otbLandsatTMIndexNDVITest.cxx
-otbLAIFromNDVILogarithmicFunctorTest.cxx
 otbLandsatTMIndexVisTest.cxx
 otbWaterSqrtSpectralAngleImageFilter.cxx
 otbLandsatTMIndexBrightTest.cxx
@@ -53,31 +51,6 @@ otb_module_target_label(otbIndicesTestDriver)
 
 # Tests Declaration
 
-otb_add_test(NAME bfTvNDVIDataNodeFeatureFunction_Polygon COMMAND otbIndicesTestDriver
-  --compare-ogr ${EPSILON_3}
-  ${BASELINE_FILES}/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp
-  ${TEMP}/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp
-  otbNDVIDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_BUILDINGS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/DEM/srtm_directory
-  ${TEMP}/bfTvNDVIDataNodeFeatureFunctionOutput_Polygon.shp
-  0
-  )
-
-otb_add_test(NAME bfTvNDVIDataNodeFeatureFunction_Line COMMAND otbIndicesTestDriver
-  --compare-ogr ${EPSILON_9}
-  ${BASELINE_FILES}/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp
-  ${TEMP}/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp
-  otbNDVIDataNodeFeatureFunction
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE_ROADS.shp
-  ${INPUTDATA}/Dempster-Shafer/ROI_QB_TOULOUSE.TIF
-  ${INPUTDATA}/DEM/srtm_directory
-  ${TEMP}/bfTvNDVIDataNodeFeatureFunctionOutput_Line.shp
-  0
-  )
-
-
 otb_add_test(NAME raTvLandsatTMIndexNDSITest COMMAND otbIndicesTestDriver
   otbLandsatTMIndexNDSI
   3   #TM1
@@ -102,14 +75,6 @@ otb_add_test(NAME raTvLandsatTMIndexBIOTest COMMAND otbIndicesTestDriver
   21  #TM7
   )
 
-otb_add_test(NAME raTvLAIFromReflectancesLinearFunctorTest COMMAND otbIndicesTestDriver
-  otbLAIFromReflectancesLinear
-  3   # red
-  4   # nir
-  -18   # red coef
-  13   # nir coef
-  )
-
 otb_add_test(NAME raTvLandsatTMIndexMIR2Test COMMAND otbIndicesTestDriver
   otbLandsatTMIndexMIR2
   3   #TM1
@@ -134,16 +99,6 @@ otb_add_test(NAME raTvLandsatTMIndexNDVITest COMMAND otbIndicesTestDriver
   21  #TM7
   )
 
-
-otb_add_test(NAME raTvLAIFromNDVILogarithmicFunctorTest COMMAND otbIndicesTestDriver
-  otbLAIFromNDVILogarithmic
-  3   # red
-  4   # nir
-  0.12   # ndvi soil
-  0.91   # ndvi infinity
-  0.70   # extinction coefficient
-  )
-
 otb_add_test(NAME raTvLandsatTMIndexVisTest COMMAND otbIndicesTestDriver
   otbLandsatTMIndexVis
   3   #TM1
@@ -340,3 +295,21 @@ otb_add_test(NAME raTvLandsatTMThickCloudTest COMMAND otbIndicesTestDriver
   ${TEMP}/raTvLandsatTMThickCloudTest_cloudImage.tif
   )
 
+
+otb_add_test(NAME raTvRadiometricIndexBaseClassTest COMMAND otbIndicesTestDriver
+                  otbRadiometricIndexTest)
+
+otb_add_test(NAME raTvVegetationIndicesTest COMMAND otbIndicesTestDriver
+                  otbVegetationIndicesTest)
+
+otb_add_test(NAME raTvWaterIndicesTest COMMAND otbIndicesTestDriver
+                  otbWaterIndicesTest)
+
+otb_add_test(NAME raTvBuiltUpIndicesTest COMMAND otbIndicesTestDriver
+                  otbBuiltUpIndicesTest)
+
+otb_add_test(NAME raTvSoilIndicesTest COMMAND otbIndicesTestDriver
+                  otbSoilIndicesTest)
+
+otb_add_test(NAME raTvIndicesStackFunctorTest COMMAND otbIndicesTestDriver
+                  otbIndicesStackFunctorTest)
diff --git a/Modules/Radiometry/Indices/test/otbIndicesTestDriver.cxx b/Modules/Radiometry/Indices/test/otbIndicesTestDriver.cxx
index d0b41d61e7d623c2690731cbc478ddb24253cdb8..111d5c05d0978f86930a277975e37ebd58393533 100644
--- a/Modules/Radiometry/Indices/test/otbIndicesTestDriver.cxx
+++ b/Modules/Radiometry/Indices/test/otbIndicesTestDriver.cxx
@@ -22,13 +22,10 @@
 
 void RegisterTests()
 {
-  REGISTER_TEST(otbNDVIDataNodeFeatureFunction);
   REGISTER_TEST(otbLandsatTMIndexNDSI);
   REGISTER_TEST(otbLandsatTMIndexBIO);
-  REGISTER_TEST(otbLAIFromReflectancesLinear);
   REGISTER_TEST(otbLandsatTMIndexMIR2);
   REGISTER_TEST(otbLandsatTMIndexNDVI);
-  REGISTER_TEST(otbLAIFromNDVILogarithmic);
   REGISTER_TEST(otbLandsatTMIndexVis);
   REGISTER_TEST(otbWaterSqrtSpectralAngleImageFilter);
   REGISTER_TEST(otbLandsatTMIndexBright);
@@ -46,4 +43,10 @@ void RegisterTests()
   REGISTER_TEST(otbLandsatTMKernelSpectralRulesWithImage);
   REGISTER_TEST(otbLandsatTMIndexNDBSI);
   REGISTER_TEST(otbLandsatTMThickCloudTest);
+  REGISTER_TEST(otbVegetationIndicesTest);
+  REGISTER_TEST(otbWaterIndicesTest);
+  REGISTER_TEST(otbBuiltUpIndicesTest);
+  REGISTER_TEST(otbSoilIndicesTest);
+  REGISTER_TEST(otbRadiometricIndexTest);
+  REGISTER_TEST(otbIndicesStackFunctorTest);
 }
diff --git a/Modules/Radiometry/Indices/test/otbLAIFromNDVILogarithmicFunctorTest.cxx b/Modules/Radiometry/Indices/test/otbLAIFromNDVILogarithmicFunctorTest.cxx
deleted file mode 100644
index 09a2f5ff71f4393797077b67c485e3b3777e5a45..0000000000000000000000000000000000000000
--- a/Modules/Radiometry/Indices/test/otbLAIFromNDVILogarithmicFunctorTest.cxx
+++ /dev/null
@@ -1,58 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbVegetationIndicesFunctor.h"
-
-int otbLAIFromNDVILogarithmic(int itkNotUsed(argc), char * argv[])
-{
-  typedef double                           PixelType;
-
-  typedef otb::Functor::LAIFromNDVILogarithmic<PixelType, PixelType, PixelType> FunctorType;
-
-  FunctorType laiFunct = FunctorType();
-
-  double redValue = (::atof(argv[1]));
-  double nirValue = (::atof(argv[2]));
-  double ndviSoil(::atof(argv[3]));
-  double ndviInf(::atof(argv[4]));
-  double extCoef(::atof(argv[5]));
-
-  double ndvi = (nirValue-redValue)/(nirValue+redValue);
-  double goodResult = -1/extCoef*std::log((ndvi-ndviInf)/(ndviSoil-ndviInf));
-
-  laiFunct.SetNdviInf(ndviInf);
-  laiFunct.SetNdviSoil(ndviSoil);
-  laiFunct.SetExtinctionCoefficient(extCoef);
-
-  laiFunct.SetRedIndex(1);
-  laiFunct.SetNIRIndex(2);
-
-  itk::VariableLengthVector<PixelType> pixel;
-  pixel.Reserve(2);
-  pixel[0] = redValue;
-  pixel[1] = nirValue;
-
-  double result = laiFunct(pixel);
-
-  if( result!=goodResult ) return EXIT_FAILURE;
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Radiometry/Indices/test/otbLAIFromReflectancesLinearFunctorTest.cxx b/Modules/Radiometry/Indices/test/otbLAIFromReflectancesLinearFunctorTest.cxx
deleted file mode 100644
index 388b36a054b9054d3b362c29e148ee2bbd01e81f..0000000000000000000000000000000000000000
--- a/Modules/Radiometry/Indices/test/otbLAIFromReflectancesLinearFunctorTest.cxx
+++ /dev/null
@@ -1,55 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "otbVegetationIndicesFunctor.h"
-
-int otbLAIFromReflectancesLinear(int itkNotUsed(argc), char * argv[])
-{
-  typedef double                           PixelType;
-
-  typedef otb::Functor::LAIFromReflectancesLinear<PixelType, PixelType, PixelType> FunctorType;
-
-  FunctorType laiFunct = FunctorType();
-
-  double redValue = (::atof(argv[1]));
-  double nirValue = (::atof(argv[2]));
-  double redCoef(::atof(argv[3]));
-  double nirCoef(::atof(argv[4]));
-
-  double goodResult = redCoef*redValue+nirCoef*nirValue;
-
-  laiFunct.SetRedCoef(redCoef);
-  laiFunct.SetNirCoef(nirCoef);
-
-  laiFunct.SetRedIndex(1);
-  laiFunct.SetNIRIndex(2);
-
-  itk::VariableLengthVector<PixelType> pixel;
-  pixel.Reserve(2);
-  pixel[0] = redValue;
-  pixel[1] = nirValue;
-
-  double result = laiFunct(pixel);
-
-  if( result!=goodResult ) return EXIT_FAILURE;
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Radiometry/Indices/test/otbNDVIDataNodeFeatureFunction.cxx b/Modules/Radiometry/Indices/test/otbNDVIDataNodeFeatureFunction.cxx
deleted file mode 100644
index 18289e76d7a4468aa04fa1057adca4764c42013c..0000000000000000000000000000000000000000
--- a/Modules/Radiometry/Indices/test/otbNDVIDataNodeFeatureFunction.cxx
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-#include "otbNDVIDataNodeFeatureFunction.h"
-
-#include "otbVectorImage.h"
-#include "otbImageFileReader.h"
-#include "otbVectorData.h"
-#include "otbVectorDataFileReader.h"
-#include "otbVectorDataIntoImageProjectionFilter.h"
-#include "otbVectorDataFileWriter.h"
-#include "itkPreOrderTreeIterator.h"
-
-
-int otbNDVIDataNodeFeatureFunction(int itkNotUsed(argc), char* argv[])
-{
-  const char * inputVD  = argv[1];
-  const char * inputImg = argv[2];
-  const char * DEMDir   = argv[3];
-  const char * outputVD = argv[4];
-  int DisplayWarnings   = atoi(argv[5]);
-
-  typedef double                                      CoordRepType;
-  typedef double                                      PrecisionType;
-  typedef otb::VectorImage<PrecisionType>             ImageType;
-  typedef otb::ImageFileReader<ImageType>             ImageReaderType;
-  typedef otb::VectorData<CoordRepType, 2, PrecisionType>
-                                                      VectorDataType;
-  typedef VectorDataType::DataNodeType                DataNodeType;
-  typedef otb::VectorDataFileReader<VectorDataType>   VectorDataReaderType;
-  typedef otb::VectorDataIntoImageProjectionFilter<VectorDataType, ImageType>
-                                                      VectorDataReProjFilter;
-  typedef otb::VectorDataFileWriter<VectorDataType>   VectorDataWriterType;
-  typedef itk::PreOrderTreeIterator<VectorDataType::DataTreeType>
-                                                      TreeIteratorType;
-
-  typedef otb::NDVIDataNodeFeatureFunction<ImageType, CoordRepType, PrecisionType>
-                                         NDVIDataNodeFeaturefunctionType;
-  typedef NDVIDataNodeFeaturefunctionType::OutputType
-                                                      NDVIFeatureOutputType;
-
-  ImageReaderType::Pointer imgReader = ImageReaderType::New();
-  VectorDataReaderType::Pointer vdReader = VectorDataReaderType::New();
-  VectorDataReProjFilter::Pointer vdReProjFilter = VectorDataReProjFilter::New();
-  VectorDataWriterType::Pointer vdWriter = VectorDataWriterType::New();
-  NDVIDataNodeFeaturefunctionType::Pointer NDVIFeatureFunction = NDVIDataNodeFeaturefunctionType::New();
-
-  if (!DisplayWarnings)
-   {
-    imgReader->SetGlobalWarningDisplay(0);
-   }
-
-  otb::DEMHandler::Instance()->OpenDEMDirectory(DEMDir);
-
-  vdReader->SetFileName(inputVD);
-  vdReader->Update();
-
-  imgReader->SetFileName(inputImg);
-  imgReader->UpdateOutputInformation();
-  imgReader->Update(); //Needed to set m_EndIndex, m_StartIndex in otbDataNodeImageFunction
-
-  vdReProjFilter->SetInputImage(imgReader->GetOutput());
-  vdReProjFilter->SetInputVectorData(vdReader->GetOutput());
-  vdReProjFilter->SetUseOutputSpacingAndOriginFromImage(true);
-  vdReProjFilter->Update();
-/*
-  std::cout<< "vdReProjFilter->GetOutput()->Size(): "
-        << vdReProjFilter->GetOutput()->Size() << std::endl;
-*/
-  NDVIFeatureFunction->SetREDChannelIndex(3);
-  NDVIFeatureFunction->SetNIRChannelIndex(4);
-  NDVIFeatureFunction->SetNDVIThreshold(0.047);
-  NDVIFeatureFunction->SetInputImage(imgReader->GetOutput());
-
-  // Output
-  VectorDataType::Pointer outVD = VectorDataType::New();
-  // Retrieving root node
-  DataNodeType::Pointer root = outVD->GetDataTree()->GetRoot()->Get();
-  // Create the document node
-  DataNodeType::Pointer document = DataNodeType::New();
-  document->SetNodeType(otb::DOCUMENT);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(document, root);
-  // Create the folder node
-  DataNodeType::Pointer folder = DataNodeType::New();
-  folder->SetNodeType(otb::FOLDER);
-  // Adding the layer to the data tree
-  outVD->GetDataTree()->Add(folder, document);
-
-  TreeIteratorType itVector(vdReProjFilter->GetOutput()->GetDataTree());
-  itVector.GoToBegin();
-  while (!itVector.IsAtEnd())
-    {
-    if (itVector.Get()->IsLineFeature() || itVector.Get()->IsPolygonFeature())
-         {
-          const DataNodeType::Pointer currentGeometry = itVector.Get();
-          NDVIFeatureOutputType currentResult;
-          currentResult = NDVIFeatureFunction->Evaluate(*(currentGeometry.GetPointer()));
-          currentGeometry->SetFieldAsDouble("NDVI", (double)(currentResult[0]));
-          outVD->GetDataTree()->Add(currentGeometry, folder);
-         }
-    ++itVector;
-    }
-
-  vdWriter->SetInput(outVD);
-  vdWriter->SetFileName(outputVD);
-  vdWriter->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Radiometry/Indices/test/otbRadiometricIndicesTest.cxx b/Modules/Radiometry/Indices/test/otbRadiometricIndicesTest.cxx
new file mode 100644
index 0000000000000000000000000000000000000000..58f76ed98817ba7a2f33e291eb85f31a6e5edccd
--- /dev/null
+++ b/Modules/Radiometry/Indices/test/otbRadiometricIndicesTest.cxx
@@ -0,0 +1,279 @@
+/*
+ * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
+ *
+ * This file is part of Orfeo Toolbox
+ *
+ *     https://www.orfeo-toolbox.org/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "otbVegetationIndicesFunctor.h"
+#include "otbWaterIndicesFunctor.h"
+#include "otbBuiltUpIndicesFunctor.h"
+#include "otbSoilIndicesFunctor.h"
+#include "otbIndicesStackFunctor.h"
+
+#include <iomanip>
+
+template <typename T>
+itk::VariableLengthVector<T> build_pixel(const std::initializer_list<T>& il)
+{
+  itk::VariableLengthVector<T> res(il.size());
+  size_t                       idx = 0;
+
+  for (auto v : il)
+  {
+    res[idx] = v;
+    ++idx;
+  }
+  return res;
+}
+
+template <class TIndice>
+bool CheckResult(const std::string& testName, std::map<typename TIndice::BandNameType, size_t> bandMap,
+                 const std::initializer_list<typename TIndice::InputType>& input, const typename TIndice::OutputType& expected)
+{
+  TIndice indice;
+
+  indice.SetBandsIndices(bandMap);
+
+  auto pixel = build_pixel(input);
+
+  typename TIndice::OutputType v = indice(pixel);
+
+  if (std::abs(expected - v) > TIndice::Epsilon)
+  {
+    std::cerr << std::setprecision(10);
+    std::cerr << testName << "\t- failed: expected " << expected << ", got " << v << std::endl;
+    return false;
+  }
+  else
+  {
+    return true;
+  }
+}
+
+
+using namespace otb::Functor;
+
+int otbVegetationIndicesTest(int, char ** const)
+{
+
+  const std::map<CommonBandNames, size_t> bandMap = {
+      {CommonBandNames::BLUE, 1}, {CommonBandNames::GREEN, 2}, {CommonBandNames::RED, 3}, {CommonBandNames::NIR, 4}};
+
+  // Syntax: CheckResult<Indice Class>("test_name",bandMap,{red_value,nir_value},expected_result)
+  bool res = CheckResult<NDVI<int, double>>("ndvi_null ", bandMap, {0, 0, 0, 0}, 0.);
+  res      = res & CheckResult<NDVI<int, double>>("ndvi_pixel", bandMap, {0, 0, 1, 2}, 0.3333333);
+  res      = res & CheckResult<RVI<int, double>>("rvi_null", bandMap, {0, 0, 0, 0}, 0.);
+  res      = res & CheckResult<RVI<int, double>>("rvi_pixel", bandMap, {0, 0, 2, 1}, 0.5);
+  res      = res & CheckResult<PVI<int, double>>("pvi_pixel", bandMap, {0, 0, 1, 2}, -62.0544166);
+  res      = res & CheckResult<SAVI<double, double>>("savi_null", bandMap, {0, 0, 0, -0.5}, 0.);
+  res      = res & CheckResult<SAVI<int, double>>("savi_pixel", bandMap, {0, 0, 1, 2}, 0.42857142857);
+  res      = res & CheckResult<TSAVI<double, double>>("tsavi_null", bandMap, {0, 0, -0.1192, 0.}, 0.);
+  res      = res & CheckResult<TSAVI<int, double>>("tsavi_pixel", bandMap, {0, 0, 1, 2}, 0.1111463957);
+  res      = res & CheckResult<WDVI<int, double>>("wdvi_pixel", bandMap, {0, 0, 1, 2}, 1.6);
+  res      = res & CheckResult<MSAVI<int, double>>("msavi_pixel", bandMap, {0, 0, 1, 2}, 0.4402985075);
+  res      = res & CheckResult<MSAVI2<int, double>>("msavi2_pixel", bandMap, {0, 0, 1, 2}, 0.4384471872);
+  res      = res & CheckResult<GEMI<int, double>>("gemi_pixel", bandMap, {1, 4, 3, 2}, 2.0625);
+  res      = res & CheckResult<AVI<int, double>>("avi_pixel", bandMap, {0, 0, 1, 2}, 0.1017245527);
+  res      = res & CheckResult<ARVI<int, double>>("arvi_pixel", bandMap, {0, 0, 1, 2}, 0.1428571429);
+  res      = res & CheckResult<EVI<int, double>>("evi_pixel", bandMap, {0, 0, 1, 2}, 0.2777777778);
+  res      = res & CheckResult<IPVI<int, double>>("ipvi_pixel", bandMap, {0, 0, 1, 2}, 0.6666666667);
+  res      = res & CheckResult<LAIFromNDVILogarithmic<int, double>>("lailog_pixel", bandMap, {0, 0, 1, 2}, 0.4930511672);
+  res      = res & CheckResult<LAIFromReflectancesLinear<int, double>>("lailog_pixel", bandMap, {0, 0, 1, 2}, 6.61);
+  res      = res & CheckResult<LAIFromNDVIFormosat2Functor<int, double>>("laifrom_pixel", bandMap, {0, 0, 1, 2}, 0.3120010659);
+
+  if (res)
+  {
+    return EXIT_SUCCESS;
+  }
+  else
+  {
+    return EXIT_FAILURE;
+  }
+}
+
+int otbWaterIndicesTest(int, char ** const)
+{
+  const std::map<CommonBandNames, size_t> bandMap = {
+      {CommonBandNames::BLUE, 1}, {CommonBandNames::GREEN, 2}, {CommonBandNames::RED, 3}, {CommonBandNames::NIR, 4}, {CommonBandNames::MIR, 5}};
+
+  // Syntax: CheckResult<Indice Class>("test_name",bandMap,{red_value,nir_value},expected_result)
+  bool res = CheckResult<NDWI<int, double>>("ndwi_null ", bandMap, {0, 0, 0, 0, 0}, 0.);
+  res      = res & CheckResult<NDWI<int, double>>("ndwi_pixel", bandMap, {1, 2, 3, 4, 5}, -0.1111111111);
+  res      = res & CheckResult<NDWI2<int, double>>("ndwi2_null", bandMap, {0, 0, 0, 0, 0}, 0.);
+  res      = res & CheckResult<NDWI2<int, double>>("ndwi2_pixel", bandMap, {1, 2, 3, 4, 5}, -0.3333333333);
+  res      = res & CheckResult<MNDWI<int, double>>("mndwi_null", bandMap, {0, 0, 0, 0, 0}, 0.);
+  res      = res & CheckResult<MNDWI<int, double>>("mndwi_pixel", bandMap, {1, 2, 3, 4, 5}, -0.4285714286);
+  res      = res & CheckResult<NDTI<int, double>>("ndti_null", bandMap, {0, 0, 0, 0, 0}, 0.);
+  res      = res & CheckResult<NDTI<int, double>>("ndti_pixel", bandMap, {1, 2, 3, 4, 5}, 0.2);
+
+  if (res)
+  {
+    return EXIT_SUCCESS;
+  }
+  else
+  {
+    return EXIT_FAILURE;
+  }
+}
+
+int otbSoilIndicesTest(int, char ** const)
+{
+  const std::map<CommonBandNames, size_t> bandMap = {
+      {CommonBandNames::BLUE, 1}, {CommonBandNames::GREEN, 2}, {CommonBandNames::RED, 3}, {CommonBandNames::NIR, 4}, {CommonBandNames::MIR, 5}};
+
+  // Syntax: CheckResult<Indice Class>("test_name",bandMap,{red_value,nir_value},expected_result)
+  bool res = CheckResult<CI<int, double>>("ci_null ", bandMap, {0, 0, 0, 0, 0}, 0.);
+  res      = res & CheckResult<CI<int, double>>("ci_pixel", bandMap, {1, 2, 3, 4, 5}, 0.2);
+  res      = res & CheckResult<BI<int, double>>("bi_pixel", bandMap, {1, 2, 3, 4, 5}, 2.549509757);
+  res      = res & CheckResult<BI2<int, double>>("bi2_pixel", bandMap, {1, 2, 3, 4, 5}, 3.109126351);
+
+  if (res)
+  {
+    return EXIT_SUCCESS;
+  }
+  else
+  {
+    return EXIT_FAILURE;
+  }
+}
+
+int otbBuiltUpIndicesTest(int, char ** const)
+{
+  const std::map<CommonBandNames, size_t> bandMap = {
+      {CommonBandNames::BLUE, 1}, {CommonBandNames::GREEN, 2}, {CommonBandNames::RED, 3}, {CommonBandNames::NIR, 4}, {CommonBandNames::MIR, 5}};
+
+  // Syntax: CheckResult<Indice Class>("test_name",bandMap,{red_value,nir_value},expected_result)
+  bool res = CheckResult<ISU<int, double>>("isu_null", bandMap, {0, 0, 0, 0, 0}, 0.);
+  res      = res & CheckResult<ISU<int, double>>("isu_pixel", bandMap, {1, 2, 3, 4, 5}, 81.25);
+
+  if (res)
+  {
+    return EXIT_SUCCESS;
+  }
+  else
+  {
+    return EXIT_FAILURE;
+  }
+}
+
+
+int otbRadiometricIndexTest(int, char ** const)
+{
+  auto ndvi = NDVI<double, double>();
+
+  auto requiredBands = ndvi.GetRequiredBands();
+
+  bool success = true;
+
+  if (requiredBands.size() != 2 || requiredBands.find(CommonBandNames::RED) == requiredBands.end() ||
+      requiredBands.find(CommonBandNames::NIR) == requiredBands.end())
+  {
+    std::cerr << "Required bands is not {RED,NIR} for NDVI" << std::endl;
+    success = false;
+  }
+
+  ndvi.SetBandIndex(CommonBandNames::RED, 10);
+
+  if (ndvi.GetBandIndex(CommonBandNames::RED) != 10)
+  {
+    std::cerr << "Could not Set/Get band index properly" << std::endl;
+    success = false;
+  }
+
+  const std::map<CommonBandNames, size_t> bandMap = {{CommonBandNames::RED, 100}, {CommonBandNames::NIR, 200}};
+
+  ndvi.SetBandsIndices(bandMap);
+
+  if (ndvi.GetBandIndex(CommonBandNames::RED) != 100 || ndvi.GetBandIndex(CommonBandNames::NIR) != 200)
+  {
+    std::cerr << "Could not set all band indices at once with SetBandIndices" << std::endl;
+    success = false;
+  }
+
+  try
+  {
+    ndvi.SetBandIndex(CommonBandNames::MAX, 1);
+    std::cerr << "Calling SetBandIndices with ::MAX should raise a runtime_error exception." << std::endl;
+    success = false;
+  }
+  catch (const std::runtime_error& e)
+  {
+  }
+
+  if (success)
+  {
+    return EXIT_SUCCESS;
+  }
+  else
+  {
+    return EXIT_FAILURE;
+  }
+}
+
+int otbIndicesStackFunctorTest(int, char ** const)
+{
+  using IndicesType      = RadiometricIndex<double, int>;
+  using StackFunctorType = IndicesStackFunctor<IndicesType>;
+
+  auto ndvi = NDVI<double, int>();
+  auto ndwi = NDWI<double, int>();
+
+  std::vector<IndicesType*> indices = {&ndvi, &ndwi};
+
+  auto stack = StackFunctorType(indices);
+
+  bool success = true;
+
+  if (stack.OutputSize() != 2)
+  {
+    std::cerr << "Size of output pixel for stack functor should be 2" << std::endl;
+    success = false;
+  }
+
+  const std::map<CommonBandNames, size_t> bandMap = {
+      {CommonBandNames::BLUE, 1}, {CommonBandNames::GREEN, 2}, {CommonBandNames::RED, 3}, {CommonBandNames::NIR, 4}, {CommonBandNames::MIR, 5}};
+
+  ndvi.SetBandsIndices(bandMap);
+  ndwi.SetBandsIndices(bandMap);
+
+  StackFunctorType::OutputType out(2);
+
+  auto in = build_pixel<double>({1, 2, 3, 4, 5});
+
+  stack(out, in);
+
+  if (out[0] != ndvi(in))
+  {
+    std::cerr << "First output band should correspond to ndvi" << std::endl;
+    success = false;
+  }
+
+  if (out[1] != ndwi(in))
+  {
+    std::cerr << "Second output band should correspond to ndwi" << std::endl;
+    success = false;
+  }
+
+  if (success)
+  {
+    return EXIT_SUCCESS;
+  }
+  else
+  {
+    return EXIT_FAILURE;
+  }
+}
diff --git a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.h b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.h
index ec0ef3d8264028aaa656959abc693b19f4eec0ae..ea82717f97b18260a1b5e281937b879903607081 100644
--- a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.h
+++ b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.h
@@ -52,47 +52,46 @@ namespace otb
  *
  * \ingroup OTBSimulation
  */
-  template <class TReduceSpectralResponse , class TFunction = Functor::NDVI< typename TReduceSpectralResponse::ValuePrecisionType, typename TReduceSpectralResponse::ValuePrecisionType,
-  typename TReduceSpectralResponse::ValuePrecisionType > >
-      class ReduceSpectralResponseClassifierRAndNIR
-  : public itk::DataObject
-      {
-        //friend class
-        public:
-          /** Standard class typedefs */
-          typedef ReduceSpectralResponseClassifierRAndNIR Self;
-          typedef itk::DataObject Superclass;
-          typedef itk::SmartPointer<Self> Pointer;
-          typedef itk::SmartPointer<const Self> ConstPointer;
-
-          /** Template parameters typedef */
-          typedef TReduceSpectralResponse InputReduceSpectralResponseType;
-          typedef TFunction   FunctorType;
-          typedef typename TReduceSpectralResponse::Pointer InputReduceSpectralResponsePointerType;
-          typedef typename InputReduceSpectralResponseType::ValuePrecisionType ValuePrecisionType;
-
-
-          /** Standard macros */
-          itkNewMacro(Self);
-          itkTypeMacro(ReduceSpectralResponseClassifierRAndNIR, DataObject);
-
-          itkGetConstObjectMacro(InputReduceSpectralResponse, InputReduceSpectralResponseType);
-          itkSetObjectMacro(InputReduceSpectralResponse, InputReduceSpectralResponseType);
-
-          itkGetConstMacro(RBandNumber, unsigned int);
-          itkSetMacro(RBandNumber, unsigned int);
-
-          itkGetConstMacro(NIRBandNumber, unsigned int);
-          itkSetMacro(NIRBandNumber, unsigned int);
-
-          /** Get the functor object.  The functor is returned by reference.
-           * (Functors do not have to derive from itk::LightObject, so they do
-           * not necessarily have a reference count. So we cannot return a
-           * SmartPointer.) */
-          FunctorType& GetFunctor()
-          {
-            return m_Functor;
-          };
+template <class TReduceSpectralResponse,
+          class TFunction = Functor::NDVI<typename TReduceSpectralResponse::ValuePrecisionType, typename TReduceSpectralResponse::ValuePrecisionType>>
+class ReduceSpectralResponseClassifierRAndNIR : public itk::DataObject
+{
+  // friend class
+public:
+  /** Standard class typedefs */
+  typedef ReduceSpectralResponseClassifierRAndNIR Self;
+  typedef itk::DataObject                         Superclass;
+  typedef itk::SmartPointer<Self>                 Pointer;
+  typedef itk::SmartPointer<const Self>           ConstPointer;
+
+  /** Template parameters typedef */
+  typedef TReduceSpectralResponse                                      InputReduceSpectralResponseType;
+  typedef TFunction                                                    FunctorType;
+  typedef typename TReduceSpectralResponse::Pointer                    InputReduceSpectralResponsePointerType;
+  typedef typename InputReduceSpectralResponseType::ValuePrecisionType ValuePrecisionType;
+
+
+  /** Standard macros */
+  itkNewMacro(Self);
+  itkTypeMacro(ReduceSpectralResponseClassifierRAndNIR, DataObject);
+
+  itkGetConstObjectMacro(InputReduceSpectralResponse, InputReduceSpectralResponseType);
+  itkSetObjectMacro(InputReduceSpectralResponse, InputReduceSpectralResponseType);
+
+  itkGetConstMacro(RBandNumber, unsigned int);
+  itkSetMacro(RBandNumber, unsigned int);
+
+  itkGetConstMacro(NIRBandNumber, unsigned int);
+  itkSetMacro(NIRBandNumber, unsigned int);
+
+  /** Get the functor object.  The functor is returned by reference.
+   * (Functors do not have to derive from itk::LightObject, so they do
+   * not necessarily have a reference count. So we cannot return a
+   * SmartPointer.) */
+  FunctorType& GetFunctor()
+  {
+    return m_Functor;
+  };
 
   /** Set the functor object.  This replaces the current Functor with a
            * copy of the specified Functor. This allows the user to specify a
diff --git a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.hxx b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.hxx
index 4d97fb2b292b4d8f62359b9497f19f4908de680c..bd43ed41d45b7c073210ead4443c3b1643dc35a2 100644
--- a/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.hxx
+++ b/Modules/Radiometry/Simulation/include/otbReduceSpectralResponseClassifierRAndNIR.hxx
@@ -50,7 +50,13 @@ namespace otb
       ReduceSpectralResponseClassifierRAndNIR<TReduceSpectralResponse , TFunction>
   ::operator()()
   {
-      return m_Functor((*m_InputReduceSpectralResponse)(m_RBandNumber), (*m_InputReduceSpectralResponse)(m_NIRBandNumber));
+    itk::VariableLengthVector<ValuePrecisionType> sr(2);
+    sr[0]=(*m_InputReduceSpectralResponse)(m_RBandNumber);
+    sr[1]=(*m_InputReduceSpectralResponse)(m_NIRBandNumber);
+    m_Functor.SetBandIndex(CommonBandNames::RED,1);
+    m_Functor.SetBandIndex(CommonBandNames::NIR,2);
+
+    return m_Functor(sr);
   }
 
 
diff --git a/Modules/Radiometry/Simulation/test/otbReduceSpectralResponseClassifierRAndNIR.cxx b/Modules/Radiometry/Simulation/test/otbReduceSpectralResponseClassifierRAndNIR.cxx
index 87fda203e2af13b01998c836307f0376f3199b7d..a0e0d61e169419bdc67eabee18589f0353b4f44f 100644
--- a/Modules/Radiometry/Simulation/test/otbReduceSpectralResponseClassifierRAndNIR.cxx
+++ b/Modules/Radiometry/Simulation/test/otbReduceSpectralResponseClassifierRAndNIR.cxx
@@ -45,7 +45,7 @@ int otbReduceSpectralResponseClassifierRAndNIR(int argc, char * argv[])
   typedef otb::ReduceSpectralResponse < ResponseType, SatRSRType>  ReduceResponseType;
   typedef ReduceResponseType::Pointer  ReduceResponseTypePointerType;
 
-  typedef otb::Functor::NDVI<double, double, double >               TFunctionType;
+  typedef otb::Functor::NDVI<double, double>                                               TFunctionType;
   typedef otb::ReduceSpectralResponseClassifierRAndNIR <ReduceResponseType, TFunctionType> ReduceSpectralResponseClassifierRAndNIRType;
   typedef ReduceSpectralResponseClassifierRAndNIRType::Pointer  ReduceSpectralResponseClassifierRAndNIRPointerType;
 
diff --git a/Modules/Registration/DisplacementField/CMakeLists.txt b/Modules/Registration/DisplacementField/CMakeLists.txt
deleted file mode 100644
index a8ad1a8e38bf22af2290f918ff38056abee5ba93..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/CMakeLists.txt
+++ /dev/null
@@ -1,22 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-project(OTBDisplacementField)
-otb_module_impl()
diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h
deleted file mode 100644
index 1e219346e5c7c37c4a32ea87b7dd0937d75325f1..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.h
+++ /dev/null
@@ -1,84 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbBSplinesInterpolateDisplacementFieldGenerator_h
-#define otbBSplinesInterpolateDisplacementFieldGenerator_h
-
-#include "otbPointSetToDisplacementFieldGenerator.h"
-
-namespace otb
-{
-/** \class BSplinesInterpolateDisplacementFieldGenerator
- *  \brief This filters encapsulate the itk::DisplacementFieldSource to produce a BSpline interpolation of the point in point set whose metric values are
- * sufficient.
- * \sa itk::DisplacementFieldSource
- * \ingroup DisparityMap
- *
- * \ingroup OTBDisplacementField
- */
-template <class TPointSet, class TDisplacementField>
-class ITK_EXPORT BSplinesInterpolateDisplacementFieldGenerator
-  : public PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-{
-public:
-  /** Standard typedefs */
-  typedef BSplinesInterpolateDisplacementFieldGenerator                      Self;
-  typedef PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass;
-  typedef itk::SmartPointer<Self>                                           Pointer;
-  typedef itk::SmartPointer<const Self>                                     ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(BSplinesInterpolateDisplacementFieldGenerator, PointSetToDisplacementFieldGenerator);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PointSetType                PointSetType;
-  typedef typename Superclass::PointSetPointerType         PointSetPointerType;
-  typedef typename Superclass::DisplacementFieldType        DisplacementFieldType;
-  typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType;
-  typedef typename Superclass::IndexType                   IndexType;
-  typedef typename DisplacementFieldType::PixelType         PixelType;
-  typedef typename Superclass::ValueType                   ValueType;
-  typedef typename Superclass::PointType                   PointType;
-  typedef typename Superclass::IndexVectorType             IndexVectorType;
-  typedef typename Superclass::DistanceVectorType          DistanceVectorType;
-
-protected:
-  /** Constructor */
-  BSplinesInterpolateDisplacementFieldGenerator() {};
-  /** Destructor */
-  ~BSplinesInterpolateDisplacementFieldGenerator() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Main computation method */
-  void GenerateData() override;
-
-private:
-  BSplinesInterpolateDisplacementFieldGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbBSplinesInterpolateDisplacementFieldGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.hxx
deleted file mode 100644
index 7b12fa7a1881970099fb35781b039856a397d18c..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateDisplacementFieldGenerator.hxx
+++ /dev/null
@@ -1,132 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbBSplinesInterpolateDisplacementFieldGenerator_hxx
-#define otbBSplinesInterpolateDisplacementFieldGenerator_hxx
-
-#include "otbBSplinesInterpolateDisplacementFieldGenerator.h"
-// Disabling deprecation warning if on visual
-#ifdef _MSC_VER
-#pragma warning(push)
-#pragma warning(disable:4996)
-#endif
-#include "itkLandmarkDisplacementFieldSource.h"
-// Enabling remaining deprecation warning
-#ifdef _MSC_VER
-#pragma warning(pop)
-#endif
-#include "otbMacro.h"
-#include "otbImage.h"
-#include "itkImageRegionIterator.h"
-
-namespace otb
-{
-/** Main computation method */
-template <class TPointSet, class TDisplacementField>
-void
-BSplinesInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateData(void)
-{
-  DisplacementFieldPointerType outputPtr = this->GetOutput();
-  typedef itk::Vector<ValueType, 2>                                      VectorType;
-  typedef otb::Image<VectorType, DisplacementFieldType::ImageDimension>  ImageType;
-  typedef itk::LandmarkDisplacementFieldSource<ImageType>                DisplacementFieldSourceType;
-  typedef typename DisplacementFieldSourceType::LandmarkContainer        LandmarkContainerType;
-  typedef typename DisplacementFieldSourceType::LandmarkPointType        LandmarkPointType;
-  typedef typename PointSetType::PointsContainer                         PointsContainer;
-  typedef typename PointsContainer::ConstIterator                        PointsIterator;
-  typedef typename PointSetType::PointDataContainer                      PointDataContainer;
-  typedef typename PointDataContainer::ConstIterator                     PointDataIterator;
-
-  typename LandmarkContainerType::Pointer sourceLandmarks = LandmarkContainerType::New();
-  typename LandmarkContainerType::Pointer targetLandmarks = LandmarkContainerType::New();
-  LandmarkPointType                       sourcePoint;
-  LandmarkPointType                       targetPoint;
-
-  PointsIterator pointIterator = this->GetPointSet()->GetPoints()->Begin();
-  PointsIterator end = this->GetPointSet()->GetPoints()->End();
-  unsigned int   pointId = 0;
-
-  PointDataIterator pointDataIterator = this->GetPointSet()->GetPointData()->Begin();
-
-  while (pointIterator != end)
-    {
-    typename PointDataContainer::Element valueAndDisplacements = pointDataIterator.Value();
-
-    if (std::abs(valueAndDisplacements[0]) >= this->GetMetricThreshold())
-      {
-      typename PointSetType::PointType p = pointIterator.Value();   // access the point
-      sourcePoint[0] = p[0];
-      sourcePoint[1] = p[1];
-      targetPoint[0] = p[0] - valueAndDisplacements[1];
-      targetPoint[1] = p[1] - valueAndDisplacements[2];
-      otbMsgDebugMacro(
-        << "Adding landmark " << pointId << ", source point: " << sourcePoint << ", targetpoint: " << targetPoint);
-      sourceLandmarks->InsertElement(pointId, sourcePoint);
-      targetLandmarks->InsertElement(pointId, targetPoint);
-      ++pointId;
-      }
-    ++pointIterator;
-    ++pointDataIterator;
-    }
-
-  typename DisplacementFieldSourceType::Pointer deformer = DisplacementFieldSourceType::New();
-  deformer->SetOutputSpacing(this->GetOutputSpacing());
-  deformer->SetOutputOrigin(this->GetOutputOrigin());
-  deformer->SetOutputRegion(outputPtr->GetRequestedRegion());
-  deformer->SetSourceLandmarks(sourceLandmarks.GetPointer());
-  deformer->SetTargetLandmarks(targetLandmarks.GetPointer());
-
-  deformer->Update();
-  outputPtr->Allocate();
-  PixelType defaultPixel;
-  defaultPixel.SetSize(2);
-  defaultPixel.Fill(this->GetDefaultValue());
-  outputPtr->FillBuffer(defaultPixel);
-  typedef itk::ImageRegionIterator<ImageType>            ImageIteratorType;
-  typedef itk::ImageRegionIterator<DisplacementFieldType> OutputIteratorType;
-
-  ImageIteratorType inIt(deformer->GetOutput(), outputPtr->GetRequestedRegion());
-  OutputIteratorType outIt(outputPtr, outputPtr->GetRequestedRegion());
-  int i = 0;
-  // Casting otb::Image<itt::Vector<ValueType, 2>, 2> to otb::VectorImage<ValueType, 2>
-  for (inIt.GoToBegin(), outIt.GoToBegin(); (!inIt.IsAtEnd()) && (!outIt.IsAtEnd()); ++inIt, ++outIt, ++i)
-    {
-    typename ImageType::PixelType inPixel;
-    inPixel = inIt.Get();
-    PixelType outPixel;
-    outPixel.SetSize(2);
-    outPixel[0] = -inPixel[0];
-    outPixel[1] = -inPixel[1];
-    outIt.Set(outPixel);
-    }
-}
-/**
- * PrintSelf Method
- */
-template <class TPointSet, class TDisplacementField>
-void
-BSplinesInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h
deleted file mode 100644
index 6528f55931f87ffab35c48cd7c806495ed13caba..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.h
+++ /dev/null
@@ -1,138 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbBSplinesInterpolateTransformDisplacementFieldGenerator_h
-#define otbBSplinesInterpolateTransformDisplacementFieldGenerator_h
-
-#include "otbPointSetWithTransformToDisplacementFieldGenerator.h"
-#include "itkUnaryFunctorImageFilter.h"
-#include "itkBSplineScatteredDataPointSetToImageFilter.h"
-#include "itkBSplineControlPointImageFunction.h"
-#include "otbImage.h"
-#include "otbMath.h"
-#include <complex>
-
-namespace otb
-{
-/** \class BSplinesInterpolateTransformDisplacementFieldGenerator
- *  \brief This class generate the displacement field by using spline interpolation on the parameters of the transform.
- *
- *  Spline interpolation of non regularly scattered data is provided
- *  by the itk::BSplineScatteredDataPointSetToImageFilter. It allows interpolation using any spline order and implements a multi-level approach.
- *
- *  This filter is used for each parameter. One can also specify the indices of the angular parameters. Angular parameters are first
- *  converted to complex exponential, the interpolated and converted back to the angular space. This is done to avoid interpolating angular discontinuities,
- *  which is a non-sense.
- *
- *  \sa itk::BSplineScatteredDataPointSetToImageFilter
- *
- * \ingroup OTBDisplacementField
- */
-template <class TPointSet, class TDisplacementField>
-class ITK_EXPORT BSplinesInterpolateTransformDisplacementFieldGenerator
-  : public PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-{
-public:
-  /** Standard typedefs */
-  typedef BSplinesInterpolateTransformDisplacementFieldGenerator                          Self;
-  typedef PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass;
-  typedef itk::SmartPointer<Self>                                                        Pointer;
-  typedef itk::SmartPointer<const Self>                                                  ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(BSplinesInterpolateTransformDisplacementFieldGenerator, PointSetWithTransformsToDisplacementFieldGenerator);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PointSetType                PointSetType;
-  typedef typename Superclass::PointSetPointerType         PointSetPointerType;
-  typedef typename Superclass::DisplacementFieldType        DisplacementFieldType;
-  typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType;
-  typedef typename Superclass::IndexType                   IndexType;
-  typedef typename DisplacementFieldType::PixelType         PixelType;
-  typedef typename Superclass::ValueType                   ValueType;
-  typedef typename Superclass::PointType                   PointType;
-  typedef typename Superclass::IndexVectorType             IndexVectorType;
-  typedef typename Superclass::DistanceVectorType          DistanceVectorType;
-  typedef typename Superclass::ParametersType              ParametersType;
-
-  /** Filters definition */
-  typedef itk::Vector<ValueType, 2>                                          PointSetDataType;
-  typedef otb::Image<PointSetDataType, DisplacementFieldType::ImageDimension> InternalImageType;
-  typedef itk::PointSet<PointSetDataType, PointSetType::PointDimension>      InternalPointSetType;
-  typedef itk::BSplineScatteredDataPointSetToImageFilter<InternalPointSetType, InternalImageType>
-  SPlineInterpolateFilterType;
-  typedef typename SPlineInterpolateFilterType::Pointer SPlineInterpolateFilterPointerType;
-  typedef itk::BSplineControlPointImageFunction<InternalImageType>            BSplinerType;
-
-  /**
-   * Add an angular parameter. Angular parameters are transformed by complex exponential during interpolation so as to avoid discontinuity.
-   * \param index The index of the angular parameter.
-   */
-  void AddAngularParameter(unsigned int index);
-  /**
-   * Remove an angular parameter.
-   * \param index The index of the angular parameter.
-   */
-  void RemoveAngularParameter(unsigned int index);
-
-  itkSetMacro(SplineOrder, unsigned int);
-  itkGetMacro(SplineOrder, unsigned int);
-  itkSetMacro(NumberOfControlPoints, unsigned int);
-  itkGetMacro(NumberOfControlPoints, unsigned int);
-  itkSetMacro(NumberOfLevels, unsigned int);
-  itkGetMacro(NumberOfLevels, unsigned int);
-
-protected:
-  /** Constructor */
-  BSplinesInterpolateTransformDisplacementFieldGenerator();
-  /** Destructor */
-  ~BSplinesInterpolateTransformDisplacementFieldGenerator() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Main computation method */
-  void GenerateData() override;
-
-  void GenerateOutputInformation() override;
-
-  /**
-   * Test whether a parameter is angular or not.
-   * \param index The index of the parameter to test.
-   */
-  bool IsAngular(unsigned int index);
-
-private:
-  BSplinesInterpolateTransformDisplacementFieldGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  IndexVectorType m_AngularParameters;
-
-  unsigned int m_SplineOrder;
-  unsigned int m_NumberOfControlPoints;
-  unsigned int m_NumberOfLevels;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbBSplinesInterpolateTransformDisplacementFieldGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.hxx
deleted file mode 100644
index 6d370825ef6140eead474b2ea98f6cd8f1ae2677..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbBSplinesInterpolateTransformDisplacementFieldGenerator.hxx
+++ /dev/null
@@ -1,207 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbBSplinesInterpolateTransformDisplacementFieldGenerator_hxx
-#define otbBSplinesInterpolateTransformDisplacementFieldGenerator_hxx
-
-#include "otbBSplinesInterpolateTransformDisplacementFieldGenerator.h"
-#include "itkLandmarkDisplacementFieldSource.h"
-#include "otbObjectList.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-template <class TPointSet, class TDisplacementField>
-BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::BSplinesInterpolateTransformDisplacementFieldGenerator()
-{
-  m_SplineOrder = 3;
-  m_NumberOfControlPoints = 4;
-  m_NumberOfLevels = 6;
-}
-
-template <class TPointSet, class TDisplacementField>
-void
-BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateOutputInformation()
-{
-  Superclass::GenerateOutputInformation();
-  this->GetOutput()->SetNumberOfComponentsPerPixel(2);
-}
-
-/** Main computation method */
-template <class TPointSet, class TDisplacementField>
-void
-BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateData(void)
-{
-  DisplacementFieldPointerType outputPtr = this->GetOutput();
-
-  // Default displacement field
-  PixelType defaultValue(2);
-  defaultValue.Fill(this->GetDefaultValue());
-  outputPtr->Allocate();
-  outputPtr->FillBuffer(defaultValue);
-
-  typedef otb::ObjectList<BSplinerType>                         SPlineInterpolatorListType;
-  typedef typename PointSetType::PointsContainer::ConstIterator PointSetIteratorType;
-
-  // Initialization of the splines interpolator
-  typename SPlineInterpolatorListType::Pointer splineIntList = SPlineInterpolatorListType::New();
-
-  for (unsigned int paramIndex = 0; paramIndex < this->GetTransform()->GetNumberOfParameters(); ++paramIndex)
-    {
-    // Create a new interpolator
-    splineIntList->PushBack(BSplinerType::New());
-    // Create a new point set
-    typename InternalPointSetType::Pointer tmpPointSet = InternalPointSetType::New();
-    tmpPointSet->Initialize();
-    unsigned int pointDataCounter = 0;
-    for (PointSetIteratorType it = this->GetPointSet()->GetPoints()->Begin();
-         it != this->GetPointSet()->GetPoints()->End();
-         ++it)
-      {
-      if (std::abs(this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[0]) >= this->GetMetricThreshold())
-        {
-        typename InternalPointSetType::PixelType V(0.0);
-
-        if (!IsAngular(paramIndex))
-          {
-          V[0] = this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[paramIndex + 3];
-          V[1] = this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[paramIndex + 3];
-          }
-        else
-          {
-          V[0] =
-            static_cast<ValueType>(std::cos(this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[paramIndex
-                                                                                                             + 3]));
-          V[1] =
-            static_cast<ValueType>(std::sin(this->GetPointSet()->GetPointData()->GetElement(pointDataCounter)[paramIndex
-                                                                                                             + 3]));
-          }
-        unsigned long nbPoints = tmpPointSet->GetNumberOfPoints();
-        tmpPointSet->SetPoint(nbPoints, it.Value());
-        tmpPointSet->SetPointData(nbPoints, V);
-        }
-      ++pointDataCounter;
-      }
-
-    SPlineInterpolateFilterPointerType splineFilter = SPlineInterpolateFilterType::New();
-
-    // Set the interpolator parameters
-    splineFilter->SetInput(tmpPointSet);
-    splineFilter->SetSplineOrder(m_SplineOrder);
-    typename SPlineInterpolateFilterType::ArrayType ncps;
-    ncps.Fill(m_NumberOfControlPoints);
-    splineFilter->SetNumberOfControlPoints(ncps);
-    splineFilter->SetNumberOfLevels(m_NumberOfLevels);
-    // splineFilter->SetGenerateOutputImage(false);
-
-    // Define the parametric domain.
-    splineFilter->SetOrigin(this->GetOutput()->GetOrigin());
-    splineFilter->SetSpacing(this->GetOutput()->GetSpacing());
-    splineFilter->SetSize(this->GetOutput()->GetLargestPossibleRegion().GetSize());
-    splineFilter->Update();
-
-    // Image function
-    splineIntList->Back()->SetSplineOrder( splineFilter->GetSplineOrder() );
-    splineIntList->Back()->SetSize( splineFilter->GetSize() );
-    splineIntList->Back()->SetSpacing( splineFilter->GetSpacing() );
-    splineIntList->Back()->SetOrigin( splineFilter->GetOrigin() );
-    splineIntList->Back()->SetInputImage( static_cast<const InternalImageType*>(splineFilter->GetPhiLattice().GetPointer()) );
-    }
-
-  // Interpolation
-  typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType;
-  IteratorType outIt(outputPtr, outputPtr->GetRequestedRegion());
-
-  // main loop
-  for (outIt.GoToBegin(); !outIt.IsAtEnd(); ++outIt)
-    {
-    // Index of the pixel
-    IndexType index = outIt.GetIndex();
-    // parameters vector
-    ParametersType params(this->GetTransform()->GetNumberOfParameters());
-    // we iterate over the number of parameters of the transform
-    for (unsigned int paramIndex = 0; paramIndex < this->GetTransform()->GetNumberOfParameters(); ++paramIndex)
-      {
-      typename InternalPointSetType::PointType p;
-      this->GetOutput()->TransformIndexToPhysicalPoint(index, p);
-      typename InternalPointSetType::PixelType V(0.0);
-      // For each parameter we use the associated spline interpolator
-      if (!IsAngular(paramIndex))
-        {
-        V = splineIntList->GetNthElement(paramIndex)->EvaluateAtParametricPoint(p);
-        params[paramIndex] = V[0];
-        }
-      else
-        {
-        V = splineIntList->GetNthElement(paramIndex)->EvaluateAtParametricPoint(p);
-        params[paramIndex] = std::atan2(V[1], V[0]);
-        }
-      // We then compute the target point using the transform
-      this->GetTransform()->SetParameters(params);
-      PointType sourcePoint, targetPoint;
-      outputPtr->TransformIndexToPhysicalPoint(index, sourcePoint);
-      targetPoint = this->GetTransform()->TransformPoint(sourcePoint);
-
-      // And the displacement
-      PixelType pixel;
-      pixel.SetSize(2);
-      pixel[0] = static_cast<ValueType>(targetPoint[0] - sourcePoint[0]);
-      pixel[1] = static_cast<ValueType>(targetPoint[1] - sourcePoint[1]);
-      outIt.Set(pixel);
-      }
-    }
-}
-template <class TPointSet, class TDisplacementField>
-void
-BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::AddAngularParameter(unsigned int index)
-{
-  m_AngularParameters.push_back(index);
-}
-template <class TPointSet, class TDisplacementField>
-void
-BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::RemoveAngularParameter(unsigned int index)
-{
-  m_AngularParameters.erase(index);
-}
-template <class TPointSet, class TDisplacementField>
-bool
-BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::IsAngular(unsigned int index)
-{
-  bool resp = std::binary_search(m_AngularParameters.begin(), m_AngularParameters.end(), index);
-  return resp;
-}
-/**
- * PrintSelf Method
- */
-template <class TPointSet, class TDisplacementField>
-void
-BSplinesInterpolateTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h
deleted file mode 100644
index ab4f9d62f4f0a5f0d59b208bf584d7a7050619e9..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNNearestPointsLinearInterpolateDisplacementFieldGenerator_h
-#define otbNNearestPointsLinearInterpolateDisplacementFieldGenerator_h
-
-#include "otbPointSetToDisplacementFieldGenerator.h"
-
-namespace otb
-{
-/** \class NNearestPointsLinearInterpolateDisplacementFieldGenerator
- *  \brief This class generate the displacement field by performing a linear interpolation of the displacement induced by the n nearest point.
- * \ingroup DisparityMap
- *
- * \ingroup OTBDisplacementField
- */
-template <class TPointSet, class TDisplacementField>
-class ITK_EXPORT NNearestPointsLinearInterpolateDisplacementFieldGenerator
-  : public PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-{
-public:
-  /** Standard typedefs */
-  typedef NNearestPointsLinearInterpolateDisplacementFieldGenerator          Self;
-  typedef PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass;
-  typedef itk::SmartPointer<Self>                                           Pointer;
-  typedef itk::SmartPointer<const Self>                                     ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(NNearestPointsLinearInterpolateDisplacementFieldGenerator, PointSetToDisplacementFieldGenerator);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PointSetType                PointSetType;
-  typedef typename Superclass::PointSetPointerType         PointSetPointerType;
-  typedef typename Superclass::DisplacementFieldType        DisplacementFieldType;
-  typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType;
-  typedef typename Superclass::IndexType                   IndexType;
-  typedef typename DisplacementFieldType::PixelType         PixelType;
-  typedef typename Superclass::ValueType                   ValueType;
-  typedef typename Superclass::PointType                   PointType;
-  typedef typename Superclass::IndexVectorType             IndexVectorType;
-  typedef typename Superclass::DistanceVectorType          DistanceVectorType;
-
-  itkSetMacro(NumberOfPoints, unsigned int);
-  itkGetMacro(NumberOfPoints, unsigned int);
-
-protected:
-  /** Constructor */
-  NNearestPointsLinearInterpolateDisplacementFieldGenerator() {};
-  /** Destructor */
-  ~NNearestPointsLinearInterpolateDisplacementFieldGenerator() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Main computation method */
-  void GenerateData() override;
-
-private:
-  NNearestPointsLinearInterpolateDisplacementFieldGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  unsigned int m_NumberOfPoints;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.hxx
deleted file mode 100644
index 873bca0b2efbf8f4588c634043bba2b004c5b534..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.hxx
+++ /dev/null
@@ -1,95 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNNearestPointsLinearInterpolateDisplacementFieldGenerator_hxx
-#define otbNNearestPointsLinearInterpolateDisplacementFieldGenerator_hxx
-
-#define EPSILON 1e-15
-
-#include "otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h"
-#include "itkImageRegionIteratorWithIndex.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/** Main computation method */
-template <class TPointSet, class TDisplacementField>
-void
-NNearestPointsLinearInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateData(void)
-{
-  DisplacementFieldPointerType outputPtr = this->GetOutput();
-  PixelType defaultValue(2);
-  defaultValue.Fill(this->GetDefaultValue());
-  outputPtr->Allocate();
-  outputPtr->FillBuffer(defaultValue);
-
-  typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType;
-  IteratorType it(outputPtr, outputPtr->GetRequestedRegion());
-
-  for (it.GoToBegin(); !it.IsAtEnd(); ++it)
-    {
-    IndexType       index = it.GetIndex();
-    IndexVectorType indexVector = this->GenerateNearestValidPointsPointSet(it.GetIndex(), m_NumberOfPoints);
-    PixelType pixel(2);
-    double xdisplacement, ydisplacement, normalization;
-    xdisplacement = 0;
-    ydisplacement = 0;
-    normalization = 0;
-
-    for (typename IndexVectorType::iterator indexIt = indexVector.begin(); indexIt != indexVector.end(); ++indexIt)
-      {
-      PointType point;
-      point[0] = static_cast<double>(this->GetPointSet()->GetPoints()->GetElement(*indexIt)[0]);
-      point[1] = static_cast<double>(this->GetPointSet()->GetPoints()->GetElement(*indexIt)[1]);
-      double distance = this->EuclideanDistanceMetric(index, point);
-      if (distance < EPSILON)
-        {
-        distance = EPSILON;
-        }
-      xdisplacement +=  this->GetPointSet()->GetPointData()->GetElement((*indexIt))[1] / distance;
-      ydisplacement +=  this->GetPointSet()->GetPointData()->GetElement((*indexIt))[2] / distance;
-      normalization += 1 / distance;
-      }
-
-    if (normalization > 0)
-      {
-      pixel[0] = static_cast<ValueType>(xdisplacement / normalization);
-      pixel[1] = static_cast<ValueType>(ydisplacement / normalization);
-      }
-    else
-      {
-      pixel = defaultValue;
-      }
-    it.Set(pixel);
-    }
-}
-/**
- * PrintSelf Method
- */
-template <class TPointSet, class TDisplacementField>
-void
-NNearestPointsLinearInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h
deleted file mode 100644
index 7ab027e0135ab84a80c67be3c8c76117d9283aa4..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h
+++ /dev/null
@@ -1,94 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator_h
-#define otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator_h
-
-#include "otbPointSetWithTransformToDisplacementFieldGenerator.h"
-
-namespace otb
-{
-/** \class NNearestTransformsLinearInterpolateDisplacementFieldGenerator
- *  \brief generate the displacement field by performing a linear interpolation
- *
- * This class generate the displacement field by performing a linear interpolation of
- * the displacements from the transforms induced by the n nearest points.
- *
- * \ingroup DisparityMap
- *
- * \ingroup OTBDisplacementField
- */
-template <class TPointSet, class TDisplacementField>
-class ITK_EXPORT NNearestTransformsLinearInterpolateDisplacementFieldGenerator
-  : public PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-{
-public:
-  /** Standard typedefs */
-  typedef NNearestTransformsLinearInterpolateDisplacementFieldGenerator                   Self;
-  typedef PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass;
-  typedef itk::SmartPointer<Self>                                                        Pointer;
-  typedef itk::SmartPointer<const Self>                                                  ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(NNearestTransformsLinearInterpolateDisplacementFieldGenerator,
-               PointSetWithTransformsToDisplacementFieldGenerator);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PointSetType                PointSetType;
-  typedef typename Superclass::PointSetPointerType         PointSetPointerType;
-  typedef typename Superclass::DisplacementFieldType        DisplacementFieldType;
-  typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType;
-  typedef typename Superclass::IndexType                   IndexType;
-  typedef typename DisplacementFieldType::PixelType         PixelType;
-  typedef typename Superclass::ValueType                   ValueType;
-  typedef typename Superclass::PointType                   PointType;
-  typedef typename Superclass::IndexVectorType             IndexVectorType;
-  typedef typename Superclass::DistanceVectorType          DistanceVectorType;
-  typedef typename Superclass::TransformType               TransformType;
-  typedef typename TransformType::ParametersType           ParametersType;
-
-  itkSetMacro(NumberOfPoints, unsigned int);
-  itkGetMacro(NumberOfPoints, unsigned int);
-
-protected:
-  /** Constructor */
-  NNearestTransformsLinearInterpolateDisplacementFieldGenerator() {};
-  /** Destructor */
-  ~NNearestTransformsLinearInterpolateDisplacementFieldGenerator() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Main computation method */
-  void GenerateData() override;
-
-private:
-  NNearestTransformsLinearInterpolateDisplacementFieldGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  unsigned int m_NumberOfPoints;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.hxx
deleted file mode 100644
index dabb7ab6ded475512374a0794b65724fffb3b42b..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.hxx
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator_hxx
-#define otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator_hxx
-
-#define EPSILON 1e-15
-
-#include "otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h"
-#include "itkImageRegionIteratorWithIndex.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/** Main computation method */
-template <class TPointSet, class TDisplacementField>
-void
-NNearestTransformsLinearInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateData(void)
-{
-  DisplacementFieldPointerType outputPtr = this->GetOutput();
-  PixelType defaultValue(2);
-  defaultValue.Fill(this->GetDefaultValue());
-  outputPtr->Allocate();
-  outputPtr->FillBuffer(defaultValue);
-
-  typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType;
-  IteratorType it(outputPtr, outputPtr->GetRequestedRegion());
-
-  for (it.GoToBegin(); !it.IsAtEnd(); ++it)
-    {
-    IndexType       index = it.GetIndex();
-    IndexVectorType indexVector = this->GenerateNearestValidPointsPointSet(it.GetIndex(), m_NumberOfPoints);
-    PixelType pixel(2);
-    double xdisplacement, ydisplacement, normalization;
-    xdisplacement = 0;
-    ydisplacement = 0;
-    normalization = 0;
-
-    for (typename IndexVectorType::iterator indexIt = indexVector.begin(); indexIt != indexVector.end(); ++indexIt)
-      {
-      PointType point;
-      point[0] = static_cast<double>(this->GetPointSet()->GetPoints()->GetElement(*indexIt)[0]);
-      point[1] = static_cast<double>(this->GetPointSet()->GetPoints()->GetElement(*indexIt)[1]);
-      double distance = this->EuclideanDistanceMetric(index, point);
-      if (distance < EPSILON)
-        {
-        distance = EPSILON;
-        }
-
-      ParametersType params(this->GetTransform()->GetNumberOfParameters());
-      for (unsigned int i = 0; i < this->GetTransform()->GetNumberOfParameters(); ++i)
-        {
-        params[i] = this->GetPointSet()->GetPointData()->GetElement((*indexIt))[i + 3];
-        }
-      this->GetTransform()->SetParameters(params);
-      PointType sourcePoint, targetPoint;
-
-      outputPtr->TransformIndexToPhysicalPoint(it.GetIndex(), sourcePoint);
-      targetPoint = this->GetTransform()->TransformPoint(sourcePoint);
-      xdisplacement += (targetPoint[0] - sourcePoint[0]) / distance;
-      ydisplacement += (targetPoint[1] - sourcePoint[1]) / distance;
-      normalization += 1 / distance;
-      }
-
-    if (normalization > 0)
-      {
-      pixel[0] = static_cast<ValueType>(xdisplacement / normalization);
-      pixel[1] = static_cast<ValueType>(ydisplacement / normalization);
-      }
-    else
-      {
-      pixel = defaultValue;
-      }
-    it.Set(pixel);
-    }
-}
-/**
- * PrintSelf Method
- */
-template <class TPointSet, class TDisplacementField>
-void
-NNearestTransformsLinearInterpolateDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h
deleted file mode 100644
index 158e21b2c13b79a65d8a1217ae3f75134c8da972..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNearestPointDisplacementFieldGenerator_h
-#define otbNearestPointDisplacementFieldGenerator_h
-
-#include "otbPointSetToDisplacementFieldGenerator.h"
-
-namespace otb
-{
-/** \class NearestPointDisplacementFieldGenerator
- *  \brief This class implements the simplest way to displacement field generation using a point set.
- *  In each pixel location, the displacement is considered to be the displacement of the nearest seed point in the point set.
- *
- * \ingroup DisparityMap
- *
- * \ingroup OTBDisplacementField
- */
-template <class TPointSet, class TDisplacementField>
-class ITK_EXPORT NearestPointDisplacementFieldGenerator
-  : public PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-{
-public:
-  /** Standard typedefs */
-  typedef NearestPointDisplacementFieldGenerator                             Self;
-  typedef PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass;
-  typedef itk::SmartPointer<Self>                                           Pointer;
-  typedef itk::SmartPointer<const Self>                                     ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(NearestPointDisplacementFieldGenerator, PointSetToDisplacementFieldGenerator);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PointSetType                PointSetType;
-  typedef typename Superclass::PointSetPointerType         PointSetPointerType;
-  typedef typename Superclass::DisplacementFieldType        DisplacementFieldType;
-  typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType;
-  typedef typename Superclass::IndexType                   IndexType;
-  typedef typename DisplacementFieldType::PixelType         PixelType;
-  typedef typename Superclass::ValueType                   ValueType;
-  typedef typename Superclass::IndexVectorType             IndexVectorType;
-
-protected:
-  /** Constructor */
-  NearestPointDisplacementFieldGenerator() {};
-  /** Destructor */
-  ~NearestPointDisplacementFieldGenerator() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Main computation method */
-  void GenerateData() override;
-
-private:
-  NearestPointDisplacementFieldGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbNearestPointDisplacementFieldGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.hxx
deleted file mode 100644
index f7194ec39aa8364311fcd003859497361bece1f7..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbNearestPointDisplacementFieldGenerator.hxx
+++ /dev/null
@@ -1,72 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNearestPointDisplacementFieldGenerator_hxx
-#define otbNearestPointDisplacementFieldGenerator_hxx
-
-#include "otbNearestPointDisplacementFieldGenerator.h"
-#include "itkImageRegionIteratorWithIndex.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/** Main computation method */
-template <class TPointSet, class TDisplacementField>
-void
-NearestPointDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateData(void)
-{
-  DisplacementFieldPointerType outputPtr = this->GetOutput();
-  PixelType defaultValue(2);
-  defaultValue.Fill(this->GetDefaultValue());
-  outputPtr->Allocate();
-  outputPtr->FillBuffer(defaultValue);
-
-  typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType;
-  IteratorType it(outputPtr, outputPtr->GetRequestedRegion());
-
-  for (it.GoToBegin(); !it.IsAtEnd(); ++it)
-    {
-    IndexVectorType indexVector = this->GenerateNearestValidPointsPointSet(it.GetIndex(), 1);
-    PixelType p(2);
-    if (indexVector.size() >= 1)
-      {
-      p[0] = static_cast<ValueType>(this->GetPointSet()->GetPointData()->GetElement(indexVector[0])[1]);
-      p[1] = static_cast<ValueType>(this->GetPointSet()->GetPointData()->GetElement(indexVector[0])[2]);
-      }
-    else
-      {
-      p = defaultValue;
-      }
-    it.Set(p);
-    }
-}
-/**
- * PrintSelf Method
- */
-template <class TPointSet, class TDisplacementField>
-void
-NearestPointDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h
deleted file mode 100644
index 6f4f907802a1b67017396b41c3674e74b95043a0..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNearestTransformDisplacementFieldGenerator_h
-#define otbNearestTransformDisplacementFieldGenerator_h
-
-#include "otbPointSetWithTransformToDisplacementFieldGenerator.h"
-
-namespace otb
-{
-/** \class NearestTransformDisplacementFieldGenerator
- *  \brief This class implements displacement field generation by taking into account the local transform of the
- *  nearest point in pointset.
- *
- * \ingroup DisparityMap
- *
- * \ingroup OTBDisplacementField
- */
-template <class TPointSet, class TDisplacementField>
-class ITK_EXPORT NearestTransformDisplacementFieldGenerator
-  : public PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-{
-public:
-  /** Standard typedefs */
-  typedef NearestTransformDisplacementFieldGenerator                                      Self;
-  typedef PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass;
-  typedef itk::SmartPointer<Self>                                                        Pointer;
-  typedef itk::SmartPointer<const Self>                                                  ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(NearestTransformDisplacementFieldGenerator, PointSetWithTransformToDisplacementFieldGenerator);
-
-  /** Template parameters typedefs */
-  typedef typename Superclass::PointSetType                PointSetType;
-  typedef typename Superclass::PointSetPointerType         PointSetPointerType;
-  typedef typename Superclass::DisplacementFieldType        DisplacementFieldType;
-  typedef typename Superclass::DisplacementFieldPointerType DisplacementFieldPointerType;
-  typedef typename Superclass::IndexType                   IndexType;
-  typedef typename Superclass::PointType                   PointType;
-  typedef typename DisplacementFieldType::PixelType         PixelType;
-  typedef typename Superclass::ValueType                   ValueType;
-  typedef typename Superclass::IndexVectorType             IndexVectorType;
-  typedef typename Superclass::TransformType               TransformType;
-  typedef typename TransformType::ParametersType           ParametersType;
-
-protected:
-  /** Constructor */
-  NearestTransformDisplacementFieldGenerator() {};
-  /** Destructor */
-  ~NearestTransformDisplacementFieldGenerator() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Main computation method */
-  void GenerateData() override;
-
-private:
-  NearestTransformDisplacementFieldGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbNearestTransformDisplacementFieldGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.hxx
deleted file mode 100644
index e43b4fe7da8daf535e3650bb663fa69b4893f56b..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbNearestTransformDisplacementFieldGenerator.hxx
+++ /dev/null
@@ -1,82 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbNearestTransformDisplacementFieldGenerator_hxx
-#define otbNearestTransformDisplacementFieldGenerator_hxx
-
-#include "otbNearestTransformDisplacementFieldGenerator.h"
-#include "itkImageRegionIteratorWithIndex.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/** Main computation method */
-template <class TPointSet, class TDisplacementField>
-void
-NearestTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateData(void)
-{
-  DisplacementFieldPointerType outputPtr = this->GetOutput();
-  PixelType defaultValue(2);
-  defaultValue.Fill(this->GetDefaultValue());
-  outputPtr->Allocate();
-  outputPtr->FillBuffer(defaultValue);
-
-  typedef itk::ImageRegionIteratorWithIndex<DisplacementFieldType> IteratorType;
-  IteratorType it(outputPtr, outputPtr->GetRequestedRegion());
-
-  for (it.GoToBegin(); !it.IsAtEnd(); ++it)
-    {
-    IndexVectorType indexVector = this->GenerateNearestValidPointsPointSet(it.GetIndex(), 1);
-    PixelType pixel(2);
-    if (indexVector.size() >= 1)
-      {
-      ParametersType params(this->GetTransform()->GetNumberOfParameters());
-      for (unsigned int i = 0; i < this->GetTransform()->GetNumberOfParameters(); ++i)
-        {
-        params[i] = this->GetPointSet()->GetPointData()->GetElement(indexVector[0])[i + 3];
-        }
-      this->GetTransform()->SetParameters(params);
-      PointType sourcePoint, targetPoint;
-
-      outputPtr->TransformIndexToPhysicalPoint(it.GetIndex(), sourcePoint);
-      targetPoint = this->GetTransform()->TransformPoint(sourcePoint);
-      pixel[0] = static_cast<ValueType>(targetPoint[0] - sourcePoint[0]);
-      pixel[1] = static_cast<ValueType>(targetPoint[1] - sourcePoint[1]);
-      }
-    else
-      {
-      pixel = defaultValue;
-      }
-    it.Set(pixel);
-    }
-}
-/**
- * PrintSelf Method
- */
-template <class TPointSet, class TDisplacementField>
-void
-NearestTransformDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h
deleted file mode 100644
index 9624d8ebe16f1af7108870cfe13f54f3da8c2cd3..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.h
+++ /dev/null
@@ -1,166 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbPointSetToDisplacementFieldGenerator_h
-#define otbPointSetToDisplacementFieldGenerator_h
-
-#include "itkImageSource.h"
-
-namespace otb
-{
-namespace Functor
-{
-/** \class DistanceComparisonFunctor
- *  \brief This functor is used in nearest neighborhood sorting.
- *  \ingroup DisparityMap
- *
- * \ingroup OTBDisplacementField
- */
-class DistanceComparisonFunctor
-{
-public:
-  DistanceComparisonFunctor() {}
-  virtual ~DistanceComparisonFunctor() {}
-  typedef std::vector<double> DistanceVectorType;
-
-  void SetDistanceVector(DistanceVectorType& vec)
-  {
-    m_DistanceVector = vec;
-  }
-  DistanceVectorType GetDistanceVector(void)
-  {
-    return m_DistanceVector;
-  }
-  inline bool operator ()(const unsigned int a1, const unsigned int a2)
-  {
-    return m_DistanceVector[a1] < m_DistanceVector[a2];
-  }
-
-private:
-  DistanceVectorType m_DistanceVector;
-};
-}
-/** \class PointSetToDisplacementFieldGenerator
- *  \brief Base class for filters generating a displacement field from a point set enriched with displacement and local transform information.
- *  The output of the filters deriving from this base class can be passed to the itk::WarpImageFilter for image resampling.
- *  \sa DisparityMapEstimationMethod
- *   \sa itk::WarpImageFilter
-   *  \ingroup DisparityMap
- *
- * \ingroup OTBDisplacementField
- */
-template <class TPointSet, class TDisplacementField>
-class ITK_EXPORT PointSetToDisplacementFieldGenerator
-  : public itk::ImageSource<TDisplacementField>
-{
-public:
-  /** Standard typedefs */
-  typedef PointSetToDisplacementFieldGenerator Self;
-  typedef itk::ImageSource<TDisplacementField> Superclass;
-  typedef itk::SmartPointer<Self>             Pointer;
-  typedef itk::SmartPointer<const Self>       ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(PointSetToDisplacementFieldGenerator, ImageSource);
-
-  /** Template parameters typedefs */
-  typedef TPointSet                      PointSetType;
-  typedef typename PointSetType::Pointer PointSetPointerType;
-
-  typedef TDisplacementField                                DisplacementFieldType;
-  typedef typename DisplacementFieldType::Pointer           DisplacementFieldPointerType;
-  typedef typename DisplacementFieldType::IndexType         IndexType;
-  typedef typename DisplacementFieldType::SizeType          SizeType;
-  typedef typename DisplacementFieldType::SpacingType       SpacingType;
-  typedef typename DisplacementFieldType::PointType         PointType;
-  typedef typename DisplacementFieldType::InternalPixelType ValueType;
-
-  /** More typedefs */
-  typedef std::vector<double>       DistanceVectorType;
-  typedef std::vector<unsigned int> IndexVectorType;
-
-  /**
-   * Set the pointset containing the disparity.
-   * \param pointset The pointset containing the disparity.
-   */
-  void SetPointSet(const TPointSet * pointset);
-  /**
-   * Get the pointset containing the disparity.
-   * \return The pointset containing the disparity.
-   */
-  const TPointSet * GetPointSet(void);
-
-  itkSetMacro(MetricThreshold, double);
-  itkGetMacro(MetricThreshold, double);
-  itkSetMacro(DefaultValue, ValueType);
-  itkGetMacro(DefaultValue, ValueType);
-  itkSetMacro(OutputSize, SizeType);
-  itkGetConstReferenceMacro(OutputSize, SizeType);
-  itkSetMacro(OutputSpacing, SpacingType);
-  itkGetConstReferenceMacro(OutputSpacing, SpacingType);
-  itkSetMacro(OutputOrigin, PointType);
-  itkGetConstReferenceMacro(OutputOrigin, PointType);
-
-protected:
-  /** Constructor */
-  PointSetToDisplacementFieldGenerator();
-  /** Destructor */
-  ~PointSetToDisplacementFieldGenerator() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-  /** Generate output information */
-  void GenerateOutputInformation(void) override;
-  /**
-   * Generate the n nearest valid point in point set, where a valid point has a sufficient metric value.
-   *  \param index The index of the pixel to compute.
-   *  \param n The number of nearest point to seek.
-   *  \return A vector containing the index of the nearest point from nearest to most far.
-   */
-  IndexVectorType GenerateNearestValidPointsPointSet(IndexType index, unsigned int n = 1);
-
-  /** Euclidean distance of point to index */
-  double EuclideanDistanceMetric(IndexType index, PointType p);
-
-private:
-  PointSetToDisplacementFieldGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  /**
-   * The threshold of metric value.
-   */
-  double m_MetricThreshold;
-  /** The output size */
-  SizeType m_OutputSize;
-  /** The output spacing. */
-  SpacingType m_OutputSpacing;
-  /** The output origin */
-  PointType m_OutputOrigin;
-  /** Default value */
-  ValueType m_DefaultValue;
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbPointSetToDisplacementFieldGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.hxx
deleted file mode 100644
index f0b69603156bf68220c8bb698ea2bcfabcd894c3..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbPointSetToDisplacementFieldGenerator.hxx
+++ /dev/null
@@ -1,157 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbPointSetToDisplacementFieldGenerator_hxx
-#define otbPointSetToDisplacementFieldGenerator_hxx
-
-#include "otbPointSetToDisplacementFieldGenerator.h"
-#include "otbMacro.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TPointSet, class TDisplacementField>
-PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PointSetToDisplacementFieldGenerator()
-{
-  this->SetNumberOfRequiredInputs(1);
-  m_MetricThreshold = 0.;
-  m_OutputSize.Fill(100);
-  m_OutputSpacing.Fill(1.);
-  m_OutputOrigin.Fill(0.);
-  m_DefaultValue = 0;
-//  m_NearestPoints = PointSetType::New();
-}
-/**
- * Set the pointset containing the disparity.
- * \param pointset The pointset containing the disparity.
- */
-template <class TPointSet, class TDisplacementField>
-void
-PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::SetPointSet(const TPointSet * pointset)
-{
-  this->itk::ProcessObject::SetNthInput(0, const_cast<PointSetType *>(pointset));
-}
-/**
- * Get the pointset containing the disparity.
- * \return The pointset containing the disparity.
- */
-template <class TPointSet, class TDisplacementField>
-const TPointSet *
-PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GetPointSet(void)
-{
-  return static_cast<const PointSetType *>(this->itk::ProcessObject::GetInput(0));
-}
-/** Generate output information */
-template <class TPointSet, class TDisplacementField>
-void
-PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateOutputInformation(void)
-{
-  DisplacementFieldPointerType               outputPtr = this->GetOutput();
-  typename DisplacementFieldType::RegionType largest;
-  largest.SetSize(m_OutputSize);
-  IndexType index;
-  index.Fill(0);
-  largest.SetIndex(index);
-  outputPtr->SetRegions(largest);
-  outputPtr->SetSignedSpacing(m_OutputSpacing);
-  outputPtr->SetOrigin(m_OutputOrigin);
-  // Force the displacement field to have vector pixel of size 2.
-  outputPtr->SetNumberOfComponentsPerPixel(2);
-}
-/**
- * Generate the n nearest point in point set
- *  \param index The index of the pixel to compute.
- *  \param n The number of nearest point to seek.
- *  \return A vector containing the index of the nearest point from nearest to most far.
- */
-template <class TPointSet, class TDisplacementField>
-typename PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::IndexVectorType
-PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::GenerateNearestValidPointsPointSet(IndexType index, unsigned int n)
-{
-  typedef Functor::DistanceComparisonFunctor ComparisonFunctorType;
-  DistanceVectorType distanceVector;
-  IndexVectorType    indexVector;
-  IndexVectorType    sortVector;
-  unsigned int       i =  0;
-  unsigned int       j = 0;
-
-  typedef typename PointSetType::PointsContainer::ConstIterator PointSetIteratorType;
-
-  PointSetIteratorType it = this->GetPointSet()->GetPoints()->Begin();
-  for (; it != this->GetPointSet()->GetPoints()->End(); ++it)
-    {
-    PointType p;
-    p[0] = it.Value()[0];
-    p[1] = it.Value()[1];
-    if (std::abs(this->GetPointSet()->GetPointData()->GetElement(j)[0]) >= m_MetricThreshold)
-      {
-
-      distanceVector.push_back(EuclideanDistanceMetric(index, p));
-      sortVector.push_back(i);
-      indexVector.push_back(j);
-      ++i;
-      }
-    ++j;
-    }
-
-  ComparisonFunctorType comp;
-  comp.SetDistanceVector(distanceVector);
-  sort(sortVector.begin(), sortVector.end(), comp);
-
-  // building output vector
-  unsigned int    nbElements = (n < indexVector.size() ? n : indexVector.size());
-  IndexVectorType output;
-  for (i = 0; i < nbElements; ++i)
-    {
-    output.push_back(indexVector[sortVector[i]]);
-    }
-  return output;
-}
-
-template <class TPointSet, class TDisplacementField>
-double
-PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::EuclideanDistanceMetric(IndexType index, PointType p)
-{
-  PointType pprime;
-  // our point are expressed in index and not in physical coordinates
-  //this->GetOutput()->TransformIndexToPhysicalPoint(index, pprime);
-  return std::sqrt(std::pow(index[0] - p[0], 2) + std::pow(index[1] - p[1], 2));
-}
-/**
- * PrintSelf Method
- */
-template <class TPointSet, class TDisplacementField>
-void
-PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h b/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h
deleted file mode 100644
index a947bb82cd939c29420ed9d917118a23558af2e6..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbPointSetWithTransformToDisplacementFieldGenerator_h
-#define otbPointSetWithTransformToDisplacementFieldGenerator_h
-
-#include "otbPointSetToDisplacementFieldGenerator.h"
-#include "itkTransform.h"
-
-namespace otb
-{
-/** \class PointSetWithTransformToDisplacementFieldGenerator
- *  \brief Base class for filters generating a displacement field from a point set enriched with local transform information.
- *
- *  The output of the filters deriving from this base class can be passed to the itk::WarpImageFilter for image resampling.
- *
- *  \sa DisparityMapEstimationMethod
- *  \sa itk::WarpImageFilter
- *
- *  \ingroup DisparityMap
- *
- * \ingroup OTBDisplacementField
- */
-template <class TPointSet, class TDisplacementField>
-class ITK_EXPORT PointSetWithTransformToDisplacementFieldGenerator
-  : public PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-{
-public:
-  /** Standard typedefs */
-  typedef PointSetWithTransformToDisplacementFieldGenerator                  Self;
-  typedef PointSetToDisplacementFieldGenerator<TPointSet, TDisplacementField> Superclass;
-  typedef itk::SmartPointer<Self>                                           Pointer;
-  typedef itk::SmartPointer<const Self>                                     ConstPointer;
-
-  /** Type macro */
-  itkNewMacro(Self);
-
-  /** Creation through object factory macro */
-  itkTypeMacro(PointSetWithTransformToDisplacementFieldGenerator, PointSetToDisplacementFieldGenerator);
-
-  /** Template parameters typedefs */
-  typedef TPointSet                      PointSetType;
-  typedef typename PointSetType::Pointer PointSetPointerType;
-
-  typedef TDisplacementField                                DisplacementFieldType;
-  typedef typename DisplacementFieldType::Pointer           DisplacementFieldPointerType;
-  typedef typename DisplacementFieldType::IndexType         IndexType;
-  typedef typename DisplacementFieldType::SizeType          SizeType;
-  typedef typename DisplacementFieldType::SpacingType       SpacingType;
-  typedef typename DisplacementFieldType::PointType         PointType;
-  typedef typename DisplacementFieldType::InternalPixelType ValueType;
-
-  /** More typedefs */
-  typedef typename Superclass::DistanceVectorType DistanceVectorType;
-  typedef typename Superclass::IndexVectorType    IndexVectorType;
-
-  /** Transform typedefs */
-  typedef itk::Transform<double, 2, 2>           TransformType;
-  typedef typename TransformType::Pointer        TransformPointerType;
-  typedef typename TransformType::ParametersType ParametersType;
-
-  /** Set/Get the Transform. */
-  itkSetObjectMacro(Transform, TransformType);
-  itkGetObjectMacro(Transform, TransformType);
-
-protected:
-  /** Constructor */
-  PointSetWithTransformToDisplacementFieldGenerator();
-  /** Destructor */
-  ~PointSetWithTransformToDisplacementFieldGenerator() override {}
-  /**PrintSelf method */
-  void PrintSelf(std::ostream& os, itk::Indent indent) const override;
-
-private:
-  PointSetWithTransformToDisplacementFieldGenerator(const Self &) = delete;
-  void operator =(const Self&) = delete;
-
-  /**
-   * The transform used for local registration.
-   */
-  TransformPointerType m_Transform;
-
-};
-} // End namespace otb
-#ifndef OTB_MANUAL_INSTANTIATION
-#include "otbPointSetWithTransformToDisplacementFieldGenerator.hxx"
-#endif
-
-#endif
diff --git a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.hxx b/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.hxx
deleted file mode 100644
index 8cd221644a2d657e8127facbe434b852e4df869a..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/include/otbPointSetWithTransformToDisplacementFieldGenerator.hxx
+++ /dev/null
@@ -1,50 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbPointSetWithTransformToDisplacementFieldGenerator_hxx
-#define otbPointSetWithTransformToDisplacementFieldGenerator_hxx
-
-#include "otbPointSetWithTransformToDisplacementFieldGenerator.h"
-
-#include "otbMacro.h"
-
-namespace otb
-{
-/**
- * Constructor
- */
-template <class TPointSet, class TDisplacementField>
-PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PointSetWithTransformToDisplacementFieldGenerator()
-{
-  m_Transform = nullptr;    // has to be provided by the user
-}
-/**
- * PrintSelf Method
- */
-template <class TPointSet, class TDisplacementField>
-void
-PointSetWithTransformToDisplacementFieldGenerator<TPointSet, TDisplacementField>
-::PrintSelf(std::ostream& os, itk::Indent indent) const
-{
-  Superclass::PrintSelf(os, indent);
-}
-} // End namespace otb
-#endif
diff --git a/Modules/Registration/DisplacementField/otb-module.cmake b/Modules/Registration/DisplacementField/otb-module.cmake
deleted file mode 100644
index b8efc64ea38e78fa5dbe0f82615e2abb88f26e59..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/otb-module.cmake
+++ /dev/null
@@ -1,41 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set(DOCUMENTATION "This module contains filters that generate a deformation
-field by using some interpolation criterion on the deformation values from the point
-set. Several interpolation methods are available (Nearest neighbours, linear,
-BSpline). The class otb::StereorectificationDisplacementFieldSource is specialized
-in generating a deformation field between two images in epipolar geometry
-(horizontal shifts).")
-
-otb_module(OTBDisplacementField
-  DEPENDS
-    OTBCommon
-    OTBITK
-    OTBImageBase
-    OTBObjectList
-
-  TEST_DEPENDS
-    OTBImageIO
-    OTBTestKernel
-
-  DESCRIPTION
-    "${DOCUMENTATION}"
-)
diff --git a/Modules/Registration/DisplacementField/test/CMakeLists.txt b/Modules/Registration/DisplacementField/test/CMakeLists.txt
deleted file mode 100644
index 440c6b130cf207b956ef74153868428e58bf8bbe..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/test/CMakeLists.txt
+++ /dev/null
@@ -1,88 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-otb_module_test()
-
-set(OTBDisplacementFieldTests
-otbDisplacementFieldTestDriver.cxx
-otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.cxx
-otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.cxx
-otbNearestTransformDisplacementFieldGenerator.cxx
-otbNearestPointDisplacementFieldGenerator.cxx
-otbBSplinesInterpolateTransformDisplacementFieldGenerator.cxx
-otbBSplinesInterpolateDisplacementFieldGenerator.cxx
-)
-
-add_executable(otbDisplacementFieldTestDriver ${OTBDisplacementFieldTests})
-target_link_libraries(otbDisplacementFieldTestDriver ${OTBDisplacementField-Test_LIBRARIES})
-otb_module_target_label(otbDisplacementFieldTestDriver)
-
-# Tests Declaration
-
-otb_add_test(NAME dmTvNNearestTransformsLinearInterpolateDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver
-  --compare-image ${EPSILON_10}
-  ${BASELINE}/dmTvNNearestTransformsLinearInterpolateDeformationField.tif
-  ${TEMP}/dmTvNNearestTransformsLinearInterpolateDisplacementField.tif
-  otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator
-  ${TEMP}/dmTvNNearestTransformsLinearInterpolateDisplacementField.tif
-  )
-
-otb_add_test(NAME dmTvNNearestPointsLinearInterpolateDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver
-  --compare-image ${EPSILON_10}
-  ${BASELINE}/dmTvNNearestPointsLinearInterpolateDeformationField.tif
-  ${TEMP}/dmTvNNearestPointsLinearInterpolateDisplacementField.tif
-  otbNNearestPointsLinearInterpolateDisplacementFieldGenerator
-  ${TEMP}/dmTvNNearestPointsLinearInterpolateDisplacementField.tif
-  )
-
-
-
-otb_add_test(NAME dmTvNearestTransformDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver
-  --compare-image ${EPSILON_10}
-  ${BASELINE}/dmTvNearestTransformDeformationField.tif
-  ${TEMP}/dmTvNearestTransformDisplacementField.tif
-  otbNearestTransformDisplacementFieldGenerator
-  ${TEMP}/dmTvNearestTransformDisplacementField.tif
-  )
-
-otb_add_test(NAME dmTvNearestPointDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver
-  --compare-image ${EPSILON_10}
-  ${BASELINE}/dmTvNearestPointDeformationField.tif
-  ${TEMP}/dmTvNearestPointDisplacementField.tif
-  otbNearestPointDisplacementFieldGenerator
-  ${TEMP}/dmTvNearestPointDisplacementField.tif
-  )
-
-#otb_add_test(NAME dmTvBSplinesInterpolateTransformDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver
-  #--compare-image ${EPSILON_4}
-  #${BASELINE}/dmTvBSplinesInterpolateTransformDeformationFieldGenerator.tif
-  #${TEMP}/dmTvBSplinesInterpolateTransformDisplacementFieldGenerator.tif
-  #otbBSplinesInterpolateTransformDisplacementFieldGenerator
-  #${TEMP}/dmTvBSplinesInterpolateTransformDisplacementFieldGenerator.tif
-  #)
-
-otb_add_test(NAME dmTvBSplinesInterpolateDisplacementFieldGenerator COMMAND otbDisplacementFieldTestDriver
-  --compare-image ${EPSILON_10}
-  ${BASELINE}/dmTvBSplinesInterpolateDeformationField.tif
-  ${TEMP}/dmTvBSplinesInterpolateDisplacementField.tif
-  otbBSplinesInterpolateDisplacementFieldGenerator
-  ${TEMP}/dmTvBSplinesInterpolateDisplacementField.tif
-  )
-
diff --git a/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateDisplacementFieldGenerator.cxx
deleted file mode 100644
index 9135073f0ccdadbf018d1f7b2761f1fd91b5d66b..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateDisplacementFieldGenerator.cxx
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "itkPointSet.h"
-#include "otbVectorImage.h"
-#include "otbBSplinesInterpolateDisplacementFieldGenerator.h"
-#include "otbImageFileWriter.h"
-
-int otbBSplinesInterpolateDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  const char *       outfname = argv[1];
-  typedef double                                                                     PixelType;
-  typedef otb::VectorImage<PixelType, Dimension>                                     ImageType;
-  typedef itk::Array<double>                                                         ParamType;
-  typedef itk::PointSet<ParamType, Dimension>                                        PointSetType;
-  typedef PointSetType::PointType                                                    PointType;
-  typedef otb::BSplinesInterpolateDisplacementFieldGenerator<PointSetType, ImageType> FilterType;
-  typedef otb::ImageFileWriter<ImageType>                                            WriterType;
-
-  ImageType::SizeType size;
-  size.Fill(100);
-  double thresh = 0.9;
-
-  // Preparing point set
-  PointSetType::Pointer ps = PointSetType::New();
-  PointType             p1, p2, p3, p4, p5;
-  ParamType             pd1(3), pd2(3), pd3(3), pd4(3), pd5(3);
-
-  p1[0] = 10;
-  p1[1] = 10;
-  p2[0] = 75;
-  p2[1] = 10;
-  p3[0] = 50;
-  p3[1] = 50;
-  p4[0] = 10;
-  p4[1] = 60;
-  p5[0] = 85;
-  p5[1] = 70;
-
-  pd1[0] = 0.95;
-  pd1[1] = 10;
-  pd1[2] = -5;
-  pd2[0] = 0.98;
-  pd2[1] = 2;
-  pd2[2] = 5;
-  pd3[0] = 0.5;
-  pd3[1] = 20;
-  pd3[2] = -20;
-  pd4[0] = 0.91;
-  pd4[1] = 15;
-  pd4[2] = -5;
-  pd5[0] = 0.91;
-  pd5[1] = 5;
-  pd5[2] = 5;
-
-  ps->SetPoint(0, p1);
-  ps->SetPointData(0, pd1);
-  ps->SetPoint(1, p2);
-  ps->SetPointData(1, pd2);
-  ps->SetPoint(2, p3);
-  ps->SetPointData(2, pd3);
-  ps->SetPoint(3, p4);
-  ps->SetPointData(3, pd4);
-  ps->SetPoint(4, p5);
-  ps->SetPointData(4, pd5);
-
-  // Instantiating object
-  FilterType::Pointer filter = FilterType::New();
-  filter->SetOutputSize(size);
-  filter->SetMetricThreshold(thresh);
-  filter->SetPointSet(ps);
-
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetInput(filter->GetOutput());
-  writer->SetFileName(outfname);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateTransformDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateTransformDisplacementFieldGenerator.cxx
deleted file mode 100644
index df178d762b61e25893f176f9aa175645280ed5a3..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/test/otbBSplinesInterpolateTransformDisplacementFieldGenerator.cxx
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "itkPointSet.h"
-#include "otbVectorImage.h"
-#include "otbBSplinesInterpolateTransformDisplacementFieldGenerator.h"
-#include "otbImageFileWriter.h"
-#include "itkEuler2DTransform.h"
-
-int otbBSplinesInterpolateTransformDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  const char *       outfname = argv[1];
-  typedef double                                                                              PixelType;
-  typedef otb::VectorImage<PixelType, Dimension>                                              ImageType;
-  typedef itk::Array<double>                                                                  ParamType;
-  typedef itk::PointSet<ParamType, Dimension>                                                 PointSetType;
-  typedef PointSetType::PointType                                                             PointType;
-  typedef otb::BSplinesInterpolateTransformDisplacementFieldGenerator<PointSetType, ImageType> FilterType;
-  typedef otb::ImageFileWriter<ImageType>                                                     WriterType;
-  typedef itk::Euler2DTransform<double>                                                       TransformType;
-
-  ImageType::SizeType size;
-  size.Fill(100);
-  double thresh = 0.9;
-
-  // Preparing point set
-  PointSetType::Pointer ps = PointSetType::New();
-  PointType             p1, p2, p3, p4, p5;
-  ParamType             pd1(6), pd2(6), pd3(6), pd4(6), pd5(6);
-  itk::Point<double, 2> center;
-
-  p1[0] = 10;
-  p1[1] = 10;
-  p2[0] = 75;
-  p2[1] = 10;
-  p3[0] = 50;
-  p3[1] = 50;
-  p4[0] = 10;
-  p4[1] = 60;
-  p5[0] = 85;
-  p5[1] = 70;
-  center.Fill(50);
-
-  pd1[0] = 0.95;
-  pd1[1] = 0;
-  pd1[2] = 0;
-  pd1[3] = 0.03925;
-  pd1[4] = 5;
-  pd1[5] = 5;
-  pd2[0] = 0.98;
-  pd2[1] = 0;
-  pd2[2] = 0;
-  pd2[3] = -0.03925;
-  pd2[4] = 5;
-  pd2[5] = -5;
-  pd3[0] = 0.5;
-  pd3[1] = 0;
-  pd3[2] = 0;
-  pd3[3] = 0;
-  pd3[4] = 0;
-  pd3[5] = 0;
-  pd4[0] = 0.91;
-  pd4[1] = 0;
-  pd4[2] = 0;
-  pd4[3] = 0.03925;
-  pd4[4] = -5;
-  pd4[5] = 5;
-  pd5[0] = 0.91;
-  pd5[1] = 0;
-  pd5[2] = 0;
-  pd5[3] = -0.03925;
-  pd5[4] = -5;
-  pd5[5] = -5;
-
-  ps->SetPoint(0, p1);
-  ps->SetPointData(0, pd1);
-  ps->SetPoint(1, p2);
-  ps->SetPointData(1, pd2);
-  ps->SetPoint(2, p3);
-  ps->SetPointData(2, pd3);
-  ps->SetPoint(3, p4);
-  ps->SetPointData(3, pd4);
-  ps->SetPoint(4, p5);
-  ps->SetPointData(4, pd5);
-
-  TransformType::Pointer transform = TransformType::New();
-  transform->SetCenter(center);
-
-  // Instantiating object
-  FilterType::Pointer filter = FilterType::New();
-  filter->SetOutputSize(size);
-  filter->SetMetricThreshold(thresh);
-  filter->SetPointSet(ps);
-  filter->SetTransform(transform);
-  filter->AddAngularParameter(0);
-
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetInput(filter->GetOutput());
-  writer->SetFileName(outfname);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Registration/DisplacementField/test/otbDisplacementFieldTestDriver.cxx b/Modules/Registration/DisplacementField/test/otbDisplacementFieldTestDriver.cxx
deleted file mode 100644
index 86d6641fce1b1b594048f20c2648a2e95eabdb88..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/test/otbDisplacementFieldTestDriver.cxx
+++ /dev/null
@@ -1,31 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbTestMain.h"
-
-void RegisterTests()
-{
-  REGISTER_TEST(otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator);
-  REGISTER_TEST(otbNNearestPointsLinearInterpolateDisplacementFieldGenerator);
-  REGISTER_TEST(otbNearestTransformDisplacementFieldGenerator);
-  REGISTER_TEST(otbNearestPointDisplacementFieldGenerator);
-  REGISTER_TEST(otbBSplinesInterpolateTransformDisplacementFieldGenerator);
-  REGISTER_TEST(otbBSplinesInterpolateDisplacementFieldGenerator);
-}
diff --git a/Modules/Registration/DisplacementField/test/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.cxx
deleted file mode 100644
index b487435899319e9d6562802fe539a35a6240d0b4..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/test/otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.cxx
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "itkPointSet.h"
-#include "otbVectorImage.h"
-#include "otbNNearestPointsLinearInterpolateDisplacementFieldGenerator.h"
-#include "otbImageFileWriter.h"
-
-int otbNNearestPointsLinearInterpolateDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  const char *       outfname = argv[1];
-  typedef double                                                                                 PixelType;
-  typedef otb::VectorImage<PixelType, Dimension>                                                 ImageType;
-  typedef itk::Array<double>                                                                     ParamType;
-  typedef itk::PointSet<ParamType, Dimension>                                                    PointSetType;
-  typedef PointSetType::PointType                                                                PointType;
-  typedef otb::NNearestPointsLinearInterpolateDisplacementFieldGenerator<PointSetType, ImageType> FilterType;
-  typedef otb::ImageFileWriter<ImageType>                                                        WriterType;
-
-  ImageType::SizeType size;
-  size.Fill(100);
-  double thresh = 0.9;
-
-  // Preparing point set
-  PointSetType::Pointer ps = PointSetType::New();
-  PointType             p1, p2, p3, p4, p5;
-  ParamType             pd1(3), pd2(3), pd3(3), pd4(3), pd5(3);
-
-  p1[0] = 10;
-  p1[1] = 10;
-  p2[0] = 75;
-  p2[1] = 10;
-  p3[0] = 50;
-  p3[1] = 50;
-  p4[0] = 10;
-  p4[1] = 60;
-  p5[0] = 85;
-  p5[1] = 70;
-
-  pd1[0] = 0.95;
-  pd1[1] = 10;
-  pd1[2] = -5;
-  pd2[0] = 0.98;
-  pd2[1] = 2;
-  pd2[2] = 5;
-  pd3[0] = 0.5;
-  pd3[1] = 20;
-  pd3[2] = -20;
-  pd4[0] = 0.91;
-  pd4[1] = 15;
-  pd4[2] = -5;
-  pd5[0] = 0.91;
-  pd5[1] = 5;
-  pd5[2] = 5;
-
-  ps->SetPoint(0, p1);
-  ps->SetPointData(0, pd1);
-  ps->SetPoint(1, p2);
-  ps->SetPointData(1, pd2);
-  ps->SetPoint(2, p3);
-  ps->SetPointData(2, pd3);
-  ps->SetPoint(3, p4);
-  ps->SetPointData(3, pd4);
-  ps->SetPoint(4, p5);
-  ps->SetPointData(4, pd5);
-
-  // Instantiating object
-  FilterType::Pointer filter = FilterType::New();
-  filter->SetOutputSize(size);
-  filter->SetMetricThreshold(thresh);
-  filter->SetNumberOfPoints(5);
-  filter->SetPointSet(ps);
-
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetInput(filter->GetOutput());
-  writer->SetFileName(outfname);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Registration/DisplacementField/test/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.cxx
deleted file mode 100644
index fb3b638d83fb61f46aef76faa7204e906c5404f0..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/test/otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.cxx
+++ /dev/null
@@ -1,122 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "itkPointSet.h"
-#include "otbVectorImage.h"
-#include "otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator.h"
-#include "otbImageFileWriter.h"
-#include "itkEuler2DTransform.h"
-
-int otbNNearestTransformsLinearInterpolateDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  const char *       outfname = argv[1];
-  typedef double                                                                                     PixelType;
-  typedef otb::VectorImage<PixelType, Dimension>                                                     ImageType;
-  typedef itk::Array<double>                                                                         ParamType;
-  typedef itk::PointSet<ParamType, Dimension>                                                        PointSetType;
-  typedef PointSetType::PointType                                                                    PointType;
-  typedef otb::NNearestTransformsLinearInterpolateDisplacementFieldGenerator<PointSetType, ImageType> FilterType;
-  typedef otb::ImageFileWriter<ImageType>                                                            WriterType;
-  typedef itk::Euler2DTransform<double>                                                              TransformType;
-
-  ImageType::SizeType size;
-  size.Fill(100);
-  double thresh = 0.9;
-
-  // Preparing point set
-  PointSetType::Pointer ps = PointSetType::New();
-  PointType             p1, p2, p3, p4, p5;
-  ParamType             pd1(6), pd2(6), pd3(6), pd4(6), pd5(6);
-  itk::Point<double, 2> center;
-
-  p1[0] = 10;
-  p1[1] = 10;
-  p2[0] = 75;
-  p2[1] = 10;
-  p3[0] = 50;
-  p3[1] = 50;
-  p4[0] = 10;
-  p4[1] = 60;
-  p5[0] = 85;
-  p5[1] = 70;
-  center.Fill(50);
-
-  pd1[0] = 0.95;
-  pd1[1] = 0;
-  pd1[2] = 0;
-  pd1[3] = 5;
-  pd1[4] = 5;
-  pd1[5] = 0.001769;
-  pd2[0] = 0.98;
-  pd2[1] = 0;
-  pd2[2] = 0;
-  pd2[3] = -5;
-  pd2[4] = 5;
-  pd2[5] = -0.001769;
-  pd3[0] = 0.5;
-  pd3[1] = 0;
-  pd3[2] = 0;
-  pd3[3] = 0;
-  pd3[4] = 0;
-  pd3[5] = 0;
-  pd4[0] = 0.91;
-  pd4[1] = 0;
-  pd4[2] = 0;
-  pd4[3] = 5;
-  pd4[4] = -5;
-  pd4[5] = 0.001769;
-  pd5[0] = 0.91;
-  pd5[1] = 0;
-  pd5[2] = 0;
-  pd5[3] = -5;
-  pd5[4] = -5;
-  pd5[5] = -0.001769;
-
-  ps->SetPoint(0, p1);
-  ps->SetPointData(0, pd1);
-  ps->SetPoint(1, p2);
-  ps->SetPointData(1, pd2);
-  ps->SetPoint(2, p3);
-  ps->SetPointData(2, pd3);
-  ps->SetPoint(3, p4);
-  ps->SetPointData(3, pd4);
-  ps->SetPoint(4, p5);
-  ps->SetPointData(4, pd5);
-
-  TransformType::Pointer transform = TransformType::New();
-  transform->SetCenter(center);
-
-  // Instantiating object
-  FilterType::Pointer filter = FilterType::New();
-  filter->SetOutputSize(size);
-  filter->SetMetricThreshold(thresh);
-  filter->SetNumberOfPoints(5);
-  filter->SetPointSet(ps);
-  filter->SetTransform(transform);
-
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetInput(filter->GetOutput());
-  writer->SetFileName(outfname);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Registration/DisplacementField/test/otbNearestPointDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbNearestPointDisplacementFieldGenerator.cxx
deleted file mode 100644
index b6de1e79ab945896a66ffd7b1ccf2685351a0d6e..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/test/otbNearestPointDisplacementFieldGenerator.cxx
+++ /dev/null
@@ -1,98 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "itkPointSet.h"
-#include "otbVectorImage.h"
-#include "otbNearestPointDisplacementFieldGenerator.h"
-#include "otbImageFileWriter.h"
-
-int otbNearestPointDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  const char *       outfname = argv[1];
-  typedef double                                                              PixelType;
-  typedef otb::VectorImage<PixelType, Dimension>                              ImageType;
-  typedef itk::Array<double>                                                  ParamType;
-  typedef itk::PointSet<ParamType, Dimension>                                 PointSetType;
-  typedef PointSetType::PointType                                             PointType;
-  typedef otb::NearestPointDisplacementFieldGenerator<PointSetType, ImageType> FilterType;
-  typedef otb::ImageFileWriter<ImageType>                                     WriterType;
-
-  ImageType::SizeType size;
-  size.Fill(100);
-  double thresh = 0.9;
-
-  // Preparing point set
-  PointSetType::Pointer ps = PointSetType::New();
-  PointType             p1, p2, p3, p4, p5;
-  ParamType             pd1(3), pd2(3), pd3(3), pd4(3), pd5(3);
-
-  p1[0] = 10;
-  p1[1] = 10;
-  p2[0] = 75;
-  p2[1] = 10;
-  p3[0] = 50;
-  p3[1] = 50;
-  p4[0] = 10;
-  p4[1] = 60;
-  p5[0] = 85;
-  p5[1] = 70;
-
-  pd1[0] = 0.95;
-  pd1[1] = 10;
-  pd1[2] = -5;
-  pd2[0] = 0.98;
-  pd2[1] = 2;
-  pd2[2] = 5;
-  pd3[0] = 0.5;
-  pd3[1] = 20;
-  pd3[2] = -20;
-  pd4[0] = 0.91;
-  pd4[1] = 15;
-  pd4[2] = -5;
-  pd5[0] = 0.91;
-  pd5[1] = 5;
-  pd5[2] = 5;
-
-  ps->SetPoint(0, p1);
-  ps->SetPointData(0, pd1);
-  ps->SetPoint(1, p2);
-  ps->SetPointData(1, pd2);
-  ps->SetPoint(2, p3);
-  ps->SetPointData(2, pd3);
-  ps->SetPoint(3, p4);
-  ps->SetPointData(3, pd4);
-  ps->SetPoint(4, p5);
-  ps->SetPointData(4, pd5);
-
-  // Instantiating object
-  FilterType::Pointer filter = FilterType::New();
-  filter->SetOutputSize(size);
-  filter->SetMetricThreshold(thresh);
-  filter->SetPointSet(ps);
-
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetInput(filter->GetOutput());
-  writer->SetFileName(outfname);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Registration/DisplacementField/test/otbNearestTransformDisplacementFieldGenerator.cxx b/Modules/Registration/DisplacementField/test/otbNearestTransformDisplacementFieldGenerator.cxx
deleted file mode 100644
index abf2463501a6ac807d68850cdf9b8c0e6748a21f..0000000000000000000000000000000000000000
--- a/Modules/Registration/DisplacementField/test/otbNearestTransformDisplacementFieldGenerator.cxx
+++ /dev/null
@@ -1,121 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "itkMacro.h"
-#include "itkPointSet.h"
-#include "otbVectorImage.h"
-#include "otbNearestTransformDisplacementFieldGenerator.h"
-#include "otbImageFileWriter.h"
-#include "itkEuler2DTransform.h"
-
-int otbNearestTransformDisplacementFieldGenerator(int itkNotUsed(argc), char * argv[])
-{
-  const unsigned int Dimension = 2;
-  const char *       outfname = argv[1];
-  typedef double                                                                  PixelType;
-  typedef otb::VectorImage<PixelType, Dimension>                                  ImageType;
-  typedef itk::Array<double>                                                      ParamType;
-  typedef itk::PointSet<ParamType, Dimension>                                     PointSetType;
-  typedef PointSetType::PointType                                                 PointType;
-  typedef otb::NearestTransformDisplacementFieldGenerator<PointSetType, ImageType> FilterType;
-  typedef otb::ImageFileWriter<ImageType>                                         WriterType;
-  typedef itk::Euler2DTransform<double>                                           TransformType;
-
-  ImageType::SizeType size;
-  size.Fill(100);
-  double thresh = 0.9;
-
-  // Preparing point set
-  PointSetType::Pointer ps = PointSetType::New();
-  PointType             p1, p2, p3, p4, p5;
-  ParamType             pd1(6), pd2(6), pd3(6), pd4(6), pd5(6);
-  itk::Point<double, 2> center;
-
-  p1[0] = 10;
-  p1[1] = 10;
-  p2[0] = 75;
-  p2[1] = 10;
-  p3[0] = 50;
-  p3[1] = 50;
-  p4[0] = 10;
-  p4[1] = 60;
-  p5[0] = 85;
-  p5[1] = 70;
-  center.Fill(50);
-
-  pd1[0] = 0.95;
-  pd1[1] = 0;
-  pd1[2] = 0;
-  pd1[3] = 5;
-  pd1[4] = 5;
-  pd1[5] = 0.001769;
-  pd2[0] = 0.98;
-  pd2[1] = 0;
-  pd2[2] = 0;
-  pd2[3] = -5;
-  pd2[4] = 5;
-  pd2[5] = -0.001769;
-  pd3[0] = 0.5;
-  pd3[1] = 0;
-  pd3[2] = 0;
-  pd3[3] = 0;
-  pd3[4] = 0;
-  pd3[5] = 0;
-  pd4[0] = 0.91;
-  pd4[1] = 0;
-  pd4[2] = 0;
-  pd4[3] = 5;
-  pd4[4] = -5;
-  pd4[5] = 0.001769;
-  pd5[0] = 0.91;
-  pd5[1] = 0;
-  pd5[2] = 0;
-  pd5[3] = -5;
-  pd5[4] = -5;
-  pd5[5] = -0.001769;
-
-  ps->SetPoint(0, p1);
-  ps->SetPointData(0, pd1);
-  ps->SetPoint(1, p2);
-  ps->SetPointData(1, pd2);
-  ps->SetPoint(2, p3);
-  ps->SetPointData(2, pd3);
-  ps->SetPoint(3, p4);
-  ps->SetPointData(3, pd4);
-  ps->SetPoint(4, p5);
-  ps->SetPointData(4, pd5);
-
-  TransformType::Pointer transform = TransformType::New();
-  transform->SetCenter(center);
-
-  // Instantiating object
-  FilterType::Pointer filter = FilterType::New();
-  filter->SetOutputSize(size);
-  filter->SetMetricThreshold(thresh);
-  filter->SetPointSet(ps);
-  filter->SetTransform(transform);
-
-  WriterType::Pointer writer = WriterType::New();
-  writer->SetInput(filter->GetOutput());
-  writer->SetFileName(outfname);
-  writer->Update();
-
-  return EXIT_SUCCESS;
-}
diff --git a/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx b/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx
index 7e8df6ab358066e14723bad5b162ad9778b56751..2263ed97cee6e57e9401b288077f538329408093 100644
--- a/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx
+++ b/Modules/Registration/Stereo/test/otbMulti3DMapToDEMFilter.cxx
@@ -98,12 +98,10 @@ int otbMulti3DMapToDEMFilterEPSG(int argc, char* argv[])
   for(unsigned int i=0; i<mapSize; i++)
    {
     multiFilter->Set3DMapInput(i,mapReaderList->GetNthElement(i)->GetOutput());
-   // multiFilter->SetMapKeywordList(i,mapReaderList->GetNthElement(i)->GetOutput()->GetImageKeywordlist());
     multiFilter->SetMaskInput(i,maskReaderList->GetNthElement(i)->GetOutput());
    }
 
   //set output parameters
- // multiFilter->SetOutputParametersFrom3DMap();
  VectorImageType::IndexType start;
   start[0] =  atoi(argv[argc-9]);
   start[1] =  atoi(argv[argc-8]);
@@ -132,7 +130,6 @@ int otbMulti3DMapToDEMFilterEPSG(int argc, char* argv[])
   WriterType::Pointer writer = WriterType::New();
 
   multiFilter->SetNumberOfThreads(atoi(argv[argc-11]));
-  //multiFilter->Update();
 
   writer->SetInput(multiFilter->GetOutput());
 
@@ -141,153 +138,6 @@ int otbMulti3DMapToDEMFilterEPSG(int argc, char* argv[])
   writer->Update();
 
   return EXIT_SUCCESS;
-
-  /*
-  if (argc != 12)
-    {
-    std::cout << argv[0] <<
-    " <input filename> <output filename> <origin easting> <origin northing> <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>"
-              << std::endl;
-
-    return EXIT_FAILURE;
-    }
-
-  typedef otb::VectorImage<double, 2>                                               VectorImageType;
-  typedef otb::ImageFileReader<VectorImageType>                                     ReaderType;
-  typedef otb::ImageFileWriter<VectorImageType>                            WriterType;
-  typedef otb::UtmInverseProjection                                                 UtmMapProjectionType;
-  typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, UtmMapProjectionType> OrthoRectifFilterType;
-
-  //Allocate pointer
-  ReaderType::Pointer reader = ReaderType::New();
-  WriterType::Pointer writer = WriterType::New();
-
-  OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New();
-  UtmMapProjectionType::Pointer  utmMapProjection = UtmMapProjectionType::New();
-
-  // Set parameters ...
-  reader->SetFileName(argv[1]);
-  writer->SetFileName(argv[2]);
-
-  reader->GenerateOutputInformation();
-  std::cout << reader->GetOutput() << std::endl;
-
-  orthoRectifFilter->SetInput(reader->GetOutput());
-
-  VectorImageType::IndexType start;
-  start[0] = 0;
-  start[1] = 0;
-  orthoRectifFilter->SetOutputStartIndex(start);
-
-  VectorImageType::SizeType size;
-  size[0] = atoi(argv[5]);      // X size
-  size[1] = atoi(argv[6]);            //Y size
-  orthoRectifFilter->SetOutputSize(size);
-
-  VectorImageType::SpacingType spacing;
-  spacing[0] = atof(argv[7]);
-  spacing[1] = atof(argv[8]);
-  orthoRectifFilter->SetOutputSpacing(spacing);
-
-  VectorImageType::PointType origin;
-  origin[0] = strtod(argv[3], NULL);         //Origin easting
-  origin[1] = strtod(argv[4], NULL);         //Origin northing
-  orthoRectifFilter->SetOutputOrigin(origin);
-
-  utmMapProjection->SetZone(atoi(argv[9]));
-  utmMapProjection->SetHemisphere(argv[10][0]);
-  orthoRectifFilter->SetMapProjection(utmMapProjection);
-
-  // Deformation Field spacing
-  VectorImageType::SpacingType  gridSpacing;
-  gridSpacing[0] = atof(argv[11]);
-  gridSpacing[1] = -atof(argv[11]);
-  orthoRectifFilter->SetDeformationFieldSpacing(gridSpacing);
-
-  VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel());
-  no_data.Fill(0);
-  orthoRectifFilter->SetEdgePaddingValue(no_data);
-
-  writer->SetInput(orthoRectifFilter->GetOutput());
-  writer->SetNumberOfDivisionsTiledStreaming(4);
-  writer->Update();
-
-  return EXIT_SUCCESS; */
-
-
-
-
-  /*
-  if (argc != 12)
-    {
-    std::cout << argv[0] <<
-    " <input filename> <output filename> <origin easting> <origin northing> <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>"
-              << std::endl;
-
-    return EXIT_FAILURE;
-    }
-
-  typedef otb::VectorImage<double, 2>                                               VectorImageType;
-  typedef otb::ImageFileReader<VectorImageType>                                     ReaderType;
-  typedef otb::ImageFileWriter<VectorImageType>                            WriterType;
-  typedef otb::UtmInverseProjection                                                 UtmMapProjectionType;
-  typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, UtmMapProjectionType> OrthoRectifFilterType;
-
-  //Allocate pointer
-  ReaderType::Pointer reader = ReaderType::New();
-  WriterType::Pointer writer = WriterType::New();
-
-  OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New();
-  UtmMapProjectionType::Pointer  utmMapProjection = UtmMapProjectionType::New();
-
-  // Set parameters ...
-  reader->SetFileName(argv[1]);
-  writer->SetFileName(argv[2]);
-
-  reader->GenerateOutputInformation();
-  std::cout << reader->GetOutput() << std::endl;
-
-  orthoRectifFilter->SetInput(reader->GetOutput());
-
-  VectorImageType::IndexType start;
-  start[0] = 0;
-  start[1] = 0;
-  orthoRectifFilter->SetOutputStartIndex(start);
-
-  VectorImageType::SizeType size;
-  size[0] = atoi(argv[5]);      // X size
-  size[1] = atoi(argv[6]);            //Y size
-  orthoRectifFilter->SetOutputSize(size);
-
-  VectorImageType::SpacingType spacing;
-  spacing[0] = atof(argv[7]);
-  spacing[1] = atof(argv[8]);
-  orthoRectifFilter->SetOutputSpacing(spacing);
-
-  VectorImageType::PointType origin;
-  origin[0] = strtod(argv[3], NULL);         //Origin easting
-  origin[1] = strtod(argv[4], NULL);         //Origin northing
-  orthoRectifFilter->SetOutputOrigin(origin);
-
-  utmMapProjection->SetZone(atoi(argv[9]));
-  utmMapProjection->SetHemisphere(argv[10][0]);
-  orthoRectifFilter->SetMapProjection(utmMapProjection);
-
-  // Deformation Field spacing
-  VectorImageType::SpacingType  gridSpacing;
-  gridSpacing[0] = atof(argv[11]);
-  gridSpacing[1] = -atof(argv[11]);
-  orthoRectifFilter->SetDeformationFieldSpacing(gridSpacing);
-
-  VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel());
-  no_data.Fill(0);
-  orthoRectifFilter->SetEdgePaddingValue(no_data);
-
-  writer->SetInput(orthoRectifFilter->GetOutput());
-  writer->SetNumberOfDivisionsTiledStreaming(4);
-  writer->Update();
-
-  return EXIT_SUCCESS; */
 }
 
 int otbMulti3DMapToDEMFilterManual(int argc, char* argv[])
@@ -354,12 +204,10 @@ multiFilter->SetCellFusionMode(fusionMode);
 for(unsigned int i=0; i<mapSize; i++)
  {
   multiFilter->Set3DMapInput(i,mapReaderList->GetNthElement(i)->GetOutput());
- // multiFilter->SetMapKeywordList(i,mapReaderList->GetNthElement(i)->GetOutput()->GetImageKeywordlist());
   multiFilter->SetMaskInput(i,maskReaderList->GetNthElement(i)->GetOutput());
  }
 
 //set output parameters
-//multiFilter->SetOutputParametersFrom3DMap();
 VectorImageType::IndexType start;
 start[0] =  atoi(argv[argc-7]);
 start[1] =  atoi(argv[argc-8]);
@@ -385,7 +233,6 @@ multiFilter->SetOutputOrigin(origin);
 WriterType::Pointer writer = WriterType::New();
 
 multiFilter->SetNumberOfThreads(atoi(argv[argc-10]));
-//multiFilter->Update();
 
 writer->SetInput(multiFilter->GetOutput());
 
@@ -395,79 +242,6 @@ writer->Update();
 
 
 return EXIT_SUCCESS;
-
-/*
-if (argc != 12)
-  {
-  std::cout << argv[0] <<
-  " <input filename> <output filename> <origin easting> <origin northing> <x size> <y size> <x spacing> <y spacing> <UTM zone> <UTM hemisphere>"
-            << std::endl;
-
-  return EXIT_FAILURE;
-  }
-
-typedef otb::VectorImage<double, 2>                                               VectorImageType;
-typedef otb::ImageFileReader<VectorImageType>                                     ReaderType;
-typedef otb::ImageFileWriter<VectorImageType>                            WriterType;
-typedef otb::UtmInverseProjection                                                 UtmMapProjectionType;
-typedef otb::OrthoRectificationFilter<VectorImageType, VectorImageType, UtmMapProjectionType> OrthoRectifFilterType;
-
-//Allocate pointer
-ReaderType::Pointer reader = ReaderType::New();
-WriterType::Pointer writer = WriterType::New();
-
-OrthoRectifFilterType::Pointer orthoRectifFilter = OrthoRectifFilterType::New();
-UtmMapProjectionType::Pointer  utmMapProjection = UtmMapProjectionType::New();
-
-// Set parameters ...
-reader->SetFileName(argv[1]);
-writer->SetFileName(argv[2]);
-
-reader->GenerateOutputInformation();
-std::cout << reader->GetOutput() << std::endl;
-
-orthoRectifFilter->SetInput(reader->GetOutput());
-
-VectorImageType::IndexType start;
-start[0] = 0;
-start[1] = 0;
-orthoRectifFilter->SetOutputStartIndex(start);
-
-VectorImageType::SizeType size;
-size[0] = atoi(argv[5]);      // X size
-size[1] = atoi(argv[6]);            //Y size
-orthoRectifFilter->SetOutputSize(size);
-
-VectorImageType::SpacingType spacing;
-spacing[0] = atof(argv[7]);
-spacing[1] = atof(argv[8]);
-orthoRectifFilter->SetOutputSpacing(spacing);
-
-VectorImageType::PointType origin;
-origin[0] = strtod(argv[3], NULL);         //Origin easting
-origin[1] = strtod(argv[4], NULL);         //Origin northing
-orthoRectifFilter->SetOutputOrigin(origin);
-
-utmMapProjection->SetZone(atoi(argv[9]));
-utmMapProjection->SetHemisphere(argv[10][0]);
-orthoRectifFilter->SetMapProjection(utmMapProjection);
-
-// Deformation Field spacing
-VectorImageType::SpacingType  gridSpacing;
-gridSpacing[0] = atof(argv[11]);
-gridSpacing[1] = -atof(argv[11]);
-orthoRectifFilter->SetDeformationFieldSpacing(gridSpacing);
-
-VectorImageType::PixelType no_data(reader->GetOutput()->GetNumberOfComponentsPerPixel());
-no_data.Fill(0);
-orthoRectifFilter->SetEdgePaddingValue(no_data);
-
-writer->SetInput(orthoRectifFilter->GetOutput());
-writer->SetNumberOfDivisionsTiledStreaming(4);
-writer->Update();
-
-return EXIT_SUCCESS; */
-
 }
 
 
@@ -529,7 +303,7 @@ int otbMulti3DMapToDEMFilter(int argc, char* argv[])
   for(unsigned int i=0; i<mapSize; i++)
    {
     multiFilter->Set3DMapInput(i,mapReaderList->GetNthElement(i)->GetOutput());
-   // multiFilter->SetMapKeywordList(i,mapReaderList->GetNthElement(i)->GetOutput()->GetImageKeywordlist());
+
     multiFilter->SetMaskInput(i,maskReaderList->GetNthElement(i)->GetOutput());
    }
   multiFilter->SetOutputParametersFrom3DMap();
@@ -537,7 +311,6 @@ int otbMulti3DMapToDEMFilter(int argc, char* argv[])
   WriterType::Pointer writer = WriterType::New();
 
   multiFilter->SetNumberOfThreads(atoi(argv[argc-2]));
-  //multiFilter->Update();
 
   writer->SetInput(multiFilter->GetOutput());
 
diff --git a/Modules/Segmentation/Conversion/test/CMakeLists.txt b/Modules/Segmentation/Conversion/test/CMakeLists.txt
index 363687e5c3cd789d24cdeaa9b26b594e2f56513d..b704bd6275d83837200861e7448c820f89dda0ac 100644
--- a/Modules/Segmentation/Conversion/test/CMakeLists.txt
+++ b/Modules/Segmentation/Conversion/test/CMakeLists.txt
@@ -195,19 +195,11 @@ otb_add_test(NAME bfTvVectorDataRasterizeFilterSHP COMMAND otbConversionTestDriv
   #4 25 0.1 100
   #)
 
-otb_add_test(NAME obTvLabelMapToVectorDataFilter2 COMMAND otbConversionTestDriver
-  --compare-ogr ${NOTOL}
-  ${BASELINE_FILES}/obTvLabelMapToVectorDataFilter.shp
-  ${TEMP}/obTvLabelMapToVectorDataFilter2.shp
-  otbLabelMapToVectorDataFilter
-  ${INPUTDATA}/rcc8_mire5.png
-  ${TEMP}/obTvLabelMapToVectorDataFilter2.shp)
-
 otb_add_test(NAME obTvLabelMapToVectorDataFilter COMMAND otbConversionTestDriver
   --compare-ogr ${NOTOL}
   ${BASELINE_FILES}/obTvLabelMapToVectorDataFilter.shp
   ${TEMP}/obTvLabelMapToVectorDataFilter.shp
   otbLabelMapToVectorDataFilter
-  ${INPUTDATA}/rcc8_mire1.png
+  ${INPUTDATA}/labelImage_UnsignedChar.tif
   ${TEMP}/obTvLabelMapToVectorDataFilter.shp)
 
diff --git a/Modules/Segmentation/Metrics/test/CMakeLists.txt b/Modules/Segmentation/Metrics/test/CMakeLists.txt
index 1b286013d0ad582630ea14378ed22f38afca90aa..63f104f6ca630af3b11dd5fb2bc1333a70caad3c 100644
--- a/Modules/Segmentation/Metrics/test/CMakeLists.txt
+++ b/Modules/Segmentation/Metrics/test/CMakeLists.txt
@@ -47,8 +47,8 @@ otb_add_test(NAME obTvHooverMatrixFilter COMMAND otbMetricsTestDriver
   ${BASELINE_FILES}/obTvHooverMatrixFilter.txt
   ${TEMP}/obTvHooverMatrixFilter.txt
   otbHooverMatrixFilter
-  ${INPUTDATA}/Seg1InputForRCC8Graph.tif
-  ${INPUTDATA}/Seg2InputForRCC8Graph.tif
+  ${INPUTDATA}/labelImage_UnsignedChar.tif
+  ${INPUTDATA}/labelImage_UnsignedChar.tif
   ${TEMP}/obTvHooverMatrixFilter.txt
   )
 
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h
index 458213a22aa04a63a47064c59030aedf6441e07c..570c6cd0ea1e29a0c77b90fa3019ae9245204711 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbClosingOpeningMorphologicalFilter.h
@@ -39,8 +39,7 @@ namespace otb
  * of composition of the two basic morphological operation, the filtered details are dark
  * on a brighter background.
  *
- * \sa ClosingOpeningMorphologicalFilter,
- * MorphologicalPyramidAnalysisFilter
+ * \sa ClosingOpeningMorphologicalFilter
  *
  * \ingroup OTBMorphologicalProfiles
  */
diff --git a/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h b/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h
index df47e1bd469765126ecabfb15e4a2a15163bf1a0..3a329241c20a8bfa13ad8771b3edb46c6d9b4d73 100644
--- a/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h
+++ b/Modules/Segmentation/MorphologicalProfiles/include/otbOpeningClosingMorphologicalFilter.h
@@ -39,8 +39,7 @@ namespace otb
  * of composition of the two basic morphological operation, the filtered details are dark
  * on a brighter background.
  *
- * \sa ClosingOpeningMorphologicalFilter,
- * MorphologicalPyramidAnalyseFilter
+ * \sa ClosingOpeningMorphologicalFilter
  *
  * \ingroup OTBMorphologicalProfiles
  */
diff --git a/Modules/ThirdParty/OssimPlugins/src/ossim/ossimSarSensorModel.cpp b/Modules/ThirdParty/OssimPlugins/src/ossim/ossimSarSensorModel.cpp
index e57304fb7751a2ff0e330741cc179a2cb75c81d9..40aebcad27a6c1d6f3c9cbd86fee36a47b0b1c48 100644
--- a/Modules/ThirdParty/OssimPlugins/src/ossim/ossimSarSensorModel.cpp
+++ b/Modules/ThirdParty/OssimPlugins/src/ossim/ossimSarSensorModel.cpp
@@ -1058,29 +1058,39 @@ bool ossimSarSensorModel::worldToAzimuthRangeTime(const ossimGpt& worldPt, TimeT
 
       theAzimuthTimeOffset = count > 0 ? cumulAzimuthTime / count : DurationType(0);
 
-      // Then, fix the range time
-      count=0;
+      // Patch_locS1 : do not fix the range time
+      // This fix takes GCPs as inputs to calculate an offset in range dimension. 
+      // However for recent S1 products (after March 2017 with IPF >= 2.82), GCPs contain wrong values 
+      // for lat/lon coordinates => the range time offset is wrong and shift the localization.
+      // To avoid wrong offset, fixRangeTimeWithGCPs is always set to false
+      bool fixRangeTimeWithGCPs = false;
+
+      if (fixRangeTimeWithGCPs)
+	{
+	  // Then, fix the range time
+	  count=0;
 
-      for(std::vector<GCPRecordType>::const_iterator gcpIt = theGCPRecords.begin(); gcpIt!=theGCPRecords.end();++gcpIt)
-      {
-         ossimDpt estimatedImPt;
-         TimeType estimatedAzimuthTime;
-         double   estimatedRangeTime;
+	  for(std::vector<GCPRecordType>::const_iterator gcpIt = theGCPRecords.begin(); gcpIt!=theGCPRecords.end();++gcpIt)
+	  {
+	     ossimDpt estimatedImPt;
+	     TimeType estimatedAzimuthTime;
+	     double   estimatedRangeTime;
 
-         ossimEcefPoint sensorPos;
-         ossimEcefVector sensorVel;
+	     ossimEcefPoint sensorPos;
+	     ossimEcefVector sensorVel;
 
-         // Estimate times
-         const bool s1 = this->worldToAzimuthRangeTime(gcpIt->worldPt,estimatedAzimuthTime,estimatedRangeTime, sensorPos, sensorVel);
+	     // Estimate times
+	     const bool s1 = this->worldToAzimuthRangeTime(gcpIt->worldPt,estimatedAzimuthTime,estimatedRangeTime, sensorPos, sensorVel);
 
-         if(s1)
-         {
-            cumulRangeTime+=-estimatedRangeTime+gcpIt->slantRangeTime;
-            ++count;
-         }
-      }
+	     if(s1)
+	     {
+	        cumulRangeTime+=-estimatedRangeTime+gcpIt->slantRangeTime;
+	        ++count;
+	     }
+	  }
 
-      theRangeTimeOffset = count > 0 ? cumulRangeTime/count : 0;
+	  theRangeTimeOffset = count > 0 ? cumulRangeTime/count : 0;
+	}
    }
 
    void get(
@@ -1268,7 +1278,6 @@ bool ossimSarSensorModel::worldToAzimuthRangeTime(const ossimGpt& worldPt, TimeT
       for (std::size_t idx=0 ; idx!=nbCoords ; ++idx)
       {
          const int pos = s_printf(prefix_, "%s[%d].", sr_gr_prefix.c_str(), idx);
-         assert(pos >= sizeof(SR_PREFIX)+4 && pos < sizeof(prefix_));
          std::string prefix(prefix_, pos);
 
          ossimSarSensorModel::CoordinateConversionRecordType coordRecord;
@@ -1301,7 +1310,6 @@ bool ossimSarSensorModel::worldToAzimuthRangeTime(const ossimGpt& worldPt, TimeT
      for (std::size_t idx=0 ; idx!=conversionRecords.size() ; ++idx)
        {
        const int pos = s_printf(prefix_, "%s[%d].", sr_gr_prefix.c_str(), idx);
-       assert(pos >= sizeof(SR_PREFIX)+4 && pos < sizeof(prefix_));
        std::string prefix(prefix_, pos);
 
 
diff --git a/Modules/ThirdParty/OssimPlugins/src/ossim/ossimSentinel1Model.cpp b/Modules/ThirdParty/OssimPlugins/src/ossim/ossimSentinel1Model.cpp
index 8f428aacada11d02b5b9f4557d96f1c635d13eec..3832701fe39a34a17079a43d8ff1a38a85aa6877 100644
--- a/Modules/ThirdParty/OssimPlugins/src/ossim/ossimSentinel1Model.cpp
+++ b/Modules/ThirdParty/OssimPlugins/src/ossim/ossimSentinel1Model.cpp
@@ -1114,7 +1114,7 @@ namespace ossimplugins
       for(std::vector<ossimRefPtr<ossimXmlNode> >::iterator itNode = xnodes.begin(); itNode!=xnodes.end();++itNode, ++idx)
       {
          int pos = s_printf(prefix, "%s[%d].", sr_gr_prefix.c_str(), idx);
-         assert(pos >= sizeof(SR_PREFIX)+4 && pos < sizeof(prefix));
+         assert(pos >= SR_PREFIX.size()+4 && pos < sizeof(prefix));
 
          addMandatory(theProductKwl, prefix + keyAzimuthTime,**itNode, attAzimuthTime);
          addMandatory(theProductKwl, prefix + rg0_xpath,     **itNode, rg0_xpath);
@@ -1153,7 +1153,7 @@ namespace ossimplugins
       for(std::vector<ossimRefPtr<ossimXmlNode> >::iterator itNode = xnodes.begin(); itNode!=xnodes.end();++itNode,++idx)
       {
          int pos = s_printf(prefix, "%s[%d].", GCP_PREFIX.c_str(), idx);
-         assert(pos >= sizeof(SR_PREFIX)+4 && pos < 1024);
+         assert(pos >= GCP_PREFIX.size()+4 && pos < sizeof(prefix));
 #if defined(USE_BOOST_TIME)
          const TimeType azimuthTime = getTimeFromFirstNode(**itNode, attAzimuthTime);
          add(theProductKwl, prefix, attAzimuthTime, azimuthTime);
diff --git a/Modules/Visualization/Mapla/include/mvdMaplaMainWindow.h b/Modules/Visualization/Mapla/include/mvdMaplaMainWindow.h
index 133e9f76bca633ee3477f0278e7bd54c702c704b..8d3cf2e07d7c007a1e14927c0cde0739769d6af8 100644
--- a/Modules/Visualization/Mapla/include/mvdMaplaMainWindow.h
+++ b/Modules/Visualization/Mapla/include/mvdMaplaMainWindow.h
@@ -143,8 +143,7 @@ protected slots:
 
   /**
    */
-  void OnApplicationToLaunchSelected( const QString & name,
-                                      const QString & doc );
+  void OnApplicationToLaunchSelected( const QString & name );
 
   /**
    */
diff --git a/Modules/Visualization/Mapla/src/mvdMaplaMainWindow.cxx b/Modules/Visualization/Mapla/src/mvdMaplaMainWindow.cxx
index 8dea17a2341712d65d5b903259255db9ecfe2b5f..d4fba7efebd1ab03852d7d01d0aa731bd5b61308 100644
--- a/Modules/Visualization/Mapla/src/mvdMaplaMainWindow.cxx
+++ b/Modules/Visualization/Mapla/src/mvdMaplaMainWindow.cxx
@@ -153,10 +153,10 @@ MaplaMainWindow
 
   QObject::connect(
     m_ApplicationsToolBoxController->GetWidget(),
-    SIGNAL( ApplicationToLaunchSelected( const QString &, const QString & ) ),
+    SIGNAL( ApplicationToLaunchSelected( const QString & ) ),
     // to:
     this,
-    SLOT( OnApplicationToLaunchSelected(const QString &, const QString & ) )
+    SLOT( OnApplicationToLaunchSelected(const QString & ) )
   );
 
 #endif
@@ -215,8 +215,7 @@ MaplaMainWindow
 /*****************************************************************************/
 void
 MaplaMainWindow
-::OnApplicationToLaunchSelected( const QString & appName,
-				 const QString & )
+::OnApplicationToLaunchSelected( const QString & appName )
 {
 #ifdef OTB_USE_QT
 
diff --git a/Modules/Visualization/Monteverdi/include/mvdMainWindow.h b/Modules/Visualization/Monteverdi/include/mvdMainWindow.h
index e3341bf12f61862b9a76cba5a8b68ecb3d881fa5..87a8a5d7c74ef9dfa22fdc2a567e6aa2b0889b6c 100644
--- a/Modules/Visualization/Monteverdi/include/mvdMainWindow.h
+++ b/Modules/Visualization/Monteverdi/include/mvdMainWindow.h
@@ -221,7 +221,7 @@ protected slots:
   /**
    */
 #if defined( OTB_USE_QT ) && USE_OTB_APPS
-  void OnApplicationToLaunchSelected( const QString & appName, const QString & docName );
+  void OnApplicationToLaunchSelected( const QString & appName );
 #endif // defined( OTB_USE_QT ) && USE_OTB_APPS
 
   /** */
diff --git a/Modules/Visualization/Monteverdi/src/mvdMainWindow.cxx b/Modules/Visualization/Monteverdi/src/mvdMainWindow.cxx
index bc26e07f5895a108c5fe37dfa81407d5f3fd2190..9f0fe908368819f0479be97b75de93697d1bfdc2 100644
--- a/Modules/Visualization/Monteverdi/src/mvdMainWindow.cxx
+++ b/Modules/Visualization/Monteverdi/src/mvdMainWindow.cxx
@@ -1372,56 +1372,6 @@ MainWindow
 {
   assert( e!=NULL );
 
-  {
-    //
-    // List OTB-application widgets.
-    typedef QList< mvd::Wrapper::QtWidgetView * > QtWidgetViewList;
-
-    QtWidgetViewList c( findChildren< mvd::Wrapper::QtWidgetView * >() );
-
-    QStringList names;
-
-    //
-    // Find out which OTB-applications are running.
-    for( QtWidgetViewList::iterator it( c.begin() );
-	 it!=c.end();
-	 ++ it )
-      {
-      assert( *it );
-
-      if( !( *it )->IsClosable() )
-	{
-	assert( ( *it )->GetModel()->GetApplication() );
-
-	// qDebug() << "OTB-application:" << ( *it )->GetApplication()->GetDocName();
-
-	names.push_back( ( *it )->GetModel()->GetApplication()->GetDocName() );
-	}
-      }
-
-    //
-    // If some OTB-application is running, display warning, names and
-    // prevent to close.
-    if( !names.isEmpty() )
-      {
-      QMessageBox::warning(
-	this,
-	tr( "Warning!" ),
-	tr(
-	  PROJECT_NAME
-	  " cannot exit while some OTB-application is running!\n\n"
-	  "Please wait for following OTB-applicatio(s) to exit:\n- %1"
-	)
-	.arg( names.join( "\n- " ) )
-      );
-
-      e->ignore();
-
-      return;
-      }
-  }
-
-
   {
     assert( I18nCoreApplication::Instance()!=NULL );
     assert( I18nCoreApplication::Instance()->GetModel()==
@@ -1703,9 +1653,9 @@ MainWindow
   // # Step 2 : setup connections
   QObject::connect(
     appWidget,
-    SIGNAL( ApplicationToLaunchSelected(const QString &, const QString &) ),
+    &mvd::ApplicationsToolBox::ApplicationToLaunchSelected,
     this,
-    SLOT( OnApplicationToLaunchSelected(const QString &, const QString &) )
+    &mvd::MainWindow::OnApplicationToLaunchSelected
   );
 
   // # Step 3 : connect close slots
@@ -2174,8 +2124,7 @@ MainWindow
 
 void
 MainWindow
-::OnApplicationToLaunchSelected( const QString & appName,
-                                 const QString & /**docName*/ )
+::OnApplicationToLaunchSelected( const QString & appName )
 {
   assert( Application::ConstInstance()!=NULL );
   assert( Application::ConstInstance()->GetOTBApplicationsModel()!=NULL );
diff --git a/Modules/Visualization/MonteverdiCore/include/mvdApplicationsBrowser.h b/Modules/Visualization/MonteverdiCore/include/mvdApplicationsBrowser.h
index 05333bd3be94de4d1b56f1250595bbe071aa50f8..cf52e363b9dd479dcb19aba87d71826f5065b873 100644
--- a/Modules/Visualization/MonteverdiCore/include/mvdApplicationsBrowser.h
+++ b/Modules/Visualization/MonteverdiCore/include/mvdApplicationsBrowser.h
@@ -138,8 +138,7 @@ public slots:
 //
 // Signals.
 signals:
-  void AvailableApplicationsTagsChanged(const ApplicationsTagContainer &,
-                                        const ApplicationDocNameToNameMap &);
+  void AvailableApplicationsTagsChanged(const ApplicationsTagContainer &);
 
   /*-[ PROTECTED SECTION ]---------------------------------------------------*/
 
@@ -164,8 +163,6 @@ private:
 
   std::string m_AutoLoadPath;
 
-  ApplicationDocNameToNameMap m_DocNameToNameMap;
-
   /*-[ PRIVATE SLOTS SECTION ]-----------------------------------------------*/
 
 //
diff --git a/Modules/Visualization/MonteverdiCore/include/mvdTypes.h b/Modules/Visualization/MonteverdiCore/include/mvdTypes.h
index ceaaa467fc4e66e89e4af93e9a916e8ef9b9f039..e8241127f31a273139d23b3898dc294a1b46b838 100644
--- a/Modules/Visualization/MonteverdiCore/include/mvdTypes.h
+++ b/Modules/Visualization/MonteverdiCore/include/mvdTypes.h
@@ -234,10 +234,6 @@ struct PixelInfo
 /*******************************************************************************/
 /* Type definitions for wrapped applications                                   */
 
-/**
- */
-typedef std::map< std::string, std::string > ApplicationDocNameToNameMap;
-
 /**
  */
 typedef std::map< std::string, StringVector > ApplicationsTagContainer;
diff --git a/Modules/Visualization/MonteverdiCore/src/mvdApplicationsBrowser.cxx b/Modules/Visualization/MonteverdiCore/src/mvdApplicationsBrowser.cxx
index a52e15badb719402a695fa58dbff066a90294665..82ed1fa7b73a5a9ad4bdc19f3872f358101da382 100644
--- a/Modules/Visualization/MonteverdiCore/src/mvdApplicationsBrowser.cxx
+++ b/Modules/Visualization/MonteverdiCore/src/mvdApplicationsBrowser.cxx
@@ -143,10 +143,6 @@ ApplicationsBrowser
   // get tags
   StringVector vtags( application->GetDocTags() );
 
-  //
-  // fill the OTBApps 'docName <-> name' map
-  m_DocNameToNameMap[ application->GetDocName() ] = appName;
-
   return vtags;
 }
 
@@ -155,10 +151,6 @@ void
 ApplicationsBrowser
 ::SearchAvailableApplicationsTags()
 {
-  //
-  // clear previously filled map
-  m_DocNameToNameMap.clear();
-
   //
   // get all the applications in the search path
   StringVector vapp( GetAvailableApplications() );
@@ -216,7 +208,7 @@ ApplicationsBrowser
   //
   // emit a signal with the ApplicationsTagContainer as
   // parameter 
-  emit AvailableApplicationsTagsChanged(outputContainer, m_DocNameToNameMap);
+  emit AvailableApplicationsTagsChanged(outputContainer);
 }
 
 /*******************************************************************************/
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdApplicationLauncher.h b/Modules/Visualization/MonteverdiGui/include/mvdApplicationLauncher.h
index 378e76108c3abb7f40d031bf23bef5fd2f94fcb4..2d58061ed4eb36ab42cc460e65d639898badb32a 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdApplicationLauncher.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdApplicationLauncher.h
@@ -62,7 +62,7 @@ public:
 
   otb::Wrapper::Application::Pointer PrepareApplication(const QString& appName, bool isStandalone = false) const;
 
-  otb::Wrapper::QtMainWindow* NewOtbApplicationWindow(const QString& appName, bool isStandalone = false, QWidget* p = nullptr, Qt::WindowFlags = 0) const;
+  otb::Wrapper::QtMainWindow* NewOtbApplicationWindow(const QString& appName, bool isStandalone = false, QWidget* p = nullptr) const;
 };
 
 } // namespace mvd
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdApplicationsToolBox.h b/Modules/Visualization/MonteverdiGui/include/mvdApplicationsToolBox.h
index 3d666d6ed56a0072604b5054462698687170c7f5..736caf9a900d78d316476e5b017500e7bf817f63 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdApplicationsToolBox.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdApplicationsToolBox.h
@@ -109,8 +109,7 @@ public:
 //
 // Public SLOTS.
 public slots:
-  void OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer& appsTags,
-                                           const ApplicationDocNameToNameMap& docNameToNameMap);
+  void OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer& appsTags);
   void OnSearchBoxChanged( const QString & search );
   void OnAlgorithmTreeDoubleClick( QTreeWidgetItem * item , int column );
 
@@ -119,7 +118,7 @@ public slots:
 //
 // Signals.
 signals:
-  void ApplicationToLaunchSelected(const QString &, const QString &);
+  void ApplicationToLaunchSelected(const QString &);
 
   /*-[ PROTECTED SECTION ]---------------------------------------------------*/
 
@@ -153,12 +152,6 @@ private:
   bool IsSearchTextMatchAnyAlgorithm( const QString & tagName,
 				      const QString & search );
 
-  /**
-   * \brief Helper method to get the DocName of an application from an
-   * application name
-   */
-  QString GetApplicationDocNameByApplicationName( const QString & appName );
-
 
 //
 // Private attributes.
@@ -173,11 +166,6 @@ private:
    */
   ApplicationsTagContainer m_AppTags;
 
-  /**
-   * \brief map storing applications docName and appName association
-   */
-  ApplicationDocNameToNameMap m_AppsDocNameToNameMap;
-
   /**
    * \brief text to search in the widget tree
    */
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdPixelDescriptionWidget.h b/Modules/Visualization/MonteverdiGui/include/mvdPixelDescriptionWidget.h
index 1db4b7fd90b8d4ae6ad5a05a556f006fd669fdfa..71d68131811bd8a51d0bbc1f05c11ff579e02075 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdPixelDescriptionWidget.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdPixelDescriptionWidget.h
@@ -150,11 +150,6 @@ private:
   //  */
   // ApplicationsTagContainer m_AppTags;
 
-  // /**
-  //  * \brief map storing applications docName and appName association
-  //  */
-  // ApplicationDocNameToNameMap m_AppsDocNameToNameMap;
-
   /**
    * \brief text to search in the widget tree
    */
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h b/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
index 313f8f1537af75ef500d0bff91a93d1b94bd204f..c7143258d95e0c5b4f2e8e95c59c6ff9edfbaef8 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetParameterInitializers.h
@@ -49,12 +49,10 @@
 #include "otbWrapperQtWidgetInputFilenameListParameter.h"
 #include "otbWrapperQtWidgetInputImageParameter.h"
 #include "otbWrapperQtWidgetInputImageListParameter.h"
-#include "otbWrapperQtWidgetInputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetInputVectorDataParameter.h"
 #include "otbWrapperQtWidgetInputVectorDataListParameter.h"
 #include "otbWrapperQtWidgetOutputFilenameParameter.h"
 #include "otbWrapperQtWidgetOutputImageParameter.h"
-#include "otbWrapperQtWidgetOutputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetOutputVectorDataParameter.h"
 #include "otbWrapperQtWidgetParameterFactory.h"
 #include "otbWrapperQtWidgetListEditWidget.h"
@@ -90,7 +88,7 @@ namespace Wrapper
  */
 template< typename W >
 void
-SetupForFilenameDrop( W* widget, const char* text =NULL );
+SetupForFilenameDrop( W* widget );
 
 /**
  */
@@ -225,21 +223,6 @@ public:
   inline result_type operator () ( argument_type widget ) const;
 };
 
-/**
- * \class InputProcessXMLInitializer
- *
- * \ingroup OTBMonteverdiGUI
- *
- * \brief WIP.
- */
-class InputProcessXMLInitializer : public std::unary_function<
-  otb::Wrapper::QtWidgetInputProcessXMLParameter *,
-  void >
-{
-public:
-  inline result_type operator () ( argument_type widget ) const;
-};
-
 /**
  * \class OutputImageInitializer
  *
@@ -293,22 +276,6 @@ public:
   inline result_type operator () ( argument_type widget ) const;
 };
 
-/**
- * \class OutputProcessXMLInitializer
- *
- * \ingroup OTBMonteverdiGUI
- *
- * \brief WIP.
- */
-class OutputProcessXMLInitializer : public std::unary_function<
-  otb::Wrapper::QtWidgetOutputProcessXMLParameter *,
-  void
-  >
-{
-public:
-  inline result_type operator () ( argument_type widget ) const;
-};
-
 /**
  * \class ToolTipInitializer
  *
@@ -376,7 +343,7 @@ FileSelectionInitializer
 {
   assert( widget!=NULL );
 
-  SetupForFilenameDrop( widget, "You can drop filename here." );
+  SetupForFilenameDrop( widget );
 }
 
 /*****************************************************************************/
@@ -387,7 +354,7 @@ InputImageInitializer
 {
   assert( widget!=NULL );
 
-  SetupForFilenameDrop( widget, "You can drop filename here." );
+  SetupForFilenameDrop( widget );
 }
 
 /*****************************************************************************/
@@ -409,7 +376,7 @@ InputFilenameInitializer
 {
   assert( widget!=NULL );
 
-  SetupForFilenameDrop( widget, "You can drop filename here." );
+  SetupForFilenameDrop( widget );
 }
 
 /*****************************************************************************/
@@ -431,7 +398,7 @@ InputVectorDataInitializer
 {
   assert( widget!=NULL );
 
-  SetupForFilenameDrop( widget, "You can drop filename here." );
+  SetupForFilenameDrop( widget );
 }
 
 /*****************************************************************************/
@@ -445,17 +412,6 @@ InputVectorDataListInitializer
   // Drop support is done by ParameterListInitializer
 }
 
-/*****************************************************************************/
-inline
-InputProcessXMLInitializer::result_type
-InputProcessXMLInitializer
-::operator () ( argument_type widget ) const
-{
-  assert( widget!=NULL );
-
-  SetupForFilenameDrop( widget, "You can drop filename here." );
-}
-
 /*****************************************************************************/
 inline
 ToolTipInitializer::result_type
@@ -494,7 +450,7 @@ OutputImageInitializer
 
   if( m_Prefix.isEmpty() )
     {
-    SetupForFilenameDrop( widget, "You can drop filename here." );
+    SetupForFilenameDrop( widget );
 
     assert( qApp!=NULL );
     assert( !qApp->arguments().empty() );
@@ -518,7 +474,7 @@ OutputVectorDataInitializer
 {
   assert( widget!=NULL );
 
-  SetupForFilenameDrop( widget, "You can drop filename here." );
+  SetupForFilenameDrop( widget );
 
   assert( qApp!=NULL );
   assert( !qApp->arguments().empty() );
@@ -534,7 +490,7 @@ OutputFilenameInitializer
 {
   assert( widget!=NULL );
 
-  SetupForFilenameDrop( widget, "You can drop filename here." );
+  SetupForFilenameDrop( widget );
 
   assert( qApp!=NULL );
   assert( !qApp->arguments().empty() );
@@ -542,25 +498,6 @@ OutputFilenameInitializer
   SetupOutputFilename( widget );
 }
 
-/*****************************************************************************/
-inline
-OutputProcessXMLInitializer::result_type
-OutputProcessXMLInitializer
-::operator () ( argument_type widget ) const
-{
-  assert( widget!=NULL );
-
-  SetupForFilenameDrop( widget, "You can drop filename here." );
-
-  assert( qApp!=NULL );
-  assert( !qApp->arguments().empty() );
-
-  // MANTIS-1103
-  // {
-  // SetupOutputFilename( widget );
-  // }
-}
-
 /*****************************************************************************/
 inline
 ParameterListInitializer::result_type
@@ -592,7 +529,7 @@ ParameterListInitializer
 /*****************************************************************************/
 template< typename W >
 void
-SetupForFilenameDrop( W* widget, const char* text )
+SetupForFilenameDrop( W* widget )
 {
   assert( widget!=NULL );
 
@@ -602,15 +539,12 @@ SetupForFilenameDrop( W* widget, const char* text )
   // Setup widget.
   bool signalsBlocked = lineEdit->blockSignals( true );
   {
-  if( text!=NULL )
-    {
     lineEdit->setPlaceholderText(
       QCoreApplication::translate(
         "mvd::Wrapper::QtWidgetView",
-        text
+        "You can drop a file here"
       )
     );
-    }
 
   // lineEdit->setReadOnly( true );
 
diff --git a/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetView.h b/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetView.h
index 146c4c250d0682939f48d03327d329cde971f7e6..931a561b2d9c358e6e6ecea635bcde0d8d78dad5 100644
--- a/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetView.h
+++ b/Modules/Visualization/MonteverdiGui/include/mvdQtWidgetView.h
@@ -64,18 +64,10 @@ namespace Wrapper
 class OTBMonteverdiGUI_EXPORT QtWidgetView :
     public otb::Wrapper::QtWidgetView
 {
-  /*-[ QOBJECT SECTION ]-----------------------------------------------------*/
-
   Q_OBJECT
 
-  /*-[ PUBLIC SECTION ]------------------------------------------------------*/
-
-//
-// Public methods.
 public:
 
-  /**
-   */
   static char const * const OBJECT_NAME;
 
   /** \brief Constructor. */
@@ -86,30 +78,18 @@ public:
   /** \brief Destructor. */
   ~QtWidgetView() override;
 
-protected:
+  bool BeforeExecuteButtonClicked() override;
 
+protected:
   QWidget* CreateInputWidgets() override;
 
-protected slots:
-
-  /** extend the behaviour of base class OnExecButtonClicked */
-  void OnExecButtonClicked() override;
-
-  /** modify the behaviour of base class OnExceptionRaised
-   */
-  void OnExceptionRaised( QString what ) override;
-
 private:
 
   QtWidgetView(const QtWidgetView&) = delete;
   void operator=(const QtWidgetView&) = delete;
 
-  /**
-   */
   void SetupParameterWidgets( QWidget* widget );
 
-  /**
-   */
   void SetupFileSelectionWidget( QWidget * );
 
 private slots:
@@ -119,12 +99,8 @@ private slots:
   // image filename{s} set by the user in this OTB application (if any).
   void OnApplicationExecutionDone( int );
 
-  /**
-   */
   inline void OnFileSelectionWidgetAdded0( QWidget * );
 
-  /**
-   */
   inline void OnFileSelectionWidgetAdded1( QWidget * );
 };
 
@@ -132,16 +108,12 @@ private slots:
 
 } // end namespace 'mvd'
 
-/*****************************************************************************/
-/* INLINE SECTION                                                            */
-
 namespace mvd
 {
 
 namespace Wrapper
 {
 
-/*******************************************************************************/
 inline
 void
 QtWidgetView
@@ -150,7 +122,6 @@ QtWidgetView
   SetupFileSelectionWidget( widget );
 }
 
-/*******************************************************************************/
 inline
 void
 QtWidgetView
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdApplicationLauncher.cxx b/Modules/Visualization/MonteverdiGui/src/mvdApplicationLauncher.cxx
index 61a40b9e6996dbddaabc9c9b12d4121d54244da3..b3ef6b7baf8217938c4edebc1e13e0aa1b4b4d0a 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdApplicationLauncher.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdApplicationLauncher.cxx
@@ -179,12 +179,7 @@ ApplicationLauncher
 }
 
 
-otb::Wrapper::QtMainWindow*
-ApplicationLauncher
-::NewOtbApplicationWindow( const QString & appName,
-			   bool isStandalone,
-			   QWidget* parent,
-			   Qt::WindowFlags flags ) const
+otb::Wrapper::QtMainWindow* ApplicationLauncher ::NewOtbApplicationWindow(const QString& appName, bool isStandalone, QWidget* parent) const
 {
   // Setup the otb application
   auto otbApp = PrepareApplication(appName, isStandalone);
@@ -194,7 +189,7 @@ ApplicationLauncher
   gui->CreateGui();
 
   // Make the application window
-  auto window = new ::otb::Wrapper::QtMainWindow(otbApp, gui, parent, flags | Qt::Window);
+  auto window = new ::otb::Wrapper::QtMainWindow(otbApp, gui, parent);
 
   return window;
 }
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.cxx b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.cxx
index 24e6d71aadbae11277eddc76ce815ff09890e49d..d3b8403e563dcbe9f95c5db9f0686edb3c214ceb 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.cxx
@@ -59,7 +59,6 @@ namespace mvd
 enum COLUMN
 {
   COLUMN_NAME = 0,
-  COLUMN_TITLE,
   //
   COLUMN_COUNT,
 };
@@ -86,7 +85,6 @@ ApplicationsToolBox
   QWidget( p, flags ),
   m_UI( new mvd::Ui::ApplicationsToolBox() ),
   m_AppTags(),
-  m_AppsDocNameToNameMap(),
   m_SearchText()
 {
   m_UI->setupUi( this );
@@ -201,17 +199,10 @@ ApplicationsToolBox
 	// get current app name
 	QString  name( itApps->c_str() );
 
-	//  get current app DocName
-	QString title(
-	  GetApplicationDocNameByApplicationName( name )
-	);
-
 	assert( !name.isEmpty() );
-	assert( !title.isEmpty() );
 
-	// does the current algorithm DocName match the search text
+	// does the current algorithm name match the search text
 	if ( m_SearchText.isEmpty() ||
-	     title.contains( search, Qt::CaseInsensitive ) ||
 	     name.contains( search, Qt::CaseInsensitive ) )
 	  {
 	  // 
@@ -220,10 +211,6 @@ ApplicationsToolBox
 	    new QTreeWidgetItem( cmainItem, ITEM_TYPE_APPLICATION );
 
 	  secItem->setText( COLUMN_NAME, name );
-	  secItem->setText( COLUMN_TITLE, title );
-
-	  secItem->setToolTip( COLUMN_NAME, title );
-
 	  secItem->setIcon( COLUMN_NAME, QIcon( ":/icons/process" ) );
 	  }
 	}
@@ -234,7 +221,6 @@ ApplicationsToolBox
   m_UI->m_AlgorithmsTree->expandAll();
 
   m_UI->m_AlgorithmsTree->resizeColumnToContents( COLUMN_NAME );
-  m_UI->m_AlgorithmsTree->resizeColumnToContents( COLUMN_TITLE );
 }
 
 /*******************************************************************************/
@@ -258,11 +244,11 @@ ApplicationsToolBox
     {
     QString name( FromStdString( *itApps ) );
 
-    if( name.contains( search, Qt::CaseInsensitive ) ||
-	GetApplicationDocNameByApplicationName( name )
-	.contains( search, Qt::CaseInsensitive ) )
+    if( name.contains( search, Qt::CaseInsensitive ) )
+    {
       return true;
     }
+    }
 
   return false;
 }
@@ -274,36 +260,7 @@ ApplicationsToolBox
 {
   assert( !appName.isEmpty() );
 
-  emit ApplicationToLaunchSelected(
-    appName,
-    GetApplicationDocNameByApplicationName( appName )
-  );
-}
-
-/*******************************************************************************/
-QString
-ApplicationsToolBox
-::GetApplicationDocNameByApplicationName( const QString & appName )
-{
-  QString docName("");
-
-  // find the pair corresponding to the tagName
-  ApplicationDocNameToNameMap::const_iterator itDocNames = m_AppsDocNameToNameMap.begin();
-
-  while( itDocNames != m_AppsDocNameToNameMap.end() )
-    {
-    // retrieve the appName in the map
-    if ( appName == QString( (*itDocNames).second.c_str() ) )
-      {
-      //
-      // return the relative docName
-      return QString ( (*itDocNames).first.c_str() );
-      }
-
-    ++itDocNames;
-    }
-
-  return docName;
+  emit ApplicationToLaunchSelected(appName);
 }
 
 /*******************************************************************************/
@@ -311,15 +268,11 @@ ApplicationsToolBox
 /*******************************************************************************/
 void
 ApplicationsToolBox
-::OnAvailableApplicationsTagsChanged(const ApplicationsTagContainer& appsTags, 
-                                     const ApplicationDocNameToNameMap& docNameToNameMap)
+::OnAvailableApplicationsTagsChanged(const ApplicationsTagContainer& appsTags)
 {
   // rememeber the map
   m_AppTags = appsTags;
 
-  // remember the OTB applications  docName <-> Name association
-  m_AppsDocNameToNameMap = docNameToNameMap;
-
   // fill the tree with the application
   FillTreeUsingTags();  
 }
@@ -342,8 +295,6 @@ void
 ApplicationsToolBox
 ::OnAlgorithmTreeDoubleClick( QTreeWidgetItem * item , int column )
 {
-  // qDebug() << item << column;
-
   if( item->type()!=ITEM_TYPE_APPLICATION )
     return;
 
@@ -352,32 +303,6 @@ ApplicationsToolBox
   if( text.isEmpty() )
     return;
 
-  switch( column )
-    {
-    case COLUMN_NAME:
-      break;
-
-    case COLUMN_TITLE:
-      {
-      ApplicationDocNameToNameMap::const_iterator it(
-	m_AppsDocNameToNameMap.find(
-	  ToStdString( text )
-	)
-      );
-
-      assert( it!=m_AppsDocNameToNameMap.end() );
-
-      assert( it->second.empty() );
-
-      text = FromStdString( it->second );
-      }
-      break;
-
-    default:
-      assert( false && "Unexpected enum value." );
-      break;
-    }
-
   LaunchApplication( text );
 }
 
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.ui b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.ui
index bc95dd74053e246b3a655e546237932c72dda149..68b0c3a97e20efa884ca972b15732a977af89189 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.ui
+++ b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBox.ui
@@ -23,7 +23,16 @@
    <locale language="C" country="AnyCountry"/>
   </property>
   <layout class="QGridLayout" name="gridLayout">
-   <property name="margin">
+   <property name="leftMargin">
+    <number>3</number>
+   </property>
+   <property name="topMargin">
+    <number>3</number>
+   </property>
+   <property name="rightMargin">
+    <number>3</number>
+   </property>
+   <property name="bottomMargin">
     <number>3</number>
    </property>
    <property name="spacing">
@@ -40,6 +49,9 @@
      <property name="headerHidden">
       <bool>false</bool>
      </property>
+     <property name="columnCount">
+      <number>1</number>
+     </property>
      <attribute name="headerVisible">
       <bool>true</bool>
      </attribute>
@@ -51,11 +63,6 @@
        <string>Name</string>
       </property>
      </column>
-     <column>
-      <property name="text">
-       <string>Title</string>
-      </property>
-     </column>
     </widget>
    </item>
   </layout>
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBoxController.cxx b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBoxController.cxx
index 6d6e75e9742035ba3ff7c7d72a1893fc0f87e1b0..9cd449469a4498ad3eda0cbe7e81f2f03b1ac556 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBoxController.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdApplicationsToolBoxController.cxx
@@ -92,14 +92,10 @@ ApplicationsToolBoxController
   //
   // connections
   QObject::connect(
-    appModel->GetBrowser(), 
-    SIGNAL(
-      AvailableApplicationsTagsChanged( const ApplicationsTagContainer&, 
-                                        const ApplicationDocNameToNameMap& ) ),
+    appModel->GetBrowser(),
+    SIGNAL( AvailableApplicationsTagsChanged( const ApplicationsTagContainer&) ),
     widget,
-    SLOT(
-      OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer&, 
-                                          const ApplicationDocNameToNameMap& ) )
+    SLOT( OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer& ) )
   );
 }
 
@@ -121,14 +117,9 @@ ApplicationsToolBoxController
   // disconnect app browser
   QObject::disconnect(
     appModel->GetBrowser(),
-    SIGNAL(
-      AvailableApplicationsTagsChanged( const ApplicationsTagContainer&, 
-                                        const ApplicationDocNameToNameMap& ) ),
+    SIGNAL( AvailableApplicationsTagsChanged(const ApplicationsTagContainer&) ),
     widget,
-    SLOT(
-      OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer&, 
-                                          const ApplicationDocNameToNameMap& ) )
-    );
+    SLOT( OnAvailableApplicationsTagsChanged( const ApplicationsTagContainer& ) ));
 }
 
 /*******************************************************************************/
diff --git a/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx b/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
index 53c723bc811bc7fba33e89e8d032f9c74df110bc..77bdbd9dc6c5c519f1c85d06778739abdb555964 100644
--- a/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
+++ b/Modules/Visualization/MonteverdiGui/src/mvdQtWidgetView.cxx
@@ -116,13 +116,6 @@ char const * const
 QtWidgetView
 ::OBJECT_NAME = "mvd::Wrapper::QtWidgetView";
 
-/*****************************************************************************/
-/* STATIC IMPLEMENTATION SECTION                                             */
-
-
-/*****************************************************************************/
-/* CLASS IMPLEMENTATION SECTION                                              */
-/*****************************************************************************/
 QtWidgetView
 ::QtWidgetView( const otb::Wrapper::Application::Pointer & otbApp,
 		QWidget* p,
@@ -131,10 +124,6 @@ QtWidgetView
 {
   setObjectName( QtWidgetView::OBJECT_NAME );
 
-  m_IconPathDone = std::string("<img src=\":/icons/done\" width=\"16\" height=\"16\" />");
-  m_IconPathFailed = std::string("<img src=\":/icons/failed\" width=\"16\" height=\"16\" />");
-
-  //
   // need to be connected to the end of a process
   QObject::connect(
     GetModel(),
@@ -158,10 +147,7 @@ QtWidgetView
 {
   QWidget * widget = otb::Wrapper::QtWidgetView::CreateInputWidgets();
 
-  otb::Wrapper::QtWidgetParameterBase *paramWidget =
-    widget->findChild<otb::Wrapper::QtWidgetParameterBase*>();
-
-  SetupParameterWidgets(paramWidget);
+  SetupParameterWidgets(widget);
 
   return widget;
 }
@@ -177,7 +163,6 @@ QtWidgetView
   //SetupWidget( widget, InputFilenameListInitializer() );
   SetupWidget( widget, InputImageInitializer() );
   //SetupWidget( widget, InputImageListInitializer() );
-  SetupWidget( widget, InputProcessXMLInitializer() );
   SetupWidget( widget, InputVectorDataInitializer() );
   //SetupWidget( widget, InputVectorDataListInitializer() );
   SetupWidget( widget, ParameterListInitializer() );
@@ -186,7 +171,6 @@ QtWidgetView
 #endif
 
   SetupWidget( widget, OutputFilenameInitializer() );
-  SetupWidget( widget, OutputProcessXMLInitializer() );
 
   SetupWidget(
     widget,
@@ -211,197 +195,90 @@ QtWidgetView
   initialize( qobject_cast< FileSelectionInitializer::argument_type >( widget ) );
 }
 
-/*******************************************************************************/
-/* SLOTS                                                                       */
-/*******************************************************************************/
-void
-QtWidgetView
-::OnExecButtonClicked()
+bool QtWidgetView::BeforeExecuteButtonClicked()
 {
-  if ( !IsRunning() )
+  assert(GetModel() != NULL);
+  assert(GetModel()->GetApplication() != NULL);
+  assert(I18nCoreApplication::Instance() != NULL);
+
+  // Get layer-stack, if any
+  StackedLayerModel* layerStack = I18nCoreApplication::Instance()->GetModel<StackedLayerModel>();
+
+  otb::Wrapper::Application::Pointer otbApp(GetModel()->GetApplication());
+
+  // Check output parameters of OTB-application
+  StringVector paramKeys(otbApp->GetParametersKeys());
+  QStringList  filenames1;
+
+  KeyLayerAccumulator::KeyLayerPairList layers;
+
+  for (StringVector::const_iterator it(paramKeys.begin()); it != paramKeys.end(); ++it)
+  {
+    if (otbApp->IsParameterEnabled(*it, true) && otbApp->HasValue(*it))
     {
-    assert( GetModel()!=NULL );
-    assert( GetModel()->GetApplication()!=NULL );
-  
-  
-    assert( I18nCoreApplication::Instance()!=NULL );
-  
-    //
-    // Get layer-stack, if any.
-    StackedLayerModel * layerStack =
-      I18nCoreApplication::Instance()->GetModel< StackedLayerModel >();
-  
-    otb::Wrapper::Application::Pointer otbApp( GetModel()->GetApplication() );
-  
-    //
-    // Check output parameters of OTB-application.
-    StringVector paramKeys( otbApp->GetParametersKeys() );
-    QStringList filenames1;
-  
-    KeyLayerAccumulator::KeyLayerPairList layers;
-    QStringList filenames2;
-  
-    for( StringVector::const_iterator it( paramKeys.begin() );
-         it!=paramKeys.end();
-         ++it )
+      otb::Wrapper::Parameter::Pointer param(otbApp->GetParameterByKey(*it));
+      assert(!param.IsNull());
+
+      std::string filename;
+
+      switch (otbApp->GetParameterType(*it))
       {
-      if( otbApp->IsParameterEnabled( *it, true ) &&
-          otbApp->HasValue( *it ) )
-        {
-        otb::Wrapper::Parameter::Pointer param( otbApp->GetParameterByKey( *it ) );
-        assert( !param.IsNull() );
-  
-        // qDebug()
-        // 	<< it->c_str() << ": type" << otbApp->GetParameterType( *it );
-  
-        // const char* filename = NULL;
-        std::string filename;
-  
-        switch( otbApp->GetParameterType( *it ) )
-    {
-    case otb::Wrapper::ParameterType_OutputFilename:
-      filename =
-        otb::DynamicCast< otb::Wrapper::OutputFilenameParameter >( param )
-        ->GetValue();
-      break;
-    //
-    // FILENAME.
-    //
-    // IMAGE.
-    case otb::Wrapper::ParameterType_OutputImage:
-      filename =
-        otb::DynamicCast< otb::Wrapper::OutputImageParameter >( param )
-        ->GetFileName();
-      break;
-    //
-    // VECTOR-DATA.
-    case otb::Wrapper::ParameterType_OutputVectorData:
-      filename =
-        otb::DynamicCast< otb::Wrapper::OutputVectorDataParameter >( param )
-        ->GetFileName();
-      break;
-    //
-    // NONE.
-    default:
-      break;
+      case otb::Wrapper::ParameterType_OutputFilename:
+        filename = otb::DynamicCast<otb::Wrapper::OutputFilenameParameter>(param)->GetValue();
+        break;
+
+      case otb::Wrapper::ParameterType_OutputImage:
+        filename = otb::DynamicCast<otb::Wrapper::OutputImageParameter>(param)->GetFileName();
+        break;
+
+      case otb::Wrapper::ParameterType_OutputVectorData:
+        filename = otb::DynamicCast<otb::Wrapper::OutputVectorDataParameter>(param)->GetFileName();
+        break;
+
+      default:
+        break;
+      }
+
+      if (QFileInfo(filename.c_str()).exists())
+        filenames1.push_back(filename.c_str());
+
+      if (layerStack != NULL)
+      {
+        KeyLayerAccumulator accumulator(std::for_each(layerStack->Begin(), layerStack->End(), KeyLayerAccumulator(filename, layers)));
+      }
     }
-  
-        if( QFileInfo( filename.c_str() ).exists() )
-    filenames1.push_back( filename.c_str() );
-  
-        if( layerStack!=NULL )
+  }
+
+  {
+    QString message;
+
+    if (filenames1.size() == 1)
     {
-    KeyLayerAccumulator accumulator(
-      std::for_each(
-        layerStack->Begin(),
-        layerStack->End(), KeyLayerAccumulator( filename, layers )
-      )
-    );
-  
-    if( accumulator.GetCount()>0 )
-      filenames2.push_back( filename.c_str() );
+      message = tr("Are you sure you want to overwrite file '%1'?").arg(filenames1.front());
     }
-        }
-      }
-  
+    else if (filenames1.size() > 1)
     {
-    QString message;
-  
-    if( filenames1.size()==1 )
-      {
-      // qDebug()
-      //   << it->c_str() << ":" << QString( filename.c_str() );
-  
-      message =
-        tr( "Are you sure you want to overwrite file '%1'?" )
-        .arg( filenames1.front() );
-      }
-    else if( filenames1.size()>1 )
-      {
-      message =
-        tr( "Following files will be overwritten. Are you sure you want to continue?\n- %1" )
-        .arg( filenames1.join( "\n- " ) );
-      }
-  
-    if( !message.isEmpty() )
-      {
-      QMessageBox::StandardButton button =
-        QMessageBox::question(
-    this,
-    PROJECT_NAME,
-    message,
-    QMessageBox::Yes | QMessageBox::No,
-    QMessageBox::No
-        );
-  
-      if( button==QMessageBox::No )
-        return;
-      }
+      message = tr("Following files will be overwritten. Are you sure you want to continue?\n- %1").arg(filenames1.join("\n- "));
     }
-  
+
+    if (!message.isEmpty())
     {
-    QString message;
-  
-    if( filenames2.size()==1 )
-      {
-      // qDebug()
-      //   << it->c_str() << ":" << QString( filename.c_str() );
-  
-      message =
-        tr( "File '%1' is being viewed in " PROJECT_NAME " and will be concurrently overwritten by running this %2. File will be removed from layer-stack before running %2 and reloaded after.\n\nDo you want to continue?" )
-        .arg( filenames2.front() )
-        .arg( otbApp->GetDocName() );
-      }
-    else if( filenames2.size()>1 )
-      {
-      message =
-        tr( "Following files are being viewed in " PROJECT_NAME " and will be concurrently overwritter by running %2. Files will be removed from layer-stack before running %2. Do you want to continue?\n- %1" )
-        .arg( filenames2.join( "\n- " ) )
-        .arg( otbApp->GetDocName() );
-      }
-  
-    if( !message.isEmpty() )
-      {
-      QMessageBox::StandardButton button =
-        QMessageBox::question(
-    this,
-    PROJECT_NAME,
-    message,
-    QMessageBox::Yes | QMessageBox::No,
-    QMessageBox::No
-        );
-  
-      if( button==QMessageBox::No )
-        return;
-  
-      while( !layers.empty() )
-        {
-        layerStack->Delete( layers.front().first );
-  
-        layers.pop_front();
-        }
-      }
+      QMessageBox::StandardButton button = QMessageBox::question(this, PROJECT_NAME, message, QMessageBox::Yes | QMessageBox::No, QMessageBox::No);
+
+      if (button == QMessageBox::No)
+        return false;
     }
   }
 
-  otb::Wrapper::QtWidgetView::OnExecButtonClicked();
-}
+  // Delete from layer stack the images that will be overwritten and reloaded
+  while (!layers.empty())
+  {
+    layerStack->Delete(layers.front().first);
 
-/*******************************************************************************/
-void
-QtWidgetView
-::OnExceptionRaised( QString what  )
-{
-  qWarning() << what;
+    layers.pop_front();
+  }
 
-#if defined( OTB_DEBUG )
-  QMessageBox::warning(
-    this,
-    PROJECT_NAME,
-    what,
-    QMessageBox::Ok
-  );
-#endif
+  return true;
 }
 
 /*******************************************************************************/
@@ -429,18 +306,6 @@ QtWidgetView
     return;
     }
 
-  /*
-  // Removed as per MVDX-259.
-  QMessageBox::information(
-    this,
-    PROJECT_NAME,
-    tr( "'%1' has succeeded.\n"
-	"Result(s) will be imported as dataset(s).\n")
-    .arg( otbApp->GetName() ),
-    QMessageBox::Ok
-  );
-  */
-
   CountType count = 0;
 
   //
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
index 3baadd6f0f747b5f640b284fd3bd6a7aeab79254..738949669131df03fec89abd2318c0330a470fff 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
@@ -102,11 +102,8 @@ public:
   /** Check if the application has been initialized */
   bool IsInitialized() const;
 
-  virtual void SetHaveInXML(bool);
-  virtual bool GetHaveInXML() const;
-
-  virtual void SetHaveOutXML(bool);
-  virtual bool GetHaveOutXML() const;
+  void LoadParametersFromXML(const std::string& filename);
+  void SaveParametersToXML(const std::string& filename);
 
   /** Update the value of parameters for which no user value has been provided */
   void UpdateParameters();
@@ -210,12 +207,6 @@ public:
   /* Returns the description of a parameter */
   std::vector<std::string> GetChoiceNames(std::string paramKey);
 
-  /* Is the application ready to be executed : All the mandatory
-   * parameters have to be set
-   */
-  /* Set the Parameter value and Update the UserFlag. used by xml parameter
-   */
-
   /* Set an integer value
    *
    * Can be called for types :
@@ -652,10 +643,6 @@ public:
 
   std::string GetProgressDescription() const;
 
-  /** Doc element accessors. */
-  virtual void SetDocName(const std::string&);
-  virtual const char* GetDocName() const;
-
   virtual void SetDocLongDescription(const std::string&);
   virtual const char* GetDocLongDescription() const;
 
@@ -673,6 +660,9 @@ public:
 
   void AddDocTag(const std::string&);
 
+  /** return wether the application has the "deprecated tag or not */
+  bool IsDeprecated();
+
   DocExampleStructure::Pointer GetDocExample();
   unsigned int GetNumberOfExamples();
   std::string GetExampleComment(unsigned int id);
@@ -690,9 +680,6 @@ public:
   */
   std::vector< std::pair<std::string, std::string> > GetOutputParametersSumUp();
 
-   /** If need to force readxml more than once in application */
-  void ForceInXMLParseFlag();
-
   double GetLastExecutionTiming() const;
 
   virtual void SetDocLink(const std::string & link);
@@ -816,16 +803,6 @@ protected:
    * by default seed initialization is based on time value*/
    void AddRANDParameter(std::string paramKey, std::string paramName, unsigned int defaultValue);
 
-   void AddInXMLParameter()
-   {
-     GetParameterList()->AddInXMLParameter();
-   }
-
-   void AddOutXMLParameter()
-   {
-     GetParameterList()->AddOutXMLParameter();
-   }
-
   /** Remove the items added to the ListWidget */
   void ClearChoices(std::string key);
 
@@ -896,8 +873,6 @@ private:
 
   std::set<itk::ProcessObject::Pointer> m_Filters;
 
-  /** Long name of the application (that can be displayed...) */
-  std::string m_DocName;
   /** Long and precise application description . */
   std::string                       m_DocLongDescription;
   /** Doc example structure. Use GetDocExample() to access it */
@@ -916,11 +891,6 @@ private:
   /** Chrono to measure execution time */
   otb::Stopwatch m_Chrono;
 
-  //rashad:: controls adding of -xml parameter. set to true by default
-  bool                              m_HaveInXML;
-  bool                              m_HaveOutXML;
-  bool                              m_IsInXMLParsed;
-
   /** Flag is true when executing DoInit, DoUpdateParameters or DoExecute */
   bool m_IsInPrivateDo;
 
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h
deleted file mode 100644
index d4db58283c9294ef3b7dc1de2d841134f539823a..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputProcessXMLParameter.h
+++ /dev/null
@@ -1,120 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbWrapperInputProcessXMLParameter_h
-#define otbWrapperInputProcessXMLParameter_h
-#include "otbWrapperApplication.h"
-#include "otb_tinyxml.h"
-#include <sstream>
-#include <string>
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class InputProcessXMLParameter
- *  \brief This class represent a xml filename parameter for the wrapper framework to load otb application.
- *
- * \ingroup OTBApplicationEngine
- */
-class OTBApplicationEngine_EXPORT InputProcessXMLParameter
-  : public Parameter
-{
-public:
-  /** Standard class typedef */
-  typedef InputProcessXMLParameter      Self;
-  typedef Parameter                     Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-  /** Defining ::New() static method */
-  itkNewMacro(Self);
-
-  /** RTTI support */
-  itkTypeMacro(InputProcessXMLParameter, Parameter);
-
-  itkGetStringMacro(FileName);
-
-  bool HasValue() const override
-  {
-    if(m_FileName.empty())
-      return false;
-    else
-      return true;
-  }
-
-  virtual ParameterType GetType() const override
-  {
-    return ParameterType_InputProcessXML;
-  }
-
-  std::string ToString() const override
-  {
-    return GetFileName();
-  }
-
-  void FromString(const std::string& value) override
-  {
-    SetFileName(value);
-  }
-
-  // Get Value
-  //TODO otbGetObjectMemberMacro(StringParam, Value , std::string);
-
-  bool SetFileName(std::string value);
-
-  // Set Value
-  virtual void SetValue(const std::string value);
-
-  ImagePixelType GetPixelTypeFromString(std::string pixTypeAsString);
-
-  ParameterType GetParameterType(const Parameter* param) const;
-
-  const std::string GetChildNodeTextOf(TiXmlElement *parentElement, std::string key);
-
-  int Read(Application::Pointer application);
-
-  void otbAppLogInfo(Application::Pointer app, std::string info);
-
-/* copied from Utilities/tinyXMLlib/tinyxml.cpp. Must have a FIX inside tinyxml.cpp */
-  FILE* TiXmlFOpen( const char* filename, const char* mode );
-
-protected:
-
-  InputProcessXMLParameter();
-
-  /** Destructor */
-  ~InputProcessXMLParameter() override;
-
-private:
-
-  std::string    m_FileName;
-
-  InputProcessXMLParameter(const InputProcessXMLParameter &) = delete;
-  void operator =(const InputProcessXMLParameter&) = delete;
-
-
-}; // End class Parameter
-
-} // End namespace Wrapper
-} // End namespace otb
-
-#endif
diff --git a/Modules/OBIA/RCC8/include/otbRCC8Value.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputXML.h
similarity index 54%
rename from Modules/OBIA/RCC8/include/otbRCC8Value.h
rename to Modules/Wrappers/ApplicationEngine/include/otbWrapperInputXML.h
index 24bc9c96c1039c35daae218c76ebe8fe233ffee6..ab33810d116f884b4a9b6f9d929df7fe2c4d5cf1 100644
--- a/Modules/OBIA/RCC8/include/otbRCC8Value.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperInputXML.h
@@ -18,23 +18,30 @@
  * limitations under the License.
  */
 
-#ifndef otbRCC8Value_h
-#define otbRCC8Value_h
+#ifndef otbWrapperInputXML_h
+#define otbWrapperInputXML_h
+
+#include "otbWrapperApplication.h"
+#include "otb_tinyxml.h"
+#include <sstream>
+#include <string>
 
 namespace otb
 {
-// Coding enum system to represent the RCC8 relation values.
-typedef enum
-  {
-  OTB_RCC8_DC,
-  OTB_RCC8_EC,
-  OTB_RCC8_PO,
-  OTB_RCC8_TPP,
-  OTB_RCC8_TPPI,
-  OTB_RCC8_NTPP,
-  OTB_RCC8_NTPPI,
-  OTB_RCC8_EQ
-  }
-RCC8Value;
+namespace Wrapper
+{
+namespace XML
+{
+
+OTBApplicationEngine_EXPORT const std::string GetChildNodeTextOf(TiXmlElement* parentElement, std::string key);
+
+OTBApplicationEngine_EXPORT int Read(const std::string& filename, Application::Pointer application);
+
+/* copied from Utilities/tinyXMLlib/tinyxml.cpp. Must have a FIX inside tinyxml.cpp */
+OTBApplicationEngine_EXPORT FILE* TiXmlFOpen(const char* filename, const char* mode);
+
+} // namespace XML
+} // End namespace Wrapper
 } // End namespace otb
+
 #endif
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h
deleted file mode 100644
index 5b19add53105b36ef412e459231f76179d7c4396..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputProcessXMLParameter.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbWrapperOutputProcessXMLParameter_h
-#define otbWrapperOutputProcessXMLParameter_h
-#include "otbWrapperApplication.h"
-#include "otb_tinyxml.h"
-#include <string>
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class OutputProcessXMLParameter
- *  \brief This class represent a xml filename parameter for the wrapper framework to save otb application.
- *
- * \ingroup OTBApplicationEngine
- */
-class OTBApplicationEngine_EXPORT OutputProcessXMLParameter
-  : public Parameter
-{
-public:
-  /** Standard class typedef */
-  typedef OutputProcessXMLParameter     Self;
-  typedef Parameter                     Superclass;
-  typedef itk::SmartPointer<Self>       Pointer;
-  typedef itk::SmartPointer<const Self> ConstPointer;
-
-  /** Defining ::New() static method */
-  itkNewMacro(Self);
-
-  /** RTTI support */
-  itkTypeMacro(OutputProcessXMLParameter, Parameter);
-
-  itkGetStringMacro(FileName);
-
-  // Set FileName
-  void SetFileName(std::string value)
-  {
-    this->SetValue(value);
-  }
-
-  // Set Value
-  virtual void SetValue(const std::string value)
-    {
-    itkDebugMacro("setting member m_FileName to " << value);
-    this->m_FileName = value;
-    SetActive(true);
-    this->Modified();
-    }
-
-  bool HasValue() const override
-  {
-    if(m_FileName.empty())
-      return false;
-    else
-      return true;
-  }
-
-  void ClearValue() override
-  {
-    m_FileName = "";
-  }
-
-  virtual ParameterType GetType() const override
-  {
-    return ParameterType_OutputProcessXML;
-  }
-
-  std::string ToString() const override
-  {
-    return GetFileName();
-  }
-
-  void FromString(const std::string& value) override
-  {
-    SetValue(value);
-  }
-
-  TiXmlElement* AddChildNodeTo(TiXmlElement* parent, std::string name, std::string value="");
-
-  std::string pixelTypeToString(ImagePixelType pixType);
-
-  ParameterType GetParameterType(const Parameter* param) const;
-
-  void Write(Application::Pointer application);
-
-  TiXmlElement* ParseApplication(Application::Pointer app);
-
-protected:
-
-  OutputProcessXMLParameter();
-
-  /** Destructor */
-  ~OutputProcessXMLParameter() override;
-
-private:
-
-  /** Recursive function to parse a group parameter */
-  void ParseGroup(const std::string& group);
-
-  std::string    m_FileName;
-
-  /** Temporary storage of the XML node to fill (internal) */
-  TiXmlElement* m_Node;
-
-  /** Temporary pointer to the application to parse (internal) */
-  Application::Pointer m_Appli;
-
-  OutputProcessXMLParameter(const OutputProcessXMLParameter &) = delete;
-  void operator =(const OutputProcessXMLParameter&) = delete;
-
-
-}; // End class Parameter
-
-} // End namespace Wrapper
-} // End namespace otb
-
-#endif
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputXML.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputXML.h
new file mode 100644
index 0000000000000000000000000000000000000000..31e666b264690d9341251436007f783b980d827c
--- /dev/null
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputXML.h
@@ -0,0 +1,52 @@
+/*
+ * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
+ *
+ * This file is part of Orfeo Toolbox
+ *
+ *     https://www.orfeo-toolbox.org/
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef otbWrapperOutputXML_h
+#define otbWrapperOutputXML_h
+
+#include "otbWrapperApplication.h"
+#include "otb_tinyxml.h"
+#include <string>
+
+namespace otb
+{
+namespace Wrapper
+{
+namespace XML
+{
+
+OTBApplicationEngine_EXPORT TiXmlElement* AddChildNodeTo(TiXmlElement* parent, std::string name, std::string value = "");
+
+OTBApplicationEngine_EXPORT std::string pixelTypeToString(ImagePixelType pixType);
+
+OTBApplicationEngine_EXPORT void Write(const std::string& filename, Application::Pointer application);
+
+OTBApplicationEngine_EXPORT TiXmlElement* ParseApplication(Application::Pointer app);
+
+OTBApplicationEngine_EXPORT std::string MakeCommandLine(otb::Wrapper::Application::Pointer application);
+
+/** Recursive function to parse a group parameter */
+OTBApplicationEngine_EXPORT void ParseGroup(Application::Pointer app, TiXmlElement* n_App, const std::string& group);
+
+} // namespace XML
+} // End namespace Wrapper
+} // End namespace otb
+
+#endif
diff --git a/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h b/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
index 5883ea352d279f495da859f7d40968df3d6f6f5c..53f4b5fac1784bd2a1bec6f9f046b0cbec0e5812 100644
--- a/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
+++ b/Modules/Wrappers/ApplicationEngine/include/otbWrapperParameterGroup.h
@@ -73,11 +73,6 @@ public:
 
   Parameter::Pointer GetParameterByKey(std::string name, bool follow=true);
 
-  /** rashad: Add xml parameters eg: -inxml -outxml */
-  void AddInXMLParameter();
-
-  void AddOutXMLParameter();
-
   void Clear()
   {
     m_ParameterList.clear();
diff --git a/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt b/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
index fb220c564fbe628d9e9469f6f3f438352caa6454..a3f78c16fe606361e4fe0005840d65d320ce2a89 100644
--- a/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
+++ b/Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
@@ -23,7 +23,8 @@ set( OTBApplicationEngine_SRC
   otbWrapperInputVectorDataListParameter.cxx
   otbWrapperListViewParameter.cxx
   otbWrapperParameterGroup.cxx
-  otbWrapperOutputProcessXMLParameter.cxx
+  otbWrapperInputXML.cxx
+  otbWrapperOutputXML.cxx
   otbWrapperInputImageListParameter.cxx
   otbWrapperElevationParametersHandler.cxx
   otbWrapperInputFilenameListParameter.cxx
@@ -44,7 +45,6 @@ set( OTBApplicationEngine_SRC
   otbWrapperDocExampleStructure.cxx
   otbWrapperInputVectorDataParameter.cxx
   otbWrapperOutputVectorDataParameter.cxx
-  otbWrapperInputProcessXMLParameter.cxx
   otbWrapperMapProjectionParametersHandler.cxx
   otbWrapperApplication.cxx
   otbWrapperChoiceParameter.cxx
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
index 4297ae946d62476a88847a9974cd5aff72526fb3..0e2127a04f912a0d69c933918d9f3b67edecf6d1 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
@@ -25,14 +25,14 @@
 #include "otbWrapperInputFilenameParameter.h"
 #include "otbWrapperInputFilenameListParameter.h"
 #include "otbWrapperOutputFilenameParameter.h"
-#include "otbWrapperOutputProcessXMLParameter.h"
 #include "otbWrapperInputVectorDataParameter.h"
 #include "otbWrapperInputVectorDataListParameter.h"
 #include "otbWrapperOutputVectorDataParameter.h"
 #include "otbWrapperNumericalParameter.h"
 #include "otbWrapperStringListParameter.h"
 #include "otbWrapperInputImageListParameter.h"
-#include "otbWrapperInputProcessXMLParameter.h"
+#include "otbWrapperInputXML.h"
+#include "otbWrapperOutputXML.h"
 #include "otbWrapperProxyParameter.h"
 #include "otbWrapperParameterKey.h"
 #include "otbWrapperBoolParameter.h"
@@ -169,39 +169,6 @@ const char* Application::GetDescription() const
   return m_Description.c_str();
 }
 
-void Application::SetHaveInXML(bool haveInXML)
-{
-  m_HaveInXML = haveInXML;
-  this->Modified();
-}
-
-bool Application::GetHaveInXML() const
-{
-  return m_HaveInXML;
-}
-
-void Application::SetHaveOutXML(bool haveOutXML)
-{
-  m_HaveOutXML = haveOutXML;
-  this->Modified();
-}
-
-bool Application::GetHaveOutXML() const
-{
-  return m_HaveOutXML;
-}
-
-void Application::SetDocName(const std::string& value)
-{
-  m_DocName = value;
-  this->Modified();
-}
-
-const char* Application::GetDocName() const
-{
-  return m_DocName.c_str();
-}
-
 void Application::SetDocLongDescription(const std::string& value)
 {
   m_DocLongDescription = value;
@@ -267,6 +234,11 @@ void Application::AddDocTag(const std::string & tag)
     }
 }
 
+bool Application::IsDeprecated()
+{
+  return std::find(m_DocTags.begin(), m_DocTags.end(), Tags::Deprecated) != m_DocTags.end();
+}
+
 DocExampleStructure::Pointer Application::GetDocExample()
 {
   if (!IsInitialized())
@@ -331,11 +303,6 @@ std::string Application::GetHtmlExample()
   return GetDocExample()->GenerateHtmlExample();
 }
 
-void Application::ForceInXMLParseFlag()
-{
-  m_IsInXMLParsed = false;
-}
-
 void Application::SetDocLink(const std::string & link)
 {
   if (m_Doclink.compare(link) != 0)
@@ -361,16 +328,12 @@ Application::Application()
     m_Description(""),
     m_Logger(otb::Logger::New()),
     m_ProgressSourceDescription(""),
-    m_DocName(""),
     m_DocLongDescription(""),
     m_DocAuthors(""),
     m_DocLimitations(""),
     m_DocSeeAlso(""),
     m_DocTags(),
     m_Doclink(""),
-    m_HaveInXML(true),
-    m_HaveOutXML(true),
-    m_IsInXMLParsed(false),
     m_IsInPrivateDo(false)
 {
   // Don't call Init from the constructor, since it calls a virtual method !
@@ -473,21 +436,9 @@ void Application::Init()
 {
   m_DocExample    = DocExampleStructure::New();
   m_ParameterList = ParameterGroup::New();
-  //reset inXML parse checker in case if reinit-ing
-  m_IsInXMLParsed = false;
   m_IsInPrivateDo = true;
   this->DoInit();
   m_IsInPrivateDo = false;
-
-  //rashad: global parameters. now used only for inxml and outxml
-  if(this->GetHaveInXML())
-    {
-    AddInXMLParameter();
-    }
-  if(this->GetHaveOutXML())
-    {
-    AddOutXMLParameter();
-    }
 }
 
 template <typename T>
@@ -501,25 +452,18 @@ T* downcast_check(Parameter* param)
   return down;
 }
 
+void Application::LoadParametersFromXML(const std::string& filename)
+{
+  otb::Wrapper::XML::Read(filename, this);
+}
+
+void Application::SaveParametersToXML(const std::string& filename)
+{
+  otb::Wrapper::XML::Write(filename, this);
+}
+
 void Application::UpdateParameters()
 {
-  //read application from xml only once m_IsInXMLParsed is in charge of it.
-  std::string inXMLKey = "inxml";
-  if (m_HaveInXML && !m_IsInXMLParsed)
-    {
-    if ( GetParameterType(inXMLKey) == ParameterType_InputProcessXML  &&
-         IsParameterEnabled(inXMLKey) && HasValue(inXMLKey) )
-      {
-      Parameter* param = GetParameterByKey(inXMLKey);
-      InputProcessXMLParameter* inXMLParam = dynamic_cast<InputProcessXMLParameter*>(param);
-      if(inXMLParam!=nullptr)
-        {
-        // switch on 'm_IsInXMLParsed' before Read() to avoid cyclic calls
-        m_IsInXMLParsed = true;
-        inXMLParam->Read(this);
-        }
-      }
-    }
   m_IsInPrivateDo = true;
   this->DoUpdateParameters();
   m_IsInPrivateDo = false;
@@ -858,17 +802,6 @@ int Application::ExecuteAndWriteOutput()
             outputParam->Write();
             }
           }
-        //xml writer parameter
-        else if (m_HaveOutXML && GetParameterType(key) == ParameterType_OutputProcessXML
-                 && IsParameterEnabled(key) && HasValue(key) )
-          {
-          Parameter* param = GetParameterByKey(key);
-          OutputProcessXMLParameter* outXMLParam = dynamic_cast<OutputProcessXMLParameter*>(param);
-          if(outXMLParam!=nullptr)
-            {
-            outXMLParam->Write(this);
-            }
-          }
         }
     }
 
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputXML.cxx
similarity index 64%
rename from Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx
rename to Modules/Wrappers/ApplicationEngine/src/otbWrapperInputXML.cxx
index 44b76c6540c673a1680f9612973cd028a8220aef..47da2827ba952865020038f75873b5a0e1b8dae2 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputProcessXMLParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperInputXML.cxx
@@ -18,7 +18,7 @@
  * limitations under the License.
  */
 
-#include "otbWrapperInputProcessXMLParameter.h"
+#include "otbWrapperInputXML.h"
 
 #include "otbWrapperChoiceParameter.h"
 #include "otbWrapperListViewParameter.h"
@@ -41,51 +41,10 @@ namespace otb
 {
 namespace Wrapper
 {
-InputProcessXMLParameter::InputProcessXMLParameter()
+namespace XML
 {
-  this->SetKey("inxml");
-  this->SetName("Load parameters from XML");
-  this->SetDescription("Load application parameters from an XML file.");
-  this->SetMandatory(false);
-  this->SetActive(false);
-  this->SetRole(Role_Input);
-}
-
-InputProcessXMLParameter::~InputProcessXMLParameter()
-{
-
-}
-
-bool
-InputProcessXMLParameter::SetFileName(std::string value)
-{
-  // Check if the filename is not empty
-  if(!value.empty())
-    {
-    // Check that the right extension is given : expected .xml
-    if (itksys::SystemTools::GetFilenameLastExtension(value) == ".xml")
-      {
-      if (itksys::SystemTools::FileExists(value,true))
-        {
-        this->SetValue(value);
-        return true;
-        }
-      }
-    }
-  return false;
-}
-
-void
-InputProcessXMLParameter::SetValue(const std::string value)
-{
-  itkDebugMacro("setting member m_FileName to " << value);
-  this->m_FileName = value;
-  SetActive(true);
-  this->Modified();
-}
 
-ImagePixelType
-InputProcessXMLParameter::GetPixelTypeFromString(std::string strType)
+ImagePixelType GetPixelTypeFromString(std::string strType)
 {
   if(strType == "uint8")
     {
@@ -124,29 +83,7 @@ InputProcessXMLParameter::GetPixelTypeFromString(std::string strType)
     }
 }
 
-void
-InputProcessXMLParameter::otbAppLogInfo(Application::Pointer app, std::string info)
-{
-  app->GetLogger()->Write(itk::LoggerBase::INFO, info );
-}
-
-/* copied from Utilities/tinyXMLlib/tinyxml.cpp. Must have a FIX inside tinyxml.cpp */
-FILE*
-InputProcessXMLParameter::TiXmlFOpen( const char* filename, const char* mode )
-{
-#if defined(_MSC_VER) && (_MSC_VER >= 1400 )
-  FILE* fp = 0;
-  errno_t err = fopen_s( &fp, filename, mode );
-  if ( !err && fp )
-    return fp;
-  return 0;
-  #else
-  return fopen( filename, mode );
-  #endif
-}
-
-const std::string
-InputProcessXMLParameter::GetChildNodeTextOf(TiXmlElement *parentElement, std::string key)
+const std::string GetChildNodeTextOf(TiXmlElement* parentElement, std::string key)
 {
   std::string value="";
 
@@ -174,22 +111,15 @@ InputProcessXMLParameter::GetChildNodeTextOf(TiXmlElement *parentElement, std::s
   return value;
 }
 
-int
-InputProcessXMLParameter::Read(Application::Pointer this_)
+int Read(const std::string& filename, Application::Pointer this_)
 {
   // Open the xml file
   TiXmlDocument doc;
 
-  //Use itksys::SystemTools::FOpen() and close it below because
-  //TiXmlDocument::TiXmlFileOpen( ) is not exposed from tinyXML library. Even
-  //though its available in the TiXmlDocument::SaveFile().
-  FILE* fp =  itksys::SystemTools::Fopen(m_FileName, "rb");
-
-  if (!doc.LoadFile(fp , TIXML_ENCODING_UTF8))
-    {
-    fclose(fp);
-    itkExceptionMacro(<< "Can't open file " << m_FileName);
-    }
+  if (!doc.LoadFile(filename , TIXML_ENCODING_UTF8))
+  {
+    itkGenericExceptionMacro(<< "Can't open file " << filename);
+  }
 
   TiXmlHandle handle(&doc);
 
@@ -198,23 +128,15 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
 
   if(!n_OTB)
   {
-    std::string info = "Input XML file " + std::string(this->GetFileName()) + " is invalid.";
-    //this->otbAppLogInfo(app,info);
+    std::string info = "Input XML file " + filename + " is invalid.";
   }
 
   std::string otb_Version;
   otb_Version = GetChildNodeTextOf(n_OTB,"version");
 
   if(otb_Version != OTB_VERSION_STRING)
-    otbMsgDebugMacro( << "Input XML was generated with a different version of OTB (" <<
-                       otb_Version << ") and current version is OTB (" << OTB_VERSION_STRING << ")" );
-
-  /*
-  std::string otb_Version, otb_Build, otb_Platform;
-  otb_Version = this_->GetChildNodeTextOf(n_OTB,"version");
-  otb_Build = GetChildNodeTextOf(n_OTB, "build");
-  otb_Platform = this_->GetChildNodeTextOf(n_OTB, "platform");
-  */
+    otbGenericMsgDebugMacro(<< "Input XML was generated with a different version of OTB (" << otb_Version << ") and current version is OTB ("
+                             << OTB_VERSION_STRING << ")");
 
   int ret = 0;
 
@@ -222,46 +144,11 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
 
   std::string app_Name;
   app_Name = GetChildNodeTextOf(n_AppNode, "name");
-  /*
-  AddMetaData("appname", app_Name);
-
-  app_Descr = this_->GetChildNodeTextOf(n_AppNode, "descr");
-  AddMetaData("appdescr", app_Descr);
-
-  TiXmlElement* n_Doc    = n_AppNode->FirstChildElement("doc");
-
-  std::string doc_Name, doc_Descr, doc_Author, doc_Limitation, doc_SeeAlso;
-
-  doc_Name = this_->GetChildNodeTextOf(n_Doc, "name");
-  AddMetaData("docname", doc_Name);
-
-  doc_Descr = this_->GetChildNodeTextOf(n_Doc, "longdescr");
-  AddMetaData("doclongdescr", doc_Descr);
-
-  doc_Author = this_->GetChildNodeTextOf(n_Doc, "authors");
-  AddMetaData("docauthors", doc_Author);
-
-  doc_Limitation = this_->GetChildNodeTextOf(n_Doc, "limitations");
-  AddMetaData("doclimitations", doc_Limitation);
-
-  doc_SeeAlso = this_->GetChildNodeTextOf(n_Doc, "seealso");
-  AddMetaData("docseealso", doc_SeeAlso);
-  */
-
 
   if(this_->GetName() != app_Name)
-    {
-      //hopefully shouldn't reach here ...
-    /*
-    std::string message = "Input XML was generated for a different application( "
-        + app_Name + ") while application loaded is:" + this_->GetName();
-    */
-    itkWarningMacro( << "Input XML was generated for a different application( " <<
-                       app_Name << ") while application loaded is:" <<this_->GetName());
-
-              fclose(fp);
-    return -1;
-    }
+  {
+    itkGenericExceptionMacro(<< "Input XML was generated for a different application( " << app_Name << ") while application loaded is:" << this_->GetName());
+  }
 
   ParameterGroup::Pointer paramGroup = this_->GetParameterList();
 
@@ -279,15 +166,6 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
 
     Parameter* param = this_->GetParameterByKey(key);
 
-    // std::cout
-    //   << "'" << paramName << "'\t"
-    //   << key << "\t"
-    //   << typeAsString << "\t"
-    //   << type << "\t"
-    //   << ParameterType_OutputImage << "\t"
-    //   << param->HasUserValue() << "\t"
-    //   << value << std::endl;
-
     param->SetUserValue(true);
     param->SetActive(true);
 
@@ -402,9 +280,6 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
       }
     else if (type == ParameterType_StringList || type == ParameterType_ListView)
       {
-      if(values.empty())
-	itkWarningMacro(<< key << " has null values");
-
       this_->SetParameterStringList(key, values);
       }
 
@@ -415,12 +290,11 @@ InputProcessXMLParameter::Read(Application::Pointer this_)
 
   ret = 0; //resetting return to zero, we don't use it anyway for now.
 
-  fclose(fp);
-
   return ret;
 }
 
 
+} // namespace XML
 } //end namespace wrapper
 
 } //end namespace otb
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputXML.cxx
similarity index 71%
rename from Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx
rename to Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputXML.cxx
index eaaf8c7c302f9085282eaa1169465477d8a50bbd..38ff7eba0a0d0a2aa7cf0278797dee61df936d6b 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputProcessXMLParameter.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputXML.cxx
@@ -18,7 +18,7 @@
  * limitations under the License.
  */
 
-#include "otbWrapperOutputProcessXMLParameter.h"
+#include "otbWrapperOutputXML.h"
 
 #include "otbWrapperChoiceParameter.h"
 #include "otbWrapperListViewParameter.h"
@@ -40,25 +40,10 @@ namespace otb
 {
 namespace Wrapper
 {
-OutputProcessXMLParameter::OutputProcessXMLParameter()
-  : m_Node(nullptr)
-  , m_Appli()
+namespace XML
 {
-  this->SetKey("outxml");
-  this->SetName("Save parameters to XML");
-  this->SetDescription("Save application parameters to an XML file.");
-  this->SetMandatory(false);
-  this->SetActive(false);
-  this->SetRole(Role_Output);
-}
-
-OutputProcessXMLParameter::~OutputProcessXMLParameter()
-{
-
-}
 
-std::string
-OutputProcessXMLParameter::pixelTypeToString(ImagePixelType pixType)
+std::string pixelTypeToString(ImagePixelType pixType)
 {
   std::string type;
 
@@ -108,7 +93,7 @@ OutputProcessXMLParameter::pixelTypeToString(ImagePixelType pixType)
   return type;
 }
 
-TiXmlElement* OutputProcessXMLParameter::AddChildNodeTo(TiXmlElement *parent, std::string name, std::string value)
+TiXmlElement* AddChildNodeTo(TiXmlElement* parent, std::string name, std::string value)
 {
   TiXmlElement * n_Node = new TiXmlElement( name.c_str() );
   parent->LinkEndChild( n_Node );
@@ -120,18 +105,16 @@ TiXmlElement* OutputProcessXMLParameter::AddChildNodeTo(TiXmlElement *parent, st
   return n_Node;
 }
 
-void
-OutputProcessXMLParameter::Write(Application::Pointer app)
+void Write(const std::string& filename, Application::Pointer app)
 {
   // Check if the filename is not empty
-  if(m_FileName.empty())
-    itkExceptionMacro("The XML output FileName is empty, please set the filename via the method SetFileName");
+  if (filename.empty())
+    itkGenericExceptionMacro("The XML output FileName is empty, please set the filename via the method SetFileName");
 
   // Check that the right extension is given : expected .xml */
-  if (itksys::SystemTools::GetFilenameLastExtension(m_FileName) != ".xml")
-    {
-    itkExceptionMacro(<<itksys::SystemTools::GetFilenameLastExtension(m_FileName)
-                      <<" is a wrong Extension FileName : Expected .xml");
+  if (itksys::SystemTools::GetFilenameLastExtension(filename) != ".xml")
+  {
+    itkGenericExceptionMacro(<< itksys::SystemTools::GetFilenameLastExtension(filename) << " is a wrong Extension FileName : Expected .xml");
     }
 
   // start creating XML file
@@ -152,15 +135,12 @@ OutputProcessXMLParameter::Write(Application::Pointer app)
   n_OTB->LinkEndChild(n_App);
 
   // Finally, write xml contents to file
-  doc.SaveFile( m_FileName.c_str() );
+  doc.SaveFile(filename.c_str());
 }
 
-TiXmlElement*
-OutputProcessXMLParameter::ParseApplication(Application::Pointer app)
+TiXmlElement* ParseApplication(Application::Pointer app)
 {
-  m_Appli = app;
-  TiXmlElement * n_App = new TiXmlElement("application");
-  m_Node = n_App;
+  TiXmlElement* n_App = new TiXmlElement("application");
 
   AddChildNodeTo(n_App, "name", app->GetName());
   AddChildNodeTo(n_App, "descr", app->GetDescription());
@@ -168,7 +148,6 @@ OutputProcessXMLParameter::ParseApplication(Application::Pointer app)
 
   TiXmlElement *n_AppDoc;
   n_AppDoc = AddChildNodeTo(n_App, "doc");
-  AddChildNodeTo(n_AppDoc, "name", app->GetDocName());
   AddChildNodeTo(n_AppDoc, "longdescr", app->GetDocLongDescription());
   AddChildNodeTo(n_AppDoc, "authors", app->GetDocAuthors());
   AddChildNodeTo(n_AppDoc, "limitations", app->GetDocLimitations());
@@ -185,19 +164,14 @@ OutputProcessXMLParameter::ParseApplication(Application::Pointer app)
     }
 
   // recursive call to ParseGroup(), starting with "" (i.e. GetParameterList())
-  this->ParseGroup(std::string(""));
-
-  // reset temporary members
-  m_Appli = nullptr;
-  m_Node = nullptr;
-  return n_App;
+    ParseGroup(app, n_App, std::string(""));
+    return n_App;
 }
 
-void
-OutputProcessXMLParameter::ParseGroup(const std::string& group)
+void ParseGroup(Application::Pointer app, TiXmlElement* n_App, const std::string& group)
 {
   std::string prefix(group);
-  ParameterGroup::Pointer paramGroup = m_Appli->GetParameterList();
+  ParameterGroup::Pointer paramGroup = app->GetParameterList();
   if (!group.empty())
     {
     prefix += '.';
@@ -209,7 +183,7 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
       }
     else
       {
-      itkExceptionMacro("Function ParseGroup() expected a group parameter for key "<<group);
+        itkGenericExceptionMacro("Function ParseGroup() expected a group parameter for key " << group);
       }
     }
 
@@ -221,20 +195,18 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
       std::string key = prefix + *it;
       Parameter *param = paramGroup->GetParameterByKey(*it);
       std::string paramName = param->GetName();
-      ParameterType type = m_Appli->GetParameterType(key);
+      ParameterType type         = app->GetParameterType(key);
       std::string typeAsString = paramGroup->GetParameterTypeAsString(type);
 
       // if param is a Group, inspect this group with a recursive call
       if (type == ParameterType_Group)
         {
-        this->ParseGroup(key);
+          ParseGroup(app, n_App, key);
         }
       else
        {
-       bool paramExists = m_Appli->HasUserValue(key) &&
-                          m_Appli->IsParameterEnabled(key) &&
-                          m_Appli->GetParameterRole(key) == Role_Input;
-       if ( type == ParameterType_OutputProcessXML )
+         bool paramExists = app->HasUserValue(key) && app->IsParameterEnabled(key) && app->GetParameterRole(key) == Role_Input;
+         if (type == ParameterType_OutputProcessXML)
          {
            paramExists = false;
          }
@@ -265,18 +237,18 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
                   type == ParameterType_InputVectorDataList || type == ParameterType_StringList ||
                   type == ParameterType_ListView )
            {
-           values = m_Appli->GetParameterStringList(key);
-           hasValueList = true;
+             values       = app->GetParameterStringList(key);
+             hasValueList = true;
            }
          else if (type == ParameterType_Int || type == ParameterType_Radius || type == ParameterType_RAM )
            {
-           value = m_Appli->GetParameterAsString(key);
+             value = app->GetParameterAsString(key);
            }
          else if(type == ParameterType_Float)
            {
            std::ostringstream oss;
            oss << std::setprecision(std::numeric_limits<float>::digits10+1);
-           oss << m_Appli->GetParameterFloat( key );
+           oss << app->GetParameterFloat(key);
            value = oss.str();
            }
          else if ( type == ParameterType_String || type == ParameterType_InputFilename ||
@@ -285,12 +257,12 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
                    type == ParameterType_OutputVectorData || type == ParameterType_OutputFilename ||
                    type == ParameterType_Bool)
            {
-           value = m_Appli->GetParameterString(key);
+             value = app->GetParameterString(key);
            }
          else if(key == "rand")
            {
            std::ostringstream strm;
-           strm << m_Appli->GetParameterInt("rand");
+           strm << app->GetParameterInt("rand");
            value = strm.str();
            }
          else if (type == ParameterType_InputProcessXML)
@@ -352,20 +324,90 @@ OutputProcessXMLParameter::ParseGroup(const std::string& group)
                 AddChildNodeTo(n_Values, "value",*strIt);
               }
            }
-         m_Node->LinkEndChild(n_Parameter);
+           n_App->LinkEndChild(n_Parameter);
          }
        // dig into Choice parameter
        if (type == ParameterType_Choice)
         {
         std::string choiceGroup(key);
         choiceGroup += '.';
-        choiceGroup += m_Appli->GetParameterString(key);
-        this->ParseGroup(choiceGroup);
+        choiceGroup += app->GetParameterString(key);
+        ParseGroup(app, n_App, choiceGroup);
+        }
+      }
+    }
+}
+
+std::string MakeCommandLine(Application::Pointer application)
+{
+  TiXmlElement* XMLAppElement = ParseApplication(application);
+
+  // Create command line from the XML document
+  TiXmlElement *     pName, *pParam;
+  std::ostringstream cmdLine;
+
+  cmdLine << "";
+
+  if (XMLAppElement)
+  {
+    pName = XMLAppElement->FirstChildElement("name");
+
+    cmdLine << "otbcli_" << pName->GetText();
+#ifdef _WIN32
+    cmdLine << ".bat";
+#endif
+    cmdLine << " ";
+
+    // Parse application parameters
+    pParam = XMLAppElement->FirstChildElement("parameter");
+
+    while (pParam)
+    {
+      // Get parameter key
+      cmdLine << "-";
+      cmdLine << pParam->FirstChildElement("key")->GetText();
+      cmdLine << " ";
+
+      // Some parameters can have multiple values. Test it and handle this
+      // specific case
+      TiXmlElement* values = pParam->FirstChildElement("values");
+
+      if (values)
+      {
+        // Loop over value
+        TiXmlElement* pValue = values->FirstChildElement("value");
+        while (pValue)
+        {
+          cmdLine << pValue->GetText();
+          cmdLine << " ";
+
+          pValue = pValue->NextSiblingElement(); // iteration over multiple values
         }
       }
+      else
+      {
+        // Get parameter value
+        cmdLine << pParam->FirstChildElement("value")->GetText();
+        cmdLine << " ";
+
+        // In case of OutputImageparameter we need to report output pixel type
+        TiXmlElement* pPixType = pParam->FirstChildElement("pixtype");
+
+        if (pPixType)
+        {
+          cmdLine << pPixType->GetText();
+          cmdLine << " ";
+        }
+      }
+
+      pParam = pParam->NextSiblingElement(); // iteration over parameters
     }
+  }
+
+  return cmdLine.str();
 }
 
-} //end namespace wrapper
 
+} // namespace XML
+} // namespace Wrapper
 } //end namespace otb
diff --git a/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx b/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
index 3a8ec354b5328750e5dfaa7381002ddabe23cab6..5cb7932941d31e8c22b699c3cde7aee3254e1656 100644
--- a/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
+++ b/Modules/Wrappers/ApplicationEngine/src/otbWrapperParameterGroup.cxx
@@ -25,7 +25,6 @@
 #include "otbWrapperInputFilenameParameter.h"
 #include "otbWrapperInputFilenameListParameter.h"
 #include "otbWrapperOutputFilenameParameter.h"
-#include "otbWrapperOutputProcessXMLParameter.h"
 #include "otbWrapperInputImageParameter.h"
 #include "otbWrapperInputVectorDataParameter.h"
 #include "otbWrapperOutputImageParameter.h"
@@ -34,7 +33,6 @@
 #include "otbWrapperStringListParameter.h"
 #include "otbWrapperInputImageListParameter.h"
 #include "otbWrapperInputVectorDataListParameter.h"
-#include "otbWrapperInputProcessXMLParameter.h"
 #include "otbWrapperParameterKey.h"
 #include "otbWrapperProxyParameter.h"
 #include "otbWrapperBoolParameter.h"
@@ -163,46 +161,6 @@ ParameterGroup::ClearChoices(std::string paramKey)
     }
 }
 
-void ParameterGroup::AddOutXMLParameter()
-{
-  Parameter::Pointer tmpParam;
-  tmpParam = OutputProcessXMLParameter::New();
-//  const std::string key =   tmpParam->GetKey();
-//  const std::string descr = tmpParam->GetDescription();
-const std::string defaultXMLFileName = std::string(GetName())  + ".xml";
-  tmpParam->SetActive(false);
-  AddParameter(tmpParam);
-
-  tmpParam = nullptr;
-  /*
-  AddParameter(ParameterType_OutputProcessXML,  key,   descr);
-  SetParameterDescription(key, descr);
-  MandatoryOff(key);
-  //SetParameterString(key, defaultXMLFileName);
-  DisableParameter(key);
-  */
-}
-
-void ParameterGroup::AddInXMLParameter()
-{
-  Parameter::Pointer tmpParam;
-  tmpParam = InputProcessXMLParameter::New();
-//  const std::string key =   tmpParam->GetKey();
-//  const std::string descr = tmpParam->GetDescription();
-  const std::string defaultXMLFileName = std::string(GetName())  + ".xml";
-  tmpParam->SetActive(false);
-  AddParameter(tmpParam);
-
-  tmpParam = nullptr;
-  /*
-  AddParameter(ParameterType_InputProcessXML,  key,   descr);
-  SetParameterDescription(key, descr);
-  MandatoryOff(key);
-  //SetParameterString(key, defaultXMLFileName);
-  DisableParameter(key);
-*/
-}
-
 /** Get the choices made in the QListWidget */
 std::vector<int>
 ParameterGroup::GetSelectedItems(std::string paramKey)
@@ -369,16 +327,6 @@ ParameterGroup::AddParameter(ParameterType type, std::string paramKey, std::stri
         newParam = RAMParameter::New();
         }
         break;
-      case ParameterType_OutputProcessXML:
-        {
-       newParam = OutputProcessXMLParameter::New();
-        }
-        break;
-      case ParameterType_InputProcessXML:
-        {
-       newParam = InputProcessXMLParameter::New();
-        }
-        break;
       case ParameterType_Bool:
         {
        newParam = BoolParameter::New();
diff --git a/Modules/Wrappers/ApplicationEngine/test/otbWrapperApplicationDocTests.cxx b/Modules/Wrappers/ApplicationEngine/test/otbWrapperApplicationDocTests.cxx
index d0e8a44ec3a961814221b70046e2861625ba89a1..795f3386c407ab13a268ed5fdffe3447195fbbe1 100644
--- a/Modules/Wrappers/ApplicationEngine/test/otbWrapperApplicationDocTests.cxx
+++ b/Modules/Wrappers/ApplicationEngine/test/otbWrapperApplicationDocTests.cxx
@@ -53,11 +53,6 @@ int otbWrapperApplicationDocTest(int argc, char* argv[])
     std::cout<<"Missing Name."<<std::endl;
     isOK = false;
     }
-  if( std::string(app->GetDocName()) == "" )
-    {
-    std::cout<<"Missing Doc Name."<<std::endl;
-    isOK = false;
-    }
   if( std::string(app->GetDescription()) == "" )
     {
     std::cout<<"Missing Description."<<std::endl;
diff --git a/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h b/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
index 9e097a67cfafd11f96efc38867ea37e4b643d62b..e6a26418b2af0f7664a3eb338cd1fa45744c1da9 100644
--- a/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
+++ b/Modules/Wrappers/CommandLine/include/otbWrapperCommandLineLauncher.h
@@ -112,9 +112,6 @@ public:
   /** Create and display the help of the application */
   void DisplayHelp(bool longHelp=false);
 
-   /** Create and display the long help of the application */
-  void DisplayLongHelp();
-
   /** Performs specific action for testing environment */
   void LoadTestEnv();
 
diff --git a/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx b/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
index 816e56d81fc7ea3f9c9f178198cc999eea1e6cb7..e456eabf88b97b5a3f03217358983eef9c1b394d 100644
--- a/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
+++ b/Modules/Wrappers/CommandLine/src/otbApplicationLauncherCommandLine.cxx
@@ -28,221 +28,6 @@
 #include "otbMPIConfig.h"
 #endif
 
-const std::string GetChildNodeTextOf(TiXmlElement *parentElement, std::string key);
-std::string PrepareExpressionFromXML(std::string filename);
-std::vector<std::string> PrepareVectorExpressionFromXML(std::string filename);
-std::string CleanWord(const std::string & word);
-
-
-std::string PrepareExpressionFromXML(std::string filename)
-{
-  std::string expression;
-
-  if(filename.empty())
-    {
-    std::cerr <<"Input XML Filename is empty" << std::endl;
-    return expression;
-    }
-  std::string ext = filename.substr(filename.size()-4,filename.size());
-  if(ext != ".xml" )
-    std::cerr << ext  << " is a wrong extension: Expected .xml " << __FILE__ << std::endl;
-
-  // Open the xml file
-  TiXmlDocument doc;
-
-  //Use itksys::SystemTools::FOpen() and close it below because
-  //TiXmlDocument::TiXmlFileOpen( ) is not exposed from tinyXML library. Even
-  //though its available in the TiXmlDocument::SaveFile().
-  FILE* fp =  itksys::SystemTools::Fopen(filename, "rb");
-
-  if (!doc.LoadFile(fp , TIXML_ENCODING_UTF8))
-    {
-    std::cerr << "Can't open file " << filename << std::endl;
-    fclose(fp);
-    exit(1);
-
-    }
-
-  TiXmlHandle handle(&doc);
-
-  TiXmlElement *n_OTB;
-  n_OTB = handle.FirstChild("OTB").Element();
-
-  if(!n_OTB)
-  {
-    std::string info = "Input XML file " + filename + " is invalid.";
-    std::cerr << info  << std::endl;
-    fclose(fp);
-    exit(1);
-  }
-
-  TiXmlElement *n_AppNode   = n_OTB->FirstChildElement("application");
-
-  std::string moduleName;
-  moduleName = GetChildNodeTextOf(n_AppNode, "name");
-  /*
-  AddMetaData("appname", app_Name);
-
-  app_Descr = this_->GetChildNodeTextOf(n_AppNode, "descr");
-  AddMetaData("appdescr", app_Descr);
-
-  TiXmlElement* n_Doc    = n_AppNode->FirstChildElement("doc");
-
-  std::string doc_Name, doc_Descr, doc_Author, doc_Limitation, doc_SeeAlso;
-
-  doc_Name = this_->GetChildNodeTextOf(n_Doc, "name");
-  AddMetaData("docname", doc_Name);
-
-  doc_Descr = this_->GetChildNodeTextOf(n_Doc, "longdescr");
-  AddMetaData("doclongdescr", doc_Descr);
-
-  doc_Author = this_->GetChildNodeTextOf(n_Doc, "authors");
-  AddMetaData("docauthors", doc_Author);
-
-  doc_Limitation = this_->GetChildNodeTextOf(n_Doc, "limitations");
-  AddMetaData("doclimitations", doc_Limitation);
-
-  doc_SeeAlso = this_->GetChildNodeTextOf(n_Doc, "seealso");
-  AddMetaData("docseealso", doc_SeeAlso);
-  */
-
-  expression.append(moduleName);
-
-  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != nullptr;
-       n_Parameter = n_Parameter->NextSiblingElement() )
-    {
-    std::string key="-";
-    key.append(GetChildNodeTextOf(n_Parameter, "key"));
-
-    TiXmlElement* n_Values = nullptr;
-    n_Values = n_Parameter->FirstChildElement("values");
-    if(n_Values)
-      {
-      std::string values;
-      for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != nullptr;
-          n_Value = n_Value->NextSiblingElement())
-        {
-        values.append(n_Value->GetText());
-        values.append(" ");
-        }
-      values = values.substr(0,values.size()-1);
-      expression.append(" ");
-      expression.append(key);
-      expression.append(" ");
-      expression.append(values);
-      }
-    else
-      {
-      std::string value;
-      value = GetChildNodeTextOf(n_Parameter, "value");
-
-      expression.append(" ");
-      expression.append(key);
-      expression.append(" ");
-      expression.append(value);
-
-      std::string type = GetChildNodeTextOf(n_Parameter, "type");
-      if (type == "OutputImage")
-        {
-        std::string t = GetChildNodeTextOf(n_Parameter, "pixtype");
-        expression.append(" ");
-        expression.append(t);
-        }
-      }
-    }
-
-  fclose(fp);
-
-  return expression;
-}
-
-std::vector<std::string> PrepareVectorExpressionFromXML(std::string filename)
-{
-  std::vector<std::string> expression;
-
-  if(filename.empty())
-    {
-    std::cerr <<"Input XML Filename is empty" << std::endl;
-    return expression;
-    }
-  std::string ext = filename.substr(filename.size()-4,filename.size());
-  if(ext != ".xml" )
-    std::cerr << ext  << " is a wrong extension: Expected .xml " << __FILE__ << std::endl;
-
-  // Open the xml file
-  TiXmlDocument doc;
-
-  //Use itksys::SystemTools::FOpen() and close it below because
-  //TiXmlDocument::TiXmlFileOpen( ) is not exposed from tinyXML library. Even
-  //though its available in the TiXmlDocument::SaveFile().
-  FILE* fp =  itksys::SystemTools::Fopen(filename, "rb");
-
-  if (!doc.LoadFile(fp , TIXML_ENCODING_UTF8))
-    {
-    std::cerr << "Can't open file " << filename << std::endl;
-    fclose(fp);
-    exit(1);
-
-    }
-
-  TiXmlHandle handle(&doc);
-
-  TiXmlElement *n_OTB;
-  n_OTB = handle.FirstChild("OTB").Element();
-
-  if(!n_OTB)
-  {
-    std::string info = "Input XML file " + filename + " is invalid.";
-    std::cerr << info  << std::endl;
-    fclose(fp);
-    exit(1);
-  }
-
-  TiXmlElement *n_AppNode   = n_OTB->FirstChildElement("application");
-
-  std::string moduleName;
-  moduleName = GetChildNodeTextOf(n_AppNode, "name");
-
-  expression.push_back(CleanWord(moduleName));
-
-  for( TiXmlElement* n_Parameter = n_AppNode->FirstChildElement("parameter"); n_Parameter != nullptr;
-       n_Parameter = n_Parameter->NextSiblingElement() )
-    {
-    std::string key="-";
-    key.append(GetChildNodeTextOf(n_Parameter, "key"));
-    expression.push_back(CleanWord(key));
-
-    TiXmlElement* n_Values = nullptr;
-    n_Values = n_Parameter->FirstChildElement("values");
-    if(n_Values)
-      {
-      std::string values;
-      for(TiXmlElement* n_Value = n_Values->FirstChildElement("value"); n_Value != nullptr;
-          n_Value = n_Value->NextSiblingElement())
-        {
-        expression.push_back(CleanWord(n_Value->GetText()));
-        }
-      }
-    else
-      {
-      std::string value;
-      value = GetChildNodeTextOf(n_Parameter, "value");
-      expression.push_back(CleanWord(value));
-
-      std::string type = GetChildNodeTextOf(n_Parameter, "type");
-      if (type == "OutputImage")
-        {
-        std::string t = GetChildNodeTextOf(n_Parameter, "pixtype");
-        expression.push_back(CleanWord(t));
-        }
-      }
-    }
-
-  fclose(fp);
-
-  return expression;
-}
-
 std::string CleanWord(const std::string & word)
 {
   std::string res("");
@@ -272,26 +57,18 @@ int main(int argc, char* argv[])
 
   std::vector<std::string> vexp;
 
-  std::string exp;
-  if (strcmp(argv[1], "-inxml") == 0)
-    {
-    vexp = PrepareVectorExpressionFromXML(argv[2]);
-    }
-  else
+  // Construct the string expression
+  for (int i = 1; i < argc; i++)
+  {
+    std::string strarg(argv[i]);
+    std::string cleanArg = CleanWord(strarg);
+    if (cleanArg.empty())
     {
-    // Construct the string expression
-    for (int i = 1; i < argc; i++)
-      {
-      std::string strarg(argv[i]);
-      std::string cleanArg = CleanWord(strarg);
-      if (cleanArg.empty())
-        {
-        // Empty argument !
-        continue;
-        }
-      vexp.push_back(cleanArg);
-      }
+      // Empty argument!
+      continue;
     }
+    vexp.push_back(cleanArg);
+  }
 
   if (vexp.empty())
   {
@@ -317,31 +94,3 @@ int main(int argc, char* argv[])
   #endif
   return success ? EXIT_SUCCESS : EXIT_FAILURE;
 }
-
-const std::string GetChildNodeTextOf(TiXmlElement *parentElement, std::string key)
-{
-  std::string value="";
-
-  if(parentElement)
-    {
-    TiXmlElement* childElement = nullptr;
-    childElement = parentElement->FirstChildElement(key.c_str());
-
-    //same as childElement->GetText() does but that call is failing if there is
-    //no such node.
-    //but the below code works and is a replacement for GetText()
-    if(childElement)
-      {
-      const TiXmlNode* child = childElement->FirstChild();
-      if ( child )
-        {
-        const TiXmlText* childText = child->ToText();
-        if ( childText )
-          {
-          value = childText->Value();
-          }
-        }
-      }
-    }
-  return value;
-}
diff --git a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
index b5ef08d6acaf9814579046f6a50a0db917dac063..728d349b0ca37684df34c2aeb86322eebd2afd45 100644
--- a/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
+++ b/Modules/Wrappers/CommandLine/src/otbWrapperCommandLineLauncher.cxx
@@ -31,7 +31,6 @@
 #include "otbWrapperOutputVectorDataParameter.h"
 #include "otbWrapperNumericalParameter.h"
 #include "otbWrapperListViewParameter.h"
-#include "otbWrapperOutputProcessXMLParameter.h"
 #include "otbWrapperAddProcessToWatchEvent.h"
 
 // List value parameter
@@ -137,19 +136,27 @@ bool CommandLineLauncher::Execute()
 
 bool CommandLineLauncher::ExecuteAndWriteOutputNoCatch()
 {
-   if (this->BeforeExecute() == false)
-      {
-      return false;
-      }
-    if( m_Application->ExecuteAndWriteOutput() == 0 )
-      {
-      this->DisplayOutputParameters();
-      }
-    else
-      {
-      return false;
-      }
-    return true;
+  if (this->BeforeExecute() == false)
+  {
+    return false;
+  }
+
+  if (m_Application->ExecuteAndWriteOutput() != 0)
+  {
+    return false;
+  }
+
+  this->DisplayOutputParameters();
+
+  // After execution, write parameters to the xml file if requested
+  const char* attrib = "-outxml";
+  if (m_Parser->IsAttributExists(attrib, m_VExpression))
+  {
+    std::vector<std::string> outXMLValues = m_Parser->GetAttribut(attrib, m_VExpression);
+    m_Application->SaveParametersToXML(outXMLValues[0]);
+  }
+
+  return true;
 }
 
 bool CommandLineLauncher::ExecuteAndWriteOutput()
@@ -282,7 +289,12 @@ bool CommandLineLauncher::BeforeExecute()
     return false;
     }
 
-  return true;
+    if (m_Application->IsDeprecated())
+    {
+      m_Application->GetLogger()->Warning("This application is deprecated and will be removed in a future OTB release.\n");
+    }
+
+    return true;
 }
 
 bool CommandLineLauncher::LoadPath()
@@ -358,22 +370,16 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters()
     itkExceptionMacro("No application loaded");
     }
 
-  /* Check for inxml parameter. If exists Update all Parameters from xml and
-   * check for user defined parameters for overriding those from XML
-   */
-  const char *inXMLKey =  "inxml";
-  const char *attrib   = "-inxml";
-  const bool paramInXMLExists(m_Parser->IsAttributExists(attrib, m_VExpression));
-  if(paramInXMLExists)
+    // Read parameters from xml file if provided
+    const char* attrib = "-inxml";
+    if (m_Parser->IsAttributExists(attrib, m_VExpression))
     {
-    std::vector<std::string> inXMLValues;
-    inXMLValues = m_Parser->GetAttribut(attrib, m_VExpression);
-    m_Application->SetParameterString(inXMLKey, inXMLValues[0]);
-    m_Application->UpdateParameters();
+      std::vector<std::string> inXMLValues = m_Parser->GetAttribut(attrib, m_VExpression);
+      m_Application->LoadParametersFromXML(inXMLValues[0]);
     }
 
-  // Check for the progress report parameter
-  if (m_Parser->IsAttributExists("-progress", m_VExpression) == true)
+    // Check for the progress report parameter
+    if (m_Parser->IsAttributExists("-progress", m_VExpression) == true)
     {
     std::vector<std::string> val = m_Parser->GetAttribut("-progress", m_VExpression);
     if (val.size() == 1 && (val[0] == "1" || val[0] == "true"))
@@ -429,21 +435,10 @@ CommandLineLauncher::ParamResultType CommandLineLauncher::LoadParameters()
           // Multiple values parameters
           m_Application->SetParameterStringList(paramKey, values);
           }
-        else if (type == ParameterType_Choice ||
-                 type == ParameterType_Float ||
-                 type == ParameterType_Int ||
-                 type == ParameterType_Radius ||
-                 type == ParameterType_Directory ||
-                 type == ParameterType_String ||
-                 type == ParameterType_InputFilename ||
-                 type == ParameterType_OutputFilename ||
-                 type == ParameterType_InputImage ||
-                 type == ParameterType_OutputImage ||
-                 type == ParameterType_InputVectorData ||
-                 type == ParameterType_OutputVectorData ||
-                 type == ParameterType_RAM ||
-                 type == ParameterType_OutputProcessXML ||
-                 type == ParameterType_Bool) // || type == ParameterType_InputProcessXML)
+          else if (type == ParameterType_Choice || type == ParameterType_Float || type == ParameterType_Int || type == ParameterType_Radius ||
+                   type == ParameterType_Directory || type == ParameterType_String || type == ParameterType_InputFilename ||
+                   type == ParameterType_OutputFilename || type == ParameterType_InputImage || type == ParameterType_OutputImage ||
+                   type == ParameterType_InputVectorData || type == ParameterType_OutputVectorData || type == ParameterType_RAM || type == ParameterType_Bool)
           {
           // Single value parameter
           m_Application->SetParameterString(paramKey, values[0]);
@@ -582,7 +577,13 @@ void CommandLineLauncher::LinkWatchers(itk::Object * itkNotUsed(caller), const i
 void CommandLineLauncher::DisplayHelp(bool longHelp)
 {
   std::cerr<<std::endl;
-  std::cerr << "This is the "<<m_Application->GetDocName() << " ("<<m_Application->GetName()<<") application, version " << OTB_VERSION_STRING <<std::endl<<std::endl;
+  std::cerr << "This is the " << m_Application->GetName() << " application, version " << OTB_VERSION_STRING << std::endl << std::endl;
+
+  if (m_Application->IsDeprecated())
+  {
+    std::cerr << "WARNING: This application is deprecated, it will be removed in a future OTB release." << std::endl;
+    std::cerr << std::endl;
+  }
 
   std::cerr << m_Application->GetDescription() << std::endl;
 
@@ -718,9 +719,9 @@ std::string CommandLineLauncher::DisplayParameterHelp(const Parameter::Pointer &
     {
     oss << "<float>         ";
     }
-  else if (type == ParameterType_InputFilename || type == ParameterType_OutputFilename ||type == ParameterType_Directory || type == ParameterType_InputImage || type == ParameterType_OutputProcessXML || type == ParameterType_InputProcessXML ||
-          type == ParameterType_InputVectorData || type == ParameterType_OutputVectorData || type == ParameterType_String || 
-          type == ParameterType_Choice || (type == ParameterType_ListView && singleSelectionForListView))
+    else if (type == ParameterType_InputFilename || type == ParameterType_OutputFilename || type == ParameterType_Directory ||
+             type == ParameterType_InputImage || type == ParameterType_InputVectorData || type == ParameterType_OutputVectorData ||
+             type == ParameterType_String || type == ParameterType_Choice || (type == ParameterType_ListView && singleSelectionForListView))
     {
     oss << "<string>        ";
     }
@@ -894,6 +895,8 @@ bool CommandLineLauncher::CheckKeyValidity(std::string& refKey)
   appKeyList.push_back("progress");
   appKeyList.push_back("testenv");
   appKeyList.push_back("version");
+  appKeyList.push_back("inxml");
+  appKeyList.push_back("outxml");
 
   // Check if each key in the expression exists in the application
   for (unsigned int i = 0; i < expKeyList.size(); i++)
diff --git a/Modules/Wrappers/QGIS/src/otbQgisDescriptor.cxx b/Modules/Wrappers/QGIS/src/otbQgisDescriptor.cxx
index 6d757472971fe66922b22cc70c550dc4f6bc764a..609a8e658750f459382830d6c818eee13315ab2f 100644
--- a/Modules/Wrappers/QGIS/src/otbQgisDescriptor.cxx
+++ b/Modules/Wrappers/QGIS/src/otbQgisDescriptor.cxx
@@ -131,13 +131,10 @@ int main(int argc, char* argv[])
     const ParameterType type = appli->GetParameterType(name);
     const std::string description = appli->GetParameterName(name);
     if (  type == ParameterType_Group  ||
-          type == ParameterType_OutputProcessXML  ||
-          type == ParameterType_InputProcessXML  ||
           type == ParameterType_RAM ||
           param->GetRole() == Role_Output )
       {
       // group parameter cannot have any value.
-      // outxml and inxml parameters are not relevant for QGIS and is considered a bit noisy
       // ram is added by qgis-otb processing provider plugin as an advanced parameter for all apps
       // parameter role cannot be of type Role_Output
       continue;
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h
deleted file mode 100644
index dbd5e4a45b737abfc47564fd951623c03f2e628b..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetInputProcessXMLParameter.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbWrapperQtWidgetInputProcessXMLParameter_h
-#define otbWrapperQtWidgetInputProcessXMLParameter_h
-
-#include <QtWidgets>
-#include "otbWrapperInputProcessXMLParameter.h"
-#include "otbWrapperQtWidgetParameterBase.h"
-
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class QtWidgetInputProcessXMLParameter
- * \brief
- *
- * \ingroup OTBQtWidget
- */
-class OTBQtWidget_EXPORT QtWidgetInputProcessXMLParameter : public QtWidgetParameterBase
-{
-  Q_OBJECT
-public:
-  QtWidgetInputProcessXMLParameter(InputProcessXMLParameter*, QtWidgetModel*, QWidget*);
-  ~QtWidgetInputProcessXMLParameter() override;
-
-  const QLineEdit* GetInput() const;
-  QLineEdit* GetInput();
-
-protected slots:
-  void SetFileName( const QString& value );
-  void SelectFile();
-
-private:
-  QtWidgetInputProcessXMLParameter(const QtWidgetInputProcessXMLParameter&) = delete;
-  void operator=(const QtWidgetInputProcessXMLParameter&) = delete;
-
-  void DoCreateWidget() override;
-
-  void DoUpdateGUI() override;
-
-
-  InputProcessXMLParameter::Pointer m_XMLParam;
-
-  QHBoxLayout * m_HLayout;
-  QLineEdit*    m_Input;
-  QPushButton * m_Button;
-};
-
-
-}
-}
-
-#endif
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetMainWindow.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetMainWindow.h
index 6e0a005b1f9d3cd8dba6276b40da9e9fd29c2e8d..0bd6704b59175cf80e237f95503d4b5a463781ad 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetMainWindow.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetMainWindow.h
@@ -22,12 +22,19 @@
 #define otbWrapperQtWidgetMainWindow_h
 
 #include <QMainWindow>
+
 #include "OTBQtWidgetExport.h"
 
 #include "otbWrapperApplication.h"
 
+namespace Ui
+{
+class AppMainWindow;
+}
+
 class QAction;
 class QMenu;
+class QPlainTextEdit;
 
 namespace otb
 {
@@ -41,16 +48,28 @@ class OTBQtWidget_EXPORT QtMainWindow : public QMainWindow
   Q_OBJECT
 
 public:
-  QtMainWindow(Application::Pointer app, QtWidgetView* gui, QWidget* parent = nullptr, Qt::WindowFlags flags = Qt::WindowFlags());
+  QtMainWindow(Application::Pointer app, QtWidgetView* gui, QWidget* parent = nullptr);
+  ~QtMainWindow();
+
+  otb::Wrapper::QtWidgetView* Gui() const;
+
+  void closeEvent(QCloseEvent* event) override;
 
-  QtWidgetView* Gui() const;
+signals:
+  void ExecuteAndWriteOutput();
+  void Stop();
 
 public slots:
   void UnhandledException(QString message);
+  void UpdateMessageAfterApplicationReady(bool val);
+  void UpdateMessageAfterExecution(int status);
+  void on_executeButton_clicked();
+  void CopyCommandLine();
+  void LoadFromXML();
+  void SaveToXML();
 
 private:
-  QMenu*   helpMenu;
-  QAction* helpAction;
+  ::Ui::AppMainWindow* ui;
 
   QtWidgetView* gui;
 };
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
index fa4c8ffe9216fdfb2bd5a4e82f66335ccc6edb16..dc6ec0b88dc32a476caf52a7781b9ce32d5bb418 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetModel.h
@@ -37,17 +37,16 @@ class OTBQtWidget_EXPORT AppliThread : public QThread
  Q_OBJECT
 
  public:
-  AppliThread(Application* app)
-    {
-      m_Application = app;
+   AppliThread(Application::Pointer app) : m_Application(app)
+   {
     }
 
   ~AppliThread() override;
 
-  void Execute()
+  /** Ask the running application to stop */
+  void Stop()
   {
-    // Call the signal start to begin running the program
-    start();
+    m_Application->Stop();
   }
 
 signals:
@@ -66,13 +65,6 @@ signals:
    */
   void ExceptionRaised( QString what );
 
-public slots:
-  /** Ask the running application to stop */
-  void Stop()
-    {
-    m_Application->Stop();
-    }
-
 protected:
   void run() override;
 
@@ -107,6 +99,10 @@ public:
     return m_LogOutput;
   }
 
+  bool IsRunning() const;
+
+  void Stop();
+
   /** Logger warning message sender */
   void SendLogWARNING( const std::string & mes );
   /** Logger info message sender */
@@ -114,13 +110,6 @@ public:
   /** Logger debug message sender */
   void SendLogDEBUG( const std::string & mes );
 
-  /** Used by inxml when forcing xml parse flag to update widget data via UpdateGui */
-  void UpdateAllWidgets()
-  {
-    GetApplication()->ForceInXMLParseFlag();
-    emit UpdateGui();
-  }
-
 signals:
   void SetApplicationReady(bool);
 
@@ -144,8 +133,6 @@ signals:
 
   void UpdateGui();
 
-  void Stop();
-
 public slots:
   /**
    * \brief Slots called every time one of the widget needs to be
@@ -168,19 +155,18 @@ private slots:
    */
   void OnApplicationExecutionDone( int status );
 
-  void TimerDone();
-
 private:
   QtWidgetModel(const QtWidgetModel&) = delete;
   void operator=(const QtWidgetModel&) = delete;
 
-  Application::Pointer m_Application;
-
   QtLogOutput::Pointer  m_LogOutput;
 
+  AppliThread* m_taskAppli;
+
   bool m_IsRunning;
 
-  QTimer *m_Timer;
+public:
+  Application::Pointer m_Application;
 };
 
 
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h
deleted file mode 100644
index 5896481a4d4fe39cf9bfd96c5cd26c147cf36ef7..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetOutputProcessXMLParameter.h
+++ /dev/null
@@ -1,75 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbWrapperQtWidgetOutputProcessXMLParameter_h
-#define otbWrapperQtWidgetOutputProcessXMLParameter_h
-
-#include <QtWidgets>
-#include "otbWrapperOutputProcessXMLParameter.h"
-#include "otbWrapperQtWidgetParameterBase.h"
-
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class QtWidgetOutputProcessXMLParameter
- * \brief
- *
- * \ingroup OTBQtWidget
- */
-class OTBQtWidget_EXPORT QtWidgetOutputProcessXMLParameter : public QtWidgetParameterBase
-{
-  Q_OBJECT
-public:
-  QtWidgetOutputProcessXMLParameter(OutputProcessXMLParameter*, QtWidgetModel*, QWidget*);
-  ~QtWidgetOutputProcessXMLParameter() override;
-
-  const QLineEdit* GetInput() const;
-  QLineEdit* GetInput();
-
-public slots:
-  void SetFileName( const QString& value );
-
-protected slots:
-  void SelectFile();
-
-private:
-  QtWidgetOutputProcessXMLParameter(const QtWidgetOutputProcessXMLParameter&) = delete;
-  void operator=(const QtWidgetOutputProcessXMLParameter&) = delete;
-
-  void DoCreateWidget() override;
-
-  void DoUpdateGUI() override;
-
-
-  OutputProcessXMLParameter::Pointer m_XMLParam;
-
-  QHBoxLayout * m_HLayout;
-  QLineEdit*    m_Input;
-  QPushButton * m_Button;
-};
-
-
-}
-}
-
-#endif
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
index a84acb452ddb484f934f8c7d4f6275f312a36f95..3eb77f9f800174904918eb1cc00473d216c60abf 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetParameterGroup.h
@@ -24,8 +24,8 @@
 #include <QtWidgets>
 #include "otbWrapperParameterGroup.h"
 #include "otbWrapperQtWidgetParameterBase.h"
-#include "otbWrapperInputProcessXMLParameter.h"
-#include "otbWrapperOutputProcessXMLParameter.h"
+#include "otbWrapperInputXML.h"
+#include "otbWrapperOutputXML.h"
 
 namespace otb
 {
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetProgressReport.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetProgressReport.h
deleted file mode 100644
index a8a46382f27497d7449980724ea9fe1c69fcda29..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetProgressReport.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef otbWrapperQtWidgetProgressReport_h
-#define otbWrapperQtWidgetProgressReport_h
-
-#include <QtWidgets>
-#include "otbWrapperQtWidgetModel.h"
-#include "itkQtProgressBar.h"
-#include "itkProcessObject.h"
-#include <string>
-
-
-namespace otb
-{
-namespace Wrapper
-{
-
-/** \class QtWidgetProgressReport
- * \brief Create a widget reporting the progress of the application
- *        process.
- *
- * \ingroup OTBQtWidget
- */
-class OTBQtWidget_EXPORT QtWidgetProgressReport : public QWidget
-{
-  Q_OBJECT
-public:
-  QtWidgetProgressReport(QtWidgetModel * model, QWidget * parent);
-  ~QtWidgetProgressReport() override;
-
-  void SetApplication(Application::Pointer app);
-
-  typedef itk::MemberCommand< QtWidgetProgressReport >  AddProcessCommandType;
-
-  void ProcessEvent( itk::Object * caller, const itk::EventObject & event );
-
-  std::string GetCurrentDescription()
-  {
-    return m_CurrentDescription;
-  }
-
-/*
-  itk::ProcessObject* GetCurrentProcess()
-  {
-    return m_CurrentProcess;
-  }
-
-  QtWidgetModel * GetModel()
-  {
-    m_Model;
-  }
-
-  QVBoxLayout * GetLayout()
-  {
-    return m_Layout;
-  }
-*/
-public slots:
-  void RemoveLayout();
-  /*virtual */void ReportProcess();
-
-  signals:
-  void AddNewProcessToReport();
-
-private:
-  QtWidgetProgressReport(const QtWidgetProgressReport&) = delete;
-  void operator=(const QtWidgetProgressReport&) = delete;
-
-  Application::Pointer              m_Application;
-  QtWidgetModel *                   m_Model;
-  QVBoxLayout *                     m_Layout;
-
-  AddProcessCommandType::Pointer    m_AddProcessCommand;
-  itk::ProcessObject*               m_CurrentProcess;
-  std::string                       m_CurrentDescription;
-};
-
-}
-}
-
-#endif
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetSimpleProgressReport.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetSimpleProgressReport.h
index 47b6c1a1504e075dd61c7a892addca54f10306f2..9bfc7be1dfc8b65f20c78624cbd487da93336a62 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetSimpleProgressReport.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetSimpleProgressReport.h
@@ -39,14 +39,14 @@ namespace Wrapper
  *
  * \ingroup OTBQtWidget
  */
-class OTBQtWidget_EXPORT QtWidgetSimpleProgressReport : public QWidget
+class OTBQtWidget_EXPORT QtWidgetSimpleProgressReport : public itk::QtProgressBar
 {
   Q_OBJECT
 public:
-  QtWidgetSimpleProgressReport(QtWidgetModel * model, QWidget * parent);
+  QtWidgetSimpleProgressReport(QWidget* parent);
   ~QtWidgetSimpleProgressReport() override;
 
-  void SetApplication(Application::Pointer app);
+  void SetModel(QtWidgetModel* model);
 
   typedef itk::MemberCommand< QtWidgetSimpleProgressReport >  AddProcessCommandType;
 
@@ -56,25 +56,17 @@ public slots:
   void Init();
   void ReportProcess();
 
-  signals:
+signals:
   void AddNewProcessToReport();
+  void SetText(QString);
 
 private:
   QtWidgetSimpleProgressReport(const QtWidgetSimpleProgressReport&) = delete;
-  void operator=(const QtWidgetSimpleProgressReport&); //purposely not
-                                                       //implemented
-
-  Application::Pointer              m_Application;
-  QtWidgetModel *                   m_Model;
-  QVBoxLayout *                     m_Layout;
+  void operator=(const QtWidgetSimpleProgressReport&) = delete;
 
   AddProcessCommandType::Pointer    m_AddProcessCommand;
   itk::ProcessObject*               m_CurrentProcess;
   std::string                       m_CurrentDescription;
-
-  itk::QtProgressBar * m_Bar;
-  QLabel * m_Label;
-
 };
 
 }
diff --git a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetView.h b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetView.h
index 1ec99d5aae5e40497b4690b5d2c8f872d406b675..96b8d4f6ccd4eb370f09f041c7423cab144b0396 100644
--- a/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetView.h
+++ b/Modules/Wrappers/QtWidget/include/otbWrapperQtWidgetView.h
@@ -44,10 +44,6 @@ class OTBQtWidget_EXPORT QtWidgetView :
 {
   Q_OBJECT
 
-  Q_PROPERTY( bool isClosable
-	      READ IsClosable
-	      WRITE SetClosable );
-
 public:
 
   static char const * const OBJECT_NAME;
@@ -66,12 +62,15 @@ public:
   /** \brief Model Accessor */
   QtWidgetModel* GetModel() const;
 
-  bool IsClosable() const;
+  virtual bool BeforeExecuteButtonClicked()
+  {
+    return true;
+  }
 
-  void UnhandledException(QString message);
+  void Disable();
+  void Enable();
 
 signals:
-  void QuitSignal();
   void ExecuteAndWriteOutput();
   void Stop();
   void OTBApplicationOutputImageChanged( const QString &, const QString &);
@@ -83,24 +82,12 @@ protected:
 
   virtual QWidget* CreateInputWidgets();
 
-  // QWidget overloads.
-  void closeEvent( QCloseEvent * event ) override;
-
-protected:
-
-  /** Html section for 'Done' icon */
-  std::string m_IconPathDone;
-
-  /** Html section for 'Failed' icon */
-  std::string m_IconPathFailed;
-
 protected slots:
 
-  virtual void OnExecButtonClicked();
+  virtual void OnExecButtonClicked()
+  {
+  }
 
-  virtual void OnExceptionRaised( QString what );
-
-// Private methods.
 private:
 
   QtWidgetView(const QtWidgetView&) = delete;
@@ -108,29 +95,10 @@ private:
 
   QWidget* CreateFooter();
 
-// Private attributes.
 private:
-
   otb::Wrapper::QtWidgetModel* m_Model;
 
-  QPushButton* m_ExecButton;
-  QPushButton* m_QuitButton;
-  QShortcut* m_QuitShortcut;
-  QLabel* m_Message;
-  QTextEdit *m_LogText;
-  QTabWidget *m_TabWidget;
-
-  bool m_IsClosable : 1;
   bool m_IsRunning;
-
-private slots:
-  void UpdateMessageAfterExecution(int status);
-  void UpdateMessageAfterApplicationReady(bool val);
-
-  void OnProgressReportBegin();
-  void OnProgressReportEnd( int status );
-  void SetClosable( bool );
-
 };
 
 } // end namespace 'Wrapper'
diff --git a/Modules/Wrappers/QtWidget/src/CMakeLists.txt b/Modules/Wrappers/QtWidget/src/CMakeLists.txt
index 94c61a93f8d95baa51b31df9fb62679260197c3d..461bd06209a5bc418ae79972b7e221efe0c55bc1 100644
--- a/Modules/Wrappers/QtWidget/src/CMakeLists.txt
+++ b/Modules/Wrappers/QtWidget/src/CMakeLists.txt
@@ -24,7 +24,6 @@ set(OTBQtWidget_SRC
   otbWrapperQtWidgetParameterLabel.cxx
   otbWrapperQtWidgetView.cxx
   otbWrapperQtWidgetMainWindow.cxx
-  otbWrapperQtWidgetInputProcessXMLParameter.cxx
   otbWrapperQtWidgetIntParameter.cxx
   otbWrapperQtWidgetInputVectorDataListParameter.cxx
   otbWrapperQtWidgetSimpleProgressReport.cxx
@@ -44,8 +43,6 @@ set(OTBQtWidget_SRC
   otbWrapperQtWidgetParameterGroup.cxx
   otbWrapperQtWidgetInputFilenameListParameter.cxx
   otbWrapperQtWidgetRAMParameter.cxx
-  otbWrapperQtWidgetProgressReport.cxx
-  otbWrapperQtWidgetOutputProcessXMLParameter.cxx
   otbWrapperQtWidgetParameterBase.cxx
   otbWrapperQtWidgetInputImageParameter.cxx
   otbWrapperQtWidgetStringListParameter.cxx
@@ -71,15 +68,12 @@ set(OTBQtWidget_MOC_HDR
   ../include/otbWrapperQtWidgetInputVectorDataParameter.h
   ../include/otbWrapperQtWidgetOutputImageParameter.h
   ../include/otbWrapperQtWidgetOutputVectorDataParameter.h
-  ../include/otbWrapperQtWidgetOutputProcessXMLParameter.h
-  ../include/otbWrapperQtWidgetInputProcessXMLParameter.h
   ../include/otbWrapperQtWidgetParameterGroup.h
   ../include/otbWrapperQtWidgetParameterLabel.h
   ../include/otbWrapperQtWidgetParameterBase.h
   ../include/otbWrapperQtWidgetModel.h
   ../include/otbWrapperQtWidgetView.h
   ../include/otbWrapperQtWidgetMainWindow.h
-  ../include/otbWrapperQtWidgetProgressReport.h
   ../include/otbWrapperQtWidgetListViewParameter.h
   ../include/otbQtFileSelectionWidget.h
   ../include/otbQtStringSelectionWidget.h
@@ -101,6 +95,7 @@ set(OTBQtWidget_MOC_HDR
 
 set( OTBQtWidget_FORMS
   otbWrapperQtWidgetListEditWidget.ui
+  appmainwindow.ui
   )
 
 set( OTBQtWidget_RESOURCES
diff --git a/Modules/Wrappers/QtWidget/src/appmainwindow.ui b/Modules/Wrappers/QtWidget/src/appmainwindow.ui
new file mode 100644
index 0000000000000000000000000000000000000000..1a2408b89cc9fbbe307a8cdb128f779dfdf517cd
--- /dev/null
+++ b/Modules/Wrappers/QtWidget/src/appmainwindow.ui
@@ -0,0 +1,243 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>AppMainWindow</class>
+ <widget class="QMainWindow" name="AppMainWindow">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>900</width>
+    <height>600</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>MainWindow</string>
+  </property>
+  <property name="windowIcon">
+   <iconset resource="otbWrapperQtWidgetIcons.qrc">
+    <normaloff>:/Utilities/Data/Icons/monteverdi-48x48.png</normaloff>:/Utilities/Data/Icons/monteverdi-48x48.png</iconset>
+  </property>
+  <widget class="QWidget" name="centralwidget">
+   <layout class="QVBoxLayout" name="verticalLayout">
+    <property name="spacing">
+     <number>16</number>
+    </property>
+    <property name="leftMargin">
+     <number>16</number>
+    </property>
+    <property name="topMargin">
+     <number>12</number>
+    </property>
+    <property name="rightMargin">
+     <number>16</number>
+    </property>
+    <property name="bottomMargin">
+     <number>12</number>
+    </property>
+    <item>
+     <widget class="QTabWidget" name="tabWidget">
+      <property name="currentIndex">
+       <number>0</number>
+      </property>
+      <widget class="QWidget" name="tab1">
+       <attribute name="title">
+        <string>Parameters</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_2">
+        <property name="spacing">
+         <number>16</number>
+        </property>
+        <property name="leftMargin">
+         <number>0</number>
+        </property>
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <property name="rightMargin">
+         <number>0</number>
+        </property>
+        <property name="bottomMargin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QScrollArea" name="scrollArea">
+          <property name="frameShape">
+           <enum>QFrame::NoFrame</enum>
+          </property>
+          <property name="widgetResizable">
+           <bool>true</bool>
+          </property>
+          <widget class="QWidget" name="scrollAreaWidgetContents">
+           <property name="geometry">
+            <rect>
+             <x>0</x>
+             <y>0</y>
+             <width>864</width>
+             <height>425</height>
+            </rect>
+           </property>
+           <layout class="QHBoxLayout" name="horizontalLayout_2">
+            <property name="spacing">
+             <number>16</number>
+            </property>
+           </layout>
+          </widget>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+      <widget class="QWidget" name="tab2">
+       <attribute name="title">
+        <string>Log</string>
+       </attribute>
+       <layout class="QVBoxLayout" name="verticalLayout_3">
+        <property name="spacing">
+         <number>16</number>
+        </property>
+        <property name="leftMargin">
+         <number>0</number>
+        </property>
+        <property name="topMargin">
+         <number>0</number>
+        </property>
+        <property name="rightMargin">
+         <number>0</number>
+        </property>
+        <property name="bottomMargin">
+         <number>0</number>
+        </property>
+        <item>
+         <widget class="QPlainTextEdit" name="plainTextEdit">
+          <property name="readOnly">
+           <bool>true</bool>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+    <item alignment="Qt::AlignHCenter|Qt::AlignVCenter">
+     <widget class="QLabel" name="deprecation">
+      <property name="text">
+       <string>Deprecation status</string>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <widget class="QLabel" name="message">
+      <property name="text">
+       <string>Status text</string>
+      </property>
+      <property name="wordWrap">
+       <bool>true</bool>
+      </property>
+     </widget>
+    </item>
+    <item>
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <property name="spacing">
+       <number>16</number>
+      </property>
+      <property name="sizeConstraint">
+       <enum>QLayout::SetDefaultConstraint</enum>
+      </property>
+      <item>
+       <widget class="otb::Wrapper::QtWidgetSimpleProgressReport" name="progressBar">
+        <property name="enabled">
+         <bool>true</bool>
+        </property>
+        <property name="value">
+         <number>0</number>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <widget class="QPushButton" name="executeButton">
+        <property name="text">
+         <string>Execute</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+   </layout>
+  </widget>
+  <widget class="QMenuBar" name="menubar">
+   <property name="geometry">
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>900</width>
+     <height>22</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuApplication">
+    <property name="title">
+     <string>Application</string>
+    </property>
+    <addaction name="separator"/>
+    <addaction name="actionCopy_command_line"/>
+    <addaction name="actionLoad_from_XML"/>
+    <addaction name="actionSave_to_XML"/>
+    <addaction name="separator"/>
+    <addaction name="actionQuit"/>
+   </widget>
+   <widget class="QMenu" name="menuHelp">
+    <property name="title">
+     <string>Help</string>
+    </property>
+    <addaction name="actionDocumentation"/>
+   </widget>
+   <addaction name="menuApplication"/>
+   <addaction name="menuHelp"/>
+  </widget>
+  <widget class="QStatusBar" name="statusBar">
+   <property name="styleSheet">
+    <string notr="true">color: rgb(85, 87, 83);</string>
+   </property>
+  </widget>
+  <action name="actionDocumentation">
+   <property name="text">
+    <string>Documentation</string>
+   </property>
+   <property name="shortcut">
+    <string>F1</string>
+   </property>
+  </action>
+  <action name="actionQuit">
+   <property name="text">
+    <string>Quit</string>
+   </property>
+   <property name="shortcut">
+    <string>Ctrl+Q</string>
+   </property>
+  </action>
+  <action name="actionCopy_command_line">
+   <property name="text">
+    <string>Copy command line to clipboard</string>
+   </property>
+  </action>
+  <action name="actionLoad_from_XML">
+   <property name="text">
+    <string>Load from XML</string>
+   </property>
+  </action>
+  <action name="actionSave_to_XML">
+   <property name="text">
+    <string>Save to XML</string>
+   </property>
+  </action>
+ </widget>
+ <customwidgets>
+  <customwidget>
+   <class>otb::Wrapper::QtWidgetSimpleProgressReport</class>
+   <extends>QProgressBar</extends>
+   <header>otbWrapperQtWidgetSimpleProgressReport.h</header>
+  </customwidget>
+ </customwidgets>
+ <resources>
+  <include location="otbWrapperQtWidgetIcons.qrc"/>
+ </resources>
+ <connections/>
+</ui>
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetIcons.qrc b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetIcons.qrc
index 60701a70320c2449e328d4cc1d3d907e79a5f4b4..6762620b11e830eb51ee174e56f891a3386c408e 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetIcons.qrc
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetIcons.qrc
@@ -2,5 +2,6 @@
 <qresource>
     <file>../../../../Utilities/Data/Icons/mIconClearText.png</file>
     <file>../../../../Utilities/Data/Icons/mIconClearTextHover.png</file>
+    <file>../../../../Utilities/Data/Icons/monteverdi-48x48.png</file>
 </qresource>
 </RCC>
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputProcessXMLParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputProcessXMLParameter.cxx
deleted file mode 100644
index fdd95d1135ec9ebe62d2ccfe179a963dd28ab488..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetInputProcessXMLParameter.cxx
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbWrapperQtWidgetInputProcessXMLParameter.h"
-
-
-#include <otbQtAdapters.h>
-
-
-namespace otb
-{
-namespace Wrapper
-{
-
-QtWidgetInputProcessXMLParameter::QtWidgetInputProcessXMLParameter(InputProcessXMLParameter* param, QtWidgetModel* m, QWidget * parent)
-: QtWidgetParameterBase(param, m, parent),
-  m_XMLParam(param)
-{
-}
-
-QtWidgetInputProcessXMLParameter::~QtWidgetInputProcessXMLParameter()
-{
-}
-
-const QLineEdit*
-QtWidgetInputProcessXMLParameter
-::GetInput() const
-{
-  return m_Input;
-}
-
-QLineEdit*
-QtWidgetInputProcessXMLParameter
-::GetInput()
-{
-  return m_Input;
-}
-
-void QtWidgetInputProcessXMLParameter::DoUpdateGUI()
-{
-  if (m_XMLParam->HasUserValue())
-    {
-    // Update the lineEdit
-    QString text(
-      QFile::decodeName( m_XMLParam->GetFileName() )
-    );
-
-    if (text != m_Input->text())
-      m_Input->setText(text);
-    }
-}
-
-void QtWidgetInputProcessXMLParameter::DoCreateWidget()
-{
-  // Set up input text edit
-  m_HLayout = new QHBoxLayout;
-  m_HLayout->setSpacing(0);
-  m_HLayout->setContentsMargins(0, 0, 0, 0);
-  m_Input = new QLineEdit(this);
-  m_Input->setToolTip(
-    QString::fromStdString( m_XMLParam->GetDescription() )
-  );
-  connect( m_Input, &QLineEdit::textChanged, this, &QtWidgetInputProcessXMLParameter::SetFileName );
-  connect( m_Input, &QLineEdit::textChanged, GetModel(), &QtWidgetModel::NotifyUpdate );
-
-  m_HLayout->addWidget(m_Input);
-
-  // Set up input text edit
-  m_Button = new QPushButton(this);
-  m_Button->setText("...");
-  m_Button->setToolTip("Select file...");
-  m_Button->setMaximumWidth(m_Button->width());
-  connect( m_Button, &QPushButton::clicked, this, &QtWidgetInputProcessXMLParameter::SelectFile );
-  m_HLayout->addWidget(m_Button);
-
-  this->setLayout(m_HLayout);
-}
-
-
-void
-QtWidgetInputProcessXMLParameter
-::SelectFile()
-{
-  assert( m_Input!=NULL );
-
-  QString filename(
-    otb::GetOpenFilename(
-      this,
-      QString(),
-      m_Input->text(),
-      tr( "XML File (*.xml)" ),
-      NULL,
-      QFileDialog::ReadOnly
-    )
-  );
-
-  if( filename.isEmpty() )
-    return;
-
-  m_Input->setText( filename  );
-}
-
-
-void QtWidgetInputProcessXMLParameter::SetFileName(const QString& value)
-{
-  // load xml file name
-  if( m_XMLParam->SetFileName(
-	QFile::encodeName( value ).constData() ) )
-    {
-    // notify of value change
-    QString key( m_XMLParam->GetKey() );
-    emit ParameterChanged(key);
-    GetModel()->GetApplication()->ForceInXMLParseFlag();
-    }
-}
-
-}
-
-}
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetListViewParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetListViewParameter.cxx
index 736a3d8fdbcf847f532fa1fd3ac277ba8326f39c..1dd3dae0c592c43c685ac47ddcd33ef6fcd26ceb 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetListViewParameter.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetListViewParameter.cxx
@@ -120,7 +120,6 @@ void QtWidgetListViewParameter::DoCreateWidget()
   m_VLayout = new QHBoxLayout;
   m_VLayout->setContentsMargins(0, 0, 0, 0);
   m_VLayout->addWidget(m_ListView);
-  m_ListView->setMaximumSize(m_ListView->width() ,  4* m_LineHeight);
   m_VLayout->activate();
 
   this->setLayout(m_VLayout);
@@ -144,6 +143,9 @@ void QtWidgetListViewParameter::SelectedItems()
   // make sure parameter is enabled
   m_ListViewParam->SetActive(true);
   m_ListViewParam->SetUserValue(true);
+
+  // Call the application DoUpdateParameters, then all widgets' DoUpdateGUI (including this one)
+  this->GetModel()->NotifyUpdate();
 }
 
 }
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetMainWindow.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetMainWindow.cxx
index d185a8b9a9cc3689c0edf67394901f77036ef509..40cd64b48a3f6064280007b6706dc2989c4bd629 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetMainWindow.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetMainWindow.cxx
@@ -19,46 +19,180 @@
  */
 
 #include "otbWrapperQtWidgetMainWindow.h"
+#include "otbWrapperOutputXML.h"
 
 #include <QtWidgets>
+
 #include "otbWrapperQtWidgetView.h"
 
+#include "ui_appmainwindow.h"
+
 namespace otb
 {
 namespace Wrapper
 {
 
-QtMainWindow::QtMainWindow(Application::Pointer app, QtWidgetView* gui, QWidget* parent, Qt::WindowFlags flags) :
-    QMainWindow(parent, flags),
-    gui(gui)
+QtMainWindow::QtMainWindow(Application::Pointer app, QtWidgetView* gui, QWidget* parent) : QMainWindow(parent), ui(new Ui::AppMainWindow), gui(gui)
 {
-  this->setWindowIcon(QIcon(":/otb_small.png"));
-  this->setWindowTitle(QString(app->GetDocName()).append(" - ").append(OTB_VERSION_STRING));
+  ui->setupUi(this);
+
+  // Setup the "View command line" widget
+  this->setWindowTitle(QString(app->GetName()).append(" - OTB ").append(OTB_VERSION_STRING));
 
   // Set the given application view widget
   gui->setParent(this);
-  this->setCentralWidget(gui);
-
-  // Connect the View "Quit" signal, to the mainWindow close slot
-  connect(gui, &QtWidgetView::QuitSignal, this, &QMainWindow::close);
-
-  // Setup the help menu
-  QMenu* helpMenu = this->menuBar()->addMenu(tr("&Help"));
-  helpAction      = new QAction(tr("&Documentation"), this);
-  helpAction->setShortcuts(QKeySequence::HelpContents);
-  helpMenu->addAction(helpAction);
-  const std::string url = std::string("https://www.orfeo-toolbox.org/CookBook/Applications/app_") + app->GetName() + std::string(".html");
-  QObject::connect(helpAction, &QAction::triggered, this, [=] { QDesktopServices::openUrl(QUrl(QString::fromStdString(url))); });
+  ui->scrollArea->setWidget(gui);
+
+  // Connect menu buttons
+  const auto url = std::string("https://www.orfeo-toolbox.org/CookBook/Applications/app_") + app->GetName() + std::string(".html");
+  connect(ui->actionDocumentation, &QAction::triggered, this, [=] { QDesktopServices::openUrl(QUrl(QString::fromStdString(url))); });
+
+  connect(ui->actionCopy_command_line, &QAction::triggered, this, &QtMainWindow::CopyCommandLine);
+  connect(ui->actionLoad_from_XML, &QAction::triggered, this, &QtMainWindow::LoadFromXML);
+  connect(ui->actionSave_to_XML, &QAction::triggered, this, &QtMainWindow::SaveToXML);
+  connect(ui->actionQuit, &QAction::triggered, this, &QMainWindow::close);
+
+  // Setup execute / cancel button
+  ui->executeButton->setDefault(true);
+  ui->executeButton->setEnabled(false);
+  ui->executeButton->setText(QObject::tr("Execute"));
+
+  connect(gui->GetModel(), &QtWidgetModel::SetApplicationReady, ui->executeButton, &QPushButton::setEnabled);
+  connect(this, &QtMainWindow::ExecuteAndWriteOutput, gui->GetModel(), &QtWidgetModel::ExecuteAndWriteOutputSlot);
+
+  connect(gui->GetModel(), &QtWidgetModel::SetApplicationReady, this, &QtMainWindow::UpdateMessageAfterApplicationReady);
+  connect(gui->GetModel(), &QtWidgetModel::SetProgressReportDone, this, &QtMainWindow::UpdateMessageAfterExecution);
+
+  connect(gui->GetModel(), &QtWidgetModel::ExceptionRaised, [&] { ui->tabWidget->setCurrentIndex(1); });
+
+  // Status bar and message default text
+  ui->statusBar->showMessage(tr("Select parameters"));
+  ui->message->setText("");
+
+  // Setup the progress bar to observe the model
+  ui->progressBar->SetModel(gui->GetModel());
+
+  // Fill and display the deprecation status label if needed, or hide it.
+  if (app->IsDeprecated())
+  {
+    ui->deprecation->setVisible(true);
+    ui->deprecation->setText("<font color='#E65100'>This application is deprecated and will be removed in a future release.</font>");
+  }
+  else
+  {
+    ui->deprecation->setVisible(false);
+    ui->deprecation->setText("");
+  }
+
+  // Connect application progress text to the QLabel
+  connect(ui->progressBar, &QtWidgetSimpleProgressReport::SetText, ui->message, &QLabel::setText);
+
+  // Connect log output to the textEdit area
+  connect(gui->GetModel()->GetLogOutput(), &QtLogOutput::NewContentLog, ui->plainTextEdit, &QPlainTextEdit::appendPlainText);
+}
+
+void QtMainWindow::UpdateMessageAfterApplicationReady(bool val)
+{
+  if (!gui->GetModel()->IsRunning())
+  {
+    if (val == true)
+    {
+      ui->statusBar->showMessage(tr("Ready to run"));
+    }
+    else
+    {
+      ui->statusBar->showMessage(tr("Select parameters"));
+    }
+  }
+}
+
+void QtMainWindow::UpdateMessageAfterExecution(int status)
+{
+  if (status >= 0)
+  {
+    ui->statusBar->showMessage(tr("Done"));
+  }
+  else
+  {
+    ui->statusBar->showMessage(tr("Failed!"));
+  }
+  ui->executeButton->setText(tr("Execute"));
+  gui->Enable();
+}
+
+void QtMainWindow::on_executeButton_clicked()
+{
+  if (gui->GetModel()->IsRunning())
+  {
+    ui->statusBar->showMessage(tr("Cancelling..."));
+    gui->GetModel()->Stop();
+  }
+  else
+  {
+    if (gui->BeforeExecuteButtonClicked())
+    {
+      gui->Disable();
+      ui->statusBar->showMessage(tr("Running..."));
+      ui->executeButton->setText(tr("Cancel"));
+      emit ExecuteAndWriteOutput();
+    }
+  }
+}
+
+void QtMainWindow::CopyCommandLine()
+{
+  // Get command line
+  std::string cmdLine = otb::Wrapper::XML::MakeCommandLine(gui->GetModel()->m_Application);
+
+  // Copy it to clipboard
+  QClipboard* clipboard = QGuiApplication::clipboard();
+  clipboard->setText(QString::fromStdString(cmdLine));
+
+  // Also show it in the log
+  gui->GetModel()->SendLogINFO(cmdLine);
+}
+
+void QtMainWindow::LoadFromXML()
+{
+  QString filename = QFileDialog::getOpenFileName(this, tr("Load from XML"), "", tr("XML files (*.xml);;All files (*)"));
+
+  if (!filename.isNull())
+  {
+    gui->GetModel()->m_Application->LoadParametersFromXML(filename.toStdString());
+    gui->GetModel()->UpdateGui();
+  }
 }
 
-QtWidgetView* QtMainWindow::Gui() const
+void QtMainWindow::SaveToXML()
+{
+  QString filename = QFileDialog::getSaveFileName(this, tr("Save to XML"), "", tr("XML files (*.xml);;All files (*)"));
+
+  if (!filename.isNull())
+  {
+    gui->GetModel()->m_Application->SaveParametersToXML(filename.toStdString());
+  }
+}
+
+QtMainWindow::~QtMainWindow()
+{
+  delete ui;
+}
+
+otb::Wrapper::QtWidgetView* QtMainWindow::Gui() const
 {
   return gui;
 }
 
 void QtMainWindow::UnhandledException(QString message)
 {
-  gui->UnhandledException(message);
+  ui->plainTextEdit->appendPlainText(message);
+  ui->tabWidget->setCurrentIndex(1);
+}
+
+void QtMainWindow::closeEvent(QCloseEvent* event)
+{
+  gui->GetModel()->Stop();
+  QMainWindow::closeEvent(event);
 }
 
 } // namespace Wrapper
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetModel.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetModel.cxx
index 6803a555110064cfcb0199661c6280313618b32b..9047819d649166b1e25ba2f0e6ca9953dd8c7e7f 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetModel.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetModel.cxx
@@ -21,7 +21,7 @@
 #include "otbWrapperQtWidgetModel.h"
 
 //Use to create command line from the application parameters
-#include "otbWrapperOutputProcessXMLParameter.h"
+#include "otbWrapperOutputXML.h"
 
 using std::string;
 
@@ -31,11 +31,7 @@ namespace otb
 namespace Wrapper
 {
 
-QtWidgetModel
-::QtWidgetModel(Application* app) :
-  m_Application(app),
-  m_LogOutput(),
-  m_IsRunning(false)
+QtWidgetModel ::QtWidgetModel(Application* app) : m_LogOutput(), m_taskAppli(nullptr), m_IsRunning(false), m_Application(app)
 {
   // Init only if not already done
   if(!m_Application->IsInitialized())
@@ -47,23 +43,19 @@ QtWidgetModel
 
   // Attach log output to the Application logger
   m_Application->GetLogger()->AddLogOutput(m_LogOutput);
-
-  m_Timer = new QTimer(this);
-  m_Timer->setSingleShot(true);
-  m_Timer->setInterval(1000);
-  QObject::connect( m_Timer, &QTimer::timeout, this, &QtWidgetModel::TimerDone );
 }
 
 QtWidgetModel::~QtWidgetModel()
 {
-  if (m_Timer)
-    delete m_Timer;
+  delete m_taskAppli;
 }
 
 void
 QtWidgetModel
 ::NotifyUpdate()
 {
+  assert(!m_IsRunning && "Cannot update parameters while application is running.");
+
   // Update the parameters
   try
   {
@@ -118,108 +110,39 @@ QtWidgetModel
   emit SetApplicationReady(false);
   m_IsRunning = true;
 
-  //Buld corresponding command line and display to the Log tab
-
-  //Build XML DOM from m_application
-  OutputProcessXMLParameter::Pointer outXMLParam = OutputProcessXMLParameter::New();
-
-  TiXmlElement* XMLAppElement = outXMLParam->ParseApplication(m_Application);
-
-  //Create command line from the XML document
-  TiXmlElement * pName, *pParam;
-  std::ostringstream cmdLine;
-
-  cmdLine << "";
-
-  if(XMLAppElement)
-    {
-    pName = XMLAppElement->FirstChildElement("name");
-
-    cmdLine << "otbcli_" << pName->GetText();
-#ifdef _WIN32
-    cmdLine << ".bat";
-#endif
-    cmdLine << " ";
-
-    //Parse application parameters
-    pParam = XMLAppElement->FirstChildElement("parameter");
-
-    while(pParam)
-      {
-      //Get parameter key
-      cmdLine << "-";
-      cmdLine << pParam->FirstChildElement("key")->GetText();
-      cmdLine << " ";
-
-      //Some parameters can have multiple values. Test it and handle this
-      //specific case
-      TiXmlElement * values = pParam->FirstChildElement("values");
-
-      if (values)
-        {
-        //Loop over value
-        TiXmlElement * pValue = values->FirstChildElement("value");
-        while(pValue)
-          {
-          cmdLine << pValue->GetText();
-          cmdLine << " ";
-
-          pValue = pValue->NextSiblingElement(); // iteration over multiple values
-          }
-        }
-      else
-        {
-        //Get parameter value
-        cmdLine << pParam->FirstChildElement("value")->GetText();
-        cmdLine << " ";
-
-        //In case of OutputImageparameter we need to report output pixel type
-        TiXmlElement * pPixType = pParam->FirstChildElement("pixtype");
-
-        if (pPixType)
-          {
-          cmdLine << pPixType->GetText();
-          cmdLine << " ";
-          }
-        }
-
-      pParam = pParam->NextSiblingElement(); // iteration over parameters
-      }
-
-    //Insert a new line character at the end of the command line
-    cmdLine << std::endl;
-
-    //Report the command line string to the application logger
-    m_Application->GetLogger()->Write(itk::LoggerBase::INFO, cmdLine.str());
-    }
-
   // launch the output image writing
-  AppliThread *taskAppli = new AppliThread( m_Application );
-
-  QObject::connect( taskAppli, &AppliThread::ExceptionRaised,
-                    this, &QtWidgetModel::ExceptionRaised );
+  delete m_taskAppli;
+  m_taskAppli = new AppliThread(m_Application);
 
-  QObject::connect( taskAppli, &AppliThread::ApplicationExecutionDone,
-                    this, &QtWidgetModel::OnApplicationExecutionDone );
+  QObject::connect(m_taskAppli, &AppliThread::ExceptionRaised, this, &QtWidgetModel::ExceptionRaised);
 
-  QObject::connect( taskAppli, &AppliThread::finished,
-                    taskAppli, &AppliThread::deleteLater );
-
-  QObject::connect( this, &QtWidgetModel::Stop,
-                    taskAppli, &AppliThread::Stop );
+  QObject::connect(m_taskAppli, &AppliThread::ApplicationExecutionDone, this, &QtWidgetModel::OnApplicationExecutionDone);
 
   // Tell the Progress Reporter to begin
   emit SetProgressReportBegin();
 
-  taskAppli->Execute();
+  // Run the application
+  m_taskAppli->start();
 
   emit SetApplicationReady(true);
 }
 
+void QtWidgetModel::Stop()
+{
+  if (m_taskAppli && m_IsRunning)
+  {
+    m_taskAppli->Stop();
+    m_taskAppli->wait();
+    m_IsRunning = false;
+  }
+}
+
 void
 QtWidgetModel
 ::OnApplicationExecutionDone( int status )
 {
+  m_IsRunning = false;
+
   // For the progressReport to close the Progress widget
   // and the GUI to update message
   emit SetProgressReportDone( status );
@@ -230,18 +153,6 @@ QtWidgetModel
     oss << "Execution took "<< m_Application->GetLastExecutionTiming() << " sec";
     SendLogINFO(oss.str());
     }
-
-  // start timer
-  m_Timer->start();
-}
-
-void
-QtWidgetModel
-::TimerDone()
-{
-  m_IsRunning = false;
-  // Require GUI update.
-  NotifyUpdate();
 }
 
 void
@@ -333,6 +244,10 @@ AppliThread
   emit ApplicationExecutionDone( result );
 }
 
+bool QtWidgetModel::IsRunning() const
+{
+  return m_IsRunning;
+}
 }
 
 }
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetOutputProcessXMLParameter.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetOutputProcessXMLParameter.cxx
deleted file mode 100644
index 42418fb5f174fabaf7aaeb4f4142581b67eafbc3..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetOutputProcessXMLParameter.cxx
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "otbWrapperQtWidgetOutputProcessXMLParameter.h"
-
-#include <otbQtAdapters.h>
-
-namespace otb
-{
-namespace Wrapper
-{
-
-QtWidgetOutputProcessXMLParameter::QtWidgetOutputProcessXMLParameter(OutputProcessXMLParameter* param, QtWidgetModel* m, QWidget * parent)
-: QtWidgetParameterBase(param, m, parent),
-  m_XMLParam(param)
-{
-}
-
-QtWidgetOutputProcessXMLParameter::~QtWidgetOutputProcessXMLParameter()
-{
-}
-
-const QLineEdit*
-QtWidgetOutputProcessXMLParameter
-::GetInput() const
-{
-  return m_Input;
-}
-
-QLineEdit*
-QtWidgetOutputProcessXMLParameter
-::GetInput()
-{
-  return m_Input;
-}
-
-void QtWidgetOutputProcessXMLParameter::DoUpdateGUI()
-{
-  // Update the lineEdit
-  QString text(
-    QFile::decodeName( m_XMLParam->GetFileName() )
-  );
-;
-  if (text != m_Input->text())
-    m_Input->setText(text);
-}
-
-void QtWidgetOutputProcessXMLParameter::DoCreateWidget()
-{
-  // Set up input text edit
-  m_HLayout = new QHBoxLayout;
-  m_HLayout->setSpacing(0);
-  m_HLayout->setContentsMargins(0, 0, 0, 0);
-  m_Input = new QLineEdit(this);
-  m_Input->setToolTip(
-    QString::fromStdString( m_XMLParam->GetDescription() )
-  );
-  connect( m_Input, &QLineEdit::textChanged, this, &QtWidgetOutputProcessXMLParameter::SetFileName );
-  connect( m_Input, &QLineEdit::textChanged, GetModel(), &QtWidgetModel::NotifyUpdate );
-
-  m_HLayout->addWidget(m_Input);
-
-  // Set up input text edit
-  m_Button = new QPushButton(this);
-  m_Button->setText("...");
-  m_Button->setToolTip("Select file...");
-  m_Button->setMaximumWidth(m_Button->width());
-  connect( m_Button, &QPushButton::clicked, this, &QtWidgetOutputProcessXMLParameter::SelectFile );
-  m_HLayout->addWidget(m_Button);
-
-  this->setLayout(m_HLayout);
-}
-
-
-void
-QtWidgetOutputProcessXMLParameter
-::SelectFile()
-{
-  assert( m_Input!=NULL );
-
-  QString filename(
-    otb::GetSaveFilename(
-      this,
-      QString(),
-      m_Input->text(),
-      tr( "XML File (*.xml)" ),
-      NULL )
-  );
-
-  if( filename.isEmpty() )
-    return;
-
-  m_Input->setText( filename );
-}
-
-
-void QtWidgetOutputProcessXMLParameter::SetFileName(const QString& value)
-{
-  // save xml file name
-  m_XMLParam->SetValue(
-    QFile::encodeName( value ).constData()
-  );
-
-  // notify of value change
-  QString key( m_XMLParam->GetKey() );
-  emit ParameterChanged(key);
-
-
-}
-
-}
-}
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
index 2f382da98d8ba177b763b3264fae37c5a239f378..2b2ae79bd1add2aee3f4f376ff7d22168626ca09 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterFactory.cxx
@@ -33,14 +33,12 @@
 #include "otbWrapperQtWidgetInputFilenameListParameter.h"
 #include "otbWrapperQtWidgetInputImageParameter.h"
 #include "otbWrapperQtWidgetInputImageListParameter.h"
-#include "otbWrapperQtWidgetInputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetInputVectorDataListParameter.h"
 #include "otbWrapperQtWidgetInputVectorDataParameter.h"
 #include "otbWrapperQtWidgetListViewParameter.h"
 #include "otbWrapperQtWidgetModel.h"
 #include "otbWrapperQtWidgetOutputFilenameParameter.h"
 #include "otbWrapperQtWidgetOutputImageParameter.h"
-#include "otbWrapperQtWidgetOutputProcessXMLParameter.h"
 #include "otbWrapperQtWidgetOutputVectorDataParameter.h"
 #include "otbWrapperQtWidgetParameterBase.h"
 #include "otbWrapperQtWidgetParameterGroup.h"
@@ -121,8 +119,6 @@ QtWidgetParameterFactory::CreateQtWidget( Parameter* param, QtWidgetModel* model
   CREATEWIDGET(BoolParameter,          QtWidgetBoolParameter)
   CREATEWIDGET(ParameterGroup,          QtWidgetParameterGroup)
   CREATEWIDGET(RAMParameter,            QtWidgetRAMParameter)
-  CREATEWIDGET(OutputProcessXMLParameter,        QtWidgetOutputProcessXMLParameter)
-  CREATEWIDGET(InputProcessXMLParameter,        QtWidgetInputProcessXMLParameter)
 #undef CREATEWIDGET
 
   if (widget)
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
index 61c72aa250beeeffbc613e8f2beec7728dbfe7ef..7faea2ce2294065ac3a3b9d331891c9585e4451e 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetParameterGroup.cxx
@@ -50,8 +50,7 @@ void QtWidgetParameterGroup::DoCreateWidget()
 {
   // a GridLayout with two columns : parameter label / parameter widget
   QGridLayout *gridLayout = new QGridLayout;
-  gridLayout->setSpacing(1);
-  gridLayout->setContentsMargins(0, 0, 0, 0);
+  this->setLayout(gridLayout);
 
   unsigned int nbParams = m_ParamList->GetNumberOfParameters();
   for (unsigned int i = 0; i < nbParams; ++i)
@@ -63,15 +62,9 @@ void QtWidgetParameterGroup::DoCreateWidget()
       {
       ParameterGroup* paramAsGroup = dynamic_cast<ParameterGroup*>(param);
       ChoiceParameter* paramAsChoice = dynamic_cast<ChoiceParameter*>(param);
-      OutputProcessXMLParameter* paramAsInXML = dynamic_cast<OutputProcessXMLParameter*>(param);
-      InputProcessXMLParameter* paramAsOutXML = dynamic_cast<InputProcessXMLParameter*>(param);
-
-      bool paramIsXML = false;
-      if(paramAsInXML != nullptr || paramAsOutXML != nullptr)
-        paramIsXML = true;
 
-      if (paramAsGroup == nullptr && paramAsChoice == nullptr && !paramIsXML)
-        {
+      if (paramAsGroup == nullptr && paramAsChoice == nullptr)
+      {
         // Label (col 1)
         QWidget* label = new QtWidgetParameterLabel( rawParam , this);
         gridLayout->addWidget(label, i, 1);
@@ -139,8 +132,6 @@ void QtWidgetParameterGroup::DoCreateWidget()
         }
       }
     }
-
-  this->setLayout(gridLayout);
 }
 
 
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetProgressReport.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetProgressReport.cxx
deleted file mode 100644
index 4e958f82b2078727d204d1363c27a7579d2717ed..0000000000000000000000000000000000000000
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetProgressReport.cxx
+++ /dev/null
@@ -1,110 +0,0 @@
-/*
- * Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
- *
- * This file is part of Orfeo Toolbox
- *
- *     https://www.orfeo-toolbox.org/
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include "otbWrapperQtWidgetProgressReport.h"
-#include "otbWrapperOutputImageParameter.h"
-#include "itksys/SystemTools.hxx"
-
-#include "otbWrapperAddProcessToWatchEvent.h"
-
-namespace otb
-{
-namespace Wrapper
-{
-
-QtWidgetProgressReport::QtWidgetProgressReport(QtWidgetModel * model, QWidget * parent)
-  : QWidget(parent)
-  , m_CurrentProcess()
-{
-  m_Model = model;
-  connect(model, &QtWidgetModel::SetProgressReportBegin, this, &QtWidgetProgressReport::show );
-  connect(model, &QtWidgetModel::SetProgressReportDone, this, &QtWidgetProgressReport::close );
-  connect(model, &QtWidgetModel::SetProgressReportDone, this, &QtWidgetProgressReport::RemoveLayout );
-  connect(this, &QtWidgetProgressReport::AddNewProcessToReport, this, &QtWidgetProgressReport::ReportProcess );
-
-  m_Layout = new QVBoxLayout;
-  this->setLayout(m_Layout);
-
-  m_AddProcessCommand = AddProcessCommandType::New();
-  m_AddProcessCommand->SetCallbackFunction( this, &QtWidgetProgressReport::ProcessEvent );
-
-  this->show();
-}
-
-QtWidgetProgressReport::~QtWidgetProgressReport()
-{
-}
-
-void QtWidgetProgressReport::SetApplication(Application::Pointer app)
-{
-  m_Application = app;
-  m_Application->AddObserver( AddProcessToWatchEvent(), m_AddProcessCommand.GetPointer() );
-}
-
-void
-QtWidgetProgressReport::ProcessEvent( itk::Object * itkNotUsed(caller),
-                                      const itk::EventObject & ev )
-{
-  if( typeid( otb::Wrapper::AddProcessToWatchEvent ) == typeid( ev ) )
-    {
-    const AddProcessToWatchEvent* eventToWatch = dynamic_cast< const  AddProcessToWatchEvent*> ( &ev );
-
-    if(eventToWatch)
-      {
-      m_CurrentProcess = eventToWatch->GetProcess();
-      m_CurrentDescription =  eventToWatch->GetProcessDescription();
-      emit AddNewProcessToReport();
-      }
-    }
-}
-
-void QtWidgetProgressReport::ReportProcess ( )
-{
-  // Build the widget containing the QtProgressBar for the current
-  // process
-
-  // Create a itk::QtProgressBar, observing the event ProgressEvent
-  itk::QtProgressBar * bar =  new itk::QtProgressBar(this);
-  connect( bar, &itk::QtProgressBar::SetValueChanged, bar, &itk::QtProgressBar::setValue );
-  connect( m_Model, &QtWidgetModel::SetProgressReportDone, bar, &itk::QtProgressBar::reset );
-  bar->Observe(m_CurrentProcess);
-
-  // label
-  QLabel *label = new QLabel(QString(m_CurrentDescription.c_str()), this);
-
-  // Build the layout and store the pointers
-  m_Layout->addWidget(label);
-  m_Layout->addWidget(bar);
-}
-
-void QtWidgetProgressReport::RemoveLayout()
-{
-  // Remove the children of the layout (progress bar widgets)
-  QLayoutItem *child;
-  while ((child = this->layout()->takeAt(0)) != nullptr)
-    {
-    delete child->widget();
-    delete child;
-    }
-}
-
-}
-}
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetSimpleProgressReport.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetSimpleProgressReport.cxx
index 8df23531e7646587a7bf1e726cf701c365197936..19fffe036460e8a2425103319d84855328a780f2 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetSimpleProgressReport.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetSimpleProgressReport.cxx
@@ -30,44 +30,29 @@ namespace otb
 namespace Wrapper
 {
 
-QtWidgetSimpleProgressReport::QtWidgetSimpleProgressReport(QtWidgetModel * model, QWidget * parent)
-  : QWidget(parent)
-  , m_CurrentProcess()
+QtWidgetSimpleProgressReport::QtWidgetSimpleProgressReport(QWidget* parent) : itk::QtProgressBar(parent), m_CurrentProcess()
+{
+}
+
+void QtWidgetSimpleProgressReport::SetModel(QtWidgetModel* model)
 {
-  m_Model = model;
   connect(model, &QtWidgetModel::SetProgressReportBegin, this, &QtWidgetSimpleProgressReport::show );
   connect(model, &QtWidgetModel::SetProgressReportDone, this, &QtWidgetSimpleProgressReport::Init );
   connect(this, &QtWidgetSimpleProgressReport::AddNewProcessToReport, this, &QtWidgetSimpleProgressReport::ReportProcess );
 
-  m_Layout = new QVBoxLayout;
-  this->setLayout(m_Layout);
-
   m_AddProcessCommand = AddProcessCommandType::New();
   m_AddProcessCommand->SetCallbackFunction( this, &QtWidgetSimpleProgressReport::ProcessEvent );
 
-  m_Bar =  new itk::QtProgressBar(this);
-
-  m_Label = new QLabel("No process", this);
-  m_Label->setWordWrap(true);
-  connect( m_Bar, &itk::QtProgressBar::SetValueChanged, m_Bar, &itk::QtProgressBar::setValue );
-  connect( m_Model, &QtWidgetModel::SetProgressReportDone, m_Bar, &itk::QtProgressBar::reset );
+  connect(this, &itk::QtProgressBar::SetValueChanged, this, &itk::QtProgressBar::setValue);
+  connect(model, &QtWidgetModel::SetProgressReportDone, this, &itk::QtProgressBar::reset);
 
-  m_Layout->addWidget(m_Label);
-  m_Layout->addWidget(m_Bar);
-
-  this->show();
+  model->GetApplication()->AddObserver(AddProcessToWatchEvent(), m_AddProcessCommand.GetPointer());
 }
 
 QtWidgetSimpleProgressReport::~QtWidgetSimpleProgressReport()
 {
 }
 
-void QtWidgetSimpleProgressReport::SetApplication(Application::Pointer app)
-{
-  m_Application = app;
-  m_Application->AddObserver( AddProcessToWatchEvent(), m_AddProcessCommand.GetPointer() );
-}
-
 void
 QtWidgetSimpleProgressReport::ProcessEvent( itk::Object * itkNotUsed(caller),
                                       const itk::EventObject & event2 )
@@ -87,15 +72,14 @@ QtWidgetSimpleProgressReport::ProcessEvent( itk::Object * itkNotUsed(caller),
 
 void QtWidgetSimpleProgressReport::ReportProcess()
 {
-  m_Bar->Observe(m_CurrentProcess);
-  m_Label->setText(QString(m_CurrentDescription.c_str()));
+  this->Observe(m_CurrentProcess);
+  emit SetText(QString::fromStdString(m_CurrentDescription));
 }
 
-
 void QtWidgetSimpleProgressReport::Init()
 {
-  m_Bar->setValue(0);
-  m_Label->setText("No process");
+  this->setValue(0);
+  emit SetText(QString(""));
 }
 
 }
diff --git a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetView.cxx b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetView.cxx
index 6b84fa510c85722a183a0a1ed7ab71f0236cea69..e72a1b4dd4df05fecabe758550aa155212d53d5d 100644
--- a/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetView.cxx
+++ b/Modules/Wrappers/QtWidget/src/otbWrapperQtWidgetView.cxx
@@ -20,8 +20,6 @@
 
 #include "otbWrapperQtWidgetView.h"
 
-#include <functional>
-
 #include "otbWrapperQtWidgetParameterGroup.h"
 #include "otbWrapperQtWidgetParameterFactory.h"
 #include "otbWrapperOutputFilenameParameter.h"
@@ -54,36 +52,11 @@ QtWidgetView::QtWidgetView( const otb::Wrapper::Application::Pointer & otbApp,
 		QWidget* parent,
 		Qt::WindowFlags flags ) :
   QWidget( parent, flags ),
-  m_IconPathDone(""),
-  m_IconPathFailed(""),
   m_Model( NULL ),
-  m_ExecButton( NULL ),
-  m_QuitButton( NULL ),
-  m_Message( NULL ),
-  m_LogText( NULL ),
-  m_TabWidget( NULL ),
-  m_IsClosable( true ),
   m_IsRunning(false)
 {
   setObjectName( QtWidgetView::OBJECT_NAME );
-
   m_Model = new otb::Wrapper::QtWidgetModel( otbApp );
-  m_QuitShortcut = new QShortcut(QKeySequence("Ctrl+Q"), this);
-
-  QObject::connect(
-    m_Model, &QtWidgetModel::SetProgressReportBegin,
-    this, &QtWidgetView::OnProgressReportBegin
-  );
-
-  QObject::connect(
-    m_Model, &QtWidgetModel::SetProgressReportDone,
-    this, &QtWidgetView::OnProgressReportEnd
-  );
-
-  QObject::connect(
-    m_Model, &QtWidgetModel::ExceptionRaised,
-    this, &QtWidgetView::OnExceptionRaised
-  );
 }
 
 QtWidgetView::~QtWidgetView()
@@ -94,172 +67,14 @@ QtWidgetView::~QtWidgetView()
 
 void QtWidgetView::CreateGui()
 {
-  // Create a VBoxLayout with the header, the input widgets, and the footer
   QVBoxLayout *mainLayout = new QVBoxLayout;
-  m_TabWidget = new QTabWidget(this);
-
-  m_TabWidget->addTab(CreateInputWidgets(), tr("Parameters"));
-  m_LogText = new QTextEdit(this);
-  connect( m_Model->GetLogOutput(), &QtLogOutput::NewContentLog, m_LogText, &QTextEdit::append );
-  m_TabWidget->addTab(m_LogText, tr("Logs"));
-  mainLayout->addWidget(m_TabWidget);
-
-  m_Message = new QLabel("<center><font color=\"#FF0000\">"+tr("Select parameters")+"</font></center>", this);
-  connect( m_Model, &QtWidgetModel::SetApplicationReady, this, &QtWidgetView::UpdateMessageAfterApplicationReady );
-  connect( m_Model, &QtWidgetModel::SetProgressReportDone, this, &QtWidgetView::UpdateMessageAfterExecution );
-  mainLayout->addWidget(m_Message);
-
-  otb::Wrapper::QtWidgetSimpleProgressReport * progressReport = new otb::Wrapper::QtWidgetSimpleProgressReport(m_Model, this);
-  progressReport->SetApplication(m_Model->GetApplication());
-
-  QWidget* footer = CreateFooter();
-
-  QHBoxLayout *footLayout = new QHBoxLayout;
-  footLayout->addWidget(progressReport);
-  footLayout->addWidget(footer);
-  mainLayout->addLayout(footLayout);
-
-  footLayout->setAlignment(footer, Qt::AlignBottom);
-
-  QGroupBox *mainGroup = new QGroupBox(this);
-  mainGroup->setLayout(mainLayout);
-
-  QVBoxLayout  *finalLayout = new QVBoxLayout;
-  finalLayout->addWidget(mainGroup);
-
-  // Make the final layout to the widget
-  this->setLayout(finalLayout);
-}
-
-void QtWidgetView::UpdateMessageAfterExecution(int status)
-{
-  if (status >= 0)
-    {
-    m_Message->setText("<center>"+QString(m_IconPathDone.c_str())+
-      "<font color=\"#00A000\">"+tr("Done")+"</font></center>");
-    }
-  else
-    {
-    m_Message->setText("<center>"+QString(m_IconPathFailed.c_str())+
-      "<font color=\"#FF0000\">"+tr("Failed")+"</font></center>");
-    }
-  m_ExecButton->setText(QObject::tr("Execute"));
-  m_IsRunning = false;
-}
-
-void QtWidgetView::UpdateMessageAfterApplicationReady( bool val )
-{
-  if(!m_IsRunning)
-    {
-    if(val == true)
-      m_Message->setText("<center><font color=\"#00A000\">"+tr("Ready to run")+"</font></center>");
-    else
-      m_Message->setText("<center><font color=\"#FF0000\">"+tr("Select parameters")+"</font></center>");
-    }
+  this->setLayout(mainLayout);
+  mainLayout->addWidget(CreateInputWidgets());
 }
 
 QWidget* QtWidgetView::CreateInputWidgets()
 {
-  QScrollArea *scrollArea = new QScrollArea(this);
-
-  scrollArea->setWidget( otb::Wrapper::QtWidgetParameterFactory::CreateQtWidget(
-      m_Model->GetApplication()->GetParameterList(),
-      m_Model,
-      this));
-  scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAsNeeded);
-  scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);
-  scrollArea->setWidgetResizable(true);
-
-  return scrollArea;
-}
-
-
-QWidget* QtWidgetView::CreateFooter()
-{
-  // an HLayout with two buttons : Execute and Quit
-  QGroupBox *footerGroup = new QGroupBox(this);
-  QHBoxLayout *footerLayout = new QHBoxLayout;
-
-  m_ExecButton = new QPushButton(footerGroup);
-  m_ExecButton->setDefault(true);
-  m_ExecButton->setEnabled(false);
-  m_ExecButton->setText(QObject::tr("Execute"));
-  connect( m_Model, &QtWidgetModel::SetApplicationReady, m_ExecButton, &QPushButton::setEnabled );
-  connect( m_ExecButton, &QPushButton::clicked, this, &QtWidgetView::OnExecButtonClicked );
-  connect( this, &QtWidgetView::ExecuteAndWriteOutput, m_Model, &QtWidgetModel::ExecuteAndWriteOutputSlot );
-  connect( this, &QtWidgetView::Stop, m_Model, &QtWidgetModel::Stop );
-
-  m_QuitButton = new QPushButton(footerGroup);
-  m_QuitButton->setText(QObject::tr("Quit"));
-  connect(m_QuitButton, &QPushButton::clicked, this, &QtWidgetView::close );
-
-  // Add Ctrl-Q shortcut to quit
-  connect( m_QuitShortcut, &QShortcut::activated, this, &QtWidgetView::close );
-
-  // Put the buttons on the right
-  footerLayout->addStretch();
-  footerLayout->addWidget(m_ExecButton);
-  footerLayout->addWidget(m_QuitButton);
-
-  footerGroup->setLayout(footerLayout);
-
-  return footerGroup;
-}
-
-void QtWidgetView::closeEvent( QCloseEvent * e )
-{
-  assert( e!=NULL );
-
-  if( !IsClosable() )
-    {
-    assert( GetModel()->GetApplication() );
-
-    QMessageBox::warning(
-      this,
-      tr( "Warning!" ),
-      tr( "OTB-Application '%1' cannot be closed while running!")
-      .arg( GetModel()->GetApplication()->GetDocName() )
-    );
-
-    e->ignore();
-
-    return;
-    }
-
-  QWidget::closeEvent( e );
-
-  emit QuitSignal();
-
-  deleteLater();
-}
-
-void
-QtWidgetView
-::OnExecButtonClicked()
-{
-  if (m_IsRunning)
-    {
-    m_Message->setText("<center><font color=\"#FF0000\">"+tr("Cancelling")+"...</font></center>");
-    emit Stop();
-    }
-  else
-    {
-    m_IsRunning =  true;
-    m_Message->setText("<center><font color=\"#FF0000\">"+tr("Running")+"</font></center>");
-    m_ExecButton->setText(QObject::tr("Cancel"));
-    emit ExecuteAndWriteOutput();
-    }
-}
-
-void QtWidgetView::UnhandledException(QString message)
-{
-  this->OnExceptionRaised(message);
-  m_LogText->append(message);
-}
-
-void QtWidgetView::OnExceptionRaised( QString /*message*/)
-{
-  m_TabWidget->setCurrentIndex(1);
+  return otb::Wrapper::QtWidgetParameterFactory::CreateQtWidget(m_Model->GetApplication()->GetParameterList(), m_Model, this);
 }
 
 bool QtWidgetView::IsRunning() const
@@ -272,29 +87,26 @@ QtWidgetModel* QtWidgetView::GetModel() const
 return m_Model;
 }
 
-bool QtWidgetView::IsClosable() const
-{
-  return m_IsClosable;
-}
-
-void QtWidgetView::SetClosable( bool enabled )
-{
-  m_IsClosable = enabled;
-
-  setEnabled( true );
-
-  if( m_QuitButton!=NULL )
-    m_QuitButton->setEnabled( m_IsClosable );
-}
-
-void QtWidgetView::OnProgressReportBegin()
+void QtWidgetView::Disable()
 {
-  SetClosable( false );
+  // Disable all widgets to make sure parameters are not updated when the application is running in another thread
+  for (QWidget* w : this->findChildren<QWidget*>())
+  {
+    w->setEnabled(false);
+  }
+  this->setEnabled(false);
 }
 
-void QtWidgetView::OnProgressReportEnd( int )
+void QtWidgetView::Enable()
 {
-  SetClosable( true );
+  // Reset all widgets of the view to their previous enabled state
+  this->setEnabled(true);
+  for (QWidget* w : this->findChildren<QWidget*>())
+  {
+    w->setEnabled(true);
+  }
+  // Resync widgets enabled state with parameter enabled flag
+  this->GetModel()->NotifyUpdate();
 }
 
 } // end of namespace Wrapper
diff --git a/Modules/Wrappers/QtWidget/test/otbWrapperQtWidgetShowWidget.cxx b/Modules/Wrappers/QtWidget/test/otbWrapperQtWidgetShowWidget.cxx
index 9477a89fa6ec0bf8c2139daa17d47bcba11fbd9f..8f566438d7d6d898e44435460c72dcb2afa85da3 100644
--- a/Modules/Wrappers/QtWidget/test/otbWrapperQtWidgetShowWidget.cxx
+++ b/Modules/Wrappers/QtWidget/test/otbWrapperQtWidgetShowWidget.cxx
@@ -25,7 +25,6 @@
 #include "otbQtApplication.h"
 #include "otbWrapperApplicationRegistry.h"
 #include "otbWrapperQtWidgetView.h"
-#include "otbWrapperQtWidgetProgressReport.h"
 #include "itksys/SystemTools.hxx"
 
 
@@ -33,7 +32,6 @@ using otb::Wrapper::Application;
 using otb::Wrapper::ApplicationRegistry;
 using otb::Wrapper::QtApplication;
 using otb::Wrapper::QtWidgetView;
-using otb::Wrapper::QtWidgetProgressReport;
 
 
 struct static_finalizer
@@ -113,19 +111,6 @@ otbWrapperQtWidgetShowWidget( int argc, char* argv[] )
 	  );
 
 	  layout->addWidget( qwv );
-
-	  // Create OTB-Application progress-report.
-	  //
-	  // SAT: QWidget should be created without parent when adding
-	  // into QLayout (because QLayout will take ownership of the
-	  // reference-counted pointer) but OTB API doesn't defined default nullptr
-	  // value such as in Qt.
-	  QtWidgetProgressReport * qwpr =
-	    new QtWidgetProgressReport( qwv->GetModel(), widget );
-
-	  qwpr->SetApplication( otb_application );
-
-	  layout->addWidget( qwpr );
 	}
         widget->setLayout( layout );
       }
diff --git a/Modules/Wrappers/SWIG/src/otbApplication.i b/Modules/Wrappers/SWIG/src/otbApplication.i
index 896016f85cd3f57816980e21b683ee351abf3cc2..fbfcdb06a6edf8a272cb0d4b15d5eff2eb1461f2 100644
--- a/Modules/Wrappers/SWIG/src/otbApplication.i
+++ b/Modules/Wrappers/SWIG/src/otbApplication.i
@@ -95,8 +95,6 @@ namespace Wrapper
     ParameterType_Group,
     ParameterType_ListView,
     ParameterType_RAM,
-    ParameterType_OutputProcessXML,
-    ParameterType_InputProcessXML,
     ParameterType_Bool
   } ParameterType;
 
@@ -219,12 +217,16 @@ public:
   int Execute();
   int ExecuteAndWriteOutput();
 
+  void LoadParametersFromXML(const std::string& filename);
+  void SaveParametersToXML(const std::string& filename);
+
 #if SWIGPYTHON
   Logger* GetLogger();
 #endif
   unsigned long itk::Object::AddObserver(const EventObject & event, 
                                           Command * command);
 
+  bool IsDeprecated();
 
 #if SWIGPYTHON
   %extend 
@@ -312,8 +314,6 @@ public:
 
   void FreeRessources();
 
-  itkSetStringMacro(DocName);
-  itkGetStringMacro(DocName);
   itkSetStringMacro(DocLongDescription);
   itkGetStringMacro(DocLongDescription);
   itkSetStringMacro(DocAuthors);
@@ -574,17 +574,12 @@ class ApplicationProxy(object):
   %pythoncode
     {
 
-		def __str__(self):
-			s  = self.GetDocName()
-
 		def GetParameterTypeAsString(self, parameter_type):
 			return {
-				ParameterType_InputProcessXML : 'ParameterType_InputProcessXML',
 				ParameterType_String : 'ParameterType_String',
 				ParameterType_InputFilename : 'ParameterType_InputFilename',
 				ParameterType_OutputImage : 'ParameterType_OutputImage',
 				ParameterType_OutputVectorData : 'ParameterType_OutputVectorData',
-				ParameterType_OutputProcessXML : 'ParameterType_OutputProcessXML',
 				ParameterType_OutputFilename : 'ParameterType_OutputFilename',
 				ParameterType_Directory : 'ParameterType_Directory',
 				ParameterType_InputImage : 'ParameterType_InputImage',
@@ -604,7 +599,7 @@ class ApplicationProxy(object):
 			}.get(parameter_type, 'ParameterType_UNKNOWN')
 
 		def __str__(self):
-			s  = self.GetDocName()
+			s  = self.GetName()
 			s += '\n'
 			s += self.GetDocLongDescription()
 			return s
@@ -615,10 +610,10 @@ class ApplicationProxy(object):
 
 		def SetParameterValue(self, paramKey, value):
 			paramType = self.GetParameterType(paramKey)
-			if paramType in [ParameterType_InputProcessXML, ParameterType_RAM,
+			if paramType in [ParameterType_RAM,
 											 ParameterType_String, ParameterType_InputFilename,
 											 ParameterType_OutputImage, ParameterType_OutputVectorData,
-											 ParameterType_OutputProcessXML, ParameterType_OutputFilename,
+											 ParameterType_OutputFilename,
 											 ParameterType_Directory, ParameterType_InputImage,
 											 ParameterType_InputVectorData]:
 			  return self.SetParameterString(paramKey, value)
@@ -649,10 +644,10 @@ class ApplicationProxy(object):
 
 		def GetParameterValue(self, paramKey):
 			paramType = self.GetParameterType(paramKey)
-			if paramType in [ParameterType_InputProcessXML,
+			if paramType in [
 											 ParameterType_String, ParameterType_InputFilename,
 											 ParameterType_OutputImage, ParameterType_OutputVectorData,
-											 ParameterType_OutputProcessXML, ParameterType_OutputFilename,
+											 ParameterType_OutputFilename,
 											 ParameterType_Directory, ParameterType_InputImage,
 											 ParameterType_InputVectorData]:
 			  return self.GetParameterString(paramKey)
@@ -906,6 +901,8 @@ public:
         application = _otbApplication.Registry_CreateApplicationWithoutLogger(name)
         if application is not None:
             application.SetupLogger()
+            if application.IsDeprecated():
+                application.GetLogger().Warning("This application is deprecated and will be removed in a future OTB release")
         return application
   }
   #else
diff --git a/Modules/Wrappers/SWIG/src/otbPythonLogOutput.i b/Modules/Wrappers/SWIG/src/otbPythonLogOutput.i
index 4bd7852b2ee7540e8cacb172ecbca7ba2d376ffa..748c8bfef4820b6bd9a04c6d19d8c57f61ca7a84 100644
--- a/Modules/Wrappers/SWIG/src/otbPythonLogOutput.i
+++ b/Modules/Wrappers/SWIG/src/otbPythonLogOutput.i
@@ -72,6 +72,15 @@ public:
   virtual void AddLogOutput(itkLogOutput *output);
   static Logger * Instance();
   void ResetOutputs();
+
+  // Wrap message methods so we can print stuff from Python
+  void Debug(std::string const & message);
+  void Info(std::string const & message);
+  void Warning(std::string const & message);
+  void Critical(std::string const & message);
+  void Error(std::string const & message);
+  void Fatal(std::string const & message);
+
 protected:
   Logger();
   virtual ~Logger();
diff --git a/Modules/Wrappers/SWIG/test/python/PythonInXMLTest.py b/Modules/Wrappers/SWIG/test/python/PythonInXMLTest.py
index be223358df88ffa2f417a5c8c320f87b7120400f..70207aaf49acc0655e6213e8e3f3431a45a6944e 100644
--- a/Modules/Wrappers/SWIG/test/python/PythonInXMLTest.py
+++ b/Modules/Wrappers/SWIG/test/python/PythonInXMLTest.py
@@ -26,10 +26,10 @@
 #
 
 def test(otb, argv):
-	app = otb.Registry.CreateApplication('BandMath')
+    app = otb.Registry.CreateApplication('BandMath')
 
-	app.SetParameterString("inxml", argv[1])
-	app.UpdateParameters()
+    app.LoadParametersFromXML(argv[1])
+    #app.UpdateParameters()
 
-	app.SetParameterString("out"  , argv[-1])
-	app.ExecuteAndWriteOutput()
+    app.SetParameterString("out"  , argv[-1])
+    app.ExecuteAndWriteOutput()
diff --git a/Modules/Wrappers/SWIG/test/python/PythonNewStyleParametersTest.py b/Modules/Wrappers/SWIG/test/python/PythonNewStyleParametersTest.py
index d1c0fa45a5e840fe3e1ff3482e39a35f99b29dd3..ea6203a0545a537a4f60bc7a556fd69d947b21d6 100644
--- a/Modules/Wrappers/SWIG/test/python/PythonNewStyleParametersTest.py
+++ b/Modules/Wrappers/SWIG/test/python/PythonNewStyleParametersTest.py
@@ -98,14 +98,6 @@ def test(otb, argv):
 	app.SetParameterString('outputs.mode', 'orthofit')
 	cm_assert(app.OUTPUTS.MODE, 'orthofit')
 
-	#14 - inputxml parameter set
-	app.INXML = argv[3]
-	cm_assert(app.GetParameterString('inxml'), argv[3])
-
-	#15 - outputxml parameter get
-	app.SetParameterString('outxml', 'output.xml')
-	cm_assert("output.xml", app.OUTXML)
-
 	#16 - parameter float get
 	app.SetParameterFloat('elev.default', 5.0)
 	cm_assert(5.0, app.ELEV.DEFAULT)
diff --git a/Modules/Wrappers/SWIG/test/python/PythonOutXMLTest.py b/Modules/Wrappers/SWIG/test/python/PythonOutXMLTest.py
index dcbe45c4a52514521ed50a4ae34df24a5c141e23..dca30937e29c676d209b719fd43750e1547824b3 100644
--- a/Modules/Wrappers/SWIG/test/python/PythonOutXMLTest.py
+++ b/Modules/Wrappers/SWIG/test/python/PythonOutXMLTest.py
@@ -26,17 +26,16 @@
 #
 
 def test(otb, argv):
-	imagelist = argv[1:-2]
-	exp = "cos(im1b1)+im2b1*im3b1-im3b2+ndvi(im3b3, im3b4)"
-	out = argv[-2]
-	outxml = argv[-1]
-	app = otb.Registry.CreateApplication('BandMath')
-	app.SetParameterStringList("il", imagelist, True)
-	app.SetParameterString("out", out, True)
-	app.SetParameterString("exp", exp, True)
-	app.SetParameterString("outxml", outxml, True)
-	app.UpdateParameters()
-#for paramKey in app.GetParametersKeys():
-  #app.GetParameterValue(paramKey)
-  #print app.HasUserValue(paramKey)
-	app.ExecuteAndWriteOutput()
+    imagelist = argv[1:-2]
+    exp = "cos(im1b1)+im2b1*im3b1-im3b2+ndvi(im3b3, im3b4)"
+    out = argv[-2]
+    outxml = argv[-1]
+
+    app = otb.Registry.CreateApplication('BandMath')
+    app.SetParameterStringList("il", imagelist, True)
+    app.SetParameterString("out", out, True)
+    app.SetParameterString("exp", exp, True)
+
+    app.SaveParametersToXML(outxml)
+
+    app.ExecuteAndWriteOutput()
diff --git a/NOTICE b/NOTICE
index 10cc07d9a347054e581a312b95d868cd410b35ea..ece9fc15b3d6f6a430463bfdde6512cb794595ee 100644
--- a/NOTICE
+++ b/NOTICE
@@ -334,20 +334,6 @@ binaries:
     http://www.boost.org/LICENSE_1_0.txt
 
 
-* CMake/UseJava.cmake
-    Copyright 2010-2011 Andreas schneider <asn@redhat.com>
-    Copyright 2010 Ben Boeckel <ben.boeckel@kitware.com>
-    BSD 3-Clause license
-    https://opensource.org/licenses/BSD-3-Clause
-
-
-* CMake/UseJavaClassFilelist.cmake
-* CMake/UseJavaSymlinks.cmake
-    Copyright 2010-2011 Andreas schneider <asn@redhat.com>
-    BSD 3-Clause license
-    https://opensource.org/licenses/BSD-3-Clause
-
-
 * CMake/UseSWIGLocal.cmake
     Copyright 2004-2009 Kitware, Inc.
     Copyright 2009 Mathieu Malaterre <mathieu.malaterre@gmail.com>
diff --git a/Packaging/CMakeLists.txt b/Packaging/CMakeLists.txt
index ca735ac2a31163959094441a3163fc86f3f2a9d3..18b1b9fc8b6526fc428792bf663d1a974a771ee9 100644
--- a/Packaging/CMakeLists.txt
+++ b/Packaging/CMakeLists.txt
@@ -136,7 +136,6 @@ include(cleanup_package)
 include(install_include_dirs)
 include(install_importlibs)
 include(install_python_bindings)
-include(install_java_bindings)
 include(install_share_dirs)
 include(install_cmake_files)
 include(install_qtdev_files)
diff --git a/Packaging/install_java_bindings.cmake b/Packaging/install_java_bindings.cmake
deleted file mode 100644
index 0c9d9358b042a3f16f7f8b1c2441ff8f421ca41e..0000000000000000000000000000000000000000
--- a/Packaging/install_java_bindings.cmake
+++ /dev/null
@@ -1,27 +0,0 @@
-#
-# Copyright (C) 2005-2019 Centre National d'Etudes Spatiales (CNES)
-#
-# This file is part of Orfeo Toolbox
-#
-#     https://www.orfeo-toolbox.org/
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-#     http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-function(install_java_bindings)
-  if(HAVE_JAVA)
-    install(FILES ${SUPERBUILD_INSTALL_DIR}/lib/otb/java/org.otb.application.jar
-      DESTINATION ${PKG_STAGE_DIR}/lib/java
-      )
-  endif()
-endfunction()
diff --git a/SuperBuild/CMake/External_otb.cmake b/SuperBuild/CMake/External_otb.cmake
index 556ff87310f79077eb82dfa548106c40c9cf9cd9..d27d88196847396ba6037414ff4f47413b09bf0a 100644
--- a/SuperBuild/CMake/External_otb.cmake
+++ b/SuperBuild/CMake/External_otb.cmake
@@ -79,7 +79,7 @@ if(OTB_USE_MUPARSERX)
   ADD_SUPERBUILD_CMAKE_VAR(OTB MUPARSERX_LIBRARY)
 endif()
 
-if(OTB_WRAP_PYTHON OR OTB_WRAP_JAVA)
+if(OTB_WRAP_PYTHON)
   ADD_SUPERBUILD_CMAKE_VAR(OTB SWIG_EXECUTABLE)
   ADDTO_DEPENDENCIES_IF_NOT_SYSTEM(OTB SWIG)
 endif()
@@ -207,7 +207,6 @@ ExternalProject_Add(OTB
   -DOTB_USE_OPENMP:BOOL=${OTB_USE_OPENMP}
   -DOTB_USE_GSL:BOOL=${OTB_USE_GSL}
   -DOTB_WRAP_PYTHON:BOOL=${OTB_WRAP_PYTHON}
-  -DOTB_WRAP_JAVA:BOOL=${OTB_WRAP_JAVA}
   -DOTB_USE_MPI:BOOL=${OTB_USE_MPI}
   -DOTB_USE_SPTW:BOOL=${OTB_USE_SPTW}
   -DPYTHON_EXECUTABLE:PATH=${PYTHON_EXECUTABLE}
diff --git a/SuperBuild/CMakeLists.txt b/SuperBuild/CMakeLists.txt
index 27f42a751b0c8966d6775369645e9c39a43b6b80..4eaa0f1c4a6a6666564b20a23d582338053dfd00 100644
--- a/SuperBuild/CMakeLists.txt
+++ b/SuperBuild/CMakeLists.txt
@@ -18,8 +18,6 @@
 # limitations under the License.
 #
 
-## COMMMENT to dirty superbuild artifact. TAG: 1.
-
 cmake_minimum_required(VERSION 3.3.0)
 
 project(OTB-SuperBuild)
@@ -352,7 +350,6 @@ find_path(OTB_DATA_ROOT README-OTB-Data
 
 # SWIG Wrapping
 option(OTB_WRAP_PYTHON "Enable python wrappers for OTB applications (requires SWIG)" ON)
-option(OTB_WRAP_JAVA "Enable java wrappers for OTB applications (requires SWIG)" OFF)
 
 configure_file(${CMAKE_SOURCE_DIR}/CMake/CTestCustom.cmake.in
   ${CMAKE_BINARY_DIR}/CTestCustom.cmake @ONLY)