matlab直方图均衡化

H=imread('C:\Users\Ibe\Desktop\a1.jpg');
if length(size(H))>2 %判断是否为三通道彩色图片,若是则将其灰度化
       H=rgb2gray(H);
end
[m,n]=size(H);%获取图片的尺寸,便于计算总像素数,即m*n
p=zeros(1,256);%生成一个一行256列的矩阵
for i=0:255
       p(i+1)=length(find(H==i))/(m*n);%统计各灰度像素个数,find(H==i)是在矩阵里面寻找灰度为i的点坐标,因为矩阵是从1开始的,所以为p(i+1)。其中length(find(H==i))表示统计H里面有多少个灰度值为i的点。
end
subplot(2,2,1);
imshow(H);
title('原图');
subplot(2,2,2);
bar(0:255,p,'b');%显示原图的直方图
title('原图直方图');
s=zeros(1,256);
for i=1:256%利用循环累加概率值
       for j=1:i
           s(i)=p(j)+s(i);
       end
end
a=round(s*255);%对s中的数先乘255再取整
b=H;%更新原图像的灰度
for i=0:255
       b(find(H==i))=a(i+1);%把a(i)的值赋给b(i)
end
 title('原图直方图');
 
subplot(2,2,3);
imshow(b);
title('均衡化后图像');%统计更新后的概率
g=zeros(1,256);
for i=0:255
       g(i+1)=sum(p(find(a==i)));
end
subplot(2,2,4);
bar(0:255,g,'b');title('均衡化后直方图');matlab直方图均衡化_第1张图片

如果一幅图像整体偏暗或者偏亮,那么直方图均衡化的方法很适用。但直方图均衡化是一种全局处理方式,它对处理的数据不加选择,可能会增加背景干扰信息的对比度并且降低有用信号的对比度(如果图像某些区域对比度很好,而另一些区域对比度不好,那采用直方图均衡化就不一定用)。此外,均衡化后图像的灰度级减少,某些细节将会消失;某些图像(如直方图有高峰),经过均衡化后对比度不自然的过分增强。针对直方图均衡化的缺点,已经有局部的直方图均衡化方法出现。
 

你可能感兴趣的:(matlab,matlab)