EDA365电子论坛网

标题: 用MATLAB仿真基于直方图均衡化的水下激光图像处理 [打印本页]

作者: piday123    时间: 2020-6-23 15:41
标题: 用MATLAB仿真基于直方图均衡化的水下激光图像处理
用MATLAB仿真基于直方图均衡化的水下激光图像处理8 D- y+ G8 }9 l8 b/ Y
: H. M& W5 X" I# ?' H1 b
MATLAB仿真程序:; D1 C. f( ?2 h" O5 R. |

- c8 P8 P8 F  u( C5 K%{- m/ J' E$ D+ \! q2 p7 b' {

4 l( |/ }; ~- d9 X  基于直方图均衡化的水下图像增强(MATLAB仿真)" I5 r9 Y3 ]6 ]7 ]) [6 {

( a/ D% x  J- p' b9 {  对RGB三个通道分别进行均衡化处理,得到增强之后的图像3 A2 p4 G% a- Z7 w4 d  O
  M- s7 k6 O# ]8 G& ]" t" _2 I
  实际测试,效果明显,下面
! s2 X( d( _( q
) P1 H/ Q- x- }  时间:2014年9月11日23:59:01
  [  o: M. |' S( G
6 V- l9 \9 K2 z/ l+ c  整理:天空之恋. w7 ^  e9 W9 E& U' E% L0 N
: }3 `/ g* z! V& C9 O$ G* C, W1 x
  地点:桂电
! b0 [# f1 J: c' c, R' L# t6 t  r7 W
%}. a7 k# A& g& x) b4 e" I! q

" s9 R- B% k0 X6 f- o- b% oclear;2 m$ ]. V! w6 X0 t( {, U( K
! q3 v, f- Z  u4 D2 ]! a' r
t = imread('wa5.png');  
9 y4 |2 H# Y# @* n  o; E3 Q0 h4 x6 d) V7 [& z/ d
I=t(:,:,1);- Z0 n7 A/ H0 N, |

  k* x6 ?/ r& s: M' D  B[height,width] = size(I);  
) N/ k2 \3 f8 q* ?4 @( \: j0 }* b5 f" M
subplot(121);
  U! A5 X/ x0 E- S) R
! Q3 _" k* @! m+ w! zimshow(t),title('原始图像')%显示原始图像   
- f" C$ |/ _! I* `# f: `- ?7 \
; j4 O6 r5 c$ t# K/ j%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用8 ^( E+ ^8 i1 g2 x8 V( o7 F

: p# R- ^7 b7 }& ~8 I; P. O+ |%进行像素灰度统计;  - s1 y, z" a8 S
! u- }/ E9 _0 P0 U
s = zeros(1,256);%统计各灰度数目,共256个灰度级  
# ?2 r0 Q$ X& A4 S3 L0 b, \* k! @& C! h
%绘制直方图
; m! X) X4 l. P( x' T* s& G' {1 D! d& q- O- k9 L, H, t6 @' }6 x
gp=zeros(1,256);
7 ]" A& _: r. @) N, p, x7 t( O* j& t* o
for k=0:255
, {  C% B5 S6 z1 M7 e+ @( z# ~! h7 q2 X( O# q
    gp(k+1)=length(find(I==k))/(height*width);7 |( m1 M) v. z0 F2 p

- Q' y9 K. t1 K5 `; H7 s4 Z6 W! ~0 Eend
0 B8 j) {! P9 d' v- m( d# F8 p  {% m$ @0 b' D
for i = 1:height  
0 D' l9 ?" W; g9 v$ I  u% ~% V
* a; _, i$ [7 |( g4 K* r3 P    for j = 1: width  # W1 \; z: x! V/ y$ G
# T; t: b7 ?- I
        s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一  : H  [. K9 {, `- q% P) K

3 O- n, ]+ F. a- U+ A1 O: Z8 _" c    end  : [( n: T9 v, h

  W2 n# m% s& bend  
, L: y) _# X* o- G7 Z. @6 P8 M- O2 Y8 H6 G1 ^
%计算灰度分布密度  
8 K! Q' U& E7 ~9 L
0 E7 X$ B/ _7 _% w- @p = zeros(1,256);  
. z, p- g! m0 W  i5 g" g6 k0 P( w. M9 T* O
for i = 1:256  
+ L+ u! [( g0 M9 X# q4 b. L4 ^' Z( N, N, @: j
    p(i) = s(i) / (height * width * 1.0);  
6 m" a6 H  t8 I2 G- R) ~  _/ d% D0 S, ^
end  " y5 D! V- [' |; Y
. A! q1 W/ M2 p# }$ L1 B: @" y
%计算累计直方图分布  9 G8 b! E$ s4 D8 o

4 N! _, J) a" Z5 K9 e: v" bc = zeros(1,256);  , D, @, ~. g: @! W, \7 U) l
7 {* i* @& E3 ?& ^
c(1) = p(1);! P* M" z6 U0 \# u" w# K" _
. L: \) \, {. ?; N" B. R  }
for i = 2:256   . e. F7 {! \9 p9 T4 d7 z5 Z

& \8 G! V1 ^$ l% H# H! k1 C+ L. j/ I        c(i) = c(i - 1) + p(i);  ( ]  X! V- a1 W( d
/ h; G& B0 D5 x
end  9 S: C( ]/ S: I! g
9 Q, |: ~8 Y! m4 b8 |
%累计分布取整,将其数值归一化为1~256
3 a, M) D' M$ x$ K# E6 c5 u
  I  f2 P8 M  H6 vc = uint8(255 .* c + 0.5);  
& G- r# ?& l; d1 C; W- Q. Y- ^4 \5 p" a
%对图像进行均衡化2 b0 R5 X, L5 u% \

/ s7 B! G% {9 D: A, k. m3 Lfor i = 1:height  ; Y- l6 x( P- V# {4 K( r
! e" y+ O8 A3 L- D
    for j = 1: width    P+ `( t8 ~8 v  n. V
$ ]- B  P' J: f" F
        Ir(i,j) = c(I(i,j)+1);  ) {) Q- X- \& ], |. Z

8 @) ~# y' B5 y    end  . V8 b! p0 T# b! z" B2 w: b* c7 l

% w' X* P, L% v1 A, a# X* u/ [0 {+ W/ Wend  
  g& y0 W; z2 G; B( ^6 N- ~; c: L( o  l" Y( O" ?2 V3 S
dis(:,:,1)=Ir;9 ]# y8 c, C( M: O7 m5 t! j: C
7 _7 d7 E( \2 @7 b) c  C$ f
%subplot(122)  $ {# k( m# Q4 f0 g3 F

2 t9 ~0 B, {3 ~* {: _%imshow(Ir)%显示均衡化后的图像) D: N9 w6 s7 Q4 V  J1 n! h4 W
" V* k/ E5 q0 ~1 ~
%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用2 W" j- G- F1 X6 q4 E4 c5 W
2 [: l2 T) N, ?& T3 |
I=t(:,:,2);
+ c$ y- Y" m# E* x
  T$ w) e3 j5 W[height,width] = size(I);  
& S& F, D1 C! G1 L& t3 _& |# y
3 e  t) L, ]6 R; W7 B4 o
% ?; q6 h3 Y+ H/ n6 B: V: [7 \) Z5 K' n+ M: n6 g
%下面使用直方图均衡化进行处理
8 @+ p( O, d* H: h
# ~) O: B6 u8 F. N%进行像素灰度统计;  
. b, N0 V  P5 g# q3 J( Z, L. Z" G7 M3 Y% O, ?
s = zeros(1,256);%统计各灰度数目,共256个灰度级  $ i, \; {! P* _' ]- ^, |. n
0 G# W9 I/ [) S+ ~* X. J
%绘制直方图
, |7 n$ d  M2 ~9 x2 v: G% \* L9 i. J% k+ d+ a) p8 c& [
gp=zeros(1,256);+ I* U6 T" \% j% |0 E

, \9 ]. d- ]9 \  r- t1 Cfor k=0:255" g' Q, E# h6 g) u% ]- x
( B. u# @8 s$ \( N7 X. w  N
    gp(k+1)=length(find(I==k))/(height*width);$ o5 |' o& U/ O1 }3 A! `

; Q) Z) r5 d  a  B/ k. ]4 send
* _  g9 e0 N- H- Z9 t- a
; t2 T# W! y  u; ]0 A& gfor i = 1:height  , b, a! Q9 [- U5 K3 G( Q* K0 |9 b
" b8 ~3 ]; z  G
    for j = 1: width  2 |' x' v! S( C3 B. l7 d" s

3 j6 ]+ J" Q& y. {7 d7 H+ Q        s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一  
2 T0 C7 U6 x& A& d' M5 M
2 b& s! ^$ X1 ?; j/ ?- U    end  
4 K8 d8 j  s* O/ L# J& g2 l/ R' F' [
end  
/ i3 [% t5 [$ e- d4 G9 y0 k( m1 }3 q+ t" d0 a9 j
%计算灰度分布密度  / y* B, ~5 `5 V
, z' F/ [0 B3 }9 u4 s( f
p = zeros(1,256);  ) Y" r. ~! J3 B# ^8 k

# q8 N2 s  U! |( n: C9 ^& u/ ffor i = 1:256  
# u4 S6 K$ A5 p9 c; j) [
2 x9 v- v  \$ n/ w! O4 O+ [    p(i) = s(i) / (height * width * 1.0);  
3 C8 j6 y  @: P% V3 s+ b  @
# ]$ S$ _- d7 H1 lend  
; ~. v. u: }2 _. r% c# p& H6 s& j) G
%计算累计直方图分布  
- I7 ?5 Z8 t9 d+ R  _5 J$ u# _$ b/ y4 J* X$ O( o: X
c = zeros(1,256);  
) G- {8 R6 k0 G# h0 |! f* {* @) ^) m, b4 V# S* I; d
c(1) = p(1);/ e) K+ L0 O& i$ i: }: ~! e4 b
6 B: _: a1 h$ ]1 }3 a1 E" M6 ]
for i = 2:256   3 |4 `: H1 O6 f" ~' L5 P( o) w

/ F- E4 _+ i6 L. b  A6 E1 m        c(i) = c(i - 1) + p(i);  1 Q* U1 g& F9 V$ q+ d6 c2 ?
1 W1 D- s; C  ~) l8 Y
end  , a6 W: b+ i" m* K& u

" d/ o5 e4 i; t9 t  Q%累计分布取整,将其数值归一化为1~256
: {# D7 e- t' \$ u0 n; B" W! J, w; H. Q2 `1 U
c = uint8(255 .* c + 0.5);  
; Y) E( w- O% O! G* y* T# D& o
# y6 M5 C7 {" q0 z%对图像进行均衡化
2 i* M. Q+ E) @! s
: S) ?8 X, x* sfor i = 1:height  
4 ?, \+ R+ D' h3 b3 `3 i% B4 B# ~: \! r0 Z9 ]  ]& p( m, @
    for j = 1: width  / J+ I, N& ^! r" L4 Q6 ^
% W  t# r7 R* k$ h" Q9 \- o
        Ig(i,j) = c(I(i,j)+1);  
) S, O/ C* T  W0 O) Y% v7 i) z1 |3 z! \: u* y2 q
    end  
4 j  s0 R3 [0 j% e" `  A+ o2 y: `) b7 E- J  T# Y: h- P4 G- S' s
end  
! c" S& Q, X& q( h; j6 Y1 y
& J4 m$ O* T3 X! v# t* Q%subplot(122)  
9 n& m3 z  k. C" S3 k) U6 D  Y6 q% D0 x% `$ p
%imshow(Ig)%显示均衡化后的图像! N3 s! c7 \: I0 Q! Z, z

$ e$ k' v3 k( B& R- X: d' Odis(:,:,2)=Ig;
3 q- u5 W) c. ]4 f  l, C
$ S2 D& Z1 f6 ~! M. E/ \3 F, R# e) Q! S9 Q5 c. l

: N+ b* X$ \0 C" b* o2 \. P, u! ~%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
4 g9 T# e- L$ x2 _- j. D6 F
4 Y. s" \/ _  G/ CI=t(:,:,3);( g5 W- G& V% p7 y1 Z! B

2 H+ P  ^/ @4 r3 e  h2 u[height,width] = size(I);  . d2 S3 o3 a% q2 V1 B; [7 N- \

/ x; _4 y* p# q% l2 o5 [! ~9 I. x$ U- z: n  I: J

5 N, m9 F; G0 j%下面使用直方图均衡化进行处理1 B, O" Y1 t, e4 x+ B0 R

% [# x7 |+ b  W* ~, d, h* G%进行像素灰度统计;  4 U; w' E# }+ u7 d& y- S
  m2 a; Q5 F! _: J/ @0 Y
s = zeros(1,256);%统计各灰度数目,共256个灰度级  
6 B5 t* N; H. y/ t: ?3 F  ~! k
1 ^' j. C& ^" \* ?%绘制直方图5 x& z( P/ z7 y0 V1 m
3 A! h( p6 B/ V+ s
gp=zeros(1,256);
! C* o% a! Z. F$ {# Q8 G" k: H1 a& M* F3 R% I. ^; ~
for k=0:255/ A1 r" [: A, E, q3 R3 U

0 w$ k/ g2 i) O& K& }2 _    gp(k+1)=length(find(I==k))/(height*width);. M+ ^! e  `$ F+ m3 K
4 [% f( Q5 F$ V) e5 m# J
end; p9 g, A/ ]( V+ Y* I8 J! k/ w) B2 g. s
$ I$ n6 H/ R2 p6 ^
for i = 1:height  
) e4 v& @3 |! B+ y* J  A/ a$ p7 s% E2 V, S
    for j = 1: width  
7 W4 d9 A# ~; e! m5 j- w+ y% h0 I6 ~, I7 }8 ~4 i" _
        s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一  9 ]+ P' d! n% s* B

( c4 K* I& v2 g% |& Y5 X, M! i    end  ! u+ g$ [: l" X& Q1 x6 _' C

! w) Z2 _- E. Nend  7 K5 ]" u4 u* y, U) x$ m% d

3 z3 G$ ~- k( ^  }' E6 \$ R%计算灰度分布密度  
* U5 @3 R% Q" a2 z0 k3 g7 u
) W$ X3 a, q# P1 Ip = zeros(1,256);  
  z6 B8 B8 _5 j' }  m2 M. r8 I7 i- ]  X( x
for i = 1:256  3 u3 X$ u) C0 A) t) |

. @/ B: f( F9 A    p(i) = s(i) / (height * width * 1.0);  
3 Q9 |: ]% X; s8 ?9 F" w! S$ S; \4 i9 R, i0 ~
end  
& p/ Q3 d+ ^2 n& j: b3 [
& I: p( q. S5 G- F! @6 X%计算累计直方图分布  - C2 d+ J% X3 H- N* q, k( ^

6 Q3 |# f3 i, H6 ]8 oc = zeros(1,256);  
7 U( u$ R* s* A1 I6 D7 G: C
8 S" r. T+ b& K3 a9 vc(1) = p(1);
8 L) j9 u" y9 B  }6 s0 K5 O8 _  F# u, p7 s+ S( Z# B1 U) _+ m
for i = 2:256   
, _* V1 z3 a1 }
$ m! `! O% s! T  L& j        c(i) = c(i - 1) + p(i);  7 `; @1 n0 p2 L" i" x

) Z9 O' W8 P# w5 P" Gend  
8 U; v5 ^3 w8 O# I  P# q8 ?1 I* E5 T0 B2 s% i! h
%累计分布取整,将其数值归一化为1~256 % X4 {0 w3 Z- o

9 C3 I0 X* A& [; Tc = uint8(255 .* c + 0.5);  
1 l1 e5 N. c' V. t5 B0 f7 `( l( ?' P% t6 ?5 y0 [
%对图像进行均衡化
* N+ ]$ [- Z: o* d* f! G: _- @$ o
  g' h' y) M3 s' _9 r( |for i = 1:height  ( S$ T1 V( ?0 p2 ]/ s) f
9 t( N. w6 R( P/ q# [
    for j = 1: width  
: [* C* F% _& u7 \  a" |% {4 E% B& E, ?( Z* G0 f; K5 G! n
        Ib(i,j) = c(I(i,j)+1);  
: G$ v( O; M; Z2 [, ?
/ s, g  }0 k* V6 |    end  7 _0 n1 ^8 j  }$ O- p5 i, \: p
2 a8 Z; q9 C. a# ~
end  . Y# ]& p3 h' n2 i7 {; i

: t( K/ E0 k% I3 l( B, y+ c+ jdis(:,:,3)=Ib; + g/ j+ m. @6 D+ S% z: q' |" g
2 x5 \; s" v' p! Q' |
%subplot(122)    C/ k* z" G& A2 I' H6 H. S# d

3 F4 P# o/ C& D: R5 m2 A9 r%imshow(Ib)%显示均衡化后的图像 . R& Y  c' F; j/ J

- v$ p. Q) Z1 k- Ssubplot(122);
0 N" E) p# W; l0 l2 y' m9 n9 }1 G/ F4 u+ e, F8 U
imshow(dis),title('处理之后的图像')%显示均衡化后的图像
9 A3 ?  Z0 A: s$ ^* F% u- p3 Q# T6 J6 I
& S8 E! c. L' w

5 C- r7 m7 Z& y7 u# P3 X5 e# O
作者: yin123    时间: 2020-6-23 16:58
用MATLAB仿真基于直方图均衡化的水下激光图像处理




欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2