基于FPGA的HDTV視頻圖像灰度直方圖統計算法設計

  隨著HDTV的普及,以LCD-TV為主的高清數字電視逐漸進入蓬勃發展時期。與傳統CRT電視不同的是,這些高清數字電視需要較復雜的視頻處理電路來驅動,比如:模數轉換(A/D Converter)、去隔行(De-interlacer)、視頻縮放(Scaler)和視頻圖像增強(Video Enhancement)等等。由于HDTV的帶寬較高,720p信號(1280×720@60Hz)的像素速率達到74MHz,因此針對HDTV的視頻處理算法需要更高性能的器件。采用大規模高工藝的ASIC芯片是目前這個問題的主要解決方案,Pixelworks、Genesis等公司均推出了基于大規模ASIC的解決方案。但是,隨著FPGA工藝的不斷改善,其性價比與日俱增,尤其是Xilinx、Altera等廠商紛紛采用90nm工藝量產后,其價格不斷降低,Xilinx推出的Spartan-3E系列FPGA 120萬門的售價只有9美元,已經在小量產品的IC設計中開始替代結構化ASIC,在數字高清電視這類價格敏感型消費類電子產品中也開始大量采用。

  本文介紹了如何在FPGA中利用Block RAM的特殊結構實現HDTV視頻增強算法中灰度直方圖統計。

?灰度直方圖統計

???????? 灰度直方圖統計是圖像處理過程中很常用的一個步驟,簡單來講,就是對一幅圖像各個灰度的像素進行計數,得到一張灰度分布表。例如,8位量化的灰度圖像統計結果就是256個值,分別代表0-255 每個灰度像素的數量,如圖1 所示為Lena圖像的灰度直方圖統計結果。直方圖是分析一幅圖像亮度分布特性有力的工具,根據它的結果可以進行諸如灰度拉伸、自動對比度、動態伽馬調整等操作。

?圖1 Lena圖像的灰度直方圖統計

?FPGA算法統計

?  在計算機或者DSP上實現直方圖統計時,我們通常會使用數組結構,即在內存中開辟一個整數數組來進行計數,但是在FPGA中定義數組是非常消耗資源的,尤其是當數組成員的位寬很大時。例如用觸發器來統計256灰度的720p圖像的直方圖,將消耗4000個邏輯單元(每個邏輯單元是一個四輸入查找表),這幾乎消耗了一個Spartan-3E 25萬門器件(XC3S250E)80%的邏輯資源。

  幸運的是,FPGA器件提供了一個很好的結構可以處理這類問題,這就是Block RAM.在Altera和Xilinx的各型號FPGA器件上都集成了一種稱為Block RAM的片上內存,它們以若干Kbits為一塊,不同型號集成不同數量的塊,例如在Spartan-3E系列中以18Kbits為一塊,在規模最小的型號XC3S100E上集成了4塊這樣的內存,如圖2 所示:

?

?圖2 Spartan-3E系列FPGA集成的Block RAM

???????? 這種內存很容易實現數組類型的結構,而且這種內存被設計成雙端口方式,即可以用兩組獨立的地址數據總線來讀寫,因此可以用不到一塊的Block RAM就實現256×24這樣的高位寬計數器陣列來進行HDTV視頻圖像的直方圖統計,如圖3所示:

?

圖3 用Block RAM實現計數器陣列

?  以Block RAM的結構為核心,按照以下幾點來設計直方圖統計算法:

  1.Block RAM使用雙端口方式,端口A用來將內存單元計數值讀出,端口B將計數值加一后寫回該內存單元。

  2.內存的地址在像素有效時由像素灰度值選擇,在行同步期間不計數,在場同步期間使用一個遞增計數器在前256個時鐘將統計結果輸出,在之后的256個時鐘將RAM 塊清零。

  3.雙端口讀寫時鐘相位相差180度,以避免雙端口讀寫沖突。

  4.數據的讀出、加一和寫入采用了流水線結構以提高性能,所以在地址控制上要進行適當暫存以保證數據同步。

  圖4為256級灰度720p視頻圖像直方圖統計的算法實現功能框圖:

