Chinaunix首页 | 论坛 | 博客
  • 博客访问: 198478
  • 博文数量: 264
  • 博客积分: 6010
  • 博客等级: 准将
  • 技术积分: 2740
  • 用 户 组: 普通用户
  • 注册时间: 2009-06-03 13:25
文章分类

全部博文(264)

文章存档

2011年(1)

2009年(263)

我的朋友

分类: C/C++

2009-06-04 13:26:40

图像增强处理技术一直是图像处理领域一类非常重要的基本处理技术。通过采取适当的增强处理可以将原本模糊不清甚至根本无法分辨的原始图片处理成清楚、明晰 的富含大量有用信息的可使用图像,因此此类图像处理技术在医学、遥感、微生物、刑侦以及军事等诸多领域得到广泛应用。本文从空间域的角度对图像的灰度直方 图增强处理方法进行详细的介绍。
: `  q' k+ x& B& W
; T, C, k2 Y' i$ P1 q% U; \图像的灰度直方图处理技术 ; V3 f8 u1 C4 [. o/ L
! f) I: w9 X4 h/ F7 o
在空间域对图像进行增强处理的方式有许多种,如增强对比度和动态范围压缩等等,但这些处理方式都是针对原始图像的每一个像素直接对其灰度进行处理的,其处 理过程主要是通过增强函数对像素的灰度级进行运算并将运算结果作为该像素的新灰度值来实现的。通过改变选用的增强函数的解析表达式就可以得到不同的处理效 果,这类处理方法比较灵活方便,处理效果也不错,但对于某些灰度分布很密集或对比度很弱的图像,虽然也能起到一定的增强效果但并不明显。对于这种情况就可 以采用本文提出的灰度直方图变换方法将原始图像密集的灰度分布变得比较疏散,从而拉大图像的对比度并在视觉上达到明显增强的效果,使一些原本不易观察到的 细节能变得清晰可辨。 ( v" R- j& _, s

3 I* L" f5 `. z% A" Q7 n% G图像的灰度变换处理 是通过改变原始图像各像素在各灰度级上的概率分布来实现的。通过对图像的灰度值进行统计可以得到一个一维离散的图像灰度统计直方图函数 p(sk)=nk/n(这里k=0,1,2……L-1),该式表示在第k个灰度级上的像素个数nk占全部像素总数n的比例,p(sk)则给出了对sk出现 概率的一个估计。因此该直方图函数实际是图像的各灰度级的分布情况的反映,换句话说也就是给出了该幅图像所有灰度值的整体描述。通过该函数可以清楚地了解 到图像对应的动态范围情况,可以了解到图像灰度的主要集中范围。因此可以通过图像增强程序的干预来改变直方图的灰度分布状况,使灰度均匀地或是按预期目标 分布于整个灰度范围空间,从而达到增强图像对比度的效果。这种方法是基于数理统计和概率论的,比直接在空间域对原始图像采取对比度增强效果要好得多。在实 际应用中直方图的变换主要有均衡变换和规定变换两种,而后者又可根据灰度级映射规则的不同分单映射规则和组映射规则两种。 3 j1 q* I, O9 a# l) R6 Z1 |
0 a. r+ k5 Y& H. @7 N
直方图均衡化处理 7 G" E; \2 l' l
) W! t( v  ]8 O! W2 n
直方图均衡化处理的中心思想是把原始图像的灰度直方图从比较集中的某个灰度区间变成在全部灰度范围内的均匀分布。对图像空间域点的增强过程是通过增强函数 t=EH(s)来完成的,t、s分别为目标图像和原始图像上的像素点(x,y),在进行均衡化处理时,增强函数EH需要满足两个条件:增强函数EH(s) 在0≤s≤L-1的范围内是一个单调递增函数,这个条件保证了在增强处理时没有打乱原始图像的灰度排列次序; 另一个需要满足的条件是对于0≤s≤L-1应当有0≤EH(s)≤L-1,它保证了变换过程中灰度值的动态范围的一致性。同样的,对于反变换过程 s=EH-1(t),在0≤t≤1时也必须满足上述两个条件。累计分布函数(cumulative distribution function,CDF)就是满足上述条件的一种,通过该函数可以完成s到t的均匀分布转换。此时的增强转换方程为: ! z  Z  t- d+ @3 i; l" i, W. V
- I' u0 o  ?$ c- u( x6 ?5 l
tk = EH(sk)=∑(ni/n)=∑ps(si),(k=0,1,2……L-1)
7 _( U9 i/ w& R$ ]# X
7 }# [+ Q9 y! V4 D. D) v# f上述求和区间为0到 k,根据该方程可以由原图像的各像素灰度值直接得到直方图均衡化后各像素的灰度值。在实际处理变换时,一般先对原始图像的灰度情况进行统计分析,并计算出 原始直方图分布,然后根据计算出的累计直方图分布tk,按式tk=[(N-1)* tk+0.5]对其取整并得出源灰度sk到tk的灰度映射关系,其中N为灰度的级数。重复上述步骤,得到所有的源图像各灰度级到目标图像各灰度级的映射关 系,再按照新的映射关系对源图像各点像素进行灰度转换,即可完成对源图的直方图均衡化。下面是按照上述算法实现的部分关键程序代码。
+ u9 @( D3 O  C* v
6 d4 f* T8 v2 j2 ^) A3 g( F2 A首先对原始图像的各像素点的灰度情况进行统计计算。对于24位BMP图像,图像阵列是从第54字节开始的,每像素按R、G、B的顺序占3个字节。 ! \8 w3 N# f. q' I* R7 L
+ C: B& e- j# W+ ^
for (DWORD i=54; i
1 q  J' c- j5 C% p$ uns_r[m_cpBuffer[i]]++; //ns_r[k]为k灰度级像素数,m_cpBuffer[i]为当前的灰度值
4 h, @, `! N- t) d+ k& h; b0 x1 |4 ^, O# j
i++; . X9 Y3 E1 U& y& i% R. r

: C) @' H7 t) r- f* N% j) w0 gns_g[m_cpBuffer[i]]++; . a9 W. j8 I2 _# l2 c3 R% s
6 o  ^1 u, Q# c( z( W5 i1 i* z
//ns_g为G分量的统计计数
$ |1 i! {% R# n
; E3 L- u( t4 A- Zi++; ; Q# J/ a3 d9 d( W) o: @8 ]3 l: a
9 x- {6 m% ~! W+ |! T
ns_b[m_cpBuffer[i]]++; - C7 v& O9 b5 X0 p, ^9 x1 \

6 B. h# a- e3 n" T//ns_b为B分量的统计计数
) O/ x5 |( R3 S% G) t# B5 S$ K- d3 d1 j0 I
} 1 p9 n) U3 n; U. F7 C4 _
" }/ Y2 b. r  F8 d; T
for (i=0; i=0.0f)
; ]9 b) f) j+ E3 N! \* L0 G4 e& w" ~4 N% d4 M6 q
now_value=ps_r[i]-pu[j]; % R$ T; ?' x5 `0 G. I

/ c5 ?7 I* v* h3 E5 u) velse
. V& s: Q3 y$ l/ v9 M8 B# `+ S* m0 M/ c
now_value=pu[j]-ps_r[i]; 9 F# F* a- H# P" y& D

1 C2 C( R' _- B% m) `% Aif (now_value ' F% A7 J: Q2 ]5 ^& h! a5 B
{
" l; l0 W$ w( g9 l
/ L0 V( q$ z3 B8 R2 E0 ~8 Bm_r=j; % s4 A2 z* @& h

6 T# S1 D8 P6 [: ^. Y, Mmin_value_r=now_value;
- S- L' w& f  u& M
9 j1 j* @; q, G4 h( F}
- I0 n0 C5 h! U2 |; @( {, z4 o4 w% q- t: s3 [: p" y$ ^2 U( t% u
…… # T2 g+ w% J+ c
7 f# `2 X$ m/ Q2 q$ ]
//对G和B分量处理的代码与R分量类似,在此省略
; X3 a" ]$ ]% \
+ R: O9 V; [7 l" U……
! w9 i- Q& j* u
: Y4 Z) W! k5 L4 x3 s. ], k} ! o6 V  Q9 ?: v( C0 d

; ]! i5 v* ^  y4 f4 R//建立灰度映射关系 2 S* ^0 O$ e& t' J" ]5 }! y

7 x8 \& G/ l. _# Wns_r[i]=nu[m_r]; % R5 x5 n1 g4 ~9 F2 [$ F! w
/ R: I7 J% z+ F4 r4 _+ O7 H) D* P
ns_g[i]=nu[m_g];
+ o7 Y4 F* f/ B6 T1 d' Y' L! p8 S  @
ns_b[i]=nu[m_b];
  z! M# \4 ~% p+ P) Z
  N( D; J* l( N6 V& n3 \3 j: b" ^}
  ]1 ]  s5 k% Z/ K( R# q4 k: h  ^# H% K
在得到ps(si)到pu(uj)的映射关系后,按照该映射关系把原图的原始灰度值映射到经过均衡化的新灰度级上,以完成最后的处理。上图(图3)为实验得到的按单映射规则对直方图规定化后的效果,同直方图均衡化处理效果相比,可以看出高亮度部分得到了充分的增强。 ' n: R* U+ w5 [% `2 h/ Z

1 O5 P: b' g# c( S组映射规则的直方图规定化处理 5 G, m" H' A6 y. q; n9 X# u* X

, p. F3 u: C! }6 P' V单映射规则虽然实现起来比较简单 直观,但在实际处理时仍存在不可忽视的取整误差,因此在一定程度上还不能很好的实现规定直方图的意图。可以通过在规定化直方图时选取适当的对应规则来改 善,一种比较好的对应规则是组映射规则(group mapping law,GML)。这种规则的约定如下:
% l* p2 X/ L* k) K2 q
( [+ \2 J$ ~( q9 J4 }存在一维离散整数函数I(a), (a=0,1,2……N-1),而且满足0≤I(0) ≤I(1) ≤……≤I(a) ≤……≤I(N-1) ≤M-1。寻找能使 |∑ps(si)-∑pu(uj)| 达到最小的I(a),其中ps(si)的求和区间为[0,I(a)],pu(uj)的求和区间仍为[0,a]。a=0时,将介于0和I(0)之间的 ps(si)都映射到pu(u0)中;1≤a≤N-1时,将介于I(a-1)+1和I(a)之间的ps(si)都映射到pu(uj)中去。
: p" L+ J( T1 l0 ]3 k0 m
6 u+ o) w( R& ^. X由于同单映射规则相比只是对应规则做了变化,因此编码部分只需将对应规则部分的代码根据上面介绍的组映射规则做必要修改即可: % J9 ?- a4 N+ I' _
" P7 ]5 V4 I9 c- j) \
for (i=0; i=0.0f) : r2 f7 J1 s1 `( P% E0 q8 A3 ?% ^

' b2 h& ^0 \' H! o2 _7 A" X' ?now_value=ps_r[j]-pu[i]; ! P" [6 z1 I* f) G* a

+ B% ^: s7 P, a5 q1 a1 |0 oelse / s6 c5 j; u- Q* @  i

/ f3 S8 v) p# y/ H* {" Fnow_value=pu[i]-ps_r[j];
7 ^$ O( [' r3 T3 T
( V, j/ r$ ~1 J* tif (now_value ; S7 \0 a5 x3 L
{
2 R" N* a6 Y  M$ I* Z& a$ O4 l% X
# `( v9 T: g" B% q9 V5 GA2_r=j; 1 B3 H1 O- Q2 m( O( e2 p2 p

! S- y% T- m0 d/ L% c4 q) Qmin_value_r=now_value; % {5 B. o' `+ {. A4 n
" S; K; \+ p! `% A
}
" _3 B! t+ q; X* b5 G! l9 {1 S  r; c% N  o+ b+ M
for (int k=A1_r; k<=A2_r; k++) 7 ~6 u' ], o& s, s2 d! \5 D# ^) o
3 m( L( |3 v4 o: {# u; M2 x: o5 s+ q
//建立R分量的映射规则 . a9 `' M# G6 Q3 s+ u4 Y3 u# o0 X
0 o* V5 d$ N$ Q: w) s3 U
ns_r[k]=nu[i]; A1_r=A2_r+1; 7 G" j& y$ f: X) ]1 }& z

5 A2 H7 C7 x0 I//对于G、B分量的处理类似,在此省略
1 f0 H# h/ E; f% N, }" _4 M
% A) J, m" \. M5 r' Z…… 3 w0 h7 L! C+ h. \+ O
. T( [, n$ q: ^  Q
} : C* W; ~- B* X
3 N5 R4 b3 ^( R
对原始图像应用本算法,实验得出的按组映射规则对原图做直方图规定化后的效果如图4所示。
" z$ |+ ?8 n9 G* S3 k# m, m6 h, ?
  i% u8 K( S9 v# a/ ~. N% {. L该图同单映射规则处理图像相比虽无太大变化,但在直方图分布和图像细节上更能体现出规定直方图的意图,而且通过下面的分析也可以看出组映射规则的误差要小得多。
2 _" W1 r+ t0 S5 P, e! h- s
! Q7 q$ k1 G6 @" Y在ps(si)映射到pu(uj)时, 采取SML规则的映射方法由于取整误差的影响可能产生的最大误差是pu(uj)/2,而采用GML规则的映射方法可能出现的误差为ps(si)/2,由于 M≥N,所以一定有pu(uj)/2≥ps(si)/2成立,也就是说SML映射规则的期望误差一定不会小于GML映射规则的期望误差。而且从算法实现上 也可以看出,SML映射规则是一种有偏的映射规则,某些范围的灰度级会被有偏地映射到接近开始计算的灰度级;而GML映射规则是统计无偏的,从根本上避免 了上述问题的出现。通过分析可以看出GML映射规则总会比SML映射规则更能体现规定直方图的意图,而且通常产生的误差只有SML映射规则的十几分之一。
- @; S* b3 e/ K5 o+ T: M2 N' M6 H' M: K3 l
结论 & A+ o' g0 v4 o2 v) S
$ N8 m* G; [, |4 }+ s
本 文从理论上讲述了直方图变换处理中常用的直方图均衡化、采取单映射和组映射规则的直方图规定化变换方法,通过程序算法实现了上述图像增强过程,并给出了通 过三种算法实验得出的处理图像。实验表明,本文介绍的方法对于暗、弱信号的原始图像的目标识别和图像增强等有着良好的处理效果,尤其是通过组映射规则的直 方图规定化变换方法结合设计良好的规定直方图,可以得到更佳的图像处理效果。本文给出的程序代码在Microsoft Visual C++ 6.0下编译通过。
阅读(599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~