Integrate S2P SIFT version into OTB
What changes will be made and why they would make a better Orfeo ToolBox?
This proposal is about the integration of the SIFT implementation from S2P into OTB. It would bring a faster implementation of this classic algorithm, using AVX and SSE instructions.
See (here)[https://github.com/MISS3D/s2p/tree/master/c/sift]
High level description
The integration plan would consist in the following steps:
- the SIFT implementation (in C) from S2P should be compiled as a shared library, containing the extraction of SIFT keypoints, the computation of the descriptors, and the matching algorithm.
- this library can be declared in OTB as a 3rd party module.
- development of a new OTB filter to use this library
Risks and benefits
There are several points to analyze:
- the streaming should be handled carefully, sufficient margins should be taken
- any extra copy of the image buffer should be avoided if possible, but it may not be possible if the OTB filter is dealing with pixel type other than float.
- the implementation of multi-threading is delicate, since OTB uses its own framework. Provided the SIFT library used is thread safe, the OTB filter could use the ITK multi-threading pattern, but the usage of image strips too small could lead to missing keypoints.
- the usage of AVX or SSE extension depends on the processor used. It may be difficult to produce portable binaries if S2P SIFTs use specific extensions.
On the bright side, the OTB would gain a state-of-the-art implementation of SIFT.
Alternatives for implementations
The presented implementation strategy seems the best one. An other way could be to integrate the corresponding S2P SIFT sources in the OTB (what was done in the past), but this is not the chosen policy for 3rd parties anymore.
Who will be developing the proposed changes?
TBD but anyone with some knowledge of the OTB and the SIFT algorithm.