高斯滤波考虑了像素间的距离关系,会模糊边缘;
双边滤波同时考虑了像素间的距离关系以及相似度关系,对于边缘有一定的保护(边缘同侧相速度高)。引导滤波同样是保边滤波,由于直接判断梯度,细节的保护上比双边滤波要好一点。
引导滤波用到了局部线性模型,该模型可用下图简单的理解:
该模型认为,某函数上一点与其邻近部分的点成线性关系,一个复杂的函数就可以用很多局部的线性函数来表示,当需要求该函数上某一点的值时,只需计算所有包含该点的线性函数的值并做平均即可。这种模型,在表示非解析函数上,非常有用。
上述部分也就是下图,梯度变化就是边缘的地方,同一个图像原图和滤波后的图梯度应该保持一致,才能有效的保护边缘。所以引导图意义在于告诉我们,哪里是平滑区域,哪里是边缘区域,如求得a、b,就可以得到滤波输出。
由上,得到如下公式:
详细推导:https://blog.csdn.net/weixin_43194305/article/details/88959183
关于最小二乘法数学理论,请参考如下链接,我也是恶补后才有所回忆的,https://www.matongxue.com/madocs/818/
matongxue网站对最小二乘法的理论分析,真的写的很好!法国数学家,阿德里安-馬里·勒讓德提出让总的误差的平方最小的结果就是真值,这是基于,如果误差是随机的,应该围绕真值上下波动(如果误差是正态分布,那么最小二乘法得到的就是最有可能的值——这是必然的)。
当引导滤波作为边缘保持滤波时,引导图就是本身,即I=p,则上述公式升级:
另外,即为滤波强度系数:
继续分析,看看引导滤波的相关代码如下所示(盒式滤波是加速的关键):
最后,回到何凯明博士的paper《Guided Image Filtering》中,借鉴相关结论。首先可以看到引导滤波相对双边滤波,对于边缘的保护确实好了很多。具体到测试图中,可见双突滤波虽然保护了边缘,但会引起白/黑边,而导向滤波则不会。虽然计算量大了很多,但是对于图像效果的提升,还是很显著,怪不得何博士一举成名。
至于如何FPGA加速运算,涉及并行思维,后续独立成篇,详见下一篇文章。
参考文章:
https://www.pianshen.com/article/65711567000/
https://blog.csdn.net/weixin_43194305/article/details/88959183
https://blog.csdn.net/pi9nc/article/details/26592377
https://blog.csdn.net/piaoxuezhong/article/details/78372787
成也FPGA,败也FPGA;
FPGA图像算法加速,我将持续的跟大家分享架构思维,愿能畅所欲言。