灰度直方圖均衡化及其實現

WKP9418發表於2020-11-01

直方圖均衡化

定義

當直方圖中畫素值集中在狹窄的灰度級範圍內或分佈極不均勻時,影像呈現較差的對比度。直方圖均衡化的目的就是將直方圖的灰度級概率分佈變換為均勻分佈。(如下圖所。注意,p(x)是概率密度函式,P(x)是概率分佈函式)

由於直方圖中概率較小的灰度級合併為更少的幾個或一個灰度級內,從而降低了影像的灰度級解析度,且某些細節資訊處於概率較小的灰度級中,這樣的灰度級歸併到其他灰度級內,從而造成影像細節資訊的丟失。

公式

輸入r,輸出s
s = T ( r ) = ( L − 1 ) ∑ j = 0 k P ( r j ) = L − 1 M N ∑ j = 0 k n j , ( k = 0 , 1... L − 1 ) s=T(r)=(L-1)\sum_{j=0}^k{P(r_j)}=\frac{L-1}{MN}\sum_{j=0}^kn_j ,(k=0,1...L-1) s=T(r)=(L1)j=0kP(rj)=MNL1j=0knj,(k=0,1...L1)

對於輸入影像中每個具有r值的畫素值產生一個輸出灰度值s.

略微證明

先 定 義 兩 個 函 數 s = T ( r ) , r = T − 1 ( s ) 。 兩 個 互 為 反 函 數 先定義兩個函式s=T(r),r=T^{-1}(s)。 兩個互為反函式 s=T(r),r=T1(s)
接下來,F(x)是概率分佈函式,P(x)概率分佈。
F s ( s ) = P r ( S < s ) = P r ( T ( R ) < s ) = P r ( R < T − 1 ( s ) ) = P r ( R < r ) = F r ( r ) F_{s}(s)=P_{r}(S<s)=P_{r}(T(R)<s)=P_{r}(R<T^{-1}(s))=P_{r}(R<r)=F_{r}(r) Fs(s)=Pr(S<s)=Pr(T(R)<s)=Pr(R<T1(s))=Pr(R<r)=Fr(r)

接下來對上式兩邊求導s(概率分佈函式的導數是概率密度函式),可得如下
p s ( s ) = p r ( r ) d r d s p_{s}(s)=p_{r}(r)\frac{dr}{ds} ps(s)=pr(r)dsdr
當直方圖均衡化的變換函式T( r )是連續型隨機變數R的概率分佈函式Fr( r),也就是輸入灰度級r的累計直方圖時,可表示為
s = F r ( r ) = ∫ 0 r p r ( x ) d x , s=F_{r}(r)=\int_{0}^{r}p_r(x)dx, s=Fr(r)=0rpr(x)dx,
對上面兩邊求導r,得到
d s d r = p r ( r ) \frac{ds}{dr}=p_{r}(r) drds=pr(r)

將這個式子帶入當初求的哪個,得到
p s ( s ) = 1 p_{s}(s)=1 ps(s)=1
這說明什麼??

當直方圖均衡化的變換函式T( r)是連續型隨機變數R的概率分佈函式Fr( r),也就是輸入灰度級r的累計直方圖時,變換後的概率密度函式是均勻分佈的!!!

所以
s = T ( r ) = ( L − 1 ) ∑ j = 0 k P ( r j ) = L − 1 M N ∑ j = 0 k n j , ( k = 0 , 1... L − 1 ) s=T(r)=(L-1)\sum_{j=0}^k{P(r_j)}=\frac{L-1}{MN}\sum_{j=0}^kn_j ,(k=0,1...L-1) s=T(r)=(L1)j=0kP(rj)=MNL1j=0knj,(k=0,1...L1)

計算步驟
  1. 計算 P ( r k ) = n k M N ( k = 0 , 1 , 2 , 3... L − 1 ) P(r_k)=\frac{n_k}{MN}(k=0,1,2,3...L-1) P(rk)=MNnk(k=0,12,3...L1)
    其中nk是出現的次數。L是離散灰度級數
  2. 計算 s k = ( L − 1 ) ∑ j = 0 k P ( r j ) , ( K = 0 , 1 , . . . L − 1 ) 四 舍 五 入 為 整 數 s_k=(L-1)\sum_{j=0}^kP(r_j),(K=0,1,...L-1) 四捨五入為整數 sk=(L1)j=0kP(rj),(K=0,1,...L1)
  3. 確定 r k 與 s k 的 對 應 關 系 r_k與s_k的對應關係 rksk
  4. 確定概率分佈
    在這裡插入圖片描述

matlab實現

i=imread('d:\\cat.jpg');
i=rgb2gray(i);//rgb轉化為灰度圖
j=histeq(i);//灰度直方圖均衡化
figure('name','contrast');
subplot(1,2,1);imshow(i);title('raw pic');
subplot(1,2,2);imshow(j);title('process pic');

在這裡插入圖片描述

相關文章