PGM 转换器如何从经典 RGB 格式开始分配给最终像素(我猜是 0-6ren">
gpt4 book ai didi

image - "Standard"RGB转灰度

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:22:10 25 4
gpt4 key购买 nike

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

一开始我用的是这个公式(OpenCV的CV_RGB2GRAY转换也是用的这个公式):

0.30*R + 0.59*G + 0.11*B = 值

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

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

最佳答案

The problem is that I can't understand how the "official" JPG->PGM convertitors work in terms of what value to assign to the final pixel (i guess, 0->255) starting from the classic RGB format.

那些“官方”工具正在使用的转换中可能存在 Gamma 调整。
也就是说,它不仅仅是线性变换。

有关详细信息,请参阅此维基百科部分:Converting color to grayscale

我相信您想使用 C<sub>srgb</sub> 的公式.
尝试一下,看看它是否与您期望的结果相符。

基本上,你会这样做:

  1. R, G, B颜色(每个都在 [0,1] 范围内)
    • 如果它们在 0..255 范围内相反,只需除以 255.0
  2. 计算 C<sub>linear</sub> = 0.2126 R + 0.7152 G + 0.0722 B
    • 这可能是您之前应用的线性变换
  3. 计算 C<sub>srgb</sub>根据它的公式,基于 C<sub>linear</sub>
    • 这是您丢失的非线性 Gamma 校正片
    • 查看 this WolframAlpha plot
    • C<sub>srgb</sub> = 12.92 C<sub>linear</sub>什么时候C<sub>linear</sub> <= 0.0031308
    • C<sub>srgb</sub> = 1.055 C<sub>linear</sub><sup>1/2.4</sup> - 0.055什么时候C<sub>linear</sub> > 0.0031308

关于image - "Standard"RGB转灰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17615963/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com