How do these image bit conversions work??

1 Ansicht (letzte 30 Tage)
Nick
Nick am 7 Nov. 2017
Kommentiert: Nick am 7 Nov. 2017
So this is a basic question on image conversion algorithms.
If I load an image.
img = imread('peppers.png');
img = rgb2gray(img);
and then convert it back forth from 8 bit to 16 bit several times;
img = im2uint16(img);
img =im2uint8(img);
for like 10 times or so. The final resulting image seems exactly the same. That seems a bit odd to me, shouldn't there be some rounding errors when converting from 16-bit to 8-bit? That information should have been lost right? And shouldn't each iteration of this conversion amplify the error?
I am using MATLAB 2017b so its entirely possible that older versions of matlab may not do this...

Akzeptierte Antwort

Walter Roberson
Walter Roberson am 7 Nov. 2017
im2uint16() notices that the input is uint8, and multiplies the input by a constant number to get the 16 bit version. The number it multiplies by is 257. This is the same thing as duplicating the bytes -- for example byte 0xD8 gets changed to 0xD8D8
im2uint8() applied to a uint16 image works by just dropping the last byte.
You can see that a cycle of these involves duplicating bytes and dropping them, which is going to leave you with the original bytes.
  1 Kommentar
Nick
Nick am 7 Nov. 2017
Oh thats right, I was multiplying things by 256 and wondering why everything was off.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Convert Image Type finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by