RGB 转换为 XYZ 和 LAB空间:convert between sRGB and CIEXYZ, 色域色彩相关

这篇具有很好参考价值的文章主要介绍了RGB 转换为 XYZ 和 LAB空间:convert between sRGB and CIEXYZ, 色域色彩相关。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

转载自
How to convert between sRGB and CIEXYZ

How to convert between sRGB and CIEXYZ

Technote 09 Aug 2017

sRGB 是常见的一个图像标准
cie xyz 是评估人眼视觉 常用的一个标准

1. sRGB

The “s” in sRGB stands for “standard” and it is the lowest common denominator in color spaces. It was developed in the 1990s to provide a universal usable color space for display and printers of the time. While there are many different and larger color spaces available, sRGB is still the de facto standard for RGB image data.

2. CIE-XYZ

CIE (Commission Internationale de l’Éclairage) stands for the International Commission on Illumination, which established color spaces based on colors that can be perceived by the human eye. XYZ does not incorporate negative numbers and instead uses tristimulus values to define the color space that can be seen by the human eye. X represents the linear combination of the cone response non-negative curves created. Y represents luminance and Z is defined as almost equal to blue.

3. How to Convert

两者之前如何转换很多人不太清楚。
首先 sRGB 转换为 XYZ, 需要首先对 sRGB 反gamma处理变为 linear sRGB,
在通过矩阵转换 变为 XYZ。

XYZ 转换为sRGB则是相反的操作: 首先通过矩阵转换将 XYZ变为linear sRGB, 然后 gamma处理 得到sRGB.

3.1 sRGB to XYZ

a. sRGB to Linear RGB
可以利用下面的公式转换,也可以直接用 2.2的gamma近似

图像rgb转cie-lab实现,图像处理算法,计算机视觉

b. sRGB’ to XYZ - apply transformation matrix

A standardized 3x3 matrix describes how to convert from sRGB’ data to CIE-XYZ data.

图像rgb转cie-lab实现,图像处理算法,计算机视觉

As a quick reminder for those who implement with a tool that does not support matrix calculation easily (e.g. MS-Excel), the calculation of Y as a single equation is here.

图像rgb转cie-lab实现,图像处理算法,计算机视觉

Side note: When we say that Y represents the brightness, we see that green contributes the most and that blue has only a minor effect.

One more Side note: In case you compare your results with the results you get from tools that use an ICC profile (e.g. apply form in Mathworks Matlab) please note: the conversion shown here results into CIE-XYZ data with a reference white point of D65, as defined in the sRGB definition. ICC-Profiles always use D50 as reference white, which you should be aware of when calculating from XYZ to LAB or are comparing to these results.

3.2 XYZ to sRGB

是一个相反的过程,首先乘上一个矩阵,转化为 linear RGB
然后 apply gamma, 得到sRGB
图像rgb转cie-lab实现,图像处理算法,计算机视觉

4. 参考

