PSNR in Matlab
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
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):
ma anche la tua mi sembra corretta. Che cosa c'è che non va?
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?
Non posso usare quelle funzioni, devo fare tutto a mano, purtroppo perdo in efficienza, ma nel progetto non posso usare funzioni predefinite
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

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
A me sembra giusto, rispecchia la definizione. Quando vale MSE?
MSE vale proprio:
6.4702e+003
Comunque se secondo te va bene, mi fido
Potresti dare un' occhiata all'altro post?
Ho un problema nella rigenerazione di un' immagina da bitplane a originale.
6.4702e+003
Comunque se secondo te va bene, mi fido

Potresti dare un' occhiata all'altro post?
Ho un problema nella rigenerazione di un' immagina da bitplane a originale.
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.