0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何用FPGA并行高速運算實現(xiàn)實時的引導(dǎo)濾波算法

8XCt_sim_ol ? 來源:瘋狂的FPGA ? 作者:Im_CrazyBingo ? 2021-08-10 14:27 ? 次閱讀

前面一篇文章中,已經(jīng)詳細的分析了引導(dǎo)濾波的理論,公式的推導(dǎo),以及和雙邊濾波的對比分析,即在邊緣的處理上雙邊濾波會引起人為的黑/白邊。我們已經(jīng)知道何博士引導(dǎo)濾波的優(yōu)秀之處,那么本篇文章,我?guī)阃蒲?,如何?a target="_blank">FPGA并行高速運算,最小的代碼實現(xiàn)實時的引導(dǎo)濾波算法。

首先,給出上篇中最后的matlab 引導(dǎo)濾波的代碼,如下所示。

其中框框中為主要的計算過程,下一圖為計算a/b的最后的公式(引導(dǎo)圖=本身)。

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

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

雙邊濾波由于其只是在空間距離及像素相似度上進行權(quán)重計算,加權(quán)濾波,相對算法不是特別復(fù)雜,F(xiàn)PGA也易于實現(xiàn)(某司的USB工業(yè)相機2D濾波就是雙邊濾波),但是確實效果上不如引導(dǎo)濾波,那么引導(dǎo)濾波FPGA計算真有那么難嗎?為此我翻閱了一些資料,也從頭到尾推到計算了一遍,略有所成,出來和大家分享下。

在Matlab/C的加速中,引導(dǎo)濾波采用了盒式濾波的方式去加速,將運算復(fù)雜度從O(MN)的降低到了O(4),其方法就是先計算當前像素到原點像素組成的矩形區(qū)域的和/平方和等,對于線程的Matlab/C而言確實有很大的加速作用,相關(guān)的文章可以參考如下,對于軟件加速而言還是很不錯:

https://www.cnblogs.com/lwl2015/p/4460711.html

于是網(wǎng)上就有了一篇所謂的采用FPGA進行引導(dǎo)濾波加速的專利,鏈接如下:

https://www.doc88.com/p-4377429794731.html?r=1

另附上架構(gòu)實現(xiàn)圖,但我估計這幾個小朋友還沒有想明白boxfilter是怎么回事,生搬硬套軟件boxfilter加速的思維嘛???

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

圖中,計算均值,平方均值,a的均值,b的均值采用了4個boxfilter,也就是說如果輸入1280*720的圖像,那就需要緩存4個那么大地址空間的區(qū)域來存儲中間變量,這顯然是不適合FPGA加速運算的啊。FPGA的意義在于高速并行技術(shù),盡可能的避免沖入進入緩存,而是以Pipeline的方式流水線完成運算,實現(xiàn)真正低延時+實時處理的目標。

所以為什么不能流水線完成所有的計算操作呢?

不服來戰(zhàn),沒有啥難度的……下面開始我的表演。

【第一步】

以3*3的濾波為例(這里的引導(dǎo)圖都是原圖),按行從傳感器或者DDR中讀取原圖,采用移位寄存后得到3*3的矩陣行,如下所示:

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

如上圖中,以P00-P22為例,這9個像素,我們可以通過計算得均值,以及平方的均值,緊接著繼續(xù)計算得到a與吧,詳見下圖,其中相關(guān)的參數(shù)定義如下:

P原始圖像像素集

Pm以當前像素為中心的3*3像素的均值

PPm以當前像素為中心的3*3像素平方的均值

sum1以當前像素為中心的3*3像素的和

sum1以當前像素為中心的3*3像素平方的和

a以當前像素為中心計算的參數(shù)a

b以當前像素為中心計算的參數(shù)b

am以當前像素為中心的3*3像素的a均值

bm以當前像素為中心的3*3像素的b均值

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

從上圖可知,通過三行組成的矩陣,以流水線方式,最快用了6個時鐘得到了參數(shù)a與b;

由于全圖流水線運行,因此從第6個時鐘開始,將持續(xù)的輸出每一個像素對應(yīng)的a與b,等同于我們通過這一階段的實現(xiàn)方式,得到了參數(shù)a/b陣列。

另外,上圖中可知,除以9的運算我已經(jīng)默默轉(zhuǎn)換為乘法與移位,clk4中將涉及到的小數(shù)點,已經(jīng)提前擴大了1024倍,同等的b中也做了變更(紅/藍色字體),這就是FPGA定點化的加速的方式。

再者,由于最后的計算還需要P的參與,因此上述步驟中,需要將輸入的原始圖像進行移位延時,最終能和后續(xù)am/bm對齊。

【第二步】

