直方图均衡化与规定化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程名称___图像处理与分析
题目名称_直方图均衡化与规定化
学院信息工程
专业电子信息工程
年级班别 0503 学号 ********** 学生姓名姚艺锋
指导老师曹江中
2008年6月16日
《图像处理与分析》课程设计报告
直方图均衡化与规定化
1、设计方案(原理)
一般情况下,如果图像的灰度分别集中在比较窄的区间,从而引起图像细节的模糊,为了使图像细节清晰,并使目标得到突出,达到图像增强的目的,可通过改善各部分亮度的比例关系,即通过直方图的方法来实现.直方图的方法是以概率论为基础的.常用的方法有直方图均衡化和直方图规定化.
(1) 直方图均衡化
直方图均衡化又称直方图平坦化,是将一已知灰度概率密度分布的图像经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像.其结果是扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果.
直方图均衡化的具体实现步骤如下:
1).列出原始图像的灰度级
1
,,1,0,-=L j f
j
2).统计各灰度级的像素数目
1
,,1,0,-=L j n j
3).计算原始图像直方图各灰度级的频数
1
,,1,0,/)(-==L j n n
f
P j
j
f
4).计算累积分布函数
1
,,,1,0,)()(0
-==
∑
=L k j f P f C k j j f
5).应用以下公式计算映射后的输出图像的灰度级,P 为输出图像灰度级的个
数,其中INT 为取整符号
1
,,1]
5.0)()[(min min max -=++-=P i g f C g g INT g i
6).统计映射后各灰度级的像素数目 ni, i=0,1,…,k,…P-1.
7). 计算输出直方图Pg(gi)=ni/n, i=0,1,…,P-1.
8). 用fj 和gi 的映射关系修改原始图像的灰度级,从而获得直方图近似为均匀
分布的输出图像
(2) 直方图规定化
直方图均衡化的优点是能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化的直方图.实际工作中,有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度,这时可采用比较灵活的直方图规定化方法.直方图规定化增强处理的步骤如下:
令P r (r )和P z (z )分别为原始图像和期望图像的灰度概率密度函数。如果对原始图像和期望图像均作直方图均衡化处理,应有
⎰==x
r dr
r P r T S 0)()( (1) ⎰==x
z dz
z p Z G V 0
)()( (2)
)(1V G Z -= (3)
由于都是进行均衡化处理,处理后的原图像概率密度函数Ps (S )及理想图像概率密度函数PV (V )是相等的。于是,我们可以用变换后的原始图像灰度级S 代替(2)式中的V 。即
Z = G - 1(S ) (4) 这时的灰度级Z 便是所希望的图像的灰度级。 此外,利用(1)与(3)式还可得到组合变换函数 Z = G - 1[T (r )] (5) 对连续图像,重要的是给出逆变换解析式。对离散图像而言,有
n n Z P i
i Z =
)( (6)
∑-===1
)
()(l i i z i i Z P Z G V (7) )]
([)(11i i i r T G S G Z --== (8)
2、设计内容(主要代码)
%----------------------------选择图片路径及显示---------------------------% global f
%选择图片路径
[filename,pathname]= ... %...表示与下行连接
uigetfile({'*.bmp';'*.jpg';'*gif';'*tif'},'选择图片'); %打开文件类型,对话框名称 f=imread([pathname filename]);
axes(handles.axes1); %在axes1显示原图像imshow(f) ;
title('原始图像');
%------------------设置下拉菜单分别选择显示图像------------% global f
va=get(handles.popupmenu1,'Value');
val=get(hObject,'Value');
switch val %用switch语句设置选项case 1 %原图像直方图
I=double(f);[m,n]=size(I);
H=zeros(1,256);
for i=1:m
for j=1:n
H(I(i,j)+1)=H(I(i,j)+1)+1;
end
end
s=zeros(1,256);t=zeros(1,256);
for i=1:256 s(i)=H(i)/(m*n);
for j=1:i
t(i)=t(i)+s(j);
end
end
axes(handles.axes2);
plot(s);title('原图像直方图');
case 2 %均衡化后图像及直方图I=double(f);[m,n]=size(I);
H=zeros(1,256);
for i=1:m
for j=1:n
H(I(i,j)+1)=H(I(i,j)+1)+1;
end
end
s=zeros(1,256);t=zeros(1,256);
for i=1:256 s(i)=H(i)/(m*n);
for j=1:i
t(i)=t(i)+s(j);
end
end
t1=round(t*(256-1)+0.5);
H1=zeros(1,256);
for i=1:256
H1(t1(i))=H1(t1(i))+s(i);