在ios中快速径向模糊

时间:2016-07-28 03:55:23

标签: ios opencv image-processing opengl-es

我想在iOS上做一个闪耀效果,看起来像这样

enter image description here

我在OpenCV中找到了径向模糊算法(https://stackoverflow.com/a/13699826/6545468)  ,结果不太令人满意

enter image description here

光束是"离散的",最终结果取决于remap(缩放)的迭代,这是耗时的。 我还发现了一些OpenGL着色器,只是类似的实现。

那么,有没有办法在iOS App中实现After Effects CC Radial Fast Blur(流畅而快速)?

1 个答案:

答案 0 :(得分:0)

查看顶部图像我会说你无法在普通图像上快速做到这一点。虽然这实际上取决于图像大小和“快速”的定义,但我们可以说,在尺寸为1024x1024的图像上将其绘制在1秒以内将是一个挑战。

对于一般图像,您将有2个程序:

首先是将褪色的图像browserControl.Navigate("javascript:void(funcion())"); 重绘到画布,其中N是最大效果偏移所具有的像素数。在顶部图像上意味着疯狂的200次重绘。如果您有一些openGL系统,您可以尝试测试绘制这么多样本所需的时间(没有任何影响,只需重绘为纹理),如果您接近所需的结果,您可以尝试实现实际的逻辑。

第二个是获取每个片段(像素)的周围相关样本,这是高斯模糊最常用的过程。此过程通常使用7x7到11x11范围内的像素矩阵,并且仍然是一个缓慢而繁重的操作,并且在大图像上效果不是很模糊。在你的情况下,我们再次看到大约200x200的样品,这是一个完全NO-NO,我甚至都不打算尝试它。

如果您尝试将两个程序结合起来,事情可能会变得有趣。您可以尝试使用第二个过程模糊输入图像,这将有效地将对象放大几个像素。然后,您可以(仅用于光泽)使用第一个过程重绘模糊图像,减少样本数量。例如,如果模糊的大小约为5个像素,那么您可以将重绘次数减少2-3次,这可能会提高性能。虽然这个过程不会像你所拥有的图像那样清晰,但是你很幸运:你发布的第二张图片已经完全符合测试要求。只需创建您正在使用的图像的模糊版本,并测试需要多少样本才能获得良好的结果。

仍然有很多可能的优化可能会影响效果的质量,也可能不会影响效果的质量。如果您正在进行高斯模糊,通常可以安全地对图像进行下采样。每个维度2的比例将碎片的数量减少4并且肯定要尝试。我会尝试以下方法:

  • 在纹理上使用线性模式直接应用高斯模糊将图像绘制到下采样缓冲区
  • 重绘一些N个样本以获得下采样缓冲区的光照效果
  • 将结果重新绘制到上采样缓冲区(原始大小),再次应用一些高斯模糊
  • 在生成的阴影上绘制原始图像

如果您要做其中任何一项,请确保跟踪性能。完成后,如果你分享结果(即使你失败了)也会很好。