圖像局部增強——平均保持雙直方圖均衡化(BBHE)

直方圖

就是反映一幅圖像中的灰度級與出現這種灰度的概率之間的關係的圖形,是圖像重要的統計特徵。

設r代表圖像中像素的灰度級。在圖像中,像素的灰度級可做歸一化處理,這樣r的值就被限定在0≤r≤1,在灰度級中,0代表黑,1代表白。

 

對於一幅給定的圖像來說,每一個像素取得[0,1]區間內的灰度級是隨機的,也就是說r是一個隨機變量。假定對每一瞬間它們是連續的隨機變量,那麼就可以用概率密度函數p_r(r_k)來表示原始圖像的灰度分佈。

 

爲了有利於數字圖像處理,必須引入離散形式,r_k代表離散灰度級,並且有下式成立:

p_r(r_k) = n_k/n,0 ≤ r_k ≤ 1,k=0,1,2,…,L-1

式中,n_k 爲圖像中出現 r_k 這種灰度的像素數,n是圖像中像素總數,而 n_k/n 就是概率論中所說的頻數,L 表示當前圖像灰度級總數。在直角座標系中做出 r_k 與 p_r(r_k) 的關係圖形,這個圖形就稱爲灰度直方圖。

直觀上來說,若一圖像像素佔有全部可能的灰度級並且分佈均勻(動態範圍較大),則圖像有高的對比度和多變的灰度色調,即可通過改變直方圖來達到增強圖像對比度。

直方圖在變換後可以使圖像的灰度間距拉開或使灰度分佈均勻,從而增大對比度,使圖像細節清晰,來達到增強的目的。

 

直方圖均衡化

主要用於增強動態範圍偏小(對比度小)的圖像。

基本思想是:把原始圖的直方圖變換爲在整個灰度範圍內均勻分佈的形式,增加了像素灰度值的動態範圍,從而達到增強圖像整體對比度的效果。

直方圖均衡化算法計算簡單,易於實現。但也有以下缺點:

1.灰度級個數減小,信息熵下降,局部細節缺失

2.算法未考慮圖像邊緣信息,不能用於細節增強

3.平均灰度值固定

 

平均保持雙直方圖均衡化算法

是由 KIM 提出的.

是一種基於圖象均值來分割輸入圖像,得到兩幅子圖,一幅是像素值小於或等於均值的樣本集,另一幅是像素值大於均值的樣本集。分別獨立的進行直方圖均衡化。

作用:增強圖像對比度的同時,保持輸入圖像的平均亮度。

參考文獻:Brightness Preserving Bi-Histogram Equalization,BBHE

提取了一下該增強算法的主要原理:

用matlab實現如下:

function Bi_HistogramEqualization()
[f,p]=uigetfile('*.*','選擇圖像文件');
if f
I=imread(strcat(p,f));
end

Ir=I(:,:,1);%提取紅色分量
Ig=I(:,:,2);%提取綠色分量
Ib=I(:,:,3);%提取藍色分量
I1=BBHE(Ir);
I2=BBHE(Ig);
I3=BBHE(Ib);
In=cat(3,I1,I2,I3);  %cat用於構造多維數組
subplot(1,2,1);imshow(I);
xlabel('A). 原始圖像');  
subplot(1,2,2);imshow(mat2gray(In),[]);
xlabel('B). 平均保持雙直方圖均衡化');
end


function A=BBHE(I)
Xm=floor(mean2(I));  %求圖像灰度均值Xm
Xmin=min(min(I));
Xmax=max(max(I));
[m,n]=size(I);  
Xl=zeros(1,Xm+1);       %記錄圖像在(Xmin,Xm)範圍內的灰度值
Xu=zeros(1,256);       %記錄圖像在(Xm,Xmax)範圍內的灰度值
nl=0;
nu=0;
for i=1:m
    for j=1:n
        if I(i,j)<Xm || I(i,j)==Xm      %統計≤平均值的各級灰度值數量及總數
            Xl(I(i,j)+1) = Xl(I(i,j)+1) + 1; %存在灰度值爲0的情況,但矩陣下標不能爲0,因此+1
            nl=nl+1;
        else                            %統計>平均值的各級灰度值數量及總數
            Xu(I(i,j)+1) = Xu(I(i,j)+1) + 1;
            nu=nu+1;
        end
    end
end
X_(m+1)=Xm+1;
while(Xu(X_(m+1)+1))==0
    X_(m+1)=X_(m+1)+1;
end

Pl=Xl./nl;  %記錄對應各級灰度值的概率密度
Pu=Xu./nu;
Cl=Xl; %累計密度函數
Cu=Xu;
Cl(1)=Pl(1);
Cu(X_(m+1))=Pu(X_(m+1));
for i=2:Xm+1
    Cl(i)=Pl(i) + Cl(i-1);
end
for i=X_(m+1)+1:256
    Cu(i)=Pu(i) + Cu(i-1);
end
%灰度轉換函數
fl=Cl;fu=Cu;
for i=1:Xm
    fl(i)= Xmin + Cl(i)*(Xm-Xmin);   
end
for i=X_(m+1):256
    fu(i)= X_(m+1) + Cu(i)*(Xmax-X_(m+1));
end
%兩個子圖像合併
I_equal = I;
for i=1:m
    for j=1:n
        if I(i,j)<Xm || I(i,j)==Xm
           I_equal(i,j) = fl(I(i,j)+1);
        else
           I_equal(i,j) = fu(I(i,j)+1);
        end
    end
end
A=I_equal;
end

圖像處理效果:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章