将RGB转换为sRGB?
Posted
技术标签:
【中文标题】将RGB转换为sRGB?【英文标题】:Convert RGB to sRGB? 【发布时间】:2016-06-27 10:14:44 【问题描述】:我正在尝试将 RGB 转换为感知统一的色彩空间 CIELAB。***指出:
"RGB 或 CMYK 值首先必须转换为特定的 绝对色彩空间,例如 sRGB 或 Adobe RGB。本次调整将 依赖于设备,但转换的结果数据将是 独立于设备,允许将数据转换为 CIE 1931 颜色空间,然后转化为 L*a * b*。”
我知道转换为 sRGB 后有一些直接的转换,但我还没有找到任何从 RGB 转换为 sRGB 的材料。那么,有哪些方法可以进行这种转换呢?
【问题讨论】:
请阅读 sRGB 规范。它解释了如何计算 sRGB 值。 w3.org/Graphics/Color/srgb 此外,这可能会有所帮助:brucelindbloom.com/index.html?Eqn_RGB_XYZ_Matrix.html 【参考方案1】:不,您不应该从(线性)RGB 转到 sRGB。事实上,情况恰恰相反。步骤如下:
将 sRGB 转换为线性 RGB。 sRGB 图像是伽马编码的,这意味着相机将伽马函数 pow(x, 1/2.2) 应用于光信号。此 sRGB 位于非线性的伽马空间中。
现在,将线性 RGB 转换为 LAB 涉及两个步骤:首先是将线性 RGB 转换为 XYZ 色彩空间(这是基本色彩空间)。这种转换是线性运算,即矩阵乘法。这就是您需要线性 RGB 值而不是 sRGB 的原因。它需要在线性空间中。最后,XYZ 值通过包含一些标准公式(您无需担心)的非线性运算转换为 LAB 值。
有趣的链接:
(i) 了解 sRGB 和线性 RGB 空间:http://filmicgames.com/archives/299; http://www.cambridgeincolour.com/tutorials/gamma-correction.htm
(ii) MATLAB 教程:https://de.mathworks.com/help/vision/ref/colorspaceconversion.html
(iii) Python 包:http://pydoc.net/Python/pwkit/0.2.1/pwkit.colormaps/
(iv) C 代码:http://svn.int64.org/viewvc/int64/colors/color.c?view=markup
(v) OpenCV 不会将 sRGB 转换为线性 RGB,但会在 color.cpp 代码 (OpenCV_DIR\modules\imgproc\src\color.cpp) 中进行转换。查看名为 initLabTabs() 的方法,有一个 gamma 编码和解码。 OpenCV颜色转换API:http://docs.opencv.org/3.1.0/de/d25/imgproc_color_conversions.html
【讨论】:
谢谢@Sanchit!很高兴终于了解这些色彩空间是如何工作的。 真的感谢深思熟虑的答案和有趣的链接——尤其是链接。 ? 对于其他处理 SVG 滤镜效果中色彩空间问题的人,这解释了为什么需要添加color-interpolation-filters="sRGB"
。否则过滤器默认为linearRGB
。伽马信息的丢失导致图像看起来褪色。要解决此问题,请更新滤镜的色彩空间。
@TannerHodges:欢迎您 :) 很高兴您喜欢我的回答。以上是关于将RGB转换为sRGB?的主要内容,如果未能解决你的问题,请参考以下文章
imagemagick 将 RGB PNG 转换为 CMYK PDF
Java Swing JColorChooser 颜色 RGB 到 sRGB