機器視覺演算法(第13期)—-直方圖處理中的兩大神器!
- 2019 年 12 月 6 日
- 筆記
上期我們一起揭開了影像處理中的卷積操作的疑惑, 機器視覺演算法(第12期)—-影像處理中的卷積操作真的是在做卷積嗎? 今天,我們一起看下直方圖處理中的兩大神器:直方圖均衡與直方圖匹配。
這兩個東西,自從學過之後,一直很少用,直到最近在對影像進行對比度拉伸的時候,發現這個玩意兒是那麼的爽。
首先,撇除詳細原理,先兩句話把直方圖均衡和直方圖匹配說明下。 其實直方圖均衡和直方圖匹配跟那些log變化,冪指變換,γ變化本質差不多,區別就在於這個變換函數的不同。
直方圖均衡:把影像像素的灰度值根據自身直方圖的累積分布函數,進行灰度值變換。 直方圖匹配:把影像像素的灰度值根據模板直方圖的累積分布函數,進行灰度值變換。
在進行具體操作之前,先說下啥是直方圖的累積分布函數? 累積分布函數其實就是概率分布函數的積分。在直方圖上就體現為小於灰度值L的像素個數所佔的比例,這個比例最大值為1,最小值為0。
直方圖均衡
那麼直方圖均衡具體怎麼操作呢?這裡不去整什麼公式說明(想看的話,可以找本影像處理書籍翻翻),用一個例子進行說明:
假如,我們有一張64×64大小,3bit的影像(8個灰度級),該影像的灰度分布以及直方圖值如下:

其中r值為灰度級,n為像素個數,p為佔比即概率值。接下來怎麼做均衡呢? 既然是按照直方圖的累積分布函數進行變換,那麼就需要對直方圖概率密度函數做累積,如下公式,其中L-1為最大灰度值,p的求和為累積分布函數:

具體計算如下:

依次計算結果取整如下:

其中s0就是將灰度值r0進行均衡後的灰度值,依次類推。然後,我們看下均衡前後的直方圖以及變換函數,如下,其中左圖為原圖直方圖,中圖為變換函數,即左圖的累積分布函數,有圖為均衡後的直方圖:

因為直方圖是概率密度函數的近似,而且在處理中不允許造成新的灰度級,所以在實際的直方圖均衡應用中,很少見到完美平坦的直方圖。從上面直方圖也可以看到,均衡後並沒那麼平坦,但是確實具有展開輸入影像直方圖的趨勢,均衡後的影像的灰度級跨越更寬灰度級範圍,最終結果是增強了對比度。 最後來看一組實際圖片效果(圖片來源於岡薩雷斯數字影像處理),其中,左側影像為原圖,中間為均衡後的影像,右側為均衡後的直方圖,效果杠杠的:

直方圖匹配
懂了直方圖均衡,那麼直方圖匹配就沒那麼難理解了,本質上就是把原影像的累積分布函數換成模板影像的累積分布函數。但是具體實現來說,多了一些伎倆。這裡,我們還是採用一個例子進行說明,還採用上面的64×64的那個圖,其直方圖如下圖中的左上圖,右上圖為需要匹配的直方圖,左下圖為右上圖得到的變換函數,右下圖為將左上圖進行直方圖匹配後的結果。

具體實現如下: 首先第一步,對其本身原影像進行做一個直方圖均衡,如下:

第二步,對模板影像進行直方圖均衡,得到結果如下:

接下來第三步就是將s映射到z上的一個就近映射變換,如下圖:

其中rk代表原影像的灰度值,sk為原影像均衡後的值,G(z)為目標影像均衡後的值,Zq為目標影像的灰度值。這樣根據sk和Gz的就近映射,就將原影像的直方圖匹配到了模板影像的直方圖上。
其實直方圖匹配對影像的效果是根據要匹配的直方圖而定的,不是說一定能拉伸對比度,能增加亮度啥的,主要是看要匹配的直方圖是一個什麼樣的效果。大多數時候,直方圖匹配都是一個試湊的過程。一個可用的指導路線就是用手邊的問題進行學習,一般來說,並沒有規定直方圖的規則,對於任何一個給定的增強任務都必須藉助於實際分析。
好了,至此,我們一起揭開了直方圖處理中的兩大神器,希望對我們的學習有所幫助,感覺對您有幫助,就點個贊吧。