前面一篇文章中,已经详细的分析了引导滤波的理论,公式的推导,以及和双边滤波的对比分析,即在边缘的处理上双边滤波会引起人为的黑/白边。我们已经知道何博士引导滤波的优秀之处,那么本篇文章,我带你推演,如何用FPGA并行高速运算,最小的代码实现实时的引导滤波算法。
首先,给出上篇中最后的matlab 引导滤波的代码,如下所示。
其中框框中为主要的计算过程,下一图为计算a/b的最后的公式(引导图=本身)。
双边滤波由于其只是在空间距离及像素相似度上进行权重计算,加权滤波,相对算法不是特别复杂,FPGA也易于实现(某司的USB工业相机2D滤波就是双边滤波),但是确实效果上不如引导滤波,那么引导滤波FPGA计算真有那么难吗?为此我翻阅了一些资料,也从头到尾推到计算了一遍,略有所成,出来和大家分享下。
在Matlab/C的加速中,引导滤波采用了盒式滤波的方式去加速,将运算复杂度从O(MN)的降低到了O(4),其方法就是先计算当前像素到原点像素组成的矩形区域的和/平方和等,对于线程的Matlab/C而言确实有很大的加速作用,相关的文章可以参考如下,对于软件加速而言还是很不错:
https://www.cnblogs.com/lwl2015/p/4460711.html
于是网上就有了一篇所谓的采用FPGA进行引导滤波加速的专利,链接如下:
https://www.doc88.com/p-4377429794731.html?r=1
另附上架构实现图,但我估计这几个小朋友还没有想明白boxfilter是怎么回事,生搬硬套软件boxfilter加速的思维嘛???