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