|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理
0 {: D4 V$ B% [- I/ l
$ U0 h* w5 F% ? K! yMATLAB仿真程序:
9 P' {' E* x' I y' Z( ^* Q2 O) ]2 k+ R0 m
%{2 v/ _1 R5 K4 o' l3 d, ^, K' K
6 K: K' a0 x3 `1 C# k2 H 基于直方图均衡化的水下图像增强(MATLAB仿真)& s7 I7 N% ?; L4 H2 U/ M. q- R& \
$ _" v: [/ b) W: w# J
对RGB三个通道分别进行均衡化处理,得到增强之后的图像: l. h' }! Q. o( @" E0 e& O$ c- ?
" @" E9 R3 H8 E4 V/ D7 U# ~% e6 U; _$ M
实际测试,效果明显,下面# @1 D/ c2 }/ F9 z
r7 `( h" {$ y
时间:2014年9月11日23:59:01$ D9 k t: W X
: ^; z/ A1 W. I/ B6 z 整理:天空之恋
( f$ c3 N/ T- {- E2 e
0 }# ?) d0 P* D$ B4 {1 v 地点:桂电4 D- j, P8 ]* ^& F8 E# O
3 v* K, l' X/ j%}
- l2 Q; d5 H2 O% |8 ?
- b9 B; c7 y E2 R- L+ u4 w; Iclear;
+ s" H( j6 w8 f% M! W5 |( Z( E. f& X, V% t
t = imread('wa5.png'); 0 F6 O" O3 {7 c: T3 V) t
6 o; {5 F. }0 t4 _+ b. z
I=t(:,:,1);
9 `' O9 ?4 i: V7 d
7 p7 U8 G) R- a1 [[height,width] = size(I);
' N- u3 v, b/ B3 y3 ]& N" K( U4 S
( W0 L2 d' `. X2 v6 g/ {3 |! b9 F/ }subplot(121);% ] a# Q7 j: I" L
/ A/ C9 D0 n. S% c' X9 Q. M6 Vimshow(t),title('原始图像')%显示原始图像
: V. F4 O5 R+ ]* m8 y; p
* [4 D; X) E B# i" q- r% v%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
' ^2 l1 }/ {$ Z. h! x* w/ ~3 I# ]0 N% F" E Y8 f( ^+ B2 k
%进行像素灰度统计; 5 ` T( C0 S( C$ m, ~1 r# r
) B3 S9 V; ?; {; y3 Es = zeros(1,256);%统计各灰度数目,共256个灰度级
0 g1 N/ |2 j+ m) t9 i# r- C$ u4 n6 K3 o7 X$ n
%绘制直方图
2 t9 c( X% {0 L1 r; ]( b0 c% e9 z* r+ y3 b7 P% b
gp=zeros(1,256);5 K, O e3 S1 G' r; r5 d; x. c8 o
. x0 M n. `0 d$ L1 E1 m% _
for k=0:2558 ^4 u' D6 |4 v' n- U3 T
5 d X$ Q. R4 }: Z gp(k+1)=length(find(I==k))/(height*width);
1 x% S$ G4 p! R: b; \! L+ s* E" ~1 |( J }4 {& E- U2 K
end
/ M5 Y7 S5 N, y, v1 q% \& Y) r! F6 X: o) Q7 `4 j
for i = 1:height
* ?2 @$ C6 [- V& l6 o
9 b9 x4 B$ o' L8 A3 s1 H- G for j = 1: width : }- g8 j- i! w/ C
; a* O" y) j) w" g8 z
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 , E6 B9 ]! x6 m5 k1 b' j# S
5 |% }- c7 z! o, J" a2 U end
9 J) ^5 f* [' V0 _+ g! q( O
+ R I& Q/ r0 ?% E# Bend
W8 q5 W( t' ~3 m! z, s% @& F/ l: }5 }5 s# u
%计算灰度分布密度 1 l" _/ X# W# l
0 v3 j$ w j* v# g$ Q( ]p = zeros(1,256); : o. V) M6 S9 L
/ G: |* X1 U! P
for i = 1:256 " j' K6 n, F$ |' w# B
' S, u/ S. E9 N- z p(i) = s(i) / (height * width * 1.0); 0 O: ^1 F" K7 N4 l+ K1 a+ U
7 n( a# u0 K2 ~# kend
$ t' i+ R6 ]# f5 H$ c1 n
+ y4 S. T, ]+ T3 V1 g# c%计算累计直方图分布
: Y6 Y6 r% f# J9 r% b% h
A7 _0 X2 t9 ]% e s8 g0 \9 |c = zeros(1,256); + p! T: P5 x+ q
# f1 S3 s5 W/ h& ?6 W$ C) f5 a0 g2 Tc(1) = p(1);0 ^9 W) Z6 B# ?5 @# C, V5 I: v
6 J* z/ B& P1 l% o- t2 {% X0 K
for i = 2:256 ! o# T1 @ J4 m* }8 w
6 P; u+ S3 \8 p* i2 K1 U6 N/ J8 [
c(i) = c(i - 1) + p(i);
3 I. M/ ?0 m4 ?4 z0 P7 Q( Y
# v! Q% Y9 ^. | vend 5 I7 _0 I! Q; ^% V% Q, d
& c; ?) A5 Z) a( E# g%累计分布取整,将其数值归一化为1~256 ' ?6 h; g2 M. E0 a' G( A
0 s+ K5 M5 l* y' L! L8 w
c = uint8(255 .* c + 0.5); 0 v5 ^4 O5 h( p
2 k8 w6 L1 u+ S4 s ]$ o
%对图像进行均衡化
: X- |2 H( q. q3 J6 _
( D& P5 n4 r7 q' x8 lfor i = 1:height + N7 h9 w9 t, M" a! |$ h G
7 K# r; W% d& g- j7 M
for j = 1: width 9 n( \5 N; y$ J6 T) b+ ?1 X+ u
, W! X4 I/ n/ U( {1 Q Ir(i,j) = c(I(i,j)+1);
5 t* x0 c& U* }* X9 r
6 a5 D4 f# f0 f" X G7 V1 W0 U end * o& b* t1 `0 n$ G: K, U: e* a
4 W4 k8 O; z+ L5 a& |end " Z5 ^+ X8 A9 o& \5 l
. e- S3 W; E: _+ W0 ]
dis(:,:,1)=Ir;
& Z. t7 f4 v8 H N1 T8 P
- b1 l" Z$ R, U7 k+ \$ b: I% b%subplot(122) . a/ W! R2 f5 Q3 w$ b
7 F9 ?; {" Z* ~9 A0 g%imshow(Ir)%显示均衡化后的图像
$ n3 e; l! B# j8 e$ z
+ I4 o, M! c/ v* n. M%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用0 s6 R' u1 c% }# e0 ~
0 T" ]/ h$ Y) M: W7 f2 GI=t(:,:,2);3 l5 \/ s) S i9 [
9 r, W5 Y9 P1 q) p d/ B[height,width] = size(I); 6 l, U, B N* V8 j. F* S3 A9 B
& a1 j/ l2 \; z. ]
) j; f2 {$ j3 ~1 ~, L$ j% z) m: L1 ~8 ~, o' ~! b
%下面使用直方图均衡化进行处理
! M) T2 B+ k& ~. j4 l* g8 \2 J8 S$ s- ~& F: L0 x
%进行像素灰度统计; * |: V# X; y+ R5 B, l/ B7 q
; T: f( I: k/ W* B) Zs = zeros(1,256);%统计各灰度数目,共256个灰度级
5 q% p$ n/ l! H% Q! ]! c: R, a8 v+ F- x" M
%绘制直方图6 H# p E2 e- E$ E
9 h; G! w7 j4 N, `6 dgp=zeros(1,256);3 E8 U- g3 O- y
8 U- ^# `$ U* y/ J* K
for k=0:2555 |7 [8 B# l( {& [- C
/ H4 j2 q% n( x1 R+ f; N+ v" ?5 a gp(k+1)=length(find(I==k))/(height*width);
& ^' l9 _$ k! O( R' G% F* I
- B1 a- v* c8 I$ ~* x! o) kend
6 E2 p7 b4 k1 i! |3 Q3 _) I" x) Y6 b2 P, L3 s* t9 O. m! m
for i = 1:height
' [+ S8 P' S ^3 a b* O' K% r0 d7 ^3 u( f& ^& N+ f! `' D
for j = 1: width $ ?7 H' f1 H" w) K2 t
Y0 X6 m8 @1 ]: U3 G9 j. F s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
4 x5 m( [& [3 `# ?. n, W; a; q( O- d5 z5 ^, ?0 z
end
8 r# v* o9 z; p- p7 k+ t1 ?) `1 p: `/ O5 G; R I+ Y: K
end % V& b! G# g4 g) B l* t
' ]4 j$ ~+ H$ A0 r2 V0 L' r
%计算灰度分布密度 , w- `8 X- K; O' i' J) |
9 p) l# q+ a: R0 ~" f* B' ?& A' C6 _p = zeros(1,256); " S4 p4 c+ L. I* {$ p: I
1 d ?$ D. h- W" S0 n) l* d
for i = 1:256
) Q! G' o+ ~8 h* S- f5 N+ D
6 I& x5 v% {0 B" W; y) L7 {: V p(i) = s(i) / (height * width * 1.0);
8 |# o/ I! J! w! h9 O( q: Q0 H
' M2 R( o, p7 m5 Q9 m6 bend
6 u* Q" c! k6 J8 s* p5 b. W1 i- Z# {$ P ]" ~
%计算累计直方图分布 ) J4 Z1 t" D0 H- {
0 s0 \6 Z- @" T8 G% |( Uc = zeros(1,256); * y7 M5 _/ v5 E3 i
4 A. c+ m! q0 ~: pc(1) = p(1);
8 M9 U7 O4 Q; n9 I( G0 U0 L
0 k2 V5 X! v2 l1 Jfor i = 2:256
5 t5 u% H2 J. `' V$ M& Y
( b, {' H% G) @ c(i) = c(i - 1) + p(i); / Z$ j0 N @+ ]3 K
1 L. `: l( I. a, f, T
end
4 C" m# q; j) W" c* P) T' Y4 Q
9 k* b7 |9 n. G9 S8 X/ ~ i* S%累计分布取整,将其数值归一化为1~256 ' @! w- y) g4 C* z- V
3 ~( o4 b) Z% {
c = uint8(255 .* c + 0.5); ' `# H! e: J5 F& J# U
* s" D5 L- g w. d5 l C%对图像进行均衡化. J; m/ P( \- e: Y% I' w% f
9 N6 K4 i: z8 d; ]7 @+ B
for i = 1:height
# k( J6 ]4 X* f2 M k" |; }+ d3 T8 r# D! @. N8 l* e
for j = 1: width % ?# n$ I+ |. c9 x+ `
" F' f# t$ R# h) b- P3 ?& x4 f
Ig(i,j) = c(I(i,j)+1); 0 R* x% L0 t/ s
/ A3 W1 {' k$ |# q
end ! W1 a! ~, |1 E) O0 X- @6 L3 q1 a
, ]& l' n6 \1 @% n4 _ x+ R
end 8 } d3 D4 ]1 T
6 Y8 G4 T; J5 R6 I
%subplot(122) / y! E7 h- z. c, ^- |7 t" f% ]
5 L# e3 r# u1 v! [( n9 S( Y%imshow(Ig)%显示均衡化后的图像7 f& R- T% n7 j" n7 W5 R' a: H
% x5 G6 a$ }) P, \dis(:,:,2)=Ig;2 W% @2 i; Q4 I# U C
& v% U9 U$ Z# N9 Z G s# S/ x/ X- J$ m* ~6 Z% U" }
1 n! Z- K8 W7 v3 i$ V7 M% T%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用" G) G& n. q6 _. j. `# ?0 R5 g
; P9 C. G: |( \& J) \& K! P' X
I=t(:,:,3);
X ~& M$ m# c% ^0 N
4 s+ j v# F" b' v* X. z4 }6 J, N[height,width] = size(I);
1 O+ {# m1 |/ Y* _" J% M6 K2 W5 f8 c% Q2 Y* l0 I, w2 }
; ?' g/ L$ ^; p
3 W, W% P* }% ?+ h5 B. t/ |%下面使用直方图均衡化进行处理
& c0 N" }- x4 {9 I" ]& z; v B7 B e0 c
%进行像素灰度统计;
0 \5 i3 P3 O. f! X' P. V. e8 i; w
s = zeros(1,256);%统计各灰度数目,共256个灰度级
5 a7 L5 F# a( K/ l2 j" T
- O' @3 J O7 Y# ~8 Q: H/ O) H" O%绘制直方图
8 ^3 D1 o& R6 Z% o# {9 y5 B. j: D: B+ e% ]- i) ?% R
gp=zeros(1,256);
* r3 N' `# A2 B% X9 m1 d# b7 @
" y6 x6 L9 X: O/ N/ T9 Y1 R' Zfor k=0:255# Y6 R7 N$ o- q+ V0 K; ?2 s
8 l& n: h V% } gp(k+1)=length(find(I==k))/(height*width);
# ~1 J* W/ V, s5 E9 {
% v$ e5 ^4 L# |/ N k2 i& }end! h, k7 S: V6 x/ E
7 f& w. J* x2 q% b: N7 B& _- F
for i = 1:height
' {0 f* v5 l& E3 ?& d8 M
% j7 T l1 j# d4 o3 D4 r for j = 1: width
a# O; l( W1 V* Z% F. V5 l, T- Y
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 # t% f. s$ g B3 h7 g
a, Q- R2 Y3 P+ ^0 U
end & \' h4 F4 Q( H
! ?- X- g! a) H' uend 7 m; x% }- H5 @! R6 `* ~4 @6 T, G
& D. M- `+ v6 | w
%计算灰度分布密度 ( M3 _6 E8 H3 t5 \" G) j) u# t
/ C8 a2 G2 N* ?, xp = zeros(1,256);
8 N$ F4 ?6 e: [% h3 S# ?9 u8 y. R. k/ Y2 c! k; M
for i = 1:256
, {/ L, C% t* ^2 M5 ^) ?6 P, \5 [6 B. A( m6 k- w6 u1 T
p(i) = s(i) / (height * width * 1.0); ) S' S) o: u& }$ o
8 W$ v& E8 c$ Q7 G" _! {) a uend
( Z- T6 T7 N+ Q* G3 c; M6 D5 i$ i
9 Q) }9 b' i+ e%计算累计直方图分布 7 Q2 g; ~9 u& Z, c; x
$ y, R: G: c+ G8 b
c = zeros(1,256); - g6 Q; {- ]; ]+ [
; l& f1 M) A$ j/ Jc(1) = p(1);
6 z2 {: r0 \: p- h5 l' p0 G# C4 h" Z/ U" R4 v. t, d) e& F5 o
for i = 2:256
4 n% x9 Q$ T/ W @% Q$ U
+ }) C" H s7 `6 o9 o8 u3 k x, O8 I c(i) = c(i - 1) + p(i);
, r9 F1 r- h9 t# i" K8 s$ d/ M% s5 |4 y0 T Y0 ?" r
end
# ^* i8 \! L( s2 u" P3 G
% `- @; t/ I y2 z: }%累计分布取整,将其数值归一化为1~256 3 C# o0 N# D7 a, o' z7 W: K4 ^7 V
$ g9 }4 S% m9 Q6 K3 oc = uint8(255 .* c + 0.5); 9 f3 n9 [7 x/ G. r# n+ s0 }
7 |! D7 a# |. _. `%对图像进行均衡化
) g( f9 `+ t) y. \) p
, {; f/ k i; hfor i = 1:height
2 u6 u+ S7 ?4 B8 l5 Y0 ~+ V$ \
! ^' M) Q6 d+ D for j = 1: width 7 ^- K. }4 o2 b# m
7 @9 G/ s: f! \* f A Ib(i,j) = c(I(i,j)+1);
& p! x/ e E7 n7 C
0 m4 V1 e5 o/ u. h* f" g5 K( Z end
: n2 h- L! F/ h, z8 \' K. p8 w% J4 l0 [- r+ D$ l
end 7 z" W( k4 a4 j# ^. G$ a; d
- q- v. p0 N) l: l! b3 _8 m
dis(:,:,3)=Ib; * |& [! n: m8 y4 ~0 B% q
1 V8 Z; `7 I8 c" m1 k# ~! D9 r% O%subplot(122) $ J. R, |- r: E- h
- m x) K) p. h- |- J
%imshow(Ib)%显示均衡化后的图像 $ j$ W4 E% [' p: I0 Y% E, r. C
/ s# C% ^: w7 W) Xsubplot(122);
5 Z$ \3 U( \' q; y8 ]$ [
/ }6 B" x" e0 K8 t8 Eimshow(dis),title('处理之后的图像')%显示均衡化后的图像; i/ z/ t# ~- x9 k; M) j
1 G* z3 ?4 ~8 H# A3 ^
; G6 A( ?. G5 `! Q$ w1 ^, J t+ `% Q9 L6 F6 K3 o
|
|