Vous êtes sur la page 1sur 76

2023-2024 Nassima Ben Younes

Objectifs
2

 Introduire les notions fondamentales de la vision par

ordinateur.

 Acquérir une certaine intuition du traitement d'images et

de flux vidéo

 Faire un tour d'horizon de la vision par ordinateur,


Plan
3

 Qu'est-ce que la vision ?

 Présentation de OpenCV
 Fonctionnalités
 Installation de OpenCV
 Configuration de l’environnement
 Manipulation des images
Introduction
4

 La Vision est un processus continu de traitement de


l’information. L’entrée du système est constituée par
une série d’images. Le système fait appel et
apporte par lui-même un certain nombre de
connaissances qui interviennent à tous les niveaux.
La sortie est une description de l’entrée en termes
d’objets et de relations entre objets.
 Du point de vue de la vision, une image est un donc
signal continu de représentation des objets.
Vision artificielle
5

 La vision artificielle est une branche de l’intelligence


artificielle qui a pour objectif de développer un
modèle computationnel pour la perception
visuelle. La vision humaine est complexe. Néanmoins,
la vision artificielle est considérée comme un sous
système de la vision humaine.
Qu'est-ce que la vision ?
6

 Discerner et reconnaître les formes, les couleurs et les


textures du monde qui nous entoure.
 Besoins des yeux : servent qu'à capter le signal contenu
dans les rayons lumineux qui viennent frapper nos rétines,
sans extraire des informations.
 C’est le travail de la zone de notre cerveau que nous
appelons le cortex visuel.
 Cela veut dire que la vision, c'est l'association entre
le sens de la vue et un ensemble de processus
cognitifs pour lesquels nous avons besoin d'utiliser
notre cerveau.
Vision artificielle
7
Vision artificielle
8

 Le paradigme du modèle de la vision artificielle se


compose de 3 étapes :
1. La Segmentation est la séparation de l’image en
objets
2. La Reconstruction est la constitution de la scène
à partir de la capture de plusieurs images.
3. La Reconnaissance (ou Interprétation) est une
fonction sémantique qui consiste à donner un
sens, à reconnaître, à nommer les objets. La
connaissance sémantique n’est pas contenue dans
l’image. Elle dépend des connaissances a priori.
Vision artificielle
9
Vision artificielle
10

 Du point de vue du paradigme de la VA, la vision


artificielle se répartit en plusieurs domaines :
 Traitement d’images (Amélioration, Restauration,
Débruitage, Segmentation)

 Analyse d’images (Calcul des attributs d’une image)

 Détection des objets (Reconnaissance des Formes,


Vision Cognitive)
11

Amélioration Restauration

Débruitage Correction et Compensation

Détection
Segmentation
Domaine d’application
12

 Les Applications de la VA sont nombreuses : la


Robotique, la Médecine, l’Industrie Automobile,
l’Aviation, la Météo, le Multimédia, Le Militaire, La RA,
la VA etc.
 Vous trouvez plusieurs applications dans ce lien.
 https://www.intel.fr/content/www/fr/fr/internet-
of-things/computer-vision/overview.html

Image
13

 Une image est une représentation d’un objet exposé


à une source énergétique, et produite par un
capteur.
 Une image produite par un capteur est un signal
caractérisé par sa dimension et sa nature.
 La dimension correspond à l’espace du signal : 1D, 2D,
3D.
 La nature de l’image correspond à la nature de la
gradeur mesurée.
Image
14

 Une image peut alors être assimilée à une matrice


de points appelés « pixels ».
 Les appareils photos numériques effectuent la
transformation d’eux-mêmes, fournissant
directement une image facilement manipulable par
ordinateur.
 Une image peut affichée sur un moniteur,
imprimée, modifiée, enregistrée etc.
La numérisation d’une image
15

 La numérisation d’une image :


 Transformation : Production d’un signal électrique.
 Discrétisation : Echantillonnage et quantification

 Enregistrement du signal numérisé.

 Discrétisation :
 échantillonnage (discrétisation de l’espace) et
 quantification (discrétisation des couleurs).
L’échantillonnage
16

 La phase d’échantillonnage consiste en la


transformation de l’image analogique (continu), en
image numérique (discret).
 L’échantillonnage est le procédé de discrétisation
spatiale d’un signal continu.
 Le signal est échantillonné en points appelés pixels
(PIcture ELements) et disposés dans une structure
appelée pavage.
L’échantillonnage
17

 L’échantillonnage va ainsi permettre de définir la


résolution de l’image,

 c'est-à-dire le nombre de pixels qu’elle contiendra.


