灰度直方图均衡化与规定化

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档