Commit c03dfe0f authored by Julien Osman's avatar Julien Osman

Merge branch 'release-7.2-integration' into 'develop'

Release 7.2 integration into develop

See merge request !757
parents 4c0aa1fa 68c559d6
Pipeline #5924 passed with stages
in 177 minutes and 33 seconds
......@@ -351,43 +351,43 @@ ubuntu-xdk-report:
- job: ubuntu-xdk-qa-static-analysis
artifacts: true
#------------------------- Conda packages jobs ---------------------------------
conda-linux-build:
extends: .common
stage: build
only:
- nightly
- /^release-[0-9]+\.[0-9]+$/@orfeotoolbox/otb
image: $BUILD_IMAGE_REGISTRY/otb-conda-build:latest
allow_failure: true
script:
- export otb_tag=${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}
- ./CI/conda_build.sh
after_script: []
needs:
- job: fast-build
artifacts: false
artifacts:
when: always
expire_in: 24 hrs
paths:
- conda-bld/*
# #------------------------- Conda packages jobs ---------------------------------
# conda-linux-build:
# extends: .common
# stage: build
# only:
# - nightly
# - /^release-[0-9]+\.[0-9]+$/@orfeotoolbox/otb
# image: $BUILD_IMAGE_REGISTRY/otb-conda-build:latest
# allow_failure: true
# script:
# - export otb_tag=${CI_COMMIT_TAG:-$CI_COMMIT_SHORT_SHA}
# - ./CI/conda_build.sh
# after_script: []
# needs:
# - job: fast-build
# artifacts: false
# artifacts:
# when: always
# expire_in: 24 hrs
# paths:
# - conda-bld/*
conda-linux-deploy:
extends: .general
stage: deploy
only:
- /^release-[0-9]+\.[0-9]+$/@orfeotoolbox/otb
image: $BUILD_IMAGE_REGISTRY/otb-conda-build:latest
before_script:
# Provision efficiently the local LFS cache before checkout
- git lfs fetch origin $CI_COMMIT_SHA
- git checkout -f -q $CI_COMMIT_SHA
script:
- ./CI/conda_deploy.sh
needs:
- job: conda-linux-build
artifacts: yes
# conda-linux-deploy:
# extends: .general
# stage: deploy
# only:
# - /^release-[0-9]+\.[0-9]+$/@orfeotoolbox/otb
# image: $BUILD_IMAGE_REGISTRY/otb-conda-build:latest
# before_script:
# # Provision efficiently the local LFS cache before checkout
# - git lfs fetch origin $CI_COMMIT_SHA
# - git checkout -f -q $CI_COMMIT_SHA
# script:
# - ./CI/conda_deploy.sh
# needs:
# - job: conda-linux-build
# artifacts: yes
#---------------------------- Deploy job ---------------------------------------
deploy:
......
......@@ -58,7 +58,9 @@ Julien Michel <julien.michel@cnes.fr> Julien Michel <julien.
Julien Osman <julien.osman@csgroup.eu> Julien Osman <julien.osman@c-s.fr>
Laurențiu Nicola <lnicola@dend.ro> Laurentiu Nicola <lnicola@dend.ro>
Laurențiu Nicola <lnicola@dend.ro> Laurențiu Nicola <grayshade@gmail.com>
Luc Hermitte <luc.hermitte@c-s.fr> Luc Hermitte <luc.hermitte@cnes.fr>
Luc Hermitte <luc.hermitte@csgroup.eu>
Luc Hermitte <luc.hermitte@csgroup.eu> Luc Hermitte <luc.hermitte@c-s.fr>
Luc Hermitte <luc.hermitte@csgroup.eu> Luc Hermitte <luc.hermitte@cnes.fr>
Ludovic Hussonnois <ludovic.hussonnois@c-s.fr>
Manuel Grizonnet <manuel.grizonnet@cnes.fr>
Manuel Grizonnet <manuel.grizonnet@cnes.fr> Grizonnet Manuel <manuel.grizonnet@cnes.fr>
......
......@@ -70,7 +70,7 @@ if(XDK_PATH)
set(cmake_configure_option
"${cmake_configure_option}
CMAKE_PREFIX_PATH=${XDK_PATH}")
foreach(remote_module OTBTemporalGapFilling SertitObject otbGRM DiapOTBModule)
foreach(remote_module OTBTemporalGapFilling SertitObject otbGRM DiapOTBModule S1TilingSupportApplications)
set(cmake_configure_option
"${cmake_configure_option}
Module_${remote_module}:BOOL=ON")
......
#
# Copyright (C) 2005-2020 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 cmake module is based on a module written by Nuno Fachada, below is the
# original header of the module:
#
# This cmake module sets the project version and partial version
# variables by analysing the git tag and commit history. It expects git
......@@ -32,7 +55,7 @@
# Author: Nuno Fachada
function(get_package_name root_repo_dir project_version_string)
function(get_package_name root_repo_dir project project_version_string)
if(EXISTS "${root_repo_dir}/.git")
find_package(Git)
......@@ -40,12 +63,6 @@ function(get_package_name root_repo_dir project_version_string)
message(ERROR "git not found. Make sure git can be found in your PATH")
return()
endif()
message(STATUS "PROJECT_NAME: ${PROJECT_NAME}")
message(STATUS "VERSION MINOR: ${${PROJECT_NAME}_VERSION_MAJOR}")
message(STATUS "VERSION MAJOR: ${${PROJECT_NAME}_VERSION_MINOR}")
message(STATUS "VERSION PATCH: ${${PROJECT_NAME}_VERSION_PATCH}")
if(DEFINED ENV{CI_COMMIT_REF_NAME})
set(branch_name "$ENV{CI_COMMIT_REF_NAME}")
......@@ -65,7 +82,7 @@ function(get_package_name root_repo_dir project_version_string)
if("${branch_name}" MATCHES "^release-[0-9]+\\.[0-9]+\$")
set(${project_version_string} "${${PROJECT_NAME}_VERSION_MAJOR}.${${PROJECT_NAME}_VERSION_MINOR}.${${PROJECT_NAME}_VERSION_PATCH}" PARENT_SCOPE)
set(${project_version_string} "${${project}_VERSION_MAJOR}.${${project}_VERSION_MINOR}.${${project}_VERSION_PATCH}" PARENT_SCOPE)
else()
if(DEFINED ENV{CI_COMMIT_SHORT_SHA})
......@@ -73,9 +90,9 @@ function(get_package_name root_repo_dir project_version_string)
else()
execute_process(COMMAND ${GIT_EXECUTABLE} rev-parse --short HEAD
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}
OUTPUT_VARIABLE ${PROJECT_NAME}_COMMIT_SHA_STRING
OUTPUT_VARIABLE ${project}_COMMIT_SHA_STRING
OUTPUT_STRIP_TRAILING_WHITESPACE)
set(${project_version_string} "${branch_name}-${${PROJECT_NAME}_COMMIT_SHA_STRING}" PARENT_SCOPE)
set(${project_version_string} "${branch_name}-${${project}_COMMIT_SHA_STRING}" PARENT_SCOPE)
endif()
endif()
......@@ -99,7 +116,7 @@ function(get_package_name root_repo_dir project_version_string)
message(STATUS "M: ${_VERSION_MAJOR}, m: ${_VERSION_MINOR}, p: ${_VERSION_PATCH}")
set(${project_version_string} "${PROJECT_VERSION_STRING}" PARENT_SCOPE)
set(${project_version_string} "${PROJECT_VERSION_STRING}" PARENT_SCOPE)
endif()
......
......@@ -133,14 +133,11 @@ set(main_project_name ${_OTBModuleMacros_DEFAULT_LABEL})
#-----------------------------------------------------------------------------
# OTB version number.
set(OTB_VERSION_MAJOR "7")
set(OTB_VERSION_MINOR "1")
set(OTB_VERSION_MINOR "2")
set(OTB_VERSION_PATCH "0")
set(OTB_VERSION_STRING "${OTB_VERSION_MAJOR}.${OTB_VERSION_MINOR}.${OTB_VERSION_PATCH}")
get_package_name(${OTB_SOURCE_DIR} OTB_VERSION_STRING2)
message(STATUS "## ${OTB_VERSION_STRING2} ##")
get_package_name(${OTB_SOURCE_DIR} ${PROJECT_NAME} OTB_VERSION_STRING2)
# Monteverdi version number (follows OTB)
set( Monteverdi_VERSION_MAJOR ${OTB_VERSION_MAJOR} )
......
......@@ -235,7 +235,7 @@ placed exactly at the same position in the screenshots).
.. _BM:
.. figure:: Art/MonteverdiImages/BM.png
:numref:`BM`: Comparision of histograms before and after applying BandMath.
:numref:`BM`: Comparison of histograms before and after applying BandMath.
Segmentation
~~~~~~~~~~~~
......
......@@ -92,3 +92,13 @@ OTB_CREATE_APPLICATION(
NAME Mosaic
SOURCES otbMosaic.cxx
LINK_LIBRARIES ${${otb-module}_LIBRARIES})
OTB_CREATE_APPLICATION(
NAME ResetMargin
SOURCES otbResetMargin.cxx
LINK_LIBRARIES ${${otb-module}_LIBRARIES})
OTB_CREATE_APPLICATION(
NAME Synthetize
SOURCES otbSynthetize.cxx
LINK_LIBRARIES ${${otb-module}_LIBRARIES})
/*
* Copyright (C) 2005-2020 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 "otbResetMarginFilter.h"
#include "otbWrapperApplication.h"
#include "otbWrapperApplicationFactory.h"
namespace otb
{
namespace Wrapper
{
/**
* Application that fills margins to 0.
*
* This application is similar to ExtractROI with the difference the margin is
* kept, and filled with 0.
*
* This application is used to implement the _cut_ processing in S1Tiling
* chain.
*
* \author Luc Hermitte (CS Group)
* \copyright CNES
*/
class ResetMargin : public Application
{
public:
using Self = ResetMargin;
using Pointer = itk::SmartPointer<Self>;
itkNewMacro(Self);
itkTypeMacro(ResetMargin, otb::Wrapper::Application);
private:
void DoInit() override
{
SetName("ResetMargin");
SetDescription("This is the ResetMargin application");
SetDocLongDescription(
"This application is similar to ExtractROI in the sense it extracts a Region of Interrest.\n"
"However, the region outside of the ROI isn't trimmed, but set to 0.\n"
"\n"
"The filter set lines of index < threshold.y, and of index >= threshold.y to 0\n"
"The filter set columns of index < threshold.x, and of index >= threshold.x to 0");
SetDocLimitations("This application only works on scalar (and complex) images.");
SetDocAuthors("Luc Hermitte (CS Group)");
SetDocSeeAlso("ManageNoData, ExtractROI");
AddDocTag(Tags::Manip);
AddParameter(ParameterType_InputImage, "in", "Input image");
SetParameterDescription("in", "Scalar Input image");
AddParameter(ParameterType_OutputImage, "out", "Output Image");
SetParameterDescription("out", "Scalar Output image");
AddParameter(ParameterType_Group, "threshold", "threshold group");
AddParameter(ParameterType_Group, "threshold.y", "threshold group");
MandatoryOff("threshold");
MandatoryOff("threshold.y");
AddParameter(ParameterType_Int, "threshold.x", "Column index threshold");
SetParameterDescription("threshold.x", "Column index threshold");
SetDefaultParameterInt("threshold.x", 0);
AddParameter(ParameterType_Int, "threshold.y.start", "Top line index threshold");
SetParameterDescription("threshold.y.start", "Top line index threshold");
SetDefaultParameterInt("threshold.y.start", 0);
AddParameter(ParameterType_Int, "threshold.y.end", "Bottom line index threshold");
SetParameterDescription("threshold.y.end", "Bottom line index threshold");
SetDefaultParameterInt("threshold.y.end", 0);
SetMinimumParameterIntValue("threshold.x", 0);
SetMinimumParameterIntValue("threshold.y.start", 0);
SetMinimumParameterIntValue("threshold.y.end", 0);
AddRAMParameter();
SetDocExampleParameterValue("in", "ResetMarginInput100x100.tiff");
SetDocExampleParameterValue("threshold.x", "10");
SetDocExampleParameterValue("threshold.y.start", "12");
SetDocExampleParameterValue("threshold.y.end", "25");
SetDocExampleParameterValue("out", "ResetMargin.tiff");
SetOfficialDocLink();
}
void DoUpdateParameters() override
{}
void DoExecute() override
{
auto const thrX = GetParameterInt("threshold.x");
auto const thrYtop = GetParameterInt("threshold.y.start");
auto const thrYbot = GetParameterInt("threshold.y.end");
if (thrX < 0)
itkExceptionMacro("The column threshold is expected to be positive");
if (thrYtop < 0)
itkExceptionMacro("The top line threshold is expected to be positive");
if (thrYbot < 0)
itkExceptionMacro("The bottom line threshold is expected to be positive");
if (thrX == 0 && thrYtop == 0 && thrYbot == 0)
itkExceptionMacro("Don't use ResetMargin to clamp nothing!");
auto filter = ResetMarginFilter<FloatImageType>::New();
assert(thrX >= 0);
assert(thrYtop >= 0);
assert(thrYbot >= 0);
filter->SetThresholdX(thrX);
filter->SetThresholdYtop(thrYtop);
filter->SetThresholdYbot(thrYbot);
filter->SetInput(GetParameterFloatImage("in"));
SetParameterOutputImage("out", filter->GetOutput());
RegisterPipeline();
}
};
} // otb::Wrapper namespace
} // otb namespace
OTB_APPLICATION_EXPORT(otb::Wrapper::ResetMargin)
/*
* Copyright (C) 2005-2020 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 "otbSynthetizeFilter.h"
#include "otbWrapperApplication.h"
#include "otbWrapperApplicationFactory.h"
#include "otbImageFileReader.h"
#include <set>
namespace otb
{
namespace Wrapper
{
/**
* This application synthetizes/reduces multiple inputs into a single one.
* In that particular case, for each output pixel, this application will
* consider the corresponding pixels from all the input images, and keep the
* first one that isn't equal to 0.
*
* This application is used to implement the _concatenate_ processing in
* S1Tiling chain.
*
* \author Luc Hermitte (CS Group)
* \copyright CNES
* \todo find a better name for the application. Alas `otbConcatenate` is
* already used...
*/
class Synthetize : public Application
{
public:
using Self = Synthetize;
using Pointer = itk::SmartPointer<Self>;
itkNewMacro(Self);
itkTypeMacro(Synthetize, otb::Wrapper::Application);
private:
using ReaderType = otb::ImageFileReader<FloatImageType>;
void DoInit() override
{
SetName("Synthetize");
SetDescription("This is the Synthetize application");
SetDocLongDescription("Concatenate a list of images of the same size into a single single-channel image.\n\
It keeps the first non-null pixel value found in the input list.");
SetDocLimitations("This application will break incoming pipelines.");
SetDocAuthors("Luc Hermitte (CS Group)");
SetDocSeeAlso("");
AddDocTag(Tags::Manip);
AddParameter(ParameterType_StringList, "il", "Input images list");
SetParameterDescription("il", "Input image list");
AddParameter(ParameterType_OutputImage, "out", "Output Image");
SetParameterDescription("out","Output image.");
AddRAMParameter();
SetDocExampleParameterValue("il", "s1a_33NWB_vv_DES_007_20200108t044150.tif s1a_33NWB_vv_DES_007_20200108t044215.tif");
SetDocExampleParameterValue("out", "s1a_33NWB_vv_DES_007_20200108txxxxxx.tif");
SetOfficialDocLink();
}
void DoUpdateParameters() override
{}
void DoExecute() override
{
// Get the input image list
auto inNameList = GetParameterStringList("il");
// checking the input images list validity
auto const nbImages = inNameList.size();
if (nbImages == 0)
{
itkExceptionMacro("No input Image set...; please set at least one input image");
}
auto functor = [](auto input) {
assert(!input.empty());
auto const wh = std::find_if(
input.begin(), input.end()-1,
[](auto v){ return v != 0;});
return *wh;
};
auto filter = MakeSynthetizeFilter<FloatImageType, FloatImageType>(functor);
for (unsigned int i = 0; i < nbImages; i++)
{
// Given the explicit use of a Reader, this application cannot be used in
// a in-memory pipeline
auto reader = ReaderType::New();
// currentImage->SetExtendedFileName(inNameList[i]);
reader->SetFileName(inNameList[i]);
auto currentImage = reader->GetOutput();
currentImage->UpdateOutputInformation();
otbAppLogINFO(<< "Image #" << i + 1 << " has " << currentImage->GetNumberOfComponentsPerPixel() << " components");
filter->SetInput(i, currentImage);
m_Cache.insert(reader);
}
SetParameterOutputImage("out", filter->GetOutput());
RegisterPipeline(); // TODO: check!!
}
// Needed to register the inputs handled manually
// and not with a VectorImageList through GetParameterImageList
std::set<ReaderType::Pointer> m_Cache;
};
} // otb::Wrapper namespace
} // otb namespace
OTB_APPLICATION_EXPORT(otb::Wrapper::Synthetize)
......@@ -120,6 +120,18 @@ otb_test_application(NAME apTvUtExtractROIExtentFitVect
${OTBAPP_BASELINE}/apTvUtExtractROI.tif
${TEMP}/apTvUtExtractROIExtentFitVect.tif)
#----------- Clamp ROI tests ----------------
otb_test_application(NAME apTvUtResetMargin
APP ResetMargin
OPTIONS -in ${INPUTDATA}/ResetMarginInput100x100.tiff
-out ${TEMP}/apTvUtResetMargin.tif
-threshold.x 10
-threshold.y.start 12
-threshold.y.end 25
VALID --compare-image ${NOTOL}
${OTBAPP_BASELINE}/ResetMarginBaseline100x100.tiff
${TEMP}/apTvUtResetMargin.tif)
#----------- Rescale TESTS ----------------
otb_test_application(NAME apTvUtRescaleTest
APP Rescale
......@@ -203,6 +215,11 @@ otb_test_application(NAME apTvUtQuicklookROI1Channel
${TEMP}/apTvUtQuicklookROI1Channel.tif
)
# this tests has two baseline to take into account the bug described in
# https://github.com/opengeospatial/ogc_api_coverages/issues/92
# (half pixel shift applied in the wrong direction to GCPs with the PixelIsPoint convention)
# The first baseline corresponds to the gdal < 3.1.3 case,
# and the second baseline correspond to gdal >= 3.1.3 case.
otb_test_application(NAME apTvUtQuicklookWithGCP
APP Quicklook
OPTIONS -in ${INPUTDATA}/spot5SubWithGcps.tif
......@@ -252,6 +269,16 @@ otb_test_application(NAME apTvUtConcatenateImages_1Image
${TEMP}/apTvUtConcatenateImages_1Image.tif)
#----------- Synthetize TESTS ----------------
otb_test_application(NAME apTvUtSynthetize
APP Synthetize
OPTIONS -il ${INPUTDATA}/s1a_33NWB_vv_DES_007_20200108t044150_100x100.tif
${INPUTDATA}/s1a_33NWB_vv_DES_007_20200108t044215_100x100.tif
-out ${TEMP}/apTvUtSynthetize.tif
VALID --compare-image ${NOTOL}
${OTBAPP_BASELINE}/s1a_33NWB_vv_DES_007_20200108txxxxxx_100x100.tif
${TEMP}/apTvUtSynthetize.tif)
#----------- MultiResolutionPyramid TESTS ----------------
#----------- PixelValue TESTS ----------------
......@@ -443,8 +470,8 @@ otb_test_application(NAME apTvUtSplitImage
#----------- Mosaic TESTS ----------------
otb_test_application(NAME MosaicTestLargeFeathering
APP Mosaic
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestLargeFeathering.tif uint8
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestLargeFeathering.tif uint8
-comp.feather large
VALID --compare-image ${EPSILON_8}
${BASELINE}/apTvMosaicTestLargeFeathering.tif
......@@ -453,9 +480,9 @@ otb_test_application(NAME MosaicTestLargeFeathering
otb_test_application(NAME MosaicTestSlimFeathering
APP Mosaic
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestSlimFeathering.tif uint8
-comp.feather slim
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestSlimFeathering.tif uint8
-comp.feather slim
-comp.feather.slim.length 100
VALID --compare-image ${EPSILON_8}
${BASELINE}/apTvMosaicTestSlimFeathering.tif
......@@ -464,9 +491,9 @@ otb_test_application(NAME MosaicTestSlimFeathering
otb_test_application(NAME MosaicTestSimpleWithHarmoBandRmse
APP Mosaic
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestSimpleWithHarmoBandRmse.tif uint8
-harmo.method band
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestSimpleWithHarmoBandRmse.tif uint8
-harmo.method band
-harmo.cost rmse
VALID --compare-image ${EPSILON_8}
${BASELINE}/apTvMosaicTestSimpleWithHarmoBandRmse.tif
......@@ -474,9 +501,9 @@ otb_test_application(NAME MosaicTestSimpleWithHarmoBandRmse
otb_test_application(NAME MosaicTestSimpleWithHarmoRgbRmse
APP Mosaic
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestSimpleWithHarmoRgbRmse.tif uint8
-harmo.method rgb
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestSimpleWithHarmoRgbRmse.tif uint8
-harmo.method rgb
-harmo.cost rmse
VALID --compare-image ${EPSILON_8}
${BASELINE}/apTvMosaicTestSimpleWithHarmoRgbRmse.tif
......@@ -484,18 +511,18 @@ otb_test_application(NAME MosaicTestSimpleWithHarmoRgbRmse
otb_test_application(NAME MosaicTestSimpleWithCutline
APP Mosaic
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif
-out ${TEMP}/apTvMosaicTestSimpleWithCutline.tif uint8
-vdcut ${INPUTDATA}/SP67_FR_subset_1_cutline.shp ${INPUTDATA}/SP67_FR_subset_2_cutline.shp
OPTIONS -il ${INPUTDATA}/SP67_FR_subset_1.tif ${INPUTDATA}/SP67_FR_subset_2.tif