Sepideh Abadpour
Sepideh Abadpour

Reputation: 2598

What does uint8 function do?

I'm trying to show the negative of an image and as you know it has a very simple code.
This is the original image:
enter image description here
When I use the code:

Out = 255-img;
%Out = uint8(OutNeg);
imshow(Out);  

The result will be:
enter image description here

But using the code:

OutNeg = 255-img;
Out = uint8(OutNeg);
imshow(Out);  

Will make the right answer:
enter image description here
Now I am wondering

1 - what does the function uint8() does in fact?
2 - Do these codes make the same results? In fact what is the usage of uint8?

Code1:

img2 = uint8(img1);  
imshow(img2); 

Code2:

imshow(img1,[0 255]);  

3 - Do I need to normalize the image before showing it with the following code?

img2 = 255/(max(max(img1))-min(min(img1)))*(img1-min(min(img1)));  

Or using uint8 or [0 255] does the same thing and no need to normalize??

4- what is the difference between normalizing, using uint8 and using [0 255]??????

please consider transformations like Log and power-low in your answers.

Upvotes: 2

Views: 2077

Answers (1)

chappjc
chappjc

Reputation: 30589

From help imshow:

If your grayscale image is single or double, the default display range is
[0 1]. If your image's data range is much larger or smaller than the default
display range, you may need to experiment with setting the display range to
see features in the image that would not be visible using the default
display range. For all grayscale images having integer types, the default
display range is [intmin(class(I)) intmax(class(I))].

By making your data an 8-bit unsigned integer (uint8) array, the data is expected by imshow to be on [0 255]. RTM.

Upvotes: 3

Related Questions