【问题标题】:Understanding NetPBM's PNM nonlinear RGB color space for converting to grayscale了解 NetPBM 的 PNM 非线性 RGB 颜色空间以转换为灰度
【发布时间】: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 值?

【问题讨论】:

标签: image-processing colors rgb color-space netpbm


【解决方案1】:

只有一种将颜色信号转换为灰度的好方法:进入线性空间并添加光(以及颜色强度)。通过这种方式,您可以获得有效光,因此您可以计算亮度。然后您可以“伽玛”校正该值。这就是光的行为方式(线性空间),以及 CIE 测量亮度的方式(按波长)。

在电视上,标准的做法是从非线性 R、G、B 构建亮度然后是黑白图像)。这样做是因为简单和模拟彩色电视(NTSC 和 PAL)的工作方式:黑白信号(用于 BW 电视)作为主要信号,然后将颜色(作为副载波)添加到 BW 图像。因此,计算是在非线性空间中完成的。

视频可以经常使用这些因素(在非线性空间上),因为它的计算速度非常快,而且您可以使用整数轻松完成(有特殊的矩阵可用于整数)。

对于边缘检测算法,您使用哪种方法并不重要:我们很难检测具有相似 L 或 Y' 的边缘,因此我们不在乎计算机是否有类似问题。

注意:我们的眼睛在检测光强度时是非线性的,并且与我们旧电视上的荧光粉具有相似的伽马。出于这个原因,使用伽马校正值很有用:它以最佳方式压缩信息(或在“模拟电视”过去:它减少感知噪声)。

因此,如果您想要 Y',请使用非线性 R'、G'、B'。但是如果你需要真正的灰度,你需要计算真正的灰度去线性空间。 您可能会看到差异,尤其是在中灰色、紫色或黄色上,其中 R、G、B 中的两个几乎相同(并且是三个之间的最大值)。

但是在摄影程序中,有许多不同的算法可以将 RGB 转换为灰度:我们看不到灰度的世界,所以不同的权重(可能是非线性的)可以帮助识别图像的某些部分,它是灰度照片的目的(通过去除分散注意力的颜色)。

注意 Rec.709 从未指定要应用的伽马校正(标准上的 OETF 没有用,我们需要 EOTF,并且出于实际原因,通常其中一个不是另一个的倒数)。只有在连续的建议下,才最终提供了这些缺失的信息。但是因为很多人说Rec.709,所以用OETF的倒数作为gamma,这是不正确的。

如何检测:蓝天上的经典黄色太阳,选择具有相同L的黄色和蓝色。如果您在灰色图像中看到太阳,您正在与非线性空间进行变换(Y'不相等)。如果你看不到太阳,你就会线性变换。

【讨论】:

  • 感谢您的回复。我曾想象需要在线性空间中完成所有工作,感谢您确认。我的主要问题是关于 PNM 格式以及解释它的最佳方式。例如,似乎每个人都在使用规范的变体。最常见的是什么? Photoshop 在做什么,Gimp 在做什么,ImageMagick 在做什么?它们是否如此不同以至于应该完全避免 PNM?你是说伽玛也可能是可变的。 PNM 无法捕捉到这一点。如何解读这些图像?
  • 每个人的做法都不一样。注意:通常程序有不同的“工作空间”(例如 PhotoRGB 或更大的空间)。 BTW Darktables(我认为是 Photoshop)使用浮点(半精度或单精度)。可以肯定的是,他们每通道每像素使用 16 位或 32 位。但是对于某些效果,您需要是线性的(尤其是添加光线和构图),对于其他一些效果,伽马校正更好。 Photoshop 和公司需要好的算法来快速完成任务。这是首要选择:算法。然后是色彩空间。
  • 嗨@GiacomoCatenazzi — Rec709 的逆 OETF 对于图像处理的目的并不正确,实际上它更适合进出 Rec709 空间到线性空间。仅对 display 假设 OETF 的倒数是不正确的,因为假设显示具有 1.2 伽马增益。显示规范在 Rec1886 中定义,包括假设的伽马增益,因此不适合展开到线性空间以进行图像处理。 Rec1886 是一个简单的 2.4 伽马显示,adj。由用户。对于图像处理,我们通常希望参考来源。
  • @Myndex:是的,这是一个热门话题。摄像机和电视演播室会更改设置(黑点、高光),因此它们也从不使用 OETF。现在我们将“log”/“ungraded”/“raw”信号 + 后处理,OEFT 只是理论上的。然后在数据流上,它可以用作“标准”,但最终评分将改变一切。因此,人们应该小心使用什么(并且应该知道对其他图像处理步骤的期望)。只是,一般来说,人们对 OETF 的关注过多,而不是“意图”。
  • @GiacomoCatenazzi - 是的,这就是为什么在展开到线性工作空间时使用“准确”数学很重要的原因,在回退时 - 这是标准。如果您使用 2.4 显示器(并且应该),这意味着标准 Rec709 TRC 的伽马增益约为 1.2。如果有人错误地使用 1/2.4 伽马输出(编码),那么他们实际上是在抹去预期的系统增益,并产生不可预测的结果。假设在线性系统中工作:线性 --> 应用 ~1/2.0 伽马 --> 在 2.4 显示器上显示。
【解决方案2】:

我的问题可能有些混乱,所以在我对情况进行了更深入的研究后,我想回答一下。

长话短说……似乎在保存为 PNM 格式时,没有人真正费心重新编码图像的伽玛。因此,由于几乎所有内容都是 sRGB,因此根据规范,它将保持 sRGB,而不是技术上正确的 BT.709。

我联系了 NetPBM 的 Bryan Henderson。他持有同样的信念并表示伽马压缩方法并不像知道它是否被应用那么重要,我们应该始终假设它在处理 PNM 颜色格式时被应用。 p>

要重申该观点对图像处理的影响,请阅读 “Color-to-Grayscale:Does the Method Matter in Image Recognition?”,2012 年由 Kanan 和 Cottrell 撰写。基本上,如果您计算 RGB 值的平均值,您最终会遇到以下三种情况之一:Gleam、Intensity' 或 Intensity。在比较了不同灰度转换公式的效果后,考虑到何时以及如何应用伽马校正,他发现 Gleam 和 Intensity 表现最好。它们仅在添加伽马校正时有所不同(Gleam 对输入 RGB 值进行了伽马校正,而 Intensity' 采用线性 RGB 并应用伽马后缀)。遗憾的是,当没有添加伽马校正(即强度)时,您从第 1 和第 2 位下降到第 8 位。有趣的是,它是最简单的平均公式,而不是大多数人吹捧的更流行的灰度公式之一。综上所述,如果您使用平均公式将 PNM 颜色转换为灰度图像处理应用程序,您将确保出色的性能,因为我们可以假设已经应用了一些伽马压缩。我对 ImageMagick 和线性值的评论似乎只适用于它们的 PGM 格式。

希望对你有帮助!

【讨论】: