1.對(duì)比度增強(qiáng)原理
對(duì)比度增強(qiáng)是個(gè)廣泛的話題,前文中關(guān)于直方圖均衡的方法,其實(shí)就是一種對(duì)比度增強(qiáng)。而對(duì)比度增強(qiáng),就是提高明暗之間的差異,從而達(dá)到提高圖像對(duì)比度、改善主觀視覺效果的目的。
采用直方圖均衡的方法,其實(shí)是對(duì)圖像灰度的拉伸,但本文將介紹的,是基于曲線灰度映射變換。典型的比如指數(shù)變換,對(duì)數(shù)變換,Gamma變換等等。
為了直觀的說明對(duì)比度增強(qiáng)的效果,我們先生成一張灰度對(duì)稱分布圖,以指數(shù)對(duì)比度增強(qiáng)為例,效果如下所示??梢妼?duì)比度增強(qiáng)后的圖,黑色部分更黑了,白色部分更白了,對(duì)比更明顯了。
然后我們進(jìn)一步分析增強(qiáng)前后的直方圖,可見增強(qiáng)后圖像的直方圖,暗的像素值更暗的,亮的像素值也更亮了,敏感之間的對(duì)比更大,那么對(duì)于對(duì)比度較低的圖像,增強(qiáng)后確實(shí)可以提高可視度。
相關(guān)代碼如下:
指數(shù)對(duì)比度增強(qiáng)有很多方法,但萬變不離其宗,即以一定閾值為中心,提高閾值以上的亮度,并降低閾值以下的亮度。典型的以對(duì)數(shù)對(duì)比度增強(qiáng)函數(shù)為例,公式如下所示:
針對(duì)閾值=127,E取2/4/6的曲線,使用Matlab繪制,如下所示:
如上圖所示,分別是E=2,E=4,E=6的指數(shù)對(duì)比度增強(qiáng)曲線,橫坐標(biāo)為原始像素,縱坐標(biāo)為映射后的像素。從曲線可見,E的值越大,對(duì)暗區(qū)的壓縮及亮區(qū)的提升程度就越大,那么明暗之間的對(duì)比就越明顯,即E可以表示為圖像對(duì)比度增強(qiáng)的程度。圖中三條曲線交匯在閾值127處,那么也可以采用不同程度增強(qiáng)曲線的融合模式,比如閾值以下采用E=2,閾值以上采用原值或E=6方式,區(qū)別對(duì)待圖像明暗區(qū)域的對(duì)比度。
2.指數(shù)對(duì)比度增強(qiáng)Matlab實(shí)現(xiàn)
這里以閾值=127,E=7為例,我們看一下對(duì)比度增強(qiáng)后的圖像效果。其中matlab代碼如下:
對(duì)比度增強(qiáng)后的圖如下所示,可見原圖對(duì)比度較低,整體給人灰蒙蒙的效果,而右圖則看起來更通透,明暗之間的對(duì)比度更加鮮明,整體視覺效果也更好了。
結(jié)合之前講過的直方圖均衡算法,與現(xiàn)在指數(shù)對(duì)比度增強(qiáng)效果以及各自的直方圖進(jìn)行對(duì)比,如下圖所示:
我們從以下幾個(gè)方面去對(duì)比效果:
1)對(duì)比度:
由灰度圖可見,明暗對(duì)比不明顯。通過對(duì)比度增強(qiáng),壓縮了暗區(qū)并提高了亮區(qū),明暗對(duì)比度提高了;通過直方圖拉伸后,將圖像灰度拉伸到0-255,自然明暗之間的對(duì)比度也提高了。不過對(duì)比效果,直方圖對(duì)比度更高,同時(shí)也引入了局部過曝的問題。
2)直方圖
由直方圖可見,原圖像素集中在100左右,對(duì)比度增強(qiáng)后,壓縮/拉伸到25-150,而直方圖均衡后拉伸到了0-255,因此從當(dāng)前測試圖來看,直方圖拉伸后的動(dòng)態(tài)范圍更寬,不過這也因圖而異,比如原圖就比較亮的圖,對(duì)比測試效果如下,對(duì)比度增強(qiáng)后效果還差強(qiáng)人意,而直方圖拉伸后圖像過暗,因?yàn)楸旧砥?,拉伸后則整體亮度降低了。
3.指數(shù)對(duì)比度增強(qiáng)FPGA實(shí)現(xiàn)
直方圖拉伸,本質(zhì)上是對(duì)像素概率的統(tǒng)計(jì),然后進(jìn)行擴(kuò)展拉伸。
而對(duì)比度增強(qiáng),無論是指數(shù)函數(shù),還是各類曲線映射,其本質(zhì)上就是一種像素映射操作。由于指數(shù)函數(shù)、對(duì)數(shù)函數(shù)等,實(shí)時(shí)的計(jì)算比較耗時(shí)。并且當(dāng)選定參數(shù)后,其結(jié)果是固定的,因此可以根據(jù)參數(shù)提前計(jì)算好函數(shù)的映射結(jié)果,再以數(shù)組的方式進(jìn)行索引,得到計(jì)算后的結(jié)果。這種方法,在學(xué)術(shù)領(lǐng)域通俗的講就是Mapping操作,可在X-Y坐標(biāo)上找到各自的映射點(diǎn)。
以E=7,THRESHOLD=127為例,指數(shù)對(duì)比度產(chǎn)生的結(jié)果如下所示(reshape是為了方便在Command Windows中顯示,實(shí)際上是一個(gè)一維數(shù)組),在matlab中可以直接根據(jù)如下結(jié)果進(jìn)行索引映射。
在FPGA中進(jìn)行Mapping操作時(shí),可以將數(shù)組存放在RAM或者以RTL源碼的方式進(jìn)行映射。FPGA的RAM采用的是mif或hex的格式進(jìn)行存儲(chǔ),并且在生成RAM的時(shí)候需要進(jìn)行文件的指定。由于256Byte的存儲(chǔ)不大,同時(shí)為了提高移植的靈活度,這里我推薦使用RTL源代碼的方式,并且使用matlab直接生成verilog文件。以指數(shù)對(duì)比度增強(qiáng)為例,生成文件的源碼如下所示:
在當(dāng)前文件夾下將會(huì)生成Curve_Contrast_Array.v文件,即為Matlab生成的曲線對(duì)比度映射verilog文件,由于最終實(shí)現(xiàn)只是一個(gè)簡單的地址譯碼,電路相對(duì)比較簡單,因此直接采用組合邏輯實(shí)現(xiàn),生成的代碼如下所示:
至此,我們已經(jīng)生成好了Mapping的數(shù)組,那么在FPGA中只需要簡單的映射就可以完成指定強(qiáng)度的對(duì)比度增強(qiáng)算法,即只需要例化該模塊,進(jìn)行原始數(shù)據(jù)的映射,輸出增強(qiáng)后的數(shù)據(jù)即可,相關(guān)代碼如下所示:
4.RTL仿真結(jié)果及實(shí)測
原文標(biāo)題:圖像指數(shù)對(duì)比度增強(qiáng)之Matlab&FPGA實(shí)現(xiàn)
文章出處:【微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
FPGA
+關(guān)注
關(guān)注
1629文章
21729瀏覽量
602986 -
代碼
+關(guān)注
關(guān)注
30文章
4779瀏覽量
68521 -
指數(shù)函數(shù)
+關(guān)注
關(guān)注
0文章
3瀏覽量
5801
原文標(biāo)題:圖像指數(shù)對(duì)比度增強(qiáng)之Matlab&FPGA實(shí)現(xiàn)
文章出處:【微信號(hào):HXSLH1010101010,微信公眾號(hào):FPGA技術(shù)江湖】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論