OpenVPCal流程文档

OpenVPCal 校准流程与操作指南

1. 流程简介

流程 OVC官方备注内容 内容备注
创建项目 打开 OpenVPCal 并创建一个新项目,选择一个用于保存项目文件及其附属文件和导出文件的文件夹。
设置LED墙 使用 “添加 LED 墙” 功能,根据需要为每个要校准的相机创建相应数量的 LED 墙,并使用易于识别的命名约定。在 “LED 设置” 小部件中,根据 LED 墙的规格设置目标墙的参数。 另外,这里支持设置自定义色域。
导出校准补丁 您可以在”项目设置”小部件中的”补丁生成”部分更改默认设置。 如果导出的是线性的,则导出的就是线性的。但如果导出的是dpx或是tiff(导出EXR的图片格式,EXR是线性的,假设选择BT.2020,所以上屏的OCIO输入选择”Linear ITU-R BT.2020”,输出选择”ITU-R BT.2020 - ST 2084”,这是在ColorSpace里面的,所以它的ST 2084是OETF,会和屏幕上的EOTF抵消,呈现线性的状态;如果导出的是TIFF或是DPX的话,它是自带这个OETF的,所以应该将其不通过OCIO直接上屏)。
校准色块加载到媒体播放器 将校准色块加载到媒体播放器上,并绕过任何颜色变换,因为校准色块已处于目标颜色空间。如果您已导出 EXR,请确保仅应用所需的 EOTF 变换。确保色块播放正确,没有帧混合或循环播放。
设置相机 将摄像机设置在墙前,确保墙和摄像机都预热(30min)并达到工作温度。关闭会影响LED墙的外部光源。
拍摄色块 按照开始补丁(序列的第一个补丁)上的说明进行操作。每个补丁拍摄超过 1 帧。检查相机是否曝光良好并与墙壁对齐。尽可能拍摄 RAW。
校准预处理 OpenVpCal 仅接受 Linear EXR 作为输入:将相机板预处理为 Linear/AP0 (ACES 2065-1) 或 Linear/Camera Native。我们建议使用 Linear/AP0(该工具的默认设置)。 这意味需要在外部软件上进行处理。
加载 EXR 序列 在 OpenVpCal 中,右键单击 LED WALL,然后选择”加载板序列”。选择预处理的相机板所在的文件夹。
检查 ROI 和色块分离 OpenVpCal 自动检测帧之间的间隔并自动检测板中的 ROI。检查 ROI 是否正确,并使用帧导航按钮查看帧间隔是否准确。
测试板设置 在”Plate Settings”小部件中,设置”Plate Settings”并选择您可能需要的校准附加选项。
分析 单击”分析”可让该工具对您的补丁进行精确分析并得出墙壁的状态。该工具将建议墙壁是否需要校准,并推荐校准设置。您可以同时分析多面LED墙。
检查状态和校准设置 如果分析成功,请检查查看器中的色块样本,以确保每个帧都对齐(外部为参考,内部为板)。分析绘图以确定建议的校准建议是否符合您的预期。如果分析不成功,请按照建议的更正重新拍摄板。
校准 如果愿意继续,请点击”校准”。您可以随时更改校准设置并再次点击”校准”。您可以同时校准多面墙。
检查校准 通过在查看器中启用”预览校准”来检查校准结果。您应该会看到一个很好的改进!
导出 如果您满意,请点击”导出”按钮导出您的校准变换。

2. 页面上UI内容解析

2.1. LED设置区域

用于设置此时LED的状态,包含色域、EOTF、以及屏幕最大亮度。

2.1.1. LED目标设置

