gpt4 book ai didi

ios - GPUImage:标准化 GPUImageGaussianSelectiveBlurFilter 的模糊大小跨多个图像大小

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:22:12 25 4
gpt4 key购买 nike

我想使用 Brad Larson 的 GPUImage 的 GPUImageGaussianSelectiveBlurFilter 在不同分辨率的图像中保持相对恒定的模糊大小。

假设我有两张尺寸分别为 1000x1000 和 2000x2000 的图片,我希望 2000x2000 的模糊显示与 1000x1000 的尺寸相同。所以我在 1000x1000 上将模糊大小设置为 1.0,在 2000x2000 上设置为 2.0。我想要的模糊通常需要较大图像上的模糊大小远高于 1.0。

((GPUImageGaussianSelectiveBlurFilter *)self._selectiveFocusFilterSmall).blurSize = 1.0;
((GPUImageGaussianSelectiveBlurFilter *)self._selectiveFocusFilterLarge).blurSize = 2.0;

然后我强制处理大小。没有这个,模糊将不会被归一化:

[self._selectiveFocusFilterSmall forceProcessingAtSize:CGSizeMake(1000, 1000)];
[self._selectiveFocusFilterLarge forceProcessingAtSize:CGSizeMake(2000, 2000)];

小:

small
(来源:kevinharringtonphoto.com)

大:

large
(来源:kevinharringtonphoto.com)

近距离观察:

close
(来源:kevinharringtonphoto.com)

如何在保持模糊大小的同时去除较大模糊图像中的装箱?我很想知道是否有更好的方法来使用 GPUImage 跨多个图像标准化模糊大小。

最佳答案

您在高 blurSize 设置下看到的那些框状伪像是 GPUImage 中处理高斯模糊的方式的副产品。为了确保最佳性能,在我采用的高斯模糊内核中使用了固定数量的样本 (9)。模糊分为水平和垂直 channel ,仅使用 18 次纹理读取在 81 像素区域上运行。

blurSize 参数调整样本间距。在 1.0 时,它是一个像素/纹素,但随着模糊半径的扩大,更高的值开始导致像素被跳过。超过 1.5 左右时,由于模糊内核跳过了较大的像素 block ,开始出现如上图所示的伪像。

出于性能原因,我硬编码了 9 个样本,并在顶点着色器中计算了它们的权重和位置。向片段着色器提供预先计算的值可避免依赖纹理读取,并可使 iOS 设备上的着色器性能提高十倍以上。添加一个具有可变数量的高斯样本的 for 循环会进一步减慢速度。

不过,可能有一种方法可以将模糊泛化为对一些较小的模糊使用可变数量的预先计算的高斯样本,然后对较大的模糊尺寸使用更昂贵的 for 循环。

关于ios - GPUImage:标准化 GPUImageGaussianSelectiveBlurFilter 的模糊大小跨多个图像大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16366016/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com