【发布时间】:2023-11-22 10:50:01
【问题描述】:
我正在尝试了解如何正确处理 PNM 格式中的 RGB 值,以便不可避免地将它们转换为灰度。
研究主题,如果 RGB 值是非线性的,那么我需要先将它们转换为线性 RGB 颜色空间,应用我的权重,然后再将它们转换回相同的非线性颜色空间。
似乎有一个预期的格式http://netpbm.sourceforge.net/doc/ppm.html:
在栅格中,样本值是“非线性的”。它们与像素中 ITU-R Recommendation BT.709 红色、绿色和蓝色的强度成正比,并由 BT.709 伽马传递函数进行调整。
所以我认为这些值是非线性的,但不是 sRGB。我在 ImageMagick 周围发现了一些主题,它们说它们可能会将它们保存为线性 RGB 值。
PNM 指定了一个标准,但 Photoshop 或 GIMP 等各种编辑器可能会或可能不会遵循它,我是否正确?
来自http://netpbm.sourceforge.net/doc/pamrecolor.html
当您使用此选项时,输入和输出图像不是真正的 Netpbm 图像,因为 Netpbm 图像格式指定了特定的色彩空间。相反,您使用的是格式的变体,其中栅格中的样本值具有不同的含义。 许多表面上使用 Netpbm 图像的程序实际上使用具有不同颜色空间的变体。 例如,GIMP 在内部使用 sRGB,如果您让 GIMP 生成 Netpbm 图像文件,它实际上会生成格式的变体使用 sRGB。
我在其他地方看到这个http://netpbm.sourceforge.net/doc/pgm.html:
每个灰度值都是一个与灰度值成正比的数字 像素,由 ITU-R 建议 BT.709 伽马传输调整 功能。 (该传递函数指定伽马数为 2.2 和 具有小强度的线性部分)。零值是 因此是黑色。 Maxval 的值代表 CIE D65 白色,而 图像中最强烈的值以及图像所对应的任何其他图像 可以比较。
BT.709 的通道值范围 (16-240) 与 PGM 无关。
请注意,PGM 格式的一个常见变体是灰色 值是“线性的”, 即如上所述,除了没有伽马 调整。 pnmgamma 将这样的 PGM 变体作为输入并生成 真正的 PGM 作为输出。
那里的大多数来源都假设他们正在处理线性 RGB,只是应用它们的权重并保存,可能不保留亮度。我假设任何投诉渲染器都会假设这些 RGB 值是经过伽马压缩的……因此在技术上显示的灰度“颜色”与我指定的不同。它是否正确?也许换个方式问,有关系吗?我知道这是一个加载的问题,但如果我不能真正判断它是线性的还是非线性的,或者它是如何被压缩或预期被压缩的,如果我只是假设,图像处理算法(二值化)是否会受到很大影响线性 RGB 值?
【问题讨论】:
-
我 Brandon,我建议 Gamma 常见问题解答以获取有关该问题的有用背景:poynton.ca/GammaFAQ.html
-
执行此转换的源代码,基于上面引用的常见问题解答。 *.com/questions/53911662/…
标签: image-processing colors rgb color-space netpbm