超高速指数模糊算法

网上有一篇非常快的模糊算法实现:SSE图像算法优化系列五:超高速指数模糊算法的实现和优化(10000*10000在100ms左右实现)。

名字叫  Exponential blur(指数模糊)

在搜材料时搜到只搜到了代码:blur.cpp

两个链接的核心代码就是

    *zR += (alpha * ((R << zprec) - *zR)) >> aprec;

事实上可以看出代码实现的就是 Deriche filter里提到的公式:  a first order IIR, which equation is: y[n] = a*x[n] + (1-a)*y[n-1]  。

一阶的alpha参数代码里使用的是:

int alpha = (int)((1 << aprec) * (1.0f - std::exp(-2.3f / (radius + 1.f))));

而恰好系数也是一直以来我存疑的地方,不知道该怎么设,自己使用的是

————————————————————————————————————————

总结:  也就是指数模糊实际上就是derich版的迭代高斯滤波,只不过实现的是特定alpha系数的一阶公式,同时使用了定点化,利用zprec,aprec参数控制精度。

Recursive filter笔记记录

似乎还有一个stack blur,原理以后有时间再看。

 

 

 

————————————————————————————————————

关于stack blur,查了些链接:Understanding super fast blur algorithm

Fastest Gaussian Blur (in linear time)

看上去也就是一个快速boxblur行列分离的加速方法,然后高斯blur基于3次boxblur拟合。就是我之前链接里提过的,高斯滤波综述paper里的一个比较出名的方法,缺陷就是精度了。

 

你可能感兴趣的:(算法)