灰度直方图均衡化与规定化
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、课程设计目的
(1)进一步掌握matlab的用法;
(2)在实践中深入理解图像显示的方法;
(3)学会用matlab对图像进行显示。
二、课程设计要求
(1)根据题目,查阅有关资料,掌握图像显示技术;
(2)学习MATLAB软件,掌握MATLAB各种函数的使用;
(3)根据图像显示原理,运用MATLAB进行编程,仿真调制过程,记录并分析仿真结果;
(4)形成设计报告。
三、设计方案
一般情况下,如果图像的灰度分别集中在比较窄的区间,从而引起图像细节的模糊,为了使图像细节清晰,并使目标得到突出,达到图像增强的目的,可通过改善各部分亮度的比例关系,即通过直方图的方法来实现.直方图的方法是以概率论为基础的.常用的方法有直方图均衡化和直方图规定化.
(1)直方图均衡化
直方图均衡化又称直方图平坦化,是将一已知灰度概率密度分布的图像经过某种变换,变成一幅具有均匀灰度概率密度分布的新图像.其结果是扩展了像元取值的动态范围,从而达到增强图像整体对比度的效果.
直方图均衡化的具体实现步骤如下:
1).列出原始图像的灰度级
=L
,-
f
j
,
,
1
,
1
j
2).统计各灰度级的像素数目
=L
j
,-
n
1
,
,
1
,
j
3).计算原始图像直方图各灰度级的频数
=L (-
=
j
n
f
n
P
/
)
,
1
1
,
,
,
f
j
j
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) 直方图规定化
直方图均衡化的优点是能自动增强整个图像的对比度,但它的具体增强效果不易控制,处理的结果总是得到全局的均衡化的直方图.实际工作中,有时需要变换直方图使之成为某个特定的形状,从而有选择地增强某个灰度值范围内的对比度,这时可采用比较灵活的直方图规定化方法.直方图规定化增强处理的步骤如下:
令Pr (r )和Pz (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
0)
()(l i i z i i Z P Z G V (7)
)]([)(1
1i i i r T G S G Z --== (8)
四、设计内容
%----------------------------选择图片路径及
显示---------------------------%
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);