图片

  • 目标色域(TARGET GAMUT):选择校准的目标色域,可以从预定义的标准色域(如 sRGB、P3、Rec2020)中选择。
  • 添加自定义色域(ADD CUSTOM GAMUT):点击此按钮会弹出一个窗口,可通过输入自定义色域名称及其 CIE 1931 x,y 基色和白点坐标来添加新的自定义色域,用于校准。
  • 目标 EOTF(TARGET EOTF):选择 LED 面板的目标 EOTF。
  • 目标最大亮度(TARGET MaxLum (nits)):仅在 EOTF 为 ST2084 时可设置内容的峰值亮度。
  • (在添加自定义色域中)自定义名称(CUSTOM NAME):定义自定义目标颜色空间的名称。
  • (在添加自定义色域中)目标色域色度坐标(TARGET GAMUT CHROMATICITY COORDINATES):查看或修改 xy 色域基色和白点坐标。
    图片

2.1.2. 工具设置(TOOL SETTINGS)

  • 灰色色块数量(NUMBER OF GREY PATCHES):设置要生成 / 分析的灰色阶数,默认值为 33。
  • 原色饱和度(PRIMARIES SATURATION):设置颜色原色的饱和度强度,默认值为 0.7。

2.2. 测试图设置

这个区域用于设置测试图的一些信息。在拍摄完成、导入图片之后这个界面才会Enable。

2.3. 测试板设置

图片

2.3.1. 测试板(Plate Settings)

  • 输入板块色域(INPUT PLATE GAMUT):外部后的相机板块序列的输入颜色空间,默认设置为 ACES 2065 - 1。这里指的是图片自身的色域。
  • 相机原生色域(NATIVE CAMERA GAMUT):用于校准的相机的原生颜色空间。拍摄时候相机的色域。虽然已经经过了转换,但是OVC还是想知道。
  • 自动白平衡源(AUTO WB SOURCE):如果启用此选项,输入板块在进行分析和校准之前将进行自动白平衡处理。强烈不建议开启!
    图片

2.3.2. 参考设置(Reference)

(在一个复杂的拍摄场景中,有不同型号或批次的 LED 墙,但为了保证视觉效果的一致性,需要将某一面墙的校准效果向已经校准好的或作为标准的参考墙看齐。通过在 “参考设置” 中勾选 “匹配参考墙”,并从下拉菜单中选择对应的参考墙,OpenVPCal 会在后续的校准过程中调整正在校准墙的相关参数,使得其在颜色呈现、亮度等方面尽可能与参考墙一致,从而实现多墙之间的协调匹配,确保整个拍摄场景中不同 LED 墙的视觉效果统一。)

  • 匹配参考墙(MATCH REFERENCE WALL):如果勾选此选项,所选的 LED 墙将与所选的参考墙进行匹配。
  • 参考墙(REFERENCE WALL):列出了可用于匹配的参考墙选项。
    图片

2.3.3. 白点偏移(White Point Offset)

上载一个EXR图,让OpenVPCal针对这张白点图进行校准。

  • 使用白点偏移(USE WHITE POINT OFFSET):如果勾选此选项,在进行分析和校准之前,板块的原始白点将朝着指定文件的测量白点进行偏移。
  • 白点偏移源文件(WHITE POINT OFFSET SOURCE FILE):指向包含白点偏移源的文件路径。

3. 详细流程(按照简介的顺序)

3.1. 设置测试内容

3.1.1. 创建项目

打开软件的时候就会有自动弹窗提示你是否创建或是加载旧项目。在打开了项目之后也可以点击“新建项目”。
图片

3.1.2. 设置LED墙面

图片

您需要根据校准需求添加相应数量的墙体。“墙” 这一概念取决于具体的使用场景,它可能代表不同相机与同一物理 LED 面板的组合,也可能代表不同的校准过程。

我建议您使用命名方式为“LED名字_相机的名字”,这意味着针对不同的 LED-相机 组合做的校准。当存在多个相机的使用场景的时候,可以用复制的方式来创建多个LED墙+相机的组合。
图片

3.1.3. 导出校准补丁

图片
图片
图片
在导出之前,务必确保 OpenVPCal 中的 LED 设置正确,因为校准色卡的颜色值需要正确编码。用户可以在项目设置小部件的 “色卡生成” 选项卡中设置色卡文件格式、分辨率以及每个色卡的帧数。例如,对于虚幻引擎媒体播放器,导出线性 EXR 格式可能更方便;而对于 Disguise 或 Plate Performer 等系统,导出 DPX 格式的显示相关色卡可能更合适。

