Cross-spectral registration using OTB


I’m trying to make a cross-spectral registration (also called band-to-band registration or multi-modal registration) between bands of a Sentinel-2 image. The bands have been voluntarily slightly shifted, scaled or rotated and the goal is to re-align them using one or more reference bands.

I used the OTB Application “FineRegistration” as a first test to register the band 3 (which has been shifted by 3px), using the band 2 as reference and this works quite nicely. Then, I tried to register the band 8 (which has also been shifted by 3px), using the band 2 as reference but this modifies abnormally the original image. Here is the original band 8 and the wrapped band after the registration :

Here is the band 2 that has been used as a reference :

Do you know why these deformations appear during the execution of the fine registration ? I thought the objective of the FineRegistration was to compute and correct the misregistration between two images and I don’t understand why my image is modified in this way.

If FineRegistration is not suitable to my problem, is there any other method in OTB to solve it ?

Many thanks for your help :slight_smile:

Adrien Lauwers


As far as I know, there are two ways to perform image registration in OTB:

  • Using GCPs to refine the geometrical model of a sensor image, as desccribed in this tutorial. I don’t think you can use this method because if I’m not mistaken, only ortho Sentinel 2 product are available (L1C and L2) to users.
  • Using FineRegistration. The application uses a sliding windows to compute a disparity map between the two images, using a specific metric. The default metric is the cross correlation between windows from both images, this metric will be effective to register two images from the same band, for example Sentinel 2 B2 images from two different acquisitions. But when the algorithm is used on different spectral bands it might fail to compute the disparity because the correlation between the bands is too low.

Other metrics available in FineRegistration might be more adapted to your problem. I made some tests using mutual information instead of cross correlation on some S2 Data that I manually shifted and obtained correct results when performing the registration between B2 and the shifted B8 (I still noticed some registration artifacts). I used the following command:

otbcli_FineRegistration -ref B02.tif -sec B08_shifted.tif  -erx 2 -ery 2 -mrx 30 -mry 30 -out B08_disparity.tif -w B08_shifted.tif  -wo B08_registred.tif -m MI -ssrx 5 -ssry 5
  • erx and ery should be chosen accordingly to the expected shift between the two images
  • Mutual Information requires a lot of points. I noticed empirically that the bigger mrx and mry were, the better the registration was !
  • To speed up computation I used a low resolution disparity map (ssrx and ssry)

The parameters should be tuned to fit your case. Other metrics could also be tried.

I hope that helps,