FPGA图像算法.导向滤波
好些天没更新了,今天狼哥和大家伙来聊聊何凯明大神的导向滤波,导向滤波比起双边滤波来说在边界附近效果较好;另外,它还具有 O(N) 的线性时间的速度优势。除了速度优势以外,导向滤波的一个很好的性能就是可以保持梯度,这是bilateral做不到的,因为会有梯度翻转现象。
引导滤波的功能不仅仅是边缘保持,只有当引导图是原图的时候,它就成了一个边缘保持滤波器。除此之外,它在图像去雾,图像抠图上均有相应的应用。
具体原理讲解参考《导向滤波原理(Guided Filter) - 知乎 (zhihu.com)》.江户川柯壮以及公式推导参考《引导滤波/导向滤波(Guided Filter) - 简书 (jianshu.com)》,这两个文章讲解的比较清晰了,狼哥就不细讲,直接搬运了。
我们具体来看看实现步骤

首先输入的参数会有四个,输入的图像p,导向图像I,滤波半径r,决定滤波核的大小,以及调整因子e,这个可以调节滤波的模糊效果。对于FPGA来说实际上也可以认为是3个参数,因为滤波核在实现后基本就固定了。
整个的实现步骤分成5大步,第一步就是求均值,涉及到四个均值的求取,分别是I、P、I平方、P平方的均值,所以这里会涉及到均值滤波器的实现;然后在第一步的基础上求方差和协方差,有了第一步,第二步就很好实现了;第一、二步里的小步骤实际可以同时处理进行,第三步里的两个步骤,实际是有依赖关系的,需要串行实现,实现起来主要还是除法以及均值;第四步就是把第三步出来的a、b参数做均值滤波;第五步就是拿最原始的图像和a、b均值滤波后的数据做乘法和加法运算。
可以看出实现的重头戏是均值滤波以及处理浮点除法和乘法,均值滤波里面也会涉及到乘除法的处理,有兴趣的可以看看我前面的文章FPGA图像处理入门—part4.除法运算,里面会介绍一些IP和处理技巧。整个的FPGA实现框架如下,可以看到模块的划分与步骤比较一致。

整个实现占用的资源可以分成两种情况,如果I、P用同样的图片,资源可以节省一些。两个对比如下,下图是I、P用同样的图片,资源上,lut少了1k,dsp少了28个,省了将近一半,bram少了2个,整个下来还是很可观的,两个模式切换只需要修改一个参数即可。


最后放一个仿真的结果和matlab的效果对比图,左半边是FPGA实现效果,右边是matlab效果,由于FPGA使用的定点方式实现的,整体效果比起用浮点处理的matlab细节上会差一点,不考虑资源的可以用浮点处理方式去优化效果。

导向滤波获取途径-->淘宝店铺:胡狼FPGA 咨询微信:MyWork666888 QQ交流群:539625033

浙公网安备 33010602011771号