|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理
7 F. k0 G {* N5 e8 E' f4 N; f) K4 p, t% Q, d
MATLAB仿真程序:, l% ~% z+ b( R% X8 ~, Y% r
/ q" ~! f2 x0 ]; m$ I& ?%{
" j9 P" H( u8 d- E! K0 v8 ]0 v6 k9 F# {6 a
基于直方图均衡化的水下图像增强(MATLAB仿真)
( l; L" Y' y) f0 U% ~4 W2 F5 w" Q1 @: @+ ^, @9 I1 h' _; l& p+ I
对RGB三个通道分别进行均衡化处理,得到增强之后的图像 o8 t4 q+ z0 X$ q5 B! T7 X
2 L1 u! e, Z7 U- L' Z& s 实际测试,效果明显,下面/ q) B6 M. x% U0 L' m. l
" d% d' M& P6 C; N6 S
时间:2014年9月11日23:59:014 l/ V6 g, X* \' \5 T/ s
' F- f i# Y: w, C 整理:天空之恋. T" }5 e( p" V! X4 R1 S
' q7 n' w+ s7 z: `* y9 z( O 地点:桂电
: @2 Q, X/ y1 X8 Z: [! H0 O" }4 r7 r8 M, }7 K @
%}6 x; s/ q2 Y ]' T
$ L+ P+ k, b6 r# ^4 \& ^. gclear;2 W% d" W" S" c/ R
0 m( w8 D: d9 {( [+ J) s9 o( r
t = imread('wa5.png'); . N q6 I* t9 r2 K$ g
& s5 a6 _3 N' ?% `& q! G: WI=t(:,:,1);
. F; L/ |6 I3 E* _
' E. D8 _; p8 ]: U8 k[height,width] = size(I); 5 W8 H2 M! |0 B9 k: _. X
4 c# h8 g1 c+ u9 L! Z Z6 w
subplot(121);
/ I/ ?" r3 H) p6 \; J+ b2 U/ l2 k/ K4 g: o- H% C
imshow(t),title('原始图像')%显示原始图像
; B9 `& b: x( C1 y7 [, W+ A3 |
%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
, O5 A7 j. c! F+ N$ Z+ b
; f5 t& N% G' z) F%进行像素灰度统计; 5 F. s9 } m/ P
& u4 C0 h$ w8 R, b9 P4 @s = zeros(1,256);%统计各灰度数目,共256个灰度级
# X3 ?. L1 J$ u( K
4 j/ _7 U7 J3 i8 ]' g+ c6 z" [: }%绘制直方图
$ K5 \4 M' f) e' A6 {" a- ^
0 {& d# P7 I$ e' T- y8 e, p Kgp=zeros(1,256);3 e4 p& t3 S: T" n) h9 `
/ _, K( T, {2 T$ yfor k=0:255
6 H7 \$ T! Z! E# D) l6 R- W2 Y9 R d; N) k( g) V% Z1 r5 C' @
gp(k+1)=length(find(I==k))/(height*width);3 w# L$ j% q9 ]/ G* s) O5 z
]8 u# a3 W5 }2 D
end! v, F$ o1 U3 M& X
7 g* V8 W# \3 a+ X# Sfor i = 1:height ( o9 Y& q: R+ ^3 u/ Q5 \
* Z% Z, G$ }& Y4 W/ h# h3 v- j7 u
for j = 1: width
/ b* s6 F4 s- a8 [9 p$ n' l# E, }' v* q" p1 ]# o( d' t3 R& X
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
9 C9 h& j' f3 s. \8 E% e- a. d0 D7 `" N9 V: Q
end
2 G/ q1 ^" T( y/ {2 M0 B/ V9 z7 j1 z/ ]; K! z9 P
end
; u; }; J6 C% ?/ E6 H s2 _- _0 |& n6 Y
%计算灰度分布密度
5 [2 R; S. E0 u5 h0 g$ F J, p) L8 m F+ p
p = zeros(1,256); 4 r( G c$ c/ a, k9 }
. Y6 M' H. J3 E- z5 b5 b5 wfor i = 1:256
( u! [( {/ l: D
: Z) D& A9 O4 d7 i% U& E p(i) = s(i) / (height * width * 1.0); ) n. y+ \, z/ B
, g s* [, s# U! T. h( W/ ^* Z3 v, h7 b! y
end 4 d& n& E& I! I+ `& l( a! F: T" Z
7 c/ l: H) O; l+ y%计算累计直方图分布
" b7 d7 P! C) ^2 O' q4 [* ^& r1 q8 o* h5 ? ]2 |
c = zeros(1,256);
/ D0 L, |6 p$ A" x5 U- i
! `! t! ]$ }% B2 c% o5 |5 ~. Hc(1) = p(1);
0 c- o: h+ R! t) l0 P- o) I& V0 d0 j! T6 r. @( @7 m
for i = 2:256 ) i6 `% |% h2 _: q; Z/ r
3 w" \& K1 `, J; }
c(i) = c(i - 1) + p(i);
# }% X7 C3 K3 Z/ e% E( O+ P( F' m
end
5 Z5 {( v/ z4 J1 H( H/ @
. @% I' T- B5 y+ W( \# B' o M$ ?%累计分布取整,将其数值归一化为1~256
! d R. |+ B/ T' N
2 ?4 F' k# S0 q# Bc = uint8(255 .* c + 0.5);
* B* A H7 K+ p! E& X: x3 F" A& a" ~; z" d
%对图像进行均衡化9 b$ h0 K7 C( d$ ?1 b: {/ S
4 Y# w' h% w+ U' bfor i = 1:height 3 D( E! v) d2 l
; R3 C* r! z! Y" a/ H- x
for j = 1: width 5 I {; V. L' u- i
/ H2 K. O7 d+ z4 ?! G/ M3 s9 |
Ir(i,j) = c(I(i,j)+1); $ r: e4 D5 Q% L$ k! h0 a
/ b0 F ^! ]2 V) F2 L, Y
end
4 D v6 n* M! }4 }! e/ C1 v% K' B) S0 n1 T* c, T
end
+ t; K# ^( r& I& Q" P% f3 {6 Y% e9 }& p
dis(:,:,1)=Ir;) D) L x. r' K1 V; Y$ |
; c, w# R9 i) T2 y%subplot(122) & G3 g) x: V* P3 z
+ y1 @/ C0 ^: Q0 U( s5 s
%imshow(Ir)%显示均衡化后的图像
& y$ J# ^6 G# m5 r) j, v- `! T
+ v/ `0 ?3 h* B%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用+ Y/ u+ w: k1 i1 f8 v( E
$ N/ T& ~+ @. N# ~8 z4 q: PI=t(:,:,2);
. C+ t' t( l A G0 E* R& J$ J% \
0 j" ?, m, ~& [- ?[height,width] = size(I); \ }% K: P& K
3 k' J8 Q9 x) v2 C! }, R' x
+ G7 t: I0 c) A! ?
2 X- T* Z. R- m+ j& S%下面使用直方图均衡化进行处理* H! T6 N0 e/ L4 u8 l% g; N0 h/ _ Y
# {* m; w" R3 E* F! p%进行像素灰度统计;
; G, a! }* d; h- I- t6 J$ |; r, V3 A* S3 x9 Y% [' Q
s = zeros(1,256);%统计各灰度数目,共256个灰度级
0 E% s( B1 T, v: M% H% K4 B% [7 r1 J! M3 o
%绘制直方图
, T; ~: m3 W# y: l2 q+ ]* M4 H b4 m) V+ l. M7 l
gp=zeros(1,256);
6 D& v( R6 ]. r/ d8 o
+ `# v/ O! I! }+ Xfor k=0:255
2 W* P! _0 _! d0 L" x b
: A9 a+ G w7 p; V2 J% ^ gp(k+1)=length(find(I==k))/(height*width);
& X; c* ]7 p; l; [0 i
' S( l' s8 F, `end1 I, [4 w& T ]1 d# \9 y
' C" [ G1 z( v! n% f2 o) pfor i = 1:height
- L' f b' ~, w! h. r) j" c. J |0 y: z# ]
for j = 1: width + R& I3 n+ H) d; m3 `4 \
& X- K; Q, P$ J/ D8 E M; S s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
0 }+ R; D0 d/ T
* ]2 u f$ K% w5 T+ ~# }2 o end
) \% ~8 r+ I, g, G, m* i( G2 o7 }9 N0 v/ X
end
! g. g8 i* U! o* V& G- Y
# J1 n6 e. f2 S, w; Z8 Z/ i%计算灰度分布密度
j3 s# ^8 K0 V `2 Z2 n
, A3 Z8 a0 d3 ?; h) Q) F( u2 I+ vp = zeros(1,256); / H; R ]; N) k A% m3 \
- F" E, j0 d# B# B1 ^$ ^
for i = 1:256
; k \. P5 k7 g5 j4 M g# I6 a3 t7 B0 q2 B3 r$ w) d
p(i) = s(i) / (height * width * 1.0); , E- W/ ~+ l6 V: o4 d+ A; Z
8 h6 @5 G% o8 Q K
end : L* s" r( ?2 a" j' }
`, {$ I! b$ l& I. Y%计算累计直方图分布
0 }$ _# ^: U0 G9 l0 Y, m% b! z& K) F* {& P8 \+ W
c = zeros(1,256); - X. s8 A7 X9 F% h" [
0 j# k3 V$ W# V) Q" l
c(1) = p(1); m ] e* F7 k9 U8 Q
" f9 |! c2 g! `5 y4 t! ?for i = 2:256 3 \- x" o, y Y- \* S2 l
; r9 r% L. l& r0 a& p
c(i) = c(i - 1) + p(i);
4 U+ S a2 T& S; d0 A! m2 z- M8 i( d% r) ]7 c: I& M8 b
end
9 B7 [$ n3 @& p F0 O P2 i. m, _# r, [' Z0 l
%累计分布取整,将其数值归一化为1~256 0 r3 @' ~2 z* O0 w }1 P8 c2 m# j
) D2 @0 ?. G* O
c = uint8(255 .* c + 0.5); 3 C( g0 I8 K! D Z! Y" g3 L9 d
" s% g9 k8 `' p8 X! D. P% m
%对图像进行均衡化9 s7 |- `- H; N+ z! [
4 d- L) G9 X Z. s; ?* g
for i = 1:height & U, ~# w( R# Q& J: ~
[) x% B" g5 |/ T% e: `/ m2 }, k2 ]& I for j = 1: width
5 G3 ~ H- V3 z. e& e/ c
% n% Z; [ b' r5 h8 _ Ig(i,j) = c(I(i,j)+1); 0 w+ Z+ u1 Z* v6 z2 Z
- X* t x+ ~3 D9 Q! D
end " k/ C( U: Z! x; U& n
( t l5 E- m0 Zend # Q; @, L( D3 X$ L' y4 s
, [3 I3 y9 X5 u%subplot(122)
* s+ K3 P g2 c, ^3 `, T- c
1 `( c8 d* _: ]( r" s1 s3 w8 z%imshow(Ig)%显示均衡化后的图像2 Z9 r h* W5 I8 b
- ]! O0 f6 T0 B+ f1 v- ?3 O
dis(:,:,2)=Ig;
9 ]# }9 `. y' z; Z! h
. Z5 F* _* s3 G, V8 F4 G$ z) ]9 ~) ^+ z5 b- o4 S
2 ?/ Z+ o x; y' N% I
%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
8 ^, s6 V- X) ] h$ p& T8 t" A6 ]5 t# Q; M% a
I=t(:,:,3);
6 g: {. f) Y u- o h# Z8 [
5 d' h5 g N. v+ _[height,width] = size(I); : ~8 O# t( o% T/ z7 S, T
, x6 X' P+ D# n3 g/ u% r
4 p7 D4 t( Z) `: W# Y6 a0 ~$ q- t. S1 [% ]) P- P
%下面使用直方图均衡化进行处理
% ]- \1 _ [% [% Q3 k) Y8 \; R$ R- l8 J8 u8 }
%进行像素灰度统计; / [: x7 T2 g3 R3 b
% b% ?9 a9 K; D" v/ B
s = zeros(1,256);%统计各灰度数目,共256个灰度级 $ n/ @0 w0 A8 |: d; p& X: w4 g
" E5 M- n. Q. X8 I! X0 H. G5 S0 V
%绘制直方图3 a, Q) i* b9 q8 a% u8 Q# d
. Z" s3 X' V$ C! [ g* D; Sgp=zeros(1,256);
6 M" Q2 k0 e _6 x/ l* |+ p. O2 P! d0 _. [$ s- D/ v" A( i+ e
for k=0:255) Q, P. b- w2 p* a3 f# x3 ~
, x& a2 }1 m" P/ S' N
gp(k+1)=length(find(I==k))/(height*width);* ~5 e: B+ C6 A+ q! Q; Q- B
: U# K% \0 H" t7 X U! U8 G* t
end. a- K k# o K
* R$ x" Q s9 W" m( n9 c' s1 Dfor i = 1:height
9 G2 {# X: u+ G" T( {8 N( R0 x1 o
, }- }1 z( Q) p4 `. W for j = 1: width , g1 Q0 C! C/ [4 z1 Q3 D% F' C
6 [. B8 B9 ?0 ]: a% D r3 x
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 & s! L; ]5 s$ u5 Q, o
) u7 P$ P' J1 R: v) ^
end
5 E" O' @# C1 o; X
3 N6 v- @: C# Jend
: e3 i; D9 Z+ l) p4 |/ U/ l& W
%计算灰度分布密度 8 Q, w9 O2 a) y7 ^; G+ x& O2 p% P
$ q$ m) [# T4 p9 |9 v% D) N6 ?; V
p = zeros(1,256);
9 f# g9 w6 ?+ ~* t% P
& {' L" I6 c! Y' _7 G- Rfor i = 1:256
. F# U: \6 C+ T9 P0 I9 J# s+ Y' s6 G* {+ K; a5 H0 F
p(i) = s(i) / (height * width * 1.0);
# r, R6 p% A0 \: |1 X# Z: T: l
% U+ C' E! P0 w4 [' _end 6 w6 z2 G- n" _9 M
9 j" t- g" u! w+ `- n
%计算累计直方图分布
2 o9 U/ v9 F m' S
. f( D8 X3 b% Rc = zeros(1,256); 7 j/ J3 ~, b5 a, n
L: A7 v# }/ y1 m; c# s
c(1) = p(1);
2 d( V3 x7 k# ]- l( v# b, o: B
: c' x& A3 X& Q8 bfor i = 2:256
+ l) z# ~% T" @$ H4 O
" ], h3 ?4 E2 r c(i) = c(i - 1) + p(i); 5 [) n9 g; h0 ^0 R9 s) S
! N0 ^+ n( Y+ k) N: J$ P
end
/ F/ [6 V% T1 A3 x! A4 Q- ~# G& D: E) A* t, W& ~% [
%累计分布取整,将其数值归一化为1~256
; e2 J) m b* }$ d9 f6 r7 J* m2 P+ @/ y( k
c = uint8(255 .* c + 0.5);
* u8 b" v5 \3 i% K/ a3 U. ?
- u! p( }9 c' @+ G- w. N0 G7 E%对图像进行均衡化
$ r* v M; J' {, t8 B+ L( m* r; H' V
for i = 1:height
5 k; C5 _9 R: }4 y% l. L( c
]+ [, V$ A5 z4 b, [ for j = 1: width " f; a. D& b4 p; T3 L) G9 g
0 O% _' Z0 t1 E" e
Ib(i,j) = c(I(i,j)+1); 8 r5 E/ y) x* K6 ^
+ z* L9 P3 M' R3 d. U, T$ Y
end
+ W) S1 Q2 L) x- _, v( B$ D) B9 ~
; @/ b4 M0 Z4 O L, {end
: H# o( U- C' f: O1 a$ n* t6 _5 H9 Z/ B6 }
dis(:,:,3)=Ib;
" U1 }1 A2 Y6 B- h8 F) P0 s( P- N$ T P6 c( K' U' c$ `
%subplot(122) - e; M2 j+ i9 {
5 I1 M7 \* ~6 `: ^' L& G- Z%imshow(Ib)%显示均衡化后的图像 & ~% L1 z6 H9 A$ J2 R5 ^
, y9 q* V/ C( l3 Ksubplot(122);. Y+ }$ Z m. H: R4 G
; n5 I9 G6 R, m* \# G6 ~" B3 iimshow(dis),title('处理之后的图像')%显示均衡化后的图像
4 o2 \: w) G# B3 q
: U4 _3 }: l9 `9 T% D
D# N# g' z: O a" ^9 o, e- p, }
9 S" i$ V6 t* E# r |
|