彩色jpeg图像的功率信号噪声比(PSNR)

时间:2013-04-28 14:56:48

标签: matlab image-processing jpeg

我有原始图像和原始图像的扭曲图像。我想计算失真图像的PSNR,这样我就可以用dB来测量失真。图像类型为彩色jpeg。

2 个答案:

答案 0 :(得分:5)

我不知道您之前使用过什么,但您可以使用以下代码计算更改后图像的PSNR:

I = imread('original.jpg');
Ihat = imread('changed.jpg');

% Read the dimensions of the image.
[rows columns ~] = size(I);

% Calculate mean square error of R, G, B.   
mseRImage = (double(I(:,:,1)) - double(Ihat(:,:,1))) .^ 2;
mseGImage = (double(I(:,:,2)) - double(Ihat(:,:,2))) .^ 2;
mseBImage = (double(I(:,:,3)) - double(Ihat(:,:,3))) .^ 2;

mseR = sum(sum(mseRImage)) / (rows * columns);
mseG = sum(sum(mseGImage)) / (rows * columns);
mseB = sum(sum(mseBImage)) / (rows * columns);

% Average mean square error of R, G, B.
mse = (mseR + mseG + mseB)/3;

% Calculate PSNR (Peak Signal to noise ratio).
PSNR_Value = 10 * log10( 255^2 / mse);

答案 1 :(得分:4)

这是一个矢量化实现:

mse = mean(mean((im2double(I) - im2double(K)).^2, 1), 2);
psnr = 10 * log10(1 ./ mean(mse,3));

它应该适用于整数和浮点图像,包括灰度和彩色图像。

我使用以下PSNR定义:

mse

psnr