Archives mensuelles : avril 2012

Faire des panoramas avec Hugin

Il n’y a rien de mieux que des yeux humains: il savent s’adapter à la luminosité, ils permettent à eux deux de voir sur 180° d’ouverture horizontale et 130° d’ouverture verticale, leur léger décalage associé au post-traitement du cerveau permet de situer des objets dans l’espace. Si les compare à un appareil photo, l’appareil photo est un peu honteux, surtout quand on pense à l’appareil de Monsieur Tout-le-monde. Personnellement avec un Nikon Coolpix L2 d’il y a cinq ans, j’ai l’air un peu pauvre, avec 45,9° de champ de vision latérale et une sensibilité ridicule qui fait que les photos sont floues dans les espaces mal éclairés. Ces limitations se voient bien quand on prend des photos:

  • Devant un paysage magnifique, vous ne pouvez prendre qu’un bout plutôt limité de ce que vous voyez avec vos yeux
  • En ville, vous essayez de prendre un bâtiment assez imposant, mais pas moyen de s’éloigner assez pour avoir une vue d’ensemble, sachant que la rue mesure dix mètres de large…
  • Vous êtes adepte de la utra-HD, sauf que les appareils actuels font « juste » 10 megapixels, vous pourrez créer de grandes photos (le record actuel, avec des moyens de professionnel est 26 giga-pixels), avec un appareil à 6 mega-pixels j’arrive sans problème à faire des photos de 28 méga-pixels

Heureusement, il n’y a pas besoin d’acheter un objectif grand angle, ni un appareil 3D stéréoscopique pour obtenir de superbes photos immersives, mais simplement de faire un peu de post-traitement logiciel. Il y a des outils de création de panoramas qui permettent de travailler sur vos photos pour créer:

  • Des panoramas 360 degrés
  • Des photos à large angle de vue, et donc plus réalistes, puisqu’elles ressemblent plus à ce qu’on verrait dans la réalité avec nos propres yeux
  • Des photos en très haute définition avec un appareil basse définition
  • Et même des choses hallucinantes comme ce panorama en coordonnées polaires

Pour revenir à mes petites histoires, j’avais envie dimanche de photographier la façade sud d’une chouette église, qu’on appelle la Collégiale Saint-Ours, mais malheureusement on ne peut bien voir la façade que depuis un petit jardin visible sur cette carte. Vu la taille du jardin on ne peut se reculer d’une vingtaine de mètres pour prendre cette église, et voici tout ce que mon appareil photo peut voir:

On est un peu limité… Pourtant, en prenant dix photos différentes du bâtiment et en les assemblant sur ordinateur j’ai réussi à obtenir une très belle vue d’ensemble:

Prise de vue

N’importe quel appareil photo convient pour faire des panoramas, l’essentiel est de comprendre un minimum sur le fonctionnement du logiciel de montage de panoramas. Évidemment, il ne fonctionne ni par la magie, ni par opération du Saint-Esprit. Le principe est de prendre plusieurs photos, pour qu’il les relie entre elles et les fusionne en une seule image. Je n’ai pas vraiment cherché à comprendre ce qu’il fait (il doit y avoir d’intéressants algorithmes de traitement d’images) mais en tout cas les étapes de son travail sont les suivantes:

  • parcourir les images pour trouver des points-clé
  • essayer de rapprocher les points-clé des différentes photos
  • spatialiser les photos selon les points communs qu’il a trouvés
  • sortir une image fusionnant les photos de départ

La première étape est la prise de photos, avec votre appareil habituel. Prendre des photos est simple, mais pour constituer un panorama, il faut prendre plusieurs vues. Vous pouvez en prendre deux, trois, et même plusieurs dizaines… L’essentiel est que le logiciel puisse les recouper correctement; pour cela, les vues doivent être légèrement confondues pour que le logiciel puisse faire le lien entre deux photos voisines. Au lieu de prendre des photos de zones voisines mais séparées, il vaut mieux avoir un décalage raisonnable comme dans les deux photos ci-dessous:

Il faut aussi tirer sur se méfier de tout ce qui bouge, des personnes se baladant dans le champ ou des nuages rapides par temps venteux peuvent se retrouver sur plusieurs de vos photos ou apparaitre coupés. Attention donc aux bords des différentes photos, si vous prenez des « corps mouvants », il vaut mieux qu’ils soient en plein milieu d’une photo (ils seront encore entiers au final) plutôt que sur les bords (risque de perturber le recoupement avec les images voisines).

