0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何用FPGA并行高速运算实现实时的引导滤波算法

8XCt_sim_ol 来源:疯狂的FPGA 作者:Im_CrazyBingo 2021-08-10 14:27 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

前面一篇文章中,已经详细的分析了引导滤波的理论,公式的推导,以及和双边滤波的对比分析,即在边缘的处理上双边滤波会引起人为的黑/白边。我们已经知道何博士引导滤波的优秀之处,那么本篇文章,我带你推演,如何用FPGA并行高速运算,最小的代码实现实时的引导滤波算法

首先,给出上篇中最后的matlab 引导滤波的代码,如下所示。

其中框框中为主要的计算过程,下一图为计算a/b的最后的公式(引导图=本身)。

b50e7686-f82c-11eb-9bcf-12bb97331649.png

b51c9ebe-f82c-11eb-9bcf-12bb97331649.png

双边滤波由于其只是在空间距离及像素相似度上进行权重计算,加权滤波,相对算法不是特别复杂,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加速的思维嘛???

b5275160-f82c-11eb-9bcf-12bb97331649.png

图中,计算均值,平方均值,a的均值,b的均值采用了4个boxfilter,也就是说如果输入1280*720的图像,那就需要缓存4个那么大地址空间的区域来存储中间变量,这显然是不适合FPGA加速运算的啊。FPGA的意义在于高速并行技术,尽可能的避免冲入进入缓存,而是以Pipeline的方式流水线完成运算,实现真正低延时+实时处理的目标。

所以为什么不能流水线完成所有的计算操作呢?

不服来战,没有啥难度的……下面开始我的表演。

【第一步】

以3*3的滤波为例(这里的引导图都是原图),按行从传感器或者DDR中读取原图,采用移位寄存后得到3*3的矩阵行,如下所示:

b5a8fec2-f82c-11eb-9bcf-12bb97331649.png

如上图中,以P00-P22为例,这9个像素,我们可以通过计算得均值,以及平方的均值,紧接着继续计算得到a与吧,详见下图,其中相关的参数定义如下:

P原始图像像素集

Pm以当前像素为中心的3*3像素的均值

PPm以当前像素为中心的3*3像素平方的均值

sum1以当前像素为中心的3*3像素的和

sum1以当前像素为中心的3*3像素平方的和

a以当前像素为中心计算的参数a

b以当前像素为中心计算的参数b

am以当前像素为中心的3*3像素的a均值

bm以当前像素为中心的3*3像素的b均值

b5c4d99e-f82c-11eb-9bcf-12bb97331649.png

从上图可知,通过三行组成的矩阵,以流水线方式,最快用了6个时钟得到了参数a与b;

由于全图流水线运行,因此从第6个时钟开始,将持续的输出每一个像素对应的a与b,等同于我们通过这一阶段的实现方式,得到了参数a/b阵列。

另外,上图中可知,除以9的运算我已经默默转换为乘法与移位,clk4中将涉及到的小数点,已经提前扩大了1024倍,同等的b中也做了变更(红/蓝色字体),这就是FPGA定点化的加速的方式。

再者,由于最后的计算还需要P的参与,因此上述步骤中,需要将输入的原始图像进行移位延时,最终能和后续am/bm对齐。

【第二步】

接下来,进一步计算am与bm,这个就简单的多了,类似第一步,直接缓存3行得到3*3的矩阵行,通过加权后得到am与bm。这个过程中am与bm的计算可以完全并行,每个am/bm的计算耗时3个时钟。

详见下图计算流:

b5e7fa0a-f82c-11eb-9bcf-12bb97331649.png

【第三步】

此时我们已经同时得到了am,bm,以及通过移位delay后和am/bm对齐的P,那么直接套用公式,我们就可以计算出每一个像素滤波后的值:

即输出Q=(am*P+bm)》》10

这里还需要右移10bit,是因为前面第一步中,由于涉及到了小数,我们提前进行了1024倍的扩大,来减少计算误差的损失。

