http://blog.csdn.net/hit2015spring/article/details/50529713
版權聲明:本文為博主原創文章,未經博主允許不得轉載。
本文為原創作品,轉載請注明出處
歡迎關注我的博客:http://blog.csdn.net/hit2015spring和http://www.cnblogs.com/xujianqing/
作者: 晨鳧追風
本文的學習是基於岡薩雷斯《數字圖像處理第二版》這本專著的對應於書中章節3.3
這一篇文章如題,主要是講直方圖均衡化和匹配的一些基本概念。不涉及很多的技術問題專業數學推導,只是為入門圖像處理做一個感性的認識,具體應用請朋友們自己發揮創造,歡迎大家一起來交流。
好了言歸正傳。
直方圖統計的概念很早就已經和我們接觸了,今天我們統計的對象是數字圖像的像素灰度級,正如上一篇博客中介紹的那樣,對圖像中的每個灰度級進行投票計數。這里定義幾個變量:
OK,從定義就可以得到各個變量之間的關系了:

根據我們就可以得到歸一化的灰度級直方圖了。
在上一篇博客中提到了,直方圖的分布與圖像的亮度對比度是息息相關的,高對比度的圖像直方圖分布會覆蓋很寬灰度級,而且直方圖的分布比較均勻。低對比度的圖像直方圖分布比較窄,而且集中於灰度級的一側,上圖瞅一眼:
上圖是灰度級分布窄的圖片
上圖是灰度級分布寬的圖片
OK 開胃小菜上完,來干貨
直方圖均衡化
既然直方圖的分布對圖像有那么直觀的影響,能不能開發出一種函數變換讓原來不那么均勻的直方圖,變得均勻一點呢?答案是肯定的。那就是直方圖均衡化。
把輸出圖像的灰度級用s表示,變換公式就變成了
s = T(rk)
解釋一下:這里的均衡化是像素點到對應的像素點變化如圖:


每一點的像素經過T(r),對應的輸出就是目標的像素灰度級s。在書中對T(r)進行了如下兩個條件的規定
(a)T(r)在區間[0,L-1]上是單值且單調遞增的
對於(a)的解釋是,如果原來的灰度級高,那么變換之后輸出的灰度級也應該比較高,否則黑白顛倒,圖像將不能看了。(b)的限制也比較直接,輸出的灰度級不能亂來,太大太小都不行,必須在原來的范圍之內,否則顯示圖片會出錯。
(b)當0≤r≤L-1時,0≤T(r)≤L-1
把一幅圖像的灰度級(r或s)看成是一個隨機變量,用Pr(r)和Ps(s)表示灰度級為r和s的概率密度,
然后呢一個非常牛逼閃閃的公式就產生了
其中,w是積分假變量。公式的右邊是隨機變量r的累積分布函數,因為概率密度函數總是為正,這樣函數下方的積分面積就會隨着r增大而增大,就滿足了(a),當積分積到上限(L-1)時函數下方的面積就成了1,滿足條件(b)
其中若知道變換T(r)和Pr(r)則s的概率密度可以用概率論的知識得到。
最后證明出輸出級s是在L-1的范圍內均勻分布是的具體證明截圖如下:
這就證明了利用累積分布函數轉換灰度級,輸出的灰度級s就在[0,L-1]之間服從均勻分布。
最后呢對牛逼的公式進行離散化(求積分換成求和)處理就得到了如下公式
在這里還要強調一點,由於累積分布函數和輸入圖像的灰度級相乘,不一定得到一個整數,但是輸出的灰度級要求整數,於是我們這里四舍五入取整數灰度級。
這樣呢只要一幅輸入一幅圖像,不需要任何的條件,我們就可以對它進行直方圖均衡化,這是一個可以自動的完成的算法。
說了這么多,用一個例題來總結一下直方圖均衡化的功能。
假設有一個圖像4X4的16個像素點,最大灰度級為7,對應的像素點的值如下:
| 4 |
5 |
6 |
6 |
| 5 |
4 |
5 |
5 |
| 6 |
6 |
5 |
5 |
| 5 |
5 |
5 |
6 |
對其進行直方圖均衡化。
步驟如下:
1、 統計直方圖,
2、 求出對應的概率密度
3、求累積分布函數
4、求出每個灰度級對應的輸出灰度級
5、映射到新的圖像
| 輸入灰度級 |
統計直方圖 |
概率密度 |
累積分布函數 |
輸出灰度級 |
| 4 |
2 |
0.125 |
0.125 |
0.875=1 |
| 5 |
9 |
0.5625 |
0.6875 |
4.8125=5 |
| 6 |
5 |
0.3125 |
1 |
7 |
最后輸出圖像為
| 1 |
5 |
7 |
7 |
| 5 |
1 |
5 |
5 |
| 7 |
7 |
5 |
5 |
| 5 |
5 |
5 |
7 |
直方圖匹配
上面介紹了對一幅輸入圖像的直方圖進行均衡化的過程,這是一個對圖像操作自動增強的過程,但是有時候我們並不想要一個均衡化的直方圖,而是想要一個我們指定的直方圖,這時候就需要另外一種方法來滿足我們的需要,這就是直方圖的匹配。
對於直方圖匹配的思想書本中介紹了一些算是比較嚴謹的推導證明過程,但是對於一般的理解來說會比較困難。那么開始一邊推導一邊解釋吧:
首先定義r 、z分別表示輸出圖像的灰度級和輸出圖像的灰度級。
Pz(z)是指定的要輸出灰度級的概率密度,它是已知的。定義s和v是一個中間過渡圖像的灰度級。則有直方圖均衡化的偉大公式
為了建立輸入和輸出的關系,讓s = v(關鍵就是為啥他們要相等呢?)我們回過頭來想想改變直方圖的本質就知道了。看圖
其實就是把原來的灰度級在新的灰度級坐標軸上面重新排列一下,但是對應的灰度級在哪個地方呢?我們要尋找一個關系來匹配一下,於是呢就聯想到了累積分布函數身上來。於是呢我們就得到了求解輸出灰度級的一種辦法。
1、先求的出輸出想要輸出的每個灰度級的累積分布函數ZCDF(由於灰度級是離散的,所以呢求解出來就大大的簡單了)
2、求出輸入圖像的灰度級的累積分布函數RCDF,這樣也很簡單吧
3、用輸入圖像的累積分布函數RCDF去和目標累積分布函數ZCDF去匹配,這個過程中可能不會有一個百分百的相等,但是我們可以匹配一個最接近的輸出灰度級。(哪有完美存在呢?你說是不是)逐個進行之后,就把輸入圖像的灰度級在目標的坐標軸上排列好了。
4、最后和直方圖均衡化的最后一步一樣,逐個像素進行映射

完成!
原創作品,如有不足,敬請批評指正!轉載請先聯系博主!謝謝!
