灰度图像的BMP格式是什么?

15
什么是BMP格式的灰度图像(特别是每像素16位)?wikipedia只讨论了bmp的彩色图像。
更新: 仅供更新和未来访问者参考,我选择使用PGM,因为它是无压缩的并且支持16位灰度。另一个选项是使用PNG,但它会压缩数据(这不是我想要的),如here所讨论的那样。 还请注意,由于大多数显示器只支持256种颜色而不是4096种颜色,因此图像可能会出现失真。因此,图像将饱和。 然而令人惊讶的是,在16位灰度图像方面,BMP几乎是无能为力的。 感谢帮助我理解问题的人们。

如果您想要16位灰度图像,需要使用不同的格式 - 我建议使用PNG。 - Paul R
它是无损压缩吗? - gpuguy
是的,PNG是无损的 - 它使用zlib进行压缩:https://en.wikipedia.org/wiki/Portable_Network_Graphics - Paul R
这篇帖子已经七年了,但PNG压缩是无损的并使用zlib。可以指定zlib使用压缩级别0,这意味着根本没有压缩。因此,您可能拥有非压缩的PNG文件。 - Robert Nowak
请注意,完整的16位是65536种颜色,而不是4096种。也许你想到的是12位? - Mark Ransom
4个回答

4
对于灰度图像,我建议使用8位BMP格式。8位BMP可以使用调色板对颜色进行编码。但是,如果您不使用调色板,则可以将颜色值 [0...255] 简单地解释为从黑色(0)到白色(255)的颜色。 编辑: 对于16位灰度图像,我不会使用BMP格式。从技术上讲,您可以使用每像素16位的BMP格式来编码16位灰度数据(http://en.wikipedia.org/wiki/BMP_file_format#Pixel_format)。然而,在实践中,这是一个糟糕的想法(读作:hacky),因为该深度被设计用于编码像素的α、红、绿和蓝样本。
更好的格式来存储每像素16位灰度数据是PNG格式。
此外,请问您真的需要那么高的精度吗?对于大多数应用程序,每像素8位就足够了(=如果您没有任何特定的精度要求,这将是情况)。

这对他的 16 位灰度图像并没有什么帮助。 - trumpetlicks
1
完全同意您对BMP的评估,因为这不仅需要自定义文件编写器,还需要自定义文件阅读器。标准的BMP阅读器会将他试图实现的灰度解释为其他颜色,输出结果将会(至少可以说)很有趣。+1 - trumpetlicks

3

你说得对,BMP只知道颜色。解决方法是创建一个256个条目的调色板,每个条目的R,G,B值都相同:第一个条目(0,0,0),第二个条目(1,1,1)等等。现在使用调色板将图像设为每像素8位。

编辑:鉴于您对16位灰度的新要求,我认为您有两个选择:转换为8位或使用不同于BMP的其他格式。如果您将其转换为8位,可以使用抖动使结果与您的源16位图像在视觉上无法区分。


@trumpetlicks,问题在提出时没有提到16位。 - Mark Ransom
抱歉,没有注意到那是一个更新 :-) 除此之外,回答很好! - trumpetlicks

2
似乎TIFF和PNG本身支持16位灰度。

http://en.wikipedia.org/wiki/Grayscale

我假设您希望保存的这些图像不仅仅是为了显示,而是需要进行某种后期处理,需要更高的精度?如果不是这样,那么我建议删除最不重要的8个位,然后存储一个简单的8位位图,使用颜色映射将每个值映射到一个RGB值,即 值 -> (值, 值, 值) 的RGB映射。

0
什么是灰度图像的BMP格式?
除了使用调色板外,您可以通过编写带有BITMAPV4HEADER的BMP并将bV4RedMaskbV4GreenMaskbV4BlueMask设置为相同值来创建灰度BMP(每像素8位)。但是,这种格式的最小bcBitCount值为16,因此每个像素仍然需要占用两个字节。您可以使用第二个字节作为alpha通道(透明度)。
特别是对于每像素16位的情况
似乎没有任何BMP版本支持16位颜色深度。即使文件格式似乎允许它(bcBitCount=16bV4…Mask=0xFFFF),图像编辑器和库也会丢弃额外的位。

某些文件提到了64-BPP BMP文件,然而不清楚如何与BITMAPV4HEADER字段匹配,因为遮罩字段都是32位大小的(因此无法为64 BPP指定通道遮罩)。

另一个选择是使用PNG,但它会压缩数据(这不是我想要的),在这里讨论过。

如果您不想压缩PNG文件,可以使用压缩级别0将像素放置在原样(加上zlib头/尾)。

还要注意,由于大多数显示器支持256种颜色而不是16位的4096种颜色,因此图像可能会出现扭曲。

16位深度将允许每个通道具有65536个不同的亮度值,而不是4096。扭曲听起来是伽马曲线的问题,与文件格式问题并没有真正的关系。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接