实验一-图像的直方图均衡
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一-图像的直方图均衡
数字图像处理实验
实验一、图像的直方图均衡
一、实验目的
1、理解直方图均衡的原理与作用;
2、掌握统计图像直方图的方法;
3掌握图像直方图均衡的方法。
二、实验原理
直方图均衡化是通过灰度变换将一幅图象转换为另一幅均衡直方图,即在每个灰度级上都具有相同的象素点数的过程。图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图拉伸和直方图均衡化是两种最常见的间接对比度增强方法。直方图拉伸是通过对比度拉伸对直方图进行调整,从而“扩大”前景和背景灰度的差别,以达到增强对比度的目的,这种方法可以利用线性或非线性的方法来实现;直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。直方图均衡的缺点是:1、变换后图像的
灰度级减少,某些细节消失;2、某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
三、实验步骤
1、利用matlab图像处理工具箱提供的函数进行均衡处理;
程序如下:
clear;
b=imread('b.jpg');
subplot(2,2,1);
title('source image');
imshow(b);
subplot(2,2,2);
c=histeq(b);
imshow(c);
title('equation by system function');
[count,x]=imhist(b);
count=count./(256*256);
for m=2:256
2、
3、自己设计程序实现图像的直方图均衡;PS=imread('image.jpg');
%读入JPG彩色图像文件
imshow(PS)
%显示出来
title('输入的彩色JPG图像')
imwrite(rgb2gray(PS),'PicSampleGray.bmp');
%将彩色图片灰度化并保存
PS=rgb2gray(PS);
%灰度化后的数据存入数组
%绘制直方图
[m,n]=size(PS);
%测量图像尺寸参数
GP=zeros(1,256);
%预创建存放灰度出现概率的向量
for k=0:255
GP(k+1)=length(find(PS==k))/(m*n); %计算每级灰度出现的概率,将其存入GP中相应位置end
figure,bar(0:255,GP,'b')
%绘制直方图
title('原图像直方图')
xlabel('灰度值')
ylabel('出现概率')
%直方图均衡化
S1=zeros(1,256);
for i=1:256
for j=1:i
S1(i)=GP(j)+S1(i); %计算Sk
end
end
S2=round((S1*256)+0.5);
%将Sk归到相近级的灰度
for i=1:256
GPeq(i)=sum(GP(find(S2==i)));
%计算现有每个灰度级出现的概率
end
figure,bar(0:255,GPeq,'b')
%显示均衡化后的直方图
title('均衡化后的直方图')
xlabel('灰度值')
ylabel('出现概率')
%图像均衡化
PA=PS;
for i=0:255
PA(find(PS==i))=S2(i+1); %将各个像素归一化后的灰度值赋给这个像素end
figure,imshow(PA)
%显示均衡化后的图像
title('均衡化后图像')
imwrite(PA,'PicEqual.bmp');
s=imread('girl.bmp');
[m,n]=size(s);
num=m*n;
r=zeros(1,256);
e=zeros(1,256);
d=zeros(size(s));
for i=1:m
for j=1:n
r(s(i,j)+1)=r(s(i,j)+1)+1; %原图像概率密度
end
end
r=r./num;
for i=1:m
for j=1:i
e(i)=e(i)+r(j); %累积分布
end
end
for i=1:256
e(i)=floor(e(i)*255+0.5);
%映射关系
end
for i=1:m
for j=1:n
d(i,j)=e(s(i,j)+1);
end
end
s=uint8(s);
d=uint8(d);
subplot(2,2,1);
imshow(s);
title('source');
subplot(2,2,2);
imhist(s);
title('histogram of source'); subplot(2,2,3);
imshow(d);
title('dest');
subplot(2,2,4);
imhist(d);
title('histogram of dest'); 处理结果