How to compress 32 bit bmp images to 8 bit bmp?
18 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Amanda F
el 8 de Feb. de 2023
Comentada: Jonas
el 9 de Feb. de 2023
I have thousands of 32 bit grayscale bmp images that I want to compress to 8 bit bmp grayscale images using a script to reduce the file size and save space while maintaining the image quality. I have looked at using the "im2uint8()", "rgb2ind()", and "imwrite()" functions to try and achieve this, but I either get fully black images or, when it compresses images that maintain the image quality, they turn out to be 24 bit and not 8 bit. I have two scripts I've tried posted below this. Any ideas why it isn't compressing to 8 bit? Also, is there a reason why it only compresses to 24 bit? Thank you to any replys.
Here are a couple scripts I've tried:
im = imread(input_filename);
map = gray(256);
imwrite(im,map,output_filename);
This results in a 24 bit image.
Next:
im = imread(input_filename);
im8 = im2uint8(im);
imwrite(im8,output_filename);
This results in a completely black image.
2 comentarios
Respuesta aceptada
Jonas
el 8 de Feb. de 2023
you can stretch and compress it on your own, just as you want
im=imread('new.png');
im=rgb2gray(im);
class(im)
imshow(im);
im16=uint16(im)*2^8; % 16-8=8
imshow(im16)
im32=uint32(im)*2^24; % 32-8=24
imshow(im32)
% and similarly downwards
clearvars -except im32;
im16=uint16(im32/2^16);
imshow(im16)
im8=uint8(im16/2^8);
imshow(im8)
4 comentarios
Jonas
el 9 de Feb. de 2023
btw, your initial rgb image is not 32 bit, but already 24bit (3x8 bit). so it is already uint8, that's why you do not need those divisions described above
im=imread('RefImage6.bmp');
size(im,3)
class(im)
im=rgb2gray(im);
class(im)
Más respuestas (0)
Ver también
Categorías
Más información sobre Convert Image Type en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!