2013-04-28 3 views
2

У меня есть исходное изображение и искаженное изображение исходного. Я хочу рассчитать PSNR искаженного изображения, чтобы измерить искажение в дБ. Тип изображения цветной jpeg.Соотношение сигнал/шум (PSNR) цветного изображения jpeg

+1

Что вы уже пробовали? –

ответ

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); 
+0

Почему вам нужно писать сумму дважды в mseR, mseG и mseB-формулах? –

4

Вот Векторизованная реализация:

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

Он должен работать для изображений с целым числом и с плавающей точкой, как в оттенках серого, так и в цветных изображениях.

Я использую следующее определение: PSNR

mse

psnr

Смежные вопросы