Telechargé par abdelghanisaid1993

pje-semaine-3-opencv

publicité
PjE – Projet Encadré IVI
Semaine 3 : introduction au traitement
d'images avec OpenCV
Master Informatique : http://www.fil.univ-lille1.fr
Spécialité IVI : http://master-ivi.univ-lille1.fr
Master Informatique – Projet Encadré IVI
1
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Plan du cours
1 – Analyse des images numériques
Image numérique
Démarche globale d'analyse d'une image
Pré-traitements, segmentation, post-traitements
2 – Transformations d'images
Différents types de transformations
Histogramme
Transformations ponctuelles pour l'amélioration du contraste
3 – Traitement d'images avec OpenCV
Présentation de la bibliothèque
Premiers programmes
Interfaces C++ et python
Accès aux pixels
Références
Master Informatique – Projet Encadré IVI
2
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Image numérique : image en niveaux de gris
Double discrétisation
Échantillonnage de l'espace (pixel = picture element)
Quantification de l'intensité reçue en chaque pixel
0,0
752 x
x=445
95
93
87
83
80
73
72
67
63
105
100
94
91
86
80
75
73
67
116
105
102
98
93
86
81
76
73
124
116
110
106
96
92
87
81
77
480
128
123
116
113
105
95
90
85
82
y
135
131
125
119
112
103
99
92
86
142
140
135
126
118
110
106
100
93
147
144
142
133
126
117
111
104
95
154
151
149
141
129
124
119
110
100
y=402
Exemple : codage sur 8 bits
 échelle des niveaux de gris discrets
0
255
Master Informatique – Projet Encadré IVI
3
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Image numérique : représentations
Plane
(standard)
Surfacique
Courbes de
niveaux
Profil de
niveaux
d'après Andrey
Master Informatique – Projet Encadré IVI
4
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Image numérique : image en couleurs
Image couleur
Plusieurs canaux ou plans de composantes
Ex. : codage sur 8 bits  cube des couleurs
Ex.: codage en R, G, B
http://www.morecrayons.com/palettes/webSmart/colorcube.ph
p
Master Informatique – Projet Encadré IVI
5
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Analyse d'image
But
Extraire d'une image des descripteurs quantitatifs des objets représentés.
Image
Analyse
1. x=105.2, y=45.5, S=2130 Mesures
2. x=353.7, y=28.3, S=1830
3. x=134.9, y=303.2, S=2640
4. x=320.3, y=312.6, S=1876
Exemples :
2
1
3
4
Nombre/ID
Position
Dimension
Master Informatique – Projet Encadré IVI
Forme/Orientation ...
6
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Segmentation (1/2)
Généralités
But : distinguer les objets d'intérêt du fond
et identifier ceux-ci.
Principe :
distinguer les objets du fond (binarisation)
= partition de l'image en régions homogènes.
2 approches duales :
régions : utilisation d'une mesure d'homogénéité
Ex. niveau de gris (intensité),
couleur, texture, ...
Permet de classifier les pixels
contours : détection des contours des objets
individualiser chaque objet
Remarque
Étape clé pour l'analyse, souvent délicate  nombreuses méthodes
Master Informatique – Projet Encadré IVI
7
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Segmentation (2/2)
Exemple
Binarisation par seuillage du niveau de gris
Transformation des niveaux t : i  i' = t(i)
Binarisation : t(i) = 0 si i < S , t(i) = 255 si i  S
Identification des objets par
étiquetage en composantes connexes
Un objet correspond à un ensemble de pixels connexes dans l'image
binaire (composantes connexes)
Attribution d'une étiquette (label) propre à chaque composante connexe
Étiquettes
numériques
Étiquettes en
(fausses)
couleurs
Master Informatique – Projet Encadré IVI
8
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Segmentation et analyse
Problème :
1. x=105.2, y=45.5
2. x=353.7, y=28.3
3. x=134.9, y=303.2
4. x=320.3, y=312.6
Image étiquetée
Analyse
Image
segmentée
Étiquetage en CC
Image
Segmentation
Résumé
Mesures
Image initiale dégradée (bruit, faible contraste, illumination variable, ...)
 segmentation délicate, image segmentée difficilement exploitable