?

圖4 用FPGA的Block RAM實現直方圖統計

?  該算法借助FPGA??上的高性能Block RAM(讀寫速度可以到200 兆以上),可以實現SMPTE定義的從720p到1080p的各種HDTV視頻圖像的實時直方圖統計,僅占用FPGA不到一百個邏輯單元和一塊Block RAM,是一種性價比較高的FPGA實現直方圖統計的算法,而且該算法具有很好的通用性,可以應用到各種需要大量高位寬計數器的高速FPGA設計中。

參考文獻:

  1.Xilinx,Spartan-3E FPGA datasheet,2005.3
  2.Xilinx,Using Block RAM in Spartan-3 Generation FPGAs,2005.3

轉載于:https://www.cnblogs.com/yousun/p/3160223.html

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

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

相關文章

后臺系統可擴展性學習筆記(十一)Database Denormalization

之前的兩篇筆記中談到了從單庫擴展到多庫以承載更多的請求量以及單庫(表)拆分成多庫(表),打破單庫的性能瓶頸。 這都是為了應對大數據量下的措施。 然而,除卻數據量外,還有一個極其影響單庫性能…

Java Swing 影樓管理系統之登錄功能

開頭打廣告,Java1234.com。 首先,來個效果圖。 關鍵代碼 1,界面層 private void Jb_DengLuActionPerformed(java.awt.event.ActionEvent evt) {// TODO add your handling code here:String UserName this.Jb_UserNameTxt.getText();String …

Bdsyn百度手機助手是何物,它是怎樣神不知鬼不覺地安裝到你的電腦里的?

【電腦軟件管理中Bdsyn手機助手的問題】Bdsyn手機助手 is developed by Baidu, Inc. and is used by 10 users of Software Informer. 并不是本人安裝的(應該是自己自己主動安裝的),卸載以后過幾天又會出如今軟件列表里。百度搜索卻無法搜索出…

后臺系統可擴展性學習筆記(十二)NoSQL

文章目錄NoSQL定義NoSQL種類鍵值存儲文檔存儲寬列存儲圖形數據庫NoSQL 意味著什么ACID vs. BASESQL or NoSQLNoSQL定義 不同于關系型數據庫,NoSQL 數據庫(也叫非 SQL 或非關系型數據庫)提供的數據存儲、檢索機制并不是基于表關系建模的。沒有…

android2.2應用開發之IccCard(sim卡或USIM卡)

tyle"margin:20px 0px 0px; font-size:14px; line-height:26px; font-family:Arial; color:rgb(51,51,51)"> 如果要做android通訊錄的聯系人的機卡混排顯示,由于手機卡類型的不同,導致手機卡存儲容量以及可以存儲信息不同,就要涉…

后臺系統可擴展性學習筆記(十三)緩存

文章目錄在哪兒加緩存緩存什么內容緩存原始查庫結果緩存數據對象怎么查詢緩存結果預留緩存模式直讀模式直寫模式回寫式緩存繞寫式緩存提前刷新模式緩存滿了如何處理參考讀寫分離、分庫分表、反范式化、采用 NoSQL……如果這些擴展手段全都上了,數據響應依舊越來越慢…

[linux]gdb調試

使用gdb可以在命令行方便地調試,并且能以命令程序的方式調試源代碼。 常用命令簡寫print-p,step-s,next-n 進入gdb //方式一 gdb test//test 為可執行文件,使用-g編譯得到 //方式二 gdb -q //不顯示版權信息 file test //file命令打開文件 退出gdb quit …

后臺系統可擴展性學習筆記(十四)異步機制與MQ

對于 Web 服務而言,提升可擴展性的主要途徑是將耗時的同步工作改成異步處理,從而允許將這些工作“外包”給多個 Worker 去做,或者提前完成能夠預知的部分。 異步機制與可擴展性之間的關系需要從(異步)并行處理的優勢說…

RegisterClientScriptBlock與 RegisterStartupScript區別

Page.ClientScript.RegisterClientScriptBlock而用Page.ClientScript.RegisterStartupScript是因為:RegisterStartupScript 把script放置在ASP.NET page的底部,而RegisterClientScriptBlock把script放置在ASP.NET page的頂部,用RegisterClien…

【Web后端筆記】SQL Server與java數據類型對應

編號數據庫類型JDBC類型JDBC索引描述1intjava.lang.Integer4 2varcharjava.lang.String12 3charjava.lang.String1 4ncharjava.lang.String1 5nvarcharjava.lang.String12 6textjava.lang.String-1 7ntextjava.lang.String-1 8tinyintjava.lang.Integer-6 9intjava.lang.Intege…

后臺系統可擴展性學習筆記

整理了一下筆記目錄,將以前學習的一些知識串聯起來了,比如cdn、負載均衡、中間件,以前只是各自了解了一點,現在大概理清了后臺系統設計中他們各自的作用。 后臺系統可擴展性學習筆記(一)概要 后臺系統可擴展…

TFS 強制刪除鎖定文件(數據庫)

TFS:TFS2010 VS:VS2012 OS:Windows2008 DB:Sqlserver2008 R2 我們在團隊開發當中,版本控制是一個不可忽略的工具。我們團隊使用的是TFS2010這個版本控制器。 但在團隊實際協作開發當中,團隊成員難免有電腦損壞或人員離職情況&…

【轉】Java:String、StringBuffer和StringBuilder的區別

1 String String:字符串常量,字符串長度不可變。Java中String是immutable(不可變)的。 String類的包含如下定義: [java]view plaincopy /** The value is used for character storage. */ private final char value[]…

Linux中exit與_exit的區別

在exit,_exit的區別 - exit()與_exit()函數的區別(Linux系統中)2012-03-20 15:19:53 分類: LINUX 注:exit()就是退出,傳入的參數是程序退出時的狀態碼,0表示正常退出,其他表示非正常退出&…

光標閃爍問題的解決辦法

在調用Windows API函數SetCursor設置光標時,可能會碰到閃爍的問題:移動鼠標,光標在Class Cursor(即注冊窗口類時指定的Cursor)與預設Cursor之間閃爍。 在MSDN上有關SetCursor函數的備注中強調,如果Class Cursor非空,那…

視頻編解碼基礎

文章目錄前戲編解碼技術流程主流視頻編碼標準視頻傳輸面臨的問題視頻傳輸差錯控制視頻傳輸Qos質量保證參數人類視覺系統HVS 以及相應編碼措施正餐編碼層次與碼流結構PB幀編碼IBBP序列編碼結構圖像編碼結構條帶編碼結構宏塊編碼結構塊編碼結構預測技術碼率控制實例H264前戲 編解…

XShell 屏幕鎖定的恢復方法(Ctrl+Q)

操作XShell過程中很多時間大家會習慣性的按CtrlS進行保存. CtrlS在XShell的作用是屏幕鎖定,很多朋友會無法操作,會直接把窗口關閉。 解決方法: 快捷鍵 CtrlQ 即能完成解鎖!轉載于:https://www.cnblogs.com/liangle/p/3173475.html

adb端口被占用

程序不能執行,kill掉任務管理器里面adb服務,重新連接設備仍然有錯 查到可能是adb端口被占用 查看adb用的是哪個端口:C:\Users\wanglin>adb nodaemon server 查看誰占用了這個端口:C:\Users\wanglin>netstat -ano | findstr …

實時語音通訊丟包補償技術

文章目錄基于發送端丟包補償技術原理與媒體無關的前向差錯糾正媒體相關前向差錯糾正交織技術基于接受端丟包補償技術基于插入方法基于插值方法基于重構的方法應用建議非交互式交互式拓展閱讀參考丟包補償技術可以分為兩類:基于發送端補償、基于接受端補償 基于發送…

取得裝置可以顯示頁面的寬度

利用html中的div元素取得<div id"divGetWidth" width100%></div>Jquery:var width$(#divGetWidth).width(); //獲取元素寬度 Javascript:var objdocument.getElementById(divGetWidth);var width obj.offsetWidth轉載于:https://www.cnblogs.…