im2uint8 only generates 0 or 255

4 views (last 30 days)
I am trying to present an image of class double using imshow.
suppose this is the image:
a = [78.4630409671845,90,0;
78.4630409671845,36.8698976458440,62.5135737496187;
0,0,0]
now when I try to convert it to uint8 in order to show it, this is what I get:
b = im2uint8(a) = [255,255,0;
255,255,255;
0,0,0]
but I expect something like this:
b = [78,90,0;
78,37,63;
0,0,0]
so the imshow command shows a weird black an white image:
imshow(a);
imshow(a,[]);
imshow(b);
imshow(b,[]);
How can I properly present a double image?

Accepted Answer

Jan
Jan on 10 Feb 2021
Edited: Jan on 10 Feb 2021
im2uint8 expects the input to be an RGB image, which is a 3D array with values from 0 to 1. So normalize your data at first by dividing by 255:
a = [78.4630409671845,90,0;
78.4630409671845,36.8698976458440,62.5135737496187;
0,0,0]
im2uint8(a / 255)
  2 Comments
Steven Lord
Steven Lord on 11 Feb 2021
Or even more simply, just call uint8 on it.
a = [78.4630409671845,90,0;
78.4630409671845,36.8698976458440,62.5135737496187;
0,0,0];
aJan = im2uint8(a / 255)
aJan = 3×3
78 90 0 78 37 63 0 0 0
aSteve = uint8(a)
aSteve = 3×3
78 90 0 78 37 63 0 0 0

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!