Matlab图像处理与应用技术Word下载.docx
《Matlab图像处理与应用技术Word下载.docx》由会员分享,可在线阅读,更多相关《Matlab图像处理与应用技术Word下载.docx(78页珍藏版)》请在冰豆网上搜索。
看起来清晰柔和的图像,它的直方图分布比较均匀。
通常一幅均匀量化的自然图像由于其灰度直方图分布集中在较窄的低值灰度区间,引起图像的细节看不清楚,为使图像变得清晰,可以通过变换使图像的灰度范围拉开或使灰度分布在动态范围内趋于均化,从而增加反差,使图像的细节清晰,达到图像增强的目的。
事实证明,通过图像直方图修改进行图像增强是一种有效的方法。
5.1.2直方图修正
直方图修正的应用非常广泛。
例如:
在医学上,为了改善x射线机操作人员的工作条件,可以采用低强度X射线曝光,但是这样获得的X光片灰度级集中在暗区,许多图像细节无法看清,
判读困难,通过修正使灰度级分布在人眼合适的亮度区域,就可以使X光片中的
细节,如筋骨、关节等清晰可见。
另外还有一些非可见光成像的工业无损检测(如射线成像、红外成像等),
军事公安侦察等照片的处理。
直方图修正通常有直方图均衡化和直方图规定化两大类。
下面分别介绍如
下:
(1)直方图均衡化
直方图均衡化也称为直方图均匀化,是一种常用的灰度增强算法,是将原图像的直方图经过变换函数修整为均匀直方图,然后按均衡后的直方图修整原图像。
为研究方便,首先将直方图归一化,即让原图像灰度范围[Z1,Zk]归一化为[0,1]。
设其中任一灰度级Z归一化为r,变换后图像的任一灰度级Z’归一化为s,显然r,s应当满足:
0≤r≤1,0≤s≤1(5.1.2)
因此直方图修正就是对下列公式的计算过程:
s=T(r)或r=T-1(s)(5.1.3)
T(r)为变换函数,它必须满足下列条件:
①T(r)在0≤r≤1区间内是单值函数,且单调增加;
②T(r)在0≤r≤1内满足0≤T(r)≤1。
条件①保证了灰度级从黑到白的次序,而条件②确保映射后的像素灰度级
仍在允许的灰度级范围内,避免整个图像明显变亮或者变暗。
T–1(s)为反变换函数,也同样满足上述的两个条件。
对于连续情况,设Pr(r)和Ps(s)分别表示原图像和变换后图像的灰度级概率
2/42
密度函数,根据概率论的知识,在已知Pr(r)和T(r)时,T-1(s)也是单调增长,则Ps(s)
可由下式求出:
p
s
prdr
T
1s
(5.1.4)
r
ds
在直方图均衡化时,有Ps(s)=1/L=常数,这里L为均衡化后灰度变化范围,归一化表示时L=1,则Ps(s)=1,有ds=Pr(r)dr,即ds=dT(r)=Pr(r)dr
两边取积分得
sTr
prrdr(5.1.5)
式(5.1.5)就是所求的变换函数,表明变换函数T(r)是原图像的累计分布函数,是一个非负递增函数,因此只要知道原图像的概率密度,就能很容易地确定变换
函数。
将上述结论推广到离散的情况。
设一幅图像总像素为n,共分L个灰度级,nk代表第k个灰度级rk出现的频数(像素数),则第k灰度级出现的概率为
Pr(rk)=nk/n,0≤rk≤1,k=0,1,,L一1(5.1.6)
此时变换函数可以表示为
kk
skTrk
prri
nin(5.1.7)
i0
其反变换函数为
0s1(
)
k
5.1.8
因此,根据原图像的直方图统计值就可算出均衡后各像素的灰度值。
假设有一幅图像,共有64×
64个像素,8个灰度级,各灰度级概率分布如表5.1所示,试将其直方图均匀化。
表5.1各灰度级对应的概率分布
灰度级rk
1/7
2/7
3/7
4/7
5/7
6/7
1
像素数nk
790
1023
850
656
329
245
122
81
概率Pr(rk)
0.19
0.25
0.21
0.16
0.08
0.06
0.03
0.02
790+1023+850+656+329+245+122+81=4096将图像直方图均匀化过程:
根据表5.1数据可得到此图像直方图:
如图5.2(a)
应用式(5.1.7)可求得变换函数为:
s0Tr0
i
3/42
s1Tr1
pr
ri
prr0prr10.190.250.44
,3=0.81,s4=0.89,s5=0.95,s6=0.98,s7=1.00
依此类推,即可得到:
s2
=0.65
变换函数sk与灰度级rk之间的关系曲线如图5.2(b)所示。
从表5.1中可以看出原图像给定的rk是等间隔的(每个间隔为1/7),而经过T(rk)求得的sk就不一定是等间隔的,从图5.2(b)中可以很清楚地看到,为了不改变原图像的量化值,必须对每一个变换的sk取最靠近的量化值,表5.2中列出了重新量
化后得到的新灰度s’,s’,s’,s’,s’,将计算出来的s与量化级数相比较,
01
2
3
4
即可得到:
s0
s1
0.44
0.43,s2
0.65
5
0.14,
7
0.71,
s3
0.81
6
s4
0.89
0.89,
s5
0.95
1,
s6
0.98
s7
11
表5.2直方图均匀化过程
原灰度级
变换函数值
原来量化值
原来像素数
新灰度级
新灰度级分布
r0=0
s0=T(r0)=0.19
s'
0(790)
r1=1/7
s1=T(r1)=0.44
1/7=0.14
1(1023)
790/4096=0.19
r2=2/7
s2=T(r2)=0.65
2/7=0.29
2(850)
r3=3/7
s3=T(r3)=0.81
3/7=0.43
3(985)
1023/4096=0.25
r4
=4/7
s4=T(r4)=0.89
4/7=0.57
4(448)
r5
=5/7
s5=T(r5)=0.95
5/7=0.71
850/4096=0.21
r6
=6/7
s6=T(r6)=0.98
6/7=0.86
985/4096=0.24
r7
=1
s7=T(r7)=1
1.00
448/4096=0.11
图5.2图像直方图均衡化示例
(a)原始图像直方图(b)变换函数(c)直方图均衡化后的直方图
将相同值的归并起来,即得直方图均衡化修正后的灰度变换函数,它们是:
1,s'
3,s'
5,s'
6,s'
41
由此可知,经过变换后的灰度级不需要8个,只需要5个就可以了。
把相应原灰度级的像素数相加得到新灰度级的像素数。
均匀化以后的直方图如图5.2(c)所示,由图可见,均衡化直方图比原直方图均匀了,但它并不能完全均匀,这是由于
4/42
在均衡化的过程中,原直方图上有几个像素数较少的灰度级归并到一个新的灰度级上,而像素较多的灰度级间隔被拉大了,这样有利于图像的分析和识别。
这样做是减少图像的灰度级以换取对比度的扩大。
(2)直方图规定化
以上均匀化处理后的图像虽然增强了图像的对比度,但它并不一定适合有些应用场合,如:
有时人们希望增强后的图像,其灰度级的分布是不均匀的,而且是具有规定形状的直方图,这样可以突出感兴趣的灰度范围。
此时可以采用直方图的规定化实现。
直方图规定化有几种不同的方法,下面分别给予介绍:
直方图规定化方法之一是指用一个规定的概率函数来表示所需要的直方图,如表5.3所示。
也就是将原来直方图变换成某一个规定概率密度函数的直方图,这种图像直方图规定化一般是按照式(5.1.1)来进行计算的。
表5.3
几种给定形状的直方图修正变换函数
修正后要求的概率密度函数
变换函数s=T(r)
均匀分布
P
ss
smax
smin
Pr
d
max
min
Ps
exp
ssmin
ln1
指数分布
雷利分布
s2
2ln
minexp
双曲分布
smix
slnsmax
ln
图5.3由直线段构成的直方图
直方图规定化处理的第二种方法是通过控制一组直线段来构成直方图,使其满足所希望的形状。
然后再数字化并归一化。
图5.3中的直线段构成的直方图形状受m,h,θL,θk四个参量控制,其中:
m在
[0,1]区间内任意选定;
h≥0;
当θL,θk从00到900变化时,分别引起j点在(0,1)和
(m,0)两点连线、k点在(1,1)和(m,0)两点连线上移动,只要改变上述四个参量就可以得到许多有用的直方图。
如果m=0.5,h=1,θL=θk=0就可以得到一个矩形,即均匀直方图。
5/42
下面具体讨论如何实现直方图规定化处理。
先以连续分布的情况来讨论:
原理:
设pr(r)为原始图像的灰度密度函数,Pz(z)为希望得到的增强图像的灰度密度函数。
如果对原始图像pr(r)和期望图像Pz(z)均进行直方图均衡化处理,即可得
prrdr
1(5.1.9)
v
G
z
pz(z)dz
1(5.1.10)
经过上述变换后的灰度s及v,其密度函数是相同的,可以通过直方图均衡,实现从pr(r)到Pz(z)的转换,也就是实现直方图的规定化。
具体的方法:
利用sT
dr,0r
1,可将原图各点的灰
度r变换为s,然后根据s=v及v
Gz
pz(z)dz,0
z1,zG1v,
就可以求出每一个r相对应的灰度值z
G1
。
对于离散的数字图像可进行类似的变换,
即先对原图进行直方图均衡,求出与原图像中每一个灰度级ri相对应的si值,然后对具有规定形状直方图的期望图像也进行类似的处理,求出与期望图像灰
度zk相对应的vk值,再在vk和si之间找出满足vk≈si的点对,进而返回去找出与ri相对应的zk,实现图像按规定形状直方图作增强。
一幅图像有64×
64个像素、8个灰度级,将其按直方图规定化增强。
图5.4(a)是原图像直方图,图5.4(b)是期望图像的直方图。
期望图像所对应的直方图的具体数值列于表5.4所示。
首先,重复前面例子的均匀化过程,计算直方图均衡化原始图像灰度ri对应的变换函数si,8个灰度级合并为5个灰度级,其结果如下:
0.14
ns0
ps
0.19,
ns1
0.25,
0.43
0.71
ns2
0.21,
60.86
ns3
985
0.24,
ns4
448
0.11
第二步,对规定化的图像用同样的方法进行直方图均匀化处理(如图5.4(c)),求出给定直方图对应的灰度级
vkGzkpzzj
j0
6/42
v00.00Gz0v10.00Gz1v20.00Gz2
v30.15Gz3v40.35Gz4v50.65Gz5
v60.85Gz6v71Gz7
第三步,使用与vk靠近的sk代替vk(由于是离散图像,所以采用“最靠近”原则),得到的结果如下:
v3
Gz3
z3
0.43v4
Gz4
z4
vGz
0.86vGz
1v7Gz7
z71
并用G1s求逆变换即可得到z'
37
67
z47
z57
z1
第四步,图像总像素点为4096,根据一系列zk求出相应的Pz(zk),得到如表5.4和图5.4(d)所示的结果。
表5.4
规定直方图和结果直方图
规定直方图
结果直方图
zk
Pz(zk)
0.00
0.15
0.20
0.30
0.24
图5.4直方图规定化
(a)原直方图(b)规定的直方图(c)变换函数(d)结果直方图
7/42
综上所述,直方图规定化就是把直方图均衡化结果映射到设想的理想直方图上,使图像按人的意愿去变换。
5.1.3MATLAB提供的直方图修正函数及其应用
(1)imhist函数
MATLAB图像处理工具箱提供了imhist函数来计算和显示图像的直方图,其语法格式为:
imhist(I,n)
其功能是:
计算和显示灰度图像I的直方图,n为指定的灰度级的数目,对于灰度图像其的默认值是256,对于黑白二值图像,n的默认值是2。
imhist(X,map)
计算和显示索引色图像X的直方图,map为调色板。
[counts,x]=imhist()
返回直方图数据向量counts或相应的色彩值向量x。
实现图像gray.bmp的灰度直方图程序清单:
I=imread('
gray.bmp'
)。
imshow(I)。
figure,imhist(I)。
rice.png'
(2)histeq函数
MATLAB图像处理工具箱提供了用于直方图均匀化的函数histeq。
histeq函数的语法格式为:
J=histeq(I,hgram)
将原始图像I的直方图变成用户指定的向量hgram,hgram中的各元素值域为[0,1]。
J=histeq(I,n)
指定直方图均匀化后的灰度级数n,默认值为64。
[J,T]=histeq(I,)
返回从能将图像I的灰度直方图变换成图像J的直方图的变换T。
newmap=histeq(X,map,hgram)
newmap=histeq(X,map)
[newmap,T]=histeq(X,)
针对索引色图像调色板的直方图均匀化。
其他与上面类同。
对图像gray.bmp进行直方图均匀化的程序清单:
8/42
J=histeq(I)
subplot(2,2,1),imshow(I)。
subplot(2,2,2),imshow(J)。
subplot(2,2,3),imhist(I)。
subplot(2,2,4),imhist(J)。
由图可见,图像经过直方图均衡化,图像的细节更加清楚了,但是由于直方图的均衡化没有考虑图像的内容,只是简单地将图像进行直方图均衡,使图
像看起来亮度过亮,也就是说直方图的方法不够灵活,于是又提出了其他的图像增强的方法。
将gray.bmp图像均衡化成32个灰度级的直方图作为原始图像的期望直方图,对图像gray进行直方图规定化的程序清单:
J=histeq(I,32)。
[counts,x]=imhist(J)。
Q=imread('
figure,
subplot(2,2,1),imshow(Q)。
subplot(2,2,3),imhist(Q)。
M=histeq(Q,coun