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.