iOS 开发者的 Metal 养成计划「7」 —— Metal Performance Shaders 和滤镜原理

发布于:2018-03-11 18:46,阅读数:314,点赞数:0


> 本文为小专栏[《Graphics Dance》](https://xiaozhuanlan.com/graphics_dance)特供文章,仅提供预览,欢迎订阅。

# 目录

- 引言
- Metal Performance Shaders
- 图像处理
- 矩阵变换
- 核卷积
- MPS 能为我们做些什么
- 神经网络
- 小结

# 引言

本文是本系列的最后一篇文章,来简单讲一讲苹果提供的另一个官方工具库:`Metal Performance Shaders(MPS)`。

由于 MPS 本身除了应用于图形处理处理外,由于官方提供了卷积神经网络的内核,因此还被广泛用于机器学习中。

# Metal Performance Shaders

> Add low-level and high-performance kernels to your Metal app. Optimize graphics and compute performance with kernels that are fine-tuned for the unique characteristics of each Metal GPU family.

这是一个经过优化的着色器程序库。

## 图像处理

在之前的文章中,我们并没有用着色器去处理像素,只用它来读取像素并显示在屏幕上。那么对于图像处理,最基础的就是将纹理的颜色读出来,然后什么都不处理就返回。其实在这一步,可以实现许多图像处理环节。

接下来将以滤镜这一常见的图像处理为例简单地介绍下图像处理的概念。

滤镜是一种颜色变换的处理方式。

![](//cdn.yuusann.com/img/corpus/18011_1.png)

滤镜常见的有两种实现方式:**矩阵变换**和**核卷积**。

#### 矩阵变换

图像的颜色值是一个四维的向量,那么滤镜的实现可以看做是一个四维矩阵。四维向量乘上这个变换矩阵,最后的结果也是一个四维向量,看做是输出颜色。

![](//cdn.yuusann.com/img/corpus/18011_2.png)

而在 Metal 的着色器程序中是支持向量运算的,因此可以像做整数乘法一样,直接使用采样器中取得的颜色值乘上一个滤镜矩阵,将结果返回即可。

具体实现大概是这样的:

---

# 预览结束,查看全文请订阅小专栏[《Graphics Dance》](https://xiaozhuanlan.com/topic/2170634958)


评论:0条


返回列表

返回归档

返回主页