Plus la résolution est élevée, plus l’image sera
détaillée. Sa taille augmentera en conséquence.
La quantification
18

 La quantification offre une approximation du signal


continu par des valeurs d’un ensemble discret de
taille variable.

 Il est ainsi possible de discrétiser les niveaux de


gris ou bien les couleurs de l’image selon le résultat
qui nous intéresse.
La quantification
19

 Le travail de quantification d’une image couleur


consistera à décomposer l’image continue en
plusieurs composantes, suivant le système de
couleurs choisi.
 La quantification est la discrétisation tonale
correspondant à la limitation du nombre de valeurs
différentes que peut prendre chaque point de
l’espace auquel on attribue un format de bits
Numérisation
20
Exemple
21

Une image numérique 2D est associée à un pavage


rectangulaire. Chaque pixel est défini par 2 coordonnées (x, y)
et son intensité I(x, y).
Une « fonction d'intensités lumineuses »
22

 Une image est ce que capte la rétine au fond de l'œil ou le


capteur photosensible d'une webcam.
 Une image, ce n'est rien d'autre que la projection de rayons
lumineux provenant du monde extérieur sur un plan.
 Dans un premier temps, nous allons faire l'hypothèse que les
rayons lumineux qui viennent frapper le plan de l'image
sont caractérisés par leur intensité uniquement.
 Cela signifie que sur notre plan, que l'on munit d'un repère
en bons cartésiens que nous sommes, on associe à chaque
paire de coordonnées (x,y) une valeur I(x,y) que l'on
appellera un niveau de gris : plus le point est lumineux, plus
la valeur du niveau de gris est élevée.
Une « matrice de pixels »
23

 Il n'est pas utile, ni réalisable d'observer la totalité


d'une surface dans le plan R2 pour avoir une image.
 Intuitivement, cela voudrait dire que nous pourrions
connaître l'intensité lumineuse au point (3,5) aussi bien
que celle au point (3.0029,4.9987), et même que nous
pourrions encore capter l'infinité des intensités
lumineuses sur le segment reliant ces deux points,
 Ceci n'est pas possible même dans le monde réel, vu
que les capteurs des caméras, tout comme nos rétines,
sont composés d'un nombre fini de cellules…
Une « matrice de pixels »
24

 On peut ranger tous les niveaux de gris que l'on


capte dans une matrice.
 Une image numérique est définie alors comme
étant une matrice de pixels.
 Un pixel : un élément d'une image
 Le mot pixel vient de l'anglais "picture element".
 Considérons à présent qu'un pixel est un niveau de
gris, mais ce n'est pas toujours le cas.
Une « matrice de pixels »
25

Image sous forme d’une matrice

Image agrandit
Une « matrice de pixels »
26

 Les pixels blancs correspondent au niveau de gris


255 alors que les pixels noirs correspondent au
niveau 0.
 On dit que l'intensité lumineuse est échantillonnée sur
256 valeurs.
Formats d’enregistrement
27

 Format 1 bit bpm (Bit Map): format 1 bit à 2


valeurs 0 et 1. 0 correspond à la couleur noire et 1
correspond au blanc. L’image est binaire.
Formats d’enregistrement
28

 Format 8 bits pgm (Grayscale Map): format à 8


bits permettant de représenter 256 couleurs en
niveaux de gris. 0 correspond à la couleur noire et
255 correspond au blanc.
Formats d’enregistrement
29

 Format 3*8 bits ppm (Pix Map): triplet de format 8 bits (R, G, B)
permettant de représenter un pixel par 3 valeurs à 256 couleurs.
 (0, 0, 0) : Noire,
 (255, 0, 0) : Rouge,
 (255, 255, 0) : Jaune
 (255, 255, 255) : Blanc.
 Formats de : JPEG, TIFF, PNG, GIF.
Caractéristiques d’une image
30

 Etant donnée une image I codée sur k bits de


résolution (M,N), les caractéristiques primaires sont :
1. Résolution spatiale ou Définition : Nombre total
de pixels de l’image : Def = M*N

2. Densité de résolution : Nombre de pixels par


unité de surface ou de longueur

3. Brillance ou luminance : la moyenne des


intensités de tous les pixels
Caractéristiques d’une image
31

5. Contraste : Soient max= Max(I(x,y)) et min =


Min(I(x,y)), alors le contraste de l’image I peut être
défini de plusieurs manières :

6. Dynamique de l’image : le domaine réel des


