Mesure de qualité sous Matlab

Mesure de qualité sous Matlab - Traitement Vidéo - Video & Son

Marsh Posté le 05-02-2005 à 16:23:16    

Bonjour à tous, je sais pas si c'est ici que je dois poster ce sujet mais je me lance quand même.
Je dois faire des mesures de qualité sur des images compressées sous matlab. Ces mesures sont faites à partir de l'erreur quadratique moyenne, l'erreur absolue moyenne et le rapport signal sur bruit.
J'ai donc réalisé cette fonction sous matlab.

Code :
  1. function  mesureQualite(image)
  2. % Lecture de l'image
  3. image_mq = imread(image);
  4. % Récuperation des dimensions de l'image lu
  5. [M N] = size(image_mq);
  6. %Construction du filtre 2D
  7. a=0.4;
  8. hx = [0.25-a ; 0.25  ; a  ; 0.25 ; 0.25-a];
  9. hy = hx';
  10. Fpb = hx * hy;
  11. image_e = filter2(Fpb,image_mq,'same');
  12. image_mqc = double(image_mq)/255;
  13. image_ec = double(image_e)/255;
  14. %%%%% Calul de l'erreur quadratique moyenne     %%%%
  15. % On uilise la fonction matlab std2
  16. % std2 calcul l'ecart type entre des élements
  17. % de la matrice de l'image originale et l'image estimée
  18. %%%%                                            %%%%
  19. EQM = std2(image_mqc - image_ec);
  20. disp(sprintf('EQM = %f',EQM));
  21. %%%% Calcul de l'erreur moyenne                 %%%%
  22. % On utilise la fonction matlab mean2
  23. % mean2 calcul la moyenne des elements de la matrice
  24. % de l'image originale et l'image estimée
  25. %%%%                                            %%%%
  26. EAM = mean2(abs(image_mqc - image_ec));
  27. disp(sprintf('EAM = %f',EAM));
  28. %%%% Calcul du rapport signal sur bruit         %%%%
  29. if image_mqc == image_ec
  30.    error('Les images sont identiques')
  31. end
  32. max2_is = max(max(image_mqc));
  33. max2_ie = max(max(image_ec));
  34. min2_is = min(min(image_mqc));
  35. min2_ie = min(min(image_ec));
  36. if max2_is > 1 | max2_ie > 1 | max2_is < 0 | max2_ie < 0
  37.    error('Les valeurs des matrices doivent etre comprises entre 0 et 1')
  38. end
  39. erreur = max2_is - max2_ie;
  40. PSNR = 20*log10(1/(sqrt(mean(mean(erreur.^2)))));
  41. disp(sprintf('PSNR = %f dB',PSNR));


 
 
Quand je teste sur une image sans couleur, ça me renvoie les résultats suivants :
>> mesureQualite('lena.BMP')
EQM = 0.103045
EAM = 0.226669
PSNR = 7.765326 dB
 
Pensez vous que ma fonction est correcte? Est ce que les résultats le sont aussi?
 
merci

Reply

Marsh Posté le 05-02-2005 à 16:23:16   

Reply

Marsh Posté le 05-02-2005 à 22:45:23    

Je pense que tes mesures de EQM (MSE en anglais) et PSNR sont erronées...
 
le MSE (EQM) est simplement défini par
MSE = Moyenne ( (Image_source - Image_degradée)^2 )
En utilisant l'écart type, ce n'est pas ce que tu obtiens.
 
La maniere dont tu défini le PSNR me parait correcte mais la valeur de "erreur" me semble fausse. Je ne comprends pas pourquoi tu utilise les maximum uniquement pour définir ton erreur :
tu utilises erreur = max2_is - max2_ie
au lieu de
erreur = image_mqc - image_ec
 
Sinon, pour gagner tu temps, le PSNR peut etre défini par rapport au MSE de la maniere suivante:
PSNR = 10 log10 ( SignalMax / MSE )
avec SignalMax = 1 d'apres tes définitions d'image.
 
Pour finir, juste une remarque: ces valeurs ont beau représenter une quantification des différences entre tes images, elles ne donnent pas directement une mesure de la qualité.

Reply

Marsh Posté le 06-02-2005 à 14:21:09    

Merci pour ta réponse!!
Pour la MSE, je vais essayer de corriger ca!!
Sinon peut on tirer de ces mesures des conclusions sur la qualite d'une compression par exemple??
Si non, que devrait-je faire pour mesurer la qualite d'une image compressee par rapport a l'image originale.
Merci ;)

Reply

Marsh Posté le 06-02-2005 à 15:36:57    

Sans avoir le matériel et le temps adéquat, ces mesures sont surement la seule chose que tu puisse utiliser.
le PSNR donne une mesure pas forcément tres correcte de la qualité subjectivement percue mais constitue quand meme une bonne base (corrélation entre PSNR et qualité subjective doit etre dans les 70-80% si je ne me trompe pas).
 
 
Le seul moyen valable d'obtenir une meilleur mesure de qualité serait de créer un modele plus complexe basé sur plusieurs parametres (PSNR inclus). Mais la création de ces parametres est loin d'etre l'élément le plus dur. L'élément le plus sensible lors de la création d'un modele reste la calibration du modele. Cette calibration va etre utilisée pour regrouper un certain nombre de parametres et les "mapper" sur une mesure unique de qualité (échelle MOS par exemple). Mais cette calibration requiert énormément de données subjectives (association vrai score subjectif et images). Si tu ne t'y connais pas trop, meme avec pas mal de données, tu risques de créer un modele surentrainé (overtrained) qui ne sera pas mieux que le PSNR ^^;;;
Donc mon conseil sera de rester sur ton PSNR, MSE et MAE ;-)

