直方图均衡及分段灰度变换

  • 格式:pdf
  • 大小:365.46 KB
  • 文档页数:7

下载文档原格式

  / 7
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

图像的直方图均衡与分段灰度变换

F10030255100309018董威

一、基本原理与主要用途;

1.直方图均衡与分段灰度变换的基本原理;

直方图均衡化的目的是将原始图像的直方图变为均衡分布的形式,即将一已知灰度概率密度分布的图像,经过某种变换变成一幅具有均匀灰度概率密度分布的新图像,从而改善图像的灰度层次。它的基本思想是把原始图像的直方图变换成均匀分布的形式,这样就增加了像素灰度值的动态范围,从而达到了增强图像整体对比度的效果。

MATLAB图像处理工具箱中提供的histeq函数,可以实现直方图的均衡化。

线性变换是指在图像灰度范围内分段对逐个像元进行处理,是将原图像亮度值动态范围按线性关系(线性函数)变换到指定范围或整个动态范围。在实际运算中给定的是2个亮度区间,即要把输入图像的某个亮度值区间[a,b]映射为输出图像的亮度值区间[c,d]。

即按线性比例对图像每一个象素灰度作灰度线性变换,改善图像视觉效果。在实际图像处理中,为了突出感兴趣的目标或灰度区域,相对抑制不感兴趣的灰度区域,常常采用分段线性变换来进行图像灰度的处理。

MATLAB图像处理工具箱中提供的imadjust函数,可以实现上述的线性变换。

2.主要用途;

在获取图像的过程中,由于噪声,光照等外界环境或设备本身的原因,原始数字图像质量会退化。例如一般成像系统只具有一定的响应亮度,常出现对比度不足的弊病,影响视觉效果,在这些情况下需要对图像做增强处理。图像增强可以提高清晰度,改善图像的视觉效果,突出图像中的有用信息,削弱或消除不需要的信息。

二、实现方案与源码;

1.直方图均衡化;

MATLAB图像处理工具箱的histep函数可以很方便的实现直方图均衡化。

由于原图片是彩色,因而在转换前需要用rgb2gray函数将图片转化为灰度图。源程序如下:

a=imread('e:\b.bmp');%读取图像

b=rgb2gray(a);%转化为灰度图像

subplot(121),imshow(a);

subplot(122),imhist(b);

实现结果如下:

原图转化为的灰度图像

subplot(121),imshow(b);

subplot(122),imhist(b);%显示灰度图像与其直方图

实现结果如下:

c=histeq(b);%直方图均衡化

subplot(121),imshow(b);

subplot(122),imhist(b);%显示处理后的图像与其直方图

实现结果如下:

不调用histeq函数,利用matlab语言也可直接编程实现图像的直方图均衡化处理。图像的灰度直方图均衡化公式:

公式中,T(r k)来表示原图像的第k个灰度级的转换函数。∑表示总和。∑n j/N表示0~j个灰度级的像素数量总和与像素总数的比值,也就是前面讲过的百分位(当前色阶与前面色阶的所有像素数量÷总像素数量)。∑P r(r k)表示第0~k的灰度级出现概率累积相加。因为s是归一化的数值(s∈[0,1]),要转换为0~255的颜色值,需要再乘上255,即S=∑P r(r k)*255。

流程如下:

读取图像——>转换为灰度图像——>计算各灰度出现的概率——>计算新的各灰度出现的概率——>填充各像素点新的灰度值——>显示图像

相应的源程序如下:

a=imread('e:\b.bmp');%读取图像

[m,n,o]=size(a);

grayPic=rgb2gray(a);

figure,imshow(a);

figure,imshow(grayPic);

gp=zeros(1,256);%计算各灰度出现的概率

for i=1:256

gp(i)=length(find(grayPic==(i-1)))/(m*n);

end

figure,bar(0:255,gp);

title('原图像直方图');

xlabel('灰度值');

ylabel('出现概率');

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);

end

for i=1:256

newGp(i)=sum(gp(find(S2==i)));

end

figure,bar(0:255,newGp);

title('均衡化后的直方图');

xlabel('灰度值');

ylabel('出现概率');

newGrayPic=grayPic;%填充各像素点新的灰度值

for i=1:256

newGrayPic(find(grayPic==(i-1)))=S2(i);

end

figure,imshow(newGrayPic);

实现结果与调用函数一致。

2.分段线性灰度变换;

通过分段线性变换,原图f (x,y )中灰度值在0到a 和b 到M f 间的动态范围映

射到g(x,y)后被压缩,而a 到b 区间的动态范围增加,从而增强了这个范围内的对比度。为了实现灰度线性变换在图像处理中的应用,本文以彩色图像"b.bmp"为例,采用MATLAB 语言编制了分段线性变换的实现程序,并获得了变换效果。编程思路如下:

设原图像f (x,y )灰度范围为[0,M f ],变换后的图像g (x,y )灰度范围为[0,M g ],