图像局部增强——平均保持双直方图均衡化(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

图像处理效果:

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