Introduction

État de l'art

Travail effectué

Résultats et conclusion

Codes source et binaire

Images et données

Bibliographie

Reconstruction 3D d'une ville à partir de photos: essais sur Sherbrooke




Mini-projet dans le cours IFT786 / Session été 2005





par Éric Beaudry








Université de Sherbrooke
2005-08-04




Introduction

La reconstruction virtuelle de scènes urbaines en 3D à partir d'images photo est utilisée dans plusieurs applications. Il y a quelques années, lorsqu'on voulait montrer un grand projet de construction (complexe commercial, centre hospitalier, etc.), les architectes et promoteurs nous présentaient une belle maquette. De nos jours, pour nous impressionner davantage, on nous présente parfois des images ou même des animations virtuelles de la future construction, accompagnées de l'environnement actuel autour du site. Les architectes peuvent aussi se servir de reconstructions urbaines pour valider leurs projets durant la phase de création. Toutefois, reconstruire une ville virtuelle à partir de photographies aériennes ou prises au sol est un problème complexe. Dans le présent rapport, plusieurs approches sont résumées. Parmi celles-ci, certaines idées ont été retenues afin de réaliser un mini-projet sur la reconstruction du campus ouest de l'Université de Sherbrooke.

État de l'art

Au cours des quinze dernières années, différentes approches ont été proposées pour la reconstruction 3D de sites urbains. Ces approches sont très variées, tant sur le plan des données nécessaires en entrée que sur celui des types de zone supportés (ex.: relief plat ou accidenté) et du degré d'automatisation de la méthode. Les méthodes dépendent aussi du degré de précision désirée. Parfois, on peut se contenter d'une reconstruction grossière alors que dans d'autres cas, on veut reproduire plus fidèlement un petit secteur.

Dans la majorité des approches développées, le principe de base consiste généralement à diviser le problème de reconstruction en plusieurs sous-problèmes.
Selon les données disponibles, les méthodes existantes tentent de résoudre un sous-ensemble de ces sous-problèmes.

Plan de cadastre

