分形/计算机图形技术/工作流程
Image processing or pipeline of 2D graphic or workflow
图像处理阶段
电影(电影)制作包括五个主要阶段:[2]
- 开发:创建电影创意,购买现有知识产权的权利,等等,并编写剧本。 融资该项目的资金并获得资金。
- 前期制作:为拍摄做安排和准备,例如聘请演员和摄制组、选择拍摄地点和建造布景。
- 制作:在电影拍摄期间录制电影的原始素材和其他元素,包括主要拍摄。
- 后期制作:将录制好的电影的画面、声音和视觉效果编辑并组合成最终产品。
- 发行:完成的电影将在电影院发行、营销和放映,或发行到家庭录像供观看。
为了获得正确的结果,需要使用不同的色彩空间来处理:[3]
- 渲染,
- 显示和打印
- 图像存储。
渲染和合成最好在场景线性色彩空间中进行,它更接近于自然,并且使计算更具物理准确性。
- 选择算法
- 选择像素图像大小(iWidth x iHeight = iX_Size x iY_Size)
- 选择平面视口(由 4 个角点或中心、半径和纵横比定义的矩形)
- 选择平面变换
- 创建空数组
- 填充数组
- 将数组保存为原始文件
- 后期处理(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]
- 处理前的原始图像
- 二进制图像
- 轮廓图像
- 预处理后的骨架图像
- 原始图像和轮廓图像的合成图像
- 原始图像和骨架图像的合成图像
提示
- “在将相机图像缓冲区显示到屏幕之前,将全屏滤镜和效果应用于相机图像缓冲区的过程。它可以以很少的设置时间显著改善产品的视觉效果。”[12]
- HDR 图像
- HLG 或 PQ 传输函数
- HDR 显示器
EIZO 的 HDR 内容制作工作流程:[13]
- 检查拍摄数据的
- VFX = 视觉特效
- 合成工作
- 最终颜色分级。
从 HDR 到色调映射 SDR[14]
- HDR 图像
- Reinhard & Drago 色调映射
- SDR 显示器 = 从 HDR 色调映射的 SDR 图像
- SDR 图像
- 伽马传递函数(伽马校正)[15]
- SDR 显示器(SRGB)
渲染意图 : 颜色操作应牢记用例
- 以模拟人类感知
- 或光的物理行为(基于物理的渲染 PBR)
- RGB 的线性版本(不是 sRGB)[16]
色彩空间
- 图像以 sRGB 格式存储在磁盘上并传递到显示器,该格式在强度方面近似于感知上的一致性。[17]
- 着色器数学在线性 RGB 中完成,该格式在强度方面在物理上是统一的。
- 打印在 CMYK 中
另请参阅渲染风格
- 无偏渲染 = 照片级渲染
- 非照片级渲染
- 艺术渲染
- 超现实渲染 = 将照片级逼真度与非照片级逼真度相结合的渲染风格
- krita : 色彩管理工作流程
- blender : blender : 官方色彩管理 和 维基教科书
- efi: 火热色彩成像工作流程
- skia 颜色管理
- Adobe
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)
线性工作流程使用线性色彩空间进行渲染[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[19]
- 线性色彩空间工作流程:线性色彩空间渲染可提供更精确的结果
- 伽马色彩空间工作流程:伽马色彩空间是历史上的标准格式 = 不要使用它
(开源开发人员集体):[20]
- 无符号字节类型 sRGB 帧缓冲区(= 每个颜色通道 8 位)用于存储中间结果。这是在硬件支持、效率和质量之间的权衡。对于低精度 sRGB 缓冲区,颜色将被钳制到 [0.0, 1.0],信息丢失将转移到较暗的频谱,这会导致暗场景中出现明显的条带。
- 线性结果通常需要每个颜色通道至少 12 位才能防止颜色降级和条带。线性、高精度 HalfFloatType 缓冲区没有这些问题,是台式设备上 HDR 类工作流程的首选。
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:
- GIMP 提供顶级的色彩管理功能,以确保在数字和印刷媒体上高保真色彩再现。
- 它最适合在涉及其他自由软件(例如 Scribus、Inkscape 和 SwatchBooker)的工作流程中使用。
Krita 拥有两个专门用于色彩管理的系统[22]
- lcms2,它处理 ICC 配置文件,通过使用参考空间,使颜色在设备的多种解释(屏幕、打印机)上保持一致。用于与以下程序连接 : Gimp 2.9+、Inkscape、digiKam 和 Scribus
- OCIO,它处理 LUT 色彩管理,用于操作这些颜色的解释,用于与 Blender 和 Natron 等程序连接
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 预乘
- 使用源或输出表征软件获得的准确设备配置文件。
- 正确加载的显卡 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:摄影师如何融入色彩管理工作流程
- 图像处理基础 - Vincent Mazet(斯特拉斯堡大学),2020-2023 - CC BY-NC 4.0。
- Alain Galvan 的图像编辑器效果
- Pedro Ré 的 CCD 天文摄影处理
- colormanagement.org
- ↑ sharp/nec displays : colourManagement
- ↑ Steiff, Josef (2005). 独立电影制作的完整白痴指南. Alpha Books. pp. 26–28.
- ↑ blender 手册: 颜色管理
- ↑ GIMP 位深:8 位、16 位或 32 位?{完整指南},作者:Chris Parker
- ↑ educativesite: 2D 图形管线方框图
- ↑ 麻省理工学院 6.837 秋季 2012 年本科计算机图形学讲义
- ↑ 模拟距离估计着色,作者:Claude Heiland-Allen
- ↑ cnet: 如何处理和编辑 RAW 文件
- ↑ techradar: 如何以正确的方式处理 RAW 图像
- ↑ 如何按正确的顺序对照片进行后期处理,作者:Jackson Couse,2016 年 10 月 24 日
- ↑ 下颌骨小梁骨的分形分析:用于瓷砖计数法的最佳瓷砖大小,作者:Kyung-Hoe Huh 等人
- ↑ unity3d 手册
- ↑ eizo: HDR 的来龙去脉——HDR 工作流程
- ↑ 评估 HDR 管线相对于色调映射 SDR 管线的性能,作者:Hamzeh Issa
- ↑ 图像中的传递函数,维基百科
- ↑ gamma 校正,作者:Mikael Hvidtfeldt Christensen
- ↑ computergraphics stackexchange 问题:对于着色器数学,为什么线性 RGB 应该保持 sRGB 的色域
- ↑ forum reallusion: 1-PBR-线性工作流程
- ↑ unity3d 手册: 线性照明
- ↑ pmndrs: github 上的后期处理
- ↑ cuvilib wiki: 性能和基准测试
- ↑ krita: 颜色管理工作流程
- ↑ "校准与表征". 2017-11-28.
- ↑ "显示器校准和配置的基本概念". 2017-11-28.
- ↑ "MS Windows 7 或更高版本:校准在登录时不会自动加载". 2017-11-28.
- ↑ NEC Display Solutions SpectraViewII 支持 Linux