|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理! A3 V9 Q8 P& |5 g8 {- L
( R; B0 W, w( Y$ T* D9 ?& |- \MATLAB仿真程序:
( O! C- ~, h0 |, g2 P; j+ Z5 R/ p! M4 T" S6 ~ ^4 d
%{+ a7 l/ \$ A. u8 I5 H$ d
1 Y8 S$ S2 @' d% X
基于直方图均衡化的水下图像增强(MATLAB仿真)# L" q9 g7 H- r
' T4 ]) _# N- k$ E: K% J" w 对RGB三个通道分别进行均衡化处理,得到增强之后的图像- q3 S7 {2 Z6 S, b! Z) n8 \) s, R
; D$ ?- |# A# w0 O" L: F 实际测试,效果明显,下面) m" a6 N) j6 q }) F5 |/ m: }* O$ `5 ~
0 m! j, U: z. T+ s$ @ 时间:2014年9月11日23:59:019 o! M+ E/ w1 b8 w& O
2 J7 L1 D* h& g: o7 x
整理:天空之恋
) w9 x0 o" E P2 p( @! R1 M% \* K& c ~. x m3 p
地点:桂电) [; m3 v2 J6 G- ]* C/ y( A
# J+ r/ u. I0 N% u$ I. X3 }/ r
%}
; ~. i) Y# m4 M9 g% e2 y2 ?. H8 y4 M- u* u/ u; O/ C) W
clear;. ]" R5 @7 c* U. U! C- z
A- \+ {; f5 c! d; }6 ut = imread('wa5.png');
, o* R- I& k- C" @: J+ C r: u5 ?1 H, E
I=t(:,:,1);
9 j* p: d& A9 M' u3 K8 S! D( @8 J2 k
[height,width] = size(I);
2 M; N; ^* K2 y3 P+ K
M; l% g, g5 k% N1 ~2 v: k/ E5 Gsubplot(121);* J3 [$ ]; K/ p) y
6 y) G0 p' a) r: P: D# C5 ~8 k# n' timshow(t),title('原始图像')%显示原始图像
: r3 e3 c0 ^9 e- k7 y
9 O1 T8 |7 q8 D7 y q# t# v/ }%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
* b% X' U# N1 X; g( m
9 b; g$ u' ]& f# D. p* v* G) y%进行像素灰度统计; , @1 W1 {/ q: Q* p
$ s( N& k( `1 I, vs = zeros(1,256);%统计各灰度数目,共256个灰度级 % U1 w" A8 g& h; H4 L
' L! a* J! `* O$ m. ^4 Y V8 ~
%绘制直方图/ h, u. P8 y. L
+ J3 U6 O- x3 N: Z
gp=zeros(1,256);
3 q. \7 X( @% p3 g1 c* r$ b# |
+ V9 t. Y( g2 B$ x2 g/ sfor k=0:255
N+ e5 r E/ [3 Y, d( P2 Y
6 j- ~) `9 O" {# A: p8 r' P gp(k+1)=length(find(I==k))/(height*width);9 f: I9 h5 |4 X/ ]. b1 `, k0 e
- t& ^ z/ {; Fend
7 F+ L2 K( k1 @" l9 a4 O5 P$ |1 K: L0 [) G; C- ~2 I; t5 d9 K
for i = 1:height
- H& ` v3 F7 X4 Q. _0 g+ L% o* ~8 u1 e* q
for j = 1: width : d/ n# s/ |% M
$ W( l! s2 X5 q4 V5 ~! |4 q7 e
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
' H7 d6 E0 |+ }
3 v. z& U) f: d end
- P# B- o2 t/ K8 e- ^& v+ g$ s
7 X# _7 `$ ]4 z$ s; Y8 ?* q& zend
! l% r4 ?6 ^; d H3 J( J: Z4 E2 \ E0 l
%计算灰度分布密度
" c1 Q4 S5 F4 f) _ e
5 E: b! M4 r; A3 |- w2 p( Vp = zeros(1,256); - j; N, u# O# b" f3 S
( S! j/ P: ^5 P3 n
for i = 1:256
- x- ?0 K6 J* m; Q$ f
% l% Z. c! `; j5 I* @ p(i) = s(i) / (height * width * 1.0);
# A; r8 E* M" `0 k/ _! Q0 C# f' i* }$ O
end ; ]+ }. ]# o. X. |+ ^
. K. D! B J8 n
%计算累计直方图分布 ) f" q4 Q R! {- s$ P! m% S
3 s( C' B! m1 i" N' Rc = zeros(1,256);
. b. j+ y- Q5 A) T$ i3 L* D/ c) U* k ^. a
c(1) = p(1);
0 f6 e, U1 z( n, | ]( B& Q+ a" `' X) X- ]. e! K6 \' Y
for i = 2:256
' a- `8 [/ T2 f9 v2 d# i. z2 b6 O( h( R- }" w) ~3 c
c(i) = c(i - 1) + p(i);
: f- @2 R# l/ r- H+ L" v+ h1 T9 W$ Z, v
end 8 S, y$ X& k* C" Z" Y o5 R/ h% m
$ ?; W3 o3 L4 A8 f, Z
%累计分布取整,将其数值归一化为1~256
1 c8 ^6 @, r% O( f3 G; E
9 B0 _5 a2 [$ x4 J k) cc = uint8(255 .* c + 0.5);
, M9 W( E. m- M8 {" R7 S) Y# ^5 u- P" {$ w, |
%对图像进行均衡化7 P1 S/ n' `8 s. d f; p% v
7 P0 ~, I0 m/ ?: y, w; Kfor i = 1:height 5 g% L+ H8 R B( B
+ D0 N8 o/ W4 Z6 i9 m3 a# C+ f
for j = 1: width
4 P" G4 b9 J& X- f+ {( J4 s2 M9 J) g$ t. o) O
Ir(i,j) = c(I(i,j)+1);
9 n' [9 d# n6 T7 _- P
: r! |( g5 C; a3 d end , X' z$ j) K$ F
& S( n9 M' g! r5 O: r& l. t5 ^; Iend
# k, l+ M) ?8 F
/ s- h. L( d _% a' ?& adis(:,:,1)=Ir;9 [! G/ g. g3 t2 v* u [
5 j1 v! x/ d% o6 y+ o%subplot(122) ; J3 D5 j/ F& J/ y& a9 l5 u1 g
% ~( t* s0 k7 U8 o n$ t0 a" Q%imshow(Ir)%显示均衡化后的图像
' Y0 @. Q" P' v% ~: i, ]8 f; i- M- K& d$ g
%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
) N4 P$ \' f2 ^3 U. x& m% P; n. V. w! x/ A% Y
I=t(:,:,2);
8 P/ k! y+ s( N7 O7 M) b3 v$ Q M+ b! `+ c" S# W6 u0 |
[height,width] = size(I);
" x3 B+ q* {2 S
/ L8 G- J# h" W0 X$ N+ s& K n# z. {6 R
# s. D9 ?( J1 f2 [: J- o4 b% |
%下面使用直方图均衡化进行处理
3 u( c$ p& N: ^& }* g* ^8 k
2 U$ y! w) f+ i! {5 U%进行像素灰度统计;
' l! E5 |% s( t! C
) f) ?" k3 O4 u$ [s = zeros(1,256);%统计各灰度数目,共256个灰度级
" Z: T7 D. ?5 F0 M \: S! d, O" L/ J& U( d, n Q
%绘制直方图7 Y4 N0 i' v' W6 N
, H' k) e; E+ X; }# r6 x' V4 egp=zeros(1,256);6 `+ g9 K9 Z) U4 V
' E' F; O+ [) c! Mfor k=0:255, K f# @' n' x: o
. ^8 X" r2 r- D/ W" X) | gp(k+1)=length(find(I==k))/(height*width);
; M! r0 D" E" p8 q/ L" C
5 U! ~5 g% x3 }9 aend
; _1 R$ N( N f( ?: U3 e; y
. b) F) K( y+ R0 c: }! wfor i = 1:height 0 m1 l l6 C1 V5 Q6 \4 ~
8 P( ^# {3 L$ ^) C
for j = 1: width
; |, x$ x0 i# ^1 ^
# Z3 ~) }* d; f4 {2 X# R/ a8 z: { s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
. c8 z' c, d& X" N3 L
. p% x; }! [$ N end
0 r1 m4 n% K, ^3 {( \6 Y) T
; a/ r, M9 r% ]. Tend I2 c( B& B! g5 S
0 R' G* }% N) l/ w. G- i( u
%计算灰度分布密度 c& o# t- t( G" \
; \0 ^0 J0 D1 V
p = zeros(1,256);
1 G! b3 z4 t3 R+ G+ t' y+ }- o6 Y9 ^3 w4 |0 R
for i = 1:256 # z4 M5 V+ p2 M
0 \& T N1 v; h' Z, D5 s2 B p(i) = s(i) / (height * width * 1.0); ( \) q. L9 f+ |+ d" g
; ~# Y) v" p# B9 Y' ` @2 fend ( o! [; K5 u% X& S
, s! }! O. D" Y, c%计算累计直方图分布
/ N+ Q+ y% y' c7 {8 v. @3 [! M9 k$ C _' U! O/ g
c = zeros(1,256); / W m, m, Q" b3 p
. W8 B6 A- z5 K/ n- {0 E" T" h* ]c(1) = p(1);, s. h1 ]! U0 i- @" l: o
% N/ {) I7 [: j {7 L; g2 d8 Rfor i = 2:256 7 v- F0 q& u( v5 C
# j1 X" X% d6 A8 L1 m6 D2 t
c(i) = c(i - 1) + p(i);
2 U1 Z2 |+ \4 Q( u' T9 F6 y% Q E5 N
5 k3 p" Z; t- w( @$ C" kend
: K9 d& S: l( Y$ J3 o5 X. t0 h. T' i. {3 z/ r3 e
%累计分布取整,将其数值归一化为1~256 5 O" S! @+ f. G. `, X
) i C9 {7 }0 K- _c = uint8(255 .* c + 0.5); ; e7 s* L- a& ]9 v% ~( u" R
. S# Z4 U4 B: x4 m) y' a. @, q%对图像进行均衡化( C O4 j( A0 I5 H
0 b% `# r3 w" Z: B8 s: T1 \" n+ X
for i = 1:height 5 o* T( Z( B( g$ X/ c/ ?% K9 |
4 H( i8 |) ?+ D. ~4 D for j = 1: width ( v; c8 B2 I a, d+ `
Q& U I% @ z1 ]4 E+ |
Ig(i,j) = c(I(i,j)+1); ) O# s( k! m& V) X. R0 C3 \
" V$ V7 k9 L6 ?1 n5 w( \3 ] end
) C$ M6 c: b" z, [9 R
1 m( \6 t8 W2 q1 f" i Hend
/ ]# ^. a# a& |
2 d7 _: o6 a4 D% w5 z6 o# `%subplot(122) . j" o- s; }; m- o
. l, T1 m% d7 M: P
%imshow(Ig)%显示均衡化后的图像4 ?/ v9 |3 A# `% {+ n1 o. A
7 ]: ^/ u2 Y: [( t' x, J
dis(:,:,2)=Ig;9 _7 L0 u4 E, T" @+ v9 F) y+ s
! I+ f* F7 y! e* w. Z" A
) i2 }. h/ }' x1 D
* h& U( {# {" d+ {( o+ D%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用) [( a( v8 _+ c5 y5 v
# p1 h u$ `6 @5 iI=t(:,:,3);
. b5 C/ V: X1 K2 }" Y0 N3 V8 T2 I2 u5 Y8 l
[height,width] = size(I); - I% D+ Y" G2 O6 x( k+ k$ p3 i
7 `. i+ h! o$ B( k# f5 ?2 E Z: b- Z4 F; ?3 H
6 O. g& A) p5 O; S' z% o U5 u( o
%下面使用直方图均衡化进行处理
6 {4 N: r/ T3 b% d' a: o" l- n7 U! ?! Q, |! |1 j
%进行像素灰度统计; ! |" C) R" U' Y' c
: B3 w9 g3 f% U! z. [- {4 X. fs = zeros(1,256);%统计各灰度数目,共256个灰度级 8 m/ ~) F+ W% ~" \* y
1 P V/ H2 R$ f6 o3 _! K" E! `$ u; E, P%绘制直方图
6 \) X1 C) n! C3 Y% r7 W! y) p2 c6 [) B$ U6 @$ s; g, l7 C5 C+ l
gp=zeros(1,256);. I$ z: g- M5 x v% F
; v8 x4 P( ~# G+ x) vfor k=0:255! u. o( u. q4 {
/ J9 Q. }4 f& P* p& O6 X- V9 E
gp(k+1)=length(find(I==k))/(height*width);. O9 V1 ?/ u8 B4 L/ i
8 w9 Z9 l9 v% w8 [4 a, Vend
+ [+ w- v; J1 D% i+ m5 ~. n" V3 t9 d2 _. O9 t
for i = 1:height 0 _3 X) z5 }/ J7 C; f1 n
5 E* T' @$ K2 E; c3 Q, |/ T' B
for j = 1: width
) H5 M, y v( ~( W1 \) v( ~) Q( W, M5 A0 t
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 & @' ? J# c. x7 ?9 ~6 Z0 N* A
; U4 N1 `- s( _ end , i( M- V9 e0 |
( ]6 w% [% h8 Z* l* p! q
end : u0 s7 A& h- z- J. T& C
+ S1 c% _3 {, c- J+ F2 c
%计算灰度分布密度 2 A5 B( U! T: o6 M2 Z( e+ ~% U; h# I
# V' I; C3 k" ~- y6 Lp = zeros(1,256);
0 ~; S* C7 ~/ s* \2 T
- F) u* k2 E! F( Qfor i = 1:256 0 N8 n. V& d4 K' b- q
/ q, E6 ~8 Y) i/ R9 o p(i) = s(i) / (height * width * 1.0);
3 h7 D7 B! X2 `9 U
9 G; G8 u% Z4 A! R* rend / _% d( F4 r8 t8 `5 W- [7 F9 R
7 S# o0 N. O% B8 [/ w) e- i%计算累计直方图分布 ' c4 ^. |( o3 i2 _( P9 v4 i- B# X( G
, z1 l1 L6 L2 n# [8 [c = zeros(1,256);
; m% A8 o- o% d/ s# r- C. j4 K& e4 s& ?- `$ z+ Z9 ?; P/ Z
c(1) = p(1);
8 X2 r- B6 O8 o3 y4 K% k+ I
& f& v/ [' g* q3 z6 Y& b C1 B& Mfor i = 2:256
- I% w& Z/ E6 l5 Z- M4 }) \7 ?8 A6 Y* f7 m/ B+ r9 N
c(i) = c(i - 1) + p(i); , a' V7 [5 b( d2 P" l, N
6 r* n# _' ~+ t1 u- Y: l$ c
end 2 h2 ?/ [' b) V; c3 q7 _& ?
6 P1 ~! y: a3 L' {5 B
%累计分布取整,将其数值归一化为1~256
- ]( w d6 q8 P+ w) ]/ I, T7 D3 `' T+ Z6 N& z- P, N/ |4 J- n; O
c = uint8(255 .* c + 0.5); 7 F/ l- Z9 L1 F5 Z8 g0 s* ?+ n
5 g% d+ f3 E+ x7 @2 x" [
%对图像进行均衡化
q; \& c/ |+ \7 Y3 V" @, x/ N' E% ^! R5 E3 ^
for i = 1:height
0 T6 i5 T+ \1 F. A4 |+ I% y
& L7 ~# \' Y3 X% M/ L. Q for j = 1: width
, E: E, G( y3 C! d! a# {" j: Y1 [$ E
Ib(i,j) = c(I(i,j)+1);
, ]2 Z! N! H. d" G
0 p) j% _! ?+ r end 2 J# v r# b2 X: q
' k/ P9 W0 G" n8 w0 z- A' uend
; p8 n$ \8 f3 @5 X. _' c' ^' j1 A* K7 z3 J, b) {0 ^
dis(:,:,3)=Ib; ) Y5 Q& ?& r. C, a1 l# h
) [8 `4 S& u* H T%subplot(122) " S0 _0 j& ]; \9 P m& j/ \5 y8 ?; ^
) L0 Y" n& [2 b4 M. |
%imshow(Ib)%显示均衡化后的图像 4 b; Z+ N1 s2 M6 j
& K. `& U! |0 n2 I4 Vsubplot(122);
; d: k5 ?0 d2 A3 L/ R4 u) W- u) ?' ?# w' y: O4 e
imshow(dis),title('处理之后的图像')%显示均衡化后的图像0 Y, M; K2 ?7 d L. Y: E/ V" l
6 ]% _6 n" o/ e1 X P+ Z& K8 d: ]* v: |
[6 [/ E6 w. N5 b, V
|
|