Une façon simple et populaire de connaître la localisation de bâtiments est l'utilisation des plans de cadastre des municipalités. Chaque fois qu'un permis de construction est émis, le plan de cadastre de la municipalité est mis à jour. Cette source d'information est donc d'une bonne précision. L'information inscrite dans ces plans se limite généralement à la localisation planaire (2D) de la base du bâtiment et de ses principales caractéristiques comme le type de bâtiment, le nombre d'étages, etc. Par contre, des données comme la hauteur et la forme architecturale ne sont souvent pas disponibles. De plus, le plan de cadastre sous forme électronique, dans un SIG (système d'information géographique), n'existe pas toujours.

Détection de bâtiments par imagerie aérienne ou satellitaire

Une autre façon de trouver la localisation des bâtiments dans une ville est l'utilisation d'images multispectrales (aériennes ou satellitaires) à haute résolution. Avec des algorithmes de segmentation prenant en compte des caractéristiques spectrales et géométriques, on peut détecter la localisation des principaux bâtiments.

Détection de bâtiments par analyse du MNE et MNT

Il est également possible de détecter à la fois la position et la hauteur des bâtiments par l'usage d'un modèle numérique d'élévation (MNE) et d'un modèle numérique de terrain (MNT). Le MNE est une représentation du relief brut d'une scène. Il inclut les arbres, les bâtiments, etc. Par contre, le MNT est une représentation du niveau du sol sans tenir compte des bâtiments.

Pour détecter les bâtiments, il ne suffit que de faire la différence entre le MNE et le MNT. La soustraction du MNE par le MNT donne en quelque sorte tout ce qui dépasse du niveau du sol. Pour discriminer les arbres des bâtiments, on peut analyser la forme des segments ou avoir recours à des images multispectrales de la zone d'études.

Génération d'un MNE par stéréovision

Une façon classique d'obtenir un modèle numérique d'élévation (MNE) est le recours à l'application d'algorithmes de stéréovision sur des paires de photos aériennes. La génération des MNE et des MNT est un problème bien documenté. Des détails supplémentaires sont dans la section travail effectué.

Génération d'un MNE avec capteur actif (laser)

Le MNE peut aussi être généré à l'aide d'équipements spécialisés comme un dispositif laser déterminant l'élévation de points au sol. Le recours au laser permet d'obtenir des MNE avec une très bonne précision de l'ordre du décimètre près.

Dérivation d'un MNT à partir d'un MNE

Le modèle numérique de terrain (MNT) peut être déduit à partir d'un MNE. En filtrant les "bosses" du MNE, on peut obtenir un MNT.

Détermination des hauteurs de bâtiments par ombrages

Par l'analyse des ombres des bâtiments, on peut déduire la hauteur de ceux-ci. Plusieurs méthodes de détection d'ombres existent [10].

Détermination des hauteurs de bâtiments de façon semi-automatique à l'aide d'outils interactifs

Dans certains cas, l'usage d'une méthode simple et semi-automatique peut suffire pour effectuer une reconstruction en 3D. En supposant qu'on a le MNT et le plan de cadastre d'une scène, on peut déjà générer un premier modèle 3D dans lequel les bâtiments ont une hauteur par défaut. Ce modèle peut être affiché à l'écran sous n'importe quel angle et l'utilisateur peut éditer manuellement la hauteur des bâtiments à l'aide de l'information qu'il dispose.

On peut aussi prendre des photos au sol ou sur le toit des édifices offrant une bonne vue. Ces photos peuvent être superposées au modèle 3D initialement créé. En trouvant des points de correspondance entre le modèle virtuel et une photo, on peut déduire la position de la caméra qui a capté l'image. Avec un nombre suffisant de points (3), on peut aussi trouver l'orientation de la caméra. En affichant le modèle 3D par dessus la photo en arrière plan, l'utilisateur peut récupérer l'information des hauteurs avec une bonne précision.

Forme des bâtiments

L'information qui est sans doute la plus difficile à récupérer est la forme des bâtiments. Puisqu'on s'intéresse généralement qu'à obtenir la reconstruction grossière d'une ville, on peut souvent se contenter de représenter les bâtiments avec des primitives géométriques simples. Par exemple, avec les quatre primitives présentées ci-dessous, on peut approximer une grande proportion des bâtiments. Ces primitives peuvent être paramétrées à l'aide de variables décrivant la hauteur du bâtiment, les angles de toiture, etc.

primitives de bâtiment
Pour trouver quelle est la primitive qui correspond le mieux à un bâtiment, plusieurs approches sont possibles. Puisque les toitures sont généralement constituées de surfaces diffuses et planaires, l'illumination de ces dernières renferme des indices. On peut alors faire la segmentation d'une image  aérienne dans les zones où se trouvent des bâtiments.


Figure tirée de [2].

Pour paramétrer les primitives de bâtiment, on peut recourir au MNE. Avec les moindres carrés, on minimise l'erreur entre le modèle virtuel et le MNE. Par contre, pour que ce soit applicable, il faut disposer d'un MNE à une très bonne précision.

Tout comme pour les hauteurs de bâtiments, on peut aussi utiliser des outils interactifs. L'utilisateur sélectionne un bâtiment et choisit la primitive qui correspond le mieux en fonction de ce qu'on peut voir dans les images photo.

Formes complexes d'un groupe de bâtiments

Une situation difficile à traiter est les groupes de bâtiments. Ces derniers, ne pouvant plus être représentés par de simple primitives, doivent être modélisés par des solides plus complexes. Ce problème peut être résolu en décomposant la base du bâtiment (tiré d'un plan de cadastre ou détecté automatiquement) en un nombre minimal de rectangles afin de couvrir l'ensemble du bâtiment. Ces rectangles peuvent se chevaucher. Un exemple de décomposition est montré ci-dessous :


Figure tirée de [2]

Les rectangles obtenus sont ensuite traités indépendamment. Les toitures sont alors détectées pour chaque rectangle de la même façon que s'il s'agissait d'un bâtiment à part entière. Enfin, une dernière étape consiste à faire la fusion des primitives obtenues. Cette fusion s'effectue comme une union de solides, qui est souvent utilisée en infographie pour modéliser des objets complexes.


Figure tirée de [2]

Approche unifiée par séquences d'images

Grâce aux progrès récents en vision artificielle, il est maintenant possible de travailler avec des images provenant de caméras non calibrées. En trouvant automatiquement des points de correspondances entre deux images consécutives, un calibrage automatique peut être effectué. Avec une suite d'images, on peut effectuer le calcul de profondeur par stéréovision à l'aide de différentes paires d'images et ainsi reconstruire la surface d'une scène complexe à l'aide de maillages de triangles [8]. Une application particulière de cette méthode est la reconstruction d'une ville où une ou plusieurs caméras captent des séquences images en avion ou sur terre [5]. L'avantage de ce type de méthode est qu'elle est unifiée. Tout ce qu'on a besoin, c'est des séquences d'images. Il n'est donc plus nécessaire d'obtenir préalablement un MNT et de localiser les bâtiments. De plus, le calcul des hauteurs et la détermination les formes des bâtiments se font implicitement. Un autre avantage est l'augmentation du degré de réalisme par l'extraction automatique de textures qui peuvent être utilisées lors du rendu 3D.

Travail effectué

Approche choisie : une méthode automatique raffinée par une méthode semi-automatique

Le choix de l'approche a été basé sur des critères de faisabilité (temps et données disponibles). Initialement, je me suis orienté vers une méthode automatique pour détecter à la fois la position et la hauteur des bâtiments par l'analyse d'un MNE et d'un MNT générés par stéréovision.

En cours de route, puisque les résultats du MNE n'étaient pas satisfaisants, j'ai passé à une méthode semi-automatique. Cette méthode, expliquée dans [4], consiste à évaluer les hauteurs à partir de photos prises au sol que l'on superpose au modèle virtuel.

Données nécessaires

À la ville de Sherbrooke, le plan de cadastre est disponible sous le format Shapefile. Réaliser un programme pour importer ces données représente un risque en raison du temps limité. De plus, il y a un problème concernant la superposition de ces données aux images aériennes. Afin d'être superposables, ces deux sources de données doivent être géoréférencées, une étape demandant plusieurs heures de travail.

J'ai donc choisi de créer mon propre plan de cadastre à l'aide de polygones que je dessine sur une image aérienne. J'ai donc limité ma scène à celle du campus de l'Université de Sherbrooke.
Dans le but d'obtenir un MNE le plus précis possible, il est nécessaire d'avoir des images avec une bonne résolution spatiale. La cartothèque de l'Université de Sherbrooke possède une bonne collection de photographies aériennes de l'Estrie. Ces photos proviennent de la Photocartothèque québécoise, une institution publique rattachée au ministère des Ressources naturelles du Québec. Les photos sont disponibles à deux échelles : 1/40000 et 1/15000. Désirant la meilleure précision possible, j'ai opté pour l'échelle 1/15000, et ce, malgré le fait que les photos les plus récentes à cette échelle datent de juin 1998.

Ces photos ont été prises avec une caméra soigneusement calibrée. De plus, elles sont spécialement conçues pour reproduire le relief en 3D. Deux photos subséquentes se chevauchent à environ 50 % sur le sens de largeur (direction est - ouest).  Ces photos sont sous format imprimé.

Les numéros d'images que j'ai choisis sont HMQ98-131-181 et HMQ98-131-180. Ces images couvrent une zone qui inclut entièrement le campus ouest de l'Université de Sherbrooke. [Voir infos sur photos]
Afin de réaliser la partie semi-automatique (pour déterminer la hauteur des bâtiments), j'ai pris 44 photos à des endroits stratégiques à l'aide d'un appareil photo numérique.

Afin d'estimer la taille des pixels au sol, j'ai besoin de quelques points de référence au sol. J'ai obtenu des points à l'aide d'une image Ikonos géoréférencée (Image Ikonos, octobre 2004, disponible à la cartothèque, numéro de cote : G3432.S54S541 2005) .

Étape #1 - Construction du relief par stéréovision

Acquisition des images

J'ai numérisé les deux images à une résolution de 1200 dpi, donnant des images numériques de 11 400 x 11 400 pixels. Afin de pouvoir utiliser les paramètres intrinsèques de la caméra, il faut retrouver le cadre original de l'image. Comme indiqué dans le rapport de calibrage de la caméra (voir annexe), le cadre de l'image est délimité par quatre marques aux coins de l'image (voir figure). À l'aide d'une rotation et d'un cisaillement, j'ai réaligné le cadre sur les axes X et Y de l'image. Ces deux transformations affinées ont été fusionnées en une seule étape. De plus, une interpolation bilinéaire a été utilisée. Cette étape a été réalisée par le programme CorrectImageScan, que j'ai développé en Java et qui utilise la librairie JAI (Java Advance Imaging). J'ai par la suite découpé l'image en passant par centre de ces marques.


Fig 1.  Image numérisée avec les marques aux quatre coins

Pseudo-code pour les transformations linéaires :
t = rotation(atan2(p3.x-p1.x, p3.y-p1.y))
p1 = t(p1)
p2 = t(p2)
t *= cisaillement(0, -(p1.y-p2.y)/(p1.x-p2.x))
imageresult = t(imagesource)

Trace des opérations effectuées :
Image gauche : hmq98-131-181.pgm
p1 = (954, 929)
p2 = (10984, 951)
p3 = (901, 10931)
p4 = (10937, 10959)
Image droite : hmq98-131-180.pgm
p1 = (931, 931)
p2 = (10958, 996)
p3 = (834, 10934)
p4 = (10867, 11003)
Résultat : hmq98-131-181_crop.pgm
Résultat : hmq98-131-180_crop.pgm



Après cette étape, j'ai obtenu deux images corrigées ayant comme taille 10 036 x10 008 pixels. De plus, les points centraux des marques des deux images sont exactement aux mêmes endroits et aux quatre extrémités des images.

Approche choisie pour la stéréovision

Bien que les paramètres intrinsèques de la caméra soient parfaitement connus, les paramètres extrinsèques ne sont connus qu'à une très faible précision. Le pilote de l'avion tente de prendre des photos avec une direction de regard s'approchant le plus possible de la droite perpendiculaire au sol. De plus, il essaie d'aligner les axes de la caméra avec les axes nord sud et ouest est. Par contre, en raison des perturbations de l'air, il est très difficile d'avoir ces paramètres exacts. Cela explique les légers décalages entre les deux images.

Positions de la caméra
Fig. 2  Positions de la caméra pour deux images successives.

Au lieu d'implanter l'algorithme à 8 points, j'ai choisi de rectifier une image par rapport à une autre dans le but de pouvoir utiliser l'hypothèse que les directions de regard des deux images sont parfaitement parallèles et que la direction de déplacement de l'avion est alignée sur l'axe de largeur des images. De cette façon, la géométrie épipolaire se simplifie à rechercher dans la même ligne de l'image de droite.

Étape de rectification de l'image de droite

Afin de rectifier l'image de droite par rapport à celle de gauche, j'ai identifié manuellement 4 points de correspondance entre les deux images. Idéalement, ces points doivent s'approcher du rectangle englobant de la zone d'intérêt de la scène, qui est dans ce cas-ci le campus de l'Université. À partir de ces points, j'ai estimé une rotation et une transformation perfective. Cette étape est réalisée avec le programme CorrectImagePerspective (écrit en Java en utilisant la librairie JAI).

image gauche
droite
Image gauche
Image droite

Pseudo-code pour les transformations linéaires :
# angle image gauche
langle = (atan2(p2l.x-p1l.x, p2l.y-p1l.y) +atan2(p4l.x-p3l.x, p4l.y-p3l.y)) / 2
# angle image droite
rangle = (atan2(p2r.x-p1r.x, p2r.y-p1r.y) +atan2(p4r.x-p3r.x, p4r.y-p3r.y)) / 2
# première transformation : une rotation
t = rotation(rangle - langle)
# transformer les points de l'image de droites
p1r = t(p1r)
p2r = t(p2r)
p3r = t(p3r)
p4r = t(p4r)
# Ajuster les Y de l'image droite à celle de l'image gauche
t *= perspective( p1r -> Point(p1r.x, p1l.y),
                  p2r -> Point(p2r.x, p2l.y),
                  p3r -> Point(p3r.x, p3l.y),
                  p4r -> Point(p4r.x, p4l.y))
imageresult = t(imagesource)
Résultat de rectification:
Image gauche
Image gauche non modifiée
Image droite
Image droite rectifiée par
rapport à l'image de gauche

Récupération des paramètres extrinsèques

Avant de procéder à la stéréovision, il faut estimer le déplacement réel de la caméra. Puisqu'on peut faire l'hypothèse que les directions de regard de la caméra sont parfaitement parallèles et que le déplacement de la caméra s'est fait de façon alignée à l'axe des X de l'image, le déplacement peut être estimé en regardant le décalage en largeur entre les deux images.

Pour ce faire, j'ai identifié un point dans l'image de gauche et un autre dans l'image de droite à la même coordonnée pixel. La distance du déplacement de la caméra peut être trouvée en mesurant la distance géographique entre ces deux positions. Cela peut être fait en se déplaçant physiquement aux deux endroits, et, à l'aide d'un récepteur GPS, en notant les coordonnées géographiques. Enfin, en faisant la différence entre les deux, on obtient la distance.

Dans mon cas, au lieu de me déplacer à ces endroits, j'ai consulté une image géoréférencée (en format GeoTIFF), prise par le satellite Ikonos. En retrouvant les mêmes points dans l'image, je peux ainsi déduire les coordonnées géographiques de ces points. Avec cette méthode, j'ai calculé un déplacement d'environ 1524 m.

Pour vérifier si ce déplacement est significatif, j'ai aussi calculé le déplacement noté par l'avion. L'image HQM98-131-181 a été prise à la coordonnée (Long=-71,93°, Lat=45,37°) et l'image HMQ98-131-180 à la coordonnée (Long=-71,91°, Lat=45,37°). Bien que ces données ne soient pas d'une grande précision, la distance entre ces deux coordonnées  est de 1568 m.

Nouvelles hypothèses

À la suite de la rectification, j'ai établi de nouvelles hypothèses :



Algorithme de stéréovision implanté

À la base, l'algorithme implanté est très simple. Pour chaque pixel de l'image de gauche, on recherche dans la même ligne de l'image de droite le pixel correspondant. La mise en correspondance est effectuée par une simple corrélation sur une fenêtre se déplaçant dans les deux images.

Comme les images utilisées sont de grande taille, ce premier algorithme n'est pas très efficace. J'ai procédé à une amélioration qui essaie de borner la région de recherche dans l'image de droite. En supposant que le changement d'altitude entre 2 points soit petit (<15 mètres), on peut prédire efficacement dans quel segment de ligne un pixel de l'image de gauche apparaîtra dans l'image de droite.

Un autre problème à résoudre est celui des régions fortement homogènes. À certains endroits dans l'image, la dynamique est nulle. Afin d'éviter des résultats arbitraires dans ces régions, deux mesures ont été prises. La première consiste à prendre une taille de fenêtre assez grande et la deuxième, à utiliser une fonction d'énergie calculée dans la fenêtre de l'image de gauche. Lorsque la valeur de cette fonction d'énergie est trop faible, la profondeur de ce pixel n'est pas calculée. La profondeur est alors mise à la valeur du plus proche pixel (à défaut de faire une interpolation).

Pseudo-code :
T : déplacement de la caméra dans le sens ouest-est
f : distance focale
l : largeur du plan image
altitude[ *, * ] = Indéfinie
Pour tout (x, y) de l'image de gauche
  altitude_min = Min{ Min{altitude(x-10 à x-1, y)}, Min{altitude(x, y-10 à y-1)} }
  altitude_max = Max{ Max{altitude(x-10 à x-1, y)}, Max{altitude(x, y-10 à y-1)} }
  altitude_min -= 15
  altitude_max += 15
    scene_min = camera_gauche.convertir_en_coor_scene(x, y, altitude_min)
    scene_max = camera_gauche.convertir_en_coor_scene(x, y, altitude_min)
    rx1 = camera_droite.convertir_en_coor_image(scene_min)
    rx2 = camera_droite.convertir_en_coor_image(scene_max)
    mx = trouver_correspondance(rx1, y-1, rx2, y+1)
    if(energy>seuil)
       altitude[x,y] = f * T / (mx-x) * l
    else
       altitude[x,y] = dernière_valeure(altitude[,])
Résultats :

Zone où le MNE est calculé
(Image d'origine à 2009 x 2002)

Résultat: mne_result2.pgm
(Taille fenêtre : 19 x 19)


Zone où le MNE est calculé
(Image d'origine à 2009 x 2002)

Résultat: mne_result3.pgm
(Taille fenêtre : 15 x 15)
Meilleurs résultats obtenus (en noir ce qui est le plus bas, en blanc ce qui est le plus haut).



Un MNE sous une vue en 3D

Filtrage du MNE

Le MNE précédemment obtenu est fortement bruité (des pics ressortent à plusieurs endroits). J'ai donc procédé à quelques filtrages pour obtenir un meilleur résultat. Une première passe a été faite avec un filtre médian avec un fenêtrage de 7x7 afin d'éliminer les valeurs extrêmes. Par la suite, afin d'adoucir les courbes de niveau, j'ai appliqué un filtre gaussien. Enfin, pour ne pas surcharger OpenGL, j'ai réduit la taille de mon MNE à une résolution de 256 x 255.


MNE filtré.


MNE filtré en 3D avec l'image aérienne en texture 2D.

Corrections géométriques

Aucune correction géométrique n'a été faite. Normalement, avant d'utiliser le MNE (ou l'image aérienne elle-même) comme une carte, il faut corriger les distorsions géométriques engendrées par le relief du terrain.

Validation quantitative

Aucune validation n'a été faite sur le MNE résultant. Pour la suite du mini-projet, j'ai supposé que le MNE obtenu était bon.

Étape #2 - Carte du campus ouest

Puisque l'usage d'un vrai plan de cadastre a été mis de côté, la construction de la carte se fait manuellement à l'aide d'un petit "Widget" écrit en C++/QT. En arrière plan, une image aérienne est affichée. Sur le dessus, je dessine des polygones formant les bâtiments. Cette étape aurait pu être remplacée, ou du moins, initialisée par une méthode automatique segmentant l'image.

édition de la carte

Pour ajouter un bâtiment, il suffit de cliquer sur le bouton droit, de choisir "Insérer bâtiment", de cliquer avec le bouton gauche sur les coins du bâtiment dans l'image et de terminer avec le bouton droit. Il sera ensuite possible de corriger ces points un à un en les déplaçant.

Limites et points à améliorer :

Étape #3 - Première passe pour le calcul des hauteurs

Les bâtiments sont placés sur un MNE précédemment calculé. L'élévation du bâtiment est déterminée en trouvant une valeur minimale du MNE située à proximité du bâtiment. La hauteur du bâtiment est déterminée en trouvant une valeur maximale du MNE à l'emplacement du bâtiment. Cette première attribution est faite lors de la création d'un nouveau bâtiment.

Étape #4 - Correction manuelle des hauteurs

Finalement, comme dernière étape, des photos ont été superposées au modèle virtuel afin de corriger la hauteur de certains bâtiments.


Photo du monde réel.


Rendu du modèle virtuel.


Superposition de la photo et scène 3D
(pas très visible par contre).

Analyse de la superposition (attention:
les lignes rouges et bleues ont été ajoutées
sur la capture de l'écran).

Sur l'analyse (voir image #4), les lignes rouges représentent les frontières du pavillon central sur la photo et les lignes bleues sont les frontières du modèle 3D. On voit clairement que la hauteur du pavillon central est trop grande sur le modèle 3D par rapport à la photo correspondante. De plus, le centre culturel ne devrait pas être visible sous cet angle.

Problèmes rencontrés

Le MNT obtenu, qui est en réalité encore un MNE, n'est pas encore bien filtré. Certains obstacles, principalement des arbres, dépassent du sol et cachent certains angles. Il y a aussi des zones entre les bâtiments rapprochés qui causent problème. Le niveau du terrain fait une pente à côté des bâtiments. Sur certaines photos prises entre deux bâtiments (ex.: entre le A1 et A2), il n'est pas possible de placer la caméra virtuelle au même endroit, car elle est sous le niveau du terrain. Il est donc difficile de trouver des points de repère pour corriger la hauteur des bâtiments. De plus, étant donné que le MNE est encore imparfait, fixer des points de repère sur ce dernier est un élément d'incertitude.

Procédure pour voir une photo:
  1. Aller dans l'éditeur de carte
  2. Bouton droit : ajouter une photo
  3. Parcourir le disque et choisir une image photo
  4. Entrer les paramètres demandés
  5. Revenir dans le modèle 3D et appuyer sur "i" pour voir l'image superposée
  6. Déplacer la caméra : les flèches du clavier, page up/down, bouton gauche de la souris + drag, etc.
  7. Lorsque la caméra est bien placée, pour lier la position à la photo, appuyer sur la touche "p"
  8. Des points de correspondances peuvent être ajoutés
    1. appuyer sur la touche "s" pour voir les sommets
    2. cliquer (gauche) sur un sommet pour le sélectionner
    3. cliquer (droit) sur le point correspondant dans la photo
    4. appuyer sur "l" pour lier la correspondance
    5. une ligne rouge relira les 2 points

Résultats et Conclusion



Résultat obtenu.

Le résultat obtenu des bâtiments n'est pas si mal. On peut y reconnaître la forme des principaux bâtiments de l'UdeS. En traitant mieux le MNT utilisé, on pourrait réduire les pentes entourant les édifices. En résumé, la détermination des hauteurs de bâtiment par le MNE constitue déjà un bon début. Sur le résultat plus haut, seulement quelques corrections ont été faites, à partir de photos ou d'informations connues quant à la taille relative entre certains bâtiments.

Enfin, certains points importants seraient à améliorer. Il faudrait entre autres améliorer l'implémentation de l'algorithme de stéréovision utilisé pour générer le MNE. Une approche à plusieurs passes sur plusieurs échelles devrait améliorer la qualité et le temps de calcul nécessaire pour la génération du MNE. De plus, une meilleure technique de mise en correspondance serait à utiliser. Avec ces deux améliorations, on pourrait revenir à une résolution plus fine des images aériennes utilisées et obtenir une meilleure indication sur les hauteurs de bâtiments. Il faudrait aussi travailler sur les toitures. Actuellement, seuls les toits plats sont supportés. Par chance, le campus ouest de l'UdeS ne contient pratiquement que des toits de ce type, à l'exception des nouvelles résidences.

Codes source et binaire

Interface du mini-projet:
Notes :


Programmes outils en Java:
Note : Certains outils ont été réalisés en Java pour des raisons techniques. Ayant besoin d'opérateurs géométriques (transformation warp affine: rotation, perspective, ...) avec interpolation bilinéaire, j'ai préféré utiliser la librairie JAI (Java Advanced Imaging) déjà faite plutôt que de les implanter. De plus, JAI est conçu pour traiter de très grandes images sans les charger complètement en mémoire.

Présentation

Annexe: Images et données

Les données utilisées pour le projets sont dans le répertoire data du CD fournis.

Images aériennes sources :

Photos prises au sol :

Images et résultats intermédiaires :
Résultats (MNE) :
Fichiers finaux :

Bibliographie

[1] C. Baillard et M. Maître.  3-D Reconstruction of Urbain Scenes from Aerial Stereo Imagery: a Focusing Strategy, 1998.
[2] C. Brenner et N. Haala.  Fast Production of virtual reality city models. In: Proceedings ISPRS Comm. IV Symposium, Stuttgart, Sept. 7-10., 1998, IAPR, Vol. 32, Part 4.
[3] R.T. Collins, A.R. Hanson, E.M. Riseman et H. Schultz.  Automatic Extraction of Buildings and Terrain from Aerial Images.  Internationnal workshop on automatic extraction of man-make objects from aerial and spaces images. April 1997, p169-179.
[4] C. Chevrier et J.P. Perrin.  Interactive 3D reconstruction for urban areas: an image based tool.  [PDF]
[5] O. Faugeras, L. Robert, S. Laveau, G. Csurka, C. Zeller, C. Gauclin et I. Zoghlami.  3-D Reconstruction of Urban Scenes from Image Sequences.  Computer Vision and Image Understanding. Vol 69, no 3, March, p. 292-309, 1998.
[6] N. Haala et C. Brenner. Extraction of building and trees in urban environnements, Joural of Photogrammetry & Remote Sensing 54 (1999) 130-137.
[7] Y-P. Hung, C-S. Chen, K-C. Hung, Y-S Chen, C-S. Fuh.  Multipass hierarchical stereo matching for generation of digital terrain models from aerial images.  Machine Vision and Application (1998) 10: 280-191.
[8] R. Koch, M. Pollefeys, L. Van Gool, Realistic surface reconstruction of 3D scenes from uncalibrated image sequences, Journal Visualization and Computer Animation, Vol. 11, pp. 115-127, 2000.
[9] H-Y. Lee, T. Kim, W. Park et H.K. Lee.  Extraction of digital elevation models from satellite stereo images through stereo matching based epipolarity and scene geometry. Elsevier, Image and Vision Computing, 21 (2003) 789-796.
[10] Massalabi, A., D. C. He et G. B. Bénié. Détection et exploitation des zones d'ombre sur les images de très haute résolution spatiale en milieu urbain : application aux données IKONOS de Sherbrooke. AQT et CASI. 25e Symposium canadien sur la télédétection. Montréal, Québec, Canada. 14-17 octobre 2003.
[11] R. Nevatia, C. Lin et A. Huertas.  A System for Building Detection from Aerial Images.  1997
[12] E. Trucco et A. Verri. Introductory Techniques for 3-D Computer Vision. Prentice Hall, 1998.




(C) Eric Beaudry 2005. Tous droits réservés.
Valid HTML 4.01! Valid CSS!