如果选择 EXR 作为文件格式,生成的色卡将忽略电光转换函数(EOTF,以线性方式导出),缩放比例为 1 = 100 尼特(即图片上1的码值代表100nits的亮度),并编码到目标颜色空间中。

3.1.4. 校准色块加载到媒体播放器

导出时,OpenVPCal 还会生成一个 Pre_Calibration_OpenVPCal.ocio 配置文件,该文件提供了应用于色卡的必要转换,在导出 EXR 时尤为重要。
图片

Pre_Calibration_OpenVPCal.ocio 配置文件里面提供了三种转换(用于作为输出的转换):

  1. 第一种: 只有EOTF转换
  2. 第二种:EOTF+色域转换
  3. 第三种:只有色域转换(在EXR UE播放流程中选这种)

请在上屏的Ndisplay里按照如下设置: 输入为WorkingColorSpace(UE),这代表着不对UE内部的颜色进行颜色转换。(但是建议UE的工作色域改成BT.2020这意味着内部处理按照更丰富的颜色进行处理,如果你选择了Rec.2020作为色彩空间,那么你的输入也可以选择为:Linear ITU-R2020,最理想的情况是,这里选择ACES AP1/ACES CG,但这可能会让原本…)。

图片
这是一个标准的OCIO拍测试板的设置。

Unreal后处理设置:
(参考文档导出Word,不支持展示高级宏腾讯文档)

3.1.5. 设置相机

相机设置内容(待补充)

3.2. 校准部分

3.2.1. 预处理测试图

图片
通过达芬奇的方式预处理。

3.2.2. 加载EXR序列

图片

在 OpenVPCal 的 “Stage View(舞台视图)”>“LED 墙” 面板中,右键单击要加载板块的 LED 墙,选择 “加载测试图序列”,或者通过 “文件”>“加载测试图序列”,来加载与该墙对应的校准测试图。

OpenVPCal 会自动识别测试图,并尝试确定用于分析的感兴趣区域(ROI)以及色块之间的间隔。如果自动识别失败,用户可以使用第一个色块的中心正方形作为参考,将查看器中的红色 ROI 矩形对齐。

3.2.3. 测试板设置

图片

  • Input Plate Gamut(输入的测试板色域): 这个一定是一个线性的空间(比如 ACES 2065-1)
  • Native Camera Gamut(相机本地色域): 比如Arri广色域、索尼SGC
  • 自动白平衡设置:不建议开启,开启之后会对图形进行自动白平衡,就没有白平衡校准了。(如果你的工作流程需要对板块进行自动白平衡,且在相机中无法执行此操作,或者你需要更精确的白平衡,那么请选择自动白平衡源。)

3.2.4. 分析

在为每个你打算分析和校准的 LED 墙加载并设置好板块后,你可以在执行选项卡中点击“分析”。
图片
分析操作将从板块中提取必要信息,并将软件切换到 “分析布局”。你可以同时选择多个墙并同时运行分析。(注意:任何以另一墙作为参考的墙必须同时进行分析和校准。)

分析完成后,工具会弹出一个窗口,展示对每面被分析墙体的结果描述。分析可能会给出一些严重错误提示、警告,或者表明墙体无需校准(因为其处于可接受的公差范围内)。

3.2.4.1. 样本分析查看器

在分析布局中,将出现一个色板分析查看器,方便用户了解墙面的状态及其校准。该查看器由 OpenColor IO (OCIO) 运行,因此可以将色板映射到工具附带的默认 OCIO 配置 ACES 1.3 Studio Config 中可用的任何颜色空间。

查看器将校准序列的每个色块绘制为方形色板,其中外部显示目标颜色,内部显示相机观察到的实际色块。

  • 正确示例
    图片
  • 采集错误的示例
    图片
  • 注意红绿蓝的位置反了

