直方圖概念和分類
圖像直方圖用作數字圖像中色調分布的圖形表示。它繪制了每個色調值的像素數。通過查看特定圖像的直方圖,觀看者將能夠一目了然地判斷整個色調分布。
圖表的水平軸代表色調變化,而垂直軸代表該特定色調的像素總數。
水平軸的左側表示暗區,中間表示中間色調值,右側表示亮區。縱軸表示在每個區域中捕獲的區域大小(像素總數)。
因此,非常暗圖像的直方圖的大部分數據點將位于圖的左側和中心。
相反,具有很少黑暗區域或陰影的非常明亮的圖像的直方圖的大部分數據點將位于圖的右側和中心。
在FPGA處理中常用的是灰度直方圖,灰度直方圖描述了一幅圖像的灰度級統計信息,主要應用于圖像分割、圖像增強及圖像灰度變換等處理過程。
而FPGA對于直方圖處理主要分為以下三種:
我們常見或者聽說的直方圖概念主要指直方圖均衡,這也是最簡單的一種方式,常見某些入門級的圖像處理書籍或者文章。直方圖規定化和直方圖拉伸我們后面慢慢介紹,先重點介紹直方圖均衡。公眾號:OpenFPGA
直方圖統計及FPGA實現
從數學上來說,圖像直方圖描述的是圖像各個灰度級的統計特性,它是用圖像灰度值的一個函數來統計一幅圖像中各個灰度級出現的次數或概率,其數學定義如下所示:公眾號:OpenFPGA
直方圖統計是比較簡單的,將彩色圖像轉成灰度圖像后就可以統計了,偽代碼如下:公眾號:OpenFPGA
unsignedintpHistCnt[256]; inti,j=0; memset(pHistCnt,0,256); for(i=0;i
上面的代碼就是遍歷圖像將數據存儲到數據里即可。
上圖中右邊是左邊圖像的直方圖統計。
實際用FPGA實現的時候一般會用到歸一化的直方圖,即不關心實際每個灰度值的具體值而是出現的概率。具體為假定一幅圖像的像素個數為N(N=圖像長度*圖像寬度),灰度級總數為L(級數和圖像的位數有關,假定是8位圖像,則總數為2^8=256),這時候圖像中灰度級l(小L)的像素總數為 。每個灰度級除以總像素數即得到各個灰度級出現的概率:公眾號:OpenFPGA
上面的公式有個別稱:直方圖概率密度函數(也稱歸一化的灰度直方圖),記為PDF
直方圖統計完能干嘛呢?很明顯的是從直方圖中能讀取到圖像的亮度和對比度信息。若直方圖的統計主要偏向右側分布,那么圖像相對較亮;反之亦然。當直方圖統計分布比較均勻時,這時候圖像的對比度較大,若直方圖統計分布比較集中時,則圖像對比度較小。公眾號:OpenFPGA
下面幾張圖說明了上面的結論:
較暗的圖像,同時對比度較低 較亮的圖像,同時對比度較低 對比度很高的圖像
FPGA功能分析
對于FPGA進行直方圖操作的時候有兩種方式,一種是真操作,一種是偽操作:真操作就是將圖像緩存后進行后續處理(均衡等),然后再將圖像發送出去;偽操作就是將圖像流水過后將需要的信息進行緩存,然后在下一幅圖像來之后,將前一副圖像得到的信息作用于當前圖像。由于常用的操作是基于視頻幀,避免視頻延遲過大,所以我們一般常用偽操作,即緩存當前幀信息后作用后一幀圖像。
上面的特點我們一般選擇片內雙口 RAM 作為緩存存儲器。對于 8 位的深度圖來說,統計結果的數據量并不大,因此選擇片內存儲。此外,一方面統計模塊需要與其他時序進行配合,因此需提供雙邊讀寫接口;另一方面,統計過程中需要地址信息,因此選擇 RAM 形式的存儲器。
基上,直方圖統計步驟如下:
將當前統計值讀出,加 1 后重新寫入 RAM
重復以上步驟,直到當前圖像統計完畢
在下一幅圖像到來之前將結果讀出
讀出之后對 RAM 內容進行清零
因此,我們需要三個電路完成直方圖統計:統計電路、讀出電路和清零電路。
關于這三個電路設計我們下期文章再詳細介紹。
FPGA電路設計
FPGA代碼設計
思考
若圖像直方圖是分段式集中應該怎么處理比較合適?
后續文章:
直方圖均衡及FPGA實現
直方圖規定化及FPGA實現
原文標題:FPGA直方圖操作
審核編輯:湯梓紅
-
FPGA
+關注
關注
1629文章
21729瀏覽量
603012 -
圖像
+關注
關注
2文章
1083瀏覽量
40449 -
直方圖
+關注
關注
0文章
20瀏覽量
7883
原文標題:FPGA直方圖操作
文章出處:【微信號:Open_FPGA,微信公眾號:OpenFPGA】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論