很多情況下,圖像的灰度級集中在較窄的區間,引起圖像細節模糊。通過直方圖處理可以明晰圖像細節,突出目標物體,改善亮度比例關系,增強圖像對比度。直方圖處理基於概率論。
直方圖處理通常包括直方圖均衡化和直方圖規定化。直方圖均衡化可實現圖像的自動增強,但效果不易控制,得到的是全局增強的結果。直方圖規定化可實現圖像的有選擇增強,只要給定規定的直方圖,即可實現特定增強的效果。
直方圖均衡化
直方圖均衡化借助灰度統計直方圖和灰度累積直方圖來進行。
灰度統計直方圖
灰度統計直方圖反映了圖像中不同灰度級出現的統計情況。灰度統計直方圖是一個一維離散函數,可表示為\(h(k) = n_k, k = 0,1,...L-1\),其中k為某個灰度級,L為灰度級的數量,最大取256,\(n_k\)為具有第k級灰度值的像素的數目。
灰度直方圖
歸一化概率
灰度統計直方圖的歸一化概率表達形式給出了對\(s_k\)出現概率的一個估計,可表示為
式中,k為某個灰度級;L為灰度級的數量,最大取256;\(s_k\)為第k級灰度值的歸一化表達形式,\(s_k = k / 255\),故\(s_k \in [0,1]\);\(n_k\)為具有第k級灰度值的像素的數目;N為圖像中像素的總數,故\((n_k / N)\in [0,1]\)。

灰度累計直方圖
灰度累積直方圖反映了圖像中灰度級小於或等於某值的像素的個數。灰度累積直方圖是一個一維離散函數,可表示為
式中,k為某個灰度級;L為灰度級的數量,最大取256;\(n_i\)為具有第i級灰度值的像素的數目。

累積分布函數可以表示為:
相對的,灰度累積直方圖的歸一化表示如下圖:
原理步驟
直方圖均衡化主要用於增強動態范圍偏小的圖像的反差。其基本思想為把原圖像的直方圖轉換為均勻分布的形式,增加像素灰度值的動態范圍,增強圖像整體對比度。
直方圖均衡化的算法步驟為:
-
列出原始圖像的灰度級k,k=0,1,2,…,L-1,L為灰度級的數量;
-
列出原始圖像第k級灰度值的歸一化表達形式\(s_k\);
-
統計各灰度級的像素數目\(n_k,k=0,1,2,…,L-1\)
-
得到灰度統計直方圖的歸一化概率表達形式:\(p_s(s_k)=n_k/N\);
-
畫出基於累積分布函數計算灰度累積直方圖\(E(s_i) = \sum ^k _{i=0}p_s(s_i)\);
-
進行取整擴展,計算映射后輸出圖像各灰度級對應灰度值的歸一化表達形式\(t_k\):\(t_k=INT((L-1)E(s_k)+0.5)/255\),其中,INT為取整函數;
-
確定映射關系\(s_k→t_k\);
-
統計映射后各灰度級的像素數目\(n_k\);
-
得到新的灰度統計直方圖的歸一化概率表達形式:\(p_t(t_k)=n_k/N\),N為輸出圖像的像素數目,即原始圖像的像素數目。
列表計算
現有一張64*64的8比特灰度圖像,其灰度統計直方圖如圖所示,對其進行直方圖均衡化:

