gpt4 book ai didi

python - 如何将 sRGB 转换为线性 sRGB 以计算 opencv 中的色彩校正矩阵? (CCM)

转载 作者:太空宇宙 更新时间:2023-11-03 21:29:50 26 4
gpt4 key购买 nike

我引用了以下 stackoverflow thread用于计算颜色校正矩阵。

如上述线程中所述,我想从 sRGB 颜色空间转换为线性 sRGB 空间,我正在尝试使用 pwkit colorspace mapper转换代码。

但是,我不确定生成的线性 sRGB 值,因为该函数需要范围 [0-1] 中的 sRGB,将 sRGB 值除以 255.0 是否正确?如何验证函数返回的线性 sRGB 值是否正确?

import os
import numpy as np
import cv2
import matplotlib.pyplot as plt

def srgb_to_linsrgb (srgb):
"""Convert sRGB values to physically linear ones. The transformation is
uniform in RGB, so *srgb* can be of any shape.

*srgb* values should range between 0 and 1, inclusively.

"""
gamma = ((srgb + 0.055) / 1.055)**2.4
scale = srgb / 12.92
return np.where (srgb > 0.04045, gamma, scale)


if __name__ == "__main__":

colorChecker = cv2.imread('C:/Users/Ai/Documents/Urine Sample Analysis/Assets/colorchecker_1.jpg')
cc = cv2.cvtColor(colorChecker,cv2.COLOR_BGR2RGB)
plt.imshow(cc)

#Convert srgb to linear rgb
cc = cc / 255.0
cc1 = srgb_to_linsrgb(cc)
print("Conversion from sRGB to linear RGB:\n")
print(cc1[1,1,:])

转换结果为:[0.30946892 0.23455058 0.19806932]

输入 sRGB 应该在 0-1 之间,如何将 sRGB channel 的值从 [0-255] 缩放到 [0-1],简单地除以 255.0 会得到正确的线性 sRGB 值吗?如何验证转换是否产生了正确的线性 sRGB 值?

最佳答案

从术语的角度来看,假设您的图像是有效的 sRGB 编码,即遵循 IEC 61966-2-1:1999,您正在通过应用 sRGB 电光传递函数 (EOTF) 解码 sRGB 编码的非线性光值,一种颜色分量传递函数 (CCTF) 表示:

I want to convert from the sRGB color space to linear RGB space

不正确,因为您仍在有效地使用 sRGB 编码颜色,唯一的区别是在使用解码 CCTF 之前,它们是非线性编码的。加性 RGB 色彩空间由一组三个组件定义:原色、白点和 CCTF。通过使用 CCTF,您没有更改所有原色或白点,即色域相同,因此您应该说的更多:

I want to convert from the sRGB color space to linear sRGB color space

现在要验证您的方法是否正确,您可以与引用实现进行比较,例如 Colour您引用的 SO 线程中使用了其代码:使用 sRGB 逆 EOTF 进行非线性编码时,18% 的灰度为 118:

>>> int(round(colour.models.eotf_inverse_sRGB(0.18) * 255))
118

从那里您可以检查您的方法是否确实转换回 18% 并且确实如此(忽略四舍五入)!

0.18116424424986022

关于python - 如何将 sRGB 转换为线性 sRGB 以计算 opencv 中的色彩校正矩阵? (CCM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57033168/

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