接下來,進一步計算am與bm,這個就簡單的多了,類似第一步,直接緩存3行得到3*3的矩陣行,通過加權(quán)后得到am與bm。這個過程中am與bm的計算可以完全并行,每個am/bm的計算耗時3個時鐘。

詳見下圖計算流:

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

【第三步】

此時我們已經(jīng)同時得到了am,bm,以及通過移位delay后和am/bm對齊的P,那么直接套用公式,我們就可以計算出每一個像素濾波后的值:

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

這里還需要右移10bit,是因為前面第一步中,由于涉及到了小數(shù),我們提前進行了1024倍的擴大,來減少計算誤差的損失。

至此,流水線操作,沒有使用boxfilter,沒有將數(shù)據(jù)回寫入DDR,我們采用了若干行l(wèi)ine buffer的形式,完成了實時引導(dǎo)濾波的FPGA加速實現(xiàn)。

整體流程再梳理一下,相關(guān)的依賴以及流水方式,如下圖所示,應(yīng)該可以看的更明白。其中綠色為第一步計,灰色為第二步計算,紅色為最后一步計算。

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

所以,這就是FPGA并行加速運算的價值與意義,按照我的實現(xiàn)方式,可以用最小的代碼實現(xiàn)實時的引導(dǎo)濾波,甚至連低端的EP4CE6E都不是問題。

同樣一個算法,可以有n種實現(xiàn)方式,你甚至可以把算法挪到MPSOC的PS中執(zhí)行,然后忍受龜速的同時你可能還會抱怨FPGA跑的慢,CPU性能不足之類的,但是永遠不要忘記,架構(gòu)的意義。正如軟件的優(yōu)化,其實很多時候,并不是算法本身不行,而是你對系統(tǒng)底層,對計算優(yōu)化的能力不行。

為什么我喜歡用FPGA加速,因為每一個門級電路,以何種并行度何種方式進行計算,一切都可以在我的掌控之中。

所以當年我說過一句話:掌握了FPGA,你便掌握了整個世界。

至此,從均值濾波到中值濾波、高斯濾波、雙邊濾波、引導(dǎo)濾波這些通用的2D降噪算法,我都已經(jīng)通過公眾號/知識星球/博客的方式,從原理到FPGA加速實現(xiàn)闡述明白。

如果在這之間有任何疑問,或者我有什么不到之處的,歡迎以各種方式來跟我討論(伸手黨麻煩出門右轉(zhuǎn))。

謝謝大家!

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • FPGA
    +關(guān)注

    關(guān)注

    1621

    文章

    21517

    瀏覽量

    599387
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    10724

    瀏覽量

    209653
  • 濾波
    +關(guān)注

    關(guān)注

    10

    文章

    653

    瀏覽量

    56475

原文標題:基于FPGA的引導(dǎo)濾波并行加速實現(xiàn) 推演

