使用 Core Image 增强 RAW 图像处理 [视频]
摘要
Apple 宣布推出适用于 Core Image 的 RAW 9,这是一项重大更新,它使用分块的 CoreML 模型,在 Apple Neural Engine 上结合了去马赛克和降噪,从而显著提升了 Apple 平台上的 RAW 图像质量。
暂无内容
查看缓存全文
缓存时间: 2026/06/12 23:57
# 使用 Core Image 增强 RAW 图像处理 - WWDC26 - 视频 - Apple Developer
来源:https://developer.apple.com/videos/play/wwdc2026/305/
欢迎各位。我是 David Hayward,很高兴能和大家聊聊 Core Image 的增强功能,以及它对 RAW 图像文件的支持。
我将重点讨论四个主题。首先,我会回顾 Apple 平台上的 Core Image 如何支持来自相机的 RAW 图像文件,并向大家展示即将在 iOS、iPadOS、macOS 和 visionOS 27 中推出的重大 RAW 质量改进。
之后,我会讨论如何在渲染 RAW 图像时获得最佳性能。
最后,我会介绍 Apple 为 CIImageProcessor 类新增的 RAW 相关功能。
首先,快速概括一下 Core Image 如何支持 RAW。RAW 文件来自多种多样的相机品牌和型号,但与 HEIF 和 JPEG 不同,它们在显示之前需要特殊处理。
第一步是解析文件的元数据,并解包 RAW 传感器值。在这一阶段,每个像素位置只有红、绿或蓝中的一个值,以马赛克图案排列。这张图像被大幅裁剪,以便清晰看到这种图案。
下一步是对传感器数据进行去马赛克,使每个像素都包含红、绿、蓝值。
接下来的阶段是对像素进行降噪,使图像摆脱光子噪声、读取噪声和热噪声。之后应用卷积来锐化边缘并增加局部对比度。
最后一步是调整白平衡、曝光、颜色和色调,以生成悦目的最终图像。
所有这些步骤的算法都已内置在 iOS、iPadOS、macOS 和 visionOS 中。
这意味着人们可以在 Finder、预览和 Freeform 等系统应用中查看 RAW 文件。
事实上,任何使用 Image IO API 的应用或框架都能自动获得 RAW 支持。
除了基本查看,使用 CIRAWFilter API 的应用还可以提供高级编辑控制。
这个 API 被照片、Pixelmator Pro 以及 Nitro、Acorn 等许多应用使用。
早在 2006 年,系统只包含针对 21 种相机型号的手动调校校准数据。多年以后,这一数字已增长到涵盖所有主要相机品牌的 784 种型号。这甚至包括对 iPhone 相机 Apple Pro RAW 文件的支持。
但 RAW 的关键特性在于:你多年前拍摄的一张心爱照片,可以使用最新的先进算法重新处理。Apple 的 RAW 处理流程已经更新了八次,每次都在去马赛克、降噪和色彩方面有所改进。一些旧版本得以保留,以便用户根据需要继续使用。
现在,Apple 推出了迄今为止最大的更新——RAW 9!这一版本显著改善了 RAW 文件的渲染质量。它基于一个分块 CoreML 模型构建,该模型将去马赛克与降噪相结合,以获得最佳质量。并且该模型在设备上使用 Apple 神经网络引擎核心运行,以获得最佳性能。
让我近距离展示这些改进。
这是一张使用 RAW 8 处理的低噪点图像的放大裁剪图。这张使用索尼 Alpha 7 II 拍摄的复古表盘指示器图像看起来相当不错。然而,当你查看同一张图像在 RAW 9 下的效果时,图像更加锐利、清晰,细小的文字也更容易阅读。
当你查看高噪点图像时,差异更加明显。首先,观察这张 ISO 51,200 高噪点图像中实际包含的 RAW 数据。
在这个来自佳能 5D Mark III 的示例中,图像是一盒蜡笔的 10 倍裁剪图。RAW 数据中存在如此多的亮度和色度噪声,以至于无法分辨每支蜡笔的独特颜色。使用我们之前的算法,这是结果!RAW 8 在恢复场景实际色彩方面做得还算不错。但如果你查看 RAW 9 下的结果,输出效果显著提升。颜色准确且清晰明确。甚至蜡笔上反光的高光部分也清晰可见。
最后一个示例是一张缝纫线的照片裁剪图,使用富士 X-T5 在 ISO 12,800 下拍摄。这款相机采用非传统传感器模式,去马赛克颇具挑战性。在 RAW 8 结果中,存在一些颜色伪影,且线的细节有所丢失。但如果你观察同一张图像在 RAW 9 下的效果,结果明显更好。小文字更清晰,线的纹理也更加细致。
那么,如何在你的应用中启用 RAW 9 呢?首先,使用 CIRAWFilter API 加载一个 RAW 文件。这个 API 在 WWDC 21 的“捕捉和处理 ProRAW 图像”中已有详细描述。
然而,重要的是要知道 RAW 9 默认并未启用。你应检查 supportedDecoderVersions 属性是否包含 version9 枚举值。如果是,你可以通过将 decoderVersion 属性设置为 version9 来选择启用。
要知道哪些相机型号支持 RAW 9,现在有一个名为 supportedCameraModels 的类方法。这个 API 将向你的应用提供一个数组,其中包含支持给定版本的所有型号。在 iOS、iPadOS、macOS 和 visionOS 27 的发布中,将有数百种型号能够使用 RAW 9,包括所有主要专业相机品牌。这个相机列表将通过操作系统无线更新不断增长。RAW 9 也自动支持原生拍摄 DNG 的相机,例如 Apple iPhone。
CIRAWFilter API 的真正威力在应用修改其属性时得以释放。这允许用户自定义 RAW 文件的显示方式。
目前有 20 个可调节的校准属性。在你的应用中采用这些调整,以解锁编辑 RAW 图像的全部功能。以下是编辑 RAW 时最重要的控制项:exposure(曝光),控制图像变亮或变暗的程度;luminanceNoiseReductionAmount(亮度降噪量),调整可见的精细亮度颗粒程度;sharpnessAmount(锐度量),决定边缘锐化的程度;contrastAmount(对比度量),改变边缘附近局部对比度的应用程度。
所有这些控制在 RAW 9 中的效果都比之前版本更好。
RAW 9 中不再需要某些属性。colorNoiseReductionAmount(色度降噪量)属性现在无效,因为 CoreML 模型会自动处理色度噪声。
同样,detailAmount(细节量)和 moireReductionAmount(摩尔纹减少量)属性在 RAW 9 中已不再需要或不再支持。
你可以调用 isSupported 相关属性来检查这些属性是否适用于该滤镜实例。
现在你已经了解了 RAW 9 的外观和行为,我想讨论一下它的性能。从根本上说,为了获得如此高质量改进,RAW 9 在性能和资源消耗上都比之前版本更高。尽管 RAW 9 对每张图像运行 CoreML 模型数百次,但当应用编辑 CIRAWFilter 属性时,后续渲染是快速且响应迅速的。
这是因为 Core Image 会缓存中间结果。
获得最佳性能的最佳实践取决于你的应用如何使用 RAW 文件。我将针对两种最常见的使用场景给出一些建议。
首先,针对交互式编辑场景的建议。
交互式编辑是指同一张 RAW 文件以屏幕分辨率多次渲染。这通常是对应用调整 CIRAWFilter 属性(如曝光或锐度)的响应。
在进行 RAW 交互式编辑时,当以缩小尺寸显示图像时,应使用 CIRAWFilter 的 scaleFactor 属性。这一点很重要,因为它减少了渲染像素数超过显示器的图像所需的工作量。
每个视图使用一个 CIContext,并将其 cacheIntermediates 选项设置为 true。缓存允许在应用调整 CIRAWFilter 属性时跳过密集的 CoreML 工作。
如果你为应用添加“扩展虚拟寻址授权”,Core Image 将在渲染之间使用更多内存进行缓存。Apple 网站上对此有详细文档。另外,直接渲染到基于 Metal 的视图。这能提高重复渲染的性能,因为 Metal 可以在上一帧完成之前开始下一帧的工作。有关渲染到 MTKView 的更多信息,请参考 WWDC 22 的“使用 Core Image、Metal 和 SwiftUI 显示 EDR 内容”。
在介绍完交互式编辑场景的建议后,以下是导出文件时最重要的提示:
导出场景是指多张 RAW 文件各以全分辨率渲染一次,并输出为其他格式(如 HEIF 或 JPEG)。
这种情况的最佳实践是使用 cacheIntermediates 选项设置为 false 的 CIContext 进行导出。
此外,你可以通过设置上下文的 memoryLimit 选项,告诉 Core Image 在每次导出时使用更多内存。在 iOS 上,默认限制是保守的 256 MB。将限制设置为 512 或 1024 MB 可以显著提高性能。
你还可以通过使用上下文方法 heifRepresentation 或 jpegRepresentation 来节省额外内存,而不是直接调用 Image IO。
在最后一部分,我想谈谈对 CIImageProcessor API 的改进。
RAW 9 使用了 CIImageProcessor API,因为它能启用结合 CoreML 和其他 CIKernels 的算法。
作为这项工作的成果,Core Image 团队为 CIImageProcessor API 添加了两个你可能想在应用中使用的功能。我首先要说的是对显式输出图块大小的支持。
这是一个典型的 CIImageProcessor 类示例。它实现了感兴趣区域回调,该回调定义了对于给定输出矩形,需要多少输入。
最重要的是,在 process 回调内部,你必须注意处理器应操作的 input.region 和 output.region。如果有充足的内存,CoreImage 会以整个图像的 output.region 调用 process 函数。但当内存有限时,output.region 可能会小很多。
现在,处理器可以显式控制输出图块大小。处理器类中的代码保持不变,但你可以告诉 CoreImage 使用你选择的输出区域。
首先创建一个数组,然后用所有期望的图块填充该数组,以覆盖你的图像。在这个示例中,图块策略获取输入图像的范围,并将其分割成 512x512 像素的图块。当你创建使用该处理器的图像时,调用其 apply 方法,并传入覆盖图像的图块数组。
在介绍了显式输出图块大小之后,我最后要讲的是临时缓冲区功能。
调用 CoreML 的 CIImageProcessor 通常使用临时缓冲区。这是因为 CoreImage 使用交错图像缓冲区,而这些缓冲区必须转换为 CoreML 的平面数据。当为许多图块调用处理器回调时,临时缓冲区会被反复创建和销毁。这会影响性能。
CIImageProcessorOutput 类现在有了辅助方法。下面来看这是如何工作的!这是一个使用临时缓冲区功能的简单 CIImageProcessor 类示例。
该回调不是直接从输入处理到输出,而是通过向输出对象请求一个临时 CVPixelBuffer 来获取一个临时缓冲区。
这样做时,需要提供一个标识符。这对于使用多个临时缓冲区的 process 回调至关重要。
然后,这个示例处理器将输入像素缓冲区复制到临时缓冲区,在原地更改临时缓冲区像素,最后将其复制到输出。Core Image 将为你管理临时缓冲区的生命周期。它们会在正确时间自动释放,并在处理器为下一个图块调用时被回收。
以下是需要记住的关键要点。
在你的应用中尝试 RAW 9。这是一次重大的质量改进,只需几行代码即可启用。
遵循我概述的性能最佳实践,以实现快速导出和响应式编辑。
让你的应用访问 CIRawFilter 强大的编辑属性,让用户微调 RAW 图像的外观。
最后,为了在你的 CIImageProcessor 中获得最佳性能,请使用显式图块和临时缓冲区 API。就个人而言,我非常享受重新翻阅我过去 20 年用 RAW 拍摄的 7000 多张家庭照片的过程。看到降噪质量的提升真是太好了。我相信使用你应用的用户也会喜欢这些改进。感谢观看!
相似文章
Apple的Photos应用将新增AI编辑功能
Apple在WWDC 2026上宣布为其Photos应用推出新的AI驱动编辑功能,包括Reframe、Extend以及升级版Cleanup工具,这些功能均基于Apple Intelligence。
Apple Core AI Framework
Apple 推出 Core AI Framework,一种用于设备端机器学习的新工具。
Apple的Image Playground不再糟糕了
Apple在WWDC 2026上宣布对其Image Playground AI图像生成工具进行重大改进,包括更高质量的输出、自然语言提示、更深度的系统集成,同时强调隐私保护。
苹果相机主管认为AI能赋予你超能力
苹果相机主管Jon McCormack讨论了iOS 27中照片应用的新生成式AI功能,包括Extend和Spatial Reframe,并强调苹果在AI照片编辑上采取审慎态度,同时兼顾隐私和真实性保障。
苹果发布全新 Apple Silicon 端侧推理引擎
苹果在 WWDC 上发布了 CoreAI,这是一款适用于 Apple Silicon 的全新端侧推理引擎,将取代 CoreML,并通过优化推理支持多达 200 亿参数的更大模型,重点面向手机和平板设备。