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