ApplicationEngine new services
Summary
This MR contains new service in the core of ApplicationEngine, as well as improvements for the Python wrappings
Rationale
See the issue #1514 for more details. This MR addresses the points about new services and metadata for Numpy arrays.
Implementation Details
Classes and files
M Modules/Core/ImageBase/include/otbImage.h
Small fix for the SetSignedSpacing()
template function.
M Modules/Core/Streaming/include/otbPipelineMemoryPrintCalculator.h
M Modules/Core/Streaming/src/otbPipelineMemoryPrintCalculator.cxx
I have added an optional flag in PipelineMemoryPrintCalculator::Compute()
to avoid the propagation step. This is useful if you want to compute the memory print on a pipeline with a specific requested region already set.
A Modules/Wrappers/ApplicationEngine/include/otbWrapperMetaDataHelper.h
A Modules/Wrappers/ApplicationEngine/src/otbWrapperMetaDataHelper.cxx
A new helper class that instanciate the different Getter/Setter template function to manipulate a MetaDataDictionary
.
M Modules/Wrappers/ApplicationEngine/include/otbWrapperApplication.h
M Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexInputImageParameter.h
M Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexInputImageParameter.txx
M Modules/Wrappers/ApplicationEngine/include/otbWrapperComplexOutputImageParameter.h
M Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageListParameter.h
M Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.h
M Modules/Wrappers/ApplicationEngine/include/otbWrapperInputImageParameter.txx
M Modules/Wrappers/ApplicationEngine/include/otbWrapperOutputImageParameter.h
M Modules/Wrappers/ApplicationEngine/include/otbWrapperTypes.h
M Modules/Wrappers/ApplicationEngine/src/CMakeLists.txt
M Modules/Wrappers/ApplicationEngine/src/otbWrapperApplication.cxx
M Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexInputImageParameter.cxx
M Modules/Wrappers/ApplicationEngine/src/otbWrapperComplexOutputImageParameter.cxx
M Modules/Wrappers/ApplicationEngine/src/otbWrapperInputImageParameter.cxx
M Modules/Wrappers/ApplicationEngine/src/otbWrapperOutputImageParameter.cxx
In a nutshell:
- the
ImageBaseType
is now unique for the whole ApplicationEngine framework, no need to duplicate it in various parameters - New functions in class
otb::Wrapper::Application
to provide an interface with underlying Image objects:GetImageOrigin()
GetImageSpacing()
-
GetImageSize()
: returns the size of the LargestPossibleRegion -
GetImageNbBands()
: returns the number of components per pixel -
GetImageProjection()
: returns the ProjRef -
GetImageKeywordlist()
: returns the Ossim keywordlist -
GetImageMetaData()
: returns theitk::MetaDataDictionary
GetImageRequestedRegion()
-
PropagateRequestedRegion()
: set a given RequestedRegion on the image and propagate it, returns the memory print estimation -
GetImageBasePixelType()
: helper function to guess the pixel type of the underlying Image/VectorImage. -
GetParameterImageBase()
: helper, returns the image as a ImageBaseType (works on all image parameters) -
SetParameterImageBase()
: helper, sets the parameter InputImage/InputImageList/ComplexInputImage with an ImageBaseType
Note: some of these function use an optional index to refer to an image parameter. By default this index is 0. It allows to access InputImageLists transparently.
M Modules/Wrappers/SWIG/src/itkBase.i
M Modules/Wrappers/SWIG/src/itkBase.includes
M Modules/Wrappers/SWIG/src/otbApplication.i
M Modules/Wrappers/SWIG/src/otbWrapperSWIGIncludes.h
Improvements on the SWIG wrappings:
- wrapping of ITK base classes such as Size, Index, Region, Point, ... Specific for Python: enhancements added to manipulate these objects as lists (support operator[], len(), str())
- wrapping of
itk::MetaDataDictionary
, helper functions have been added to get/set values without using ExposeMetadata/EncapsulateMetadata. Specific for Python: it behaves like a Python dict. - wrapping of other base classes such as OTB_GCP, ImageKeywordlist, VectorDataKeywordlist. Specific for Python: ImageKeywordlist behaves like a dictionary
- refactoring of Numpy C++ code
- shorter using the new helper functions
- better handling of numpy.ndarray with 2D or 3D shapes
- new Import/Export function that preserve metadatas
The new ExportImage
mechanism for Numpy arrays returns a Python dictionary with the following layout:
-
dict['array']
is the Numpy ndarray -
dict['origin']
is the image origin (itkPoint) -
dict['spacing']
is the image spacing (itkVector) -
dict['size']
is the size of largest possible region (itkSize) -
dict['region']
is the buffered region present in 'array' (itkRegion) -
dict['metadata']
is the MetaDataDictionary (itkMetaDataDictionary)
Applications
No change
Tests
M Modules/Wrappers/ApplicationEngine/test/CMakeLists.txt
M Modules/Wrappers/ApplicationEngine/test/otbApplicationEngineTestDriver.cxx
A Modules/Wrappers/ApplicationEngine/test/otbWrapperImageInterface.cxx
M Modules/Wrappers/SWIG/test/python/CMakeLists.txt
A Modules/Wrappers/SWIG/test/python/PythonImageInterface.py
New tests have been added for these image interface services.
Documentation
The Python recipe has been filled with documentation about the new services.
Additional notes
Merge request reports
Activity
added 70 commits
-
581f8078...f799a74a - 69 commits from branch
develop
- 0520b8ec - MRG: Synchronize with branch develop
-
581f8078...f799a74a - 69 commits from branch
- Resolved by Guillaume Pasero
- Resolved by Guillaume Pasero
- Resolved by Guillaume Pasero
- Resolved by Guillaume Pasero
- Resolved by Guillaume Pasero
- Resolved by Guillaume Pasero
- Automatically resolved by Guillaume Pasero
- Resolved by Guillaume Pasero
added 1 commit
- ca470c1e - ENH: use a namespace instead of static functions