小编典典

“标准” RGB到灰度转换

algorithm

我正在尝试编写一个采用JPEG图像并返回其PGM(便携式灰度图)版本的转换器算法。问题是我无法理解从传统RGB格式开始,“官方” JPG->
PGM转换器如何将值分配给最终像素(我猜是0-> 255)。

一开始,我使用了以下公式(与OpenCV的CV_RGB2GRAY转换所使用的公式相同):

0.30 * R + 0.59 * G + 0.11 * B =瓦尔

我编写了一个简单的代码来测试我的结果:它获取彩色图像及其PGM版本(已经使用GIMP进行了转换)。然后,它使用先前的公式转换彩色图像。目的是要获得一个像素到像素等于PGM输入的灰度图像。

此时,它不会返回相同的值。你能帮助我吗?


阅读 434

收藏
2020-07-28

共1个答案

小编典典

问题是我无法理解从传统RGB格式开始,“官方” JPG-> PGM转换器如何将值分配给最终像素(我猜是0-> 255)。

这些“官方”工具正在使用的转换中可能会有伽马调整。
也就是说, 它不仅是线性变换。

有关详细信息,请参见此Wikipedia部分:
将颜色转换为灰度

我相信您想将公式用于。尝试一下,看看它是否符合您期望的结果。Csrgb

基本上,您将执行以下操作:

  1. R, G, B的颜色(在每个[0,1]范围)
    • 如果它们在范围内0..255,只需除以255.0
  2. 计算 Clinear = 0.2126 R + 0.7152 G + 0.0722 B
    • 这可能是您之前应用的线性变换
  3. 计算根据它的公式,根据Csrgb``Clinear
    • 这是您丢失的 非线性 伽玛校正片
    • 看看 这个WolframAlpha图
    • Csrgb = 12.92 Clinear 什么时候 Clinear <= 0.0031308
    • Csrgb = 1.055 Clinear1/2.4 - 0.055 什么时候 Clinear > 0.0031308
2020-07-28