几个部件的作用:

  • Exposure slider:曝光滑块。用于调整色样分析查看器中图像的曝光程度。
  • Display and view drop-down menus:显示和视图下拉菜单。“显示” 显示在什么屏幕上。“视图”显示什么样的数据 。
  • Auto white balance preview:自动白平衡预览。可以让用户提前看到自动白平衡算法对色样颜色的调整效果。
  • Calibration preview:校准预览。用于展示对色样进行校准操作后的预期效果。
3.2.4.2. 分析部件

图片
图片
图片
图片

  • 最大距离分析:显示与校准目标颜色空间相关的超出色域颜色的程度,同时展示校准前后的情况。
  • EOTF 分析:跟踪 LED 墙的线性响应,展示校准前后以及红、绿、蓝各通道的数据。
  • 白点分析:呈现相机所观测到的 LED 墙的白点情况,包括目标白点、校准前的白点、校准后的白点,以及麦克白样本的白点信息。
  • 颜色空间分析:展示相机所观测到的 LED 墙的颜色空间和白点范围,涵盖目标颜色空间、校准前的颜色空间、校准后的颜色空间,以及麦克白样本的相关信息。

Macbeth 色卡是由 X-Rite(爱色丽)旗下品牌 Gretag Macbeth 推出的用于色彩校准和色彩管理的标准色卡。它包含了一系列具有特定颜色和反射率的色块,这些色块的颜色经过精确测量和定义,可作为色彩校准的参考标准,帮助确保在不同设备和环境下的色彩准确性和一致性。

3.2.4.3. IPT - 色差分析小部件

图片

该小部件使用 DeltaE 度量来评估校准的准确性。DeltaE 是一种用于量化两种颜色之间感知差异的指标。在这种情况下,它衡量校准前后相机观测到的颜色与目标颜色之间的差异。 通过此分析,用户可以直观地了解校准过程在减小颜色误差方面的效果。较小的 DeltaE 值表示相机观测到的颜色与目标颜色更为接近,表明校准更为精确。 该小部件可能会以图形或数值形式展示这些 DeltaE 值,帮助用户快速评估不同颜色区域或整个色彩空间在校准前后的变化情况。例如,它可能会显示每个色块在校准前后的 DeltaE 值,或者提供整个色卡的平均 DeltaE 值,以全面评估校准的质量。

3.2.5. 校准设置

图片

3.2.5.1. 校准设置

校准设置提供了一系列选项,支持不同的校准路径与功能。分析过程通常会依据 LED 墙的状况设定最佳参数,但用户也可自行选择启用 / 禁用某些选项,或选用不同的路径。具体选项如下:

  • 参考到目标 CAT(REFERENCE TO TARGET CAT):从标准的色度适应变换列表中挑选。
  • 计算顺序(CALCULATIONS ORDER):编辑校准变换的操作顺序。先Gamma校准还是先ColorSpace校准。
  • 启用 EOTF 校正(ENABLE EOTF CORRECTION):勾选此选项可启用 EOTF 校正。
  • 目标到屏幕 CAT(TARGET TO SCREEN CAT):从标准列表中选择色度适应变换,或选择 “无(NONE)” 作为校准矩阵,默认选项为 “无(NONE)”。
  • 启用色域压缩(ENABLE GAMUT COMPRESSION):勾选此选项可启用色域压缩。
  • 避免裁剪(AVOID CLIPPING):勾选此选项,可对整个校准变换进行缩放,以避免高光裁剪(默认处于启用状态)。

如果(注意截止到2025.2.5日OpenVPCal的界面上有bug,不能完全相信当时勾选的那几个选项)OCIO配置文件里显示,开启了Gamut Compression,那么在转换中会多这么几行内容:
图片

