基于matlab实现图像的直方图均衡

将图像转换为具有均匀分布直方图的图像,这一过程叫做直方图均衡。

问题可以转换为:寻找一个变换函数,使变换后图像灰度的概率密度函数等于1,即期望输出图像中每一灰度级有相同的概率。

直方图均衡的过程:

 (1)统计原始图像的归一化直方图。

 (2)用累计分布函数做变换函数进行图像灰度变换。

 (3)建立输入图像与输出图像灰度级之间的对应关系,将变换后灰度级恢复成原先的灰度级范围。


代码:

>> I=imread('Lena.bmp');
>> figure(1),subplot(221),imshow(I),title('original image');
>> J=rgb2gray(I);
>> imhist(J);
>> subplot(222),imhist(J),title('原始图像直方图');
>> [height,width]=size(I);
>> nk=zeros(1,256);
>> for i=1:height
      for j=1:width
         nk(I(i,j)+1)=nk(I(i,j)+1)+1;
      end
   end
>> pk=zeros(1,256);
>> pk=nk./(height*width);
>> sk=zeros(1,256);
>> sk(1)=pk(1);
>> for i=2:256
     sk(i)=sk(i-1)+pk(i);
   end
>> kt=zeros(1,256);
>> %kt=uint8(floor(255.*sk+0.5));
>> kt=uint8(255.*sk);
>> F=zeros(size(I));
>> for i=1:height
     for j=1:width
       F(i,j)=kt(I(i,j)+1);

你可能感兴趣的:(matlab图像处理)