
Vulkan移植GpuImage(四)从D到O的滤镜
发布日期:2021-05-18 10:02:40
浏览次数:18
分类:精选文章
本文共 1929 字,大约阅读时间需要 6 分钟。
现将D到O的大部分滤镜用Vulkan的ComputeShader实现了,以下是其中一些特殊的说明:
高斯模糊(Blurlens)
- GaussianBlurPosition:指定模糊区域进行高斯模糊,未采用GPUImage中的传统实现,而采用了类似GaussianSelectiveBlur的方式,通过混合原始图像与高斯模糊图像来实现,模糊半径和其他参数更加灵活控制。
- SphereRefraction:环境映射实现。与GlassSphere类似,主要是球坐标系与UV坐标系的转换。初次测试时,发现圈外闪烁,后来发现未将圈外置零,withinSphere应指圈外即为有效范围。
半色调效果(Halftone)
- 类似新闻打印的马赛克效果,基于PixellateFilter实现。主要将小矩形区域的UV坐标统一化后处理。
高通滤波(HighPass)
- 实现了高通滤波,用于检测图像像素的变化。首先实现了LowPass滤镜,再通过比较当前帧与上一帧(通过VkSaveFrameLayer保存)以显示像素的变化。
Performance Optimization
- Command Copy Performance: 直接使用vkCmdCopyImage时,表现为0.3ms-0.7ms。通过改用管线编码(bUserPipe = true)将时间降至0.2ms,找到性能下降的原因是内联函数未优化。
- LowPass实现: LowPass具有两个输入节点,分别是上一帧和SaveFrameLayer提供的帧。LowPass运行前后会混合上一帧和当前帧,以去除 Dropout纹理,然后再储存结果到SaveFrameLayer中。
- HighPass实现: 通过与LowPass的差异检测来显示像素变化。
直方图(Histogram)
- 具体的实现方法有两种:直接回读到CPU计算,或者使用原子操作。最优方法是使用原子操作,通过256个线程组分别处理直方图中的颜色分布。实现中使用了reduce2的分段方式,但由于循环次数过多,改用原子操作的方式。
iOS Blur实现
- 结合DownSampling、Saturation、GaussianBlur、LuminanceRange和UpSampling相结合,实现了类似iOS的高效滤镜效果。
高斯模糊实现
- 采用了Kuwahara算法,类似于局部共享显存的方式进行优化。在1080P下,半径5需要3.3ms,半径10需要9.7ms。测试在Redmi 10X Pro手机上运行流畅,达到30帧。
###rama_optimization
- 由于Kuwahara3x3算法特性,必须读取49个像素,性能较低。对此进行了多方面优化。
拉普拉斯算子(Laplacian)
- 通过计算拉普拉斯算子找到边缘。由于UCO中的UBO存储方式,最好的方式是使用浮点数和std140的结构,避免CPU-GPU中的结构对齐问题。
Lookup表实现
- 内置一个输入层,便于用户提供512x512x4的Lookup表。MissEtikate滤镜的实现可通过这个内置层完成。
中值滤波(Median)
- 初期尝试通过局部共享显存进行优化,但效果不理想,最终移植了GPUImage中的3x3中值滤镜实现。
运动模糊(MotionBlur)
- 实现简单,使用方向向量进行滤镜效果。
运动检测(MotionDetector)
- 集成一个VkOutputLayer,输出类似GPUImage的统计数据,方便进一步处理。
MotionDetector实现
- 层继承自VkLayer,内部包含LowPass和ReduceLayer。自定义一个.glsl脚本通过共享存储处理图像,输出运动统计图像。
NobleCornerDetection角点检测
- 结合Harris和Noble算法检测角点,改进后效果较好。
Opening和Closing滤镜
- 结合侵蚀和膨胀层实现Opening或Closing效果。
未实现的滤镜
- FASTCornerDetection和JFAVoronoi等滤镜尚未实现,JFAVoronoi需要明确移植方法,暂时不展开。
Performance优化总结
- 通过优化vkCmdCopyImage和internalFunction到管线编码(bUserPipe = true),将时间从0.3ms提升至0.2ms。
- 企业校验总时间,发现LowPass、HighPass、Histogram、Kuwahara、Laplacian、MotionBlur等滤镜在不同帧率下的表现差异较大。
通过以上优化,滤镜效果与性能均得到了显著提升,为后续滤镜移植和性能优化奠定了基础。
发表评论
最新留言
不错!
[***.144.177.141]2025年04月15日 05时06分49秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
springboot security 基于redis的session共享(7)
2019-03-17
vue 权限管理 菜单按钮权限控制(7)
2019-03-17
vue 权限管理 主题切换(8)
2019-03-17
Qt 在Excel文件中Chart绘图
2019-03-17
01-webpack5理解及配置
2019-03-17
webpack的安装和使用
2019-03-17
Vue.js学习-15-v-for循环数组内容
2019-03-17
kafka超时错误或者发送消息失败等错误,排错方式
2019-03-17
sockjs-node/info?t=1462183700002 报错解决方案
2019-03-17
FI 替代相关 OSS Note 要点记录
2019-03-17
蓝桥杯---试题 算法提高 欧拉函数(数学)
2019-03-17
【网络加速】TensorRT7-开发指南中文_Plus版【1】
2019-03-17
SaltStack about The Top File 使用知识介绍
2019-03-17
网络协议和支持(一)、uuid模块
2019-03-17
numpy.frombuffer()
2019-03-17
文件结束符EOF
2019-03-17
Latex 错误集合
2019-03-17