“标准” RGB到灰度转换
我正在尝试编写一个采用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
基本上,您将执行以下操作:
- 取
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
以上是 “标准” RGB到灰度转换 的全部内容, 来源链接: utcz.com/qa/398701.html