How to Implement an “imshow” function?

How to Implement an “imshow” function by transforming the range [min, max] on the gray scale into the interval determined by 0 ≤ a, b ≤ 1? I need use variables and it should be suitable for any image not particular. Thank you!

 Accepted Answer

The result should be like this. And if I use your code than the image not changingСнимок экрана 2018-12-02 в 2.01.45.png

4 Comments

Because you posted your comment as answer it is not clear who you are responding to.
If you are responding to Walter: What exact code did you use? Because the mat2gray function should do this for you.
If you are responding to me: What values did you set a and b to? Please post the code you used.
Anna Nazarova
Anna Nazarova on 2 Dec 2018
Edited: Anna Nazarova on 2 Dec 2018
Rik, this code:
IM=imread('girl.jpg');%generate 'image'
a=0;b=255;%define upper and lower bound
IMsc=double(IM);%make sure it is a double
IMsc=(IMsc-a)/(b-a);
IMsc(IMsc<0)=0;IMsc(IMsc>1)=1;
figure(1),clf(1)
subplot(1,3,1)
imshow(IM,[])
title('original')
subplot(1,3,2)
imshow(IM,[a b])
title('original (scaled)')
subplot(1,3,3)
imshow(IMsc,[])
title('scaled result')
Of course the image is not changing: you have defined a and b is such a way that it will not change. The data type that most images will have when loaded is uint8. This has a minimum of 0 and a maximum of 255. If you want to change how the image looks, there are multiple methods:
  1. the method I showed you, where you will have to define a and b yourself, or use a=min(IM(:));b=max(IM(:));
  2. the method Walter suggested: use mat2gray(IM) (note that mat2gray(IM,[a b]) is equivalent to my method. mat2gray is in the image processing toolbox, but you appear to have that anyway.)
  3. the method Image Analist just suggested: don't change the data, but use the empty square brackets to display you image with a scaled color scheme by using imshow(IM,[])
Which of these you think is best for your situation is for you to decide.
I also suggested #2. And there is yet another way that might be useful. It's imadjust(). With imadjust(), you can specify a percentage of the way to come in on the tails of the histogram to determine the range. that way, outliers (like salt and pepper noise) will not prevent a nice picture from appearing.

Sign in to comment.

More Answers (3)

To display a gray scale image without changing the values of the array, but only changing the displayed values, do this:
imshow(grayImage, []);
To change the actual matrix, use mat2gray():
% Scale grayImage to between 0 and 1: min goes to 0, max goes to 1
grayImage = mat2gray(grayImage);

5 Comments

Thanks everyone, it works!
So I have a problem. It works with imadjust() function, but I don't know how to use
imshow(grayImage, []);
I need to use this function. If you know, please write a code. Thank you!!
Not sure what you're asking.
imshow(grayImage, []);
works, as does
imshow(imadjust(grayImage));
The [] are not needed if you use imadjust since the output of imadjust is already scaled from 0 to 255.
Can you please send full code?
Yes, you can find it here

Sign in to comment.

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!