A lot of geospatial applications need to work both with high resolution imagery and with large georeferenced vector datasets (e.g. Open Street Map). Very often, it can be a hard task to register these data properly and correct the misalignments. These misalignments can be due to a poor georeferencing accuracy of the sensor (e.g. sometimes the case for UAV), or to some digitalization problem in the input database.
OTB now provides a new remote module to efficiently achieve vector to image registration. This remote module can work on georeferenced data or in a raw geometry (sensor). Once the registration had been processed, it can evaluate results (precision / robustness of the registration).
Our method needs few prior-knowledge on the features to match : it will try to match some lines (segments) contained in a vector-database with some corresponding segments detected in the target image.
The method first detect segmentsin the target image, whether with OTB line segment detection application, or from another remote module : “fast line segment detection”
Then, the main step on the algorithm consists in filtering relevant segments from the detected segments. To do so, we apply successive filters that implement different criteria (length, perpendicularity, proximity to another segment, etc.) and select pairs of segments that are close enough and form a right angle (with respect to a certain threshold).
Then, we try to find the best match between the two sets of segments, by minimizing the sum of distances between the segments from the database and their counterparts from the image. The translation is then applied to the database (or could be applied to the image)
The remote module can be checked out from https://gitlab.orfeo-toolbox.org/remote_modules/image-to-db-registration
Different applications are available :
- otbLSDtoDBRegistration is the main application that takes as input a vector dataset of “line segments” and a vector dataset to register (polygon or line geometries)
- otbVectorDataEvaluation is used to evaluate the accuracy of the registration, by matching database segments with initial detected segments from the image
- otbCropAroundDB is used to extract a part of the image around the projected database before calling the segments detection algorithm
A python script (ImageToDBRegistration) can chain all the different steps : segments detection, projection of the datasets in a common geometry, segments filtering and matching, evaluation.
If you also install the fast line segment detection algorithm (https://gitlab.orfeo-toolbox.org/remote_modules/lsd-cmla), you will benefit from a more efficient segment detection step.
This method has also been tested to register two images, by first detecting segments then applying the registration algorithm on the two vector datasets. This will soon be implemented. A new mask based filter will also be implemented, for example to exclude some areas from segment matching (eg : vegetated areas).
More information on the method can be obtained from here.
The fast line segment detection method is described here.