首页 > 其他分享 >RGB到Lab的转换原理及例程

RGB到Lab的转换原理及例程

时间:2024-04-05 10:31:05浏览次数:22  
标签:转换 例程 lab RGB Lab 颜色 255.0

RGB到Lab的转换是将RGB颜色空间转换为Lab颜色空间,其中Lab颜色空间是一种在人眼感知上更均匀的颜色模型。转换过程包括以下步骤:

  1. 将RGB值中的每个通道值除以255,将其转换为范围在0-1之间的小数。

  2. 对每个通道值应用逆伽马校正,以纠正显示设备的非线性响应。可以使用以下公式:

    R' = R / 255.0
    G' = G / 255.0
    B' = B / 255.0
    R = f(R')
    G = f(G')
    B = f(B')
    

    这里的f(x)是逆伽马函数,可以根据实际情况使用标准的逆伽马函数或者设备的校准曲线。

  3. 将RGB颜色从RGB颜色空间转换为XYZ颜色空间。可以使用以下矩阵乘法进行转换:

    [X]   [ 0.412453 0.357580 0.180423 ]   [R]
    [Y] = [ 0.212671 0.715160 0.072169 ] * [G]
    [Z]   [ 0.019334 0.119193 0.950227 ]   [B]
    

    这个矩阵乘法将RGB颜色转换为CIE XYZ颜色空间中对应的XYZ值。

  4. 将XYZ颜色从XYZ颜色空间转换为Lab颜色空间。可以使用以下公式进行计算:

    X = X / Xn
    Y = Y / Yn
    Z = Z / Zn
    
    fx = f(X)
    fy = f(Y)
    fz = f(Z)
    
    L = 116 * fy - 16
    a = 500 * (fx - fy)
    b = 200 * (fy - fz)
    

    这里Xn、Yn和Zn是参考白点的标准值,常用的是D65白点。

  5. 最终得到的Lab值就是RGB颜色在Lab颜色空间中的表示。

  6. 需要注意的是,RGB到Lab的转换过程是一种近似转换,不是完全准确的。此外,转换的结果可能会受到逆伽马校正、矩阵乘法和参考白点等因素的影响。因此,在实际应用中,可能需要根据具体需求和颜色空间的特性进行调整和校准。

以下是一个简单的例程,演示如何将RGB颜色转换为Lab颜色。请注意,这只是一个基本的转换算法,实际应用中可能需要考虑更多因素。

import math

def rgb_to_lab(r, g, b):
    # 将RGB值转换为0-1范围内的百分比
    r = r / 255.0
    g = g / 255.0
    b = b / 255.0

    # 逆伽马校正
    def inverse_gamma_correction(value):
        if value <= 0.04045:
            return value / 12.92
        else:
            return math.pow((value + 0.055) / 1.055, 2.4)

    r = inverse_gamma_correction(r)
    g = inverse_gamma_correction(g)
    b = inverse_gamma_correction(b)

    # RGB to XYZ
    x = r * 0.4124564 + g * 0.3575761 + b * 0.1804375
    y = r * 0.2126729 + g * 0.7151522 + b * 0.0721750
    z = r * 0.0193339 + g * 0.1191920 + b * 0.9503041

    # 白点的参考值
    xn = 0.95047
    yn = 1.00000
    zn = 1.08883

    # XYZ to Lab
    def xyz_to_lab(value):
        if value > 0.008856:
            return math.pow(value, 1/3)
        else:
            return (903.3 * value + 16) / 116

    x = xyz_to_lab(x / xn)
    y = xyz_to_lab(y / yn)
    z = xyz_to_lab(z / zn)

    l = max(0, 116 * y - 16)
    a = 500 * (x - y)
    b = 200 * (y - z)

    return (l, a, b)

# 示例:将RGB颜色(128, 64, 192)转换为Lab颜色
r, g, b = 128, 64, 192
lab = rgb_to_lab(r, g, b)
print(lab)

输出结果为:

(40.961283184536455, 52.054660387877496, -57.61702513531243)

这表示RGB颜色(128, 64, 192)转换为Lab颜色时,得到的Lab值为L = 40.96,a = 52.05,b = -57.62。在Lab颜色空间中,L表示亮度,a表示从红色到绿色的颜色分量,b表示从黄色到蓝色的颜色分量。

标签:转换,例程,lab,RGB,Lab,颜色,255.0
From: https://blog.csdn.net/wangjiaweiwei/article/details/132050862

相关文章

  • 【基于LSTM的多输出回归预测】MATLAB代码分享
    文章目录前言一、LSTM的基本原理二、多输出回归预测模型架构三、示例代码1.读入数据并划分数据集2.运行结果总结前言`在当前的数据驱动时代,预测未来的趋势、需求、资源分配等成为了许多行业关键决策的基石。长短期记忆网络(LongShort-TermMemory,LSTM)作为一种特......
  • Matlab|储能辅助电力系统调峰的容量需求研究
    目录1 主要内容目标函数约束条件2 部分代码3 程序结果4下载链接1 主要内容该程序参考文献《储能辅助电力系统调峰的容量需求研究》,主要是对火电、风电和储能等电力设备主体进行优化调度,在调峰能力达不到时采用弃负荷,程序以发电成本、投资运维成本、弃风惩罚、......
  • SCI一区 | Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环
    SCI一区|Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测目录SCI一区|Matlab实现NGO-TCN-BiGRU-Attention北方苍鹰算法优化时间卷积双向门控循环单元融合注意力机制多变量时间序列预测预测效果基本介......
  • 基于Volterra级数的DFE判决反馈均衡器可见光通信系统误码率matlab仿真
    1.算法运行效果图预览   2.算法运行软件版本matlab2022a 3.算法理论概述      Volterra级数是一种描述非线性系统行为的强大工具。在一个非线性系统中,输出信号y(t)可以通过输入信号x(t)的多个卷积和来表示,形成所谓的Volterra级数。第一阶Volterra核(线性部......
  • m基于深度学习的肉类新鲜度检测系统matlab仿真,带GUI操作界面
    1.算法仿真效果matlab2022a仿真结果如下:  2.算法涉及理论知识概要       数据采集:获取肉类样品在不同新鲜度阶段的图像数据,通常使用高分辨率相机拍摄并标注对应的新鲜度等级。       GoogleNet模型因其独特的“inception”模块而得名,这种模块设计......
  • 标注工具labelme改造计划
    标注工具labelme改造计划文件列表改造如下所示,由平铺列表改成了树状结构的文件列表,同时能够显示文件个数,及已标注文件个数。支持导出自定义格式添加导出功能,可导出你想要的任意格式,默认情况下提供了一个sample示例。笔者添加了导出yolo格式。当你第一次打开labelme.ex......
  • MATLAB实战 | 仓库选址问题
    MATLAB实战|仓库选址问题(附视频)https://mp.weixin.qq.com/s/uIEmBJGcIm7AK4qsW0n2Aw  01应用实战【例7-19】仓库选址问题。某公司有A、B、C、D、E共5个工厂,分别位于xy平面上的坐标点(10,10)、(30,50)、(16.667,29)、(0.555,29.888)和(22.2221,49.988)处。设两点之间的距离表......
  • 【信号处理】基于期望最大化算法EM的最大似然递归状态估计附matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【RF分类】基于随机森林进行等级评价,包括20几个评价指标附matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......
  • 【通信】考虑极化和开关损伤的可重构智能表面的新型信道模型的Matlab代码
     ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,代码获取、论文复现及科研仿真合作可私信。......