我正在尝试编写一个转换器算法,该算法采用 JPEG 图像并返回其 PGM(便携式灰度图)版本。
问题是我无法理解“官方”JPG->PGM 转换器如何从经典 RGB 格式开始为最终像素分配什么值(我猜是 0->255)。
一开始,我使用了这个公式(与OpenCV的CV_RGB2GRAY转换使用的相同):
0.30*R + 0.59*G + 0.11*B = 值
我编写了一个简单的代码来测试我的结果:它采用彩色图像及其 PGM 版本(已使用 GIMP 转换)。然后它使用前面的公式转换彩色图像。目标是获得像素到像素等于 PGM 输入的灰度图像。
此时,它不会返回相同的值。你能帮助我吗?
问题是我无法理解“官方”JPG->PGM 转换器如何从经典 RGB 格式开始为最终像素分配什么值(我猜是 0->255)。
这些“官方”工具使用的转换可能会进行伽玛调整。
那是,它不仅仅是一个线性变换。
有关详细信息,请参阅维基百科部分:将颜色转换为灰度 http://en.wikipedia.org/wiki/Grayscale#Converting_color_to_grayscale
I believe you want to use the formula for Csrgb
.
Try it out and see if it matches the results you're expecting.
基本上,你会这样做:
- Take
R, G, B
color (each in [0,1]
range)
- 如果它们在范围内
0..255
相反,只需除以255.0
- Compute
Clinear = 0.2126 R + 0.7152 G + 0.0722 B
- Compute
Csrgb
according to it's formula, based on Clinear
- 这是非线性你缺少的伽玛校正件
- 查看这个 WolframAlpha 图 http://www.wolframalpha.com/input/?i=graph+1.055%2aC%5E%281%2F2.4%29+-+0.055%2C+0+%3C%3D+C+%3C%3D+1
-
Csrgb = 12.92 Clinear
when Clinear <= 0.0031308
-
Csrgb = 1.055 Clinear1/2.4 - 0.055
when Clinear > 0.0031308
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)