我参考了以下stackoverflow thread来计算颜色校正矩阵。
如上述线程所提到的,我想从sRGB颜色空间转换为线性sRGB空间,我正在尝试使用pwkit colorspace mapper代码进行转换。
然而,我不确定得到的线性sRGB值是否正确,因为该函数要求sRGB在[0-1]范围内,将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通道的值从[0-255]缩放到[0-1]?简单地除以255.0会得到正确的线性sRGB值吗?如何验证转换是否产生了正确的线性sRGB值?