国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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
    +關注

    關注

    1660

    文章

    22412

    瀏覽量

    636312
  • cpu
    cpu
    +關注

    關注

    68

    文章

    11279

    瀏覽量

    224988
  • 濾波
    +關注

    關注

    10

    文章

    703

    瀏覽量

    57979

原文標題:基于FPGA的引導濾波并行加速實現 推演

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

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    何用FPGA控制ADV7513實現HDMI畫面顯示和音頻播放

    HDMI接口顯示使用DMT時序+TMDS編碼來實現。當用FPGA控制HDMI的數據傳輸時,通常可以采用純RTL實現TMDS算法或者使用專門的HDMI芯片(如ADV7513)這兩種方案來
    的頭像 發表于 12-02 11:05 ?6798次閱讀
    如<b class='flag-5'>何用</b><b class='flag-5'>FPGA</b>控制ADV7513<b class='flag-5'>實現</b>HDMI畫面顯示和音頻播放

    SM4算法實現分享(一)算法原理

    SM4分組加密算法采用的是非線性迭代結構,以字為單位進行加密、解密運算,每次迭代稱為一輪變換,每輪變換包括S盒變換、非線性變換、線性變換、合成變換。加解密算法與密鑰擴展都是采用32輪非線性迭代結構
    發表于 10-30 08:10

    復雜的軟件算法硬件IP核的實現

    ,使用編譯和優化技術將可以并行執行的、沒有 前后依賴關系的操作步驟被集中起來對應于一個有限狀態機的某一個狀態從而實現并行處理,而運算則對應于一些組合邏輯電路。即將
    發表于 10-30 07:02

    優化boot4的乘法運算周期

    可以在不同的時鐘周期內完成,從而并行運算流程,提高乘法器的運算性能。 采用多級壓縮:在Boot4乘法器中,使用了基于連乘算法的多級壓縮技術。可以通過增加多級壓縮,進一步降低管理乘法器
    發表于 10-21 13:17

    何用FPGA實現4K視頻的輸入輸出與處理

    在游戲、影視和顯示領域,4K 已經成為標配。而今天,我們就來聊聊——如何用 FPGA 實現 4K 視頻的輸入輸出與處理。
    的頭像 發表于 10-15 10:47 ?2125次閱讀
    如<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 ?813次閱讀

    電源控制器MCU硬件在環(HIL)測試方案

    高速并行仿真需求。 ? 單模型分割運行: 允許單模型分割 CPU 和 FPGA 中獨立運行,實現電力電子主電路、控制算法和PWM生成模塊的
    發表于 08-20 18:31

    友思特方案 | FPGA 加持,友思特圖像采集卡高速預處理助力視覺系統運行提速增效

    圖像預處理是圖像處理關鍵中間環節,通過優化傳感器到主機的數據傳輸處理為后續減負。其算法依托硬件執行,搭載?FPGA?的友思特圖像采集卡以高速運算
    的頭像 發表于 08-20 09:18 ?1015次閱讀
    友思特方案 | <b class='flag-5'>FPGA</b> 加持,友思特圖像采集卡<b class='flag-5'>高速</b>預處理助力視覺系統運行提速增效

    基于FPGA實現FOC算法之PWM模塊設計

    哈嘍,大家好,從今天開始正式帶領大家從零到一,在FPGA平臺上實現FOC算法,整個算法的框架如下圖所示,如果大家對算法的原理不是特別清楚的話
    的頭像 發表于 07-17 15:21 ?3496次閱讀
    基于<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 ?4559次閱讀
    基于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 ?2392次閱讀
    基于<b class='flag-5'>FPGA</b>的壓縮<b class='flag-5'>算法</b>加速<b class='flag-5'>實現</b>

    CRC16-MODBUS+手算+移位運算+C程序+并行運算

    CRC16-MODBUS+手算+移位運算+C程序+并行運算
    發表于 04-22 18:23 ?0次下載

    進群免費領FPGA學習資料!數字信號處理、傅里葉變換與FPGA開發等

    ~ 01、數字信號處理的FPGA實現 旨在講解前端數字信號處理算法的高效實現。首先概述了當前的FPGA技術、器件以及用于設計最先進DSP系
    發表于 04-07 16:41

    如何使用FPGA驅動并行ADC和DAC芯片,使用不同編碼方式的ADC與DAC時的注意事項

    ADC和DAC是FPGA與外部信號的接口,從數據接口類型的角度劃分,有低速的串行接口和高速并行接口。FPGA經常用來采集中高頻信號,因此使用并行
    的頭像 發表于 03-14 13:54 ?2195次閱讀
    如何使用<b class='flag-5'>FPGA</b>驅動<b class='flag-5'>并行</b>ADC和DAC芯片,使用不同編碼方式的ADC與DAC時的注意事項