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!

 Respuesta aceptada

Anna Nazarova
Anna Nazarova el 2 de Dic. de 2018

0 votos

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 comentarios

Rik
Rik el 2 de Dic. de 2018
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 el 2 de Dic. de 2018
Editada: Anna Nazarova el 2 de Dic. de 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')
Rik
Rik el 2 de Dic. de 2018
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.
Image Analyst
Image Analyst el 2 de Dic. de 2018
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.

Iniciar sesión para comentar.

Más respuestas (3)

Image Analyst
Image Analyst el 2 de Dic. de 2018
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 comentarios

Anna Nazarova
Anna Nazarova el 3 de Dic. de 2018
Thanks everyone, it works!
Anna Nazarova
Anna Nazarova el 8 de Dic. de 2018
Editada: Image Analyst el 9 de Dic. de 2018
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.
Anna Nazarova
Anna Nazarova el 9 de Dic. de 2018
Can you please send full code?
Image Analyst
Image Analyst el 9 de Dic. de 2018
Yes, you can find it here

Iniciar sesión para comentar.

Etiquetas

Preguntada:

el 2 de Dic. de 2018

Comentada:

el 9 de Dic. de 2018

Community Treasure Hunt

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

Start Hunting!

Translated by