Metal Petal框架

简介: 介绍的Metal Petal能力与最佳使用

前言

Metal Petal是一个基于Metal的图像处理框架,旨在通过易于使用的编程界面为静态图像和视频提供实时处理。

核心组件

MetalPetal 的一些核心概念与 Apple Core Image 框架中的概念非常相似。

  • MTIContext,对比CIContext

提供渲染MTIImage的评估上下文。它还存储了大量缓存和状态信息,因此尽可能重用上下文更高效。

  • MTIImage,对比CIImage

MTIImage对象是要处理或生成的图像的表示。它确实直接表示图像位图数据,相反,它拥有生成图像或更准确地说是aMTLTexture所需的所有信息。它由两部分组成,一个是如何生成纹理的配方(MTIImagePromise)和其他信息,例如上下文如何缓存图像(cachePolicy),以及如何采样纹理(samplerDescriptor)。

  • MTIFilter,对比CIFilter

MTIFilter表示图像处理效果和控制该效果的任何参数。它产生一个MTIImage对象作为输出。要使用过滤器,您可以创建一个过滤器对象,设置其输入图像和参数,然后访问其输出图像。通常,过滤器类拥有静态内核(MTIKernel),当您访问其outputImage属性时,它会要求具有输入图像和参数的内核生成输出MTIImage

  • MTIKernel

MTIKernel表示图像处理例程。MTIKernel负责为过滤器创建相应的渲染或计算管道状态,以及为aMTIImage构建MTIImagePromise

优化

MetalPetal做了很多优化,它会自动缓存函数、内核状态、采样器状态等。

它利用可编程混合、无内存渲染目标、资源堆和金属性能着色器等金属功能来实现快速高效的渲染。在macOS上,MetalPetal还可以利用苹果芯片的TBDR架构。

在渲染之前,MetalPetal可以查看您的图像渲染图,并计算出进行渲染所需的最小中间纹理数量,从而节省内存、能量和时间。