intensités [ min, max]. La dynamique disponible de
l’image est [ 0, 2k-1].
Transformation d’une image
32

 Transformation ponctuelle : transformer chaque niveau


d’intensité i ’une image en un autre niveau d’intensité i’
par une fonction de transformation appliquée à tous les
pixels
 Transformation locale : transformer chaque niveau
d’intensité i d’un pixel p d’une image en une intensité
dépendant de la localisation de p, de son intensité et
des intensités de son voisinage par une fonction locale
de voisinage.
 Transformation globale : changer de base ou de
domaine de définition de la fonction image.
Transformation d’une image
33

 Histogramme d’une image


 Histogramme normalisé
 Histogramme cumulé
 Histogramme cumulé normalisé
 Modification d’histogramme
 Fonction de binarisation
 Fonction d’inversion
 Fonction de Recadrage dynamique
 Fonction de rehaussement logarithmique
 Fonction d’Egalisation
Histogramme d’une image
34

 Comment calculer l'histogramme d'une image ?


 Faire l'histogramme d'une image, c'est compter combien il y
a de pixel pour chaque valeur possible que peut prendre
un pixel. Si nous avons une image en niveau de gris où les
valeurs sont représentées sur 8 bits, nous aurons un
histogramme de 255 valeurs. 8 bits donne 28 valeurs
possibles.

 Comment calculer l'histogramme d'une image normalisé?


 Pour un histogramme normalisé, la valeur de chaque classe
s'interprète comme la probabilité d'occurrence de la classe
dans l'image.
Histogramme d’une image
35

 Comment calculé l’histogramme cumulé


 L'histogramme cumulé représente la distribution cumulé
des intensités des pixels d'une image, c'est-à-dire le
nombre de pixels ayant au moins une intensité
lumineuse donnée.
 Comment calculé l’histogramme cumulé normalisé
 l’histogramme cumulé normalisé indique le taux de
pixels dont le niveau de gris est inferieur à un niveau x
Exemple + Algorithme
36
CONVERSION EN NIVEAUX DE GRIS
37

 Pour définir un gris en RGB, il suffit de prendre la


moyenne des trois composantes R, G, B
grix = ((R+G+B)/3)
CONVERSION EN NOIR ET BLANC (SANS
38
GRIS)(BINARISATION)
 Noir et blanc s'entend ici comme dégradé de
niveaux de gris. Pour la transformation d'une image
en binaire noir ou blanc (uniquement du noir et du
blanc, pas de gris)
Binarisation
39

 La binarisation consiste à transformer un pixel sur


plusieurs bits (2, 4 , 8 ou plus) en une image sur 1
bit. Pour ça, nous allons faire un seuillage.
 Si la valeur du pixel est en dessous du seuil, nous lui
associons la valeur 0.
 Si la valeur du pixel est égale ou supérieure au seuil
nous lui donnons la valeur 1.
Algorithme de binarisation
40

1. Pour chaque pixel (x,y) de niveau I(x,y) faire


2. Si I(x,y) < seuil alors
3. I(x,y) = 0
4. Sinon
5. I(x,y) = 1
6. FinSi
7. FinPour
Inverser les couleurs
41

 Le calcul est assez simple puisqu'il suffit de rendre


les pixels sombres clairs et vice versa. Afin de
donner une équation mathématique juste, nous
faisons :
 NF = (256 - Ni).
Opérations arithmétiques et logique
42
d’images
Opérations arithmétiques et logique
43
d’images
Opérations arithmétiques et logique
44
d’images
Exemple
45
Exemple
46
Exemple
47
48 Partie Programmation
Open CV
Présentation de OpenCV
49

 OpenCV (Open Source Computer Vision) est une


bibliothèque proposant un ensemble de plus de
2500 algorithmes de vision par ordinateur,
accessibles au travers d'API pour les langages C,
C++, et Python.
 Elle est distribuée sous une licence BSD (libre) pour
les plate-formes Windows, GNU/Linux, Android et
MacOS.
Présentation de OpenCV
50

 Historique : Ecrite en C il y a plus que 10 ans par


des chercheurs de la société Intel,
 Aujourd'hui : développée, maintenue, documentée et
utilisée par une communauté de plus de 40 000
membres actifs.
 C'est la bibliothèque de référence pour la vision
par ordinateur, aussi bien dans le monde de la
recherche que celui de l'industrie.
Fonctionnalités :
51

 core : les fonctionnalités de base.


Cette bibliothèque permet de manipuler les structures de base, réaliser des
opérations sur des matrices, dessiner sur des images, sauvegarder et charger des
données dans des fichiers XML…
 imgproc : traitement d'image.