其直方圖均衡化計算列表如下圖所示:
從結果可以看出,均衡化后的圖像對比度增加,圖像細節比較清晰,反映在其灰度統計直方圖上就是像素占據灰度值允許的整個范圍,分布比較均衡。
直方圖均衡的缺點
綜上所述,直方圖均衡化的優點是能夠增強整個圖像的對比度。其缺點主要包括:
- 增強效果不易控制,處理的結果總是得到全局均勻化的直方圖。
- 均衡化圖像的動態范圍擴大,本質上是擴大了量化間隔,但量化級別(灰度級)反而減少了,導致某些圖像細節消失。
- 對於直方圖存在高峰的圖像,經處理后對比度可能過分增強。
- 導致出現偽輪廓;原來灰度值不同的像素經過處理后可能變為相同,從而形成一片灰度值相同的區域,各區域之間有明顯的邊界,導致出現偽輪廓。
直方圖規定化
直方圖均衡化處理的結果總是得到全局均勻化的直方圖,實際中有時需要變換直方圖使之成為某種需要的形狀,此時,可以采用比較靈活的直方圖規定化方法。
原理步驟
直方圖規定化是指通過灰度映射函數,將灰度直方圖改造成所希望的直方圖,從而有選擇地增強某個灰度值范圍內的對比度,使圖像灰度值的分布滿足特定的要求。
直方圖規定化的算法步驟為:
- 列出原始圖像的灰度級k,k=0,1,2,…,L-1,L為灰度級的數量;
- 出原始圖像第k級灰度值的歸一化表達形式sk;
- 統計各灰度級的像素數目\(n_k\),k=0,1,2,…,L-1;
- 得到灰度統計直方圖的歸一化概率表達形式:\(p_s(s_k)=n_k/N\),N為原始圖像的像素數目;
- 基於累積分布函數計算灰度累積直方圖:;
- 列出規定化圖像的灰度級l,l=0,1,2,…,M-1,M為灰度級的數量;
- 列出規定化圖像第l級灰度值的歸一化表達形式\(t_l\);
- 規定直方圖,即得到規定化圖像的灰度統計直方圖的歸一化概率表達形式:\(p_t(t_l)=n_l/N\);
- 基於累積分布函數計算規定化圖像的灰度累積直方圖:\(E(t_l) = \sum ^l _{i=0}p_t(t_i)\);
- 采用灰度映射規則,計算映射后輸出圖像各灰度級對應灰度值的歸一化表達形式\(t_k\);
- 確定映射關系\(s_k→t_k\);
- 統計映射后各灰度級的像素數目nl;
- 得到新的灰度統計直方圖的歸一化概率表達形式:\(p_t(t_l)=n_l/N\),N為輸出圖像的像素數目,即原始圖像的像素數目。
灰度映射規則是直方圖規定化的關鍵。由於存在取整誤差的影響,灰度映射規則的好壞在離散空間尤其重要。常用的灰度映射規則包括單映射規則(SML)和組映射規則(GML)。
單映射規則(Single Mapping Law, SML)要求k從小到大變化,依次找到能使下式最小的l。對於每組k和l,分別將\(p_s(s_k)\)映射到\(p_t(t_l)\)。該方法簡單直觀,但有時會產生較大的取整誤差。
直方圖均衡化處理的結果總是得到全局均勻化的直方圖,實際中有時需要變換直方圖使之成為某種需要的形狀,此時,可以采用比較靈活的直方圖規定化方法。
原理步驟
直方圖規定化是指通過灰度映射函數,將灰度直方圖改造成所希望的直方圖,從而有選擇地增強某個灰度值范圍內的對比度,使圖像灰度值的分布滿足特定的要求。
直方圖規定化的算法步驟為:
- 列出原始圖像的灰度級k,k=0,1,2,…,L-1,L為灰度級的數量;
- 出原始圖像第k級灰度值的歸一化表達形式sk;
- 統計各灰度級的像素數目\(n_k\),k=0,1,2,…,L-1;
- 得到灰度統計直方圖的歸一化概率表達形式:\(p_s(s_k)=n_k/N\),N為原始圖像的像素數目;
- 基於累積分布函數計算灰度累積直方圖:;
- 列出規定化圖像的灰度級l,l=0,1,2,…,M-1,M為灰度級的數量;
- 列出規定化圖像第l級灰度值的歸一化表達形式\(t_l\);
- 規定直方圖,即得到規定化圖像的灰度統計直方圖的歸一化概率表達形式:\(p_t(t_l)=n_l/N\);
- 基於累積分布函數計算規定化圖像的灰度累積直方圖:\(E(t_l) = \sum ^l _{i=0}p_t(t_i)\);
- 采用灰度映射規則,計算映射后輸出圖像各灰度級對應灰度值的歸一化表達形式\(t_k\);
- 確定映射關系\(s_k→t_k\);
- 統計映射后各灰度級的像素數目nl;
- 得到新的灰度統計直方圖的歸一化概率表達形式:\(p_t(t_l)=n_l/N\),N為輸出圖像的像素數目,即原始圖像的像素數目。
灰度映射規則是直方圖規定化的關鍵。由於存在取整誤差的影響,灰度映射規則的好壞在離散空間尤其重要。常用的灰度映射規則包括單映射規則(SML)和組映射規則(GML)。
單映射規則(Single Mapping Law, SML)要求k從小到大變化,依次找到能使下式最小的l。對於每組k和l,分別將\(p_s(s_k)\)映射到\(p_t(t_l)\)。該方法簡單直觀,但有時會產生較大的取整誤差。
式中,L和M分別為原始圖像和規定化圖像的灰度級的數量,且L≥M。
組映射規則(Group Mapping Law, GML)效果較好。設有一整數函數\(I(l)\),l=0,1,…,M-1,滿足下式子:
確定使下面公式的最小的整數函數\(I(l)\)。若\(l=0\),則將i從0到I(0)的\(p_s(si)\)映射到\(p_t(t_0)\);若\(l≥1\),則將i從\(I(l-1)+1\)到\(I(l)\)的\(p_s(s_i)\)映射到\(p_t(t_l)\)。
列表計算
有一張64×64的8比特灰度圖像,其灰度統計直方圖和規定圖像的灰度統計直方圖如下圖所示,對其進行規定化:
直方圖規定化的步驟和結果如下所示:
其中,SML和GML的計算列表如下:
繪圖計算
直方圖規定化的列表計算方式不是很直觀,一種更加直觀和簡單的方式是繪圖計算方式。
采用繪圖計算方式進行計算,將直方圖畫成一長條,每一段對應直方圖中的一項,整個長條表達了累積直方圖。
SML映射規則繪圖計算示例如下圖所示,各點映射關系由圖中實線刻畫。SML映射規則取原始累積直方圖的各項依次向規定累積直方圖映射,每次都選擇最接近的數值,即遵循最短或者說最直的連線。
(1)0.19與0.20的連線(實線)比0.19與其他點的連線都更短,故0.19映射到0.20;
(2)0.44與0.20的連線(實線)比0.44與0.80的連線(虛線)更短,故0.44映射到0.20;
(3)0.65與0.80的連線(實線)比0.65與其他點的連線都更短,故0.65映射到0.80;
(4)0.81與0.80的連線(實線)比0.81與其他點的連線都更短,故0.81映射到0.80;
(5)0.89與0.80的連線(實線)比0.89與1.00的連線(虛線)更短,故0.89映射到0.80;
(6)0.95與1.00的連線(實線)比0.95與其他點的連線都更短,故0.95映射到1.00;
(7)0.98與1.00的連線(實線)比0.98與其他點的連線都更短,故0.98映射到1.00;
(8)1.00與1.00的連線(實線)比1.00與其他點的連線都更短,故1.00映射到1.00。