3.2.5.2. 校准顺序(计算顺序)
  1. EOTF 校正禁用(EOTF CORRECTION DISABLED)
    • 校准方式:此路径下,校准仅通过一个直接应用于转换为目标色彩空间的输入 RGB 数据的 3x3 矩阵来执行。
    • 假设条件:这种方法假定 LED 墙呈线性表现。也就是说,在这种情况下,认为 LED 墙在整个图像处理过程中,其亮度和颜色输出与输入的信号之间存在简单的线性关系,不需要对电光转换函数(EOTF)进行校正。
  2. 1D → 3x3
    • 校准方式:在校准过程中,先测量 EOTF 校正和 RGB 平衡,然后再应用 3x3 校准矩阵。
    • 假设条件:该路径假定 LED 墙并非线性表现,且非线性发生在图像处理链的末端。这意味着在颜色映射之后,由于 LED 墙本身的特性,导致了非线性的亮度或颜色输出,所以需要先对这种非线性进行 EOTF 校正和 RGB 平衡调整,再进行 3x3 矩阵的校准。
  3. 3x3 → 1D
    • 校准方式:与 1D → 3x3 相反,先应用 3x3 校准矩阵,然后再测量 EOTF 校正和 RGB 平衡。
    • 假设条件:同样假定 LED 墙是非线性的,但这里认为非线性发生在图像处理链的起始阶段(在流水线颜色映射之前或期间,在 EOTF 之前)。即非线性问题在早期颜色映射阶段就已出现(UE渲染阶段),所以先通过 3x3 矩阵对颜色空间进行初步校准,之后再进行 EOTF 校正和 RGB 平衡。
  4. 选择依据
    • 关于选择哪种路径正确,取决于不同的图像处理流水线可能存在不同的问题。不同的 LED 墙设备、图像处理软件和硬件设置等,可能导致非线性问题出现在不同阶段。
    • 当分析过程确定 LED 墙不是线性时,OpenVPCal 软件的默认选择是 1D > 3x3 顺序。这是因为在许多常见情况下,LED 墙的非线性更可能出现在图像处理链的末端,所以这种顺序相对更常用。
3.2.5.3. 色度变换

色度适应变换是一种数学变换,用于模拟人类视觉系统对不同光照条件下颜色感知的调整。在色彩管理和校准过程中,当我们需要在不同的照明条件或颜色空间之间转换颜色时,色度适应变换就显得尤为重要。

例如,当我们从一个具有特定白点(比如日光照明下的白点)的颜色空间,转换到另一个具有不同白点(如钨丝灯照明下的白点)的颜色空间时,CAT 可确保颜色在视觉上保持相对一致。这意味着,尽管照明条件发生了变化,但人类观察者感知到的颜色应大致相同。

在 OpenVPCal 中,色度适应变换被用于校准流程,以帮助调整颜色,使其在不同的参考标准和目标颜色空间之间实现准确映射。在校准设置小部件中,用户可以从标准的色度适应变换列表中选择合适的变换方式,例如 “布拉德福德” 变换,这是一种常用的色度适应变换算法。不同的 CAT 算法在不同的应用场景下可能会有更好的表现,选择合适的算法有助于提高色彩校准的准确性。
图片

  • Reference to Target:这里的Reference指的是测试图图片的2065-1,而Target指的是我们屏幕的目标色域。
  • Target to Screen
  • 图片
  • 通过调整测试图原始的白点来匹配目标屏幕的白点。所以校准结果不会改变屏幕的白点。
3.2.5.4. 避免裁切

校准过程可能会使一两个 RGB 通道的亮度高于预期的峰值亮度。当以 ST2084 电光转换函数(EOTF)为目标时,如果任何一个通道的亮度超过该值,显示器就会对其进行限幅处理,这将影响 LED 墙的白点。“避免裁剪” 功能会将这些通道的亮度调整到峰值亮度以下。这可能会影响 LED 墙的整体亮度,但影响应该相当轻微。

3.2.5.5. 校准矩阵

图片
校准完成后,此小部件提供以多种实用格式复制校准变换中使用的每个 3x3 矩阵的选项。

3.3. 转换详解

