|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理8 T# m5 h" ~) y; n, O! _
' l0 G+ x: }( b
MATLAB仿真程序:
# `% ^/ I. A G, j- D" C0 v; \/ K* E- F- b# C8 j
%{# x7 t9 z) b0 j' x4 p
" ]) b4 o7 g5 M( H% L: n b& j5 U
基于直方图均衡化的水下图像增强(MATLAB仿真)3 j7 A+ [$ R5 M5 H% n( L3 r8 H' ?
0 `9 a# G$ ]! A( S) b; y* L! S0 p 对RGB三个通道分别进行均衡化处理,得到增强之后的图像
' E, r2 T- M/ c0 s1 B# s5 w. B R, x! [* O# \2 O
实际测试,效果明显,下面. @. h$ z! i( B, ~* F) m0 [7 i, s
/ p$ h0 H6 I, E- { 时间:2014年9月11日23:59:019 `* s1 k3 g" e) q
6 E1 d7 q1 ]# Q
整理:天空之恋! J% b1 w6 x+ D4 a& z6 s! ~
0 V# n- o i, H3 N4 v5 h
地点:桂电
3 p. _: f+ [' m; i: l6 [4 O8 s; b- W8 T$ s
%}
4 E: D! z5 _# k) Q- k( u3 j) k6 o4 v9 m6 x( G C: y( x$ d/ s' W/ K
clear;
g* C( \0 Q! R7 w6 ~
6 {6 m3 u: a" i# ]4 q) |0 \t = imread('wa5.png');
; g5 [# I) e- k. j
1 Q+ }* m& ?' \' oI=t(:,:,1);
9 L. K& i: W6 `# ^! ]
. y" ^) {% w6 c, q. A# o8 d1 }8 \! `[height,width] = size(I); 0 E; n0 U( q) _, k- ^/ p* P3 n
& ~6 a& Q5 V6 D8 O0 f
subplot(121);
0 O1 s8 q" m# L- ]$ _! n2 \- z% U" P6 I
imshow(t),title('原始图像')%显示原始图像 * x3 L( `( C( v
; g7 k; ` d( {. ^+ R& Z' X _
%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
/ i5 k$ F1 Q5 k- d
* K; q, B5 {6 R( y%进行像素灰度统计;
, I0 M" h- ]0 @$ x) g0 u& [, F$ U: e( p% Q, j
s = zeros(1,256);%统计各灰度数目,共256个灰度级
- R1 R N5 }5 A- T# V% J8 @- c2 M7 v! i# T
%绘制直方图
; @; }2 ]7 c$ W( [
; t4 k, I* e/ i% Lgp=zeros(1,256);
1 m, s( k2 I& M8 m1 S
2 c) H1 ^( R4 `5 ~for k=0:255
$ V) g2 L# L2 j7 `6 C2 c8 H0 f) Y4 g: [; p* H3 b7 ^( Y
gp(k+1)=length(find(I==k))/(height*width);0 d9 P$ k. a: f. `
0 m+ N/ e0 h; X, Cend
( T$ D7 H' m1 \0 D2 N# q# k: A0 D d5 o+ ~4 i0 a
for i = 1:height
( u2 ?1 v) _2 n3 _" W! k
- A5 G3 E- q8 q0 [$ k. | for j = 1: width , a7 @) t8 O" p2 [. i& D
( N- q& g7 x6 t
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 5 k; p; q4 d7 N
3 [) c" _( s, U8 F0 n$ m! s end
+ W4 f" Q% c G7 } V* `: i, s1 p6 @" i7 @1 `/ E
end
! b% Y6 @+ K* ?+ u% n
! _8 |- v1 G1 ^% }/ C: I%计算灰度分布密度 ' \( T. \6 M/ D/ p7 `& T! ~7 [
) D% |6 v; I1 _# zp = zeros(1,256); / z! F5 K! g% z
0 i0 A9 {# t3 z1 o0 g" O
for i = 1:256 * C5 ^$ S; j+ t/ c
3 ]% ~! Q5 W+ ~2 I1 G+ @0 R2 E p(i) = s(i) / (height * width * 1.0);
# B8 P5 L1 B. g
: \( u/ v1 `1 {end 8 @ F, @9 E, }
# C L8 W( U' ]- U%计算累计直方图分布
. `8 I8 {) Z0 j; m/ @* n* Q
! T4 I0 c5 x# L( hc = zeros(1,256); $ Q6 p1 ~% M" ?" m0 }
, ]9 b# ]6 y9 ?0 X% e8 rc(1) = p(1);
( I: w4 n5 i4 [# y' F: ^. _+ Q6 h2 }4 Y, p; O0 g
for i = 2:256
# t, L, v" W4 {; \! b+ H* k. {9 _ \& [9 q g5 q" z! l
c(i) = c(i - 1) + p(i);
( L% |1 }' g4 a s8 _; U) i% E# e. }6 i7 C4 x R6 Z
end
( @" ?: e- o4 f- z' h
% X, V2 r t! ]' X; t%累计分布取整,将其数值归一化为1~256
3 t3 W2 Y8 P% l* `2 b) e. ~( i+ K* Z) f6 K0 W* y
c = uint8(255 .* c + 0.5); % r$ m5 J- c8 @! L5 F
, ?- t7 y s- Y7 h0 |2 ~
%对图像进行均衡化
. s1 A7 {) X0 z/ f& D' y$ A# S; ^
for i = 1:height
, `, e* i& I" u/ i" t! L h3 \1 i# k
, |+ Q9 y" t; L for j = 1: width , H; Z, ^+ e3 s" Y# [
x D5 Q2 h \
Ir(i,j) = c(I(i,j)+1); 2 X! |+ v; w8 |6 F7 g% f; G9 x, s
) Z( U% j. }$ ^ end
3 ^3 Z" h+ T# z" }; d6 N/ R, H3 x, M4 w6 p5 M
end , Q# T& [- [1 `, ^* D0 ?
; ?+ ]- R, v, X/ X
dis(:,:,1)=Ir;
L' b3 k4 v) k2 e
7 J( I1 ? a9 c( T( T0 Z%subplot(122)
& y5 X+ T# g+ Y* D( q2 V, Z; E4 n) O K: h5 T
%imshow(Ir)%显示均衡化后的图像* r+ Z4 q8 Y+ v' V- f4 r4 W: n( @1 y
) \! |. A. z0 T' D8 ]' `$ b/ p%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用3 h7 f: y+ C y: \- w) U2 H
* Y; P3 h/ u2 W7 K: s0 S! ~( a& O
I=t(:,:,2);
: k7 T' K, j4 P5 Y. _" I
1 ~5 C+ M \3 L$ [) K[height,width] = size(I);
( S; [. u/ ]3 I5 w5 l0 R1 d8 Q$ d! }4 @( W! L
( k4 G; O8 Y' c6 W! b3 ?- w! i& y' X' ]3 g$ R
%下面使用直方图均衡化进行处理
{. C* X7 E/ l) |! f, ?/ u! t
; u' ~: ~6 u1 _6 T. x/ T1 p; G%进行像素灰度统计;
# r7 m3 b4 b1 r& L* `" `2 v6 S
s = zeros(1,256);%统计各灰度数目,共256个灰度级 ' k Z- {3 X) U9 }/ D
" E- s; ^' U( Y- h2 r
%绘制直方图
5 u, W% t* Q! S0 R% J5 I
' ]2 A5 `4 S j0 C( [ ?: b: ugp=zeros(1,256);3 {# k H J7 t$ O- C0 `
; s/ b! |; n, L
for k=0:255! R$ }& z4 a4 Y5 e7 u
* N& C' W6 W5 Q4 s/ P gp(k+1)=length(find(I==k))/(height*width);. } F: M2 r' Z, |% t% G% L( k
, ]( v* U+ P. F- h }5 ?6 s, uend
# V& j; D: n) u
9 j$ B. E; W# b& z- Y: ]! Efor i = 1:height
; d7 b/ j9 m1 w" ~& |& D1 P) D0 Y- W0 n# \7 \
for j = 1: width
3 ]6 ?0 I$ l' X3 k7 v" E. p2 @% e v; H) R' a2 N0 P7 u$ e' r, w V
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
0 K& h0 C8 h, t( a9 w/ Y; \6 X: Y0 F2 f5 E, p. l' W8 [& L8 ]5 x( p3 o
end
7 h. H2 R$ |; n6 s+ ]# m, D8 X
) E2 [' D# y1 I: ]end
3 Z, l+ W v- N0 x) C
0 n" y5 G! ~/ b2 ^, N4 L%计算灰度分布密度 7 ^4 b" l2 P$ b- l9 O1 }
4 Y1 _7 m" \5 a( ~. |! Zp = zeros(1,256);
[$ V S2 ]- ~5 G/ |5 u3 _; G2 \/ M
for i = 1:256
9 _& U8 ^0 a! e, {' H
* r* _" g% u4 a! a Z9 R! w3 | p(i) = s(i) / (height * width * 1.0);
! F) s9 u7 Y7 o1 i2 ~1 K/ @
( m H+ q/ C) O4 N# K1 hend * X& w7 D' C1 k( e, g" S& X
3 _6 K- M' }2 Z4 Q6 n& z9 m7 E. i%计算累计直方图分布
- F: p$ @; G) z2 T5 z
5 `5 y4 D4 |# q8 Sc = zeros(1,256);
( J3 o2 k! v9 g6 p+ Q. A% h$ V- U x: k, _$ H/ N
c(1) = p(1);& f# Q, o6 {( T$ y: e+ w
# S# O% T; m/ b5 K, ?
for i = 2:256 8 l7 B1 ~* o0 s" W* b* k; k
+ Z* \" {" Z5 Z7 m* b" U7 H/ M
c(i) = c(i - 1) + p(i);
1 x7 P; |# _5 ]9 h5 A8 P5 r% t5 x
end ) t! B1 J5 J8 P8 A" d/ i' |
4 [6 i3 U/ H3 e5 p/ e9 {
%累计分布取整,将其数值归一化为1~256
8 O* B" i: P5 |) V9 {. _! ?" R5 a9 @$ H4 W; o. A) O2 e
c = uint8(255 .* c + 0.5);
# T5 x. B7 }3 J( N9 a1 g% d; o3 k: D, v0 G
%对图像进行均衡化
1 O2 j' K- y& i( }0 X% d0 c4 [ p7 I, H' U
for i = 1:height
1 V/ ^( B B" }% h
2 ~; N* y! S+ `% k. D* [6 I) H for j = 1: width % l; B0 x4 n! T/ T" ]
1 c2 R' ]* g$ D% z7 c& J
Ig(i,j) = c(I(i,j)+1);
% t2 ?/ T4 C6 |9 I" o/ ] T
. y1 [# x9 D! D) n' H) ^ end
' Q6 C3 f( i$ a$ f# a: t* Y: N9 I- {" e4 T' q* p2 I6 W
end 4 V; Z, b, G$ @' E9 P4 n, F) W) R) n
9 c3 y* o3 k# s7 E; w
%subplot(122) 7 h7 A, x1 k a; ~7 `0 Q( }
/ b! k9 X% p4 }' u, A% U* i: q. \
%imshow(Ig)%显示均衡化后的图像
P9 X+ _4 B0 D9 X
* d2 M9 b, a/ H8 ndis(:,:,2)=Ig;
0 q2 J3 c/ e& ^% G6 j* e* P; c9 j8 g- i) a
8 c* Z% o- j( z9 k
$ {) D: Q( V) C; |0 A2 ` z8 V%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用. i2 e. k9 J1 G6 V ^2 f
' D2 _1 ^' _5 w. q0 RI=t(:,:,3);
* k7 C+ ^2 b, E
; f3 Y3 w. s2 M9 Q( |2 B[height,width] = size(I); 6 x& e+ B; H% I) K8 g0 ~8 ]8 ]! |
9 L( z4 @2 |! R& U- d1 j. q9 j5 R
6 h0 b0 C2 f. W( p" }9 Y9 o' T9 Q2 Z
+ ] M6 ]9 p4 i0 ]! x* M9 b%下面使用直方图均衡化进行处理5 u" [# Z" f, n: m& \& x' w
5 c, D$ J' S1 ~) d%进行像素灰度统计;
F1 V! Z2 t: [# j0 b, p* [8 t v; Q' W( r6 B
s = zeros(1,256);%统计各灰度数目,共256个灰度级 + b# i) c1 h" D# ^8 i7 S# s
! N% S9 u/ Z- `3 E* i0 \' _- q: R) O
%绘制直方图. J0 e4 ~) y8 U9 R6 O
) C+ o+ E0 s+ C) Vgp=zeros(1,256);; x2 v7 x) z- Y" g5 o# H
" P8 V3 W& O3 [1 P' @( k) E, wfor k=0:255
6 W8 a$ r! J2 H1 M3 i5 B) t
& \. e4 \( E# C" t4 c gp(k+1)=length(find(I==k))/(height*width);* w* X& p, L. I6 O. y
* P, I* n6 w$ }$ x/ Eend4 m- X: N" c" R& \
# H+ @9 ?* `& I" [for i = 1:height
% E M- p7 h3 K! T8 }: r# j7 {6 L
' Q0 {- w/ P, J2 K8 E for j = 1: width ! x2 s4 U1 h- N0 c" f& I# Z' {
" `3 H$ S1 ^% \" e
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
7 \# U0 X5 R# ^
* b, p) h2 n d* m# m+ H& z end
+ D% s: f% T! m$ R5 g9 p7 p% P% m1 ]/ c
end 2 ]+ Q6 H) W" U; ?" B
9 Q C' ]; T( g; L4 E0 F%计算灰度分布密度 9 E* W& ?+ H! K3 ~( x; o
3 m/ Q* E& A% h
p = zeros(1,256);
, ^! t8 S$ k$ D/ y; f/ X' I$ p3 G/ p% d8 @6 w
for i = 1:256
) Q+ G8 P* s: Y4 g) P! U. _0 q7 I- ?
p(i) = s(i) / (height * width * 1.0); . H% _/ W; Z% \% {' S1 e- r
0 m& U8 g/ {+ d2 h$ a/ z* cend
( \$ \0 d4 U' w1 a6 |
6 v4 u$ Y% J7 V; M7 s. D%计算累计直方图分布 8 T1 W( S) M& A& Y) }7 f) ?2 Q: d
) c8 y' m0 R4 m0 Y Xc = zeros(1,256); : z4 I& M9 K0 v# @
0 v: T& v, o% x3 ?& {c(1) = p(1);
' {! B; I5 g9 W3 M3 D$ v6 Y3 Q" ?* B: X2 g8 B: J
for i = 2:256 " m, R) H0 J, v: E; q V
5 ^; C+ g' {( _2 F' _ i; z c(i) = c(i - 1) + p(i);
; R6 T" a# ]% V' d5 z0 P) S
/ p1 ~! K# y7 `$ y# E7 gend + k$ B2 B! I) x0 }5 ?4 c
9 x b2 q5 B( Z$ P+ O- j%累计分布取整,将其数值归一化为1~256
% ^& Z6 T6 h$ b7 F* V# V9 m: C
# u& m9 u) D4 X9 f: kc = uint8(255 .* c + 0.5); 1 V3 D# a$ A4 L- X& L
1 ~9 z5 w& i' T" b
%对图像进行均衡化( K6 A. }8 S+ m" }. `2 r. V* i
: C) e8 N+ p" m, q2 ?
for i = 1:height
/ k; Q' [) {! w' e1 t
4 A8 Q. \' {1 f7 ?# ~8 m" q+ k L for j = 1: width
8 n" l6 L8 g( K& o
7 t& p; H( V, q, r- Q9 d6 p Ib(i,j) = c(I(i,j)+1);
2 o7 ^' H* ~' \. C; Y) d5 @4 X8 s+ B3 B( B) o2 s+ w& i$ t
end
1 @) {% m7 r9 ?. ?$ W& p/ q8 F' j4 C) M2 A6 L3 M5 r
end 8 K4 B4 T9 V# c6 T" ?7 @# [
' K. Y7 i8 [* E: m/ {dis(:,:,3)=Ib;
0 L. y% ]! I1 t) ~- V( c R' R) `/ ~. @0 i! G$ p
%subplot(122)
5 A# a. t$ D1 u) o ]1 L( G2 }6 @2 m$ ?8 ]0 y3 t9 _
%imshow(Ib)%显示均衡化后的图像
4 _. L* g( E& q! I2 U0 M0 n
# I, e$ D7 X% a! Esubplot(122);
* Y: e- z& I6 T0 W4 G
$ Z. c5 K' P0 K$ Z9 i4 I8 V% qimshow(dis),title('处理之后的图像')%显示均衡化后的图像
+ w' F& i: y. Y9 p d" P! {/ Z
' ~3 G) U, L' _9 K4 y
# x: `+ D/ y [' C3 u$ B _( j$ C5 n( L
|
|