IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Images Discussion :

PSNR de 2 images


Sujet :

Images

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Par défaut PSNR de 2 images
    Bonjour,
    j'essaye de calculer le PSNR de deux images y et z
    à l 'aide du code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    %Calcul de lerreur quadratique moyenne
    EQM = sum((y(:)-z(:)).^2)/size(y)*size (y)
    %Calcul du PSNR
    PSNR= 10*log10(255*255/EQM)
    Mais lorsque je l'execute, je reçois le message d'erreur suivant:
    integers can only be combined with integers of the sameclass, or scalar doubles.
    J'ai regardé les matrices de mes images, il y a une qui est composée d'entiers positifs et celle de la nouvelle image a des nombres négatifs.

    Est ce que quelqu'un pourrait m'aider.
    Merci

    Seanty

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    90
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 90
    Par défaut
    Bonjour,

    es tu sur des données de y et z?
    Les images sont souvent composées de valeur numérique (cdata) et d'un color map...

    Pourrais tu nous joindres tes images y et z ?

    A quel ligne de ton code l'erreur fait elle référence? le Calcul de lerreur quadratique moyenne ou le Calcul du PSNR?

  3. #3
    Expert confirmé
    Avatar de Caro-Line
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    9 458
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 9 458
    Par défaut
    Dans ce genre de problème la solution (peut-être violente) est souvent de convertir les données au format double avec la fonction ...tada...DOUBLE

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Par défaut
    La première image est lena.tif
    et la seconde est celle que j'obtiens après la modulation QPSK.
    L'erreur fait reference au calcul de l'erreur quadratique.

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    y=imread('lena.tif');%lit une image
    [taille_i_l taille_i_c]=size(y);
    figure(1)
    colormap('gray')
    imagesc(y);
     
        %%Conversion decimale->binaire
    Q=8;
    z=double(dec2bin(double(y),Q))- 48; 
    Y = z(:);
    [l_z c_z]= size(z);
     
    fRe = 2*Y(1:2:length(Y))-1; %renvoie -1 si le bit est à 0 et 1 s il est =1
    fIm = 2*Y(2:2:length(Y))-1; %renvoie -1 si le bit est à 0 et 1 s il est =1
    dk=(fRe+sqrt(-1)*fIm);
     
    %% Reconstructiion de l'image
    X(1:2:2*N_symb) = real(dk);
    X(2:2:2*N_symb) = imag(dk);
    X_p=zeros(1,l_z*Q);
    X_p(1:length(X))=X;
    %Xout=X(:,1:2*N_symb)
     
    %% Mise sous forme matricielle
    z2=reshape(X_p,length(X_p)/Q,Q);
    mindex_1=find(z2==-1);
    z2(mindex_1)=0;
    num=2.^(Q-1:-1:0);
    z_quantifie=z2*num';
    image_dec=reshape(z_quantifie,taille_i_l,taille_i_c);
    figure(3)
    colormap('gray')
    imagesc(image_dec)
     
    %%Calcul du PSNR
    %EQM : Erreur Quadratique Moyenne
    EQM = sum ((y(:)-image_dec(:)).^2)/size(y)
     
    %PSNR: Peak Signal-Noise Ratio
    PSNR = 10*log10(255*255/EQM)
    Merci

  5. #5
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Salut,

    Par contre avec ce code, on doit être capable de reproduire l'erreur? parce que j'ai déjà un problème avec dec2bin qui n'accepte pas les matrices en premier argument mais bon en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    z=double(dec2bin(double(y(:)),Q))- 48;
    , ça passe et N_symb n'est pas définit...
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Par défaut
    Voici le code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    y=imread('lena.tif');%lit une image
    [taille_i_l taille_i_c]=size(y);
    figure(1)
    colormap('gray')
    imagesc(y);
     
    %%Conversion decimale->binaire
    Q=8;
    z=double(dec2bin(double(y),Q))- 48; 
    Y = z(:);
    [l_z c_z]= size(z);
     
    fRe = 2*Y(1:2:length(Y))-1; %renvoie -1 si le bit est à 0 et 1 s il est =1
    fIm = 2*Y(2:2:length(Y))-1; %renvoie -1 si le bit est à 0 et 1 s il est =1
    dk=(fRe+sqrt(-1)*fIm);
    N_symb=length(dk);
     
    %% Reconstructiion de l'image
    X(1:2:2*N_symb) = real(dk);
    X(2:2:2*N_symb) = imag(dk);
    X_p=zeros(1,l_z*Q);
    X_p(1:length(X))=X;
     
     
    %% Mise sous forme matricielle
    z2=reshape(X_p,length(X_p)/Q,Q);
    mindex_1=find(z2==-1);
    z2(mindex_1)=0;
    num=2.^(Q-1:-1:0);
    z_quantifie=z2*num';
    image_dec=reshape(z_quantifie,taille_i_l,taille_i_c);
    figure(3)
    colormap('gray')
    imagesc(image_dec)
     
    %%Calcul du PSNR
    %EQM : Erreur Quadratique Moyenne
    EQM = sum ((y(-image_dec().^2)/size(y)
     
    %PSNR: Peak Signal-Noise Ratio
    PSNR = 10*log10(255*255/EQM)

    Merci

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    y=imread('lena.tif');%lit une image
    [taille_i_l taille_i_c]=size(y);
    figure(1)
    colormap('gray')
    imagesc(y);
     
    %%Conversion decimale->binaire
    Q=8;
    z=double(dec2bin(double(y),Q))- 48; 
    Y = z(:);
    [l_z c_z]= size(z);
     
    fRe = 2*Y(1:2:length(Y))-1; %renvoie -1 si le bit est à 0 et 1 s il est =1
    fIm = 2*Y(2:2:length(Y))-1; %renvoie -1 si le bit est à 0 et 1 s il est =1
    dk=(fRe+sqrt(-1)*fIm);
    N_symb=length(dk);
     
    %% Reconstructiion de l'image
    X(1:2:2*N_symb) = real(dk);
    X(2:2:2*N_symb) = imag(dk);
    X_p=zeros(1,l_z*Q);
    X_p(1:length(X))=X;
     
     
    %% Mise sous forme matricielle
    z2=reshape(X_p,length(X_p)/Q,Q);
    mindex_1=find(z2==-1);
    z2(mindex_1)=0;
    num=2.^(Q-1:-1:0);
    z_quantifie=z2*num';
    image_dec=reshape(z_quantifie,taille_i_l,taille_i_c);
    figure(3)
    colormap('gray')
    imagesc(image_dec)
     
    %%Calcul du PSNR
    %EQM : Erreur Quadratique Moyenne
    EQM = sum ((y(-image_dec().^2)/size(y)
     
    %PSNR: Peak Signal-Noise Ratio
    PSNR = 10*log10(255*255/EQM)

  8. #8
    Modérateur

    Homme Profil pro
    Ingénieur en calculs scientifiques
    Inscrit en
    Août 2007
    Messages
    4 639
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Ingénieur en calculs scientifiques

    Informations forums :
    Inscription : Août 2007
    Messages : 4 639
    Par défaut
    Dans cette ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EQM = sum ((y(:)-image_dec(:)).^2)/size(y)
    Tu fais effectivement une soustraction entre une matrice de uint8 (y) et une matrice de double (image_dec), donc matlab il aime pas ça, et comme Caro-Line te l'a précisé une solution est de tout mettre en double avec l'opérateur re-tada DOUBLE!
    De plus size(y) renvoie les dimensions de ton image (nombre de ligne et nombre de colonne), j'imagine que tu veux diviser par le nombre de points, non?
    Si oui une solution serait de mettre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EQM = sum ((double(y(:))-image_dec(:)).^2)/(size(y,1)*size(y,2));
    Pour une bonne utilisation des balises code c'est ici!
    Petit guide du voyageur MATLABien : Le forum La faq Les tutoriels Les sources


    La nature est un livre écrit en langage mathématique. Galilée.

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juillet 2009
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2009
    Messages : 11
    Par défaut
    merci
    ça marche

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. le psnr d'une image
    Par sousou30 dans le forum Traitement d'images
    Réponses: 13
    Dernier message: 03/12/2017, 13h42
  2. calcule de PSNR et SSIM de deux images
    Par hamza.rezgui dans le forum C#
    Réponses: 1
    Dernier message: 19/03/2013, 05h19
  3. calcul de PSNR pour une image stéganographiée
    Par hajerboug dans le forum Traitement d'images
    Réponses: 0
    Dernier message: 02/06/2012, 20h08
  4. psnr sur une image 3D
    Par arij25 dans le forum Images
    Réponses: 7
    Dernier message: 11/01/2011, 23h14
  5. Réponses: 1
    Dernier message: 01/10/2008, 11h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo