Vous êtes sur la page 1sur 13

[Titre du document]

dell
[Sous-titre du document]
[Nom de la société] | [Adresse de la société]
L'un des objectifs sous-jacents de l'amélioration de l'image est de produire une image plus
agréable visuellement que l'original. Cependant, cela peut être très subjectif, ce qui rend
difficile de dire si une méthode offre une meilleure qualité qu’un autre. Pour étudier
quantitativement les effets des algorithmes d’amélioration d’image sur la qualité de
l’image, il est nécessaire d’établir des mesures empiriques de cette qualité d’image. Cela
permet différents algorithmes d'amélioration d’image à être comparé systématiquement en
utilisant le même ensemble d'images de test pour identifier si un algorithme particulier
produit de meilleurs résultats. Une métrique couramment utilisée pour l'évaluation de la
qualité d'image est le rapport signal sur bruit crête (PSNR-Peak Signal-to-Noise Ratio) définit
par :

 Tâche 1 : Créez une nouvelle fonction PSNR qui, étant donné une image de référence
f et une image de test g comme entrées, génère la valeur PSNR.
Le script Matlab associé est :
function PSNR = PSNR(f,g)
%this function computes the peak signal to noise between to uint8 images having
the same size
% PSNR: peak signal to noise
% f: original image matrix
%%g: recontucted image matrix

f = double (f(:));
g =double(g(:));
MSE = sum(((f-g).^2)/numel(f));
PSNR =20*log10(255/sqrt(MSE));

1. Sur-échantillonnage / Sous-échantillonnage
Numérique (Digital Zooming)

Étudions d'abord l'effet de différentes techniques de zoom numérique sur la qualité de


l'imagede l’image sur-échantillonnée résultante. Pour cette étude, nous utiliserons les
images de « Lena » et « Cameraman ».
 Tâche 1 : Chargez les images « Lena » et « Cameraman » (en utilisant la fonction
imread) et convertissez-les (si nécessaire) en images en niveaux de gris à l’aide de la
fonction rgb2gray.
Dans notre cas, il n’est pas nécessaire d’utiliser « rgb2gray » qui est généralement utilisée
pour convertir une image couleur RVB (Rouge, Vert, Bleu) en une image en niveaux de gris,
ce qui n’est pas le cas pour les images « Lena » et « Cameraman ».
Le script Matlab est :
clear all
close all
clc

% Read images
f1= imread('cameraman.tif');
[M1, N1] =size (f1) ;
subplot(121), imshow(f1)
f2= imread('face.tif');
[M2, N2] =size (f2) ;
subplot(122), imshow(f2);

On aboutit au résultat suivant :

 Tâche 2 : Réduisez la résolution des images par un facteur 4 dans les directions
horizontale et verticale en utilisant une interpolation bilinéaire (utilisez la fonction
imresize). Affichez les images sous-échantillonnées (en utilisant la fonction imshow).

Le script Matlab est :


% Read images
f1= imread('cameraman.tif');
subplot(221), imshow(f1)
f2= imread('face.tif');
subplot(222), imshow(f2);

% Réduire la résolution de l'image par un facteur de 4 avec interpolation


bilinéaire
image_reduced_1 = imresize(f1, 0.25, 'bilinear'); %Le facteur de réduction de
0.25 (1/4)
image_reduced_2 = imresize(f2, 0.25, 'bilinear');
% Afficher l'image sous-échantillonnée
subplot(223),imshow(image_reduced_1);
subplot(224),imshow(image_reduced_2);

On trouve en simulation :

 Le facteur de réduction de 0.25 (1/4) spécifié dans la fonction imresize réduira


l'image dans les directions horizontale et verticale.*
 L'option 'bilinear' indique à MATLAB d'utiliser l'interpolation bilinéaire pour
redimensionner l'image, ce qui donne des résultats lisses et de haute qualité pour la
réduction de la résolution.

 Tâche 3: Effectuez un zoom numérique pour augmenter la résolution de l'image sous-


échantillonnée à la résolution des images originales en utilisant chacune des
méthodes d’interpolation suivantes :
1) Voisins les plus proches (Nearest Neighbor) :
Le principe de l'interpolation des voisins les plus proches (ou "Nearest Neighbor") est une
méthode simple d'interpolation utilisée pour estimer la valeur d'un point entre des points de
données connus.
Le script Matlab associé :
% Zoom numérique avec interpolation des voisins les plus proches
image_zoom_nn_1 = imresize(image_reduced_1 , 4, 'nearest');
image_zoom_nn_2 = imresize(image_reduced_2 , 4, 'nearest');

% Afficher l'image zoomée


subplot(325),imshow(image_zoom_nn_1);
subplot(326),imshow(image_zoom_nn_2);

On trouve le résultat suivant:

 4 : Ce paramètre indique le facteur de zoom qu’on a appliqué à l'image. En spécifiant

4, vous demandez à imresize d'agrandir l'image quatre fois par rapport à sa taille
d'origine. Cela signifie que la nouvelle image aura quatre fois plus de pixels que
l'image sous-échantillonnée dans les deux directions (horizontale et verticale).
 'nearest' : C'est l'option d'interpolation choisie. En spécifiant 'nearest', nous
indiquons à imresize d'utiliser l'interpolation des voisins les plus proches pour
agrandir l'image. Cela signifie que pour chaque pixel de la nouvelle image, la valeur
du pixel le plus proche dans l'image sous-échantillonnée sera copiée.*

2) Bilinéaire (Bilinear) :
Le principe de l'interpolation bilinéaire (Bilinear) est une méthode d'interpolation qui permet
d'estimer la valeur d'un point entre quatre points de données connus disposés en forme de
carré ou de rectangle.
Le script Matlab est :
% Zoom numérique avec interpolation bilinéaire
image_zoom_bilinear_1 = imresize(image_reduced_1 , 4, 'bilinear');
image_zoom_bilinear_2 = imresize(image_reduced_2 , 4, 'bilinear');

% Afficher l'image zoomée


subplot(325),imshow(image_zoom_bilinear_1);
subplot(326),imshow(image_zoom_bilinear_2);
on aboutit au résultat suivant :

Les images obtenues à partir des images sous-échantillonnées sont.


3) Bicubique (Bicubic) :
Le principe de l'interpolation bicubique (Bicubic) est une méthode plus avancée
d'interpolation utilisée pour estimer la valeur d'un point entre des points de données
connus. L'interpolation bicubique effectue une interpolation dans deux directions :
horizontale et verticale. Interpolation horizontale : Pour estimer la valeur du point cible
dans la direction horizontale, l'interpolation bicubique utilise les valeurs des pixels situés à
gauche et à droite du point cible, ainsi que celles des pixels situés un peu plus loin, à gauche
et à droite. Elle applique un polynôme cubique à ces valeurs pour estimer la valeur du point
cible horizontalement. Interpolation verticale : Ensuite, pour estimer la valeur finale du
point cible, l'interpolation bicubique effectue une interpolation verticale similaire en utilisant
les valeurs des pixels situés au-dessus et en dessous du point cible, ainsi que celles des pixels
situés un peu plus haut et un peu plus bas. Encore une fois, elle applique un polynôme
cubique pour estimer la valeur du point cible verticalement.
Le script Matlab :
% Zoom numérique avec interpolation bicubique
image_zoom_bicubic_1 = imresize(image_reduced_1, 4, 'bicubic');
image_zoom_bicubic_2 = imresize(image_reduced_2, 4, 'bicubic');

% Afficher l'image zoomée


subplot(325),imshow(image_zoom_bicubic_1);
subplot(326),imshow(image_zoom_bicubic_2);

on obtient le résultat suivant:

 Tâche 4 : Calculez le PSNR entre les images originales et chacune des images sur-
échantillonnées correspondantes. Tracez les images sur-échantillonnées et affichez
les PSNR correspondants.
 Interpolation bicubique :
Le script Matlab :
%calcul du PSNR des images zoomées par interpolation bicubique
subplot(223),imshow(image_zoom_bicubic_1);
PSNR_1 = PSNR(f1,image_zoom_bicubic_1);
disp(['PSNR: ', num2str(PSNR_1)]);
title (['PSNR=', num2str(PSNR_1), 'dB']);
subplot(224),imshow(image_zoom_bicubic_2);
PSNR_2 = PSNR(f2,image_zoom_bicubic_2);
disp(['PSNR: ', num2str(PSNR_2)]);
title (['PSNR=', num2str(PSNR_2), 'dB']);

PSNR=22.268dB PSNR=29.8899dB
 Interpolation bilinéaire:
Le script Matlab:
%calcul du PSNR des images zoomées par interpolation bilinéaire
subplot(223),imshow(image_zoom_bilinear_1);
PSNR_1 = PSNR(f1,image_zoom_bilinear_1);
disp(['PSNR: ', num2str(PSNR_1)]);
title (['PSNR=', num2str(PSNR_1), 'dB']);
subplot(224),imshow(image_zoom_bilinear_2);
PSNR_2 = PSNR(f2,image_zoom_bilinear_2);
disp(['PSNR: ', num2str(PSNR_2)]);
title (['PSNR=', num2str(PSNR_2), 'dB']);