GML映射規則繪圖計算示例如下圖所示,各點映射關系由圖中實線刻畫。
GML映射規則取規定化累積直方圖的各項依次向原始累積直方圖映射,每次都選擇最接近的數值,即遵循最短或者說最直的連線。
(1)0.20與0.19的連線(實線)比0.20與0.44的連線(虛線)更短,故0.20映射到0.19,因此,原始累積直方圖的第1項映射到規定化累積直方圖的第1項;
(2)0.80與0.81的連線(實線)比0.80與0.65的連線(虛線)和0.80與0.89的連線(虛線)更短,故0.80映射到0.81,因此,原始累積直方圖的第2、3、4項映射到規定化累積直方圖的第2項;
(3)1.00與1.00的連線(實線)比1.00與其他點的連線都更短,故1.00映射到1.00,因此,原始累積直方圖的第5、6、7、8項映射到規定化累積直方圖的第3項。
下圖為直方圖規定化示例:
兩種映射比較
- 映射效果:
SML映射規則是有偏的映射規則,一些對應灰度級被有偏地映射到接近計算開始的灰度級。GML映射規則是統計無偏的映射規則。 - 映射誤差
映射誤差用對應映射間數值的差值的絕對值的和來度量,和值越小,映射效果越好。理想情況下,和值為0。
以SML映射規則為例,映射誤差=|0.44-0.20|+|(0.89-0.44)-(0.80-0.20)|+|(1.00-0.89)-(1.00-0.80)|=0.48。
以GML映射規則為例,映射誤差=|0.20-0.19|+|(0.80-0.20)-(0.81-0.19)|+|(1.00-0.80)-(1.00-0.81)|=0.04。
可見,GML映射規則產生的誤差小於SML映射規則產生的誤差。 - 誤差期望值
SML映射規則的期望誤差大於等於GML映射規則的期望誤差,因此,GML映射規則總會得到比SML映射規則更接近規定直方圖的結果。