了解NetPBM的PNM非线性RGB色彩空间,用于转换为灰度



我试图了解如何与PNM格式中的RGB值正确合作以不可避免地将其转换为灰度。

研究主题,看来,如果RGB值是非线性的,那么我需要首先将它们转换为线性RGB颜色空间,施加我的权重,然后将它们转换回相同的非线性颜色空间。p>似乎有一种预期的格式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图像实际上使用具有不同颜色空间的变体。使用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变体,例如输入并产生A true PGM作为输出。

大多数来源都认为他们正在处理线性RGB,只能施加权重并节省,可能无法保留亮度。我认为任何投诉渲染器都会假设这些RGB值被压缩了……因此从技术上讲,它们显示出与我指定的不同的灰度"颜色"。它是否正确?也许以不同的方式问它,重要吗?我知道这是一个加载的问题,但是如果我无法真正判断它是线性还是非线性,或者是如何压缩或期望压缩的,那么图像处理算法(二进制(将会受到极大的影响,如果我只是假设线性RGB值?

可能对我的问题有些困惑,所以我现在想回答,因为我已经进一步研究了情况。

长话短说...看起来像在保存到PNM格式时,没有人真正打扰图像的伽玛。因此,由于几乎所有内容都是SRGB,因此它将保持SRGB,而不是技术上正确的BT.709,根据规格

我与NetPBM的Bryan Henderson接触。他持有相同的信念,并指出伽马压缩方法不像知道是否应用于应用那样重要,我们应该始终假设使用PNM颜色格式时将其应用于。p>要重申该意见对图像处理的效果,请阅读"颜色到格雷斯卡:图像识别中的方法重要?",2012年,Kanan和Cottrell 。基本上,如果您计算RGB值的平均值,则最终将在三种情况之一中出现:闪光,强度或强度。在比较了不同灰度转换公式的影响之后,考虑到何时以及如何应用伽玛校正之后,他发现了表现最好的人的闪闪发光和强度。它们只有在添加伽马校正的情况下而有所不同(GLEAM在输入RGB值上具有伽马校正,而强度为线性RGB并应用了Gamma后单词(。可悲的是,当不添加伽玛校正(又称强度(时,您从第一和第二名降至第8位。有趣的是,正是简单的平均公式可以发挥最佳作用,而不是大多数人吹捧的最受欢迎的灰度公式之一。所有这些都可以说,如果您使用平均公式将PNM颜色转换为灰度以进行图像处理应用程序,则您将确保出色的性能,因为我们可以假设将应用一些伽马压缩。我对ImageMagick和线性值的评论似乎仅适用于其PGM格式。

我希望有帮助!

只有一种方法可以将颜色信号转换为Greyscale:转到线性空间并添加灯光(和(因此颜色强度(。通过这种方式,您有有效的光,因此您可以计算出亮度。然后,您可以"伽玛"更正该值。这是光的表现方式(线性空间(,以及如何通过cie(通过波长(测量亮度。

在电视上是从非线性R,g,b构建Luma,然后是黑白图像的标准配置。之所以这样做,是因为简单性和模拟彩色电视(NTSC和PAL(的工作方式:黑白信号(用于BW电视(作为主要信号,然后将颜色(作为子载波(添加到BW图像中。因此,计算是在非线性空间中完成的。

视频经常使用此类因素(在非线性空间上(,因为它可以很快计算,并且您可以轻松地使用整数(与整数一起使用特殊的矩阵(。

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

注意:我们的眼睛在检测光强度的情况下是非线性的,并且在旧电视上具有与磷光相似的伽玛。因此,使用伽马校正值使用的原因很有用:它以最佳方式压缩信息(或在"模拟-tv"过去:它减少感知的噪声(。

所以,如果您想要y',请与非线性R',g',b'一起做。但是,如果您需要真正的灰度,则需要计算到线性空间的真实灰度。您可能会看到差异,尤其是在中间绿色和紫色或黄色上,其中r,g,b的两个几乎相同(这是三个之间的最大值(。

但是,在摄影节目中,有许多不同的算法可以将RGB转换为灰度:我们看不到灰刻的世界,因此不同的重量(可能是非线性(可以帮助您弄清楚图像的某些部分,这是这是它的一部分灰度照片的目的(通过删除分心的颜色(。

Note Rec.709从未指定应用伽马校正(标准上的OETF无用,我们需要EOTF,并且出于实际原因,通常不是另一个是另一个的倒数(。只有在连续的建议下,最终提供了这些丢失的信息。但是,由于许多人谈论rec.709,因此OETF的倒数用作伽马,这是不正确的。

如何检测:蓝天上的古典黄色太阳,选择黄色和蓝色。如果您看不到太阳,则线性转换。

最新更新