PSNR=21.819dB PSNR=28.8173dB

 Interpolation des voisins les plus proches :


Le script Matlab :
%calcul du PSNR des images zoomées par interpolation des voisins les plus proches

subplot(223),imshow(image_zoom_nn_1 );
PSNR_1 = PSNR(f1,image_zoom_nn_1);
disp(['PSNR: ', num2str(PSNR_1)]);
title (['PSNR=', num2str(PSNR_1), 'dB']);
subplot(224),imshow(image_zoom_nn_2);
PSNR_2 = PSNR(f2,image_zoom_nn_2);
disp(['PSNR: ', num2str(PSNR_2)]);
title (['PSNR=', num2str(PSNR_2), 'dB']);
PSNR=21.5412dB PSNR=27.6122dB

 Questions/Observations/Interprétations :
1) Que pouvez-vous observer sur les images sur-échantillonnées produites par chacune
des méthodes ?
Voisins les plus proches (Nearest Neighbor) :
 Les images sur-échantillonnées par cette méthode ont une apparence pixellisée en
raison de la simplicité de l'interpolation.
 Les détails fins de l'image d'origine ne sont pas restaurés, ce qui a entraîner une
perte de netteté.

Bilinéaire (Bilinear) :
 Les images sur-échantillonnées avec une interpolation bilinéaire sont plus lisses que
celles obtenues avec la méthode des voisins les plus proches.
Bicubique (Bicubic) :
 Les images sur-échantillonnées avec une interpolation bicubique sont encore plus
lisses que celles obtenues avec l'interpolation bilinéaire.

2) Comment les différentes méthodes se comparent-elles les unes aux autres en termes
de PSNR ainsi que de qualité visuelle ? Pourquoi?
On remarque que PSNR par l’interpolation bicubique > PSNR par l’interpolation
bilinéaire > PSNR par l’interpolation Nearest Neighbor.
Cela peut être par le fait que l’interpolation bicubique a la capacité à reproduire plus
fidèlement les détails de l'image d'origine, suivit de l’interpolation bilinéaire.
3) Quelles parties de l'image semblent bien fonctionner avec ces méthodes de zoom
numérique ? Quelles parties de l'image ne le fait pas ? Pourquoi?
L'efficacité des méthodes de zoom numérique (voisins les plus proches, bilinéaire et
bicubique) dépend des caractéristiques de l'image et de la nature des détails qu'elle
contient.

4) Comparez les résultats du zoom entre Lena et Cameraman. Quelle image génère un
PSNR plus élevé ? Quelle image est la moins dégradée lorsqu'elle est restaurée par
rapport à sa résolution d'origine à l'aide de méthodes de zoom numérique ?
Pourquoi?

 L’image « Lena » a un PSNR plus élevé que « Cameraman », et on remarque que


l’image « Lena » est la moins dégradée lorsqu'elle est restaurée par rapport à sa
résolution d'origine à l'aide de méthodes de zoom numérique. Et cela peut être
expliquer par le fait « Lena » contient moins de détail qui sont fin avec une structure
régulier et des bords nets.

5) Que dit le PSNR sur chacune des méthodes ? Est-ce que cela reflète ce qui est
observé visuellement ?
Le PSNR (Peak Signal-to-Noise Ratio) est une mesure de la qualité de l'image qui évalue la
fidélité de l'image sur-échantillonnée par rapport à l'image d'origine. Un PSNR plus élevé
indique une meilleure qualité, car il signifie qu'il y a moins de distorsion par rapport à l'image
d'origine.

 Le PSNR obtenu avec l'interpolation des voisins les plus proches est généralement
plus bas que celui obtenu avec les autres méthodes. Cela indique une distorsion plus
élevée par rapport à l'image d'origine.
Visuellement, cela se reflète par des images avec une apparence pixellisée, des bords
durs et une qualité globale inférieure des 2 images.
 L'interpolation bilinéaire a tendance à obtenir un PSNR plus élevé que l'interpolation
des voisins les plus proches, ce qui indique une meilleure qualité en termes de
fidélité par rapport à l'image d'origine.
Visuellement, les images agrandies avec l'interpolation bilinéaire sont plus lisses,
avec des transitions de couleur plus douces.
 L'interpolation bicubique a le PSNR le plus élevé parmi les trois méthodes, ce qui
indique la plus faible distorsion par rapport à l'image d'origine.
Visuellement, les images agrandies avec l'interpolation bicubique sont très lisses,
avec des transitions de couleur naturelles et une qualité visuelle élevée, ce qui est en
accord avec le PSNR plus élevé.

