閑庭信步使用SV搭建圖像測試平臺:第十九課——YCbCr圖像轉RGB圖像

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

上篇我們講解了RGB圖像如何轉YCbCr格式的圖像,圖像圖YCbCr格式下完成了處理,最終可能還是要轉回RGB圖像的格式。

這個其實很簡單,也有現成的公式,比如下面這個公式。

我們在我們在img_process_pkt包的image_process類中新建一個ycbcr2rgb的task,直接把公式實現一下。

仿真文件tb_image_sim如下,先將RGB圖像數據轉換成YCbCr格式,然后再將YCbCr格式的圖片轉換回RGB的格式,然后分別保存RGB每個通道的圖片和RGB的圖片。

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

打開image文件夾,發現生成的圖像并不是我們期望的圖片。

再看看單通道的圖片,也都不太正常的樣子。

出現了問題就要分析,回頭再看看公式,如下所示,以R為例,如果兩項之和大于255或者小于0,超出了圖像8位無符號位的范圍,而我們在task中沒有考慮超出范圍的情況,可能會造成結果溢出,造成圖像不正常。還有一點,就是數據格式的隱形轉換,雖然y,cb,cr和R,G,B等數據都是8位無符號數據,但是由于系數有小數,系統很明顯會轉換成有符號實數進行計算。

我們可以先把范圍限定一下,如下所示:

再看看生成的圖像,除了紅色通過有些改進,其它通道變得更加糟糕了,RGB圖像也是一樣。

這說明了什么呢?說明并不只是最后結果有問題,而是中間的計算也存在的問題。為了方便,我們是直接使用的小數進行實數的運算,而在可綜合FPGA的RTL代碼中,根本不可能這樣運算的。這樣運算的后果就是如果某一步結果超出了范圍,就會照成最終結果的不可控。可以這樣理解,還是以R的求解為例,如果相加的兩項有一項都超出了0-255的范圍,那這項的值其實就已經不對了,更不要說兩項都超出范圍,甚至G的三項都超出范圍,這就是我們常說的一步錯,步步錯。

那問題應該如何解決呢?要按照可綜合FPGA的RTL代碼的思維進行設計,先對公式合并化簡到如下的形式。

中間的結果用無符號數進行保存,并對位數進行適當的擴展,然后所有正項分別相加,所有負向也分別相加,最后根據正負項的大小進行相應的加減和范圍的判斷,總而言之,就是每一步的運算都是可控的。如下所示。

我們再看看轉換后生成的圖片,都正常了。

本篇的內容,看似簡單,但是非常的重要,因為涉及到了軟件編程中數據范圍的控制,當然在FPGA的硬件編程中,時刻都要關注數據是否會規定的范圍,這也是軟件編程和硬件編程的一個重大的區別。

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

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

相關文章

C++(智能指針)

智能指針 1.基礎: 1.1 概念 智能指針是用于自動管理動態分配內存的RAII(Resource Acquisition Is Initialization)對象。它們通過自動釋放內存來防止內存泄漏,是替代裸指針的安全工具。 1.2 解析 眾所周知,堆內存對象…

Sentinel 授權規則詳解與自定義異常處理

Sentinel 授權規則詳解與自定義異常處理 在微服務系統中,權限控制和訪問保護是至關重要的一環。本文將詳細介紹如何通過 Sentinel 的 授權規則(AuthorityRule) 控制資源訪問權限,并結合實際案例說明如何設置白名單與黑名單&#…

LeetCode Hot 100 最大子數組和

給你一個整數數組 nums ,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 子數組是數組中的一個連續部分。 示例 1: 輸入:nums [-2,1,-3,4,-1,2,1,-5,4] 輸出:6…

Python UI自動化演進格局:從傳統庫到AI驅動的智能代理

引言 UI自動化的持久需求 在現代軟件工程和業務流程管理中,圖形用戶界面(GUI)自動化扮演著至關重要的角色。它不僅僅局限于軟件測試領域,更是機器人流程自動化(RPA)、自動化數據錄入、遺留系統集成以及在AP…

【Java面試】如何解決MQ死信隊列?

如何解決MQ死信隊列? 一、預防死信產生(從源頭減少死信) 消費者端健壯性優化 捕獲所有可能的異常,區分可恢復異常(如網絡超時)和不可恢復異常(如數據格式錯誤)。對可恢復異常實現自…

RGB+EVS視覺融合相機:事件相機的革命性突破?

一、單一EVS事件相機的原理 事件相機(EVS)是一種新型的視覺傳感器,其設計靈感來源于生物視覺系統。與傳統相機不同,事件相機并不以固定的幀率捕獲整個圖像,而是每個像素獨立工作,當檢測到亮度變化超過預設…

DBeaver 設置阿里云中央倉庫地址的操作步驟

DBeaver 設置阿里云中央倉庫地址的操作步驟(適用于解決驅動下載緩慢或失敗的問題) 一、最新阿里云 Maven 倉庫地址 主倉庫地址(推薦): http://maven.aliyun.com/nexus/content/groups/public/ 123 備用地址&#xff…