3.3.1. OCIO中转换内容详解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1- !<ColorSpace>
2 name: Calibration CSC - UP - S-Gamut3.Cine - EOTF_CS
3 family: OpenVPCal/Utility
4 equalitygroup: ""
5 bitdepth: 32f
6 description: |
7 Colourspace for OpenVPCal.
8 EOTF correction assumes signal 1.0 represents 100 nits
9 Configuration---
10 target_EOTF--ST 2084
11 target_gamut--ITU-R BT.2020
12 calculation_order--EOTF > CS
13 enable_plate_white_balance--False
14 enable_gamut_compression--True
15 enable_EOTF_correction--True
16 isdata: false
17 encoding: scene-linear
18 allocation: uniform

描述和信息,各种设置最终确认以这里为准,而不是UI。大概位置在1150行左右。其中calculation_order会改变下面两个主要转换的顺序。

1
2
3
4
5
6
7
8
9
1from_scene_reference: !<GroupTransform>
2 children:
3 - !<MatrixTransform> {matrix: [1.49040952046417, -0.2661709192612, -0.224238601333507, 0, -0.080167499789956, 1.18216712107567, -0.101999621238164, 0, 0.00322763118916624, -0.0347764757444135, 1.03154884460315, 0, 0, 0, 0, 1]}
4 - !<MatrixTransform> {matrix: [1.15939307498367, -0.0669171977606114, 0.121386208480261, 0, 0.0937843467518664, 0.750274773384815, 0.0937843467736498, 0, -0.0460361329355286, 0.0651114229039448, 0.627884921201905, 0, 0, 0, 0, 1]}
5 - !<GroupTransform>
6 children:
7 - !<BuiltinTransform> {style: CURVE - LINEAR_to_ST-2084}
8 - !<FileTransform> {src: EOTF Correction 1D - UP - S-Gamut3.Cine - EOTF_CS.clf, direction: inverse}
9 - !<BuiltinTransform> {style: CURVE - ST-2084_to_LINEAR}

最主要的两个转换MatrixTransform是色域转换,GroupTransform里面是Gamma校准。

  • 其中第一个转换:!<MatrixTransform> {matrix: [1.49040952046417, -0.2661709192612, -0.224238601333507, 0, -0.080167499789956, 1.18216712107567, -0.101999621238164, 0, 0.00322763118916624, -0.0347764757444135, 1.03154884460315, 0, 0, 0, 0, 1]}ACES AP0 -> BT2020的色域转换。PS:之所以这么肯定是因为我计算了图片。在OpenVPCal的UI上面,它是图片 Reference To Target Matrix 这个转换矩阵。所以Reference指的应该就是ACES AP0,而Target指的就是“目标色域(在这里即BT2020)”。
  • 而第二条转换:是 图片Target To Screen Matrix 这个转换。猜测是校准到屏幕的偏色转换。也就是 X * 矩阵 = BT2020的偏色转换。
  • 下面的Children转换:是EOTF校准。1D LUT,分别校准R、G、B三根线。
1
2
3
4
5
6
7
1 // 下面是新增的内容 如果勾选了Gamut Compression
2 - !<GroupTransform>
3 children:
4 - !<BuiltinTransform> {style: ACEScg_to_ACES2065-1}
5 - !<FixedFunctionTransform> {style: ACES_GamutComp13, params: [1.08919025420343, 1.001, 1.03970709669469, 0.9, 0.9, 0.9, 4]}
6 - !<BuiltinTransform> {style: ACEScg_to_ACES2065-1, direction: inverse}
7 // 上面是新增的内容

色域压缩。详见 ACES色域压缩及其用户指导。

1
1!<MatrixTransform> {matrix: [1.49040952046417, -0.2661709192612, -0.224238601333507, 0, -0.080167499789956, 1.18216712107567, -0.101999621238164, 0, 0.00322763118916624, -0.0347764757444135, 1.03154884460315, 0, 0, 0, 0, 1], direction: inverse}

