我正在尝试编写一个采用JPEG图像并返回其PGM(便携式灰度图)版本的转换器算法。问题是我无法理解从传统RGB格式开始,“官方” JPG-> PGM转换器如何将值分配给最终像素(我猜是0-> 255)。
一开始,我使用了以下公式(与OpenCV的CV_RGB2GRAY转换所使用的公式相同):
0.30 * R + 0.59 * G + 0.11 * B =瓦尔
我编写了一个简单的代码来测试我的结果:它获取彩色图像及其PGM版本(已经使用GIMP进行了转换)。然后,它使用先前的公式转换彩色图像。目的是要获得一个像素到像素等于PGM输入的灰度图像。
此时,它不会返回相同的值。你能帮助我吗?
问题是我无法理解从传统RGB格式开始,“官方” JPG-> PGM转换器如何将值分配给最终像素(我猜是0-> 255)。
这些“官方”工具正在使用的转换中可能会有伽马调整。 也就是说, 它不仅是线性变换。
有关详细信息,请参见此Wikipedia部分: 将颜色转换为灰度
我相信您想将公式用于。尝试一下,看看它是否符合您期望的结果。Csrgb
Csrgb
基本上,您将执行以下操作:
R, G, B
[0,1]
0..255
255.0
Clinear = 0.2126 R + 0.7152 G + 0.0722 B
Csrgb``Clinear
Csrgb = 12.92 Clinear
Clinear <= 0.0031308
Csrgb = 1.055 Clinear1/2.4 - 0.055
Clinear > 0.0031308