Metal每日分享,自然饱和度滤镜效果
本案例的目的是理解如何用Metal实现自然饱和度效果滤镜,简单讲就是调整图像整体的明亮程度,如调节到较高数值,图像会产生色彩过饱和从而引起图像失真;
Demo
- HarbethDemo地址
- iDay每日分享文档地址
实操代码
// 自然饱和度滤镜
let filter = C7Vibrance.init(vibrance: -1.2)// 方案1:
ImageView.image = try? BoxxIO(element: originImage, filters: [filter, filter2, filter3]).output()// 方案2:
ImageView.image = originImage.filtering(filter, filter2, filter3)// 方案3:
ImageView.image = originImage ->> filter ->> filter2 ->> filter3
效果对比图
- 不同参数下效果
vibrance: -1.2 | vibrance: -0.5 | vibrance: 1.0 |
---|---|---|
实现原理
- 过滤器
这款滤镜采用并行计算编码器设计.compute(kernel: "C7Vibrance")
,参数因子[vibrance]
;
对外开放参数
vibrance
: 将图像的振动从-1.2更改为1.2,默认值为0.0;
/// 自然饱和度
public struct C7Vibrance: C7FilterProtocol {public static let range: ParameterRange<Float, Self> = .init(min: -1.2, max: 1.2, value: 0.0)/// Change the vibrance of an image, from -1.2 to 1.2, with a default of 0.0public var vibrance: Float = range.valuepublic var modifier: Modifier {return .compute(kernel: "C7Vibrance")}public var factors: [Float] {return [vibrance]}public init(vibrance: Float = range.value) {self.vibrance = vibrance}
}
- 着色器
计算出rgb的平均值,获取单通道颜色的最大值,得到饱和度计算后值amt,混合rgb和最大值和饱和度值得到最终的像素rgb;
kernel void C7Vibrance(texture2d<half, access::write> outputTexture [[texture(0)]],texture2d<half, access::read> inputTexture [[texture(1)]],constant float *vibrance [[buffer(0)]],uint2 grid [[thread_position_in_grid]]) {const half4 inColor = inputTexture.read(grid);const half average = (inColor.r + inColor.g + inColor.b) / 3.0h;const half mx = max(inColor.r, max(inColor.g, inColor.b));const half amt = (mx - average) * (-half(*vibrance) * 3.0h);const half4 outColor = half4(mix(inColor.rgb, half3(mx), amt), inColor.a);outputTexture.write(outColor, grid);
}
Harbeth功能清单
- 支持ios系统和macOS系统
- 支持运算符函数式操作
- 支持多种模式数据源 UIImage, CIImage, CGImage, CMSampleBuffer, CVPixelBuffer.
- 支持快速设计滤镜
- 支持合并多种滤镜效果
- 支持输出源的快速扩展
- 支持相机采集特效
- 支持视频添加滤镜特效
- 支持矩阵卷积
- 支持使用系统 MetalPerformanceShaders.
- 支持兼容 CoreImage.
- 滤镜部分大致分为以下几个模块:
- Blend:图像融合技术
- Blur:模糊效果
- Pixel:图像的基本像素颜色处理
- Effect:效果处理
- Lookup:查找表过滤器
- Matrix: 矩阵卷积滤波器
- Shape:图像形状大小相关
- Visual: 视觉动态特效
- MPS: 系统 MetalPerformanceShaders.
最后
- 慢慢再补充其他相关滤镜,喜欢就给我点个星
Metal每日分享,自然饱和度滤镜效果相关推荐
- Metal每日分享,调整胶片颗粒感滤镜效果
本案例的目的是理解如何用Metal实现调节胶片颗粒感滤镜,通过调整颗粒参数来调整晶粒尺寸来达到颗粒感效果: Demo HarbethDemo地址 实操代码 // 调节胶片颗粒感滤镜 let filte ...
- Metal每日分享,图像阀值素描滤镜效果
本案例的目的是理解如何用Metal实现图像阀值素描滤镜,用于图像阀值素描,形成有噪点的素描: Demo HarbethDemo地址 实操代码 // 用于图像阀值素描,形成有噪点的素描 let filt ...
- Metal每日分享,纯色图片滤镜效果
本案例的目的是理解如何用Metal实现纯色图片效果滤镜,主要就是生成纯色图片: Demo HarbethDemo地址 实操代码 // 纯色滤镜 ImageView.image = C7Color.pu ...
- Metal每日分享,颜色转换滤镜效果
本案例的目的是理解如何用Metal实现像素颜色转换滤镜,通过对像素颜色的不同读取方式获取到相应像素颜色,灰度图移除场景中除了黑白灰以外所有的颜色,让整个图像灰度化: Demo HarbethDemo地 ...
- Metal每日分享,虚假颜色混合滤镜效果
本案例的目的是理解如何用Metal实现虚假颜色效果滤镜,使用图像的亮度在两种用户指定的颜色之间进行混合: Demo HarbethDemo地址 实操代码 // 混合颜色 let filter = C7 ...
- Metal每日分享,均值模糊滤镜效果
本案例的目的是理解如何用Metal实现均值模糊效果滤镜,均值模糊原理其实很简单通过多个纹理叠加,每个纹理偏移量设置不同达到一点重影效果来实现模糊; Demo HarbethDemo地址 实操代码 // ...
- Metal每日分享,海报画滤镜效果
本案例的目的是理解如何用Metal实现海报画效果滤镜,主要就是改变颜色级别数量从而获取到新的像素颜色: Demo HarbethDemo地址 实操代码 // 海报画滤镜 let filter = C7 ...
- Metal每日分享,图像单色滤镜效果
本案例的目的是理解如何用Metal实现图像单色效果滤镜,将图像转换为单色版本,根据每个像素的亮度进行着色: Demo HarbethDemo地址 实操代码 // 去雾效果滤镜 let filter = ...
- Metal每日分享,UV去雾滤镜效果
本案例的目的是理解如何用Metal实现去雾效果滤镜,类似于UV过滤器: Demo HarbethDemo地址 实操代码 // 去雾效果滤镜 let filter = C7Haze.init(dista ...
最新文章
- 联想重启乐檬?5G时代手机双品牌战略带来变局
- windows失败计算机关闭,win10电脑关机失败怎么办|win10系统正确关机的详细方法
- JUC——线程同步锁(ReentrantLock)
- python基础学习[python编程从入门到实践读书笔记(连载五)]:数据可视化项目第16章
- javascript --- 实现Ajax的代码
- 图片无法删除要计算机管理员,存在桌面的图片删不掉,怎么处理?提示是需要管理员权限。...
- 计算机组装虚拟实验,组装计算机的虚拟实验室
- ICCV2021 |上交、北理、百度联合研究视频缩放任务中的自条件概率学习
- android 正方形按钮,Android《FloatingActionButton》
- 【PS基本操作】如何使用PS把图片背景去掉、透明背景
- zblog模板php免费三栏,天兴工作室三栏布局zblog模板 自定义配色
- 爬虫爬取知乎评论并利用flask框架做简单的可视化
- Springboot+oauth2.0实现微信登录(oauth2.0自定义授权模式)
- 多分类问题中sklearn的RFECV指定scoring函数
- screen 远程终端不中断
- time_to_sec函数的使用
- 【文末福利】用Python画了一幅《海上生明月》的画
- 后缀表达式、中缀表达式
- 上传文件 java_JAVA文件的上传与访问
- Python、C、Matlab续行符(连行符)
热门文章
- Vue-router,从基础入门到手拿大厂Offter,看这篇文章就够了。
- chrome浏览器的下载地址
- 计算机编程课程顺序_您可以在八月开始学习450项免费的在线编程和计算机科学课程...
- 入坑就对了!如何用机器学习甄别真假美猴王?
- 网站上做企业微信扫码授权登录怎么做?(超详细教程)
- 【电商数仓】数仓搭建之数据主题(data warehouse topic-- DWT)层(DWT层之首日和每日数据导入脚本)
- Linux安装jdk详细步骤,二进制发布包安装!
- 山寨王被山寨 腾讯九城恶性竞争害产业
- 为简化品牌形象,京东将域名360buy.com重命名为jd.com
- vscode latex 字数统计
- Metal每日分享,调整胶片颗粒感滤镜效果