Académique Documents
Professionnel Documents
Culture Documents
MATLAB PROCESSING
Construction Maths :
Chapitre 3 : Création d’un modèle numérique de terrain raster à partir des courbes
de niveaux
PAGE 1
Chapitre 4 : Méthode de traitement d’image de télédétection (Filtre de Laplace, Filtre
de Solver
Déterminants
Il sera présenté sous forme d’exercice :
Exercice 1 :
Soit la matrice :
2 1 4
𝐴 = [5 2 3 ]
8 7 3
1- Calculer les mineurs de cette matrice revient à :
2 3
𝑀11 = | | = −15
7 3
5 3
𝑀12 = | | = −9
8 3
5 2
𝑀13 = | | = 19
8 7
- Le mineur de la ligne 2 sera donné par :
1 4
𝑀21 = | | = −25
7 3
PAGE 2
2 4
𝑀22 = | | = −26
8 3
2 1
𝑀23 = | |=6
8 7
- Le mineur de la ligne 3 qui sera donné par :
1 4
𝑀31 = | | = −5
2 3
2 4
𝑀32 = | | = −14
5 3
2 1
𝑀33 = | | = −1
5 2
2- Calculer les cofacteurs en utilisant la formule :
- Cofacteurs de la ligne 1 :
- Cofacteurs de la ligne 2 :
- Cofacteurs de la ligne 3 :
PAGE 3
𝑑𝑒𝑡𝐴 = 𝑎11 𝐶11 + 𝑎12 𝐶12 + 𝑎13 𝐶13
= 55
- Pour la ligne 2 :
𝑎 = (1, 𝑚, 𝑚)
𝑏 = (𝑚, 1, 𝑚)
𝑐 = (𝑚, 𝑚, 1)
Déterminer le rang de la famille des trois vecteurs suivant en discutant sur les
différentes valeurs prises par m :
1 𝑚 𝑚
𝑀 = (𝑚 1 𝑚)
𝑚 𝑚 1
- Le déterminant de la matrice M donne donc :
(𝑚 − 1)2 (2𝑚 + 1)
Discussion :
PAGE 4
- Si :
𝑚 ≠ 1 𝑒𝑡 𝑚 ≠ 1/2
- Si :
𝑚 = −1/2,
La matrice est de rang 2 car la somme des trois lignes de la matrice est nul et les
deux premières lignes sont indépendantes, ce qui est une autre façon de voir que
le rang est de 2.
Soit la matrice :
2 0 1
𝐴 = (−1 4 −1)
−1 2 0
1- Calculer le polynôme caractéristique de cette matrice :
𝑃(𝜆) = 0
𝜆1 = 1 ; 𝜆2 = 2 ; 𝜆3 = 3
- Résoudre l’équation :
(𝐴 − 𝜆𝐼)𝑈 = 0
PAGE 5
𝜆1 = 1 ; 𝑈1 = (1, 0, −1)
𝜆1 = 2 ; 𝑈1 = (2, 1, 0)
𝜆1 = 3 ; 𝑈1 = (1, 2, 1)
1 2 1
𝑃=( 0 1 2)
−1 0 1
5- Trouver la matrice diagonale :
𝐷 = 𝑃 −1 𝐴𝑃
Avec :
1 0 0
𝐷 = (0 2 0 )
0 0 3
−2 −1 −1
𝐴 = [−2 −1 1 ]
−1 −1 3
- Pour savoir que la matrice est inversible, on calcule son déterminant :
Or :
det 𝐴 = −2 ≠ 0
PAGE 6
- Pour la ligne 1 :
−1 1
𝐶11 = (−1)1+1 | | = −2
−1 3
−2 1
𝐶12 = (−1)1+2 | |=5
−1 3
−2 −1
𝐶13 = (−1)1+3 | |=1
−1 −1
- Pour la ligne 2 :
−1 −1
𝐶21 = (−1)2+1 | |=4
−1 3
−2 −1
𝐶22 = (−1)2+2 | | = −7
−1 3
−2 −1
𝐶23 = (−1)2+3 | | = −1
−1 −1
- Pour la ligne 3 :
−1 −1
𝐶31 = (−1)3+1 | | = −2
−1 1
−2 −1
𝐶32 = (−1)3+2 | |=4
−2 1
−2 −1
𝐶33 = (−1)3+3 | |=0
2 −1
3- Calculer la Co matrice de A :
−2 5 1
𝐶𝑜𝑚(𝐴) = ( 4 −7 −1)
−2 4 0
4- Déterminer l’inverse de la matrice :
1 1 −2 4 −2
𝐴−1 = 𝐶𝑜𝑚(𝐴) = ( 5 −7 4 )
det 𝐴 2
1 −1 0
Donc :
PAGE 7
𝐴−1 𝐴 = 𝐴𝐴−1 = 𝐼 −1
𝐹 = (𝐹𝑥 , 𝐹𝑦 , 𝐹𝑧 )
On a :
Matrice et tableau
On utilise les crochets pour définir la fin et le début d’un tableau ou d’une matrice.
Soit la matrice :
1 2 3
𝑀 = [11 12 13]
21 22 23
Pour l’introduire on va procéder comme suite (réf. : Matlab) :
On peut aussi définir des vecteurs lignes ou colonnes à partir de la syntaxe suivante
(Réf. : Matlab) :
- Vecteur ligne
≫ 𝑈 = [1 2 3]
PAGE 8
- Vecteur colonne
≫ 𝑉 = [1; 2; 3]
Pour accéder à un élément particulier d’un tableau ou d’une matrice, il suffit d’entrer
le nom du tableau ou de la matrice, suivi (du/ou des indices dont on veut lire ou
écrire la valeur).
Dans Matlab, on a :
≫ 𝑀(3, 2)
Dans le cas particulier des vecteurs lignes ou colonne, on peut n’indiquer qu’un seul
indice, celui de la colonne ou de la ligne, pour atteindre l’élément qui nous intéresse.
≫ 𝐿 = [1, 2, 3]
On a :
≫ 𝐿(3)
≫ 𝑀(3, 2) = 32
- Tableau 2D : indexation 1D
Dans Matlab, il existe aussi une indexation a un seul indice pour les tableaux a deux
dimensions. Par défaut, Matlab parcourt alors le tableau, de ligne en ligne et de
colonnes en colonnes.
≫ 𝑀 = [1 2 3; 4 5 6; 7 8 9]
PAGE 9
Cherchons le rang de M :
≫ 𝑟𝑎𝑛𝑘 (𝑀) = 2
≫ det(𝑀) = 0
Dans Matlab, il existe aussi une seule indexation a un seul indice pour les tableaux à
deux dimensions ; on peut accéder aux éléments de ce tableau en ajoutant un seul
indice.
≫ 𝑀(3) 𝑎𝑛𝑠 = 7
1 2 7
𝑀(7) = 7 𝑎𝑛𝑠 = 4 5 6
7 8 9
- Matrice nulle
Il existe une fonction zéros qui crée une matrice de dimension que l’on précise et ne
contenant que des zéros ; pour crée une matrice N de deux lignes et cinq cent
colonnes, on peut procéder comme suite :
≫ 𝑜𝑛𝑒𝑠 (2, 3)
≫ 𝑒𝑦𝑒 (3)
Elle génère des nombres réelles aléatoires dans l’intervalle 0 et 1 et crée une matrice
de dimension n et m à préciser :
≫ 𝑟𝑎𝑛𝑑 (2, 3)
PAGE 10
- Il existe également une fonction Diag permettant de créer des matrices
diagonales :
𝐷 = 𝑑𝑖𝑎𝑔([1 2 3 4], 2)
≫ 𝐿 = 𝑙𝑖𝑛𝑠𝑝𝑎𝑐𝑒(1: 10)
M= [11 12 13 ; 21 22 23 ; 31 32 33]
≫ 𝑀(1: 3 ; 2: 3)
12 13
𝑁 = 22 23 ;
32 33
Il suffit tout simplement de frapper les instructions suivantes :
M (1 :3, 2 :3)
Operations arithmétiques
Le tableau suivant résume les différents opérateurs applicables aux matrices et aux
tableaux
PAGE 11
A A 𝐴𝑖𝑗
B B 𝐵𝑖𝑗
𝑛
AB A*B
∑ 𝐴𝑖𝑘 𝐵𝑘𝑗
𝑘
𝐴𝐵 −1 A/B
𝐴−1 𝐵 A\B
𝐴𝑛 𝐴^𝑛
.∗ ; ./ ; . ^
Ces opérateurs sont prévus pour faire des opérations terme a terme sur deux tableaux
de même taille ; celles-ci sont fondamentales lorsque l’on veut tracer des courbes ou
plus généralement lorsque l’on souhaite effectuer des opérations arithmétiques.
Ces trois opérations pour des tableaux ou des matrices peuvent être remplacées par
des fonctions ; par exemple :
𝐴.∗ 𝐵 ≡ 𝑡𝑖𝑚𝑒𝑠(𝐴, 𝐵)
𝐴./𝐵 ≡ 𝑟𝑑𝑖𝑣𝑖𝑑𝑒(𝐴, 𝐵)
𝐴. ^𝐵 ≡ 𝑝𝑜𝑤𝑒𝑟(𝐴, 𝐵)
𝐴 ∗ 𝐵 ≡ 𝑚𝑡𝑖𝑚𝑒𝑠(𝐴, 𝐵)
𝐴/𝐵 ≡ 𝑚𝑟𝑑𝑖𝑣𝑖𝑑𝑒(𝐴, 𝐵)
PAGE 12
𝐴^𝐵 ≡ 𝑚𝑝𝑜𝑤𝑒𝑟(𝐴, 𝐵)
𝐴 == 𝐵 ≡ 𝑒𝑞(𝐴, 𝐵)
- A différent de B :
𝐴 ≅ 𝐵 ≡ 𝑛𝑒(𝐴, 𝐵)
- A>B:
𝐴 > 𝐵 ≡ 𝑔𝑡(𝐴, 𝐵)
- 𝐴 ≥ 𝐵:
𝐴 >= 𝐵 ≡ 𝑔𝑒(𝐴, 𝐵)
- A<B:
𝐴 < 𝐵 ≡ 𝐿𝑡(𝐴, 𝐵)
- 𝐴 ≤ 𝐵:
𝐴 <= 𝐵 ≡ 𝐿𝑒(𝐴, 𝐵)
sin(𝑥) 𝑠𝑖 𝑥 > 0
𝑓(𝑥) = {
sin(2𝑥) 𝑠𝑖𝑛𝑜𝑛
PAGE 13
Ici f est une fonction définie par morceaux puisque sa valeur dépend d’un
test logique, définissant dans cet exemple deux domaines de définition.
- Dans Matlab, on a :
≫ 𝑦 = 𝑓(𝑥)
𝑝𝑖
≫ 𝑥 = −2 ∗ 𝑝𝑖 ∶ : 2 ∗ 𝑝𝑖
25
≫ 𝑦 = sin(𝑥).∗ (𝑥 > 0) + sin(2 ∗ 𝑥). 𝑛𝑜𝑡(𝑥 > 0);
Si l’on dispose des tableaux de dimension égale à deux, c’est-à-dire un vecteur ligne,
un vecteur colonne ou un tableau de taille n*m, on peut représenter ces données sous
forme d’une courbe 2D ; une courbe 2D est un ensemble de points, définit chacun
définit par une abscisse et une ordonnée ; ces points peuvent être reliés par des
segments de droite pour donner l’illusion d’une courbe continue.
Tracer la fonction :
PAGE 14
𝑓(𝑥) = sin 𝑥
¶ Déclarer l’intervalle de x
¶ Ensuite Déclarer la fonction
¶ Initialiser la fonction plot (voir Matlab)
𝑝𝑖
≫ 𝑥 = 0: 2 ∗ : 2 ∗ 𝑝𝑖;
100
≫ 𝑝𝑙𝑜𝑡(𝑥, sin(𝑥)) ;
- Pour un cercle, on a :
PAGE 15
- Superposition de deux courbes:
PAGE 16
- Attributs des courbes
Nous avons remarqué que Matlab attribut des couleurs par défaut aux courbes ; il est
possible de modifier la couleur, le style du trait, et celui des marqueurs de point ; en
spécifiant après chaque couples (abscisses – ordonnées, une chaine de caractère
pouvant contenir les codes suivants.
b = bleu (blue), g = vert (green), R= rouge (red), y= jaune (yellow), k= noir (black),
w= blanche (white), c= cyan, m= magenta.
Nous voulons représenter 2 courbes ayant des ordonnées très différentes dans un
même graphique ; nous allons utiliser la fonction plot (y, y) puisqu’il y a un facteur
de 200 entre les deux courbes.
PAGE 17
>> x = 0: 0.01: 20;
PAGE 18
- Histogramme:
PAGE 19
- Tracer une courbe à l’échelle logarithmique : utilisation de la fonction semi
log
x=1:100;
X=-pi : pi/10 : pi ;
>> e=0.05*cos(x) ;
PAGE 20
Les améliorations graphiques : les éléments de décorations
Un graphique doit avoir :
- Un titre
- Une légende
- Tracer un quadrillage
- Avoir des axes, des limites et zoom
Représentation 3D
Syntaxe :
>> grid on
PAGE 21
Comme une courbe en 2D est définit par une liste de doublets x et y, on peut définir
une courbe en 3D par une liste de triplets (x, y, z).
Puisque l’instruction plot attendait deux arguments, le vecteur des abscisses et celui
des ordonnés ; l’instruction plot 3 en attend 3, le vecteur des abscisses Vx, le vecteur
des ordonnées Vy et le vecteur des cotes Vz.
𝑝𝑖
≫ 𝑡 = −2 ∗ 𝑝𝑖: 2 ∗ : 2 ∗ 𝑝𝑖;
100
𝑡 𝑡
≫ 𝑝𝑙𝑜𝑡3((− ) .∗ sin(𝑡) , exp (− ) .∗ 𝑐𝑜𝑠𝑡, exp(−𝑡));
10 10
PAGE 22
GENERATION DES POINTS DE MAILLAGE : MESHGRID
Pour définir une surface, il faut un ensemble de triplets (x, y, z) ; en générale, les
points x et y forment dans le plan un maillage régulier. Mais ce n’est pas une
obligation ; la seule contrainte est le nombre de point soit le produit de deux entiers
m*n.
Si l’on a m*n points, cela signifie que l’on a m*n valeurs de x et m*n valeurs de y et
m*n valeurs de z ; il apparait donc que, les abscisses, les ordonnés, et les cotes des
points de la surface peuvent entres stockés dans des tableaux de tailles n*m ; toutes
les instructions de tracer de surface, exemple :
𝑠𝑢𝑟𝑓
PAGE 23
𝑦11 ⋯ 𝑦1𝑛
𝑦21 ⋯ 𝑦2𝑛
𝑀𝑦 = [ ⋮ ⋯ ⋮ ]
𝑦𝑚1 ⋯ 𝑦𝑚𝑛
𝑧11 ⋯ 𝑧1𝑛
𝑧21 ⋯ 𝑧2𝑛
𝑀𝑧 = [ ⋮ ⋯ ⋮ ]
𝑧𝑚1 ⋯ 𝑧𝑚𝑛
Nous voulons construire les tableaux Mx, My et Mz ; prenons le cas des surfaces :
𝑧 = 𝑦2 − 𝑥2
[-1, 1] *[-2, 2] ; pour définir le quadrillage de ce rectangle, il faut définir une suite de
valeurs 𝑥1 jusqu’à 𝑥𝑚 pour x ; et une suite de valeurs 𝑦1 jusqu’à 𝑦𝑚 pour y.
En combinant toutes ces valeurs de x et de y, on obtient m*n points dans le plan (x,
y) ; il faut maintenant construire deux tableaux, l’un contenant m*x abscisse de ce
point et l’autres m*y ordonnées.
On obtiendra donc :
𝑥1 𝑥2 … 𝑥𝑚
𝑥 𝑥2 … 𝑥𝑚
𝑋=[ 1 ]
⋮ ⋮ ⋮ ⋮
𝑥1 𝑥2 ⋯ 𝑥𝑚
𝑦1 𝑦1 … 𝑦1
𝑦 𝑦1 … 𝑦1
𝑌=[ 1 ]
⋮ ⋮ ⋮ ⋮
𝑦1 𝑦1 ⋯ 𝑦1
Syntaxe :
PAGE 24
𝑧 = 𝑦2 − 𝑥2
Correspondant.
C’est là que les calculs terme à terme sur les matrices montre leurs efficacités ; on
applique directement la formule au tableau X et Y sans oublier de mettre un point
devant les opérateurs multiplication, division et puissance.
𝑥 = −1: 0.2: 1
𝑦 = −2: 0.2: 2
>> 𝑧 = 𝑌. ^2 − 𝑋. ^2;
>> 𝑚𝑒𝑠ℎ(𝑋, 𝑌, 𝑧)
Tracer de surface
>> 𝑚𝑒𝑠ℎ(𝑋, 𝑌, 𝑧)
PAGE 25
Les fonctions les plus courantes sont :
- La fonction mesh qui trace une série de lignes entre les points de la surface en
mode ligne cachées.
- Meshc qui fonctionne comme mesh, mais en ajoutant les courbe de niveau
dans le plan (x, y)
PAGE 26
>> 𝑚𝑒𝑠ℎ𝑐(𝑋, 𝑌, 𝑧)
- La fonction surf, qui peint la surface avec une couleur variant selon la cote
>> 𝑠𝑢𝑟𝑓(𝑋, 𝑌, 𝑧)
PAGE 27
𝑠𝑢𝑟𝑓𝑙(𝑋, 𝑌, 𝑧)
- La fonction surfc qui fonctionne comme mesh mais en ajoutant des courbes
de niveau dans le plan (x, y).
>> 𝑠𝑢𝑟𝑓𝑐(𝑋, 𝑌, 𝑧)
PAGE 28
- La fonction subplot permet de comparer les différentes fonctions. (Research)
PAGE 29
Chap. 2 : Méthode de traitement d’image de télédétection (Filtre
de Laplace, Filtre de Sobel
DEFINITION DE L’IMAGE :
L’image est une représentation d’une personne ou d’un objet par la peinture, la
sculpture, le dessin, la photographie, le film etc.
C’est aussi un ensemble structuré d’informations qui après affichage sur l’écran, on
une signification pour l’œil humain.
Une image numérique est une matrice de pixels, repérés par leurs coordonnées (x,
y).
S’il s’agit d’une image couleur, un pixel est codé par trois composantes (R, G, B)
chacune comprises au sens large entre 0 – 255 ; représentant respectivement les doses
de Rouge, Vert et Bleu qui caractérisent la couleur du pixel.
S’il s’agit d’une image en niveau de gris, il est codé par 1 composante comprise au sens
large entre 0 – 255 représentants la luminosité du pixel.
TRAITEMENTS D’IMAGES
Pour manipuler une image, on travaille sur un tableau d’entiers, qui contient les
composantes de chaque pixel ; les traitements s’appliquent toujours aux images en
niveau de gris, et parfois sur des images couleur.
L’œil humain possède des récepteurs pour trois couleurs primaires (Rouge, Vert et
Bleu). Ainsi, tous les espace couleur on trois dimensions ; il y a plusieurs espaces de
couleurs disponibles ; les plus connus étant le RGB (Rouge, Vert, Bleu) ; le HSV ; et
le NTSC.
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼)
>> 𝐼 = 𝑑𝑜𝑢𝑏𝑙𝑒(𝐼)/255.0;
PAGE 30
>> 𝐽 = 𝑟𝑔𝑏2𝑛𝑡𝑠𝑐(𝐼);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,5,1);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,5,2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐽);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼)
>> 𝐼 = 𝑑𝑜𝑢𝑏𝑙𝑒(𝐼)/255.0;
>> 𝐽 = 𝑟𝑔𝑏2𝑛𝑡𝑠𝑐(𝐼);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,1);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐽);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
PAGE 31
>> 𝑡𝑖𝑡𝑙𝑒(′𝑎𝑝𝑟𝑒𝑠 𝑡𝑟𝑎𝑖𝑡𝑒𝑚𝑒𝑛𝑡′);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼)
>> 𝐼 = 𝑑𝑜𝑢𝑏𝑙𝑒(𝐼)/255.0;
>> 𝐽 = 𝑟𝑔𝑏2𝑛𝑡𝑠𝑐(𝐼);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,1);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐽);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
PAGE 32
>> [𝐻, 𝑆, 𝑉] = 𝑖𝑛𝑑2𝑟𝑔𝑏(𝑥, 𝑚𝑎𝑝ℎ𝑠𝑣);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,4,1);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,4,2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐻);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑡𝑖𝑡𝑙𝑒(′𝐻′)
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,4,3);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝑆);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑡𝑖𝑡𝑙𝑒(′𝑆′)
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,4,4);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝑉);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑡𝑖𝑡𝑙𝑒(′𝑉′)
PAGE 33
Filtrage d’image
Pour améliorer la qualité Visuel de l’image, on doit éliminer les parasites. En lui
imposant un traitement appelé Filtrage.
Le filtrage de l’image I par le filtre h est une image F dont les luminances sont données
par :
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼)
>> 𝐽 = 𝑟𝑔𝑏2𝑔𝑟𝑎𝑦(𝐼);
>> 𝐽 = 𝑑𝑜𝑢𝑏𝑙𝑒(𝐽)/255.0;
>> ℎ = −𝑜𝑛𝑒(3,3)%𝑑𝑒𝑓𝑖𝑛𝑖𝑡𝑖𝑜𝑛 𝑑𝑒 ℎ
>> ℎ = −𝑜𝑛𝑒𝑠(3,3)%𝑑𝑒𝑓𝑖𝑛𝑖𝑡𝑖𝑜𝑛 𝑑𝑒 ℎ
ℎ =
PAGE 34
−1 −1 −1
−1 −1 −1
−1 −1 −1
>> ℎ(2,2) = 8;
>> 𝑓𝑖𝑔𝑢𝑟𝑒(2);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,2);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,1);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐹);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐼);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
PAGE 35
Conclure : on peut jouer sur l’intensité du filtre et on peut constater que l’image est
plus nette lorsque la valeur de l’intensité est plus importante.
Le principe consiste a indiquer les valeurs souhaitées de H sur w1 et w2 sur une grille
w1, w2 et en déduire le filtre de hn1 et hn2 ; il est également possible de réaliser le
filtrage dans le domaine fréquentielle ; pour cela, on multiplie la transformée de
Fourier de l’image par le conjugué de la réponse fréquentielle du filtre.
Où :
𝐺(𝑥, 𝑦) = 𝐻 ∗ (𝑈, 𝑉)
PAGE 36
𝑈𝑥 𝑉𝑦
𝐼(𝑈, 𝑉) = ∑ 𝐼(𝑥, 𝑦)𝑒 −𝑗2𝜋( 𝑁 + 𝑀 )
𝑥,𝑦
>> 𝐼𝑙 = 𝑓𝑓𝑡2(𝐼);
>> ℎ = 𝑧𝑒𝑟𝑜𝑠(9,9);
>> 𝐻𝑙 = 𝑓𝑠𝑎𝑚𝑝2(ℎ);
>> 𝐺𝑙 = 𝑖𝑓𝑓𝑡2(𝐺);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,1);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺𝐿);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺𝑙);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
PAGE 37
> 𝐼𝑛 𝑖𝑚𝑠ℎ𝑜𝑤 (𝑙𝑖𝑛𝑒 312)
>> 𝑡𝑖𝑡𝑙𝑒(′𝑓𝑟𝑒𝑞𝑢𝑒𝑛𝑡𝑖𝑒𝑙′);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑡𝑖𝑡𝑙𝑒(′𝑖𝑚𝑝𝑢𝑠𝑖𝑜𝑛𝑛𝑒𝑙′);
Lorsqu’une image contient des pixels aberrants ; par exemple un seul pixel blanc au
milieu d’une zone noir ou des pixels isolées repartis aléatoirement dans l’image, qui
dégrade la qualité de l’image ; on dit qu’elle est bruitée.
Un simple lissage de l’image permet de réduire le bruit car l’effet des pixels aberrants
est amoindri, grâce au moyennage avec ses pixels voisins.
La méthode basée sur le filtre médian ne présente pas cet inconvénient. Elle est
particulièrement adaptée lorsque le bruit est constitué de point isolé ou de lignes
fines ; cependant, elle n’est applicable qu’aux images en niveau de gris contrairement
au lissage.
Le code est de :
PAGE 38
>> 𝐼 = 𝑖𝑚𝑟𝑒𝑎𝑑(′𝑆𝑝ℎ𝑖𝑛𝑥𝑂𝑏𝑠𝑒𝑟𝑣𝑎𝑡𝑜𝑟𝑦_𝑅𝑂𝑊9691446114_1920𝑥1080. 𝑗𝑝𝑔′);
>> 𝐼 = 𝑟𝑔𝑏2𝑔𝑟𝑎𝑦(𝐼);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,5,1);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐽);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,5,2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐾);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,5,3);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐹);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
PAGE 39
> 𝐼𝑛 𝑖𝑚𝑠ℎ𝑜𝑤 (𝑙𝑖𝑛𝑒 312)
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,5,4);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝑁);
𝑊𝑎𝑟𝑛𝑖𝑛𝑔: 𝑇ℎ𝑒 𝑖𝑛𝑖𝑡𝑖𝑎𝑙 𝑚𝑎𝑔𝑛𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛 𝑜𝑓 𝑡ℎ𝑒 𝑖𝑚𝑎𝑔𝑒 𝑖𝑠 𝑠𝑒𝑡 𝑡𝑜 ′𝑓𝑖𝑡′ 𝑖𝑛 𝑎 𝑑𝑜𝑐𝑘𝑒𝑑 𝑓𝑖𝑔𝑢𝑟𝑒.
>> 𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,5,5);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝑃);
Le but de la détection des co0ntours est de repérer les points d’une image numérique
qui correspondent à un changement brutal de l’intensité lumineuse ; la détection des
contours d’une image réduit de manière significative la quantité de données et
élimine les informations que l’on peut juger moins pertinente.
Il existe un très grand nombre de méthode de détection des images ; nous exposerons
dans cette partie la méthode de prewitt : le filtre de Prewitt, de sobel et de Revert.
- Le filtre de prewitt
PAGE 40
La matrice ligne :
ℎ𝑥 = [−1 0 1]
−1
ℎ𝑦 = [ 0 ]
1
Les deux convolutions avec le tableau de valeurs initiales créent deux tableaux :
Premier tableau 𝐺𝑥
Deuxième tableau 𝐺𝑦
Le code Matlab qui permet d’appliquer le filtre Sobel et celui de Prewitt est le suivant :
>> 𝐽 = 𝑟𝑔𝑏2𝑔𝑟𝑎𝑦(𝐼);
>> 𝐽 = 𝑑𝑜𝑜𝑏𝑙𝑒(𝐼)/255.0;
>> 𝐽 = 𝑑𝑜𝑢𝑏𝑙𝑒(𝐼)/255.0;
>> 𝐻 = 𝑓𝑠𝑝𝑒𝑐𝑖𝑎𝑙(′𝑝𝑟𝑒𝑤𝑖𝑡𝑡′);
>> 𝑉 = −𝐻′;
PAGE 41
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(2);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺ℎ);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺𝑣);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(3);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(4);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺𝑠);
>>
PAGE 42
- Le filtre de Sobel
PAGE 43
changement soudain de luminosité correspondant probablement a des bords ainsi
que l’orientation de ces bords.
Soit A l’image source, Gx et Gy deux images qui en chaque point contiennent des
approximations respectivement de la dérivée horizontale et verticale de chaque
point ; ces images sont calculées comme suite :
1 0 −1
𝐺𝑥 = [2 0 −2] ∗ 𝐴
1 0 −1
1 2 1
𝐺𝑦 = [ 0 0 0 ]∗𝐴
−1 −2 −1
En chaque point, les approximations des gradients horizontaux, et verticaux peuvent
être combinés comme suit :
𝐺 = √𝐺𝑥2 + 𝐺𝑦2
>> 𝐽 = 𝑟𝑔𝑏2𝑔𝑟𝑎𝑦(𝐼);
>> 𝐽 = 𝑑𝑜𝑢𝑏𝑙𝑒(𝐼)/255.0;
>> 𝐻 = 𝑓𝑠𝑝𝑒𝑐𝑖𝑎𝑙(′𝑠𝑜𝑏𝑒𝑙′);
>> 𝑉 = −𝐻′;
PAGE 44
>> 𝐺𝑠𝑙 = (𝐺 > 𝑠𝑒𝑢𝑖𝑙 ∗ 4/3);
>> 𝑓𝑖𝑔𝑢𝑟𝑒(1);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺ℎ)
>> 𝑓𝑖𝑔𝑢𝑟𝑒(2);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺𝑣)
>> 𝑓𝑖𝑔𝑢𝑟𝑒(3);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺)
>> 𝑓𝑖𝑔𝑢𝑟𝑒(4);
>> 𝑖𝑚𝑠ℎ𝑜𝑤(𝐺𝑠𝑙)
PAGE 45
La manipulation des images pose des problèmes très complexes que celle du texte.
PAGE 46
En effet, ce domaine cherche à détecter la présence de certaines formes, certains
contours, ou certaines textures d’un modèle connu.
PAGE 47
cherchent aussi parfois à comprimer l’image, afin de gagner en vitesse lors de la
transmission de l’information et en capacité de stockage ou en dégradant le moins
possible les images considérées.
PAGE 48