至此,流水线操作,没有使用boxfilter,没有将数据回写入DDR,我们采用了若干行line buffer的形式,完成了实时引导滤波的FPGA加速实现。

整体流程再梳理一下,相关的依赖以及流水方式,如下图所示,应该可以看的更明白。其中绿色为第一步计,灰色为第二步计算,红色为最后一步计算。

b6268dec-f82c-11eb-9bcf-12bb97331649.png

所以,这就是FPGA并行加速运算的价值与意义,按照我的实现方式,可以用最小的代码实现实时的引导滤波,甚至连低端的EP4CE6E都不是问题。

同样一个算法,可以有n种实现方式,你甚至可以把算法挪到MPSOC的PS中执行,然后忍受龟速的同时你可能还会抱怨FPGA跑的慢,CPU性能不足之类的,但是永远不要忘记,架构的意义。正如软件的优化,其实很多时候,并不是算法本身不行,而是你对系统底层,对计算优化的能力不行。

为什么我喜欢用FPGA加速,因为每一个门级电路,以何种并行度何种方式进行计算,一切都可以在我的掌控之中。

所以当年我说过一句话:掌握了FPGA,你便掌握了整个世界。

至此,从均值滤波到中值滤波、高斯滤波、双边滤波、引导滤波这些通用的2D降噪算法,我都已经通过公众号/知识星球/博客的方式,从原理到FPGA加速实现阐述明白。

如果在这之间有任何疑问,或者我有什么不到之处的,欢迎以各种方式来跟我讨论(伸手党麻烦出门右转)。

谢谢大家!

编辑:jq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1655

    文章

    22283

    浏览量

    630223
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222928
  • 滤波
    +关注

    关注

    10

    文章

    699

    浏览量

    57823

原文标题:基于FPGA的引导滤波并行加速实现 推演