Nous entrons dans le cœur du sujet. Les fonctions et structures de ce module ont trait
aux transformations d'images, au filtrage, à la détection de contours, de points
d'intérêt…
 features2d : descripteurs.
Ce module concerne principalement l'extraction de descripteurs selon deux
approches courantes (SURF et StarDetector)
 objdetect : détection d'objets.
Cette bibliothèque permet de faire de la reconnaissance d'objets dans une image
au moyen de l'algorithme Adaboost (Viola & Jones, 2001).
Fonctionnalités :
52

 video : traitement de flux vidéo.


Ces fonctions servent à segmenter et suivre les objets en mouvement
dans une vidéo.
 highgui : entrées-sorties et interface utilisateur.
OpenCV intègre sa propre bibliothèque haut-niveau pour ouvrir,
enregistrer et afficher des images et des flux vidéo. Celle-ci contient
aussi un certain nombre de fonctions permettant de réaliser des
interfaces graphiques très simples, mais largement suffisantes pour
tester nos programmes.
 calib3d : calibration, estimation de pose et stéréovision.
Ce module contient des fonctions permettant de reconstruire une
scène en 3D à partir d'images acquises avec plusieurs caméras
simultanément.
Installation de OpenCV
53

 Sous Windows :
 Microsoft Visual Studio : vous avez tout intérêt à
utiliser l'installeur exécutable, puisqu'il contient les
bibliothèques compilées spécialement pour votre
IDE.
 Un autre IDE (Code::Blocks, Eclipse, etc.), il faudra
que vous téléchargiez le paquet OpenCV-2.X.Y-
win-src.zip, et que vous génériez les bibliothèques
d'OpenCV avec Cmake.
Configuration de l’environnement
54

 La génération des programmes en C se fait en deux


étapes : la compilation du code et l'édition des
liens. De façon à pouvoir utiliser une bibliothèque
tierce, votre compilateur doit savoir où il peut
trouver les fichiers d'en-tête d'OpenCV, et l'éditeur
de lien (linker) doit savoir dans quelles
bibliothèques se trouvent les symboles des fonctions
qu'il utilise.
Configuration
55

 La configuration de votre environnement consiste ni plus,


ni moins, à dire au compilateur où se trouvent les en-têtes,
et à l'éditeur de liens où se trouvent les bibliothèques.
 Les fichiers d'en-tête se trouvent dans le sous-
répertoire include du dossier où OpenCV est installée. Il
faut donc ajouter le chemin de ce répertoire dans les
paramètres du compilateur.
 Pour les bibliothèques, celles-ci se trouvent dans le sous-
répertoire libs du même dossier. Il faudra donc, suivant
votre IDE, préciser le chemin de ce sous-répertoire, ou
bien donner un à un les noms des fichiers .lib (ou .dll)
qu'il contient, dans les options de l'éditeur de liens.
Exemple :
56

 Découvrir les premières structures et fonctions


d'OpenCV en apprenant à ouvrir, afficher et
sauvegarder des images au moyen du
module highgui.
 Ces fonctions fondamentales seront réutilisées
pratiquement dans tous les programmes par la
suite.
57
Utilisation
58

 Sous Windows, il vous suffit, graphiquement, de


prendre un fichier image et de le glisser-déposer
sur l'exécutable de votre programme.
 Les arguments passés au programme sont contenus
sous forme de chaînes de caractères dans le
tableau argv (pour "argument values") et la
longueur de ce tableau est contenue dans
l'entier argc (pour "argument count").
 Le tout premier élément d'argv (argv[0]) est le nom
grâce auquel le programme a été appelé.
Chargement d’une image
59

 IplImage* cvLoadImage (const char* filename, int iscolor);


 Charge une image
 Les arguments:
 filename: chemin de l'image à charger
 iscolor: option permettant de charger l'image en couleur ou
en
niveaux de gris
 Valeurs de retour :
 Un pointeur sur la structure IplImage dans laquelle le fichier a
été chargé. NULL en cas d'échec.
Chargement d’une image
60

 L’argument : iscolor
 Cette fonction permet de faire automatiquement la
conversion si nécessaire lors du chargement du fichier.
 CV_LOAD_IMAGE_COLOR : Le fichier sera chargé en
mode "couleur", même si l'image est en niveaux de gris.
 CV_LOAD_IMAGE_GRAYSCALE : L'image sera chargée
en niveaux de gris.
 CV_LOAD_IMAGE_UNCHANGED : L'image sera
