我试图了解如何正确使用 PNM 格式中的 RGB 值,以便不可避免地将它们转换为灰度。
研究这个主题,如果 RGB 值是非线性的,那么我需要首先将它们转换为线性 RGB 颜色空间,应用我的权重,然后将它们转换回相同的非线性颜色空间。
似乎有一个预期的格式http://netpbm.sourceforge.net/doc/ppm.html:
在栅格中,样本值是“非线性的”。它们与像素中的ITU-R 建议 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值?