Reply

Marsh Posté le 06-02-2005 à 17:13:55    

OK merci encore pour tes conseils.
J'ai donc modifier ma fonction:
 

Code :
  1. function [REQM,EAM,PSNR] = mesuresQualite(cimg, oimg)
  2. % mesuresQualite : Retourne la puissance du rapport signal sur bruit 
  3. % de l'image décompressée cimg par rapport à l'image original oimg
  4. % ainsi que l'erreur quadratique moyenne et l'erreur absolue moyenne
  5. % Taille de l'image originale
  6. [m,n]=size(cimg);
  7. cimg = double(cimg)/255;
  8. oimg = double(cimg)/255;
  9. %On calcule l'erreur quadratique moyenne
  10. eimg=cimg-oimg;
  11. EQM=sum(sum(eimg.^2))/(m*n);
  12. REQM = sqrt(EQM);
  13. %%%% Calcul de l'erreur moyenne                 %%%%
  14. % On utilise la fonction matlab mean2
  15. % mean2 calcul la moyenne des elements de la matrice 
  16. % de l'image originale et l'image estimée
  17. %%%%                                            %%%%
  18. EAM = mean2(abs(oimg - cimg));
  19. %On caclule PSNR
  20. PSNR=20*log10(1/sqrt(REQM));


 
Voici les résultas que j'obtien avec une compression maison de 12%.
Racine carre de l erreur quadratique moyenne : 0.001648  
L erreur absolue moyenne : 0.001578  
Rapport signal sur bruit (PSNR) : 27.831726 db
 
Le PSNR est inférieur à 30 donc j'sais pas coment interpreter ce resultats.Meme chose pour le REQM et EAM.
Je dois m'attendre à quoi comme valeurs ?
Subjectivement, l'image recinstituee est de qualite moyenne.
 
Merci encore!!

Reply

Marsh Posté le 06-02-2005 à 22:47:19    

Il y a encore un truc qui ne va pas avec ton PSNR...
ca devrait etre PSNR = 20*log10(1/REQM));
et non pas PSNR = 20*log10(1/sqrt(REQM)));
 
Mais a part cela, les valeurs que tu obtiendras (PSNR = 55) me paraissent un peu trop élevées pour une image moyenne...

Reply

Marsh Posté le 06-02-2005 à 23:41:31    

Oui oui biensur, c'ete une erreur grave de ma part!!
J'ai corrige, maintenant j'obtien 27db
Maintenant comme j'suis pas un expert, je sais pas comment interpreter ces valeurs. Je sais que pour une compression JPEG le PSNR est a peu pres egale a 30db. Moi j'obtien 27db, est ce que c'est bien ?
Que puis je dire sur les valures de EQM et EAM .
Merci et bonne soiree!!

Reply

Marsh Posté le 07-02-2005 à 10:12:27    

27dB me parait une valeur correcte pour une qualité moyenne...

Reply

Marsh Posté le 25-04-2005 à 14:15:49    

bonjour je voudrais vous demander et savoir si qlq a deja travaillé sur d'autres indices de qualité d'images.
actuellement je suis sur le sujet et j'aurais voulu connaitre un peu votre avis sur les meilleurs indices de qualité d'images existant deja.
merci

Reply

Marsh Posté le 10-06-2005 à 10:58:39    

Bon voila j'image que ce sujet est plus d'actualité, mais je poste au cas ou ca pourrais etre utile à qq'un qui fait les meme recherches que moi (ce post sort en premier dans google quand on tape mesure qualité image)
 
une mesure qui a l'air d'etre géniale pour les images, c'est le SSIM (Structural SIMilarity) - A Universal Image Quality Index.
 
http://www.cns.nyu.edu/~lcv/ssim/
 
A+

Reply

Marsh Posté le 10-06-2005 à 10:58:39   

Reply

Marsh Posté le 10-06-2005 à 11:39:41    

C'est vrai que c'est pas mal le ssim. Il y a un plugin avisynth qui permet de le calculer. De même qu'il y a un plugin pour calculer le psnr. Par rapport au psnr, le ssim integre des considération psycho-visuelles.

Reply

Marsh Posté le 10-06-2005 à 12:03:10    

Bon bah vu que ce sujet fait encore réagir je peut meme demander si qq'un connait une implémentation du PQS (Picture Quality Scale)
 
Un programme gratuit ou des sources de n'importe quel langage...
 
Pour ssim, les chercheurs qui l'ont inventés filent le code source matlab sur leur page

Reply

Marsh Posté le 10-06-2005 à 13:53:33    

T'as quelques infos dessus? Je connais pas du tout.

Reply

Marsh Posté le 10-06-2005 à 14:14:44    

Les seules infos que j'ai c'est les réponses de google en tapant "Picture Quality Scale", avec les guillemets.
 
Apparement c'est une mesure qui prend en compte les particularités de l'oeil humain. Il serait bien mieux que PSNR mais pas parfait non plus.  
 
moi j'ai déjà choisi le SSIM vu que y'a les sources

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed