Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

New to MATLAB?

How to calculate PSNR of compressed images, and how to compare PSNR of images compressed by two different techniques.

Asked by akanksha sharma

akanksha sharma (view profile)

on 4 Oct 2012
Latest activity Edited by Said BOUREZG

Said BOUREZG (view profile)

on 20 Feb 2015 at 10:27

I have to compare image compression techniques like VQ, JPEG, WAVELET, and fractal. For this, the parameter to be compared is PSNR. Please tell me how I can calculate PSNR OF AN IMAGE which is COMPRESSED by different compression techniques. plz explain with example.

0 Comments

akanksha sharma

akanksha sharma (view profile)

1 Answer

Answer by Image Analyst

Image Analyst (view profile)

on 4 Oct 2012
Edited by Image Analyst

Image Analyst (view profile)

on 4 Oct 2012

See my demo:

% Demo to calculate PSNR of a gray scale image.
% http://en.wikipedia.org/wiki/PSNR
% Clean up.
close all; 
clear all; 
workspace;
%------ GET DEMO IMAGES ----------------------------------------------------------
% Read in a standard MATLAB gray scale demo image.
grayImage = imread('cameraman.tif');
[rows columns] = size(grayImage);
% Display the first image.
subplot(2, 2, 1);
imshow(grayImage, []);
title('Original Gray Scale Image');
set(gcf, 'Position', get(0,'Screensize')); % Maximize figure.
% Get a second image by adding noise to the first image.
noisyImage = imnoise(grayImage, 'gaussian', 0, 0.003);
% Display the second image.
subplot(2, 2, 2);
imshow(noisyImage, []);
title('Noisy Image');
%------ PSNR CALCULATION ----------------------------------------------------------
% Now we have our two images and we can calculate the PSNR.
% First, calculate the "square error" image.
% Make sure they're cast to floating point so that we can get negative differences.
% Otherwise two uint8's that should subtract to give a negative number
% would get clipped to zero and not be negative.
squaredErrorImage = (double(grayImage) - double(noisyImage)) .^ 2;
% Display the squared error image.
subplot(2, 2, 3);
imshow(squaredErrorImage, []);
title('Squared Error Image');
% Sum the Squared Image and divide by the number of elements
% to get the Mean Squared Error.  It will be a scalar (a single number).
mse = sum(sum(squaredErrorImage)) / (rows * columns);
% Calculate PSNR (Peak Signal to Noise Ratio) from the MSE according to the formula.
PSNR = 10 * log10( 256^2 / mse);
% Alert user of the answer.
message = sprintf('The mean square error is %.2f.\nThe PSNR = %.2f', mse, PSNR);
msgbox(message);

5 Comments

Image Analyst

Image Analyst (view profile)

on 12 Oct 2013

Akanksha, please read Cris's blog on PSNR: http://www.cb.uu.se/~cris/blog/index.php/archives/490#more-490. If we're done here, please mark my answer as Accepted.

Karbala'a Unvi. Science on 20 Feb 2015 at 10:08

Dear Sir, It was a great code that you did here and it did helped me a lot in my project... It is the one that I was looking for Yours Z

Said BOUREZG

Said BOUREZG (view profile)

on 20 Feb 2015 at 10:26

Image Analyst have do all thing, nothing to say it after this answer, thank you sir for this code.

Image Analyst

Image Analyst (view profile)

Contact us