RGB 空间到 CIE 1976 Luv 空间转换系统
项目介绍
本项目实现了一套基于 MATLAB 的精密色彩空间转换工具,专门用于将设备相关的 RGB 图像数据转换为感知均匀的 CIE 1976 Luv 色彩空间。Luv 空间的设计初衷是使色彩间的欧式距离与人类视觉感知的差异保持一致,因此本项目生成的图像数据非常适合用于精确的颜色比较、图像分割、色彩工程以及计算机视觉的研究。
功能特性
- 灵活的图像输入:系统支持用户通过图形界面选择本地图像文件,若取消选择,则自动生成一个 256x256 像素的高质量彩色渐变测试图。
- 自动化预处理:自动识别输入图像的位深,将 uint8 格式像素值归一化至 0 到 1 之间的双精度浮点数。
- 高精度转换逻辑:严格遵循国际照明委员会(CIE)标准,实现从非线性 RGB 到线性 RGB,再到 XYZ,最后到 Luv 的完整科学计算。
- 多维度可视化展示:同步显示原始图像以及 L*(亮度)、u*(红绿轴色度)、v*(黄蓝轴色度)三个独立分量的可视化结果,方便对比观察。
使用方法
- 环境准备:在 MATLAB 环境中运行主程序。
- 图像导入:启动后会弹出文件选择对话框。您可以选择常用的图像格式(如 .jpg, .png, .bmp, .tif)进行处理,或直接点击取消以使用程序预设的测试图像。
- 结果观察:程序将自动弹出一个结果窗口,以 2x2 子图形式展示转换效果。
系统要求
- MATLAB R2016a 或更高版本
- MATLAB Image Processing Toolbox(用于图像读取与显示)
算法实现逻辑与核心函数分析
本项目主要由两个核心功能模块组成,其内部实现逻辑如下:
#### 1. 流程控制与可视化模块
该模块负责管理图像转换的生命周期:
- 数据归一化:将原始图像像素值映射到 [0, 1] 区间,确保后续物理公式计算的准确性。
- 色彩转换调度:调用底层计算函数处理图像数据。
- 结果可视化映射:
- L* 分量:除以 100 进行归一化显示,反映亮度信息。
- u* 和 v* 分量:由于色度值存在负数,采用 (值 + 100) / 200 的映射策略将其转换至可见的显示范围,辅助观察色彩分布。
#### 2. 色彩空间核心转换函数
这是算法的核心,包含三个精确的物理建模阶段:
- 阶段一:反伽马校正(Inverse Gamma Correction)
该步骤将 sRGB 图像从非线性空间还原为线性空间。算法应用了分段函数:
- 当分量值 ≤ 0.04045 时,执行线性除法。
- 当分量值 > 0.04045 时,应用偏移量并执行 2.4 次幂运算。
利用基于 D65 标准光源的 3x3 变换矩阵,将线性化的像素数据映射为人类视觉的三刺激值 (X, Y, Z)。该矩阵精确定义了红、绿、蓝主色的坐标贡献。
这是转换的关键阶段,涉及以下精密计算:
- 参考白点设定:采用 D65 工业标准白点坐标(Xn=0.95047, Yn=1.000, Zn=1.08883)。
- 投影坐标计算:计算像素点的 u' 和 v' 坐标,并在计算公式中引入了极小值(1e-9)以防止分母为零导致的数值崩溃。
- 非线性亮度折算:使用 y_ratio(Y/Yn)计算 L*。根据 CIE 标准,设置阈值 epsilon (0.008856) 和斜率 kappa (903.3),在暗部使用线性关系而在亮部使用立方根关系,以模拟人类视觉对亮度的非线性响应。
- 色度坐标生成:基于 L* 及像素与参考白点之间的色度坐标差值,得出最终的 u* 和 v*。
关键数学参数
- 标准光源:D65
- 伽马阈值:0.04045 / 幂次:2.4
- L* 阈值 (epsilon):0.008856
- L* 常数 (kappa):903.3