otb issueshttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues2024-03-05T09:32:20Zhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2378Divide OTB modules in independent repositories2024-03-05T09:32:20ZTristan LaurentDivide OTB modules in independent repositories# Resume
The goal of this is to separate each modules located in https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/tree/develop/Modules in a separate repo (except Core). A link will be done from otb main repo and each module with the ...# Resume
The goal of this is to separate each modules located in https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/tree/develop/Modules in a separate repo (except Core). A link will be done from otb main repo and each module with the "submodule" git mechanism.
# Pro and cons
Separating modules have several advantages:
- Improve CI build time
- Improve unittest jobs and runs as only module related features are tested
- Issues will now be module-related
- Developers only download needed source code
The CI jobs may increase in complexity as we introduce dependencies with modules. Thus we need to trigger modules jobs from core.
# Plan
- [ ] According to @ytanguy , create a gitlab group to handle all modules in a separate repo. This will be easier for bug tracking and management
- [ ] Start with Miscellaneous module, use OTB modules https://www.orfeo-toolbox.org/CookBook-9.0/RemoteModules.html
- [ ] Create external git repo, link it as a submodule
- [ ] OTB core must download corresponding submodule if the cmake -DOTBGroup_Miscellaneous is turned on
- [ ] Compile it separately, you may use OTB core artifact
- [ ] Adapt CI to run corresponding build job and tests
- [ ] Adapt otb CI to start module job when there is a new dependency (i.e. OTB core)
- [ ] Adapt bug tracking for each project ?
- [ ] Add a Readme with compilation help, otb integration, and some exemples
- [ ] Repeat for Remote
- [ ] Repeat for FeatureExtraction
- [ ] Repeat for SAR
- [ ] Repeat for Segmentation
- [ ] Repeat for Hyperspectral
- [ ] Repeat for Learning
- [ ] Repeat for StereoProcessing10.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2248Roadmap for OTB 9.02023-06-23T04:54:23ZJulien OsmanRoadmap for OTB 9.0### Introduction
During the [OTB User Days](https://www.orfeo-toolbox.org/otb-user-days-2021-plenary-talks-workshops-and-more/), we had the opportunity to talk about the future for OTB. This helped us make some plan regarding the coming...### Introduction
During the [OTB User Days](https://www.orfeo-toolbox.org/otb-user-days-2021-plenary-talks-workshops-and-more/), we had the opportunity to talk about the future for OTB. This helped us make some plan regarding the coming months. This issue is a story aiming at providing a single place to discuss everything that we (as a community) want to do in the scope of 9.0. Please, feel free to comment this issue to enhance the following propositions.
### Scope of OTB 9.0
The purpose of OTB 9.0 will be to improve packaging and maintainability.
#### Remove Qt, the GUI app and Monteverdi
The dependency to Qt makes the OTB package quite heavy, and requires much maintenance. The purpose of this dependency is to provide some nice GUI so user don't have to use the command line. QGIS with [the OTB plugin](https://www.orfeo-toolbox.org/CookBook/QGISInterface.html) allows one to run OTB applications without command line, and even more (display images, save result in memory, etc). So we wondered if the GUI provided with OTB were still relevant. The [survey](https://forum.orfeo-toolbox.org/t/please-participate-to-our-survey-how-do-you-use-otb/872) organized on November 2020 pointed out that very few people used it anyway.
Qt is also required to build Monteverdi. Monteverdi is a tool used for very specific applications, and does it's job very well. However, it hasn't evolved for years. So we decided to stop it's development. It will still be available for download with older version of OTB, but will be removed from OTB's main repository.
Of course, if anyone wants to take over the maintenance of the GUI or Monteverdi, they will be welcome to create a remote module.
#### Remove MacOS support
As MacOs is used by very few people, and Apple is moving to an ARM architecture, it is becoming more difficult to maintain OTB on this platform. Docker is fuly supported on MacOs, so we decided to concentrate on a Linux docker image that people can use on any MacOs.
#### Enhance the DEMHandler to manage huge directory
With OTB 8, when one provides a directory to the DEMHandler, it loads all the content of the directory into memory. If this directory contains a lot of DEM tiles, it can take a long time or even crash. We propose to improve the DEMHandler so it only loads the tiles needed by the process.
### Postponed to OTB 10
### Re-organize the packaging in modules
OTB should be modular, installable via light packages
#### Re-organize the tests
Many unit test relies on heavy data, and should be made a lot simpler.
#### Upgrade to ITK 5.x
ITK is one of OTB's the main dependencies. It's last major version, 5.0, was release on May 2019, and the latest version is 5.2.1 released on August 2021. But OTB still relies on ITK 4.x. The time has come for OTB to catch up. It requires [some adjustments](https://github.com/InsightSoftwareConsortium/ITK/blob/master/Documentation/ITK5MigrationGuide.md), but some preliminary work was already done (!194, !528).
~story9.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2109Improvement of OTB CI2022-01-10T09:54:18ZCédric TraizetImprovement of OTB CIThe goal of this is issue is to list possible features that would benefit OTB continuous integration. Feel free to comment and add new ideas !
* [ ] #1876: There is no debug build with tests in OTB. In particular this means assertion a...The goal of this is issue is to list possible features that would benefit OTB continuous integration. Feel free to comment and add new ideas !
* [ ] #1876: There is no debug build with tests in OTB. In particular this means assertion are not tested.
* [ ] #2105: Discussion on performance monitoring
* [x] #2094: Job to automatically build and deploy superbuild archives.
* [ ] #2091: Upgrade Linux distributions on CI.9.0.0https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1912List of must-fix to make the otb qgis plugin usable2022-01-06T14:39:34ZJulien MichelList of must-fix to make the otb qgis plugin usableThe purpose of this issue is to list all the issues that should be fixed in OTB or in OTB qgis plugin code so that the plugin can actually be used by Qgis users to perform tasks with Orfeo ToolBox wihout tip-toing with work-around, undoc...The purpose of this issue is to list all the issues that should be fixed in OTB or in OTB qgis plugin code so that the plugin can actually be used by Qgis users to perform tasks with Orfeo ToolBox wihout tip-toing with work-around, undocumented stuff and deep knowledge of OTB application engine insights.
The methodology I used to get this list is to try to follow plugin documentation to install the plugin on my company managed laptop, with the IT installed Qgis version (which is 3.4) and a recent windows develop (>6.2.0) binary package (when those were still existing). I then tried to perform the steps of the classification module of our training course in Qgis.
With 10 minutes of playing around, here is what I came up with:
* [X] According to documentation, I am supposed to modify the `QGIS_PLUGINPATH` environment variable of my system, which is forbidden by my company IT policy. I created a .bat script to set this environnement variable before starting Qgis. I expect this to be pretty common on company managed gear.
* [X] In control panel of the processing toolbox in Qgis, under the OTB menu, whenever I click on the `Maximum RAM to use` parameter, I have a pop-up error windows showing the message bellow. This happen several time in a raw, wherever I click. It also erases the previous value I had for this parameter and turns it into 0. If I want to use the spinbox to set this parameter without this error, I can only increment by 1 at a time (starting from 0, I would like to reach at least 256, which means as many clicks). If I type a value by hand and ignore several alike pop-up windows, it finally shows the value I set (but is it taken into account ?).
```
AttributeError: 'QgsSpinBox' object has no attribute 'setText'
Traceback (most recent call last):
File "C:/PROGRA~1/QGIS3~1.6/apps/qgis/./python/plugins\processing\gui\ConfigDialog.py", line 405, in setEditorData
editor.setText(value)
AttributeError: 'QgsSpinBox' object has no attribute 'setText'
```
* [X] First think that stroke me is that there is no layer selection for some vector data parameters. you have to browse through your file system even if you vector layer is already loaded.
* [ ] I had to put `" "` around all the paths (even the ones coming from qgis file explorer) because being on windows, my file path has a lot of `C:\`, `[NoSave]` and other stuff in it. Otherwise I get weird message when running (see below), and the application does not output anything.
```
2019-06-04 14:30:33 (FATAL) PolygonClassStatistics: itk::ERROR: Failed to open GDALDataset file C:\NoSave\[NoSave] : Invalid range specified
```
* [ ] Even when the application fails (for instance in the above case), the log tab behave as if everything went properly, with messages such as `Loading resulting layers` or `Algorithm Ended`.
* [X] In some applications that show a list of fields in a vector file to be selected, the UI component is a blank multiline text box. One has to know the name of the field that should be used here. This may be fine for single field, but in the training app you are supposed to give the list of fields that will be used for training. This list can be big (I have maybe 70 feature fields I wan to use), and nobody is going to type those 70 fields name by hand.
* [ ] For all outputs (file, image, vector), parameters can not be deactivated, because by default qgis will try to write to a temporary file. This means that all optional outputs are always active. This is annoying, especially with the following issue.
* [ ] OTB does not recognize the file extension provided by Qgis for vector temporary output (and probably for images output as well): write to a temporary ouptut can simply not be used with those parameters
* [ ] The same management of optional parameters issue goes for input parameters (file, image, vector): even if marked optional in the UI, optional input parameters must be set.
All those issues make the most complex (and most interesting applications) of Orfeo ToolBox barely usable within Qgis. Fixing this may require to modify the plugin code, fix things in the application engine or even rework the logic of some applications, but it is mandatory for a good user experience of OTB within Qgis.https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1865The Big Examples Review2019-06-03T12:39:41ZVictor PoughonThe Big Examples ReviewThis is a planning issue for the review and modernization of OTB C++ examples, now rendered in the cookbook documentation (!395).
### How examples work
Examples are made of two files: a `.cxx` and an optional `.rst` file with the same ...This is a planning issue for the review and modernization of OTB C++ examples, now rendered in the cookbook documentation (!395).
### How examples work
Examples are made of two files: a `.cxx` and an optional `.rst` file with the same basename, in a directory indicating their category, for example:
```bash
Examples/FeatureExtraction/TextureExample.cxx
Examples/FeatureExtraction/TextureExample.rst (optional file)
```
##### The cxx file
The C++ code should be normal C++14 code with two additional things:
* The license header at the top (available in `Documentation/Cookbook/rst/templates/examples_license_header.txt`)
* An example usage, i.e a comment that looks like this:
```cpp
/* Example usage:
./TextureExample Input/ADS40RoiSmall.png Output/TextureOutput.tif Output/pretty_TextureOutput.png 2 1 1
*/
```
The directories `Input/` and `Output/` are a reference to `Data/Input` and `Data/Output` in OTB main repository. Input and output data are stored with git LFS.
The license header and example usage are not shown in the code in the html rendering.
##### The rst file
In the description `.rst` file, you can write [normal Sphinx rst](http://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html) and make automatic references to a doxygen class, an application or another example with special roles:
```rst
the class :doxygen:`Image` is used for...
the ITK class :doxygen-itk:`ImageToImageFilter` is a...
the application :ref:`BundleToPerfectSensor` is...
see example :ref:`ApplicationExample.cxx` for more...
```
In the description `.rst` file, you can include input or output images from `Data/Input` or `Data/Output` using the absolute path syntax, for example:
```rst
.. figure:: /Input/QB_Toulouse.png
.. figure:: /Output/qb_BandMath-pretty.jpg
:scale: 50%
Thresholded NDVI of a Quickbird image computed with a BandMathFilter
```
##### How to run an example
From your OTB build directory, use the script:
```
$ ~/otb/Documentation/Cookbook/Scripts/RunExamples.py ~/otb --name BandMathFilterExample
```
This will run the given example in the working directory `~/otb/Data`.
### How to review an example
*Before you begin:* Have a working OTB build of develop with the CookBook and examples activated:
```
cmake -DBUILD_COOKBOOK=ON -DBUILD_EXAMPLES=ON .
make
firefox Documentation/Cookbook/html/index.html &
```
Note: currently it is advised that you delete `Documentation/CookBook/` manually from your build directory between each rebuild of the cookbook.
Pick an example to review from the list below, then:
1. Check that there is an "example usage", if not add it and check it with `RunExamples.py`
2. Make a description `.rst` file from:
* the content of the C++ comments (usually the first big block of text)
* latex content from [the old software guide](https://www.orfeo-toolbox.org/packages/nightly/latest/SoftwareGuide-6.7/) where the example appears
* the included figures
3. Review C++ comments, make sure they don't contain embedded latex
4. Review C++ code, make sure it's clean and modern C++14
5. Run the example, add output images that are necessary to the build to the MR (don't add other output, e.g. `.tif`, `.shp`)
6. Re-build the cookbook and check the output
When you are done, make a MR and list the example you reviewed. Edit the list with your progress.
You can also propose some examples for merge, deletion or refactoring.
### List of examples
##### BasicFilters
* [x] `BasicFilters/BandMathFilterExample.cxx`
* [ ] `BasicFilters/BandMathXImageFilterExample.cxx`
* [x] `BasicFilters/DEMToRainbowExample.cxx`
* [x] `BasicFilters/FrostImageFilter.cxx`
* [x] `BasicFilters/HillShadingExample.cxx`
* [x] `BasicFilters/IndexedToRGBExample.cxx`
* [x] `BasicFilters/LeeImageFilter.cxx`
* [x] `BasicFilters/MeanShiftSegmentationFilterExample.cxx`
* [x] `BasicFilters/PrintableImageFilterExample.cxx`
* [x] `BasicFilters/ScalingFilterExample.cxx`
##### ChangeDetection
* [x] `ChangeDetection/CorrelChDet.cxx`
* [x] `ChangeDetection/DiffChDet.cxx`
* [x] `ChangeDetection/KullbackLeiblerDistanceChDet.cxx`
* [x] `ChangeDetection/KullbackLeiblerProfileChDet.cxx`
* [x] `ChangeDetection/MultivariateAlterationDetector.cxx`
* [x] `ChangeDetection/RatioChDet.cxx`
##### Classification
* [ ] `Classification/ClassificationMapRegularizationExample.cxx` (doesn't run, no usage)
* [ ] `Classification/DempsterShaferFusionOfClassificationMapsExample.cxx` (doesn't run, no usage)
* [ ] `Classification/SOMImageClassificationExample.cxx` (doesn't run, no usage)
* [ ] `Classification/SupervisedImageClassificationExample.cxx` (doesn't run, no usage)
##### DimensionReduction
(all can't run because of missing file: `Input/wv2_cannes_8bands.tif`)
* [ ] `DimensionReduction/ICAExample.cxx`
* [ ] `DimensionReduction/MaximumAutocorrelationFactor.cxx`
* [ ] `DimensionReduction/MNFExample.cxx`
* [ ] `DimensionReduction/NAPCAExample.cxx`
* [ ] `DimensionReduction/PCAExample.cxx`
##### DisparityMap
* [ ] `DisparityMap/FineRegistrationImageFilterExample.cxx`
* [ ] `DisparityMap/NCCRegistrationFilterExample.cxx`
* [ ] `DisparityMap/StereoReconstructionExample.cxx`
##### FeatureExtraction
* [ ] `FeatureExtraction/AsymmetricFusionOfLineDetectorExample.cxx`
* [ ] `FeatureExtraction/CloudDetectionExample.cxx`
* [ ] `FeatureExtraction/ComplexMomentPathExample.cxx`
* [ ] `FeatureExtraction/ComplexMomentsImageFunctionExample.cxx`
* [ ] `FeatureExtraction/CorrelationLineDetectorExample.cxx`
* [ ] `FeatureExtraction/EdgeDensityExample.cxx`
* [ ] `FeatureExtraction/ExtractRoadByStepsExample.cxx`
* [ ] `FeatureExtraction/ExtractRoadExample.cxx`
* [ ] `FeatureExtraction/FlusserMomentsImageFunctionExample.cxx`
* [ ] `FeatureExtraction/HarrisExample.cxx`
* [ ] `FeatureExtraction/HuMomentsImageFunctionExample.cxx`
* [ ] `FeatureExtraction/LineSegmentDetectorExample.cxx`
* [ ] `FeatureExtraction/PanTexExample.cxx`
* [ ] `FeatureExtraction/ParallelLineDetectionExample.cxx`
* [ ] `FeatureExtraction/RatioLineDetectorExample.cxx`
* [ ] `FeatureExtraction/RightAngleDetectionExample.cxx`
* [ ] `FeatureExtraction/SeamCarvingExample.cxx`
* [ ] `FeatureExtraction/SeamCarvingOtherExample.cxx`
* [ ] `FeatureExtraction/SFSExample.cxx`
* [ ] `FeatureExtraction/SURFExample.cxx`
* [x] `FeatureExtraction/TextureExample.cxx`
* [ ] `FeatureExtraction/ThresholdToPointSetExample.cxx`
* [ ] `FeatureExtraction/TouziEdgeDetectorExample.cxx`
##### Filtering
* [ ] `Filtering/CompositeFilterExample.cxx`
* [ ] `Filtering/DanielssonDistanceMapImageFilter.cxx`
* [ ] `Filtering/SecondDerivativeRecursiveGaussianImageFilter.cxx`
##### Fusion
* [ ] `Fusion/BayesianFusionImageFilter.cxx`
* [ ] `Fusion/PanSharpeningExample.cxx`
##### Hyperspectral
* [ ] `Hyperspectral/HyperspectralUnmixingExample.cxx`
##### Image
* [ ] `Image/Image1.cxx`
* [ ] `Image/Image2.cxx`
* [ ] `Image/Image3.cxx`
* [ ] `Image/Image4.cxx`
* [ ] `Image/Image5.cxx`
* [ ] `Image/ImageListExample.cxx`
* [ ] `Image/VectorImage.cxx`
##### Installation
* [ ] `Installation/HelloWorld.cxx`
##### IO
* [ ] `IO/ComplexImageReadWrite.cxx`
* [ ] `IO/DEMHandlerExample.cxx`
* [ ] `IO/DEMToImageGenerator.cxx`
* [ ] `IO/ExtractROI.cxx`
* [ ] `IO/ImageReadCastWrite.cxx`
* [ ] `IO/ImageReadRegionOfInterestWrite.cxx`
* [ ] `IO/ImageReadWrite.cxx`
* [ ] `IO/ImageSeriesIOExample.cxx`
* [ ] `IO/MetadataExample.cxx`
* [ ] `IO/MultibandImageReadWrite.cxx`
* [ ] `IO/VectorDataIOExample.cxx`
##### Iterators
* [ ] `Iterators/ImageLinearIteratorWithIndex2.cxx`
* [ ] `Iterators/ImageLinearIteratorWithIndex.cxx`
* [ ] `Iterators/ImageRandomConstIteratorWithIndex.cxx`
* [ ] `Iterators/ImageRegionIterator.cxx`
* [ ] `Iterators/ImageRegionIteratorWithIndex.cxx`
* [ ] `Iterators/ImageSliceIteratorWithIndex.cxx`
* [ ] `Iterators/IteratorsExamples.cxx`
* [ ] `Iterators/NeighborhoodIterators1.cxx`
* [ ] `Iterators/NeighborhoodIterators2.cxx`
* [ ] `Iterators/NeighborhoodIterators3.cxx`
* [ ] `Iterators/NeighborhoodIterators4.cxx`
* [ ] `Iterators/NeighborhoodIterators5.cxx`
* [ ] `Iterators/NeighborhoodIterators6.cxx`
* [ ] `Iterators/ShapedNeighborhoodIterators1.cxx`
* [ ] `Iterators/ShapedNeighborhoodIterators2.cxx`
##### Learning
* [ ] `Learning/GenerateTrainingImageExample.cxx`
* [ ] `Learning/SEMModelEstimatorExample.cxx`
* [ ] `Learning/SOMClassifierExample.cxx`
* [ ] `Learning/SOMExample.cxx`
* [ ] `Learning/SVMImageEstimatorClassificationMultiExample.cxx`
* [ ] `Learning/TrainMachineLearningModelFromImagesExample.cxx`
* [ ] `Learning/TrainMachineLearningModelFromSamplesExample.cxx`
##### Markov
* [ ] `Markov/MarkovClassification1Example.cxx`
* [ ] `Markov/MarkovClassification2Example.cxx`
* [ ] `Markov/MarkovClassification3Example.cxx`
* [ ] `Markov/MarkovRegularizationExample.cxx`
* [ ] `Markov/MarkovRestorationExample.cxx`
##### OBIA
* [ ] `OBIA/HooverMetricsEstimation.cxx`
* [ ] `OBIA/LabelMapToVectorData.cxx`
* [ ] `OBIA/RadiometricAttributesLabelMapFilterExample.cxx`
##### Patented
* [ ] `Patented/SIFTDensityExample.cxx`
* [ ] `Patented/SIFTDisparityMapEstimation.cxx`
* [ ] `Patented/SIFTExample.cxx`
* [ ] `Patented/SIFTFastExample.cxx`
##### Projections
* [ ] `Projections/EstimateRPCSensorModelExample.cxx`
* [ ] `Projections/GeometriesProjectionExample.cxx`
* [ ] `Projections/OrthoRectificationExample.cxx`
* [ ] `Projections/PlaceNameToLonLatExample.cxx`
* [ ] `Projections/VectorDataExtractROIExample.cxx`
* [ ] `Projections/VectorDataProjectionExample.cxx`
##### Radiometry
* [ ] `Radiometry/ARVIMultiChannelRAndBAndNIRVegetationIndexImageFilter.cxx` (doesn't run, missing data)
* [ ] `Radiometry/AtmosphericCorrectionSequencement.cxx`
* [ ] `Radiometry/AVIMultiChannelRAndGAndNIRVegetationIndexImageFilter.cxx`
* [ ] `Radiometry/NDVIRAndNIRVegetationIndexImageFilter.cxx`
##### Simulation
* [ ] `Simulation/LAIAndPROSAILToSensorResponse.cxx`
* [ ] `Simulation/LAIFromNDVIImageTransform.cxx`
* [ ] `Simulation/ProsailModel.cxx`
##### Tutorials
* [ ] `Tutorials/FilteringPipeline.cxx`
* [ ] `Tutorials/HelloWorldOTB.cxx`
* [ ] `Tutorials/Multispectral.cxx`
* [ ] `Tutorials/OrthoFusion.cxx`
* [ ] `Tutorials/Pipeline.cxx`
* [ ] `Tutorials/ScalingPipeline.cxx`https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1793Workflow improvement for OGR::DataSet2022-01-07T11:47:25ZAntoine RegimbeauWorkflow improvement for OGR::DataSet### What changes will be made and why they would make a better Orfeo ToolBox?
The changes made would be :
* improving base filter for `otb::ogr::DataSource` and for `otb::GeometriesSet`
* refactoring filters using `otb::VectorData`
* re...### What changes will be made and why they would make a better Orfeo ToolBox?
The changes made would be :
* improving base filter for `otb::ogr::DataSource` and for `otb::GeometriesSet`
* refactoring filters using `otb::VectorData`
* refactoring VectorData parameter in application
#### High level description
Assiociated tasks:
1. [ ] Streaming capabilities on `otb::ogr::DataSource` (*13pts*)
2. [ ] Improving `otb::ogr::DataSource` filters (*34pts*)
3. [ ] Migrating filter using `otb::VectorData` (*13pts*)
4. [ ] Adding an OGR parameter in application (*13pts*)
##### Streaming capabilities on `otb::ogr::DataSource`
Different types of streaming can be implemented on `otb::ogr::DataSource` :
* on feature id (Range region)
* on spatial extend (Spatial region)
We need to be careful on the way those two streaming types may work with each other in the same pipeline.
##### Improving filter base for `otb::ogr::DataSource` and for `otb::GeometriesSet`
We do have some base filters for processing vector data structure, however they are rarely used.
With some improvement, those filters could be the equivalents of `itk::ImageToImageFilter` and `itk::ImageSource`. One major improvement will be the streaming on `ogr::DataSet`.
Once developed, we will be able to make already existing filters using `ogr::DataSet` to derive from those filters and thus improve the processing of this data structure.
##### Refactoring filters using otb::VectorData
After those changes we will be able to migrate the different functionalities using VectorData. At this point if a filter seems irrelevant or useless we can remove it if the community agrees on it.
##### Adding an OGR parameter in application
This modification will benefit applications using filename parameters to load `otb::ogr::DataSource`. We might also be able to refactor applications so that they will use OGR parameter rather than VectorData one.
#### Risks and benefits
API might be broken.
This work will benefit to lots of users and developers, as it introduces new features for `ogr::DataSet` manipulation.
We need to decide if `otb::VectorData` will be removed, and if so this can be done during this story.
#### Alternatives for implementationshttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1778Test refactoring2022-01-07T11:47:24ZGuillaume PaseroTest refactoring### What changes will be made and why they would make a better Orfeo ToolBox?
Refactor the tests in order to have a faster validation procedure. Ideally, this refactoring should also simplify the testing strategy, and result in a better...### What changes will be made and why they would make a better Orfeo ToolBox?
Refactor the tests in order to have a faster validation procedure. Ideally, this refactoring should also simplify the testing strategy, and result in a better balance between over-tested and under-tested classes.
#### High level description
3 steps are proposed for this refactoring:
* [ ] Refactor the longest tests. 41 tests have been identified as they take more than 10s to run.
* [ ] Design a test framework without IO, only in-memory images
* [ ] Refactor filters `Tv` to use the new test framework
Prior to these steps, 2 other taks should simplify this work:
* #1765 : the modules to be moved out of OTB should reduce the number of tests
* !299 : refactor all functor based filters, their test will be much simpler
#### Risks and benefits
The main risk is on the refactoring time, that could be significant as there are about 2300 tests.
On the bright side, it will be possible to greatly reduce the total testing time, as well as the need for large test data repository.
#### Alternatives for implementations
##### Step 1
The list of 41 pre-selected tests to refactor is here (with associated timings in seconds):
```
10.1 ioTvDEMToImageGeneratorFromImageTest_SensorModel
10.38 bfTuMeanShiftSmoothingImageFilterROIQBMul4
10.49 coTvCoordinateToNameMultithreadTest
10.93 obTuMeanShiftStreamingConnectedComponentSegmentationOBIAToVectorDataFilter
11.1 ioTvKmzProductWriterWithGCP
11.27 apTvSeLargeScaleMeanShiftTest
11.6 leTvSVMMachineLearningModelReg
13.18 bfTvMeanShiftSmoothingImageFilterThreadingNonOpt
13.28 apTvSeSegmentationWatershedVector
14.37 dmTvDisparityMapEstimationMethod
14.72 leTeSEMModelEstimatorExampleTest
14.92 apTvSeSegmentationCCVector_ULOVW
15.2 leTeSOMClassifierExampleTest
15.29 apTvSeSegmentationMeanshiftVector
15.84 obTuMeanShiftConnectedComponentSegmentationFilter
16.47 feTvLocalHoughDraw2
16.63 apTvRaOpticalCalibration_UnknownSensor
16.79 apTvSeSegmentationCCVector_ULU
18.25 apTvClKMeansImageClassification_composite
20.58 apTvSeSegmentationCCVector
22.13 raTvReflectanceToSurfaceReflectanceImageFilter2
23.11 bfTuMeanShiftSmoothingImageFilterQBRoad
23.75 apTvCdbDSFuzzyModelEstimation_LI
26.45 apTvCdbDSFuzzyModelEstimation_LI_autoInit
27.77 apTvClSampleAugmentationReplicate
28.12 apTvFeLineSegmentDetectionNoRescale
29.79 apTvClSampleAugmentationSmote
29.96 leTvGradientBoostedTreeMachineLearningModel
31.1 maTeMarkovClassification3ExampleTest
32.73 leTeSVMImageEstimatorClassificationMultiExampleTest
33.31 apTvClSampleAugmentationJitter
34.57 hyTvMDMDNMFImageFilterTest2
36.32 apTvFeLineSegmentDetection
38.8 leTeSOMExampleTest
51.22 ioTeTileMapImageIOExampleTest
52.66 reTeImageRegistration2ExampleTest
60.84 ioTvSHPVectorDataFileReader3
60.98 ioTvTileMapImageIOWeb
88.13 dmTvFineRegistrationImageFilterTestWithMeanSquare
112.69 owTvQtWidgetShow
135.51 apTvClMethodGBTImageClassifierQB1
```
##### Step 2
In module OTBTestKernel:
* a set of functions to produce hardcoded images:
* template functions working on both otb::Image and otb::VectorImage
* start with image allocation (buffered region equals to largest possible region)
* fills the image with a formula, an array, ...
* a set of functions to set hardcoded image metadata
* fills any image metadata (projection ref, origin, spacing, OSSIM keywordlist, ...)
* a set of functions to produce hardcoded vector data:
* two families of functions : for otb::VectorData or otb::OGRDataSource
* fills the dataset with hardcoded geometries and fields
* hardcoded metadata (projection ref, ...)
* new generic functions to check the result of a boolean condition (similar to
an `assert` statement). There are blocking and non-blocking flavours (a
blocking check will stop the test execution if it fails).
##### Step 3
`Tv` tests can be re-written to use the in-memory test data. They are composed
of the following steps:
* Instanciate the filter to be tested.
* Instanciate a given fake image
* Set the fake image as input of the filter
* Set the filter parameters
* Call Update() on the filter
* Check the differences with the baseline (if any)
* Check other outputs of the filter (if any)
* If all checks passed: returns EXIT_SUCCESS
* If one check failed:
* write PNG file for the difference image (if any)
* return EXIT_FAILURE
With this strategy, the comparison of test and baseline images in CDash is
preserved. The baselines don't have to be images on disk, they can also be
hardcoded in the test (suited for tiny images, like 10 x 10 pixels).
### Who will be developing the proposed changes?
@salbert & OTB Dev Teamhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1679Documentation improvements2022-01-06T14:43:11ZVictor PoughonDocumentation improvementsVarious documentation improvements (this is an evolving list):
##### CookBook
* [ ] Write MPI and parallel processing
* [X] Mention existing remote modules and add link to the list
##### Examples
* [ ] Finish reviewing examples after m...Various documentation improvements (this is an evolving list):
##### CookBook
* [ ] Write MPI and parallel processing
* [X] Mention existing remote modules and add link to the list
##### Examples
* [ ] Finish reviewing examples after migration to sphinx #1865
##### Tutorials
* [ ] Rewrite Segmentation exercises to use all in one app for LSMS, change images...
* [ ] Add a 30 minutes introduction with illustrations about SAR images (find Creative Commons support look at SAREDU project for instance https://saredu.dlr.de/)
##### Build system
* [ ] Remove examples tests?
* [ ] Remove examples tests baselines?
* [ ] Add RunExamples.py script in a new test
* [ ] Fix missing example usages
* [ ] Improve license header filtering in rst render (itk copyright)
* [ ] Handle `ApplicationExample`
* [ ] Move `Documentation/Cookbook/Art/` to Data/ after the LFS migration is complete (!387)https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1678Application improvements2018-08-20T12:03:28ZYannick TANGUYApplication improvementsThis story gathers list of improvements for OTB Application from the old wiki.
# General improvements
* Improve otbgui look and feel (big white spaces, default window size, alignment, parameters ordering, etc.)
* Add a "same as input" ou...This story gathers list of improvements for OTB Application from the old wiki.
# General improvements
* Improve otbgui look and feel (big white spaces, default window size, alignment, parameters ordering, etc.)
* Add a "same as input" output type
* Internationalization of otb applications (challenge: without making otbcli depend on qt)
* Improve application Engine API to allow to mark some parameters as "Advanced". It will allow to provide solution to simplify some of the application GUI (like fold all advanced parameters in a specific widget)
* Allow in-memory connection for OGRDataSource between applications (see TrainImagesClassifier)
* In otb::Wrapper::Application, provide a "GenerateBufferOutput()" function that calls Update() on an output image parameter without writing it.
* Interpolation on complex data
* Save N-dimensional images (where N>2) (see SOM maps)
* Display internal information of trained Machine Learning models (for instance, check the variables mostly used in a random forest model,...)
# Existing applications
* Implement IMORM approach in LSMSSmallRegionsMerging
* ComputeConfusionMatrix: Also compute precision, recall and F1 score and optionally write to a csv file
* Radiometric index: document which bands need to be filled for different indices
* Improve performance of sampling applications :
1. * In SampleExtraction : allow to compute features only on selected samples instead of computing them on the full image.
2. * When using a mask during training, CPU usage is not at 100% but rather 70% : why ?
3. * How to skip the processing of tiles without any sample ?
4. * Better estimation of RAM usage for sampling applications (at the moment, the memory cost of OGRData is not taken into account).
* (from M. Planells) In Orthorectification application: output the projected incidence angle (useful in case of SAR image orthorectification). See what is done in S1 toolbox Range Doppler Correction processing. It should output an optionnal image (1 local incidence angle per angle)
*TrainImageClassifierBetter*: explain what happens when no validation vector is provided in the TrainImageClassifier application-> in this case the rating is used and -> idea: display the number of extracted pixels in the log
*ComputeConfusionMatrix*: Improve the log of the confusion matrix (should be aligned properly)
*OpticalCalibration*: Improve OpticalCalibration doc to explain that in case of TOA To Image the input is not a DN image
# New applications
* Apply a polynomial correction
* Bundle block adjustment
* Morphological profiles and profiles classification
* The part of the object detection framework that can know be plugged in the new classification framework
* DSM shading and other stuff like this
* Proper denoising (the smoothing applications is quite poor and there are other filters in ITK)
* Sharpening (there are filters in ITK)
* HDR compression
* Haze correction
* Histogram application, lots of parameters (see numpy.histogram for inspiration) and which output format?
# C++ API
* Add topographic correction of reflectance. OTB filters can already take into account environment effects but not topo effects. It was requested on Mantis (https://bugs.orfeo-toolbox.org/view.php?id=1146)
* Re-write a decent 'compare-ogr' method for the test driverhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1671Remove hard-coded muParser expression library-wise2024-03-20T14:05:37ZJulien MichelRemove hard-coded muParser expression library-wise### What changes will be made and why they would make a better Orfeo ToolBox?
#### High level description
Some filters and classes use the `muParser` based filters with hard-coded expressions. This is bad for at least 2 reasons:
* `muP...### What changes will be made and why they would make a better Orfeo ToolBox?
#### High level description
Some filters and classes use the `muParser` based filters with hard-coded expressions. This is bad for at least 2 reasons:
* `muParser` based filters are not as fast as their functor based counter-parts
* `muParser` is an optional dependency. Using it heavily results in many applications and filters disabled if `muParser` is disabled (see #1670 for instance)
#### Risks and benefits
Only risk might be small changing with floating point baselines.
Benefit is a faster OTB less dependent on muParser.
#### Alternatives for implementations
We need to spot places where `muParser` is mis-used:
```
$ grep -R -l BandMath Modules/ | grep -v BandMath | grep -v Parser
Modules/Applications/AppProjection/app/otbGridBasedImageResampling.cxx
Modules/Applications/AppImageUtils/app/otbCompareImages.cxx
Modules/Applications/AppStereo/app/otbStereoFramework.cxx
Modules/Applications/AppStereo/app/otbBlockMatching.cxx
```
### Who will be developing the proposed changes?
TDB.https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/1514Improvements for ApplicationEngine2024-03-06T14:05:30ZGuillaume PaseroImprovements for ApplicationEngine### What changes will be made and why they would make a better Orfeo ToolBox?
The OTB Application are now used very often, so it is important to keep the ApplicationEngine code clean. This RFC proposes small enhancements that will simpl...### What changes will be made and why they would make a better Orfeo ToolBox?
The OTB Application are now used very often, so it is important to keep the ApplicationEngine code clean. This RFC proposes small enhancements that will simplify the code base, and also new services available from the C++ ApplicationEngine API but also wrapped into the Python API.
#### High level description
The following are small improvement to the ApplicationEngine module:
* [x] __Handling of "UserValue" flag__: the optional boolean in 3rd argument of the functions SetParameterString/SetParameterInt/... is not very convenient. I think it is possible to get rid of it using a simple state flag "IsInPrivateDo" in the Application class. This flag would be set to ON during calls to DoInit(), DoUpdateParameters() and DoExecute(). During these calls, the values set on parameters are always "Automatic" values. Outside these calls, we can assume that the values set on parameters come from the user.
* [x] __Merging "UserValue" and "AutomaticValue" flags__: why do we have both ? I believe we could choose the convention : UserValue = not(AutomaticValue). The initial default value of a parameter would be considered "automatic". We could remove 1 of these 2 flags, there are already enough in the Parameter class.
* [ ] __Handling of the m_Active flag__: this flag should be handled mostly by the Parameters themselves in the ApplicationEngine module. For instance the call to EnableParameter() in otb::Wrapper::CommandLineLauncher::LoadParameters() should not be here, but rather in each "param->SetValue(string)". In a similar way, in otb::Wrapper::Application::SetParameterUserValue(), the call to EnableParameter() should not be here (in addition, it will always switch ON an EmptyParameter). The benefit is also to guarantee the same behaviour on CLI / GUI /Python.
* [x] __Refactor the ParameterType_Empty__: there are a lot of special cases for this parameter because its value (a boolean flag) and its Active flag are actually the same. For instance, in the current state of ApplicationEngine, it is impossible to have an Empty parameter with Role_Output. This parameter should have its value stored in a specific flag, proper functions Application::Set/GetParameterBool(), and maybe easy conversions to/from string and integer values. Maybe a specific ParameterType_Boolean can be added...
* [ ] __String getters and setters for all parameters__: it would be nice if all the parameters could be set using a common Application::SetParameterString(), or SetParameterStringList(). Same remark for getters. It would remove some long sections of if/elseif/elseif/... in the CommandLineLauncher but also in the Input/OutputXML parameters.
* [x] __Move m_IsChecked to QtWrappers__: in the Parameter base class, the flag m_IsChecked is only used by QtWrapper, so it should be moved outside ApplicationEngine.
* [ ] __Improve architecture of Parameters__: there is also room for improvement in the architecture of Parameters. There is a lot of code that is duplicated between similar parameter types, we should consider a better class architecture to gather common features between parameters with similar behaviour.
* [x] __Remove enum m_DefaultValueMode__: in the Parameter base class, the enum m_DefaultValueMode is never used in OTB. We could check if other external projects use it. We could get rid of it.
If you see other potential improvements to the core of this module, feel free to give your idea.
The following are a list of new services for ApplicationEngine framework:
* [x] __Streaming and output information__: this is a set of service that let you have insights on what output the
application will generate, and what pieces of the input you need to generate a piece of the output.
* [x] __Get the output information__: given a parameter key corresponding to an OutputImageParameter, retrieve the output size, spacing, origin, projection, geom file and so on
* [x] __Get the requested input regions__: given a parameter key corresponding to an OutputImageParameter, and a region corresponding to a piece of this output, get for each InputImageParameter the region required to produce that piece of output. The application could also return the estimated amount of RAM needed to compute that piece.
* [x] __Attach metadata to numpy array interface__: the numpy array interface to application is useless in many cases because it only allows to pass the pixel buffer, and no metadata. Many OTB filters need additional metadata (such as origin, spacing, size, projection and geom file) to be able to process the data.
* [x] __Get rid of ComplexParameterInput/OutputImage__: there is no reason to have a separate complex image parameter. This makes most application incompatible with complex images (such as ExtractROI for instance). It would be better to be able to detect complex images with InputImageParameter, and to add new output types for OutputImageParameter (cint, cfloat, ...). Check Request_for_changes-125:_Merge_Complex_and_standard_Image_Parameter
* [x] __Set/get all parameters at once through a dictionnary in Pyton API__: this is a small helper for large application with many parameters to set.
* [x] __Get proper logging / progress reporting in Python__: self explanatory.
* [x] __Register/free filter resources__: provide a way to register filters and free them at the end of the application processing to avoid retaining memory. Check improvements to fix bug #1475
* [ ] __Interface with OGR Python wrappers__: GDAL/OGR provides Python wrappers for vector data. It would be useful to import them in OTB Applications (into ParameterType_VectorData). Solution for vectors defined as ParameterType_InputFilename ?
* [x] __Stop button for Graphic Interface__: Be able to stop a running application.
* [ ] __Document new features in CookBook__: new recipe ?
#### Risks and benefits
The main risk is to break existing applications, so we need to focus on compatibility. In the end, the ApplicationEngine will have a cleaner code base and new useful features.
#### Alternatives for implementations
### Who will be developing the proposed changes?
Work can be split, different contributors expected.https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2380Separate Miscellaneous in separate repository2024-03-20T15:59:44ZTristan LaurentSeparate Miscellaneous in separate repositoryTo compilate project, we can use OTB modules https://www.orfeo-toolbox.org/CookBook-9.0/RemoteModules.html
- [x] Create external git repo, link it as a submodule
- [x] OTB core must download corresponding submodule if the cmake -DOTBGrou...To compilate project, we can use OTB modules https://www.orfeo-toolbox.org/CookBook-9.0/RemoteModules.html
- [x] Create external git repo, link it as a submodule
- [x] OTB core must download corresponding submodule if the cmake -DOTBGroup_Miscellaneous is turned on
- [x] Compile it separately, you may use OTB core artifact
- [x] Verify that package is correctly built during cpack
- [ ] Adapt CI to run corresponding build job and tests
- [ ] Adapt otb CI to start module job when there is a new dependency (i.e. OTB core)
- [ ] Adapt bug tracking for each project ?
- [ ] Add a Readme with compilation help, otb integration, and some exemples10.0.0Tristan LaurentTristan Laurenthttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2384SuperBuild LibKML URL is out of date2024-03-21T11:29:08ZLaurențiu NicolaSuperBuild LibKML URL is out of dateIt's https://deb.debian.org/debian/pool/main/libk/libkml/libkml_1.3.0~r864+dfsg.orig.tar.gz, but should be http://deb.debian.org/debian/pool/main/libk/libkml/libkml_1.3.0.orig.tar.gz or something like that.It's https://deb.debian.org/debian/pool/main/libk/libkml/libkml_1.3.0~r864+dfsg.orig.tar.gz, but should be http://deb.debian.org/debian/pool/main/libk/libkml/libkml_1.3.0.orig.tar.gz or something like that.https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2383Package module as "IMPORTED" cmake targets2024-03-25T14:43:17ZTristan LaurentPackage module as "IMPORTED" cmake targetsThe current cmake targets of OTB are packaged in Core. This is a problem if we want to separate OTB module.
Some modules depends of other OTB modules, thus when we want to build them, we need OTB Core and the package of these modules in...The current cmake targets of OTB are packaged in Core. This is a problem if we want to separate OTB module.
Some modules depends of other OTB modules, thus when we want to build them, we need OTB Core and the package of these modules installed. But if OTB Core is build without any OTBGroup, the cmake targets of theses dependencies are not declared.
One solution could be to create an OTB Core package with options -DOTBGroup corresponding to dependencies, but it lead to one specific OTB build per module. This is not a durable solution as it complexify CI, increase build time, is source of errors etc...
CMake propose a solution: IMPORTED_TARGETS: https://cmake.org/cmake/help/latest/guide/importing-exporting/index.html .
This can help to have cmake target of each package/module in the module package itself instead of Core package.10.0.0Tristan LaurentTristan Laurenthttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2381PLEIADES Orthorectification failed since version 82024-03-20T14:24:20ZdemagistPLEIADES Orthorectification failed since version 8### Description
Since release 8 of OTB I am not able anymore to apply Orthorectification on a Pleiades image I use during a lesson.
The same command line works fine with version 7.4.2 and fails since versions 8.
### Steps to reproduce
...### Description
Since release 8 of OTB I am not able anymore to apply Orthorectification on a Pleiades image I use during a lesson.
The same command line works fine with version 7.4.2 and fails since versions 8.
### Steps to reproduce
The following command produce a good result with release 7.4.2 (linux or windows) :
otbcli_OrthoRectification -io.in "./IMG_PHR1B_MS_004/IMG_PHR1B_MS_201807291333495_SEN_3210573101-004_R1C1.TIF?&skipcarto=true" -map utm -map.utm.zone 23 -interpolator nn -opt.ram 1024 -opt.gridspacing 4 -elev.dem ./SRTM1 -io.out ./test_ORTHO+DEM.tif
Since release 8, it does not work anymore.
I tested the latest 9.0.0 release using a docker image :
docker run -it -v .:/Data orfeotoolbox/otb:9.0.0 otbcli_OrthoRectification -io.in "/Data/IMG_PHR1B_MS_004/DIM_PHR1B_MS_201807291333495_SEN_3210573101-004.XML?&skipcarto=true" -map utm -map.utm.zone 23 -interpolator nn -opt.ram 1024 -opt.gridspacing 4 -elev.dem /Data/SRTM1 -io.out /Data/test_ORTHO+DEM.tif
and got the following error :
(FATAL) OrthoRectification: itk::ERROR: ImageToGenericRSOutputParameters(0x788a50): No information in the metadata, please set an image with non empty metadata
Same problem using the DIMAP xml file as input file :
docker run -it -v .:/Data orfeotoolbox/otb:9.0.0 otbcli_OrthoRectification -io.in "/Data/IMG_PHR1B_MS_004/DIM_PHR1B_MS_201807291333495_SEN_3210573101-004.XML?&skipcarto=true" -map utm -map.utm.zone 23 -interpolator nn -opt.ram 1024 -opt.gridspacing 4 -elev.dem /Data/SRTM1 -io.out /Data/test_ORTHO+DEM.tif
2024-03-06 16:27:10 (INFO) OrthoRectification: Elevation management: setting default height above ellipsoid to 0 meters
2024-03-06 16:27:10 (INFO): Loading metadata from official product
2024-03-06 16:27:10 (FATAL) OrthoRectification: itk::ERROR: ImageToGenericRSOutputParameters(0x788a50): No information in the metadata, please set an image with non empty metadata
### Configuration information
see above in descriptionhttps://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2377QGIS adapters cause issues with SuperBuild2024-02-20T17:07:13ZLaurențiu NicolaQGIS adapters cause issues with SuperBuild### Description
1. building using SuperBuild without `OTB_WRAP_QGIS` fails at the configure step:
```
CMake Error at CMake/OTBModuleAPI.cmake:69 (message):
No such module: "OTBQGIS"
Call Stack (most recent call first):
CMake/OTBMod...### Description
1. building using SuperBuild without `OTB_WRAP_QGIS` fails at the configure step:
```
CMake Error at CMake/OTBModuleAPI.cmake:69 (message):
No such module: "OTBQGIS"
Call Stack (most recent call first):
CMake/OTBModuleAPI.cmake:44 (otb_module_load)
CMake/OTBModuleAPI.cmake:88 (_otb_module_config_recurse)
build/OTB/build/OTBConfig.cmake:99 (otb_module_config)
Utilities/Completion/CMakeLists.txt:21 (find_package)
```
2. building using SuperBuild with `OTB_WRAP_QGIS` works initially (perhaps?), but fails on a second build:
```
[ 87%] ./bin/otbQgisDescriptor OpticalCalibration lib/otb/applications ./share/otb/description/
[ 87%] ./bin/otbQgisDescriptor BundleToPerfectSensor lib/otb/applications ./share/otb/description/
[ 89%] ./bin/otbQgisDescriptor Pansharpening lib/otb/applications ./share/otb/description/
[ 89%] ./bin/otbQgisDescriptor ReadImageInfo lib/otb/applications ./share/otb/description/
[ 89%] ./bin/otbQgisDescriptor ExtractROI lib/otb/applications ./share/otb/description/
[ 89%] ./bin/otbQgisDescriptor DynamicConvert lib/otb/applications ./share/otb/description/
[ 89%] ./bin/otbQgisDescriptor CompareImages lib/otb/applications ./share/otb/description/
[ 89%] ./bin/otbQgisDescriptor ConcatenateImages lib/otb/applications ./share/otb/description/
[ 89%] ./bin/otbQgisDescriptor ManageNoData lib/otb/applications ./share/otb/description/
[ 89%] ./bin/otbQgisDescriptor Rasterization lib/otb/applications ./share/otb/description/
[ 90%] ./bin/otbQgisDescriptor VectorDataTransform lib/otb/applications ./share/otb/description/
[ 90%] ./bin/otbQgisDescriptor Mosaic lib/otb/applications ./share/otb/description/
[ 90%] ./bin/otbQgisDescriptor ResetMargin lib/otb/applications ./share/otb/description/
[ 90%] ./bin/otbQgisDescriptor VectorDataExtractROI lib/otb/applications ./share/otb/description/
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
[ 90%] ./bin/otbQgisDescriptor ConcatenateVectorData lib/otb/applications ./share/otb/description/
[ 90%] ./bin/otbQgisDescriptor VectorDataSetField lib/otb/applications ./share/otb/description/
[ 90%] ./bin/otbQgisDescriptor ZonalStatistics lib/otb/applications ./share/otb/description/
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
[ 91%] ./bin/otbQgisDescriptor OrthoRectification lib/otb/applications ./share/otb/description/
[ 91%] ./bin/otbQgisDescriptor RigidTransformResample lib/otb/applications ./share/otb/description/
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
[ 91%] ./bin/otbQgisDescriptor Superimpose lib/otb/applications ./share/otb/description/
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:416: share/otb/description/OpticalCalibration.txt] Error 127
gmake[5]: *** Waiting for unfinished jobs....
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:196: share/otb/description/BundleToPerfectSensor.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:424: share/otb/description/Pansharpening.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
[ 91%] ./bin/otbQgisDescriptor ImageEnvelope lib/otb/applications ./share/otb/description/
[ 91%] ./bin/otbQgisDescriptor VectorDataReprojection lib/otb/applications ./share/otb/description/
[ 91%] ./bin/otbQgisDescriptor ColorMapping lib/otb/applications ./share/otb/description/
[ 91%] ./bin/otbQgisDescriptor MultiResolutionPyramid lib/otb/applications ./share/otb/description/
[ 91%] ./bin/otbQgisDescriptor Quicklook lib/otb/applications ./share/otb/description/
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:280: share/otb/description/ExtractROI.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
[ 91%] ./bin/otbQgisDescriptor TileFusion lib/otb/applications ./share/otb/description/
[ 91%] ./bin/otbQgisDescriptor Synthetize lib/otb/applications ./share/otb/description/
[ 91%] ./bin/otbQgisDescriptor SplitImage lib/otb/applications ./share/otb/description/
[ 91%] ./bin/otbQgisDescriptor PixelValue lib/otb/applications ./share/otb/description/
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:452: share/otb/description/ReadImageInfo.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:228: share/otb/description/ConcatenateImages.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:208: share/otb/description/CompareImages.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:372: share/otb/description/ManageNoData.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:448: share/otb/description/Rasterization.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:268: share/otb/description/DynamicConvert.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:392: share/otb/description/Mosaic.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:456: share/otb/description/ResetMargin.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:592: share/otb/description/VectorDataTransform.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:608: share/otb/description/ZonalStatistics.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:460: share/otb/description/RigidTransformResample.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:420: share/otb/description/OrthoRectification.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:232: share/otb/description/ConcatenateVectorData.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:580: share/otb/description/VectorDataExtractROI.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:588: share/otb/description/VectorDataSetField.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:540: share/otb/description/Superimpose.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:332: share/otb/description/ImageEnvelope.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:204: share/otb/description/ColorMapping.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:544: share/otb/description/Synthetize.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:400: share/otb/description/MultiResolutionPyramid.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:440: share/otb/description/Quicklook.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:432: share/otb/description/PixelValue.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:528: share/otb/description/SplitImage.txt] Error 127
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:584: share/otb/description/VectorDataReprojection.txt] Error 127
/home/grayshade/Projects/otb/build/OTB/build/bin/otbQgisDescriptor: error while loading shared libraries: libtiff.so.6: cannot open shared object file: No such file or directory
gmake[5]: *** [Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/build.make:548: share/otb/description/TileFusion.txt] Error 127
gmake[4]: *** [CMakeFiles/Makefile2:11482: Modules/Core/Wrappers/QGIS/src/CMakeFiles/generate_descriptors.dir/all] Error 2
gmake[3]: *** [Makefile:156: all] Error 2
gmake[2]: *** [CMakeFiles/OTB.dir/build.make:87: OTB/src/OTB-stamp/OTB-build] Error 2
gmake[1]: *** [CMakeFiles/Makefile2:974: CMakeFiles/OTB.dir/all] Error 2
gmake: *** [Makefile:91: all] Error 2
```
I do have `libtiff` already built in the current directory:
```
TIFF/build/libtiff/libtiff.so
TIFF/build/libtiff/libtiff.so.6
TIFF/build/libtiff/libtiff.so.6.0.2
```
My workaround was to do something like below, but it isn't ideal, of course:
```
cmake --build . --parallel $(nproc); cp OTB/build/lib/libOTBSampling-9.0.so.1 ../superbuild_install/lib/libOTBSampling-9.0.so.1; cp OTB/build/lib/otb/applications/otbapp_SampleAugmentation.so ../superbuild_install/lib/otb/applications/otbapp_SampleAugmentation.so
```
### Steps to reproduce
```
$ mkdir build
$ cd build
$ ccmake ../SuperBuild # choose your favourite settings
$ cmake --build . --parallel $(nproc)
```
### Configuration information
Fedora 39, tested at c302db4eab9815ba94d83c29ce45aa4b0dc144b6
![image](/uploads/7be70d36a2fbbc1fd96cd1efe57489dc/image.png)https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2374AfterExecuteAndWriteOutputs() not called from python API2024-01-08T10:13:07ZRémi CressonAfterExecuteAndWriteOutputs() not called from python APIIt looks like `AfterExecuteAndWriteOutputs()` is not called in python.
OTB 9.0.0, Ubuntu 22.04
I test with various applications but the most easy is with Mosaic, setting `tmpdir` and `comp.feather` to `large`.
In CLI the tmp files are ...It looks like `AfterExecuteAndWriteOutputs()` is not called in python.
OTB 9.0.0, Ubuntu 22.04
I test with various applications but the most easy is with Mosaic, setting `tmpdir` and `comp.feather` to `large`.
In CLI the tmp files are deleted, in python they are not.https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2367vector files and other result files do not get saved when running OTB from QGIS2023-12-01T12:36:23ZJanOPedersenvector files and other result files do not get saved when running OTB from QGIS### Description
When running for instance the segmentation operation, everything seams to work until the result file and result layer is to be shown. Neither the shape file, nor result layer are produced.
### Steps to reproduce
0. QGI...### Description
When running for instance the segmentation operation, everything seams to work until the result file and result layer is to be shown. Neither the shape file, nor result layer are produced.
### Steps to reproduce
0. QGIS is already installed
1. Install OTB in QGIS
2. Run OTB -> Segmentation -> Segmentation
use default parameters and set the 'output vector file' to 'save as file' and provide a local folder and for instance the name 'segmentation.shp'
3. Press 'run'
4. The logs now show that the result has been saved to the specified file (segmentation.shp) in the specified folder, but the file does not exist.
5. the layer is not added either
### Configuration information
OS, OTB version or tag, information related to build (binaries, superbuild, system libs ...)
OS: Windows 11
OTB: 8.1.2
QGIS: 3.34https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2366no data management with otbcli_Superimpose2023-12-01T10:08:19ZemmaBno data management with otbcli_Superimposeotbcli_Superimpose doesn't seem to take into account (and then to ignore) no data values.
It considers them as usual values so they are used in the computation of new pixel values.
Would it be possible to add a parameter "no data value" ...otbcli_Superimpose doesn't seem to take into account (and then to ignore) no data values.
It considers them as usual values so they are used in the computation of new pixel values.
Would it be possible to add a parameter "no data value" ?
(otb version 7.4.0 in command line)https://gitlab.orfeo-toolbox.org/orfeotoolbox/otb/-/issues/2365QGIS Plugin being removed from core2024-03-25T13:21:26ZJulien CabiecesQGIS Plugin being removed from core### Remove OTB QGIS Plugin from core
#### High level description
OTB provider plugin is currently being part of the QGIS core, and some [discussions](https://lists.osgeo.org/pipermail/qgis-developer/2023-November/066221.html) has been ...### Remove OTB QGIS Plugin from core
#### High level description
OTB provider plugin is currently being part of the QGIS core, and some [discussions](https://lists.osgeo.org/pipermail/qgis-developer/2023-November/066221.html) has been raised to remove it so it becomes a fully 3rd party plugin, maintained by the OTB community.
I have both contributed to QGIS and OTB and I'm in favor of this proposal.
#### Risks and benefits
I think it would ease development of the plugin and would lower the pain of managing compatibility between QGIS and OTB.
#### Alternatives for implementations
That would require to move the OTB QGIS Plugin to the [QGIS Plugin platform](https://plugins.qgis.org/) or even embed it in the OTB installer.
### Who will be developing the proposed changes?
At the moment, no one is clearly identified to make the modifications.
OTB is a great tool and we would like to see it still integrated into QGIS.
If you have any questions or concerns, please let us know.
CC @ytanguy