資源可置換的實(shí)時(shí)直方圖均衡結(jié)構(gòu)設(shè)計(jì)
引言
直方圖均衡是一種有效的空間域圖像增強(qiáng)方法。它通過灰度變換使得圖像在每個(gè)灰度級(jí)上都具有相同多的像素點(diǎn),以提高圖像的對(duì)比度。
自原始直方圖均衡算法提出以來,由于處理的需要出現(xiàn)了許多改進(jìn)形式。如自適應(yīng)直方圖均衡(AHE),對(duì)比度受限的自適應(yīng)直方圖均衡(CLAHE)等。這些算法通過拉伸某個(gè)特定區(qū)域的灰度級(jí)動(dòng)態(tài)范圍來提高圖像質(zhì)量,很好的改善了圖像的視覺效果。目前關(guān)于直方圖均衡算法的硬件實(shí)現(xiàn)方法主要有兩種:計(jì)數(shù)器陣列實(shí)現(xiàn)和存儲(chǔ)器(RAM)陣列實(shí)現(xiàn)。但隨著算法復(fù)雜度的增加,帶來的硬件資源消耗也急劇上升。這嚴(yán)重影響在芯片上添加其它功能。
本文在考慮到FPGA中寄存器和RAM使用率平衡性的基礎(chǔ)上,以原始直方圖均衡算法為例,提出了一種資源可置換的實(shí)時(shí)直方圖均衡結(jié)構(gòu),為解決工程實(shí)踐中寄存器或RAM資源緊缺提供了一種有效的結(jié)構(gòu)。
1FPGA中普遍采用的直方圖均衡結(jié)構(gòu)
直方圖均衡化是通過灰度變換將一幅圖像轉(zhuǎn)換為另一幅具有均勻強(qiáng)度分布的圖像,即使得圖像在每個(gè)灰度級(jí)上都具有相同像素點(diǎn)數(shù)的過程叫算法中涉及到浮點(diǎn)運(yùn)算,但由于FPGA本身構(gòu)建浮點(diǎn)運(yùn)算邏輯運(yùn)算時(shí)間比較長,并且會(huì)加重硬件壓力,所以為避免浮點(diǎn)運(yùn)算,一般可以將算法按如下步驟進(jìn)行拆分:
1.1直方圖統(tǒng)計(jì)
統(tǒng)計(jì)每個(gè)灰度級(jí)的像素點(diǎn)個(gè)數(shù),為避免小數(shù)運(yùn)算,不對(duì)原始圖像數(shù)據(jù)進(jìn)行歸一化,直接統(tǒng)計(jì)每個(gè)灰度級(jí)的像素點(diǎn)個(gè)
數(shù)作為原始圖像的直方圖:
nk的取值決定于圖像的分辨率,最大值為一幀圖像的像素總數(shù)。
目前普遍采用的兩種方法是如圖1所示的計(jì)數(shù)器陣列和存儲(chǔ)器陣列法。
(b)存儲(chǔ)器陣列
圖1(a)給出的是計(jì)數(shù)器陣列結(jié)構(gòu),每個(gè)灰度級(jí)對(duì)應(yīng)一個(gè)計(jì)數(shù)器,若每個(gè)像素點(diǎn)有n個(gè)比特,就有2"個(gè)計(jì)數(shù)器,譯碼器為n-2"譯碼器,計(jì)數(shù)器的位寬取決于一幅圖像的分辨率。
圖1(b)采用的是存儲(chǔ)器陣列結(jié)構(gòu)進(jìn)行直方圖統(tǒng)計(jì),輸入圖像直接和RAM的地址線連接,這里RAM的時(shí)鐘應(yīng)該是圖像時(shí)鐘的2倍,圖像時(shí)鐘的一半用于讀-修改操作,一半用于寫操作。
1.2直方圖均衡
進(jìn)行直方圖均衡化,可得到灰度級(jí)映射關(guān)系,輸出時(shí)按照式(2)所給的新的映射關(guān)系對(duì)原始圖像各像素點(diǎn)進(jìn)行灰度轉(zhuǎn)換:
以灰度級(jí)為0?255,分辨率為1024X1024的灰度圖像處理為例,公式(2)可以具體化為:
假設(shè)輸入圖像每一個(gè)像素的灰度值都相同,則統(tǒng)計(jì)的像素累加和最大,為1024X1024個(gè),在FPGA中需要定義數(shù)據(jù)位寬為21位,容量為256的RAM來統(tǒng)計(jì)0?255灰度級(jí)像素?cái)?shù)目。
當(dāng)一幀圖像的直方圖統(tǒng)計(jì)完畢時(shí),在相鄰兩幀的時(shí)間間隔里,根據(jù)式(3)計(jì)算Sk的值存入RAM中,建立灰度級(jí)映射表。以原始圖像數(shù)據(jù)為RAM地址,輸出圖像直方圖后的數(shù)據(jù)。由于是灰度圖像,所以此灰度級(jí)映射RAM大小為數(shù)
那么,在本文提出的結(jié)構(gòu)中,寄存器個(gè)數(shù)為2nX256,RAM容量為2(21-N)X256,其中0<N<21??筛鶕?jù)實(shí)際情況調(diào)整N的大小,從而實(shí)現(xiàn)資源置換。具體操作流程如圖3所示。
圖3中,譯碼器接收原始圖像并激活相應(yīng)的計(jì)數(shù)器,對(duì)應(yīng)的計(jì)數(shù)器加1,當(dāng)計(jì)數(shù)器累加和等于1024時(shí),RAM相應(yīng)地址內(nèi)容加1。RAM的地址對(duì)應(yīng)256個(gè)灰度級(jí),循環(huán)檢測計(jì)數(shù)直到一幀結(jié)束。在等待下一幀到來的時(shí)間里,運(yùn)算邏輯開始根據(jù)式(4)計(jì)算原始圖像每一級(jí)灰度映射后的灰度值,取每個(gè)RAM單元中的高8位存放到灰度級(jí)映射RAM中,建立灰度級(jí)映射查找表。當(dāng)下一幀原始圖像到來時(shí),將原始圖像的灰度值和灰度級(jí)映射RAM的地址線相連,由于相鄰兩幀圖像間對(duì)應(yīng)像素點(diǎn)的灰度值相差較小,這樣當(dāng)前幀可以用前一幀圖像的灰度映射表映射輸出當(dāng)前幀直方圖均衡后的數(shù)據(jù),滿足
據(jù)寬度為8位,容量為256。
2資源可置換的實(shí)時(shí)直方圖均衡結(jié)構(gòu)
在上述結(jié)構(gòu)中,隨著圖像的分辨率增大,用于直方圖統(tǒng)計(jì)的RAM資源或計(jì)數(shù)器資源會(huì)呈指數(shù)增長。在FPGA中RAM和計(jì)數(shù)器資源很有限
且非常重要,只使用RAM或者計(jì)數(shù)器進(jìn)行直方圖統(tǒng)計(jì),會(huì)導(dǎo)
了實(shí)時(shí)圖像處理的要求。
致FPGA中對(duì)應(yīng)資源的緊缺。為了解決這一問題,本文給出了一種改進(jìn)的資源可置換的實(shí)時(shí)直方圖均衡結(jié)構(gòu),可根據(jù)工程實(shí)踐中剩余資源的情況動(dòng)態(tài)分配資源,以達(dá)到FPGA中RAM和寄存器資源平衡。本文提出的資源可置換的直方圖均衡結(jié)構(gòu)如圖2所示。
圖2資源可置換的直方圖均衡結(jié)構(gòu)
在圖2所給出的結(jié)構(gòu)中,可將圖2中256X20的直方圖統(tǒng)計(jì)RAM拆分成256個(gè)11位的進(jìn)位計(jì)數(shù)器(counter_00-counter_ff)和一個(gè)256X10的直方圖統(tǒng)計(jì)RAM。在圖2中,256個(gè)計(jì)數(shù)器對(duì)應(yīng)256個(gè)灰度級(jí),用來統(tǒng)計(jì)每個(gè)灰度級(jí)的像素個(gè)數(shù),計(jì)數(shù)到1024時(shí)產(chǎn)生進(jìn)位標(biāo)志。FIFO用于緩存當(dāng)前計(jì)數(shù)到1024個(gè)的像素點(diǎn)的灰度值,防止多個(gè)計(jì)數(shù)器同時(shí)滿足條件時(shí)造成直方圖統(tǒng)計(jì)錯(cuò)誤。式(3)的形式可以變?yōu)椋?
那么,在本文提出的結(jié)構(gòu)中,寄存器個(gè)數(shù)為 2N×256,RAM 容量為 2(21-N)×256,其中 0 ≤ N ≤ 21??筛鶕?jù)實(shí)際情況調(diào)整 N 的大小,從而實(shí)現(xiàn)資源置換。具體操作流程如圖3 所示。
圖3中,譯碼器接收原始圖像并激活相應(yīng)的計(jì)數(shù)器,對(duì)應(yīng)的計(jì)數(shù)器加1,當(dāng)計(jì)數(shù)器累加和等于1024時(shí),RAM相應(yīng)地址內(nèi)容加 1。RAM 的地址對(duì)應(yīng) 256 個(gè)灰度級(jí),循環(huán)檢測計(jì)數(shù)直到一幀結(jié)束。在等待下一幀到來的時(shí)間里,運(yùn)算邏輯開始根據(jù)式(4)計(jì)算原始圖像每一級(jí)灰度映射后的灰度值,取每個(gè) RAM 單元中的高 8 位存放到灰度級(jí)映射 RAM 中,建立灰度級(jí)映射查找表。當(dāng)下一幀原始圖像到來時(shí),將原始圖像的灰度值和灰度級(jí)映射 RAM 的地址線相連,由于相鄰兩幀圖像間對(duì)應(yīng)像素點(diǎn)的灰度值相差較小,這樣當(dāng)前幀可以用前一幀圖像的灰度映射表映射輸出當(dāng)前幀直方圖均衡后的數(shù)據(jù),滿足
上述方法在統(tǒng)計(jì)直方圖時(shí)會(huì)有截?cái)嗾`差。即若一個(gè)灰度級(jí)的像素有1023個(gè),將不會(huì)產(chǎn)生進(jìn)位。但是由于直方圖均衡化后的圖像質(zhì)量主要是人主觀判定的,微小的誤差在視覺上不會(huì)造成影響,所以資源置換造成的截?cái)嗾`差可以忽略。
在上述改進(jìn)的直方圖均衡結(jié)構(gòu)中,計(jì)數(shù)器的位數(shù)和直方圖統(tǒng)計(jì)RAM的大小可以互相置換。假設(shè)一幅圖像的分辨率為MXN,計(jì)數(shù)器的位寬為K,進(jìn)位閾值為T(上述算法中T為1024),直方圖統(tǒng)計(jì)RAM的位寬為L,統(tǒng)計(jì)最大值為S(上述算法中為1024),將MXN,T,S改寫成指數(shù)格式:
對(duì)于灰度級(jí)范圍固定的圖像來說,若采用單一結(jié)構(gòu),則寄存器的個(gè)數(shù)和片內(nèi)RAM的深度是固定不變的。但是由式⑻可知,采用本結(jié)構(gòu)對(duì)分辨率為MXN的圖像進(jìn)行直方圖均衡處理時(shí),寄存器的位寬和RAM的位寬可以調(diào)節(jié)置換,相對(duì)于只用RAM或者只用寄存器進(jìn)行直方圖統(tǒng)計(jì)的結(jié)構(gòu),本文提出的結(jié)構(gòu)可以通過選取合適的K,L值,對(duì)于具體工程找到一個(gè)硬件資源占用的平衡點(diǎn)。
圖4給出了在三種圖像分辨率下,用本文所給出的結(jié)構(gòu)進(jìn)行直方圖均衡處理時(shí),所需的寄存器資源和存儲(chǔ)器資源關(guān)系圖。在灰度級(jí)范圍一定的情況下,寄存器個(gè)數(shù)和RAM的深度都等于灰度級(jí)數(shù),所以K、L之和完全由圖像的分辨率決定,且K和L呈線性關(guān)系。
圖4資源可置換的直方圖均衡結(jié)構(gòu)性能圖
3性能分析
為驗(yàn)證本文所提出的資源可置換直方圖均衡結(jié)構(gòu)的性能,我們比較本文所提出的結(jié)構(gòu)與其它兩種結(jié)構(gòu)的性能。MatLab仿真中使用8比特灰度級(jí)圖像,在分辨率為256X256、512X512以及1024X1024三種情況下,分別用上述三種結(jié)構(gòu)實(shí)現(xiàn)直方圖均衡,比較三種方法的處理時(shí)間和資源占用情況。
在上述三種方法中,當(dāng)一幀圖像的像素到來時(shí),都可以對(duì)像素進(jìn)行實(shí)時(shí)統(tǒng)計(jì),當(dāng)一幀的最后一個(gè)像素到達(dá)時(shí),該幀的像素統(tǒng)計(jì)結(jié)束。因此,上述三種方法的處理時(shí)間相同。
在處理時(shí)間相同的前提下,上述三種方法的資源占用情況的比較如表1所列。
表1三種方法資源占用情況比較
方法 |
圖像分辨率 |
占用寄存器個(gè)數(shù) |
占用RAM容量 |
256X256X8 |
217X256 |
0 |
|
文獻(xiàn)E,4] |
512X512X8 |
219X256 |
0 |
中的結(jié)構(gòu) |
1204X1024X8 |
221X256 |
0 |
256X256X8 |
0 |
217X256 |
|
文獻(xiàn)[3,5] |
512X512X8 |
0 |
219X256 |
中的結(jié)構(gòu) |
1204X1024X8 |
0 |
221X256 |
256X256X8 |
2nX256 |
2X256 |
|
本文提出 |
512X512X8 |
2nX256 |
2⑴X256 |
的結(jié)構(gòu) |
1204X1024X8 |
2nX256 |
2⑵X256 |
分析上表可以得出,計(jì)數(shù)器個(gè)數(shù)和RAM深度由圖像灰度級(jí)決定,單純使用計(jì)數(shù)器陣列或者存儲(chǔ)器陣列,隨著分辨率的增加,計(jì)數(shù)器位寬或RAM深度呈指數(shù)增長。使用本文中提出的混合使用計(jì)數(shù)器陣列和存儲(chǔ)器陣列,可根據(jù)具體寄存器資源和RAM資源使用情況合理選取N,得到計(jì)數(shù)器和RAM資源的一個(gè)平衡點(diǎn),使工程的資源占用率達(dá)到最小。
4結(jié)語
本文提出了一種可平衡寄存器和存儲(chǔ)器資源的直方圖均衡結(jié)構(gòu),即資源可置換的實(shí)時(shí)直方圖均衡結(jié)構(gòu)。該結(jié)構(gòu)混合使用計(jì)數(shù)器陣列和存儲(chǔ)器陣列,可根據(jù)具體情況合理選擇計(jì)數(shù)器位寬和RAM單元位寬,達(dá)到資源使用的平衡點(diǎn)。還可以根據(jù)設(shè)計(jì)需要以及資源的使用情況,最大化FPGA的資源利用率,有效解決硬件工程設(shè)計(jì)中寄存器或RAM資源不足的問題。同時(shí)也可用于其它寄存器和存儲(chǔ)器互換而不影響整個(gè)系統(tǒng)的功能。
20211221_61c1b3554358c__資源可置換的實(shí)時(shí)直方圖均衡結(jié)構(gòu)設(shè)計(jì)