PoC Panoramax - Correction d’horizon
Une fraction significative des contributeurs Panoramax collectent les images à vélo. Souvent, en raison des mouvements de tête ou du vélo, la caméra est inclinée, ce qui complique la lisibilité et la navigation dans la séquence, comme ici.
Pour y remédier, l’idéal reste d’améliorer la stabilité de la caméra, et d’utiliser d’éventuels logiciels de correction proposés par le fabricant. Je me suis demandé s’il est possible d’améliorer a posteriori les images déjà présentes dans Panoramax.
Méthode
Pour cela, je me suis appuyé sur cette publication (Jung et al. 2017, “Robust Upright Adjustment of 360 Spherical Panoramas”) qui propose. En bref, le panorama est projeté en cubemap. Un algo de détection de segments est appliqué à chaque face. Ces segments sont ensuite prolongés en grands cercles, dont les intersections indiquent les points de fuite de l’image (en vert ci-dessous). Une optimisation (moindres carrés) est enfin appliquée pour calculer une rotation de l’image qui rapproche ces points de fuite de l’horizon (pour les lignes horizontales, en rouge) ou des pôles (pour les lignes verticales, en jaune). Le processus est ensuite itéré.
Initial:
Iter 1:
Iter2:
Résultats
Actuellement, les résultats restent mitigés. Lorsqu’il y a de nombreuses lignes, notamment verticales, l’algo est performant (cas 1).
Toutefois, lorsqu’il n’y a que deux points de fuite et peu de lignes verticales, par exemple sur un sentier (cas 2), l’algo n’est pas stable et fait empirer la situation. Cela se comprend : lorsque ces points sont placés aux extrêmes avant et arrière, ils restent placés sur l’horizon quel que soit l’angle de roulis appliqué.
Cas 1 : Succès
Avant
Après
Cas 2 : échec
Avant
Après
Discussion et perspectives
Je n’ai pour l’instant implémenté qu’une partie de la publication originale. Toute une section manque (« Outlier Handling ») et pourrait améliorer les performances.
Par la suite, on pourrait établir des stratégies de traitement de séquences, en supposant que des images successives nécessitent des corrections proches.
Je ne sais pas vraiment quand j’aurai à nouveau du temps à y consacrer.
À ma connaissance, une fonctionnalité de correction d’horizon n’est pas sur la feuille de route Panoramax, et je ne prétends pas vouloir l’y inscrire à ce stade. Je suis toutefois curieux de retours de la communauté Panoramax, et singulièrement l’équipe de développement. Est-ce un sujet qui vous intéresse? Si on souhaitait l’implémenter, quelle forme cela pourrait-il prendre? J’imagine un serveur de correction d’horizon, de même qu’il y a un serveur de floutage. Ce serveur renverrait des angles de rotation, à stocker dans les métadonnées et à appliquer dans la visionneuse. Les photos seraient traitées à la demande d’utilisateurs, et non systématiquement. Serait-ce réaliste?