2. Convolution discrète pour le traitement d'images


Étudions comment la convolution peut être utilisée à des fins de traitement d'image. Pour
cette étude, nous utiliserons l'image de « Lena ».
Nous allons maintenant construire trois fonctions d'impulsion h1, h2, h3 comme suit :
h1 = (1/6)*ones(1,6); h2 = h1’; h3 = [-1 1];
 Tâche 1 : Chargez l'image Lena et convertissez-la en image en niveaux de gris à l'aide
de la fonction rgb2gray.
Il n’est pas nécessaire d’utiliser « rgb2gray » pour convertir une image « Lena » en
une image en niveaux de gris.

 Tache2 : Pour obtenir l'intensité de l'image dans la plage de 0 à 1, utilisez la fonction


double sur l'image puis divisez-la par 255.
clear all
close all
clc

I= imread('face.tif');
subplot(121),imshow(I);
% Convertir l'image en double et divisez-la par 255 pour obtenir une plage de 0 à
1
I_double = double(I) / 255;
subplot(122),imshow(I_double);

 Tache 3: Utilisez maintenant la fonction conv2 pour convoluer l'image de Lena avec
les fonctions d'impulsion h1, h2 et h3 séparément. Tracez l'image originale ainsi que
les images convoluées.

Le script Matlab :
h1 = (1/6)*ones(1,6);
h2 = h1';
h3 = [-1 1];

% Convolution avec h1
I_h1 = conv2(I_double, h1, 'same');%a méthode 'same' signifie que la taille de
l'image résultante est la même que celle de l'image d'origine.

% Convolution avec h2
I_h2 = conv2(I_double, h2, 'same');

% Convolution avec h3
I_h3 = conv2(I_double, h3, 'same');
% Afficher les images
subplot(2, 2, 1), imshow(I_double, []), title('Image originale');
subplot(2, 2, 2), imshow(I_h1, []), title('Image convoluée avec h1');
subplot(2, 2, 3), imshow(I_h2, []), title('Image convoluée avec h2');
subplot(2, 2, 4), imshow(I_h3, []), title('Image convoluée avec h3');

On trouve le résultat suivant:


Image originale Image convoluée avec h1

Image convoluée avec h2 Image convoluée avec h3

 Questions/Observations/Interprétations :
1) Qu'est-ce que la convolution de l'image avec h1 a fait à l'image ? En examinant la
fonction d'impulsion, expliquez pourquoi la convolution de l'image avec h1 donne un
tel résultat.
 h1 = (1/6)*ones(1,6). Cela signifie qu'il s'agit d'une impulsion où tous
les éléments ont la même valeur de 1/6. Cela crée une impulsion uniforme de
longueur 6.
 Lorsque vous convoluez l'image Lena en niveaux de gris avec h1, voici ce qui
se passe :
L'opération de convolution consiste à faire glisser l'impulsion h1 sur l'image, en multipliant
les valeurs de h1 par les valeurs correspondantes de l'image à chaque position.
Comme h1 est uniforme, il effectue une moyenne pondérée des pixels de l'image dans sa
fenêtre glissante.
Puisque h1 est de longueur 6, la convolution effectue une moyenne pondérée sur une
fenêtre de 6 pixels à la fois.
En résultat, la convolution avec h1 a un effet de flou sur l'image. Cela lisse les variations
d'intensité d'une petite région de l'image, ce qui peut atténuer les détails fins et donner à
l'image un aspect plus doux.

 En résumé, la convolution de l'image avec h1 produit un effet de flou en raison de


l'impulsion uniforme qui réalise une moyenne pondérée sur les pixels voisins. Cela
lisse l'image et atténue les détails fins.
2) Qu'est-ce que la convolution de l'image avec h2 a fait à l'image ? En examinant la
fonction d'impulsion, expliquez pourquoi la convolution de l'image avec h2 donne un
résultat.

La fonction d'impulsion h2 est définie comme étant la transposée de h1 : h2 = h1'. Cela


signifie que h2 est une impulsion uniforme de longueur 6.

 Lorsque vous convoluez l'image Lena en niveaux de gris avec h2, voici ce qui se passe:
L'opération de convolution consiste à faire glisser l'impulsion h2 sur l'image, en multipliant
les valeurs de h2 par les valeurs correspondantes de l'image à chaque position.
Comme h2 est également uniforme, il effectue une moyenne pondérée des pixels de l'image
dans sa fenêtre glissante, tout comme h1.

Vous aimerez peut-être aussi