|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理
8 ]0 l5 K% E( m& o% v* u5 H; Z8 u, ?* ?, R
MATLAB仿真程序:
8 N9 V; w" r: T5 ?3 H+ ~+ G
( J1 j/ F( s5 @0 `9 [%{
" i9 |5 T! o& ]" l! a) B1 t2 w7 t# ]' J
基于直方图均衡化的水下图像增强(MATLAB仿真)2 p: H9 [ Z$ k
3 Q1 e+ t# N6 b, K* N1 G, C 对RGB三个通道分别进行均衡化处理,得到增强之后的图像
O5 e6 _% H; j9 v, k- `, y; C. l
3 ~6 w/ C$ X5 g) b: I 实际测试,效果明显,下面: T5 o6 ~8 ]* p7 |; V
3 K$ z% S# y$ l( o 时间:2014年9月11日23:59:01
3 G% D" F' _3 R
8 R7 h$ G' v9 E5 [( X 整理:天空之恋
- g! y2 `5 s+ A3 u$ p
. I* h/ o% l# a8 C: B: V8 @" f/ h 地点:桂电
7 X2 q: d# P1 q% v5 T; c- ^( ]4 x, v
$ |- U) b: _: v6 E( z* e%}
+ \- ]5 D% G, e% B9 N* r! d& S, P
( z$ _$ h: R& dclear;6 c. w0 g& n) v4 `1 C( v0 J0 ]+ W9 t
5 T4 B- C- X# v) L+ Y' K. [t = imread('wa5.png');
( @2 B/ I$ a; f. o- a5 }2 {
/ S0 `8 E5 M4 r4 `( f" lI=t(:,:,1);/ t; \4 ~# ~$ g6 q' L; a, X& F
9 U$ m+ i6 C7 r( w
[height,width] = size(I);
3 d' N+ g( Q* T5 h; I2 t: e' I7 q: a; W& G- s1 {
subplot(121);
p: N" v4 m0 Y" G0 Q& ]) x; d$ r+ I+ }, i, q5 l
imshow(t),title('原始图像')%显示原始图像
5 Q$ v0 P% g, R# o, C' K# C: c4 E. m; N- Z- C0 Q8 K0 ]
%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
3 {8 H1 F8 g* T. M3 y$ ~1 }' z8 G5 R/ A: A; c, t+ `
%进行像素灰度统计;
$ h, g. k% g) V. ^- j0 _) ]' G5 `
s = zeros(1,256);%统计各灰度数目,共256个灰度级 - k9 F$ }& J: J# k
+ p# z, M8 P/ a- i+ |1 J
%绘制直方图, T/ x" x1 z7 D7 z' J% ?" }% F
! K7 `3 w* `+ bgp=zeros(1,256);: u) y- [/ w! e o+ f; h4 ?) Q
5 Y) Y0 c" Q, @& I- m/ I
for k=0:255: u7 [# j3 f! M% m4 c" `. a
' g3 i! R: y2 O7 z: {4 ~# k
gp(k+1)=length(find(I==k))/(height*width);
. O5 q$ A: h. U1 t: t- G% f- d% H+ K1 R
end
$ _) J* f! P0 G; Z* B$ W! D4 D$ U' b
* p/ i' I8 [0 m. O7 D9 Hfor i = 1:height
8 q9 R i8 K# c* ]1 I
7 [3 u; t) l* P: }$ H- ~8 }1 F D: E for j = 1: width ; ?7 P/ C6 Q6 _5 [6 q
' I, \1 K8 d5 q1 e3 }+ w# `$ \
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
: E3 I: n0 w# m1 _ V1 n
$ R6 u6 [- t6 Q0 L end
. n9 {: \$ N8 v) r; `/ Q, o+ Q
" A) |" [' @5 K( o' j- Eend
$ e- n% A/ g! q6 J f
3 f) K3 [* f$ h: G%计算灰度分布密度
6 X; F9 _) `: g' C- N4 i* m" Y! L0 ^8 `! `7 y1 t) U s0 C
p = zeros(1,256); Y. m" B/ O! f9 w: [, B) @4 B
( ?) _/ y5 ^6 B: q- C. J) bfor i = 1:256 3 o0 X; z; d" j) B1 B
9 @3 h7 x0 g5 | p(i) = s(i) / (height * width * 1.0); ; Y/ p, f8 I- P4 r) J& P7 [
4 N1 w3 `8 J* q& N) R+ n2 H
end
! a- p5 w# r, P& N0 I
% J- Y) f' F/ V" j%计算累计直方图分布 ! G# z) H: Q$ _, [0 a
) J* B* d5 M. F) @* J2 Y
c = zeros(1,256); 5 {# l: p" W. _; S
6 I: k! ]4 y% W# ?, p' c0 t5 t0 H
c(1) = p(1);
& Y7 J( f2 L5 _9 r# a% z5 s8 F
. Y4 V9 A/ h9 [# cfor i = 2:256
/ a) q! m6 B, m5 x1 }3 q& q; h* ^, D) @
c(i) = c(i - 1) + p(i);
" o' }' q E3 x4 l1 Y: n- y) y7 s* _1 m7 |3 F1 l- J# i& s5 D
end 2 X9 [2 e8 [! C& R+ {- X
4 i8 ~. A# u5 t% O( ^%累计分布取整,将其数值归一化为1~256
4 X% a- p% F% h/ M# p
! p5 ?0 E, T, t: s' Xc = uint8(255 .* c + 0.5); & C, i; {; \* U$ Q) h
* H- k, O# K9 s4 b8 s6 x* i: U. K. I%对图像进行均衡化
, ? n6 z* A1 w6 x% \. X4 n
4 \9 A7 b* P9 b. p" Pfor i = 1:height
8 A5 x1 k. v& z! \4 K) ~- |, W; P$ t$ J1 `
for j = 1: width
0 ?! D( o" w% W9 I$ e
0 D7 B6 z! x. e" C- b; P Ir(i,j) = c(I(i,j)+1); " I' p2 d: C. v* n
# V s) }( e; A+ J0 m; P. y end * x$ N8 y2 N7 u2 z
# _) U, Z' \5 f/ ^& }, L+ {
end / S' C' F( ?: x9 q$ e, e* \
2 M f4 x; t, I5 s) mdis(:,:,1)=Ir;
( @' [7 ]0 |1 @
& W3 B' R0 S5 l+ _ V" x. F%subplot(122) / b4 c; E6 Q) x* e
: j% w; S+ ~9 y" {9 N; n7 Y' \7 E
%imshow(Ir)%显示均衡化后的图像# H1 x) i6 _% @: v" k8 @1 E+ ?
! d8 S; p! U2 G5 Y* r
%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
, B9 N& C+ S2 I& U- q3 @3 k% B+ J1 r3 ~, u: {
I=t(:,:,2);- i& `- g" j6 {% Y
# B- U) V' P7 Q/ I- Q
[height,width] = size(I); ! d0 \0 R) H7 p3 T' m ~
5 @2 N6 p! w& z9 q' f" M
( C1 d( F" ^# F' L8 i, `
0 t% N% l+ ^- w%下面使用直方图均衡化进行处理5 u+ T! g; R2 a: o3 ^8 U# o
+ l4 O @! ^ Y3 Z7 N%进行像素灰度统计; O8 e! H$ A. s Q2 ?9 B
9 F" N6 ~ U' r. x- Zs = zeros(1,256);%统计各灰度数目,共256个灰度级
! N0 D' y7 D: E$ p% j! h0 Y; }7 F! c
%绘制直方图
( q- l `: q: U% r& ~; d1 L9 E8 `# x, Q2 ~5 O; {! e$ a/ k1 e* ~& M3 U
gp=zeros(1,256);
! [! g; j+ y2 z8 E T9 T. {, P# h$ d3 b1 _* ~) T9 e4 z g" p
for k=0:2550 c( ~. H E! P2 q( [
" y, d. G+ A+ X gp(k+1)=length(find(I==k))/(height*width);/ g: {. |) O4 n) k3 Y" {- E9 E
+ X( A2 B( C5 y- a. s! ^* ^% R
end' B0 i/ R2 X+ y
: `1 R) c e( H5 S8 cfor i = 1:height
% D! Z# W1 P: G7 u
. ~" w/ z! L: ~2 @* V H for j = 1: width 4 O+ S2 g, A$ r5 o" i0 h
3 H3 `5 Y6 [; p' H* p. n s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
& O' h! j$ s1 l6 |8 e" i
% F# \, E( p# P3 e3 n- v! b end , ~' k6 B' i% W- T
+ s) b q- l2 x, p5 t" Mend : O. R( c1 s) ^, n) e
. T* p/ C. g, g; r, g) R9 _%计算灰度分布密度
. h6 I- |3 w% s1 `9 {2 G8 i n
. [, s6 ^! b7 `1 a6 k$ E* T3 e9 [' vp = zeros(1,256);
, ]6 W# K' b0 C2 m. c+ A/ R3 L4 P6 x; p6 p' ?1 V, b
for i = 1:256 7 U" n5 x( U3 N0 C
4 U4 \: i' r2 C2 ]# M" F; `
p(i) = s(i) / (height * width * 1.0); 3 ]% t2 ^7 k* O1 A) n
1 T- p" a9 |$ P4 k' k6 X6 zend
! k- B0 [6 x* q1 L5 j6 M% P" y4 e0 I- [2 L9 z
%计算累计直方图分布 5 y+ O8 I, t$ @* U& g+ v: }6 z
% c5 n$ X e8 Y; E l7 {c = zeros(1,256);
4 J" l4 }6 e! M4 O8 U2 V, {
: r" z' n8 \1 @, _* h* o; |/ t# ~4 u; A& {c(1) = p(1);* o! {) C5 E9 W3 b( H
* u9 m8 d. K! _& m0 B" {for i = 2:256
8 x. Q6 o B5 \0 @# d8 m1 s. U, r# B8 [# O0 \
c(i) = c(i - 1) + p(i);
! B8 f5 ~. F+ H& k# c" V& H. E: \9 [1 U
end 4 @; X+ @1 X6 @/ j3 u9 T+ q8 e# ^: S
/ F; Q+ C# p1 k6 m6 r5 F! v. n3 y! `
%累计分布取整,将其数值归一化为1~256 ! T4 m x, u. {6 N5 i. m; z) K
8 k) c) b; Y9 h3 I
c = uint8(255 .* c + 0.5); ( H' v B6 Q, G9 W$ q
. T# \" i- T) e" m2 P! l
%对图像进行均衡化: f( [$ i& k) f! g
" ]" x7 N/ V3 S. E t9 G
for i = 1:height
' \& E, q$ }% K2 F1 M9 B5 K3 ]/ o
for j = 1: width 0 T5 P' a9 w, ~" y+ a# h/ b
3 d' j0 K: [6 T6 u* F# \% n Ig(i,j) = c(I(i,j)+1); : U6 W1 z+ G9 e
3 X& Y" |& J4 A& W4 p
end
; I$ y/ J- [, d- H0 \; E
# i# l* r5 |7 c* U$ V; wend 6 _6 O$ G8 o$ L2 Z, e
! ~2 u9 G& J2 |. a6 W- h4 `7 m2 i8 z
%subplot(122)
: c9 }4 h& W1 E4 L% l h% Q- ~/ q
0 j# H3 n4 d. B6 g%imshow(Ig)%显示均衡化后的图像
/ k4 D# e; h3 n' Z0 f
. ^2 k0 y: h1 |# b, H$ Edis(:,:,2)=Ig;
# q/ c) Z, C- M
4 j5 T: |4 J Q! T/ L' X. ^# S) H- D' q" ^5 Q
. V9 S( D6 j0 f0 O; u%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
6 H0 {0 I4 h+ }/ {# W k0 }# y" W: l
+ I: X5 I3 ?+ ~I=t(:,:,3);5 B( ?! ?4 ?; A+ U6 J' {
, x; u8 z% x8 f5 S; L8 |6 |- c[height,width] = size(I);
0 e8 h" f1 F/ |; m1 X/ O) ~& u& f9 ~6 Q1 K e. T
8 b u/ }( q0 p0 f$ |
4 w8 E# A7 @: O2 l9 ^1 L%下面使用直方图均衡化进行处理. ? z: O4 g& d: D3 A
2 H' s: J6 S! k- Q$ t7 N! \- M+ C
%进行像素灰度统计;
. @* H0 I; i- S, I" ?8 w2 [% K& }* [( N
s = zeros(1,256);%统计各灰度数目,共256个灰度级 & s# g2 S6 [9 C5 J, f4 w
, p# E% s* U7 h8 P4 D5 ?7 [6 O9 T%绘制直方图; S0 ^2 m# M6 ?3 q( z. y8 w( N
3 |5 j5 ]* U$ [ N! j8 l
gp=zeros(1,256);
O: f9 e+ H2 k6 P
4 P/ @0 e3 s5 u1 L5 k( y7 Efor k=0:2554 @* B# Z8 E# `
o: [; b6 e- m, G/ ~ gp(k+1)=length(find(I==k))/(height*width);
% E; w2 z0 w4 d3 G+ i0 Y5 T4 c) Q0 w1 i% f7 m3 h
end2 Y: L }" b: V; {$ d& R
9 j. p A, e1 R0 ]& Dfor i = 1:height
* q3 G* D4 w5 q3 c! C- Y8 Q/ M4 `# ^) A
for j = 1: width
& g; v+ H9 N, G9 G5 j8 |% A( k, M! d N* T
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 5 h7 x9 L7 g5 `& u, m' E
7 g* j& y8 M: A end # n$ Z; w# r& |( }9 o% ~9 j
7 K" i" ]2 M( s" s& m2 Q
end ; k( L) @1 \( Y" N$ X
: ?* Z3 e0 K9 o7 j. ?5 v$ ~
%计算灰度分布密度
" l6 \) M& f/ `/ A# T! O9 h; L1 ?- J) E) f
p = zeros(1,256); ( w4 o7 O7 @* ~/ x2 h8 s1 T
! Q3 A: D y) M- }; t6 V
for i = 1:256
; i3 f! Z, T' T' h3 n- J [$ x/ K V6 b
p(i) = s(i) / (height * width * 1.0);
2 ]; y) P0 {( g: z% T5 w0 O# J% e2 J0 |4 F& n& s. l3 N0 Y* f
end ; T0 H" c/ T/ W7 B! g6 d! A
' Q6 D0 |: |8 h) W) L) x# J9 ?%计算累计直方图分布
+ |3 t5 l4 Q& H6 `9 T, s0 v: W2 D% }
c = zeros(1,256);
) H, r5 x' F( S, g+ ^. q
" E. z- O V" M8 r. Gc(1) = p(1);, Y8 `2 ^ g& e- r; C1 s
" B4 [) p) b( U5 W7 ifor i = 2:256 1 V5 b% A2 |1 |* ^) z8 A
0 Y) F3 u# ]. W% e0 a+ f: Z( ]
c(i) = c(i - 1) + p(i);
& a/ ? C( D2 O( U* n- c
9 w4 E0 v3 M9 e6 vend
2 j8 M* h/ c( O: g: y' h
* W( J+ w6 x9 R m: s3 f( Y%累计分布取整,将其数值归一化为1~256 + p, T9 M# S& j; @0 I
/ i( g! ^. D( H1 a! H9 x0 u2 {c = uint8(255 .* c + 0.5);
$ G8 m9 T) K0 [8 u, ]0 _) R9 q5 w7 o2 U- o
%对图像进行均衡化0 i p* J5 B% w4 d1 [+ C2 P
6 O4 t: I1 Z* J* z
for i = 1:height : `; M; f/ K) w& `5 G
: g O6 ~) N1 W1 ^+ q3 O
for j = 1: width $ ^. s! w7 J, Q; A
; n$ D# @8 [( P- P" k, f/ R
Ib(i,j) = c(I(i,j)+1); " |( Z0 i" y" b% @9 R
5 Z: [5 ?3 c5 t, v# [; I) n1 T
end ) a' I7 z. q! h/ l/ A4 V
l7 P: a1 @0 t0 V! U# N# n
end
8 a7 G% z8 x$ ]
& D7 G4 n2 ^% Z# w7 {$ \dis(:,:,3)=Ib; 0 ~; x* K3 I& f) J/ w# X' t' v
$ [% t- ?! ?8 L%subplot(122) ( P, h+ A2 s7 o% X5 @2 i' i/ _
. i) ], c7 n* Y/ G) k5 E8 C1 v%imshow(Ib)%显示均衡化后的图像
$ n6 f4 I" m, x$ ]" D$ h$ v2 J/ ^5 y. R9 t+ W
subplot(122);2 m7 r: |) _, ?3 O
" u* B, [$ F: p. {imshow(dis),title('处理之后的图像')%显示均衡化后的图像* L s9 H4 J* S! t& n0 l5 Y
, V4 [2 L, \( L9 Z9 G) n
/ j( m- d1 q1 ~- _" I
: n' Y5 H& X& n8 r- ]+ S |
|