如果可以串联多个“食谱”,以消除冗余的渲染传递,它也可以重新组织图像渲染图。(MTIContext.isRenderGraphOptimizationEnabled

并发性考虑因素

MTIImage对象是不可变的,这意味着它们可以在线程之间安全地共享。

然而,MTIFilter对象是可变的,因此无法在线程之间安全共享。

MTIContext包含许多状态和缓存。MTIContext对象有一个线程安全机制,使得在线程之间共享MTIContext对象是安全的。

比 Core Image 的优势

不同:

Core Image可以使用GPU或者CPU渲染。

MetalPetal主要专注于使用GPU进行渲染。

优势:

  • 完全可定制的顶点和片段函数。
  • MRT(多个渲染目标)支持。
  • 一般来说,性能更好。(需要详细的基准数据)

内置过滤器

  • Color Matrix - 颜色矩阵

  • Color Lookup - 颜色查找

    Uses an color lookup table to remap the colors in an image.

    使用颜色查找表重新映射图像中的颜色。

  • Opacity - 不透明度

  • Exposure - 曝光

  • Saturation - 饱和

  • Brightness - 亮度

  • Contrast - 对比

  • Color Invert - 颜色反转

  • Vibrance - 活力

    Adjusts the saturation of an image while keeping pleasing skin tones.调整图像的饱和度,同时保持令人愉悦的肤色。

  • RGB Tone Curve - RGB音调曲线

  • Blend Modes - 混合模式

    • Normal - 标准
    • Multiply - 相乘
    • Overlay - 覆盖
    • Screen - 拍摄
    • Hard Light - 硬光
    • Soft Light - 柔和的光线
    • Darken - 变暗
    • Lighten - 减轻
    • Color Dodge - 彩色道奇
    • Add (Linear Dodge) - 添加(线性道奇)
    • Color Burn - 颜色燃烧
    • Linear Burn - 线性燃烧
    • Lighter Color - 较浅的颜色
    • Darker Color - 深色
    • Vivid Light - 生动的光
    • Linear Light - 线性光
    • Pin Light - 针灯
    • Hard Mix - 硬混合
    • Difference - 区别
    • Exclusion - 排斥
    • Subtract - 减去
    • Divide - 分裂
    • Hue - 顺化
    • Saturation - 饱和
    • Color - 颜色
    • Luminosity - 亮度
    • ColorLookup512x512 - 颜色查找512x512
    • Custom Blend Mode - 自定义混合模式
  • Blend with Mask - 与遮罩混合

  • Transform - 转变

  • Crop - 裁剪

  • Pixellate - 像素

  • Multilayer Composite - 多层复合材料

  • MPS Convolution - MPS卷积

  • MPS Gaussian Blur - MPS高斯模糊

  • MPS Definition - MPS定义

  • MPS Sobel - MPS Sobel

  • MPS Unsharp Mask - MPS不明显的遮罩

  • MPS Box Blur - MPS盒子模糊

  • High Pass Skin Smoothing - 高通皮肤平滑

  • CLAHE (Contrast-Limited Adaptive Histogram Equalization) - CLAHE(对比度限制自适应直方图均衡)

  • Lens Blur (Hexagonal Bokeh Blur) - 镜头模糊(六角形散景模糊)

  • Surface Blur - 表面模糊

  • Bulge Distortion - 隆起失真

  • Chroma Key Blend - 色度键混合

  • Color Halftone - 颜色半色调

  • Dot Screen - 点屏

  • Round Corner (Circular/Continuous Curve) - 圆角(圆形/连续曲线)

  • All Core Image Filters - 所有Core Image滤镜,配合MTICoreImageUnaryFilter使用

最佳实践

  • 尽可能重复使用MTIContext

上下文是重量级对象,因此,如果您确实创建了对象,请尽早创建,并在每次需要渲染图像时重用它。

  • 明智地使用MTIImage.cachePolicy

当您不想保留图像的渲染结果时,请使用MTIImageCachePolicyTransient,例如当图像只是过滤器链中的中间结果时,因此渲染结果的底层纹理可以重复使用。这是内存效率最高的选项。但是,当您要求上下文渲染之前渲染的图像时,它可能会重新渲染该图像,因为它的基础纹理已被重用。

默认情况下,过滤器的输出映像具有transient策略。

当您想防止底层纹理被重复使用时,请使用MTIImageCachePolicyPersistent

默认情况下,从外部来源创建的图像具有persistent策略。

  • 了解MTIFilter.outputImage是一个计算属性。

每次您要求过滤器输入其输出图像时,即使输入与上次调用相同,过滤器也可能为您提供新的输出图像对象。因此,尽可能重复使用输出图像。

例如,

//          ╭→ filterB
// filterA ─┤
//          ╰→ filterC
// 
// filterB and filterC use filterA's output as their input.

在这种情况下,以下解决方案:

let filterOutputImage = filterA.outputImage
filterB.inputImage = filterOutputImage
filterC.inputImage = filterOutputImage

比以下更好:

filterB.inputImage = filterA.outputImage
filterC.inputImage = filterA.outputImage
目录
相关文章
|
算法 计算机视觉 iOS开发
iOS 实时图像处理技术:使用 Core Image 和 Metal 进行高效滤镜应用
【4月更文挑战第8天】 在移动设备上实现高效的图像处理功能是现代应用程序开发中的一个关键需求。苹果的iOS平台提供了Core Image和Metal两大技术,它们为开发者提供了强大的工具来实现复杂的图像处理任务。本文将探讨如何使用Core Image进行基础图像处理,并结合Metal的性能优势,开发出一个自定义的实时图像滤镜。我们将通过创建一个能够动态调整参数并且具有实时反馈效果的滤镜来演示这一过程。
|
负载均衡 网络协议 Dubbo
微服务架构 | 3. 注册中心与服务发现
注册中心用来集中管理微服务,实现服务的注册,发现,检查等功能;
4050 2
微服务架构 | 3. 注册中心与服务发现
|
10月前
|
物联网 开发者
LoRA 模型的全新玩法——AutoLoRA 带你体验 LoRA 检索与融合的魔法
LoRA 模型的全新玩法——AutoLoRA 带你体验 LoRA 检索与融合的魔法
483 0
2025年阿里云域名备案流程(图文详细教程)
本文详细介绍了2025年阿里云域名备案的全流程,包括注册阿里云账号、企业实名认证、购买服务器、创建域名信息模板、购买域名、域名备案及查询备案号等步骤。通过图文结合的方式,清晰展示了每个环节的操作方法和注意事项,帮助用户顺利完成域名备案。文章强调了域名备案的前提是国内需有一台服务器,并提供了具体配置建议,同时提醒用户注意邮箱验证和短信核验等关键步骤,确保备案顺利通过。
15692 15
|
11月前
|
数据采集 JSON 人工智能
MyEMS能源管理系统后台配置-数据源管理
MyEMS 是一款开源能源管理系统,适用于建筑、工厂、园区等多种场景,支持电、水、气等能源数据的采集、分析与报表生成。系统提供数据源管理、数据点配置及数据修补等功能,支持 Modbus、MQTT、OPC UA 等协议,助力企业实现精细化能源管理与低碳运营。
254 0
|
边缘计算 弹性计算 人工智能
魔搭社区大模型一键部署到阿里云边缘云(ENS)
随着大模型技术的快速发展,业界的关注点正逐步从模型训练往模型推理 转变。这一转变不仅反映了大模型在实际业务中的广泛应用需求,也体现了技术优化和工程化落地的趋势。
1313 7
|
机器学习/深度学习 传感器 监控
深度学习之环境感知模型
基于深度学习的环境感知模型,旨在通过利用深度学习技术,使系统能够感知、理解并响应其所在的物理或虚拟环境。此类模型在自动驾驶、机器人导航、智能监控、虚拟现实等领域有着广泛的应用。
441 3
|
Web App开发 JavaScript 前端开发
深入理解Playwright的高级功能和用法
Playwright是一个强大而灵活的Python库,用于自动化浏览器操作和测试。它提供了一套简洁、直观的API,使得编写可靠、可扩展的浏览器自动化脚本变得非常容易。无论是模拟用户交互、抓取网页数据还是进行端到端的Web应用程序测试,Playwright都是一个值得信赖的选择。 Playwright支持多种浏览器,包括Chrome、Firefox和WebKit(Safari)。这意味着您可以根据需要选择合适的浏览器来运行自动化脚本。Playwright还提供了跨浏览器的一致性保证,这意味着您可以在不同的浏览器上运行相同的脚本,并获得相似的结果。
|
Java 数据库连接 数据库
Spring Boot中的非阻塞式I/O实现
Spring Boot中的非阻塞式I/O实现
|
数据采集 并行计算 大数据
LabVIEW 32位与64位版本比较分析:性能与兼容性详解
LabVIEW 32位与64位版本比较分析:性能与兼容性详解
1264 0