|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理) Q8 o9 m6 {( C. y& e! S4 ]( X
: G J; _! }2 P+ E3 Z4 w/ R
MATLAB仿真程序:) w" g' T6 G7 V$ q$ i/ N
- J" i* N; \ o4 d1 z. z( k
%{
: v Y3 A+ Z' o f8 l
8 r2 o) L6 y f3 Q0 k 基于直方图均衡化的水下图像增强(MATLAB仿真)
' T! d( I4 J4 Z1 c9 h: ^+ F b7 }3 M/ r1 o
对RGB三个通道分别进行均衡化处理,得到增强之后的图像
6 o. B4 F# i4 [% }0 h! u3 h
2 h( f: Z' l) i" T 实际测试,效果明显,下面
. X2 B$ l9 l$ Q% |, h" n/ X& M
: h( ~( Y: V n; a j9 h( B3 ^/ f6 d% I 时间:2014年9月11日23:59:01
* Y- y2 g# Y+ p6 q0 L2 o1 {% _
7 C' C- S/ c2 A4 i 整理:天空之恋
0 k1 U: _9 w% u
8 P' L! f; H$ v* e 地点:桂电
$ H# R$ r. V! j( e& r4 k) L4 F) E; Y. v9 T
%}$ w% J; p1 X% Q* S3 u
1 h4 |& h( r% ]) V1 A0 oclear;& D$ A) Y/ _# H/ P: _" v7 q9 ]. q! d, R
6 K; s- f- p* O0 v# \
t = imread('wa5.png');
+ S! P4 Y6 q z8 ?0 [. [; q9 S' U
' `. @$ S; P/ K0 |3 wI=t(:,:,1);/ b* s; l! q7 o- p+ ]. h& w
$ ]$ e W8 G# O0 q[height,width] = size(I);
- b! b2 }, t) f$ m7 L) ~' S6 c, ^; {+ O; E9 S' F
subplot(121);
4 t) q! W: V" `' s; m' y' A0 O5 X4 }# l2 G9 @
imshow(t),title('原始图像')%显示原始图像 / W! u: B8 c. K& W) d4 d' x
`/ [. V) J- }. n6 C' Y
%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用: }& h; D( x9 A, }3 D
: W8 B( m: {0 j5 V6 u%进行像素灰度统计;
8 q6 b0 W/ E2 d* R8 Q) v
6 _1 e8 C* Y; N# s, G3 k& W: _$ q! Ss = zeros(1,256);%统计各灰度数目,共256个灰度级
; H. E* G) s) Z! r& G$ I8 g, }/ T: q
%绘制直方图
7 ~! {! R" B/ D& J! v% b& H
y0 [. W4 p3 g5 |( Egp=zeros(1,256);
# F6 T: h/ m+ J& [& @ a& ]* |, w+ c$ W
for k=0:255( a) X( F- g$ z% k
$ n3 |! t: @* |2 Q5 m4 F% ~7 a" W7 K
gp(k+1)=length(find(I==k))/(height*width);: Y# i b/ z3 U Y' b
) m) x) Y9 W& D0 Vend
0 J) w! }, p( t9 g& \3 H8 K+ X" L5 l/ C& p: M6 N
for i = 1:height 2 @; P, ?8 y0 n. m
$ S5 `6 |3 w6 C4 Y for j = 1: width ; W- P% S) K/ H% M q6 K: z" q
- [9 p0 z: ~* j5 j X
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
/ }* K+ q( `. U9 t9 E
a; @ M! p9 T1 |: L% a end 6 N* @* r7 s1 Q; @) A6 w$ e
- ~3 ] ]( q4 h
end , Z! |# _" b* @& X$ y, V
6 b0 [; |; y! W$ m, c% k0 W
%计算灰度分布密度
& s+ @( k$ C" c \8 w L# Y% i* I3 L
p = zeros(1,256); ( G! h0 S1 p5 e" t2 e' L
6 |% [" z! t# t+ g3 Z6 r
for i = 1:256
Z$ R b* z) A
! F& \0 x/ D) c5 o p(i) = s(i) / (height * width * 1.0); : e( N' S, _' R, h
; {/ g! Q2 W* g1 C p2 P3 X
end
. ] S5 L Z' r# F7 O7 h6 U1 A
4 A9 [8 u. w c# W/ V' Y# p" l%计算累计直方图分布 6 Y7 h$ x/ X0 B* R, i/ l/ U
4 x# a+ T& ^1 Ac = zeros(1,256); 2 Z, Y2 m8 T% y+ x5 k
_4 l3 l# H V! X; w; j
c(1) = p(1);
4 z- w' |6 S8 A' a# L! `: @) g8 b
; L q* k: A+ \; V2 ~! w/ Afor i = 2:256
. Q# z' \& N7 p2 B' R6 w6 a7 V' z A! g/ o
c(i) = c(i - 1) + p(i);
0 E! k/ r: P, M- \2 O% ]/ W+ p. ~* m& b% `+ | n. W+ V
end $ Q: z% O- o7 U+ r! \7 X; _
! D/ R5 {. |4 e, }- c& I2 X
%累计分布取整,将其数值归一化为1~256
* d, k J' h/ g+ o$ I0 Z$ z- H. ?
, x4 M* ]7 k' _c = uint8(255 .* c + 0.5); ; J7 P- W" @0 G' S" c
/ w6 I' }+ d. Z/ \%对图像进行均衡化# u* U* u% R( u3 Q4 r" _) k R% ]* P
# w3 G: N# ~+ \3 _
for i = 1:height 9 f. I! F* l% C* O
& y" }. @4 q4 u$ d/ _) D5 u0 W for j = 1: width 9 o/ k2 l- U+ h5 I
4 K6 k' Q# _% ^7 H3 @% r
Ir(i,j) = c(I(i,j)+1);
+ c! s; j* S) _2 I: W! F! ~1 x# b* z; x
end 3 u4 j' x8 ?4 u/ g/ X5 a
7 m# f# M2 f0 q/ K
end % M. a8 y# ]% }
) C7 }, z9 E8 W1 @+ i% C+ k+ @
dis(:,:,1)=Ir;
& C# ]" `* Z; ?3 b9 v: s5 }# P9 X. F! p- E- k5 _5 U
%subplot(122) 0 `' a* `" ^2 M/ t- J7 A% L
, w; c4 {* l* E( X, z: G- ^. J9 @1 i9 F" W( e%imshow(Ir)%显示均衡化后的图像
. _7 v8 u0 B9 C2 h# s5 m/ y6 n' S, z' ~% d
%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用% A1 H) W" G0 W7 g
, K9 z" q4 V* L. i: U5 M# D, C' p
I=t(:,:,2);
X. I9 Z! u4 _2 X2 _1 E& a1 j! r( I! _) u' f( x- i, o* a9 D
[height,width] = size(I);
1 N4 t+ @) Z8 m7 p0 `, o# q" ]9 y D0 D3 {% P3 s: z( _# ]
8 k, P+ K0 K/ N, [3 _' l+ f9 O
3 {* ^# K, L! ^$ X( e) J$ l%下面使用直方图均衡化进行处理: O) d) i8 h/ m9 {9 U. Y
* r5 ?; P$ v: I
%进行像素灰度统计;
7 }- B' A, A+ Q! B! `! F# H/ `% p3 J0 \ ?1 n
s = zeros(1,256);%统计各灰度数目,共256个灰度级
6 H# N: `& p1 ~& r+ D8 ]
. T' P0 m: }9 h' T8 t%绘制直方图
" P; |% C* K0 _! U+ x+ G
# S- p5 V! {( Z# x( mgp=zeros(1,256);. Q+ W9 e I+ v" V# F& Z
+ s# p' _6 G. w/ t/ v. a" lfor k=0:255
) Z( g) A+ f8 C8 H/ e8 c9 j4 h: i; q0 l/ a3 `8 Z' K& R
gp(k+1)=length(find(I==k))/(height*width);6 @2 p2 N* A/ G% ]. ~
( D8 m9 E7 A U+ A4 vend5 a( y) }+ V1 L0 y) L
0 A+ u' S7 B0 V, y' c yfor i = 1:height ; Z: p. ]. a2 X7 R8 y, O
* O g v" E; b4 X I for j = 1: width 0 Z' J; b# E& L/ m) y9 \$ l3 v
' f) a) U! d) j; l: I
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
7 K& }# k. C. [! ~
* Z. u9 r3 N! z! @6 Y8 b7 y0 h end
4 ?3 n- \) c# ]
M: t t2 N* M$ E8 n9 c: Yend
# r1 c2 o4 [4 D
4 F4 X. m; A' A" G% c9 E%计算灰度分布密度 ( J8 g0 d. \9 P) r# y! `& z& H
& c( p( ?. T$ p2 q8 @1 D+ Z" } {
p = zeros(1,256); T P& ] t: L* U3 a9 A4 O
2 p8 P$ |# J( \" D9 _4 D, O
for i = 1:256 - s0 j" I, I+ H3 U7 O: g8 C1 g
9 q7 m: d% `- L p(i) = s(i) / (height * width * 1.0); 7 I( K! s6 M" H
N0 t& v7 I- ?/ s' u
end
( }" U: G; {3 T& U4 e: K7 E, W$ ^& c; G
%计算累计直方图分布
; U8 N( g' s# ?2 Q+ r
3 c, a$ G3 j5 Sc = zeros(1,256); ) W8 a; S# b; H1 G$ k
5 r8 q8 P: y9 S- q- j& {6 [1 T7 Ac(1) = p(1);
6 X# ~5 _ H6 K, F1 D; K6 y" _$ w2 J9 U1 m2 K3 A9 T: y* U; o
for i = 2:256 7 G# m4 M0 L& d$ ]0 U2 l7 Y/ @- l
# P M/ v! }# R, \( ^% ` c(i) = c(i - 1) + p(i); ) }# D) ^" i, @6 l
3 i- ~* r, |# P( F: m
end * z3 _/ a/ I0 }& ]$ J1 W4 T& i. i
, x3 F6 P9 m/ V7 J%累计分布取整,将其数值归一化为1~256 ' G/ [5 T* ^5 b$ `( J2 f1 O
+ w& U6 Z7 j F6 u* Rc = uint8(255 .* c + 0.5); , K' S9 q- `! w* J2 x1 v
. b, ?4 m8 Q) d# I K+ K7 O9 q+ d
%对图像进行均衡化
6 ~7 N5 @1 y, K- s' n2 o$ A; K# w
$ J8 L4 [( p+ b# Ofor i = 1:height
4 J) ~! n% j. G; ~" m1 i8 ~; P( n( d# B2 b+ I: v& D
for j = 1: width 0 }+ s- Y, `) G$ p. N, E
- Y& y3 \& t8 G+ ]1 b% g Ig(i,j) = c(I(i,j)+1); : o+ {+ N' S- ^" J6 s& r
7 X+ R" ~' d! x8 o( N7 i# U
end 2 h* u2 O' ~4 l) L
( B9 p, X2 ?4 e0 ]end
# M) w$ o- J5 ~+ t @; K0 Z! l8 I/ ]- l7 ?3 I
%subplot(122)
+ t& A% c# ~" X! L& Z
/ Y8 _$ _9 j5 ]) x; I& C, W%imshow(Ig)%显示均衡化后的图像( ?6 j8 ?8 i& s$ X' d" v' m6 @( [9 @
# Y$ |: [$ K5 T, q& V+ w) Mdis(:,:,2)=Ig;
2 ^6 N! ]8 c# e/ N% `+ `/ G+ l* k2 W4 n' g7 e3 s& Q7 l
9 k9 r! f" ]6 l1 j$ s$ D: `; \* J. ^ A$ r8 A& j6 X
%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用2 _8 y% Q/ c) L8 |/ v8 P0 T, f. i$ V
+ T7 J$ D* F# W/ `# l' II=t(:,:,3);
+ D* P0 B1 [; y8 f/ V
" ^% p) g6 r# a( Z+ T[height,width] = size(I); 9 x3 r4 w- c0 B1 t/ {) U
, M- `+ E6 S& {( F) [0 D" J, ^
% f- D! r' U" U u
4 F0 G* E' o. @9 s q4 a( G' U%下面使用直方图均衡化进行处理
' q! B5 `* Q! D& h! o3 W$ W+ T: j% H, @1 d" M
%进行像素灰度统计; ' M0 w( u$ |) M: L* ^: r
$ k- c+ R% P1 w+ i8 rs = zeros(1,256);%统计各灰度数目,共256个灰度级
' b4 [+ ?$ T% e+ ?
) X! M* _. J$ ~# ^5 r( J' R%绘制直方图, ?' [6 ^. h' B7 D. l
1 y( U5 ~6 I# t, _# \gp=zeros(1,256);% f2 z$ R% _$ U
3 z+ ]5 Q% ^( t/ rfor k=0:255. h6 Y: o o9 o2 Z, m
. b3 M) S1 ]. J: Q; e gp(k+1)=length(find(I==k))/(height*width);
4 A p% R. W/ z( D; O* h7 z9 G2 ]8 A5 W
end) b0 s6 O. H; m8 b5 M' n( g
5 a. q" l5 w) L/ qfor i = 1:height 7 R9 r- n2 B9 N
4 T/ N. {/ p$ ~/ o1 C: X) p3 R for j = 1: width 5 {! {- i- L9 Q
: u# G" _; t, `. X s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
0 j/ N9 y0 J) C1 w8 |& h1 t; C" {% L- e; I! U
end 6 n/ v2 I& s6 g6 J& ], f& ~# v; ^
( v0 U/ U, I& \" h8 h
end
$ V* t* u+ p+ D; ]* \
: x! T8 I8 a7 z. d1 _) G%计算灰度分布密度
3 F1 F6 ^" ]5 [9 a4 b
: D3 d) H6 P7 r' pp = zeros(1,256);
8 \, Q8 w' m2 g% K8 G
/ ]( _3 f$ z; W; [ z, ]for i = 1:256 ' H& P0 {8 m3 |5 w2 X9 K: x5 h
" E7 J6 h- [* p0 `7 U7 B4 H+ C; X7 Q
p(i) = s(i) / (height * width * 1.0); * [* y: I+ v( l6 b
# E- e B& e1 A% P! i0 T: y" [" ]end
: b0 d e- T. [( p7 B( L0 j: z2 k- N2 y" ~6 k8 l7 n
%计算累计直方图分布 ( g, f* v% U; D# H
L# v; N# }& |3 }c = zeros(1,256); ) q/ n8 {5 q# p$ q; D6 R; z5 O
" Z( b5 G8 M9 g- H/ I
c(1) = p(1);! f4 x7 l; A# z! `: _ }$ s
/ o, i7 {5 U& U$ G2 efor i = 2:256
- [0 y& G! Y" ]! D, d8 s: O. I' O4 X9 M
c(i) = c(i - 1) + p(i);
4 V; N6 t4 h, j# a6 Q+ }
0 @$ w- q. g8 N( O: l7 ~end
5 o) Y1 K& m4 g4 ?! I+ n
5 f0 o$ V7 P1 J y8 {; W%累计分布取整,将其数值归一化为1~256
, `( m0 f- U1 J: |+ |
" V: s, \& ]& U n2 C4 dc = uint8(255 .* c + 0.5); ' {9 Q" y$ Q' {$ p0 t9 ^; y; G
0 U; H. h# O4 }$ H- V9 C%对图像进行均衡化
) f4 H: s' o: I g% w$ L( d! U. M2 F0 s2 L1 i
for i = 1:height ( k8 V7 C! w& B
4 Y7 B7 I$ J! ?+ a. s for j = 1: width
! f5 L4 n) Q. G' @0 \% Y; S; Q9 {: k; Z9 @2 t! i& n0 G. c
Ib(i,j) = c(I(i,j)+1); / v; s" U" `" S6 p6 u
0 u% y% Q! p+ Y% ]) a
end 7 z( R' ]% G* F* U
6 o3 `5 R) v% N' C1 D' }end ) f! Y; E! m) T: ]6 J
! I5 q6 n Q; ?2 Tdis(:,:,3)=Ib; ! F' Y5 K5 p0 X9 K( v; m [
2 z" l- _0 |5 [- ]1 W$ p%subplot(122)
; l+ M$ T, C+ o- Z% @; V) S8 \
%imshow(Ib)%显示均衡化后的图像 J: e9 i, W1 G% ^* x
9 K& X# b1 C( |/ Q1 Z
subplot(122);
5 J5 S" @" f0 V# X l0 y$ R4 M" f
+ M1 M- C3 c9 q H1 c2 b+ A2 uimshow(dis),title('处理之后的图像')%显示均衡化后的图像
4 X1 i, j6 y' }; m: R
0 V' [- @/ _+ d5 T$ y. b/ v4 T% [
( l- [5 E6 E$ s, l% V: `! V7 r- u: h) L; i& M, U
|
|