Sie sind auf Seite 1von 8

TP3

Quantification de l’image

I. Objectifs
L’objectif de ce TP est de pratiquer le concept de la quantification scalaire sur un signal numérique
bidimensionnel (l’image). Pour cela, le travail à réaliser est divisé en trois parties: la première partie
concerne l’acquisition et la représentation sous format numérique d’une image, la deuxième partie
s’intéresse à la quantification scalaire d’une image et à l’étude de son effet visuel et quantitatif sur
la qualité de l’image obtenue. La dernière partie est réservée à l’application du concept de la
quantification pour réaliser une application spécifique. Dans ce TP, il s’agit du comptage de nombre
de pièces de monnaies dans une image.

II. Format d’une image numérique


Une image numérique est un signal numérique multidimensionnel déjà échantillonné et quantifié.
Ses variables d’évolution sont ses coordonnées spatiales en abscisses x et en ordonnées y. Chaque
échantillon de l’image est un élément graphique appelé PiCture ELement ou pixel. Un pixel de
l’image peut être quantifié sur 1 bit, il s’agit alors d’une image binaire (0 Noir, 1 blanc). Un pixel
peut aussi être codé sur 8 bits, soit 256 nuances de gris, allant du 0 qui est le noir jusqu’à 255 qui es
le blanc (en passant par 128 qui est le gris moyen). Dans ces deux cas, l’image est un signal
scalaire. En effet, une fois les variables d’évolution fixées, on obtient un seul scalaire représentant
le pixel.

Les images vraies couleurs sont, quant à elles, des signaux vectoriels où chaque pixel est décrit par
au moins 3 intensités (amplitudes). Il s’agit d’un vecteur de 3 composantes traduisant la
composition de n’importe quelle couleur selon les trois couleurs de base qui sont le Rouge, le Vert
et le Bleu. Chaque pixel de chaque couleur est codé sur 8 bits.

Dans ce qui suit, vous allez manipuler ces différents formats des images.

1. Lire l’image ‘pout’ en utilisant la commande [I]=imread('pout.tif');


2. Visualisez l’image en utilisant la commande imshow(I).
3. Déterminer sa dimension (nombre de lignes et nombre de colonnes) et le nombre de
bits de quantifications.
4. Refaire la même chose pour l’image ‘peppers.jpg’.
5. Vérifier les notions d’images scalaire et vectorielle et observer les composantes de
l’image vectorielle chacune séparément. Pour ce faire, afficher en niveaux de gris
chaque composante. Interpréter le résultat de l’affichage.

III. Quantification des images


La Quantification Scalaire (QS) est la deuxième étape de la numérisation de signaux, elle
permet de transformer un signal continu en amplitudes en un signal discret en amplitude. D’un
point de vue pratique, c’est une règle de correspondance entre le nombre infini ou grand de
valeurs possibles et un nombre fini et relativement petit de valeurs.

Durant ce TP, nous nous intéressons à la quantification scalaire uniforme. Un pixel de l’image
I(x,y) prend ses valeurs dans l'intervalle [0, 255]. Pour réaliser un quantificateur uniforme à N
niveaux, il suffit de partitionner l'intervalle [0, 255] en N intervalles distincts de même largeur
Delta =256/N et de définir le représentant de l'intervalle, par exemple, son milieu.

Prenons par exemple le cas où le nombre de niveaux de quantification est N=8. Ceci correspond
à une représentation binaire sur 3 bits. Le pas de quantification est Delta=256/8. L’intervalle
[0 255] est partitionné en 8 intervalles dont les bornes sont successivement 0, 32, 64, 96,
128,160, 192, 224, 255. Les extrêmes 0 et 255 ne sont pas retenus dans le vecteur
PARTITION=[32, 64, 96, 128,160, 192, 224]. Chaque pixel d’un intervalle (les intervalles sont
[0, 31], [32 63], [64 95], [96 127], [128 159], [160 191], [192 223], [224 255]) est remplacé par
une seule valeur qui est le milieu de l’intervalle. On crée alors, ce qu’on appelle le dictionnaire
ou CODEBOOK=[16, 48,80,112,144,176,208,240]. Cette partition et ce dictionnaire sont
illustrés dans la figure 2.

Figure 2. Partition et dictionnaire d’un quantificateur à 8 niveaux d’une image en niveaux de


gris.

Pour quantifier une image avec MATLAB, on utilise la fonction imquantize suivante :

function [q,qindex]=imquantize(x,L)
% image quantization
xmax=max(x(:));
xmin=min(x(:));
range=xmax-xmin;
scale=double(L-1)/double(range);
qindex=round(x*scale);
q=qindex*round(range/L)+round(range/(2*L));
return

1. Comprendre le code MATLAB de la fonction et expliquer comment l’opération de


