16 BitDepth vs 24 BitDepth BMP image
Show older comments
I have some BMP images from an optical CT scan that I need to process in matlab. Using the function imfinfo I know that my image before being read by matlab is at 16 BitDepth and is transformed to a 24 BitDepth after.
Before
FileSize: 1572918
Format: 'bmp'
FormatVersion: 'Version 3 (Microsoft Windows 3.x)'
Width: 1024
Height: 768
BitDepth: 16
ColorType: 'truecolor'
FormatSignature: 'BM'
NumColormapEntries: 0
Colormap: []
RedMask: []
GreenMask: []
BlueMask: []
ImageDataOffset: 54
BitmapHeaderSize: 40
NumPlanes: 1
CompressionType: 'none'
BitmapSize: 1572864
HorzResolution: 0
VertResolution: 0
NumColorsUsed: 0
NumImportantColors: 0
After
FileSize: 2359350
Format: 'bmp'
FormatVersion: 'Version 3 (Microsoft Windows 3.x)'
Width: 1024
Height: 768
BitDepth: 24
ColorType: 'truecolor'
FormatSignature: 'BM'
NumColormapEntries: 0
Colormap: []
RedMask: []
GreenMask: []
BlueMask: []
ImageDataOffset: 54
BitmapHeaderSize: 40
NumPlanes: 1
CompressionType: 'none'
BitmapSize: 2359296
HorzResolution: 0
VertResolution: 0
NumColorsUsed: 0
NumImportantColors: 0
I need the image to be a 16 BitDepth BMP when I save it to use it in a reconstruction software. Cheers Pierre
Accepted Answer
More Answers (1)
Image Analyst
on 31 Jan 2018
0 votes
Calling imread() will NOT change the file. You must have done something to change it. How did you change the file? Did you call imwrite() or something? You must have done something.
5 Comments
Pierre Bouchereau de Pury
on 31 Jan 2018
Walter Roberson
on 31 Jan 2018
No, the change is definite imwrite() as imwrite() does not support 16 bits per pixel.
Pierre Bouchereau de Pury
on 31 Jan 2018
Image Analyst
on 31 Jan 2018
Use imwrite() but just use another format. From the help:
"If A is of data type uint16 and the output file format supports 16-bit data (JPEG, PNG, and TIFF), then imwrite outputs 16-bit values. If the output file format does not support 16-bit data, then imwrite returns an error."
So, a PNG would be the one I'd pick. Actually from the last sentence, I'm surprised imwrite() didn't throw and error when you tried to write the 16 bit variable to a BMP image.
Walter Roberson
on 31 Jan 2018
Single plane uint16 would be for grayscale (unless the target package can mathematically manipulate the 16 bits to extract the 4-bit components.) BMP with 16 bits are RGBA 4-4-4-4
Categories
Find more on Images in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!