|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理6 ~/ @5 n8 h* g7 E- S; h
3 _" K4 s" w0 M/ i
MATLAB仿真程序:
/ |" U1 f" l8 P+ ~5 f
1 E" c0 @: U4 F( @" n6 w( U%{
, D! ], V" M I7 y7 E! z' |* {; i* C1 b: U$ V' z
基于直方图均衡化的水下图像增强(MATLAB仿真)
4 q( c+ h8 J$ h) y/ I2 H9 J9 r5 P
对RGB三个通道分别进行均衡化处理,得到增强之后的图像
) v- G! V: @3 i" P
& G9 I" }1 L9 U3 k 实际测试,效果明显,下面5 k1 j7 t! ]( Y* | o
# C# c& e$ I' L- Q8 w8 {5 F: V
时间:2014年9月11日23:59:01
, w0 o$ o9 J, R) D
! R( A3 q: w( }$ d% ] 整理:天空之恋
+ `# j# N1 h7 Q
9 ?% X f' u( b ` 地点:桂电0 W4 m6 z) o, D; O( z0 ~6 F" @3 ^1 E
+ Z; M7 P2 \9 ? @7 E7 s3 k
%}
6 W# \ O2 j0 a+ `# }# M, _& Q. c; s
clear;, ^7 Q, G* W4 _( n
4 |& B# C* s. |$ Pt = imread('wa5.png');
' J( ?) e2 N. ~7 z! T9 x. K i4 j
. H8 H0 r/ T" k; ~& q+ cI=t(:,:,1);
5 [: B# B. `4 M, `7 K
6 A8 Y Y; h" r: ?2 ?[height,width] = size(I);
4 r% V1 H; |, r- `! b9 _" ]& R0 l( F8 H- o$ J+ ?1 w7 x- X; P
subplot(121);
2 k0 v; |3 z8 C+ a
4 ]/ |! |) a6 m# \9 ~imshow(t),title('原始图像')%显示原始图像 : r+ d$ Q6 `: b( G/ i$ a
7 F9 O# C$ \4 b5 p( H5 S
%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用& k ]) b' ^9 c; i
. L$ s; e7 g0 r& U* T%进行像素灰度统计; , J% A' A+ u+ Q% [: X2 T
2 A P! J3 z B K, ~9 w' }. H
s = zeros(1,256);%统计各灰度数目,共256个灰度级 2 F8 Z' C6 H/ |. o4 f
6 p6 Q& O& K- [3 u6 _& N
%绘制直方图
+ f: m" g( l1 Y
0 ^, ]4 O) L9 R. V5 Rgp=zeros(1,256);5 G2 C* E" y: n+ T
, D. q* c8 v! Q& D
for k=0:255
8 {0 e: H8 B2 c5 d% T$ U; h4 C8 x! O+ b9 [* r
gp(k+1)=length(find(I==k))/(height*width);
+ D0 z! K8 v' r0 V: M
9 ^0 z8 L/ _! e9 U3 A1 o4 Qend
9 ^$ r+ c/ O D& ^$ d. p
& \- v3 H2 x. w8 g8 L& mfor i = 1:height
2 H, j7 I0 \) F9 x) D. v* b' L f0 L
for j = 1: width 4 T& t' M% d0 h) b7 {- v3 ~: t
* \' M4 D' m7 u( \ s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 1 D5 F& i, w, U! G% q
3 W' l R" k! Q' h8 I% h* u
end ! [& I' V% D5 {4 _# }
. L& A) z/ i$ d( }end
5 x, U' p* {) f2 R
; \$ m, t0 R) Z; ~5 L0 k%计算灰度分布密度
" _/ k2 h, X" g% I" @% r# }+ p" ]& i! {2 q) n' Q0 s4 H
p = zeros(1,256); 2 w+ ]3 {. D9 t5 S4 L a
1 K4 @$ Y+ d$ y* W) Wfor i = 1:256 $ ~5 I! P" x2 Q$ M# E
7 c! ]9 P& `3 Q. e
p(i) = s(i) / (height * width * 1.0); # e* Q) A1 K3 [; F' b; L& P
$ Y# d" F e i0 V9 b# l
end
( \' j3 y7 Q+ j5 `0 q9 e9 X0 V3 m( Z. \8 |4 r
%计算累计直方图分布
; S7 _* ]8 x9 X( c) ]" P7 E3 z! f. ^' g
c = zeros(1,256);
: ^$ x4 G8 ?; J/ h8 a* i! F
5 j, ^2 t$ @& S/ r" }2 Ac(1) = p(1);
( X3 o! q% `& C/ D+ T2 [1 M& ^
8 O' I$ q. n7 x# _7 A9 nfor i = 2:256
) \5 y0 `0 b/ Z# O! W5 o. ~7 q" s; y
c(i) = c(i - 1) + p(i);
# g2 N5 b' ]' D; ]- z. O) m% R. {* B
end 8 G% u [; i8 f9 k
7 d( `! A* I2 s) s%累计分布取整,将其数值归一化为1~256 * s' R0 ^3 { t% u) \' c
' K9 s9 X j8 D/ l9 [& x3 O, Fc = uint8(255 .* c + 0.5); ; v5 n+ i. F. D1 _, l9 {2 _8 m
( n" \2 a/ A( E4 q& p%对图像进行均衡化
) H3 U$ |( x; J3 \8 P# L
& j1 ^$ S1 G) K! pfor i = 1:height # r: o& x! V4 O, x0 e0 _
! A6 a( w* d, Y4 ~0 t
for j = 1: width - Y9 Z6 }. T% @& C
! r, C8 N3 ^$ n8 I' z
Ir(i,j) = c(I(i,j)+1);
$ }2 N/ G( i* E' p* h4 d& Q1 e! ?
( f, i0 w" ?/ M1 c- M& n( T end
/ U; ^( e2 R# u0 n1 q( s7 D$ k1 P8 r( y( v4 {1 }. k( @" e" v! |
end
4 H8 s( Y G- t- g, s0 ~6 x7 q5 W4 q+ R/ m# k7 N+ N, |1 o" f' ~/ X
dis(:,:,1)=Ir;
* j3 `, t- D* P! g) T2 ~- R/ [( x# f) u
%subplot(122)
0 P. b* w2 J% ^
) X" H R1 B& Q9 H: @%imshow(Ir)%显示均衡化后的图像- o0 ~5 X% g7 J4 Q. F' w/ j
0 _5 l* C! p4 C* _$ {# m) Y) T
%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用/ Y" u5 w4 s; p6 d; t( @
5 f4 O# [3 Y6 Y" N$ ]
I=t(:,:,2);
% p, M" R4 R8 R5 Z3 B: Q
; g( i! B4 y2 r5 u9 }8 [* G+ I; Q[height,width] = size(I);
. i- \$ ]' S5 ~0 Q3 D3 T, S# | J4 }0 U. T
5 z2 {' V9 M, j: r. ~" X% E
- B4 S9 k2 R5 h Z% l%下面使用直方图均衡化进行处理+ z- V0 k. S% L, j8 E4 H
! Z0 p& V* I/ V; ?1 `%进行像素灰度统计; ' `* h) n: }) I; f+ A$ v' m
& `1 S' ^7 d/ Xs = zeros(1,256);%统计各灰度数目,共256个灰度级 1 _ [% D, A$ k' H* p5 o* O
1 {: f5 q3 m# ^8 ] h, i6 J%绘制直方图. o) L h3 ~% ]" q- p# _' m
! u# M0 ~& Y- k8 d/ l4 |
gp=zeros(1,256);
* ?& f* K" \! T$ @7 o) C, ]5 ~3 o; P' y, q" i0 k
for k=0:255' Y' T! C3 T$ d" o( J2 i
) X: h" F- D! k gp(k+1)=length(find(I==k))/(height*width);
4 C! V- u* C S% l* K; u+ T% p* S: A5 w) L3 o* M% y
end; o1 O# r: ?) ]2 {5 S0 A
; P7 Z) r3 ^$ W2 [: ~for i = 1:height 2 Z9 M+ C4 p6 t2 ^0 \& ^
w2 N4 q0 E9 N$ V for j = 1: width - [$ p. `4 G$ X4 l
. V% K% u+ w$ R$ F( V s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 & |6 Y! R% y* G0 M- `# f$ F
) t8 X7 m* y/ t6 J
end a& e( B1 j+ G! E5 w% G I
y' ?+ T4 u" R5 [/ R$ Kend # I" E( L+ `" Q' Y" g( a
8 g$ Y4 @' N. ]1 [4 \%计算灰度分布密度
3 i5 g& _- P, o* k
! y' e& G8 p7 s+ `. Op = zeros(1,256);
$ {7 ]1 C/ Y; B0 ~. n- ?+ ~( H/ ^3 F' |9 {7 G* S7 n
for i = 1:256
5 n3 d. m: |6 c$ V! \
/ }. F- I6 k0 V; c6 y; O, t, j! p p(i) = s(i) / (height * width * 1.0); 2 H: F1 c/ O, d3 L4 _
2 R9 j5 O# H ?8 W6 z6 W2 o7 W8 G( i' ^end
/ t- a% o7 d& w. k! }4 W( e
- B3 _, x" F# l0 \$ |%计算累计直方图分布
4 U& _2 t: \6 e- o. \7 b+ s W# H# Q0 Q/ S! d' Q
c = zeros(1,256);
+ ]: J$ t. g% \. v+ i f3 |3 h. q' N0 ]
c(1) = p(1);
" o \' \: Y$ a& u S1 T
* N- U% ~, o- ~0 P9 F4 u! ]for i = 2:256
& q8 u4 Z$ z2 f) Z9 s# o' o( K a: A1 { l, G: O* a
c(i) = c(i - 1) + p(i); 4 I+ v- p6 G0 l
* U& C8 d! J( W& w% L% I' h
end
4 }: c# p R7 e3 V
* Y' o/ H! W4 B8 ~! c9 \6 \( z%累计分布取整,将其数值归一化为1~256
/ z, \; c3 D7 b7 y# S6 x2 ]% S* o# E- Z# x, N5 z/ B
c = uint8(255 .* c + 0.5); ; q3 M4 s3 T$ u7 ?4 I
; k% K) W! F: g- M4 _
%对图像进行均衡化( S K: p- I% @
1 Y/ J0 A1 x& E5 w- u v1 o" sfor i = 1:height ( c1 X+ \% b! L
5 {# ?4 n2 `6 y" O1 ? for j = 1: width 6 q3 \; f+ ~4 G9 e/ m1 `" J
* H5 j. l% D. F
Ig(i,j) = c(I(i,j)+1); & \' R$ x! ]1 |! S/ {! D4 [
. i& i2 o$ P- P
end
0 p" Y5 b( n7 B8 ^
8 b; j8 C- L* p/ |1 Iend
# r) @; b' w6 W7 _
! D* k% h% W# M, S% a# x3 v%subplot(122) 8 I% T" h2 U- K2 s, I/ }( b
' \. T# F% U# k5 C/ l%imshow(Ig)%显示均衡化后的图像, @4 x6 |* ?; u1 i2 L7 s% K6 y6 ] \
! C+ C. R, T1 B! A
dis(:,:,2)=Ig;
3 @' q9 W; i8 a: k G4 ~9 B" ~ C j, ^
2 j& [8 x y, @% Q4 q4 i+ u' [
/ e' g1 \9 C6 U& U2 r; T8 j5 H0 \
%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
2 A. p7 n V! s- o/ L/ a0 }
% L) K8 F! u, \I=t(:,:,3);
$ l/ `* u1 r3 \% |) B/ O0 x4 l) e% N" J( U/ V9 X
[height,width] = size(I); 0 }; y* e% [8 l2 ^
1 X5 Z4 r% {1 P5 z- P7 V. ^ P+ Z3 P1 U9 y- S0 ]
' O! s5 F9 Y' H8 n0 W! z8 N%下面使用直方图均衡化进行处理8 A$ T% Z; Z7 w7 g1 ^1 W6 G* j
; o( A, `( J/ q. B; h
%进行像素灰度统计; 2 U z& v4 Z1 l2 n% q
* t) p+ r* V4 F4 q; _& m/ S6 {s = zeros(1,256);%统计各灰度数目,共256个灰度级
( o1 o$ y) u8 j3 O
/ t& F0 g5 j2 e%绘制直方图
4 ^1 Q$ z5 B m8 j" y: h! A* v, V6 M1 H$ B" H' G" Y
gp=zeros(1,256);/ `8 V& I! ?# _& H' r
% r$ n0 f8 Y3 b4 i$ X# q
for k=0:255
B4 D' Q- j- Q0 I: t# O2 U5 R, X, V# Z8 [
gp(k+1)=length(find(I==k))/(height*width);
! y+ t7 g2 I' u6 I* d# f" d' ?' ~
6 `; q# i9 I- q9 a; {+ Gend
& `. C# y9 v: m) a" o2 V7 ^+ ?8 ], V$ T
for i = 1:height 6 _" i5 n) y7 [3 }
( |3 b2 D/ ~- @9 ^( r6 g f Q
for j = 1: width
! _5 r# ~7 |; {6 t% ^, p) b4 l4 t* B! P
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
/ \6 u* z, ^# W, w. J# Z# i& y( x3 u
! d3 r9 ~3 q7 G end
5 k# c4 D$ ?9 P4 ]' E
5 }/ G# H- |7 l2 E. ^- x1 ]end
O7 x1 K+ [4 x
- B: F# U7 R8 w \- l# W%计算灰度分布密度
# j7 [7 ]6 N0 L9 q4 e; k7 H; ^
' U: i! \3 _/ M# K0 Bp = zeros(1,256); 9 F' X, f; b- l. e
# b6 F3 W/ n5 {1 l4 m
for i = 1:256 8 e% J6 q* w9 v' R
+ }% l7 F5 b$ Q: v7 |* L p(i) = s(i) / (height * width * 1.0); 5 y: _- }6 S, S
1 U$ ~- `" G! P# I/ A- Wend 9 i& k8 j' R2 l* v" w# Z( m% X
7 B+ k5 j* C9 r: @9 A%计算累计直方图分布 $ t' |7 K- X4 E& X/ `; c
* m0 J1 ~7 t/ w. F4 ^c = zeros(1,256);
6 P% a. I( f* |' T3 X9 a$ K" B6 F# M! M u
c(1) = p(1);
( H# |7 n0 \% X
* U" M; @$ N- H8 E$ ?for i = 2:256
% E( A0 f2 A" x9 c. Y; F
9 e& G3 B1 K; \" Z+ S c(i) = c(i - 1) + p(i);
& _" e* ?( H: y1 I: L5 U% _5 [8 v4 x. G$ L1 q6 `- O' j/ ]4 {
end , z5 I0 p% H6 E
0 y0 \3 \% F w' d! p6 s$ A%累计分布取整,将其数值归一化为1~256
+ z- r; i7 O$ Q! U+ ~# P+ k6 M/ R: L: m9 P" ?7 y/ o4 i: V3 L
c = uint8(255 .* c + 0.5);
+ ?# H8 Q0 z1 U" A; u7 h# z# c2 [" c) ]* }" ~
%对图像进行均衡化' {$ F: C5 O% F5 m% u2 _* `" B
' \2 q+ X3 j/ V5 C" m% [
for i = 1:height % ~/ d( B5 Y! y2 w+ Q6 [) P3 c
6 X% X3 U# o( n6 V+ {4 ]6 n% ?
for j = 1: width
; E6 W) k7 l r2 p( E) H
3 k M; s, q$ r A5 e/ s Ib(i,j) = c(I(i,j)+1); $ P- x! O0 c6 D0 n2 G7 N
+ m1 d& j9 B5 n. r5 Q
end . M$ \1 [% J$ r0 D, b' y3 W
# `( `+ n; q7 F
end
; Z5 L" o, L6 k9 q3 Z& C( z6 t; m \* f
dis(:,:,3)=Ib;
5 }9 V2 D: D" }# C7 H" ^, ~+ ]
3 U7 x2 x8 C: J$ m5 c; r# s& G%subplot(122) & n! ~0 K. J& z7 ?# H' n
- D" V0 J8 Q, }$ x* Q8 l8 t6 y
%imshow(Ib)%显示均衡化后的图像 / }8 `0 K2 A* Y) p) N
* C8 U* R0 B: R
subplot(122);
% t- }; k' C$ E) g& _7 _
: Q$ s0 H% ~5 a6 u3 m8 Nimshow(dis),title('处理之后的图像')%显示均衡化后的图像' v8 o" a: ]) f" A6 z' E
4 ~* {! s) v$ M2 R5 W
4 g# Q' I; e! h% c ?% X% ^, c
B/ B( ^: u7 i$ s4 |5 L; `6 J
|
|