Les professionnels de la photo utilisent des trépieds pour que l’ « œil » de l’appareil photo reste à la même place, ceci évite le phénomène de parallaxe. Ce n’est pas du tout indispensable, personnellement, je porte l’appareil dans mes mains et en veillant à ne pas trop bouger entre deux prises de vue.

La parallaxe est un phénomène tout simple qui veut que si on change un peu de point de vue, l’image vue risque d’être assez différente. On en fait facilement l’expérience: placez votre index à vingt centimètres devant vos yeux, puis fixez le avec l’œil gauche, puis ensuite avec l’œil gauche. Selon les points de vue des yeux, le doigt n’est pas placé pareil par rapport aux objets en arrière plan. Notre cerveau s’en arrange, puisqu’il nous donne la perception de la 3D, mais un logiciel d’assemblage de panoramas apprécie un peu moins.

La documentation d’Hugin recommande si possible d’utiliser un « mode manuel » dans les réglages de l’appareil photo. Ce mode manuel fait que le contraste et la luminosité sont les mêmes pour toutes les prises de vue. Un appareil photo règle automatiquement ces paramètres pour obtenir une photo agréable à l’œil quelque soit l’objet photographié ou la lumière ambiante. Pour illustrer ce principe essayez de viser le ciel, il apparaitra bleu (s’il y a du soleil), puis dirigez l’objectif sur un bâtiment tout en gardant un bout de ciel dans le champ de vision, et bizarrement le ciel paraitra beaucoup plus clair. Ce mode manuel, s’il est présent sur votre appareil photo, peut faciliter la tâche au logiciel de montage, qui est parfois dérouté par les réglages que l’appareil photo fait automatiquement.

En pratique même si vous n’utilisez pas de mode manuel, Hugin a aussi les outils pour uniformiser l’éclairage lors du rendu. La capture ci-dessous montre comment deux photos très différentes sont fusionnées proprement.

Montage

Hugin est un logiciel libre  et multi-plateforme d’assemblage de panoramas. Son installation ne devrait pas vous poser problème: si vous êtes sous GNU/Linux, un paquet hugin est normalement disponible dans votre distribution, sous Windows ou Mac OSX le site officiel permet de récupérer l’exécutable.

Pour la petite histoire, Hugin « n’est qu’une interface graphique » pour les Panorama Tools, une suite d’outils en ligne de commande qui assurent l’assemblage de panoramas.

Hugin est un outil assez expert, il ne cache quasiment rien de sa petite cuisine, on se croirait aux commandes d’un avion, mais il n’empêche que son utilisation est très simple.

L’onglet « Assistant » nous donne les commandes indispensables pour commencer.

D’abord les images

Hugin a tout simplement besoin d’une liste de photos à assembler. On peut en ajouter en cliquant sur le bouton « Ajouter des images », on sélectionne ensuite des images. Il est possible de modifier cette liste dans l’onglet « Images ».

La prochaine étape est aussi simple: cliquez sur « Aligner », ensuite Hugin fait des calculs pour identifier les points de contrôle et relier les images entre elles.

Si vous essayez d’assembler une vingtaine ou une trentaine de photos, les calculs peuvent prendre un certain temps, l’explosion combinatoire fait que l’assemblage de 30 photos m’a pris un quart d’heure

Régler la projection

Maintenant que les calculs sont finis, Hugin affiche une fenêtre « Aperçu rapide du panorama ». Si tout s’est bien passé, on y voit un aperçu de l’assemblage, c’est un aperçu car on peut encore distinguer les différentes images qui sont projetées sur l’écran, alors que dans l’image finale les photos seront fusionnées pour donner un rendu vraiment homogène. En tout cas, on peut vérifier que le logiciel a bien fait le lien entre les photos.

Il est aussi possible de montrer à Hugin quels sont les points communs entre les photos, mais cette méthode est fastidieuse.

La fenêtre offre différents outils plus ou moins utiles. Je détaille ici les plus importants.

Modes de projection

