Borrar filtros
Borrar filtros

How do these image bit conversions work??

2 visualizaciones (últimos 30 días)
Nick
Nick el 7 de Nov. de 2017
Comentada: Nick el 7 de Nov. de 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...

Respuesta aceptada

Walter Roberson
Walter Roberson el 7 de Nov. de 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 comentario
Nick
Nick el 7 de Nov. de 2017
Oh thats right, I was multiplying things by 256 and wondering why everything was off.

Iniciar sesión para comentar.

Más respuestas (0)

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by