閑庭信步使用圖像驗證平臺加速FPGA的開發:第二十二課——圖像直方圖統計的FPGA實現

?(本系列只需要modelsim即可完成數字圖像的處理,每個工程都搭建了全自動化的仿真環境,只需要雙擊top_tb.bat文件就可以完成整個的仿真,大大降低了初學者的門檻!!!!如需要該系列的工程文件請關注知識星球:成工fpga,https://t.zsxq.com/DMeqH,關注即送200GB學習資料,鏈接已置頂!)

圖像的直方圖統計在上個系列有詳細的講解,本課主要完成直方圖統計的FPGA實現。

圖像的直方圖統計就是對一副圖像中0-255這256個像素點出現的次數,在FPGA中,就要用RAM將各個像素點出現的次數存儲起來,每來一個新的像素點,就以這個像素點的值為地址從RAM從取出對應的值,加一后再寫回到這個地址中去。

按照上面的分析,使用RAM進行直方圖統計還有有些麻煩的,因為讀RAM需要一個時鐘周期,寫RAM也需要一個時鐘周期,而像素點數據是一個時鐘來一個,這就要求每個時鐘都要同時讀寫RAM,雖然讀寫的地址不同。其實Xilinx的雙口RAM是不支持同時讀寫的,因為wea就是讀寫使能信號,要不是讀,要不是寫,不能同時讀寫。

其實這個問題很好解決,有時候用簡單的方式更容易實現,這兒我們可以使用數組來存儲,對于數組的操作,一個時鐘周期就可以完成讀寫操作

還有一個問題,在視頻處理中,圖像是一幀幀流水處理的,我們要統計每幅圖像的直方圖,完成一幅圖像的直方圖統計后就要把直方圖的數據傳輸出去并把數組的內容清零,為下一副圖像的直方圖統計做準備。而通過場同步信號可以判斷一幅圖像是否處理完成,來對存儲直方圖的數組讀走和清空操作

在\src\hist文件夾下新建hist_statistics.sv文件,使用數組hist_ram來存儲圖像的直方圖統計的信息。

有了數組,圖像直方圖統計的功能實現非常的簡單,直接以輸入的數據為索引讀寫數組即可;而且在直方圖的數據被讀取完畢后直接清空即可。

根據場同步信號,新建rd_result_domain信號,在該信號有效時間內根據wr_cnt將數組中的數據全部讀走。

最后圖像直方圖的數據dout通過dout_en的標示輸出出去,同時生成dout_done信號,用來表示直方圖的數據被讀完成。

到這兒還有一個問題,那就是可能有些像素點統計的值非常大,而有些像素點統計的值又非常的小,就是直方圖的數據很難直觀的反應出圖像的信息,這時候我們就對圖像進行歸一化都一定的范圍,以便直觀的觀察。

在\src\hist文件夾下新建hist_norm.sv文件,用來將直方圖的數據歸一化到0——NORM之間,這個避免除法的操作,直接將直方圖數據和FACTOR相乘即可。由于數據擴大了1024*1240倍,最終的結果應該直接舍棄低20位,但是這樣的話直方圖的數據整體水平都會很小(因圖像而異),所以這兒只是舍棄了低13位,讓直方圖的數據基本在0-255區間內。

top文件例化了rgb2ycbcr,hist_statistics和hist_norm這三個模塊。

在img_process_pkt包中也新建hist_fpgatask,方便圖像測試平臺和FPGA仿真數據的比對。

在tb_image_sim文件中的第二個initial塊中,將圖像測試平臺和FPGA硬件仿真的結果保存并比對。

雙擊sim文件夾下的top_tb.bat文件,完成系統的自動化仿真。

可以看到在modelsim的Transcript有如下的打印信息,圖像測試平臺和FPGA硬件仿真的結果一致。

打開img文件夾,也可以看到圖像測試平臺和FPGA硬件仿真的結果是一致的(no_seq*是圖像測試平臺處理后的圖片,seq*是FPGA硬件仿真處理后的結果)。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89425.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89425.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

群暉中相冊管理 immich大模型的使用

相對于其他的相冊管理軟件,Immich的智能搜索和人臉識別功能是其優勢,通過應用機器學習模型,其智能搜索和人臉識別功能更為先進。 一、大模型的下載與安裝 網上有大佬提供了相關大模型的下載:https://url22.ctfile.com/d/58003522…

在 Windows 上使用 Docker 運行 Elastic Open Crawler

作者:來自 Elastic Matt Nowzari 了解如何使用 Docker 在 Windows 環境中運行 Open Crawler。 了解將數據攝取到 Elasticsearch 的不同方式,并深入實踐示例,嘗試一些新方法。 Elasticsearch 擁有大量新功能,助你為特定場景構建最…

iOS高級開發工程師面試——RunTime

iOS高級開發工程師面試——RunTime 一、簡介 二、介紹下 RunTime 的內存模型(isa、對象、類、metaclass、結構體的存儲信息等) 對象 類 三、為什么要設計 metaclass ? 四、class_copyIvarList & class_copyPropertyList區別? 五、class_rw_t 和 class_ro_t 的區別? 六…

實現分頁查詢

分頁查詢分頁查詢語句項目中添加分頁功能按鈕設置前后端代碼功能實現分頁查詢語句 限制查詢的 sql 語句: select * from student limit 0,4sql 查詢結果如下: 分頁查詢的每一頁都對應一行 sql 語句,若每一行都寫單獨對應的 sql 語句不僅重復…

[QOI] qoi_desc | qoi_encode | qoi_decode

鏈接:https://phoboslab.org/log/2021/11/qoi-fast-lossless-image-compression (看代碼設計的時候,真的大為震撼,偉大的algorithm T.T) docs:QOI圖像格式 qoi項目提出了Quite OK Image(QOI&am…

智慧城軌可視化:一屏智管全城

圖撲智慧城軌可視化系統,把地鐵線路、車站、列車都搬進三維畫面。列車晚點預警、站臺擁擠提示、設備故障定位…… 這些關鍵信息一屏聚合,調度員能快速調整發車頻次,疏導高峰客流。遇上突發情況,系統聯動應急方案,同步顯…

包新的Git安裝與使用教程(2024九月更新)

目錄 一、安裝git 1.下載git 2.git安裝 3.環境變量配置與測試 二、使用教程 1.創建版本庫 2.版本回退 3.刪除和恢復文件 一、安裝git 1.下載git 官方下載地址:https://git-scm.com/download 然后進入以下頁面,點擊下載鏈接即可(windows一般都是…

中望3D 2026亮點速遞(1)-全新槽功能螺紋功能,減少繁瑣操作

本文為CAD芯智庫整理,未經允許請勿復制、轉載!中望3D 2026全新的槽功能,包括:(1)可快速生成多種槽形;(2)快速生成一個或多個槽;(3)支持…

2025毫米波雷達技術白皮書:智能汽車與物聯網的感知核心

隨著人工智能、物聯網(IoT)和智能汽車產業的迅猛發展,毫米波雷達技術正成為感知領域的核心驅動力。毫米波雷達憑借其高精度、全天候和強抗干擾能力,廣泛應用于智能汽車的自動駕駛、物聯網的環境感知以及工業自動化。2025年&#x…

用 React-Three-Fiber 實現雪花下落與堆積效果:從零開始的 3D 雪景模擬

在 Web3D 開發中,自然現象模擬一直是極具吸引力的主題。本文將基于 React-Three-Fiber(R3F)框架,詳解如何實現一個包含雪花下落、地面堆積的完整雪景效果。我們會從基礎粒子系統入手,逐步完善物理交互邏輯,…

從抓包GitHub Copilot認證請求,認識OAuth 2.0技術

引言 在現代開發工具中,GitHub Copilot 以智能、嵌入式的人工智能代碼補全能力著稱。作為一項涉及用戶敏感數據和付費授權的服務,其認證授權流程尤為值得技術研究。本文基于實際抓包 VS Code 中的 Copilot 登錄認證請求,系統梳理其 OAuth 2.…

Linux操作系統之線程:分頁式存儲管理

目錄 前言: 一、分頁式存儲管理 二、二級頁表的地址轉化 三、缺頁中斷 總結 前言: 我們上篇文章簡單介紹了線程的一些知識點,但是還有很多坑沒有給大家填上,包括頁表部分我們還沒為大家說明。 本篇文章我將會繼續為大家講解…

xss1-8

Level-1<script>alert()</script>基礎反射型 無任何過濾Level-2"> <script>alert()</script> <"閉合屬性&#xff1a;">用來閉合當前標簽的value屬性注入新標簽&#xff1a;閉合屬性后&#xff0c;插入獨立的<script>…

51c嵌入式~單片機~合集1

自己的原文哦~ https://blog.51cto.com/whaosoft/11897656 一、STM32的啟動模式配置與應用 三種BOOT模式 所謂啟動&#xff0c;一般來說就是指我們下好程序后&#xff0c;重啟芯片時&#xff0c;SYSCLK的第4個上升沿&#xff0c;BOOT引腳的值將被鎖存。用戶可以通過設…

Typecho分類導航欄開發指南:從基礎到高級實現

文章目錄 Typecho分類導航欄深度解析:父分類與子分類的完美呈現 引言 一、Typecho分類系統基礎 1.1 Typecho分類結構 1.2 獲取分類數據的基本方法 二、基礎分類導航輸出 2.1 簡單的平鋪式導航 2.2 帶計數器的分類導航 三、層級分類導航實現 3.1 遞歸輸出父子分類 3.2 使用Type…

C++異步編程工具 async promise-future packaged_task等

深入探討 C11 中引入的四個核心異步編程工具&#xff1a;std::async, std::future, std::promise, 和 std::packaged_task。它們共同構成了 C 現代并發編程的基礎。 為了更好地理解&#xff0c;我們可以使用一個餐廳點餐的類比&#xff1a; std::future (取餐憑證)&#xff1…

Linux-網絡管理

網絡管理1. 網絡基礎1.1 TCP/IP 協議棧&#xff08;四層模型&#xff09;1.2 網絡設備配置與基礎概念1.3 網絡接口命名規則1.4 網絡配置文件位置2. 常用網絡配置命令2.1 查看網絡接口信息2.2 配置 IP 地址2.3 啟用/禁用網卡2.4 修改網卡 MAC 地址2.5 配置網卡的 MTU&#xff08…

Linux鎖的概念及線程同步

目錄 1.常見鎖概念 死鎖 死鎖四個必要條件 避免死鎖 避免死鎖算法 2. Linux線程同步 條件變量 同步概念與競態條件 條件變量函數 初始化 銷毀 等待條件滿足 喚醒等待 簡單案例&#xff1a; 條件變量使用規范 1.常見鎖概念 死鎖 死鎖是指在一組進程中的各個進程均占有不會釋放的…

docker更換國內加速器-更換華為加速器2025-717親測可用docker 拉取鏡像出錯

[rootlocalhost ~]# docker pull nginx Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)報錯原因就是…

Unity VR多人手術模擬恢復2:客戶端移動同步問題分析與解決方案

Unity VR多人手術模擬恢復2&#xff1a;客戶端移動同步問題分析與解決方案 &#x1f3af; 問題背景 在開發基于Unity Mirror網絡架構的VR多人手術模擬系統時&#xff0c;我們遇到了一個復雜的客戶端移動同步問題&#xff1a; 主要操作者&#xff08;第一個客戶端&#xff09;&a…