A partir de son ensemble de photos, Hugin a plusieurs méthodes pour disposer les photos dans un panorama, ce sont des méthodes de projection. Historiquement, les méthodes de projection viennent de la géographie, quand on a voulu imprimer des cartes du mondes sur une surface plane, alors que la Terre est une sphère. La projection que vous avez toujours vue sur les grandes cartes depuis l’école primaire est celle de Mercator. La carte du monde en projection Mercator est présentée à gauche, et celle de Peters à droite

On voit bien la différence entre les deux méthodes, avec Mercator le Groenland parait aussi vaste que l’Afrique alors qu’en réalité il est quinze fois plus petit ! En fait ces deux méthodes ont des principes différents: Mercator est faite pour conserver les angles alors que Peters essaie de représenter la vraie surface des continents.

Mais pourquoi parler les projections géographique alors qu’on fait de la photo ? Parce que c’est globalement la même chose que ce que fait Hugin:

  • en géographie on projette l’extérieur d’une sphère (la Terre) en 2D
  • le logiciel de panoramas positionne plus ou moins les photos assemblées sur une section de sphère, qui est vue de l’intérieur, le centre de la sphère est le point de vue de la photo

Pour construire le panorama on a les mêmes systèmes de projection que nos amis géographes, il nous permettent de donner des effets assez différents aux panoramas. Pour en changer, il suffit de choisir (parmi dix-huit options disponibles) dans le menu « Projection » en bas de la fenêtre. Quand vous n’assemblez que deux photos, la projection a essez peu d’importance, mais c’est en essayant plusieurs projections qu’on voit laquelle convient mieux, pour une explication détaillée des projections, voir le wiki des Panorama Tools.

Changer le point de vue

Et si on cliquait sur le bouton « Glisser » ? Apparemment, ça ne fait pas grand chose mais il est activé, c’est bon signe. Maintenant, faisons glisser l’image avec la souris. On peut de cette manière centrer différemment la vue, mais aussi la tourner.

Mais que faire quand on a mis le panorama sens dessus-dessous à force de jouer avec l’outil « Glisser » ? Le bouton « Redresser » est la pour nous aider, il se dérouille pour remettre la vue à l’endroit. « Centrer » est dans la même veine, il retrouve automatiquement le point cental de la vue. « Remplir » ajuste la vue actuelle pour qu’elle remplisse le cadre.

Pour les plus experts, le dialogue « Transformation numérique » réalise en rotation panorama selon des trois axes de vue, avec les angles de lacet, tangage et roulis

D’autres outils permettent de cacher certaines photos (section « Images »), ou d’identifier visuellement les différentes
photos à l’écran (« Identifier »).

Dans la fenêtre, on peut distinguer facilement les différentes photos, car elles sont illuminées différemment. Pas de panique, dans l’étape suivante, lors du rendu notre logiciel règlera la luminosité pour que l’ensemble paraisse homogène.

Rendu du panorama

Pour enregistrer le panorama, il suffit de revenir à la fenêtre, dans l’onglet « Assistant », on clique sur « Créer le panorama », puis on enregistre le fichier.
Seul petit problème, Hugin enregistre par défaut au format TIFF. Comme je suppose que vous préférez le JPEG, allez donc voir dans l’onglet « Assemblage ».
Sous la section « Formats de fichier », vous pouvez choisir d’enregistrer l’image en JPEG.

Conclusion

Nous avons vu la manière de créer assez simplement de magnifiques panoramas avec un appareil photo des plus ordinaires. J’espère que vous aurez envie d’en faire vous aussi et de les partager à votre tour.

Je ne vous ai montré d’Hugin que quelques commandes basiques qui permettent de générer rapidement un panorama, mais en fouillant dans les onglets, vous trouverez plein d’options intéressantes.

Merci à tous les contributeurs d’Hugin et des Panorama Tools pour leurs bons outils, ainsi qu’à ceux de Wikimédia Commons, où j’ai pu trouvé des photos libres pour illustrer ce tuto, comme celle-ci.

Chers escrocs, vous êtes pathétiques

J’ai reçu ce soir un message frauduleux des plus ridicules, apparemment Gmail ne le filtre pas. En tout cas, ce faux qui se veut de Google est bien grossier, avec une adresse qui n’est même pas de Google. Si l’on passe les problèmes de typographie, l’idée ridicule d’envoyer son mot de passe dans un courrier électronique, et les menaces fumeuses; on peut conseiller à ces petites frappes de changer d’activité.