文章出处:【微信号:sim_ol,微信公众号:模拟在线】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    何用FPGA控制ADV7513实现HDMI画面显示和音频播放

    HDMI接口显示使用DMT时序+TMDS编码来实现。当用FPGA控制HDMI的数据传输时,通常可以采用纯RTL实现TMDS算法或者使用专门的HDMI芯片(如ADV7513)这两种方案来
    的头像 发表于 12-02 11:05 2407次阅读
    如<b class='flag-5'>何用</b><b class='flag-5'>FPGA</b>控制ADV7513<b class='flag-5'>实现</b>HDMI画面显示和音频播放

    复杂的软件算法硬件IP核的实现

    ,使用编译和优化技术将可以并行执行的、没有 前后依赖关系的操作步骤被集中起来对应于一个有限状态机的某一个状态从而实现并行处理,而运算则对应于一些组合逻辑电路。即将
    发表于 10-30 07:02

    优化boot4的乘法运算周期

    可以在不同的时钟周期内完成,从而并行运算流程,提高乘法器的运算性能。 采用多级压缩:在Boot4乘法器中,使用了基于连乘算法的多级压缩技术。可以通过增加多级压缩,进一步降低管理乘法器
    发表于 10-21 13:17

    何用FPGA实现4K视频的输入输出与处理

    在游戏、影视和显示领域,4K 已经成为标配。而今天,我们就来聊聊——如何用 FPGA 实现 4K 视频的输入输出与处理。
    的头像 发表于 10-15 10:47 1660次阅读
    如<b class='flag-5'>何用</b><b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>4K视频的输入输出与处理

    25年11月上海FPGA算法实现与应用技术高级研修分享

    器的设计。   第六章: NCO的算法实现:NCO(数字控制振荡器)是做频率搬移和相位搬移的重要算法,也是数字中频设计常用的设计模块。   第七章: FRM滤波器设计:FRM
    发表于 10-11 11:55

    数据滤波算法的具体实现步骤是怎样的?

      数据滤波算法在电能质量在线监测装置中的具体实现,需围绕 “ 数据采集→预处理→算法执行→参数适配→效果验证→结果输出 ” 的全流程展开,核心是结合装置硬件特性(采样率、ADC 精度
    的头像 发表于 10-10 16:45 427次阅读

    友思特方案 | FPGA 加持,友思特图像采集卡高速预处理助力视觉系统运行提速增效

    图像预处理是图像处理关键中间环节,通过优化传感器到主机的数据传输处理为后续减负。其算法依托硬件执行,搭载 FPGA 的友思特图像采集卡以高速运算
    的头像 发表于 08-20 09:18 596次阅读
    友思特方案 | <b class='flag-5'>FPGA</b> 加持,友思特图像采集卡<b class='flag-5'>高速</b>预处理助力视觉系统运行提速增效

    基于FPGA实现FOC算法之PWM模块设计

    哈喽,大家好,从今天开始正式带领大家从零到一,在FPGA平台上实现FOC算法,整个算法的框架如下图所示,如果大家对算法的原理不是特别清楚的话
    的头像 发表于 07-17 15:21 3120次阅读
    基于<b class='flag-5'>FPGA</b><b class='flag-5'>实现</b>FOC<b class='flag-5'>算法</b>之PWM模块设计

    基于Matlab与FPGA的双边滤波算法实现

    前面发过中值、均值、高斯滤波的文章,这些只考虑了位置,并没有考虑相似度。那么双边滤波来了,既考虑了位置,有考虑了相似度,对边缘的保持比前几个好很多,当然实现上也是复杂很多。本文将从原理入手,采用Matlab与
    的头像 发表于 07-10 11:28 4076次阅读
    基于Matlab与<b class='flag-5'>FPGA</b>的双边<b class='flag-5'>滤波</b><b class='flag-5'>算法</b><b class='flag-5'>实现</b>

    基于FPGA的压缩算法加速实现

    本设计中,计划实现对文件的压缩及解压,同时优化压缩中所涉及的信号处理和计算密集型功能,实现对其的加速处理。本设计的最终目标是证明在充分并行化的硬件体系结构 FPGA
    的头像 发表于 07-10 11:09 2076次阅读
    基于<b class='flag-5'>FPGA</b>的压缩<b class='flag-5'>算法</b>加速<b class='flag-5'>实现</b>

    进群免费领FPGA学习资料!数字信号处理、傅里叶变换与FPGA开发等

    ~ 01、数字信号处理的FPGA实现 旨在讲解前端数字信号处理算法的高效实现。首先概述了当前的FPGA技术、器件以及用于设计最先进DSP系
    发表于 04-07 16:41

    如何使用FPGA驱动并行ADC和DAC芯片,使用不同编码方式的ADC与DAC时的注意事项

    ADC和DAC是FPGA与外部信号的接口,从数据接口类型的角度划分,有低速的串行接口和高速并行接口。FPGA经常用来采集中高频信号,因此使用并行
    的头像 发表于 03-14 13:54 1827次阅读
    如何使用<b class='flag-5'>FPGA</b>驱动<b class='flag-5'>并行</b>ADC和DAC芯片,使用不同编码方式的ADC与DAC时的注意事项

    当我问DeepSeek AI爆发时代的FPGA是否重要?答案是......

    在AI时代,FPGA(现场可编程门阵列)具有极其重要的地位,主要体现在以下几个方面: 1.硬件加速与高效能 • 并行处理能力:FPGA内部由大量可编程逻辑单元组成,能够实现高度
    发表于 02-19 13:55

    FPGA在磁致伸缩位移传感器中的应用

    FPGA在磁致伸缩位移传感器中用于信号处理、数据采集等,其高并行处理、可编程性提升了传感器速度、精度,支持复杂算法实现实时控制,优化系统响应,是传感器高效、精准、智能化的核心。
    的头像 发表于 02-17 14:48 695次阅读

    FPGA上的图像处理算法集成与优化

    、Tophat形态学滤波、RAW8转RGB888、彩色图像均值滤波、Alpha背景叠加、直方图灰度拉伸算法以及自动白平衡算法。每种算法都提供
    的头像 发表于 02-14 13:46 1151次阅读
    <b class='flag-5'>FPGA</b>上的图像处理<b class='flag-5'>算法</b>集成与优化