文章出處:【微信號:sim_ol,微信公眾號:模擬在線】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    何用FPGA實現(xiàn)一個通信系統(tǒng)的發(fā)射端接收機?

    。 同步與均衡:處理信號的同步問題,并進行均衡以補償信道的失真。 在實際實現(xiàn)中,還需要考慮以下關(guān)鍵技術(shù)和要點: 時鐘管理:確保 FPGA 內(nèi)部的時鐘穩(wěn)定和準確,以支持高速的數(shù)據(jù)處理。 資源優(yōu)化:合理
    發(fā)表于 09-10 19:15

    FPGA在自動駕駛領(lǐng)域有哪些應(yīng)用?

    的數(shù)據(jù)處理和預(yù)處理,實現(xiàn)實時計算和反饋。 二、數(shù)據(jù)傳輸與處理FPGA在自動駕駛中扮演著數(shù)據(jù)傳輸和處理的角色。它能夠支持多種傳感器(如激光雷達、攝像頭、GPS等)的數(shù)據(jù)傳輸,并通過其高速的數(shù)據(jù)處理能力,
    發(fā)表于 07-29 17:09

    FPGA在人工智能中的應(yīng)用有哪些?

    ,FPGA可以有效地處理深度學(xué)習(xí)中的大規(guī)模并行運算,從而提高深度學(xué)習(xí)應(yīng)用的效率。 定制化計算:FPGA的高度可編程性使其可以針對特定的應(yīng)用場景和算法進行定制化的硬件設(shè)計。這意味著,如果
    發(fā)表于 07-29 17:05

    FPGA與MCU的應(yīng)用場景

    大量計算任務(wù),這在實時處理等應(yīng)用中尤為重要。 高性能計算 FPGA在處理復(fù)雜算法和大規(guī)模數(shù)據(jù)時表現(xiàn)出色,特別是在人工智能(AI)和機器學(xué)習(xí)(ML)領(lǐng)域。它們可以加速神經(jīng)網(wǎng)絡(luò)的訓(xùn)練和推理過程。 所以適合
    發(fā)表于 07-29 15:45

    在多FPGA集群上實現(xiàn)高級并行編程

    今天我們看的這篇論文介紹了在多FPGA集群上實現(xiàn)高級并行編程的研究,其主要目標是為非FPGA專家提供一個成熟且易于使用的環(huán)境,以便在多個并行
    的頭像 發(fā)表于 07-24 14:54 ?794次閱讀

    FPGA設(shè)計經(jīng)驗之圖像處理

    算法根本就達不到實時。另外別小看了這種NxN算子法,它可以有各種組合和玩法,可以實現(xiàn)分選多種顏色,甚至分辨簡單形狀等功能。FPGA進行的這種算子法處理是
    發(fā)表于 06-12 16:26

    matlab與FPGA數(shù)字信號處理系列 Verilog 實現(xiàn)并行 FIR 濾波

    FPGA 實現(xiàn) FIR 濾波器時,最常用的是直接型結(jié)構(gòu),簡單方便,在實現(xiàn)直接型結(jié)構(gòu)時,可以選擇串行結(jié)構(gòu)/并行結(jié)構(gòu)/分布式結(jié)構(gòu)。
    發(fā)表于 05-24 07:48

    基于FPGA實時邊緣檢測系統(tǒng)設(shè)計,Sobel圖像邊緣檢測,FPGA圖像處理

    運行時, FPGA 并行運算平臺首先完成對攝像頭的初始化和寄存器配置,配置完成之后讀取實時的圖像數(shù)據(jù)存入 SDRAM 存儲器中,在 FPGA 芯片內(nèi)部
    發(fā)表于 05-24 07:45

    基于多速率DA的根升余弦濾波器的FPGA實現(xiàn)

    ,每相仍然相當于低階的FIR濾波器,下節(jié)對其采用DA算法,可以看到運算速度將進一步提高,運算量也將大幅減少。3、多速率DA根升余弦濾波器的結(jié)
    發(fā)表于 03-25 14:21

    如何使用FPGA驅(qū)動并行ADC和并行DAC芯片?

    ADC和DAC是FPGA與外部信號的接口,從數(shù)據(jù)接口類型的角度劃分,有低速的串行接口和高速并行接口。
    的頭像 發(fā)表于 02-22 16:15 ?3135次閱讀
    如何使用<b class='flag-5'>FPGA</b>驅(qū)動<b class='flag-5'>并行</b>ADC和<b class='flag-5'>并行</b>DAC芯片?

    詳解FPGA六大應(yīng)用領(lǐng)域

    容易地實現(xiàn)分布式的算法結(jié)構(gòu),這一點對于實現(xiàn)無線通信中的高速數(shù)字信號處理十分有利。 因為在無線通信系統(tǒng)中,許多功能模塊通常都需要大量的濾波
    發(fā)表于 01-17 17:03

    怎么用FPGA算法 如何在FPGA實現(xiàn)最大公約數(shù)算法

    FPGA算法的優(yōu)點在于它們可以提供高度的定制化和靈活性,使得算法可以根據(jù)實際需求進行優(yōu)化和調(diào)整。此外,FPGA還可以實現(xiàn)硬件加速,提供比傳統(tǒng)
    的頭像 發(fā)表于 01-15 16:03 ?1595次閱讀

    浮點LMS算法FPGA實現(xiàn)

    引言 LMS(最小均方)算法因其收斂速度快及算法實現(xiàn)簡單等特點在自適應(yīng)濾波器、自適應(yīng)天線陣技術(shù)等領(lǐng)域得到了十分廣泛的應(yīng)用。為了發(fā)揮算法的最佳
    的頭像 發(fā)表于 12-21 16:40 ?608次閱讀

    詳解從均值濾波到非局部均值濾波算法的原理及實現(xiàn)方式

    將再啰嗦一次,詳解從均值濾波到非局部均值濾波算法的原理及實現(xiàn)方式。 細數(shù)主要的2D降噪算法,如下圖所示,從最基本的均值
    的頭像 發(fā)表于 12-19 16:30 ?886次閱讀
    詳解從均值<b class='flag-5'>濾波</b>到非局部均值<b class='flag-5'>濾波</b><b class='flag-5'>算法</b>的原理及<b class='flag-5'>實現(xiàn)</b>方式

    何用FPGA實現(xiàn)FFT算法

    長度N的平方成正比。當N較大時,因計算量太大,直接用DFT算法進行譜分析和信號的實時處理是不切實際的。快速傅立葉變換(Fast Fourier Transformation,簡稱FFT)使DFT運算效率
    的頭像 發(fā)表于 10-09 14:30 ?1288次閱讀