Skip to main content

Stretch the dynamic range of the given 8-bit grayscale image using MATL...

Why do I find different SSIM values depending on whether the images

 Why do I find different SSIM values depending on whether the images' intensity information is stored in the range [0 1] or [0 255]?

 

I import an image using the im2gray() function, which stores it as an array with a range of values between 0 and 255. I convert it into a double using double(), which does not alter the values of the elements but just changes the file format. I then alter the values and compare the altered image to the original in two ways. Firstly, I use mat2gray() to convert the intensity information in both images to the range 0-1 instead of 0-255. Secondly, I compare the 0-255 matrices. The SSIM values I get are quite different (the first value is higher than the second).
 
Why is this? Does the mat2gray() function lose image information? Which is the "correct" value of SSIM between the original and distorted images?
 
NB you can use any image for this. The one I used it attached to this answer.
 
% Import an image using im2gray
im = im2gray(imread('peppers.png'));

% Convert this a double (without rescaling the values from the range 0-255)
% and then modify the values slightly to create a distorted image.

imdouble = double(im);
imdouble_new = imdouble * 0.5;
im_new = mat2gray(imdouble_new, [0 255]);

% NB im_new is a grayscale image with values 0-1 rather than 0-255. If we
% want to compare this image to the original using the SSIM metric we can
% do so in 2 ways.

% 1) Convert im into a 0-1 image matrix and use the ssim function.

ssim_values_1 = ssim(mat2gray(imdouble, [0 255]), im_new);
ssim_values_1(1)

% 2) Just compare the double matrices using the ssim function.

ssim_values_2 = ssim(imdouble, imdouble_new);
ssim_values_2(1)

Ans = 0.7508

% 2) Just compare the double matrices using the ssim function.
ssim_values_2 = ssim(imdouble, imdouble_new);
ssim_values_2(1)

ans = 0.6400

intensity-information


NOTE:-


Matlabsolutions.com provide latest MatLab Homework Help,MatLab Assignment Help , Finance Assignment Help for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research.


You're passing images to ssim() which are improperly-scaled for their class. Many functions make assumptions about the expected levels of an image based on its class, and ssim() is one. It uses the class to implicitly select the dynamic range parameter. The unit-scale ([0 1]) images work fine, since that's what ssim() expects a floating point image to be. It's the uint8-scale ([0 255]) images that it doesn't expect.
 
You can either cast the uint8-scale images as uint8, or to avoid the rounding loss on a working image, you can explicitly set the dynamic range parameter:
 
% Import an image using im2gray
im = rgb2gray(imread('peppers.png'));

% Convert this a double (without rescaling the values from the range 0-255)
% and then modify the values slightly to create a distorted image.
imuint8 = double(im);
imuint8_half = imuint8 * 0.5;

imdouble = mat2gray(imuint8, [0 255]);
imdouble_half = mat2gray(imuint8_half, [0 255]);

% NB im_new is a grayscale image with values 0-1 rather than 0-255. If we
% want to compare this image to the original using the SSIM metric we can
% do so in 2 ways.

% 1) Convert im into a 0-1 image matrix and use the ssim function.
ssim_values_1 = ssim(imdouble, imdouble_half,'dynamicrange',1);
ssim_values_1(1)

% 2) Just compare the uint8-scale matrices using the ssim function.
ssim_values_2 = ssim(imuint8, imuint8_half,'dynamicrange',255);
ssim_values_2(1)

ans = 0.7508


   SEE COMPLETE ANSWER CLICK THE LINK


Comments

Popular posts from this blog

https://journals.worldnomads.com/scholarships/story/70330/Worldwide/Dat-shares-his-photos-from-Bhutan https://www.blogger.com/comment.g?blogID=441349916452722960&postID=9118208214656837886&page=2&token=1554200958385 https://todaysinspiration.blogspot.com/2016/08/lp-have-look-at-this-this-is-from.html?showComment=1554201056566#c578424769512920148 https://behaviorpsych.blogspot.com/p/goal-bank.html?showComment=1554201200695 https://billlumaye.blogspot.com/2012/10/tagg-romney-drops-by-bill-show.html?showComment=1550657710334#c7928008051819098612 http://blog.phdays.com/2014/07/review-of-waf-bypass-tasks.html?showComment=1554201301305#c6351671948289526101 http://www.readyshelby.org/blog/gifts-of-preparedness/#comment_form http://www.hanabilkova.svet-stranek.cz/nakup/ http://www.23hq.com/shailendrasingh/photo/21681053 http://blogs.stlawu.edu/jbpcultureandmedia/2013/11/18/blog-entry-10-guns-as-free-speech/comment-page-1443/#comment-198345 https://journals.worldnomads.com

What are some good alternatives to Simulink?

Matlabsolutions provide latest  MatLab Homework Help, MatLab Assignment Help  for students, engineers and researchers in Multiple Branches like ECE, EEE, CSE, Mechanical, Civil with 100% output.Matlab Code for B.E, B.Tech,M.E,M.Tech, Ph.D. Scholars with 100% privacy guaranteed. Get MATLAB projects with source code for your learning and research. SIMULINK is a visual programing environment specially for time transient simulations and ordinary differential equations. Depending on what you need there are plenty of Free, Libre and Open Source Software (FLOSS) available: Modelica language is the most viable alternative and in my opinion it is also a superior option to MathWorks SIMULINK. There are open source implementations  OpenModelica  and  JModelica . One of the main advantages with Modelica that you can code a multidimensional ordinary differential equation with algebraic discrete non-causal equations. With OpenModelica you may create a non-causal model right in the GUI and with

USING MACHINE LEARNING CLASSIFICATION ALGORITHMS FOR DETECTING SPAM AND NON-SPAM EMAILS

    ABSTRACT We know the increasing volume of unwanted volume of emails as spam. As per statistical analysis 40% of all messages are spam which about 15.4 billion email for every day and that cost web clients about $355 million every year. Spammers to use a few dubious techniques to defeat the filtering strategies like utilizing irregular sender addresses or potentially add irregular characters to the start or the finish of the message subject line. A particular calculation is at that point used to take in the order rules from these email messages. Machine learning has been contemplated and there are loads of calculations can be used in email filtering. To classify these mails as spam and non-spam mails implementation of machine learning algorithm  such as KNN, SVM, Bayesian classification  and ANN  to develop better filtering tool.   Contents ABSTRACT 2 1. INTRODUCTION 4 1.1 Objective : 5 2. Literature Review 5 2.1. Existing Machine learning technique. 6 2.2 Existing