INFO GOOGLE!  verification-reply@mail.com

Chers Membres

Nous avons l\’honneur de porter à votre connaissance que des opérations de vérification ont permis d\’observer de
nombreuses et fausses Adresses sur notre réseau, nous serons dans l\’obligation de supprimer tous les *E-mail*
frauduleux afin de mettre à votre disposition notre service gratuit et fiable.

Veuillez dans un délai de 48h renvoyer les informations correctes ci-dessous :

Nom & Prénom(*):………………..

……..
Date de naissance(*):……………..……
*E-mail* Connexion:(*):…………….…..
Mot de passe(*):……………………….
Confirmation Mot de passe(*):……………
Adresse Secours(*):……………….……
Pays(*):………………….…………..
Région(*):………………..…………..
N° Téléphone(*):……………..………..
N° Mobile(*):………………..………..
Fonction(*):………………………….. Veuillez considérer ce message étant le dernier avertissement avant la fermeture de votre *E-mail*. Cordialement, Notre Equipe !!! 

 

Transformations de coordonnées avec GDAL

Cette petite note technique traite d’une des activités les plus fréquentes quand on travaille avec des données géographiques: la transformation de coordonnées entre différentes projections. L’incontournable PostGIS est pourvu de la fonction st_transform(the_geom,srid), qui passe n’importe quelle géométrie dans le système de coordonnées voulu. Or, il n’est pas toujours possible pour des contraintes techniques ou autres soucis de performances de solliciter PostGIS.

La bibliothèque GDAL est un outil très adapté dans les cas où vous voulez manipuler des données géographiques en C++ ou Python. Celle ci a la mérite d’être bien développée, même s’il n’y a pas vraiment une grande communauté et beaucoup de tutoriel sur ses fonctionnalités. Pour preuve, le site de GDAL n’est autre qu’une documentation générée par Doxygen.

Il n’est pourtant pas très compliqué, en C++ ou Python, de transformer des coordonnées avec GDAL, supposant qu’on utilise le langage C++:

  • Installer la bibliothèque  GDAL, sur des systèmes de type Debian ou Ubuntu:
sudo  apt-get install libgdal1-dev
  • Il est nécessaire de faire les inclusions suivantes:
#include <gdal/ogr_geometry.h>
#include <gdal/ogr_spatialref.h>
#include <gdal/ogr_srs_api.h>s
  • Pour effectuer des transformations d’un système à l’autre, on déclare d’abord deux objets représentant des systèmes de coordonnées, avec la classe OGRSpatialReference, puis l’objet destiné à transformer des coordonnées (classe OGRCoordinateTransformation). Typiquement, on utilise le code EPSG, pour représenter un système de coordonnées. Ici, on instancie la projection 4326 (latitude et longitude) et la projection 25572, qu’on appelle aussi Lambert II, et qui a l’avantage en France de représenter fidèlement les distances en mètres. On cherche alors à transformer les coordonnées de Lambert II vers longitude/latitude
OGRSpatialReference refLonLat;
refLonLat.importFromEPSG(4326);
OGRSpatialReference refLambert;
refLambert.importFromEPSG(27572);
OGRCoordinateTransformation * lambertToLonLat = OGRCreateCoordinateTransformation(&refLambert,&refLonLat);
  • Lorsqu’on veut convertir un vecteur de deux coordonnées, avec les variables x et y, on utilise l’objet de transformation avec la méthode Transform
double x = ...;
double y = ...;
lambertToLonLat->Transform(1,&x,&y);

A noter, les coordonnées sont converties sur place, c’est à dire que les variables (ou tables) qui lui sont données sont modifiées. Si le premier argument vaut 1, on peut lui donner de simples valeurs de type double, ou bien des tableaux de double dans le cas contraire…

Pour convertir des coordonnées en Python, un code Python équivalent serait:

try:
from osgeo import ogr
except:
import ogr
try:
from osgeo import osr
except:
import osr
refLambert = osr.SpatialReference()
refLambert.ImportFromEPSG(27572)
refLonLat = osr.SpatialReference()
refLonLat.ImportFromEPSG(4326)
coordTrans = osr.CoordinateTransformation(refLambert,refLonLat)
point = ogr.Geometry(ogr.wkbPoint)
x = ...
y = ...
point.AddPoint(x,y)
point.Transform(coordTrans)