quantification est mise en œuvre par un programme aussi simple.
2. Quantifier l’image ‘lena.tif’ sur 8 niveaux.
3. Comparer visuellement l’image originale et l’image codée (afficher les deux images
sur la même fenêtre graphique).
4. Calculer l’Erreur Quadratique Moyenne définie par :
𝑛𝑙𝑖𝑔 𝑛𝑐𝑜𝑙
1
𝐸𝑄𝑀 = ,∑ ∑ [𝐼𝑜𝑟𝑖𝑔𝑖𝑛𝑒(𝑙, 𝑐) − 𝐼𝑞𝑢𝑎𝑛𝑡(𝑙, 𝑐)] 2
nlig * ncol 𝑙=1 𝑐=1

où nlig et ncol désignent respectivement le nombre de ligne et le nombre de colonnes de l’image.

Remarque : les calculs se font sur le format « double ». L’affichage des images se fait à partir du
format « uint8 »

5. En déduire le rapport Signal à Bruit en dB :


s2
RSB(dB) = 10 log10 ,
EQM

Où  2 est la variance sur l’image que vous pouvez calculer avec la commande MATLAB
var.

6. On se propose maintenant d’examiner l’impact de la réduction de nombre de bits


alloué pour quantifier l’intensité des pixels de l’image. Pour cela, vous allez réduire à
chaque fois le nombre de bits de quantification de 1 bit et calculer le RSB.
7. Evaluer la qualité visuelle de chaque image codée.
8. Remplir le tableau suivant et tracer la courbe de variation du RSB en fonction du
nombre de bits de quantification. Déduire la perte moyenne en dB relative à la
réduction d’un bit de quantification à chaque fois.

Nombre de bits de 7 6 5 4 3 2 1
quantification par pixel

RSB

IV. Exemple d’application de la quantification


On considère l’image ‘coins’ dont la scène contient des pièces de monnaies. On se propose dans
cette partie du TP de compter le nombre de pièces de monnaies existantes sur une image. Pour cela,
on utilise le principe de la quantification scalaire. En effet, les pièces de monnaies ont des couleurs
spécifiques, le fond de l’image ou les autres objets ont d’autres couleurs contrastées par rapport aux
précédentes. La quantification sur deux niveaux fera ressortir de façon claire les pièces de
monnaies.

