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