Calculation of psnr value in RGB image. I have calculated psnr using this code. But the result obtained is a complex number. What should be the error??
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
if true
function PSNR = psnrgb(I,W)
[m,n,p] = size(I); [h,w,q] = size(W); if m ~= h n ~= w p~=q error('Two images must have the same size.') end for k=1:p for i=1:m for j=1:n delta=sum(I(i,j,k)-W(i,j,k).^2); end end end
delta = 1/(m*n*p) * delta ; PSNR = 10 * log10( 255^2/delta );
end end
0 commentaires
Réponses (1)
DGM
le 13 Sep 2024
There are plenty of problems.
function PSNR = psnrgb(I,W)
[m,n,p] = size(I);
[h,w,q] = size(W);
% obviously, this test expression is invalid as written
if m ~= h n ~= w p ~= q
error('Two images must have the same size.')
end
% this entire set of loops does nothing but calculate
% the squared difference of the last pixel pair alone.
% while the rest of the entire image is ignored,
% the inputs are presumed to be uint8, so it's a 50% chance
% that this answer for that one single pixel is still completely wrong.
for k=1:p
for i=1:m
for j=1:n
delta = sum(I(i,j,k)-W(i,j,k).^2);
end
end
end
% convert the sum to a mean, but we don't have a sum of anything
delta = 1/(m*n*p) * delta ;
% this presumes the input is uint8
PSNR = 10 * log10( 255^2/delta );
end
We don't need to try fixing that. IPT already has psnr(). If you want to write your own, you can:
% the inputs
A = imread('peppers.png'); % the reference
B = imnoise(A,'gaussian',0,0.1); % the image to test
% compare the example against IPT psnr()
psnrrgb(B,A)
psnr(B,A)
function P = psnrrgb(inpict,ref)
% synopsis goes here
% test the inputs
if ~isequal(size(inpict),size(ref))
error('Images must both have the same size')
end
if ~strcmp(class(inpict),class(ref))
error('Images must both have the same class')
end
% calculate the output
err = double(inpict)-double(ref); % error
mse = mean(err(:).^2); % mean-square error
dr = diff(double(getrangefromclass(inpict))); % dynamic range for this numeric class
P = 10*log10(dr^2/mse);
end
0 commentaires
Voir également
Catégories
En savoir plus sur Display and Exploration dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!