1. Réaliser une quantification sur 1 bit l’image des pièces de monnaies pour générer une
image binaire (ImBin).
2. Utiliser la commande MATLAB imhist pour afficher l’histogramme de l’image.
On rappelle que l’histogramme est une fonction ayant en abscisse les différents niveaux
de gris (0 à 255) et en ordonné l’occurrence de chacune de ces niveaux de gris sur
l’image.
3. Remarquer qu’il y’a deux plages de valeurs. Ainsi, vous pouvez choisir le seuil adéquat
permettant de séparer ces deux plages. L’une correspond aux intensités de l’arrière plan
tandis que la 2ème est relative aux pièces des monnaies.
4. En utilisant le programme suivant (CompteurMonnaie), vérifier que vous avez bien le
nombre de pièces exact sur l’image :
L = bwlabel(ImBin);
stats = regionprops(L,'Area','Centroid');
% Comptage des pièces de monnaies en utilisant la taille des objets
figure, imshow(ImBin)
hold on
count = 0;
seuil=200; % par exemple
for i = 1:length(stats)
if stats(i).Area > seuil
plot(stats(i).Centroid(1), stats(i).Centroid(2),'*')
count = count+1;
end
end
title(['Il y a ' num2str(count) ' pièces de monnaies dans cette
image.'])

5. Essayer de faire votre propre acquisition avec des pièces de monnaies. Faites le avec
des pièces de monnaies sur un fond uni (la table par exemple). Choisir le seuil
adéquat dans le cas de votre image afin de pouvoir comptabiliser le nombre des
pièces des monnaies.
TP 4
Analyse de Fourier sur un signal DTMF

I. Objectif
L’objectif du TP est de consolider les connaissances acquises sur la Transformée de Fourier à
travers une application. Celle-ci concerne l’identification des touches d’un clavier numérique par
analyse du son généré. En effet, les appareils de téléphonie fixe ou mobile sont munis d’un clavier.
Lorsqu’une touche est appuyée, un son est émis. Par analyse dans le domaine de Fourier, il est
possible de reconnaitre la touche appuyée par simple analyse du son généré.

II.Principe de la signalisation DTMF

II.1 Importance de la signalisation téléphonique vocale

Le réseau téléphonique est conçu pour transporter des signaux vocaux. Néanmoins, il est souvent
demandé de transporter d'autres types de signaux. Un exemple simple et omniprésent est le numéro
téléphonique appelé. En effet, la ligne téléphonique utilisée doit communiquer avec le bureau
central de la compagnie de téléphone pour que le numéro de téléphone appelé soit transmis.
L’appareil téléphonique doit être capable de convertir les séquences de chiffres appuyées en
signaux qui peuvent facilement traverser les circuits conçus pour transmettre la voix.
Ainsi, les dix chiffres décimaux enrichis des symboles ‘*’ et ‘#’ doivent être convertis en sons qui
ont les mêmes caractéristiques que la voix.

II.2 Définition de la DTMF

Dual-Tone Multi-Frequency signaling (DTMF) est un système de signalisation téléphonique qui


utilise les fréquences vocales sur les lignes téléphoniques afin de signaler la numérotation entre
l’équipement téléphonique utilisé et les équipements de communication et les centres de
commutations. Il a été inventé dans les laboratoires Bell aux états unis et a été standardisé sous la
recommandation ITU-T Q.23.

II.3 Décodage des touches du clavier

Lorsqu’une touche du clavier téléphonique est appuyée, un signal de signalisation est transmis et est
aussi jouée. Ce signal est une superposition de deux sinusoïdes dont les fréquences sont associées à
la touche appuyée.
La figure 1 illustre un clavier téléphonique et les fréquences associées. Ainsi, un clavier peut être vu
comme une matrice de fréquences. Chaque touche est décrite par sa position en ligne et sa position
en colonne. Le couple de fréquence obtenu est le représentant unique de la touche.
Figure 1 : touches d’un clavier téléphonique et fréquences associées.

III. Analyses temporelle et fréquentielle d’un signal DTMF.

Le fichier ‘signal.mat’ est un exemple de signaux de signalisation enregistré lorsqu’une touche d’un
clavier téléphonique est appuyée.
Il a été échantillonné à la fréquence fs=8192 Hz.

1. Tracer le signal dans le domaine temporel selon le vrai axe de temps.


2. Délimiter la partie active visuellement. On appelle partie active la portion du signal où les
composantes harmoniques existent, c’est à dire lorsque les intervalles de silence contenant du
bruit ont été écartés.

3. Tracer la représentation spectrale du signal utile. Pour cela


a. Utiliser la fonction fft.m et appliquer une TF sur Nfft=1024 points.
b. Définir un vrai axe de fréquence en Hz :
F=(-Nfft/2:Nfft/2-1)*(fs/Nfft);
c. Centrer le spectre grâce à la fonction fftshift afin qu’il ressemble au spectre d’un signal
réel.
4. Mesurer visuellement les fréquences des harmoniques. En déduire la touche du clavier
appuyée.

II. Notion de spectrogramme


Le spectrogramme est une représentation temps-fréquence de type information à 2
dimensions ou l’axe des abscisses est le temps, l’axe des ordonnées est la fréquence et le
contenu de l’image est la valeur du spectre traduite en couleur. En fait, un signal est
décomposé en plusieurs intervalles temporels. Pour chaque intervalle, le spectre est calculé
et est tracé.

Pour tracer un spectrogramme, on utilise le bout de programme MATLAB suivant :


[S,F,T,P] = spectrogram(phone,Nfft,0,Nfft,fs,'yaxis');
surf(T,F,10*log10(abs(P)),'EdgeColor','none');
axis xy; axis tight; colormap(jet); view(0,90);
xlabel('Time');
ylabel('Frequency (Hz)');

On utilise le signal phone.mat dans cette partie du TP.


1. Télécharger le signal phone, visualiser et écouter.
2. Visualiser ce spectrogramme et identifier visuellement les touches appuyées.

III. Synthèse du son d’une touche


Une fois les fréquences des touches définis dans le paragraphe II.c, il est possible de synthétiser
sous MATLAB les sons vocaux des touches du clavier de manière très simple.
Ecrire un code MATLAB qui génère un signal composé de deux sinusoides caractérisés comme
suit :
a. fs=8192 Hz ;
b. durée= 1 seconde.
c. fréquences 1 et 2 identifiées dans la question III.4
d. amplitudes des sinusoides égales à 1 et à 2 respectivement.

Vérifier le signal obtenu par visualisation des allures temporelle et spectrale et par tests d’écoute.

IV. Identification automatique d’une touche appuyée


On se propose d’écrire un code MATLAB qui permet d’identifier de manière automatique la
touche appuyée. Pour cela, on adoptera l’approche suivante :
-on détermine de manière automatique la partie active du signal qui contient l’information
de signalisation. Pour cela, utiliser la fonction fournie onset_offset.
- on calcule le spectre de la partie active, qu’on lisse. Cette opération permet d’éliminer les
pics non significatifs du spectre.
On utilise pour cela la fonction smooth.m deux fois consécutives.
- on détermine les pics du spectre lissé. On utilise la fonction findpeaks en spécifiant un
nombre de pics égal à 2.
- on détermine les vraies fréquences associées aux 2 pics utiles.
- on identifie la touche appuyée.

V. Identification d’un numéro de téléphone


Le fichier phone.mat contient le signal DTMF d’un numéro de téléphone composé. Proposer
une solution que vous programmerez sous MATLAB pour identifier le numéro composé.
Pour cela, vous pouvez suivre les recommandations suivantes.
- Décomposer le signal total en morceaux temporels de taille 6700 échantillons.
- Délimiter le début et la fin de la partie active.
- Calculer les fréquences utiles ;
- Ajuster les fréquences pour qu’elles correspondent aux fréquences exactes d’une touche du
clavier.
- Identifier chaque touche.
- Afficher le numéro de téléphone composé en entier.

Das könnte Ihnen auch gefallen