chargée telle qu'elle
Enregistrement d’une image
61

 int cvSaveImage (const char* filename, const CvArr* image, const int*
params);

 Sauvegarde une image sur le disque dur


 Les arguments:
 filename : chemin du fichier à sauvegarder
 CvArr* : indique que la fonction accepte un tableau de différent types
 image : image à sauvegarder
 params : paramètres optionnels
 Valeur de retour :
 1 si le fichier a bien été sauvegardé,
 0 sinon.
Affichage d’une image
62

 void cvShowImage(const char* name,


const CvArr* image);
 Afficher une image.
 Les arguments:
 Name : titre de la fenêtre dans laquelle afficher l'image
 Image : image à afficher
Création des fenêtres
63

 int cvNamedWindow(const char* name, int


flags);
 Créer une fenêtre
 Les arguments:
 name : titre de la fenêtre
 flags : paramètres optionnels
 La valeur supportée par flags :
CV_WINDOW_AUTOSIZE : la fenêtre sera
automatiquement redimensionnée pour s'adapter à la
taille de l'image affichée.
Destruction des fenêtres
64

 void cvDestroyWindow(const char* name);


 Détruire une fenêtre.
 Les arguments:
 name: titre de la fenêtre à détruire

 void cvDestroyAllWindows(void);
 Détruire toutes les fenêtres HighGUI affichées à
l'écran.
Gestion des évènements clavier et temporisation
65

 int cvWaitKey(int delay);


 Met le programme en pause pendant un certain
temps, en attendant que l'utilisateur appuie sur une
touche.
 Les arguments :
 delay: durée maximale de la pause (en millisecondes)
 Valeur de retour :
 Le code (ASCII lorsqu'applicable) de la touche pressée
 ou bien -1 si rien ne s'est passé.
REPRÉSENTATION DES IMAGES
66

 Représenter les images en niveaux de gris en


mathématiques, ainsi que dans la mémoire de
l’ordinateur,
 Découvrir comment celles-ci peuvent être
manipulées avec OpenCV.
La structure IplImage
67

 De quel type sont les données de l'image à


l'intérieur d'une IplImage ?
Exemples
68

 On peut déduire de ce morceau de déclaration que les images,


dans OpenCV, sont stockées en mémoire ligne par ligne.
 Img imageData est l'adresse du pixel de coordonnées (0,0), le
premier pixel de l'image ;
 (imgimageData + 7) est l'adresse du pixel de coordonnées (7,0),
le huitième pixel de la première ligne ;
 (imgimageData + imgwidthStep) est l'adresse du pixel de
coordonnées (0,1), le premier pixel de la seconde ligne ;
 (imgimageData + (3 * imgwidthStep) + 12) est l'adresse du
pixel de coordonnées (12,3), le treizième pixel de la quatrième
ligne ;
 (imgimageData + imgimageSize) est l'adresse de l'octet se
situant juste après le dernier pixel de l'image.
La « profondeur » des images
69

 Dans cette expression, le nombre de bits désigne la


taille d'un pixel en mémoire. On appelle cela la
profondeur (depth) de l'image.

Le tableau suivant décrit les correspondances entre les types des pixels, leurs tailles, les ensembles de valeurs possibles et les constantes de profondeur dans Op

Types de pixels
70

Type des pixels Taille Valeurs Constante OpenCV


unsigned 8 bits 0, 1, ..., 255 IPL_DEPTH_8U
char (ou uchar)
signed char (ou schar) 8 bits -127, -126, ..., 128 IPL_DEPTH_8S

unsigned 16 bits 0, 1, ..., 65535 IPL_DEPTH_16U


short (ou ushort)

signed short (ou short) 16 bits -32767, ..., 32768 IPL_DEPTH_16S

float 32 bits [0,1] IPL_DEPTH_32F

double 64 bits [0,1] IPL_DEPTH_64F


Exemple :
71

Voici un exemple dans lequel je crée une image de largeur 640 et de


hauteur 480, et dont les pixels seront des unsigned char :
Dés-allocation mémoire
72

 Rappellons la signature de la fonction permettant


de désallouer une structure IplImage ainsi que ses
données.
 void cvReleaseImage(IplImage ** image);
 Avant de commencer à jouer avec des images, on
vous présente l'image utilisée pour la plupart des
tests, Lena.
Exemple
73

dst(x,y) = 255 − src(x,y)


Exercice d’application
74

 La fonction suivante inverse qui prend en argument


une IplImage * et inverse l'image contenue en place.
Exemple
75
Exemple (Suite)
76

Vous aimerez peut-être aussi