分形/计算机图形技术/工作流程
Image processing or pipeline of 2D graphic or workflow
图像处理阶段
电影(电影)制作包括五个主要阶段:[2]
- 开发:创建电影的想法,购买现有知识产权的权利等,并编写剧本。融资项目并获得资金。
- 前期制作:为拍摄制作安排和准备,例如雇用演员和摄制组,选择拍摄地点和搭建布景。
- 制作:在电影拍摄期间记录电影的原始素材和其他元素,包括主要拍摄。
- 后期制作:记录的电影的图像、声音和视觉效果被编辑和组合成一个最终产品。
- 发行:完成的电影在电影院发行、推广和放映,或发布到家庭录像以供观看。
为了获得正确的结果,不同的色彩空间对于:[3]
- 渲染,
- 显示和打印
- 图像存储。
渲染和合成最好在场景线性色彩空间中完成,它更接近自然,并且使计算更物理准确。
- 选择算法
- 选择图像大小(以像素为单位)(iWidth x iHeight = iX_Size x iY_Size)
- 选择平面视口(由 4 个角点或中心、半径和纵横比定义的矩形)
- 选择平面变换
- 创建空数组
- 填充数组
- 将数组保存为 RAW 文件
- 后处理(pl. Poprodukcja)
另一个示例,对于图像的每个像素
- 获取内存 1D 数组的整数坐标
- 计算虚拟 2D 数组的整数坐标
- 计算像素的世界坐标
- 计算此像素的表示函数的值
- 计算像素的颜色
数据结构
- 内存 1D 数组
- 虚拟 2D 数组
文件
"use pro editing techniques by working non-destructively. This means, don’t edit on the original image layer. Instead, duplicate the layer for every type of edit you plan to do. This way, you can repeat the editing steps with a duplicate file at 16 bits." Chris Parker[4]
- 裁剪:将世界坐标中的对象转换为对象子集 == 将世界窗口应用于对象
- 窗口到视口映射
- 光栅化 = (扫描转换)– 将高级对象描述转换为帧缓冲区中的像素颜色
- 显示/保存
- 包含以二进制格式表示的原始像素数据(数字)
- 程序可以保存原始迭代数据以供以后着色或其他分析。[7]
- 由于文件在读取/打开文件之前不包含任何图像格式信息,因此需要有关
- 图像尺寸
- 像素数据格式
- 像素扫描顺序
- 字节排列(小端或大端格式)
操作:
- 读取:从磁盘读取并将数据保存到内存数组中
- 着色 = 将像素的原始数据信息转换为像素颜色。
- 曝光值调整
- 白平衡调整
- 色调和色调调整
- 高光和阴影恢复
- 鲜艳度和饱和度调整
- 裁剪和旋转
- 降噪
- 锐化
- 一些在转换为 jpg 文件后优先进行的操作是
- 红眼去除
- 克隆的局部修饰以擦除帧中不需要的对象
- 添加框架
- 与其他输出文件混合,例如更改背景。
- 保存
转换和着色,对于每个像素执行
pgm[i] = raw[i]•m
RAW 图像处理示例
京浩许的示例[11]
- 处理前的 RAW 图像
- 二进制图像
- 轮廓图像
- 预处理后的骨架化图像
- RAW 和轮廓图像的合成图像
- RAW 和骨架化图像的合成图像
小贴士
- "在将图像缓冲区显示到屏幕之前,将全屏滤镜和效果应用于相机图像缓冲区的过程。它可以在很少的设置时间内显着改善产品的视觉效果。"[12]
- HDR 图像
- HLG 或 PQ 传输函数
- HDR 显示器
EIZO 的 HDR 内容制作工作流程:[13]
- 检查拍摄数据
- VFX = 视觉效果
- 合成工作
- 最终颜色分级。
从 HDR 到色调映射 SDR[14]
- HDR 图像
- Reinhard & Drago 色调映射
- SDR 显示器 = 从 HDR 色调映射的 SDR 图像
完整的 SDR 管道
[edit | edit source]- SDR 图像
- 伽马传递函数(伽马校正)[15]
- SDR 显示器 (SRGB)
色彩工作流程
[edit | edit source]渲染意图 : 色彩操作应考虑到用例
- 模拟人类感知
- 或光的物理行为(基于物理的渲染 PBR)
- RGB 的线性版本(非 sRGB)[16]
色彩空间
- 图像存储在磁盘上并以 sRGB 传输到显示器,sRGB 在强度上近似于感知一致。[17]
- 着色器数学在线性 RGB 中完成,在强度上物理一致。
- 打印是在 CMYK 中
另请参阅渲染风格
- 无偏渲染 = 照片级渲染
- 非照片级渲染
- 艺术渲染
- 超现实渲染 = 结合照片级真实感和非照片级真实感的渲染风格
示例
[edit | edit source]
Correct procedure when working with graphics is to convert all gamma encoded media to linear intensities, perform any calculation/blending/averaging, and convert back to gamma encoding.
Rendering and compositing is best done in scene linear color space, which corresponds more closely to nature, and makes computations more physically accurate. ( Blender doc)
线性工作流程
[edit | edit source]线性工作流程使用线性色彩空间进行渲染[18]
- "在现实世界中,我们感知的颜色都处于线性色彩空间。为了让显示器模拟现实世界,它也需要以线性方式显示。由于显示器硬件的限制和图像优化要求,图像以伽马校正进行处理和保存。"
- 由于旧 CRT 显示器技术的限制,图像只能通过伽马 2.2 色彩校正显示。即使现代显示器可以直接显示线性图像,伽马 2.2 也已成为一种标准惯例。
- 无需线性化诸如 .hdr 和 .exr(32 位)之类的浮点图像格式,这些格式已处于伽马空间 1.0。
- 当相机捕捉图像时,会保存一个 8 位图像,以通过 sRGB 伽马 0.45 处理实现与显示器的兼容性和文件优化。
sRGB Image Gamma 0.45 + Monitor Gamma 2.2 = Final Display Gamma 1
Unity3D 中的工作流程
[edit | edit source]Unity3D[19]
- 线性色彩空间工作流程:线性色彩空间渲染提供更精确的结果
- 伽马色彩空间工作流程:伽马色彩空间是历史上标准的格式 = 不要使用它
Poimandres 的色彩缓冲区
[edit | edit source](开源开发者集体):[20]
- 无符号字节类型 sRGB 帧缓冲区(= 每个颜色通道 8 位)用于存储中间结果。这是硬件支持、效率和质量之间的权衡。对于低精度 sRGB 缓冲区,颜色将被限制在 [0.0, 1.0],并且信息损失将转移到较暗的频谱,这会导致黑暗场景中出现明显的条带。
- 线性结果通常需要每个颜色通道至少 12 位才能防止颜色退化和条带。线性、高精度 HalfFloatType 缓冲区没有这些问题,是台式设备上类似 HDR 的工作流程的首选。
CUVI 中的色彩管道
[edit | edit source]Krita [21](一个用于图像和计算机视觉应用的 GPU 加速库。)
Let's take a typical color pipeline and measure its performance on one of the entry level GPUs. Any color pipeline almost always starts with the Raw image. Before converting to RGB, you might want to do some processing on the raw which may include applying LUTs (look up tables), FPN (fixed point noise) removal and fixing white balance. Next comes demosaic/debayer followed by several further enhancement functions and a color space conversion into the desired format. This pipeline can perform in real-time on a decent entry level GPU on an 8k images and at over 100 FPS on a 2k image:
桌面出版工作流程
[edit | edit source]- GIMP 提供顶级的色彩管理功能,以确保数字和印刷媒体之间的高保真色彩再现。
- 它最适合用于涉及其他免费软件的工作流程,例如 Scribus、Inkscape 和 SwatchBooker。
Krita 色彩工作流程
[edit | edit source]Krita 拥有两个专门用于色彩管理的系统[22]
- lcms2,它处理 ICC 配置文件,通过使用参考空间来保持跨多个设备解释(屏幕、打印机)的颜色一致。用于连接 Gimp 2.9+、Inkscape、digiKam 和 Scribus 等程序
- OCIO,它处理 LUT 色彩管理,用于操作所述颜色的解释,用于连接 Blender 和 Natron 等程序
skia
[edit | edit source]
Skia 使用的所有色彩空间都通过如何将颜色从该色彩空间转换为称为 XYZ D50 的通用“连接”色彩空间来描述自身。
我们可以从相同的描述中推断如何从 XYZ D50 空间转换回原始色彩空间。
XYZ D50 是一个用三个维度表示的色彩空间,类似于 RGB,但 XYZ 部分与 RGB 完全不同,而是这些通道的线性混音。Y 最接近您对亮度的理解,但 X 和 Z 更加抽象。如果您熟悉 YUV,它有点像 YUV。“D50”部分指的是该空间的白点,大约为 5000 开尔文。
所有色彩管理绘图都分为六个部分
- 三个步骤将源颜色连接到 XYZ D50 空间
- 然后三个对称步骤将 XYZ D50 连接回目标色彩空间。
这些步骤中的一些可以相互抵消,变为无操作,有时甚至整个过程在源空间和目标空间相同时变为无操作。
色彩管理步骤
- 如果源颜色是预乘的,则取消预乘 - alpha 不参与色彩管理,如果它被预乘,我们需要将它除掉使用源色彩空间的传递函数对源颜色进行线性化
- 通过乘以 3x3 矩阵将这些未预乘的线性源颜色转换为 XYZ D50 色域
- 通过乘以 3x3 矩阵将这些 XYZ D50 颜色转换为目标色域
- 使用目标色彩空间传递函数的逆函数对该颜色进行编码
- 如果目标是预乘的,则乘以 alpha
色彩管理工作流程的要求
[edit | edit source]- 使用源或输出特征描述软件获得的准确设备配置文件。
- 正确加载的显卡 LUT(或不需要 LUT 调整的显示器配置文件)。
- 配置为使用正确显示器配置文件和输入/输出配置文件的色彩管理应用程序,支持控制渲染意图和黑点补偿。
校准和配置需要
- 对于输入设备(扫描仪、相机等),需要一个色彩目标,配置文件软件将把该目标与制造商提供的色彩值进行比较。
- 或者,对于输出设备(显示器、打印机等),需要使用特定的设备(分光光度计、色度计或分光色度计)读取色彩色块值,并将测量值与最初发送的输出值进行比较。
在任何色彩管理工作流程中,显示器都是关键要素之一,因为在某个步骤中,需要通过图像软件处理和进行色彩调整以适应大多数图像,因此显示器呈现准确色彩的能力至关重要。
第一步是校准,通过调整显示器控制和图形卡的输出(通过校准曲线)来匹配用户定义的特征,例如亮度、白点和伽玛值。校准设置存储在 .cal
文件中。第二步是配置(特征化),涉及测量已校准显示器的响应并将其记录在色彩配置文件中。配置文件存储在 .icc
文件(“ICC 文件”)中。为了方便起见,校准设置通常与配置文件一起存储在 ICC 文件中。
请注意,.icm
文件与 .icc
文件相同 - 唯一的区别在于名称。
要看到正确的色彩,需要使用支持显示器配置文件的应用程序,以及在配置显示器时使用的相同校准。仅校准不能产生准确的色彩。如果显示器在配置之前进行了校准,则配置文件仅在显示器使用相同的校准(相同的显示器控制调整和加载到视频卡查找表中的相同校准曲线)时才能产生正确的色彩。macOS 内置支持加载校准曲线和安装系统范围的色彩配置文件。Windows 7 及更高版本允许加载校准曲线,但此功能需要手动启用。[25] Linux 和旧版本的 Windows 需要使用独立的 LUT 加载器。
ICC 配置文件是跨平台的,因此可以在其他操作系统上创建并在 Linux 下使用。但是,显示器配置文件需要一些额外的关注。由于显示器配置文件取决于显示器本身和视频卡,因此显示器配置文件应该只与创建它的同一台显示器和视频卡一起使用。创建配置文件后,不应调整显示器设置。此外,由于大多数校准软件在校准期间使用 LUT 调整,因此在每次启动显示服务器(X11、Wayland)时(例如,每次图形登录时)必须加载相应的 LUT。
在不太可能的情况下,如果 Linux 不支持色度计,则可以在 Windows 或 macOS 上创建的配置文件可以在 Linux 下使用。
加载显示通道 LUT 有两种方法:
- 创建一个不修改视频卡 LUT 的配置文件,因此不需要以后加载 LUT。理想情况下,这种方法将依赖于支持显示数据通道 (DDC) 的显示器 - 其内部显示器设置通过校准软件进行设置。不幸的是,能够通过显示数据通道 (DDC) 进行这些调整的显示器并不常见,并且通常很昂贵。Linux 上只有一种校准软件可以与支持显示数据通道 (DDC) 的显示器交互。[26] 对于主流显示器,存在以下几种选择:
- BasICColor 软件与市面上大多数色度计配合使用,允许用户通过显示器界面调整显示器输出,然后选择“配置文件,不校准”选项。通过这样做,可以创建不需要视频卡 LUT 调整的配置文件。
- 对于 EyeOne 设备,EyeOne Match 允许用户校准为“原生”伽玛和白点目标,这会导致校准后显示的 LUT 调整曲线为简单的线性 1:1 映射(从角到角的直线)。
- BasICColor 和 EyeOne Match 目前都没有在 Linux 下运行,但它们能够创建不需要 LUT 调整的配置文件。
- 使用 LUT 加载器实际加载校准期间准备的配置文件中包含的 LUT 调整。根据文档,这些加载器本身不会修改视频卡 LUT,而是通过修改 X 服务器伽玛斜坡来实现相同类型的调整。对于使用 X.org 或 XFree86 的 Linux 发行版,加载器可用 - 这是 Linux 上两种最流行的 X 服务器。其他 X 服务器不能保证与当前可用的加载器一起使用。Linux 上有两个 LUT 加载器可用:
在支持 ICC 的应用程序中,重要的是要确保为设备分配了正确的配置文件,主要是显示器和打印机。一些 Linux 应用程序可以自动检测显示器配置文件,而其他应用程序则要求手动指定。
虽然 Linux 上没有指定的位置来存储设备配置文件,但 /usr/share/color/icc/
已成为事实上的标准。
在 WINE 下运行的大多数应用程序都没有经过完整的色彩准确性测试。虽然每像素 8 位(bpp)程序可能由于深度转换错误而遇到一些色彩分辨率问题,但更高深度应用程序中的色彩应该准确,只要这些程序基于用于加载 LUT 的相同显示器配置文件执行其色域转换,并且保证加载了相应的 LUT 调整。
- benq:摄影师如何将色彩管理工作流程融入其中
- 图像处理基础 - 文森特·马泽(斯特拉斯堡大学),2020-2023 - CC BY-NC 4.0。
- 亚兰·加尔万的图像编辑效果
- 佩德罗·雷的 CCD 天文摄影处理
- colormanagement.org
- ↑ 夏普/NEC 显示器:色彩管理
- ↑ Steiff, Josef (2005). The Complete Idiot's Guide to Independent Filmmaking. Alpha Books. pp. 26–28.
- ↑ blender 手册:色彩管理
- ↑ GIMP 位深:8 位、16 位还是 32 位?{完整指南} 作者:克里斯·帕克
- ↑ educativesite:2D 图形管道方块图
- ↑ 麻省理工学院 6.837 2012 年秋季本科计算机图形学讲义
- ↑ 克劳德·海兰德-艾伦的模拟距离估计颜色
- ↑ cnet:如何处理和编辑 RAW 文件
- ↑ techradar:如何正确处理 RAW 图像
- ↑ 如何按正确顺序后期处理照片 - CMS 由杰克逊·库斯 2016 年 10 月 24 日撰写
- ↑ 下颌骨小梁骨的碎形分析:瓦片计数法最佳瓦片大小 许京浩 等
- ↑ unity3d 手册
- ↑ eizo:HDR 的来龙去脉 - HDR 工作流程
- ↑ 评估 HDR 管道相对于色调映射 SDR 管道,作者:Hamzeh Issa
- ↑ 维基百科中的图像中的传递函数
- ↑ 伽马校正 作者:Mikael Hvidtfeldt Christensen
- ↑ computergraphics stackexchange 问题:对于着色器数学,为什么线性 RGB 应该保持 sRGB 的色域
- ↑ 论坛 reallusion:1-PBR-线性工作流程
- ↑ unity3d 手册:线性照明
- ↑ pmndrs:github 上的后期处理
- ↑ cuvilib wiki:性能和基准测试
- ↑ krita:颜色管理工作流程
- ↑ "校准与特征化". 2017-11-28.
- ↑ "显示器校准和配置的基本概念". 2017-11-28.
- ↑ "MS Windows 7 或更高版本:校准在登录时不会自动加载". 2017-11-28.
- ↑ NEC 显示解决方案 SpectraViewII 支持 Linux