2

元の画像と元の画像の歪んだ画像があります。歪んだ画像の PSNR を計算して、歪みを dB 単位で測定したいと考えています。画像の種類はカラーJPEGです。

4

2 に答える 2

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);
于 2013-04-28T14:58:13.610 に答える
4

以下はベクトル化された実装です。

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

グレースケール画像とカラー画像の両方の整数および浮動小数点画像で機能するはずです。

次のPSNR定義を使用しています。

mse

psnr

于 2013-04-28T17:13:43.963 に答える