Commit 8dbf0c2b authored by Matthieu PERREIRA DA SILVA's avatar Matthieu PERREIRA DA SILVA
Browse files

Nettoyage des TPs et homogénéisation

Ajout de cellues question et réponse dans tous les TP.
Corrections de quelques bugs liés au nouvelles version des dépendances
parent a94dec86
.ipynb_*
.venv
.vscode
\ No newline at end of file
......@@ -2,4 +2,4 @@
Notebooks python pour les TPs image info 4
**Dépendance**: jupyter, numpy, scipy, scikitimage
\ No newline at end of file
**Dépendance**: voir le fichier requirements.txt
\ No newline at end of file
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
%% Cell type:markdown id: tags:
 
# Mise en correspondance d'images par points d'intérêt
 
%% Cell type:markdown id: tags:
 
Ce TP est une version très modifiée d'une des démo de https://github.com/scikit-image/scikit-image-demos
 
%% Cell type:code id: tags:
 
``` python
%matplotlib inline
%matplotlib widget
 
import numpy as np
import matplotlib.pyplot as plt
from skimage import io
from skimage import transform as tf
from skimage import exposure
import math
from skimage.color import rgb2gray
 
 
def compare(*images, **kwargs):
"""
Utility function to display images side by side.
 
Parameters
----------
image0, image1, image2, ... : ndarrray
Images to display.
labels : list
Labels for the different images.
"""
f, axes = plt.subplots(1, len(images), **kwargs)
axes = np.array(axes, ndmin=1)
 
labels = kwargs.pop('labels', None)
if labels is None:
labels = [''] * len(images)
 
for n, (image, label) in enumerate(zip(images, labels)):
axes[n].imshow(image, interpolation='nearest', cmap='gray')
axes[n].set_title(label)
axes[n].axis('off')
 
plt.tight_layout()
```
 
%% Cell type:markdown id: tags:
 
## 1. Construction de la paire d'images
 
 
### 1.1 Paire initiale
Indication de la paire d'images à traiter. Il y a 4 paire d'images proposées, on fera les expériences avec chacune des paires, car elles présentent des situations différentes.
 
%% Cell type:code id: tags:
 
``` python
pano_imgs = io.ImageCollection('partie1/mairie*') # translation de face
#pano_imgs = io.ImageCollection('persp/persp*') # angle de vue assez différent
#pano_imgs = io.ImageCollection('mairie_b/mairie*') # facteur d'échelle différent
#pano_imgs = io.ImageCollection('chateau/chateau*') # chateau
```
 
%% Cell type:markdown id: tags:
 
Observons la paire d'images ci-dessus.
* Quel est, à vue d'oeil, le mouvement réel 3D de la caméra ?
* Quel est, à vue d'oeil, le mouvement 2D apparent dans l'image ?
* Quelles seront, à première vue, les difficultés pour la mise en correspondance ?
 
%% Cell type:code id: tags:
 
``` python
compare(*pano_imgs, figsize=(15, 10))
```
 
%% Output
 
 
%% Cell type:markdown id: tags:
 
Credit: Images of Private Arch and the trail to Delicate Arch in Arches National Park, USA, taken by Joshua D. Warner.<br>
License: CC-BY 4.0
 
%% Cell type:markdown id: tags:
 
L'extraction des points d'intérêt et le calcul des descripteurs sur ces points d'intérêt se fait sur les images en niveau de gris.
 
 
### 1.2 Paire modifiée pour plus de défi
 
On applique aussi, optionnellement, des transformations (artificielles) sur la 2eme image, pour ajouter un peu de piquant au défi. Pour commencer, on s'en tient à une rotation de 0 et une transformation de luminance gamma=1 (pas de transformation).
 
%% Cell type:code id: tags:
 
``` python
 
image0 = rgb2gray(pano_imgs[0])
image1 = rgb2gray(pano_imgs[1])
 
 
rotation_on_image = 0
scale_on_image=1
gamma_on_image=1
 
# rotation_on_image = math.pi/32
# scale_on_image=1.3
# gamma_on_image=1.2 # si 0<gamma<1 : plus clair, si gamma>1 : plus foncé, essayer par exemple 0.5 et 2
 
tform = tf.SimilarityTransform(scale=scale_on_image, rotation=rotation_on_image,
translation=(0, 0))
 
image1 = tf.warp(image1,tform)
 
image1=exposure.adjust_gamma(image1, gamma=gamma_on_image, gain=1)
 
# View the results
 
print("Modèle de transformation=",tform.params)
compare(image0, image1,figsize=(15, 10))
```
 
%% Output
 
Modèle de transformation= [[ 1. -0. 0.]
[ 0. 1. 0.]
[ 0. 0. 1.]]