今天是我们上的第二次数字图像处理实验,第一次老师是讲的一些基础知识和matlab的用法,这节课老师讲了直方图的均衡化,详情注释见代码。
有什么问题欢迎交流,我的qq是908642712.请备注信息 博客。
clc; //清空命令行
clear; //清空工作区、
grayimage=imread('pout.tif'); //读取图像存到grayimage变量中
[m,n]=size(grayimage); /*得到此图像的像素矩阵行和列。(这是灰度图像)*/
subplot(2,2,1); //创建一个窗口,可以盛放四个照片。
imshow(grayimage); //第一个位置,也就是左上,放原图。
gp=zeros(1,256); //设置一个矩阵,一行256列,用来存在概率。
for i=1:256
gp(i)=length(find(grayimage==(i-1)))/(m*n);
end //for循环,计算各个灰度值在图中出现的概率。
subplot(2,2,2); //窗口第二个位置。
bar(0:255,gp); /*建立一个直方图,gp(概率变量)是0到255递增出现,默认增加量为1.*/
xlabel('灰度值'); //横坐标标注 为 灰度值。
ylabel('概率'); //纵坐标 标注为 概率
//上面是输出灰度直方图。
//下面进行直方图的均衡化;
S1=zeros(1,256);
S2=zeros(1,256); //建立两个概率矩阵。
temp=0;
for i=1:256
temp=temp+gp(i);
S1(i)=temp;
end //把概率都累加。类似字符串中的前缀和。此时中间还是0-1的概率
S2=round(S1*255);// 让概率变成了灰度值,代表灰度值的均值。
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);
xlabel('灰度值');
ylabel('概率');
newgrayimage=grayimage;
for i=1:256
newgrayimage(find(grayimage==(i-1)))=S2(i);
end //把原图中是的原像素的点 换成新像素(是一种映射)
subplot(2,2,4);
imshow(newgrayimage);
imwrite(newgrayimage,'newpout.tif'); //将文件保存。