直方圖線性拉伸相對于直方圖均衡化來說就更好理解一些了,即用線性變化將灰度直方圖較窄的部分拉伸至整個區(qū)間,增強整幅圖像的對比度。
線性拉伸的效果如下圖所示,可以看出圖像對比度有所改善,保留了直方圖基本的輪廓,同時將直方圖范圍拉伸至0~255。
圖 1 直方圖拉伸效果圖
算法也比較容易理解,f(x,y)為輸入圖像,得到輸出圖像g(x,y)
其中A和B可以分別定義為圖像的最小灰度值與最大灰度值,即
但是實際應(yīng)用中并不會直接采用上述的A和B,這是由于圖像中可能存在噪聲的原因。想象如果圖像中存在幾個純白點(255)和純黑點(0),那么拉伸后的效果就無法達(dá)到預(yù)期。
因此我們?nèi)藶榈脑O(shè)定兩個閾值Thr_Min和Thr_Max,拉伸系數(shù)A,B定義如下:
其中∑H(k)為灰度直方圖累計和。下圖更直觀的表示了A和B的取值,Thr_ Min和Thr_Max是藍(lán)色部分的面積。
圖 2 A,B系數(shù)的定義
系統(tǒng)框架
圖 3 直方圖線性拉伸系統(tǒng)框架
上圖可以看出,前半部分的直方圖統(tǒng)計電路和上篇均衡化完全一樣,只是對后半部分的電路做了些修改。計算直方圖線性拉伸后的像素值的步驟如下:
1. 統(tǒng)計第一幀圖像的灰度直方圖
2. 計算直方圖累計和
3. 由閾值Thr_Min和Thr_Max算出拉伸系數(shù)A,B
4. 第二幀圖像灰度值帶入公式計算后輸出
和直方圖均衡化一樣,這里我們不考慮幀緩存的問題,也就是前一幀的A,B作為當(dāng)前幀A,B來使用。
代碼分析
A,B系數(shù)的計算
hist_cnt為計算出的累計和(與直方圖均衡化中的求法一樣),當(dāng)累計和大于閾值的時候,記錄下此時累計和對應(yīng)的地址out_pixel[8:1](即灰度值),作為我們的拉伸系數(shù)A,B,同時設(shè)置取得系數(shù)標(biāo)志get_max或get_min為1。最后要在第二幀累計和到來時,清零A,B及get標(biāo)志。
2. B-A的計算
取得系數(shù)B后(get_max=1),即可計算出B-A 。
3. f(x,y)-A (第一級流水)
當(dāng)f(x,y)小于系數(shù)A時,直接令f(x,y)-A=0;當(dāng)f(x,y)大于系數(shù)B時,直接令f(x,y)-A=B-A。
4. [f(x,y)-A ]*255 (第二級流水)
5.[f(x,y)-A ]*255/(B-A) (第三級流水)
實驗結(jié)果
圖 4 原圖 圖 5 閾值為100時處理后的圖像
有沒有覺得這兩幅圖并沒有什么差別,小編也納悶了很久。之前有提到過噪聲可能對直方圖線性拉伸的影響,下面是將閾值Thr_Min調(diào)高至1000后得到的結(jié)果。
圖 6 閾值為1000時處理后的圖像
可以看出直方圖線性拉伸需要人為的調(diào)整閾值的大小,才能達(dá)到理想效果。而直方圖均衡化則不需要。
審核編輯 :李倩
-
FPGA
+關(guān)注
關(guān)注
1630文章
21796瀏覽量
605292 -
圖像
+關(guān)注
關(guān)注
2文章
1089瀏覽量
40540 -
線性
+關(guān)注
關(guān)注
0文章
199瀏覽量
25184
原文標(biāo)題:基于FPGA灰度直方圖線性拉伸
文章出處:【微信號:zhuyandz,微信公眾號:FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論