第一种(直接调用Matlab内置函数):
G=imread('Fig0111(katrina_2005_08_29_NOAA).tif');
J=histeq(G); %直方图均衡化,这一个函数就可以做到均衡化的效果
figure,
subplot(121),imshow(uint8(G));
title('原图')
subplot(122),imshow(uint8(J));
title('均衡化后')
figure,
subplot(121),imhist(G,64);
title('原图像直方图');
subplot(122),imhist(J,64);
title('均衡化后的直方图');
运行结果:
第二种(自己编写):
% 输入图像
H = imread('Fig0111(katrina_2005_08_29_NOAA).tif');
[m,n]=size(H); % 计算图像的长宽
p=zeros(1,256); %创建数组存储像素概率
% 统计每个像素值出现的概率, 得到概率直方图
for i=0:255
% 用length函数计算相同像素的个数
p(i+1)=length(find(H==i))/(m*n);
end
%输出原图
subplot(2,2,1); %用subploy函数将多个图像画到同一个平面中
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);
b=H;
for i=0:255
b(H==i)=a(i+1);
end
%输出均衡化后的图像
subplot(2,2,3);
imshow(b)
title('均衡化后图像');
for i=0:255
GPeq(i+1)=sum(p(a==i));
end
%画出均衡化后的直方图
subplot(2,2,4);
bar(0:255,GPeq,'b');
title('均衡化后的直方图');
运行结果: