数字图像处理实验报告--直方图均衡化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数字图像处理实验报告
实验名称:直方图均衡化
姓名:
班级:
学号:
专业:电子信息工程(2+2)
指导教师:陈华华
实验日期:2012年5月24日
直方图均衡化
图像对比度增强的方法可以分成两类:一类是直接对比度增强方法;另一类是间接对比度增强方法。直方图均衡化是最常见的间接对比度增强方法。直方图均衡化则通过使用累积函数对灰度值进行“调整”以实现对比度的增强。
直方图均衡化处理的“中心思想”是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。直方图均衡化就是对图像进行非线性拉伸,重新分配图像像素值,使一定灰度范围内的像素数量大致相同。直方图均衡化就是把给定图像的直方图分布改变成“均匀”分布直方图分布。
缺点:
1)变换后图像的灰度级减少,某些细节消失;
2)某些图像,如直方图有高峰,经处理后对比度不自然的过分增强。
直方图均衡化是图像处理领域中利用图像直方图对对比度进行调整的方法。
这种方法通常用来增加许多图像的局部对比度,尤其是当图像的有用数据的对比度相当接近的时候。通过这种方法,亮度可以更好地在直方图上分布。这样就可以用于增强局部的对比度而不影响整体的对比度,直方图均衡化通过有效地扩展常用的亮度来实现这种功能。
直方图均衡化的基本思想是把原始图的直方图变换为均匀分布的形式,这样就增加了象素灰度值的动态范围从而可达到增强图像整体对比度的效果。设原始图像在(x,y)处的灰度为f,而改变后的图像为g,则对图像增强的方法可表述为将在(x,y)处的灰度f映射为g。在灰度直方图均衡化处理中对图像的映射函数可定义为:g = EQ (f),这个映射函数EQ(f)必须满足两个条件(其中L为图像的灰度级数):
(1)EQ(f)在0≤f≤L-1范围内是一个单值单增函数。这是为了保证增强处理没有打乱原始图像的灰度排列次序,原图各灰度级在变换后仍保持从黑到白(或从白到黑)的排列。
(2)对于0≤f≤L-1有0≤g≤L-1,这个条件保证了变换前后灰度值动态范围的一致性。
累积分布函数即可以满足上述两个条件,并且通过该函数可以完成将原图像f的分布转换成g的均匀分布。此时的直方图均衡化映射函数为: gk = EQ(fk) = (ni/n) = pf(fi) ,
(k=0,1,2,……,L-1)
上述求和区间为0到k,根据该方程可以由源图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出原始直方图分布,然后根据计算
出的累计直方图分布求出fk到gk的灰度映射关系。在重复上述步骤得到源图像所有灰度级到目标图像灰度级的映射关系后,按照这个映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。
一,调用matlab系统函数方式
(1)实验程序
clear all;
f=imread('cameraman.tif');
figure(1)
imshow(f);
figure(2)
imhist(f); %绘制图象f的直方图
ylim('auto');
g=histeq(f,256); %对f进行直方图均衡,输出图象的灰度级数为256
figure(3)
imshow(g);
figure(4)
imhist(g);
ylim('auto');
(2)实验结果:
图1:原图图2: 原图的直方图
图3:处理后的图图4: 处理后的直方图二:不用系统函数
(1)实验程序:
f=imread('cameraman.tif'); %读取原图象
[m,n]=size(f);
figure(1)
imshow(f);
gp=zeros(1,256); %创建一个全零矩阵,1×256,计算各灰度出现的概率
for i=1:256
gp(i)=length(find(f == (i-1)))/(m*n);
end
figure,bar(0:255,gp);
newGp=zeros(1,256); %计算新的各灰度出现的概率
S1=zeros(1,256);
S2=zeros(1,256);
tmp=0;
for i=1:256
tmp=tmp+gp(i);
S1(i)=tmp; %各会灰度的累计概率
S2(i)=round(S1(i)*256); %将取整后的值存储在S2
end
for i=1:256
newGp(i)=sum(gp(find(S2==i)));
end
figure,bar(0:255,newGp);
for i=1:256
newGrayPic(find(f==(i-1)))=S2(i); %用新的灰度填充以前旧的灰度值end
figure,imshow(newGrayPic);
(2)实验结果:
图5:原图图6: 原图的直方图
图7: 处理后的图图8: 处理后的直方图三:对比用这两种方式实现效果上的差异
调用系统函数的结果未调用系统函数的结果
尽管两者直方图的统计方式不同,左边是统计每个灰度值总的像素,右边是统计每个
灰度值出现的概率,但形状基本相同。
I = imread('1.bmp');
J=imread('2.bmp');
Iq = imsubtract(I,J);%两幅图相减imview(Iq)