用于图像统计的Metal Core Image kernels

问题描述 投票:0回答:1

我目前正在使用 Accelerate 和 Metal 着色器计算直方图、波形和矢量。该代码适用于 8 位 SDR 像素缓冲区,并且可以正常工作。我想使用 Core Image 重写它们,以便它们可以适用于 10 位 HDR 和 SDR 缓冲区。

  1. 加速对于 8 位图像的直方图非常有效。但是它不支持 10 位 YCbCr 像素缓冲区。 CoreImage 支持它,但尚不清楚如何从

    CIAreaHistogram
    输出中获取原始直方图数据,以便使用 CoreGraphics 或 MTKView 显示它。显示直方图的内置直方图
    CIHistogramDisplayFilter
    灵活性较差。除了 RGB 之外,我还想要亮度直方图。

  2. 我在金属着色器中使用

    atomic_fetch_add_explicit
    来计算波形和矢量等统计数据。金属核心图像内核似乎不支持原子。有没有办法在 CoreImage 中做同样的事情?

ios metal core-image cifilter metalkit
1个回答
0
投票

对于直方图,我认为你有两种选择:

  • 您可以编写自己的直方图可视化内核,类似于
    CIHistogramDisplayFilter
    的做法。您可以向其传递 RGB 和亮度直方图,并根据您的喜好将它们可视化。
  • 您计算直方图(例如,使用
    CIAreaHistogram
    )并将结果渲染到位图缓冲区中。然后,您可以从该缓冲区读取 bin 值,并将它们可视化为自定义 UI 组件,例如使用 SwiftUI。在 Github 上的 CoreImageExtensions 库 中,我们还有一些方便的 API,用于从
    CIImage
    读取值,这可能会简化此过程。

关于原子:如果您已经有一个用于这些统计数据的可用 Metal 实现,我建议您在它周围写一个

CIImageProcessorKernel
。它就是为此目的而设计的:将自定义图像处理器包含到 Core Image 管道中。特别是使用 Metal 非常方便,因为您已经获得了 Metal 设备、纹理和命令缓冲区。

© www.soinside.com 2019 - 2024. All rights reserved.