Nécessité de
pré-traitements pour améliorer l'image initiale
post-traitements de l'image segmentée
Master Informatique – Projet Encadré IVI
9
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Pré-traitements et post-traitements
Pré-traitements
Correction de la géométrie
(rectification)
Outils : basés sur l'interpolation
Amélioration du contraste
Outils : basés sur l'histogramme
Réduction du bruit
Outils : filtres de voisinage
Post-traitements
Outils : filtres morphologiques
Élimination
des trous dans les objets
des artefacts dans le fond
Fusion d'objets scindés
Division d'objets fusionnés
Master Informatique – Projet Encadré IVI
10
Histogramme
Analyse des images
Transformations Transformations
Amélioration du
d'images
contraste
Bibliothèque
OpérationsOpenCV
algébriques
Transformations d'images : principe et types (1/2)
Principe
Changer la valeur de chaque pixel d'une image I pour obtenir une
nouvelle image I'. Cette image résultat a même taille que I, mais des
propriétés plus intéressantes.
Notation
La transformation est notée t :
Types de transformations
I N ×N
x
y
t
 I ' N ×N
x
y
Ponctuelles (ou pixel à pixel) : la nouvelle valeur I'(x,y) est obtenue à
partir de I(x,y) seulement.
Locales (ou de voisinage) : la nouvelle valeur I'(x,y) est obtenue à partir de
l'ensemble des valeurs initiales I(V (x,y)) dans un voisinage autour du
pixel de coordonnées (x,y).
Globales : la nouvelle valeur I'(x,y) est obtenue à partir de l'ensemble des
valeurs de l'image initiale I.
Master Informatique – Projet Encadré IVI
11
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Transformations d'images : principe et types (2/2)
I
Transformations ponctuelles
t
I  x , y   I ' x , y =t  I  x , y 
x
I'
t
y
x
y
Ex. seuillage, ajustement luminosité/contraste
opérations algébriques, manip. d'histogramme
x
Transformations locales
y
t
I  x , y   I ' x , y =t  I  V x , y  
Ex. filtrage
Transformations globales
t
x
y
V  x , y
I
t
I  x , y   I ' x , y =t  I 
t
I'
x
y
Ex. transformation dans l'espace de Fourier
Master Informatique – Projet Encadré IVI
12
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Histogramme : définition
Définition et notation
Distribution statistique des niveaux de l'image.
h(i) = nombre de pixels de l'image ayant le niveau de gris i.
I 100×100
Master Informatique – Projet Encadré IVI
13
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Histogramme : interprétation
Informations issues de l'histogramme
255
1
luminance de l'image : moyenne des niveaux de gris :  =
i⋅hi 
∑
N x⋅N y i =0
0
=76.4
255
=143.7
0
255
dynamique de l'image : nombre de niveaux [imin , imax] réellement présents.
contraste de l'image : estimé par l'écart-type s.
500
500
0
0
0 imin=66
imax=191 255
0 imin=3
Master Informatique – Projet Encadré IVI
imax=255
14
Analyse des images
Transformations d'images
Bibliothèque OpenCV
Transformations ponctuelles et histogramme
LUT (Look-Up Table)
Table de correspondance définissant la transformation t des niveaux de
gris entre l'image initiale et l'image finale
Cette transformation change la
distribution statistique des
niveaux de gris, caractérisée par
l'histogramme de chaque image
Utilisation (ex.)
Rehaussement
du contraste par
expansion de la dynamique
i'=i
255
max−i min
i −i min 
avec
i −i min
i max−i min
∈[0,1]
Master Informatique – Projet Encadré IVI
15
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : introduction (1/2)
Présentation générale
Qu'est-ce ?
Open Source Computer Vision Library
Bibliothèque open source de traitement des images numériques
Projet initié par Intel (en 1999, actuellement 4.1.1)
Téléchargeable sur https://opencv.org
Fortement orientée temps réel
écrite en C et C++
optimisée pour les processeurs multi-cœurs
Multi-plateformes : disponible pour Linux/Mac, Windows, iOS et Android
Multi-langages : python, Java, Matlab (binding), C#, Perl, Ruby (wrapper)
Que contient-elle ?
Des fonctionnalités (structures, 2500+ routines) pour bâtir rapidement des
applications autour de la vision par ordinateur
Exemples d'utilisation : traitements de bas niveau (filtrage, ...), détection
de visages, reconnaissance et suivi d'objets en mouvement, ...
Master Informatique – Projet Encadré IVI
16
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : introduction (2/2)
Fonctionnalités (modules)
Bas et moyen niveaux
Lecture/écriture d'images et de séquences vidéo (imgcodecs et videoio)
Représentation et manipulations de tableaux et autres structures (core) :
région d'intérêt (ROI), analyse (ACP, LDA), transformées (FFT, DCT), ...
Traitement des images (imgproc) : conversions, filtrage, transformations
géométriques, seuillage, histogrammes, dessin, détection de contours, ...
Détection d'objets et de caractéristiques (objdetect et features2d)
Haut niveau
Interface graphique (huighgui) et visualisation (viz et plot)
Détection et suivi (tracking) d'objets (video), dont visages (face)
Analyse du mouvement (imgproc/motion, video/motion, optflow)
Calibrage (calibration) de caméra et reconstruction 3D (calib3d)
Mise en correspondance stéréoscopique (stereo matching) (stereo)
Apprentissage (machine learning), dont réseaux de neurones (ml et dnn)
Traitement flou (fuzzy processing) (fuzzy)
Master Informatique – Projet Encadré IVI
17
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : premiers programmes (1/2)
Lecture et affichage d'une image
# Importer les paquets nécessaires
import cv2, sys
# Lire l'image lena.png et la stocker dans un tableau
image = cv2.imread("lena.png")
if image is None: # cv2.imread ne lève pas d'exception mais retourne None si échec
sys.exit("Impossible de charger l'image lena.png")
# Créer une fenêtre nommée Exemple1, dont la taille s'adapte à son contenu
cv2.namedWindow("Exemple1", cv2.WINDOW_AUTOSIZE);
# Afficher l'image lena dans la fenêtre Exemple1
cv2.cvShowImage("Exemple1", image);
# Attendre que l'utilisateur appuie sur une touche
cv2.waitKey();
# Détruire la fenêtre
cv2.destroyWindow("Exemple1")
Master Informatique – Projet Encadré IVI
18
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : premiers programmes (2/2)
Conversion et binarisation d'une image
# Importer les paquets nécessaires
import cv2
# Charger l'image d'entrée, créer une fenêtre et y afficher l'image
inp = cv2.imread("lena.png")
cv2.namedWindow("Exemple2-in")
cv2.imshow("Exemple2-in", inp)
cv2.waitKey()
# Convertir l'image couleur d'entrée en image à ndg
inp = cv2.cvtColor(inp, cv2.COLOR_BGR2GRAY)
cv2.imshow("Exemple2-in", inp)
# Créer une image de sortie binaire avec un seuil de 100
seuil, out = cv2.threshold(inp, 100, 255, cv2.THRESH_BINARY)
# Créer une fenêtre et afficher l'image de sortie
cv2.namedWindow("Exemple2-out")
cv2.imshow("Exemple2-out", out)
# Détruire les fenêtres
cv2.waitKey()
cv2.destroyAllWindows()
Master Informatique – Projet Encadré IVI
19
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : API C++
Point{int x, int y} : point (pixel) du plan
: idem avec nombres de type double
: 3 nombres réels (dont coordonnée z)
Size{int width, int height} : taille d'une zone rectangulaire
Rect{int x, int y, int width, int height} : zone rectangulaire
Point2f
Point3f
Ex. de méthode : aRect.contains(aPoint)
Range{int start, int end} : plage d'entiers consécutifs
Vec : conteneur générique pour 2 à 4 entiers ou 2 à 6 réels
Ex. d'utilisation : valeur RGB (dans un Vec<uchar,4>)
Mat{int rows, int cols, int type, …} : tableau multi-dimensionnel
Ex. d'utilisation : image
Types de données : constante CV_<profondeurEnBits>{S|U|F}C<nbCanaux>
CV_32FC1 : flottants sur 32 bits (1 seul canal)
CV_8UC3 : triplets d'entiers non signés sur 8 bits
(3 canaux)
Ex. : Mat img(Size(320,240),CV_8UC3); // image couleur de 320x240 pixels
Master Informatique – Projet Encadré IVI
20
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : API Python
Description
Très similaires à l'API C++ ; 2 possibilités : cv (OpenCV < 3.0) ou cv2
cv : mêmes types qu'en C++
cv2 : utilisation d'objets python
cv
API
cv2
Image
Objet Mat
Objet ndarray (module numpy)
Accès pixel
aMat.at<type>(r,c) ou
aMat.data[index]
anArray[r,c]
Région d’intérêt
(ROI)
Mat roi(aMat,aRect)
roi=anArray[rs:re,cs:ce]
(slicing)
Contours
Objets vector<vector<Point>> (sommets), list de tableaux numpy (sommets),
findContours(…) vector<Vec4i> (hiérarchie)
tableau numpy (hiérarchie)
Utilisation de cv2
Importation du paquet : import cv2
Appel de fonction : [var1, var2,… = ]cv2.func(arg1, arg2,…)
Master Informatique – Projet Encadré IVI
21
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : documentation (1/2)
Ex. : cv2.rectangle(im, (10,10), (50,50), (0,0,255), cv2.FILLED)
Master Informatique – Projet Encadré IVI
22
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : documentation (2/2)
Ex. : imDst = cv2.cvtColor(imSrc, cv2.COLOR_BGR2RGB)
Master Informatique – Projet Encadré IVI
23
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : accès aux pixels (1/2)
numpy
module optimisé pour les opérations matricielles
généralise l'indexation et le slicing des tableaux python
fournit une syntaxe proche de Matlab
Manipulation d'une image en niveaux de gris
Lecture : im = cv2.imread("gray.png",cv2.IMREAD_GRAYSCALE)
0 1 2
→ tableau d'uint8 [ [ 0 25 50 75]
[100 125 150 175]
[200 225 250 255] ]
Accès aux pixels
im[1,3] → 175
im[0,:] → array([ 0, 25, 50, 75])
im[0:2,1:3] → array([ [ 25, 50],
[125, 150]])
im[:,-1] = numpy.zeros((1,im.shape[0]))
Master Informatique – Projet Encadré IVI
3
0
1
2
24
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : accès aux pixels (2/2)
Manipulation d'une image couleur
Lecture : im = cv2.imread("color.png")
→ tableau d'uint8 [ [ [ 0 0 255]
[ 0
[ 0
[ 0
[ [ 0
[ 0
[127
[127
[ [255
[127
[127
[ 0
0
127
127
255
127
127
0
0
0
0
0
127]
127]
0] ]
0]
0]
0]
0] ]
0]
0]
127]
127] ] ]
0
1
2
3
0
1
2
Attention : plans couleur ordonnés BGR
Accès aux pixels
im[1,3] → array([127, 0, 0])
im[:,:,2] → array([ [255, 127, 127,
0],
[ 0,
0,
0,
0],
[ 0,
0, 127, 127]])
Master Informatique – Projet Encadré IVI
25
Analyse des images
Transformations d'images
Bibliothèque OpenCV
OpenCV : références
Livres
G. Bradski & A. Kaehler, « Learning OpenCV », O'Reilly Press (2008)
PDF : https://huit.re/xRrpg5UK, sources C : https://huit.re/g1FtHqNY
J. E. Solem, « Programming Computer Vision with Python », O'Reilly Press
(2012), http://programmingcomputervision.com
Ressources en ligne
Référence complète (4.0.1) : https://docs.opencv.org/4.0.1/modules.html
Wiki : https://github.com/opencv/opencv/wiki
Tutoriels et exemples (dont installation)
http://deusyss.developpez.com/tutoriels/Python/python-en-bref/#LV-Q
http://docs.opencv.org/4.0.1/d6/d00/tutorial_py_root.html
https://www.pyimagesearch.com/practical-python-opencv
http://opencvpython.blogspot.fr
Learning OpenCV by Examples : https://huit.re/UgD8NP8N
Tutoriel sur la vision utilisant OpenCV (en français) : http://bit.ly/2zqYsYY
Master Informatique – Projet Encadré IVI
26
Téléchargement