灰度直方图均衡化

灰度直方图均衡化

     在计算机视觉和图像处理领域中,图像预处理起着重要的作用,其预处理效果直接影响整个 系统性能。图像预处理主要包括图像增强、滤波处理、边缘检测、旋转、变换等。
      灰度直方图均衡化,在图像识别的过程中,增加灰度对比度可以突出图像重要的特征,直方图均衡化是通过改变每个灰度级上像素点分布,使其都具有相同的象素点数,目的是使图像在整个灰度值动态变化范围内分布均匀化,改善图像的亮度分布状态,增强图像的视觉效果。均衡化的原理是根据熵理论,可知当 H(0),H(1), …,H(n-1)相等时,图像信息量最大。








     灰度直方图均衡化matlab算法实现:

clear all
I=imread('2.jpg');                 %读入JPG彩色图像文件
imshow(I)                                  %显示出来 
title('输入的彩色JPG图像')
I_gray = rgb2gray(I); %灰度化后的数据存入数组
imwrite(I_gray,'1_gray.bmp'); %保存灰度图像
figure,imshow(I_gray);
title('灰度图')
 
[height,width]=size(I_gray);  %测量图像尺寸参数
p1=zeros(1,256);                            %预创建存放灰度出现频率的向量
for i=1:height
    for j=1:width
     p1(I_gray(i,j) + 1) = p1(I_gray(i,j) + 1)  + 1;%因为MATLAB下标是从1开始,所以0灰度对应在下标为1处
    end
end
s=zeros(1,256);
s(1)=p1(1);
for i=2:256
     s(i)=p1(i) + s(i-1); %累计直方图
end
 
for i=1:256
    s(i) = s(i)*256/(width*height); %求灰度映射函数
    if s(i) > 256
        s(i) = 256;
    end
end
%图像均衡化
I_equal = I;
for i=1:height
    for j=1:width
     I_equal(i,j) = s( I(i,j) + 1);
    end
end
p2=zeros(1,256);                            %预创建存放灰度出现频率的向量
for i=1:height
    for j=1:width
     p2(I_equal(i,j) + 1) = p2(I_equal(i,j) + 1)  + 1;%因为MATLAB下标是从1开始,所以0灰度对应在下标为1,改变后的直方图
    end
end
figure,imshow(I_equal)                           %显示均衡化后的图像 
title('均衡化后图像')
imwrite(I_equal,'1_equal.bmp');
figure(5)
bar(p1')%改变前的直方图
figure(6)
bar(p2')%改变后的直方图