PSNR in Matlab

Darèios89
Dovrei calcolare il psnr in matlab di due immagini, però senza usare l' apposita funzione, solo che non sono convinto, potreste dirmi come risolvere o come correggere?

function [PSNR,MSE] =psnr(A,Interpolata)
[m,n]=size(A);
MSE=0;

for x=1: m
    for y=1: n
        MSE=MSE+(A(x,y)-Interpolata(x,y)).^2;
       
    end
end

MSE=MSE/(m*n);

 PSNR=10*log10((255^2)/MSE);
%PSNR=-10*log10(MSE/(255^2));
%PSNR=20*log10(255/sqrt(MSE))

end

Risposte
apatriarca
In che senso non sei ancora convinto? Io l'avrei scritto nella forma (non mi piace scrivere tanti cicli e quando è possibile evitarlo con qualche funzione lo preferisco):
function [PSNR,MSE] = psnr(A, B) 

MSE = mean(mean((A - B) .^ 2));

PSNR = 10 * log10((255^2)/MSE));

end

ma anche la tua mi sembra corretta. Che cosa c'è che non va?

Darèios89
Non posso usare quelle funzioni, devo fare tutto a mano, purtroppo perdo in efficienza, ma nel progetto non posso usare funzioni predefinite :roll:
Non mi convince perchè il valore di MSE viene ad esempio:

6.4702e+003

Non capisco perchè quell'e+003.

A te sembra giusto il metodo?
P.S avrei bisogno di un altro aiuto, se puoi dare un' occhiata oltre che a qui ad un altro post che ho scritto, su un problema del bitplane, è un pò lungo ma ne avrei davvero bisogno.
Grazie

apatriarca
A me sembra giusto, rispecchia la definizione. Quando vale MSE?

Darèios89
MSE vale proprio:

6.4702e+003

Comunque se secondo te va bene, mi fido :-D
Potresti dare un' occhiata all'altro post?

Ho un problema nella rigenerazione di un' immagina da bitplane a originale.

apatriarca
Considera che il MSE è la media dei quadrati delle differenze. Per cui può essere compreso tra 0 (differenza nulla) e 255^2 = 65025. 6470,2 è compreso tra questi due valori e direi che può andare quindi abbastanza bene. La sua radice quadrata è circa 80 e corrisponde più o meno (senza entrare in discorsi di statistica) alla differenza media tra le due immagini. È oggettivamente abbastanza elevato, ma se hai tolto abbastanza bit può avere senso. L'errore è secondo me, come ti ho scritto nell'altro post, nel calcolo dei bitplanes però e non qui. Avevo letto male prima e pensavo mi dicessi il PSNR. In quel caso, 6470 dB erano senza senso.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.