参考NEFU的数字图像处理实验课代码。版权归NEFU!仅供学习参考!
1 步骤
(1)计算并绘制原始pout图像的灰度直方图;
(2)根据离散累计分布函数,对原始灰度直方图进行均衡化处理,绘制均衡化后的灰度直方图;
(3)生成均衡化处理后的新图像,显示并保存。
(4)比较原始pout图像和新图像的对比度。
2 Matlab代码
clc;
clear;
grayimage=imread('pout.tif'); %读取一幅256级灰度图像,作为原始图像
subplot(2,2,1); imshow(grayimage); title('原始图像'); %显示原始图像
[m,n]=size(grayimage); %获取图像大小
%以下计算原始图像中各灰度级出现的概率
gp=zeros(1,256); %初始化一维行向量gp
for i=1:256
gp(i)=length(find(grayimage==(i-1)))/(m*n); %计算每个灰度级出现的概率
end
subplot(2,2,2); bar(0:255, gp); %显示原始图像的灰度直方图
title('原始图像的灰度直方图');
xlabel('灰度值'); ylabel('出现概率');
%以下进行直方图均衡化处理,根据离散累计分布函数,求出所有新的灰度级
S1=zeros(1,256);
S2=zeros(1,256);
temp=0;
for i=1:256
temp=temp+gp(i);
S1(i)=temp;
end
S2=round(S1*255); %将Sk归到相近的灰度级上
%以下计算各个新的灰度级出现的概率
newgp=zeros(1,256);
for i=1:256
newgp(i)=sum(gp(find(S2==(i-1))));
end
subplot(2,2,3); bar(0:255, newgp); %显示均衡化后的灰度直方图
title('均衡化后的灰度直方图');
xlabel('灰度值'); ylabel('出现概率');
%用新的灰度值填充各像素点,从而获得均衡化处理之后的新图像
newgrayimage=grayimage;
for i=1:256
newgrayimage(find(grayimage==(i-1)))=S2(i);
end
subplot(2,2,4); imshow(newgrayimage); %显示均衡化处理后的新图像
title('均衡化后的图像');
imwrite(newgrayimage,'newpout.tif'); %保存均衡化处理后的新图像
0