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

Learn moreOpportunities for recent engineering grads.

Apply Today**New to MATLAB?**

Asked by akanksha sharma
on 4 Oct 2012

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.

Answer by Image Analyst
on 4 Oct 2012

Edited by Image Analyst
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);

Show 2 older comments

Image Analyst
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
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.

## 0 Comments