上面最主要的两个转换中色域转换的第一个转换的逆矩阵。

3.3.2. 如果不能使用OCIO的替代性方案

在输出的ocio的同级文件下有一个LUT CUBE文件。
图片
这个文件混合了矩阵转换和1D LUT。可以用在别的不支持OCIO的环境下比如Disguise。所有图像处理管线的最后,送到LED(上屏)之前。

3.3.3. 校准完成之后的两个转换

在校准完成之后,分别在Desired Color Spaces里面以及在Desired Display-Views里面存在两个校准后的转换:

Desired Color Spaces
图片
使用WorkingColorSpace+这个上屏:
图片

Desired Display-Views
图片
使用WorkingColorSpace+这个上屏:
图片

明显下面这个是对的。观察代码发现,Color Spaces这个选项实际上比 Display-Views多了一个转换。原本的转换做完ColorSpace和Linear的校准之后,是会转换回AP0的。而这个转换还加了一步是转换到CIE-XYZ。可能是用于做色度图用。
图片

3.3.4. 色域压缩参数的计算方法

这部分代码在src/open_vp_cal/core/calibrate.py这个文件里的colourspace_max_distances函数中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
1def colourspace_max_distances(source_cs, destination_cs, cat, shadow_rolloff):
2 #输入参数 source_cs:源色彩空间(目标色彩空间)
3 #输入参数 destination_cs:目标色彩空间(屏幕色彩空间)
4 #输入参数 cat:色彩适应转换方法(如 CAT02、Bradford 等)
5 #输入参数 shadow_rolloff:rolloff过渡参数
6
7
8 # 1. 创建RGB原色矩阵并进行色彩空间转换
9 primaries = colour.RGB_to_RGB(
10 # 创建单位RGB原色矩阵:红[1,0,0]、绿[0,1,0]、蓝[0,0,1]
11 RGB=np.asarray([[1.0, 0.0, 0.0], # 红色原色
12 [0.0, 1.0, 0.0], # 绿色原色
13 [0.0, 0.0, 1.0]]), # 蓝色原色
14 input_colourspace=source_cs, # 源色彩空间(如BT.2020)
15 output_colourspace=destination_cs, # 目标色彩空间(如显示器色彩空间)
16 chromatic_adaptation_transform=cat # 色彩适应转换方法
17 )
18
19 # 2. 计算无色(灰度)值 !!!! 就是这里会产生数据的不一样
20 achromatic_values = np.apply_along_axis(
21 lambda rgb: achromatic(rgb, shadow_rolloff), # 对每个RGB值计算其无色值
22 1, # 沿着第1轴(行)应用函数
23 primaries # 输入数据
24 )
25 # achromatic函数的处理过程:
26 # - 取RGB中的最大值
27 # - 如果值小于shadow_rolloff,应用阴影过渡
28 # - 返回[value, value, value]形式的灰度值
29
30 # 3. 计算距离
31 distances = (achromatic_values - primaries) / achromatic_values
32 # 这个计算表示:
33 # - 无色值与原色值的差异
34 # - 归一化到无色值范围内
35
36 # 4. 返回每个通道的最大距离
37 return np.amax(distances, axis=0)
38 # 返回每个颜色通道(R,G,B)的最大距离值

关于这个数值的影响,在视频的13:54左右提及,是ACES标准的色彩转换中的内容 ACES Parametric Gamut

为了避免出现色域转换后的的色彩溢出(造成裁切)。即“超出了LED墙的显示能力”,但是却没有超过相机的显色能力,所以相机会发现有色彩溢出(色彩裁切)。通过压缩10%左右的色彩空间。

参数例子:

1
2
3
1- !<BuiltinTransform> {style: ACEScg_to_ACES2065-1}
2- !<FixedFunctionTransform> {style: ACES_GamutComp13, params: [1.10245316504887, 1.001, 1.001, 0.9, 0.9, 0.9, 4]}
3- !<BuiltinTransform> {style: ACEScg_to_ACES2065-1, direction: inverse}