1. 程式人生 > >直方圖均衡化(Histogram equalization)與直方圖規定化

直方圖均衡化(Histogram equalization)與直方圖規定化

心血來潮,想寫一寫直方圖均衡化。我先說說為什麼要寫直方圖均衡化,因為之前接觸到理論上的面試,看起來很簡單的知識點,其實暗藏著很多的玄機(-_-)。本文儘量嘗試著去推導。推導之前寫一下基本的原理。

1、為什麼要做直方圖均衡化與直方圖規定化

在現實的拍攝過程中,比如說視訊監控領域,由於其影象的灰度分佈集中在較窄的範圍內,這就導致了影象的細節不夠清晰。為什麼不清晰呢,因為灰度分佈較窄時,那麼,在計算對比度的時候,對比度就很小,所以就不清晰。為了使得影象變得清晰,那麼就需要使得灰度值的差別變大,為了使得灰度值的差別變大,就意味著灰度分佈就變的較寬,使得灰度值分佈變得均勻,在某個灰度級區間內,畫素的個數分佈大致相同,這樣才能使得影象的對比度增強,細節變得清晰可見。

2、直方圖均衡化的原理

直方圖均衡化就是對影象進行非線性拉伸,使得變換後的影象直方圖分佈均勻。那麼怎樣才能使得新影象的直方圖分佈均勻呢?

在介紹直方圖均衡化的原理之前,先介紹隨機變數的函式分佈的數學知識。

2.1、隨機變數的函式分佈

2.2.1、連續隨機變數的函式分佈

假設連續隨機變數的X的概率密度為,求X的函式的概率密度函式 通用的做法是: (1)先求分佈函式
(2)對上面公式兩端求導就可以求得概率密度函式 另外,如果是單調函式,則可以用公式法來求解。
這裡有一個定理:假設隨機變數X的概率密度為,設函式g(x)處處可導,且有(或者),則有是連續型隨機變數,其概率密度函式為
式中,,h(y)是g(x)的反函式 證明(只證明的情形): 時,則g(X)在上是嚴格單調增加的,而且其反函式h(y)也是存在的,且反函式也是單調增加可導的。 因為,的取值範圍為 則當時, 則當時, 時, 對y求導,則
為什麼成立呢,因為相當於把Y=g(X)轉換為X=h(Y). 同理,當時,

2.2.2、離散隨機變數的函式分佈

設X是離散型隨機變數,X的分佈律為
則Y=g(X)的分佈律為
上面表中,當某兩個g(xi)相等時,就把概率合併,就是概率相加,然後重新繪製表格。

2.2 直方圖均衡化的推導

直方圖均衡化的目的是使得變換後的影象的直方圖是均勻分佈的,又因為概率密度是指變數落在某個區間的概率,而累積分佈函式

的導數就是概率密度函式。所以,當分佈均勻時,就是使得概率密度能夠保持為一個常數。有了這些分析,我們的目的就是想找到這樣的一種變換函式,使得變換後圖像直方圖分佈均勻(這裡的直方圖都用灰度級的個數除以總畫素個數,進行歸一化。)

假設r和s分別是變換之前和變換之後的影象灰度級,r和s都進行了歸一化的處理。假設變換函式為

s=T(r),此變換公式滿足0≤r≤1,0≤s≤1;當0≤r≤1時,T(r)是單調遞增的。

,假設r的概率密度為P(r),則s的概率密度可以表示為(根據上面我們介紹的概率密度函式的求解方法):

(1)

假設從r到s的變換函式為

  (2)

式中,明顯是r的累積分佈函式(也就是

公式(2)兩邊對r求導得到


帶入到公式(1)中,得到


哇,太神奇了,當我們用r的累積分佈函式作為變換函式時,得到s的概率密度函式是1(也就是均勻的意思)。

好了,這裡就用連續函式的方式證明了採用原始影象直方圖的累積分佈來實現直方圖均衡化是可行的。

由於我們的影象是離散的,所以,這樣怎麼求變換後的影象呢,只是把連續的函式離散化就行了。

(1)先求原始影象的直方圖,就是每個灰度級的畫素個數除以總畫素個數,就是概率密度,


(2)原始影象灰度級概率密度的累積就是新影象灰度級的概率密度


k是新影象的灰度級,最大是255,也可以任意設定。

(3)由於上面求得的s是0到1之間的,然後乘以255或者設定的最大灰度級,就得到新影象的灰度值。

好了,這裡就基本上說明了為什麼要採用累積分佈做直方圖均衡化,以及如何做直方圖均衡化。

3、直方圖規定化

前面介紹了直方圖均衡化,但是這是一種通用的對比度提升方法,如果我們想把影象變換到制定的直方圖就顯得力不從心。所以就有了直方圖規定化,就是對原始影象做變換,使得變換後的影象的直方圖跟我們規定的一樣。

假設原始影象的畫素值為r,概率密度為P(r);做直方圖均衡化之後的灰度值為s,均衡化之後的概率密度為P(s);希望要的影象的概率密度為P(z),再次情況下,求得其畫素值z。

實際上,規定化也是均衡化的一種,那麼,就可以把均衡化的結果作為一種中間結果,建立起原始影象與固定化影象的一種橋樑。

具體步驟如下:

(1)首先對原始影象做直方圖均衡化,得到每個畫素s和累積分佈T(s);

(2)根據需要的規定化直方圖,求累積分佈G(Z);

(3)顯然,如果累積直方圖中有0值,那麼是不會分配畫素值的,因為0乘以255還是零。

(4)對於每一個T(s)(假設其畫素值為ss),找到在G(Z)中與其差值最小的那個G(z)值(假設對應的畫素值為zz),那麼規定化後就把ss變換為zz。

下面用兩個典型的例子來說明,(資料來源於網際網路,如有侵權,請告知)