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⋅hi ∑ 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