1 Calculating RGB↔XYZ matrix (https://mina86.com/2019/srgb-xyz-matrix/)
2 Imatest 測CCM係數的方法: https://www.twblogs.net/a/5b8d00542b7177188338e917
3 CIE Color Calculator :http://www.brucelindbloom.com/index.html?ColorCalculator.html
4. COLOR: DETERMINING A FORWARD MATRIX FOR YOUR CAMERA:(https://www.strollswithmydog.com/determining-forward-color-matrix/)
5. Color conversion matrices in digital cameras: a tutorial :(https://www.spiedigitallibrary.org/journals/optical-engineering/volume-59/issue-11/110801/Color-conversion-matrices-in-digital-cameras-a-tutorial/10.1117/1.OE.59.11.110801.full?SSO=1)
6. LINEAR COLOR: APPLYING THE FORWARD MATRIX : (https://www.strollswithmydog.com/apply-forward-color-matrix/)

5. 用五种方法来实现 sRGB 到 lab的转换

图像rgb转cie-lab实现,图像处理算法,计算机视觉

import cv2
import numpy as np
from skimage import color
import colour


Xn = 0.950456
Yn = 1.0
Zn = 1.088754

def RGB2XYZ(r, g, b):
    x = 0.412453 * r + 0.357580 * g + 0.180423 * b
    y = 0.212671 * r + 0.715160 * g + 0.072169 * b
    z = 0.019334 * r + 0.119193 * g + 0.950227 * b
    return x, y, z
def f(v):
    if v >0.008856:
        return v**(1/3)
    else:
        return 1 / 3 * v * (29/6)**2  + 4 / 29
def XYZ2Lab(x, y, z):
    x /= Xn
    y /= Yn
    z /= Zn

    l = 116.0 * f(y) - 16.0
    a = 500 * (f(x)-f(y))
    b = 200.0 * (f(y) - f(z))
    return [round(l, 2), round(a, 2), round(b, 2)]


def RGB2Lab(r, g, b):
    x, y, z = RGB2XYZ(r, g, b)
    return XYZ2Lab(x, y, z)

if __name__ == "__main__":
    np.random.seed(0)
    im = np.random.randint(0, 255, (4, 4, 3))
    # 0. 归一化到 0-1 float32
    im1 = im / 255
    im1 = im1.astype(np.float32)
	# 1. opencv
    im1_lab = cv2.cvtColor(im1, cv2.COLOR_RGB2LAB)
    # 2. skimage.color
    im1_lab2 = color.rgb2lab(im1)
	# 3. colour science (完整的三个步骤, degamma, linearRGB to xyz, xyz to lab)
    im1_rgb = colour.cctf_decoding(im1)
    #im1_rgb = im1 ** 2.2
    im1_xyz = colour.sRGB_to_XYZ(im1_rgb, apply_cctf_decoding=False)
    im1_lab3 = colour.XYZ_to_Lab(im1_xyz)
	# 4. colour science (sRGB to xyz, xyz to lab)
    im1_xyz = colour.sRGB_to_XYZ(im1, apply_cctf_decoding=True)
    im1_lab4 = colour.XYZ_to_Lab(im1_xyz)
	
	# 5. 自己的一个实现,更好的理解具体的步骤
    im1_lab5 = []
    for i in range(4):
        for j in range(4):
            im1_lab5.append(RGB2Lab(im1_rgb[i,j,0], im1_rgb[i,j,1], im1_rgb[i,j,2]))
    im1_lab5 = np.array(im1_lab5).reshape(4,4,3)

    im1_l, im1_a, im1_b = cv2.split(im1_lab)
    im1_l2, im1_a2, im1_b2 = cv2.split(im1_lab2)
    im1_l3, im1_a3, im1_b3 = cv2.split(im1_lab3)
    im1_l4, im1_a4, im1_b4 = cv2.split(im1_lab4)
    im1_l5, im1_a5, im1_b5 = cv2.split(im1_lab5)
    print(im1_l.min(), im1_l.max(), im1_a.min(), im1_a.max(), im1_b.min(), im1_b.max())
    print(im1_l2.min(), im1_l2.max(), im1_a2.min(), im1_a2.max(), im1_b2.min(), im1_b2.max())
    print(im1_l3.min(), im1_l3.max(), im1_a3.min(), im1_a3.max(), im1_b3.min(), im1_b3.max())
    print(im1_l4.min(), im1_l4.max(), im1_a4.min(), im1_a4.max(), im1_b4.min(), im1_b4.max())
    print(im1_l5.min(), im1_l5.max(), im1_a5.min(), im1_a5.max(), im1_b5.min(), im1_b5.max())

    """ 总而言之,不同的库得到的答案是一致的:
    主要分为3步:
    1) degamma: srgb to linear rgb
    2)  linear_rgb to xyz
    3)  xyz to lab
    """

7. 图像显示

求得的lab的范围是:
图像rgb转cie-lab实现,图像处理算法,计算机视觉

转换为8bit image:
图像rgb转cie-lab实现,图像处理算法,计算机视觉

8.显示器色域检测

https://www.mpyit.com/monitorinfo.html文章来源地址https://www.toymoban.com/news/detail-767274.html

到了这里,关于RGB 转换为 XYZ 和 LAB空间:convert between sRGB and CIEXYZ, 色域色彩相关的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于使用BETWEEN AND 使索引失效的解决方法

    由于业务需要,需要使用between and 查询数据, 在查询数据条数约占总条数五分之一以下时能够使用到索引,但超过五分之一时,则使用全表扫描了。速度极慢。 解决办法(联合索引+强制使用索引)

    2024年02月14日
    浏览(40)
  • Difference Between [Checkpoints ] and [state_dict]

    在PyTorch中,checkpoints 和状态字典(state_dict)都是用于保存和加载模型参数的机制,但它们有略微不同的目的。 1. 状态字典 ( state_dict ): 状态字典是PyTorch提供的一个Python字典对象,将每个层的参数(权重和偏置)映射到其相应的PyTorch张量。 它表示模型参数的当前状态。 通过

    2024年01月25日
    浏览(39)
  • 空间直角坐标系(XYZ)转经纬度(BLH)

    本章首先介绍空间直角坐标系与大地坐标系,然后列出XYZ转换BLH的公式,最后基于C语言完成该部分代码设计。   参考书籍: 董大男,陈俊平,王解先等,GNSS高精度定位原理,科学出版社 黄丁发,熊永良,周乐韬等,GPS卫星导航定位技术与方法,科学出版社。   空间直角坐

    2023年04月15日
    浏览(43)
  • 3DM/XYZ格式在线转换

    3D模型在线转换(https://3dconvert.nsdt.cloud/)是一个可以进行3D模型格式转换的在线工具,支持多种3D模型格式进行在线预览和互相转换。 3DM是一种常用的三维模型文件格式,具有多种几何体和材质,文件大小较小,兼容性较好,适用于工业设计、建筑设计、产品设计、数字艺术

    2024年02月03日
    浏览(42)
  • 数字图像处理—— Lab、YCbCr、HSV、RGB之间互转

    “Lab” 图像格式通常指的是 CIELAB 色彩空间,也称为 Lab 色彩空间。它是一种用于描述人类视觉感知的颜色的设备无关色彩空间,与常见的 RGB 和 CMYK 色彩空间不同。CIELAB 由国际照明委员会(CIE)于1976年定义,用于更准确地表示人眼对色彩的感知。 CIELAB 包括三个通道:L(亮

    2024年02月11日
    浏览(45)
  • TypeError: ‘>‘ not supported between instances of ‘list‘ and ‘int‘

    将标签中大于0的像素值(类别)挑选出来。 运行时候出现:TypeError: ‘’ not supported between instances of ‘list’ and ‘int’ 因为label是list不能和0比较,所以需要对label格式进行修改。 添加一句: 或者 取决于自己的数据类型,在训练过程中,label已经加载到cuda上了,所以他一定是一

    2024年02月13日
    浏览(44)
  • 【Spark】What is the difference between Input and Shuffle Read

    Spark调参过程中 保持每个task的 input + shuffle read 量在300-500M左右比较合适 The Spark UI is documented here: https://spark.apache.org/docs/3.0.1/web-ui.html The relevant paragraph reads: Input: Bytes read from storage in this stage Output: Bytes written in storage in this stage Shuffle read: Total shuffle bytes and records read, includes b

    2024年02月06日
    浏览(46)
  • 成功解决TypeError: ‘<‘ not supported between instances of ‘str‘ and ‘int‘

    成功解决TypeError: \\\'\\\' not supported between instances of \\\'str\\\' and \\\'int\\\' 目录 解决问题 解决思路 解决方法 TypeError: \\\'\\\' not supported between instances of \\\'str\\\' and \\\'int\\\' 类型错误:\\\'\\\'在\\\'str\\\'和\\\'int\\\'实例之间不支持

    2024年02月14日
    浏览(46)
  • Cesium:CGCS2000坐标系的xyz坐标转换成WGS84坐标系的经纬高度,再转换到笛卡尔坐标系的xyz坐标

    作者:CSDN @ _乐多_ 本文将介绍使用 Vue 、cesium、proj4 框架,实现将CGCS2000坐标系的xyz坐标转换成WGS84坐标系的经纬高度,再将WGS84坐标系的经纬高度转换到笛卡尔坐标系的xyz坐标的代码。并将输入和输出使用 Vue 前端框架展示了出来。代码即插即用。 网页效果如下图所示, 一、

    2024年02月06日
    浏览(46)
  • 机器学习图像特征提取—颜色(RGB、HSV、Lab)特征提取并绘制直方图

    目录 1 颜色特征 1.1 RGB色彩空间 1.2 HSV色彩空间 1.3 Lab色彩空间 2 使用opencv-python对图像颜色特征提取并绘制直方图 2.1 RGB颜色特征和直方图 2.2 HSV颜色特征和直方图 2.3 Lab颜色特征和直方图 RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以

    2024年02月08日
    浏览(60)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包