Académique Documents
Professionnel Documents
Culture Documents
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 :
Où
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)
% 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);
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).
On trouve en simulation :
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');
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
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?
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é.
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');
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.
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.