Qt:QCustomPlot庫的QCPAxis

在 QCustomPlot 中,QCPAxis 是圖表坐標系的核心組件,負責管理坐標軸的所有視覺和功能特性。它提供了豐富的定制選項,使開發者能夠創建高度專業化的數據可視化圖表。 核心功能概述 功能類別關鍵特性相關方法基本結構坐標軸位置、方向axisTyp…

七天學會SpringCloud分布式微服務——05——OpenFeign

1、OpenFeign實現遠程調用 1.1 services.pom引入依賴 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId> </dependency>1.2 在service-order微服務中新建feign.Product…

大語言模型的通用局限性與全球技術演進

基于行業最新數據修訂&#xff08;2025Q2&#xff09; 一、知識截止期&#xff1a;全球模型的進化差異 所有LLM都存在??知識截止期&#xff08;Knowledge Cut-off&#xff09;??&#xff0c;即模型訓練數據的時間上限。這在技術迭代飛快的軟件開發領域尤為致命——2023年后…

常見網絡安全威脅和防御措施

網絡安全威脅是一種技術風險&#xff0c;會削弱企業網絡的防御能力&#xff0c;危及專有數據、關鍵應用程序和整個 IT 基礎設施。由于企業面臨廣泛的威脅&#xff0c;因此他們應該仔細監控和緩解最關鍵的威脅和漏洞。網絡安全問題有七大類&#xff0c;它們都包括多種威脅&#…

人工智能和云計算對金融未來的影響

你有沒有想過&#xff0c;你的錢是否會由人工智能而不是銀行來管理&#xff1f;如果你的銀行不存在于真實的地方&#xff0c;而是存在于幾千公里之外的某臺大型超級計算機上&#xff0c;那會怎樣&#xff1f;這可能有一天會發生&#xff0c;讓我們看看它是如何發生的&#xff0…

Vue3——項目配置eslint+prettier

一、安裝依賴 pnpm add -D eslint prettier eslint-plugin-vue vue-eslint-parser typescript-eslint/eslint-plugin typescript-eslint/parser eslint-config-prettier eslint-plugin-prettier typescript-eslint二、創建或修改 eslint.config.cjs // eslint.config.cjs con…

人工智能編程三大核心流程詳解--機器學習、神經網絡、NLP自然語言處理

對于學習人工智能階段&#xff0c;代碼可以寫出來&#xff0c;主要是按照構建流程一步一步&#xff0c;所以本篇博客主要是通過三個大點來介紹&#xff1a;第一個點是機器學習中預測損失值與真實值之間的誤差流程&#xff1b;第二點是深度學習中神經網絡搭建流程&#xff1b;第…

《AI for Science:深度學習如何重構基礎科學的發現范式?》

前言 前些天發現了一個巨牛的人工智能免費學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到網站 AI for Science&#xff1a;深度學習如何重構基礎科學的發現范式&#xff1f; 副標題&#xff1a;從費曼圖到神經微分方程&…

創客匠人:創始人 IP 打造引領知識變現新路徑?

在當下知識經濟蓬勃發展的時代&#xff0c;知識變現已成為眾多創作者和從業者關注的焦點。創客匠人作為行業內的重要參與者&#xff0c;為創始人 IP 打造與知識變現提供了獨特且有效的思路。? 創始人 IP 打造在知識變現中占據著關鍵地位。創客匠人認為&#xff0c;一個成功的…

JVM調優實戰 Day 7:JVM線程分析與死鎖排查

【JVM調優實戰 Day 7】JVM線程分析與死鎖排查 文章標簽 jvm調優, 線程分析, 死鎖排查, JVM監控, Java性能優化, JVM參數配置 文章簡述 在Java應用的高并發場景中&#xff0c;線程管理與死鎖問題往往是性能瓶頸的根源。本文作為“JVM調優實戰”系列的第7天&#xff0c;深入解析…

Kotlin中協程掛起函數的本質

一、核心概念&#xff1a;掛起函數的本質 1. 核心定義 掛起函數&#xff08;Suspending Function&#xff09;是 Kotlin 協程的核心機制&#xff0c;它允許函數在執行過程中暫停&#xff08;掛起&#xff09;而不阻塞線程&#xff0c;并在條件滿足時恢復執行。 2. 與普通函數…

人工智能中的集成學習:從原理到實戰

大家好&#xff01;今天我們來聊聊人工智能領域中一個非常強大的技術——集成學習&#xff08;Ensemble Learning&#xff09;&#x1f60e;。——這個讓模型預測能力飆升的“團隊合作”神器&#xff01;無論你是剛入門的新手還是想復習的老司機&#xff0c;這篇通俗教程都能幫…

大事件項目記錄13-登錄優化-redis

一、redis優化登錄接口。 原有代碼中在修改密碼在產生新令牌后并未將舊的令牌主動失效&#xff0c;舊的令牌依然可以使用 &#xff0c;會產生安全隱患&#xff0c;所以需要對其進行優化。 1.令牌主動失效機制。 &#xff08;1&#xff09;登錄成功后&#xff0c;給瀏覽器響應令…