|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理
. N+ ^0 U$ b# \$ ^! j4 l, g
& i( Z8 c* k1 x& @8 X- N. g- fMATLAB仿真程序:9 h2 }7 Z% B3 h
% z: `0 q+ ^( G5 B" {%{( b, W: p' Z" L- P ^5 _2 Y8 h
) e) e8 x3 F" H4 R& D% q 基于直方图均衡化的水下图像增强(MATLAB仿真)
" w: [. u4 B1 ~: ~0 A' V" \9 v3 p) k) J) v
对RGB三个通道分别进行均衡化处理,得到增强之后的图像, L: B5 X& A( C
* A/ j) _% G1 x
实际测试,效果明显,下面
' ^9 P+ W+ H( ], e7 R, F0 E
7 Z$ ]" f% e* R7 P 时间:2014年9月11日23:59:01$ }# \8 P, z, R) [, p+ H; ]
# L. V5 f+ d4 w: y+ _1 M 整理:天空之恋
7 d. H# i! D( y: q. I! _7 c
8 i, m1 {* C/ u/ T 地点:桂电
1 Q- m, V- l+ w* W, M
# a `" w/ Q' M%}
% `) D2 V7 S2 K5 Z6 ^6 C2 r( k4 ?0 _: w0 i" d
clear;2 d- F+ O! }5 s5 h+ l
4 @9 }+ j" V# l6 Q# ]
t = imread('wa5.png'); , I: g( x% d+ \
$ w( n; ^0 U; m. i" H- _, X7 m
I=t(:,:,1);6 O( Z2 u8 f7 Q/ L* V
4 F# K7 w. m b' a) P[height,width] = size(I);
4 b. d9 j ~3 o) W
; @! a3 e( v% T9 fsubplot(121);
$ I4 A/ a, K" {
* k V4 B5 G& aimshow(t),title('原始图像')%显示原始图像 ) l7 a! D( T) G' g2 K
! R! b$ |. t: x# M- C%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
. }; s+ @% m3 a0 v* Q# @
# e5 ?* _) v: ?, d n%进行像素灰度统计;
# @+ Q+ {1 G7 p' G
& h1 j, I6 S4 ~' S2 F- Cs = zeros(1,256);%统计各灰度数目,共256个灰度级
8 `- c2 M) L% v' `! V% p- ^6 s4 d _" D, P
%绘制直方图2 b% q5 W* ^" {. n5 l
2 u6 p8 {. u! R) ?/ dgp=zeros(1,256);
; K- j& [6 j' Q1 S9 R
) Z$ j% P; k# }" k& r* e! Ofor k=0:255
- m8 `( s7 Z( N& o4 I3 k$ o$ x& G( u2 d+ O
gp(k+1)=length(find(I==k))/(height*width);
4 n3 n7 Z9 V* c/ K7 ]# P! M" Y" M
- I+ p' H: w4 Yend! n( B" A+ \6 n' R$ @& x; p1 i& x
& q7 | M0 M7 ]3 zfor i = 1:height
6 C, ~* K, | X5 F5 p( h! ]% a1 n# W
for j = 1: width S7 Y. Q5 h% O7 }: r$ U S
1 G% @* V/ T2 o) i" T
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
6 R6 ]. y, ?8 b3 ^$ O x7 U g; x/ J$ e- n0 q( q# n
end
2 \4 R+ V& k( [5 i3 T) h$ ~/ {+ T! `5 P- [: z2 _
end
: R( ]( v/ @- L8 X8 E. {+ |9 Y' J$ {+ Y& f" |- ?1 l1 T2 M2 v7 p
%计算灰度分布密度
: a# e/ G F" Q/ s% ?0 w% x! W
' z* n: W$ e: ^p = zeros(1,256);
: B" q i/ b# |: [# ?" i
& A" F$ X7 U! V: q0 _" mfor i = 1:256
! @& ]5 |9 l: N& M2 B
* ^, q& O9 L7 J. z) r8 H/ h p(i) = s(i) / (height * width * 1.0); i* z! j2 y* P) m- a1 U) Z
. J. m7 d/ o+ N2 F, z) O' |; Jend 0 M r2 k0 z" m+ q5 s5 e
* r/ Q0 q# S4 [1 E! R%计算累计直方图分布
6 ?5 m# C% J- c9 s% P0 K# q2 ?$ y2 h9 l" a8 P
c = zeros(1,256);
5 q5 t7 g3 d1 ?4 r8 s$ z) R! w
! d$ t5 c! P4 rc(1) = p(1);
7 R. v- p6 H+ q7 @" ]- S. | q0 o9 a# a3 ]/ B6 C
for i = 2:256
1 R6 ~* |! a; {7 i; z7 T0 z! |6 j% A* Z4 P& N
c(i) = c(i - 1) + p(i); 2 d+ ]2 e X6 X9 v& K1 l
5 s2 V. ?9 j# q/ O7 Eend * n' a. l5 x# I0 ~+ M1 q
( ^" ] {( M- t3 b% t/ W; ^$ q%累计分布取整,将其数值归一化为1~256
, a# R% ]9 q! K# X
, H/ n# G* F9 P9 M3 @9 d- yc = uint8(255 .* c + 0.5); , r: e1 f8 \* v+ s& D1 k+ d
8 Y0 p y; f J7 j0 L- Q. P6 m: E
%对图像进行均衡化. D) G8 y5 p; X) C o% y
9 o9 k8 n$ O0 s: h7 P( hfor i = 1:height # b( W# `9 a5 P1 H
1 a* r8 g G i" g
for j = 1: width
) K( s( B- s1 m
5 B& h4 ~2 c6 F* M Ir(i,j) = c(I(i,j)+1); ! _4 z* y K) w% a, g
+ [ I3 j8 a! H0 g/ g: `" l3 d
end , W+ [ v6 Z/ P; ^- e5 M+ _+ V
/ K- d# ~' G" b7 ]: ? ~& Jend
) b% x! c w5 K2 s) y1 V5 f& W
" b: _9 A! v; G: d% M: _dis(:,:,1)=Ir;+ }2 W+ h) n; k% G# }
" R/ w( I' `2 B( z% f
%subplot(122)
, i/ Z8 z% h% W5 I, f4 W( q. A8 M3 J8 Y6 ]' ~3 F1 P
%imshow(Ir)%显示均衡化后的图像
. e" Z) C7 c7 ^% N* q
6 D8 B9 J+ S( J ]( ?%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
$ J- W1 A% C! `6 y5 O _: X' K g) z% v* V Z6 \( x& Q% R
I=t(:,:,2);
6 S% K4 m- g5 ~9 z" F/ G+ ]/ X8 p
[height,width] = size(I);
, F: `, {8 c3 `4 w9 b( P" S7 n
" K# T5 R$ }- F) u: p5 o* U) f! z6 F+ C" R
6 r0 F9 q/ {# ~5 K. \%下面使用直方图均衡化进行处理
; |) ?7 M' e! U Y& O5 W
/ \4 F& \7 l4 a# D% _%进行像素灰度统计;
6 b. U5 Y) h) K, X( U
+ [# E }1 Y0 ^* {1 Ds = zeros(1,256);%统计各灰度数目,共256个灰度级 % Y: a8 h) \8 w0 l. ~
3 [6 e/ F |1 i0 m%绘制直方图* M# P( w# ]) f
# `) r: R$ H; Jgp=zeros(1,256);
) o. N$ b# G6 T. ^# H4 y! `7 V$ U% l+ @( u% k" Q- h
for k=0:255
) h8 G, ?0 u/ O: P# F3 b3 D: F/ d" O$ B/ ]/ ?8 @: o8 I( B
gp(k+1)=length(find(I==k))/(height*width);- g9 M( z( |/ Z* }" E% i. O& s
$ ?! N/ `1 n! W* Z1 B- `
end
: K, b M- Y& ^7 b' J
7 \# F. f& ]: z: r* ufor i = 1:height
0 o# w' d' k- `) C2 _0 O+ w
2 U2 F! m# w+ n( D! M for j = 1: width
6 V% {; M' p* f0 s1 r: ~1 R+ ]9 f. |7 r; L
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 ; Z. u8 Z, r: S; ]& ?/ q' b1 B. `) L
$ K$ P' n& p6 J* q$ l, E
end % s0 @. L. J8 u: E
+ i5 M+ W' H0 j8 f8 ?1 p" c4 }7 p& d
end , u2 u( l \$ [% g4 M
5 {7 M, r! [1 M0 I: Y7 H
%计算灰度分布密度 6 E6 N/ d/ @* `* P9 h
q- G6 q( f7 H/ O7 {
p = zeros(1,256);
4 C7 ^( |3 Y% ^ u$ ?3 Z) c/ v0 S; q8 w
for i = 1:256
9 `' ]- s5 l! K! G' {
! E4 n" {7 {% I p(i) = s(i) / (height * width * 1.0);
- g5 S/ Y' K3 x- z$ q1 y( d5 ~ M @/ I) g6 X
end . |3 q( J# P F$ Z7 k- C( Z% R
# t( L1 g9 N; }' H4 i
%计算累计直方图分布
2 v# u$ N2 p( T8 H) I! E% I! d! T( `& Y" z3 \5 r
c = zeros(1,256);
/ O4 a4 r# i) b
% w' y; x+ }# |# w" v0 gc(1) = p(1);
4 {$ E5 x- W( S5 u' w# M' F( L6 M) l) L6 Z/ T
for i = 2:256
9 @( Y9 ^7 p* Y W5 t4 [7 k7 x" Z
c(i) = c(i - 1) + p(i); 7 s3 q" u$ i3 b# @+ r' y; g
8 G4 u. n9 N* Z$ ~ |$ d; b- \end L. N! [2 y1 N5 m
* I' ^8 `7 @: \+ o/ [' d%累计分布取整,将其数值归一化为1~256 1 Z1 B) z6 J- F" K
* }$ V4 Y" G6 n+ \. p" W
c = uint8(255 .* c + 0.5); ; h; G$ N6 Z4 {; X. u, E( h
; f4 T/ }7 O: z! n
%对图像进行均衡化
9 R1 |& x5 i: K4 c$ x/ t( r0 ^ a% h3 j- Q, C
for i = 1:height
& r; n3 I5 O: \! |" O# Q
3 G1 x8 ~) K! o% X. ?: r5 s for j = 1: width
* i" Q. f3 B* D' B3 {8 V/ J& Z7 h/ [
Ig(i,j) = c(I(i,j)+1); ! u# c( G0 u8 ^" N2 a- U
- ^6 `! h' [$ D7 @
end , P% @ i E, C9 h, @8 S: w; F
( s& n, x( `+ ?/ Wend
" j, N) m8 m, ~0 J; |0 W; y( E
6 p+ b' S( ~1 Q# z9 Q%subplot(122)
: \1 p4 q' Y" c, a
5 Q/ M, z' T* J* k7 _2 O. n$ s%imshow(Ig)%显示均衡化后的图像
- W4 s: Q: Z9 {( X4 ] L& A+ D% q f; \4 I2 I7 x0 {5 p1 J
dis(:,:,2)=Ig;
: k! A5 \% X# z$ v/ P$ C* \, z8 k
- w1 O6 M# F5 n8 ^( E" @/ o- y# w& C
: m9 @' O/ m& J3 I
%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用/ E: @ }& R; y3 f+ q
( [1 G7 z+ ?' r0 k& ]. [! lI=t(:,:,3);
' m0 h3 k/ G' J- g% n! `3 S1 x/ Q/ V
& |, D. M% N5 r+ y[height,width] = size(I); - z* C0 Z/ R2 x8 Z* G( T! @
$ {3 C6 T l5 o" C- H! F- n- v& ?
" q" t& s" g- D) X) k' w/ b
5 i, q9 ?' k. _$ M%下面使用直方图均衡化进行处理- t% O; b8 F: Z1 ]
p# f5 l& J: ]' w0 Q* ~
%进行像素灰度统计; - O) N* l! `4 q# f7 `7 O
/ p- |0 A7 {2 ^% [) G9 J
s = zeros(1,256);%统计各灰度数目,共256个灰度级 $ Y9 U$ ?/ V0 c6 R
7 \4 Q- _8 k. c, {2 M
%绘制直方图6 b3 q/ D6 q* y$ F% H" A
7 B1 O9 a5 L: I% B2 W
gp=zeros(1,256);
6 D5 |8 q. p y; R q8 D
% o8 J! E4 l& S% x5 \# b6 qfor k=0:255
5 l! D) P, Z( m. T) j# @2 q7 Q8 r" R; s& d) x
gp(k+1)=length(find(I==k))/(height*width);( e2 z6 [- T' A5 i7 L- Z
. ^& D* D3 z: @end
! l4 g- A4 f+ E: \! j0 }/ T: S* Y7 y/ J+ y8 q
for i = 1:height
* k2 p3 f$ P: F# i( ]
8 R0 _1 [' ]9 z0 O for j = 1: width
& Y8 i1 a, w g- j8 f; Z* y! @3 @/ M* p8 O1 P3 e/ t+ V' f
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
) k, A( U, {2 M
* y! t# i( _( v, l, z end 6 H9 l$ w" u% E: @( f! Z
G# O8 e& g1 ~- R" ~: J* L5 @end
. ], h( T6 O: o& o4 s
# X5 q! ~' ]# C) T2 c& @%计算灰度分布密度
) R" p: H" C* v6 E8 f
! U; O. M; q+ \. Hp = zeros(1,256); 8 F% t5 t6 f% X
1 |6 k* n/ r$ J# b0 U
for i = 1:256 ( u7 G% B. e2 R: _+ ?8 ], R: r/ { c6 J
+ P. r0 o+ u7 ` N/ J p(i) = s(i) / (height * width * 1.0); 1 }$ M9 o' X' d; D
& ] P* b8 R$ ^- c2 L" M, t$ L
end 6 V9 k8 H( J0 E) a% v
: n4 {1 _, q* s- p! }
%计算累计直方图分布
' H% W% d& f {- D* r/ A, @7 [, r, u+ U3 D& J1 Q4 b }/ f
c = zeros(1,256);
7 \7 [9 a5 q8 \/ |9 K
9 x) b. Q) ?( I" \' Hc(1) = p(1);6 e5 v: Y* [8 y/ v
: P$ J8 W2 o) f% H& P ~& ^for i = 2:256 3 y# I5 O: J& w* G6 h
/ Q* D* U. V( j" ~$ y: t& `
c(i) = c(i - 1) + p(i);
9 l$ _3 t9 M; x* F. m S; c3 @5 O) Y2 Q& Z
end
2 [; V; ^6 F! |8 |
c$ Y. o u8 r6 J%累计分布取整,将其数值归一化为1~256
$ w5 F, h3 V1 A& C2 @3 f, @4 F. K8 ?! {
c = uint8(255 .* c + 0.5); ( }' [! {" C1 ~, ?0 H5 {$ @
( _& C- T; D! N8 r+ w- `- w6 e
%对图像进行均衡化' u% R) F5 Y8 }* n9 B" Z0 @; i
0 o' L- w7 t, H# xfor i = 1:height ) @# C! V: V% H+ d
, s) o1 Q( D9 \ for j = 1: width * a: Q6 J2 F% o9 t' g7 i: z
, Y6 B% ~: M4 i7 ~- |
Ib(i,j) = c(I(i,j)+1); & l4 K& B* b6 k* [5 b& ], ?7 X
8 E: s5 N& F g- q9 N" z. p, Z
end
1 |; N' j4 o% o9 f: ]) P
. J r6 Z0 }% ]3 F8 r3 M" Jend
x1 H! o3 g5 G4 M* U
$ G7 U) B$ G* Ndis(:,:,3)=Ib; + L* B% p% l* z4 j5 n ~
4 D( N& h8 |( ~, @2 v5 S
%subplot(122)
. z4 c2 Z/ C3 F; m
( l, j: z3 s3 t7 [" r; t0 {%imshow(Ib)%显示均衡化后的图像 % X7 ]) |# X) K) Z
+ S0 ^- T1 K1 D" m
subplot(122);
3 {. o! t+ y6 R% K. {5 ~! q( J7 P7 D' d6 h/ ^
imshow(dis),title('处理之后的图像')%显示均衡化后的图像
/ t' u: p2 x5 K" P6 m- V
Z2 [% P5 P: W1 L3 l D! F; e2 D! f0 e% O
1 d! J, t6 L& Y& w |
|