|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理, y3 H( ]% J3 ~8 i& s5 a$ r8 y R
! V; a# n7 X6 Y. q% \MATLAB仿真程序:' u; L& B5 G) w8 u
. |4 _8 H$ \8 E
%{
+ a1 `1 P" r7 ]2 Q; S9 B+ I, m
/ C! e6 i' C; K. ~) H! X/ E 基于直方图均衡化的水下图像增强(MATLAB仿真)- b1 M, m2 ]2 p/ i$ U
2 k( Q; a3 _9 R1 T; W. \9 Z2 V 对RGB三个通道分别进行均衡化处理,得到增强之后的图像
! O7 `+ P1 z5 c# \3 a
# B, q3 A. \$ o$ a9 {- w 实际测试,效果明显,下面: Q6 c% c4 Q+ I' o! R& y+ G8 Z: \" q
9 U M j! m& k% ?, B0 U
时间:2014年9月11日23:59:012 h4 d( o' x; L: g. S9 \- N
& a2 G. R% j; ~% B- q 整理:天空之恋
( \ | F) p9 v$ ?) `
( l# C2 W+ ~$ z 地点:桂电) [) V# l1 I- h7 |2 a2 c7 [, e
& ?1 M* v4 a+ p9 p( ~; l( H
%} M/ ]1 Z+ |3 k) L2 S
" w$ W! M. z# |: }& f3 \9 u0 {! j
clear;) @( O" a4 G: N" ]( z" H, m
6 t5 C) D3 I' e: R0 T1 X3 L' tt = imread('wa5.png');
! e1 J* B' ^+ s2 t; o& B- o' o6 n" F7 j5 G1 s# E
I=t(:,:,1);
( ~/ W/ e( ?* v5 H% b5 ]
- b! Z6 [1 a( O W+ W- w' p[height,width] = size(I);
, c7 u3 B2 e" r0 g& I9 ]: C
! ]8 p. C" a$ R, X" Q4 Xsubplot(121);
4 n! x. g: U0 l5 p7 G# p) {1 [8 r! @; i% }! E( b! X
imshow(t),title('原始图像')%显示原始图像
# ^' L/ Y) N6 a) e0 f
8 F: N5 P2 L% ~! E: H%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用! v: Y8 e8 K0 j- R
1 _, v* k+ {% z1 t%进行像素灰度统计;
' H- G. v2 L1 r2 j' i
2 Z. X) p: F! U( D- s; Cs = zeros(1,256);%统计各灰度数目,共256个灰度级 + X) d3 B/ W5 m6 Y7 ?- Q
0 i: |- r, s5 G* @, {0 [+ t%绘制直方图, N! v# b2 W* |8 R+ V' {' E9 V" W
9 A4 k- r( ]& b7 N' Z. N- P
gp=zeros(1,256);" R3 x) I+ n, l) v" q
+ p. P8 [2 k3 L8 l& D% [
for k=0:255# l0 @' O" T3 C8 R
! C) r2 T( J1 f" N5 I' x
gp(k+1)=length(find(I==k))/(height*width);
, w0 O. a5 p \9 F/ G) o
0 B/ d" a# I' |, b% b3 a' ^end4 K4 {* C. s s1 H( z4 U
$ E1 y$ r( p8 hfor i = 1:height
4 M& F& I O3 }; I- Q/ t
' k# t' F' w) ]0 Z+ [ for j = 1: width / v* U7 u' [" I2 |' ~) B
3 l5 G( V/ Z4 P2 \( d2 a
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 2 A. o$ ^7 m& Q- a$ a
+ e2 m$ C( t; u. H
end + k& Y3 p4 w: Q. U7 m" w! t
' j7 c# [, ~9 C6 J+ f) l- k4 |
end
. Q! f# J) p0 Y2 I, W
6 x+ T' o0 [; a# b8 w%计算灰度分布密度
- Y8 S. P1 ~7 z ~4 C+ z n% ^8 Y1 s4 H, B
p = zeros(1,256); * R) V6 l6 }6 c) q* b6 L
$ u* g6 F3 M4 c$ x* ]. p6 Ffor i = 1:256 / k, w$ Q# @( d# w4 v% t! X/ k
' [$ w0 ^/ v4 Y& F5 v p(i) = s(i) / (height * width * 1.0);
0 R, }0 i0 u5 ]" X8 Y4 `0 }
& L" V5 M& O+ o1 uend 8 k) L* p) \( C) X7 f
7 _5 i8 E7 a5 L2 k5 [: s2 _& o
%计算累计直方图分布 9 q; E8 d5 \9 O
$ ^! m2 F! A8 I) ?' U
c = zeros(1,256);
/ p8 ^# F" d }3 S
' U) a$ g6 G- L; }" t9 }6 V- ?c(1) = p(1);
\5 h7 S3 x5 j/ t
! M& x9 h5 o" x' K" d! d* Cfor i = 2:256
5 B4 _' d0 |9 S+ H0 h
+ l8 D$ A u2 s9 D3 L% ^ c(i) = c(i - 1) + p(i); ! }% ?! ~% f m' M0 D+ S' N
& J( N0 ~- z$ W6 P* g2 mend ' }7 H+ u4 y: ?' [! H
7 ~1 e/ d+ L) ]$ }9 h%累计分布取整,将其数值归一化为1~256
7 m J- q$ R& X6 c3 z/ E, B0 v$ Q2 B( o4 A5 y+ b
c = uint8(255 .* c + 0.5);
+ L$ m) C2 U+ V' P! Y) A U2 O. ^/ A( q
. q/ q+ u/ ^5 `%对图像进行均衡化' s) ?' b" J4 U" W+ V% M
2 [3 V2 V: l1 u% \& i
for i = 1:height
% y, i4 V0 }; d/ ~& }
+ i: Y' L6 Y6 B" U9 V6 w; m2 Z for j = 1: width ) P3 C) W( o; ]/ K- u3 s
2 r+ ~# J9 L- r$ A
Ir(i,j) = c(I(i,j)+1); ' `7 D9 r- _: e$ F4 {* k9 u
4 ]/ s8 V$ g) N, a# Y. m end . \1 l$ |6 ~0 d# G6 @' R+ c) ^
H% \* h2 ^/ F$ n. s: [
end
1 K% X1 p0 ~- X2 Z0 [+ v3 J4 p
6 N2 K/ e7 L2 ]9 |) W& \dis(:,:,1)=Ir;0 u$ ^9 B8 K( E8 z
* @8 m3 k% F- B h4 \%subplot(122)
) P$ n6 _8 u+ W: g: `9 _3 b. O7 }5 G$ n! L
%imshow(Ir)%显示均衡化后的图像
4 r+ n# A! `$ {( O+ T6 s7 l9 s9 m4 j2 L' Y. ~
%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
$ Y2 d( R0 r$ @# J1 p3 r
7 N1 Q7 q; K- Y6 V1 m- e. KI=t(:,:,2);
; g7 {6 m' H7 S% `. P1 r4 D ^& }/ J8 S+ r( J
[height,width] = size(I); ( w5 D$ w; u3 ^
* g( S& ]6 f t( V9 c/ m/ }- _
: N' G( ~+ b4 p
$ e/ a7 q& ^/ w5 S* h& c%下面使用直方图均衡化进行处理
1 ~4 l) [0 ^3 Z6 e- u( c$ v; o0 `0 k& ^) N
%进行像素灰度统计; $ P; J+ ~, t2 `. j2 F
$ ~. w8 u9 V0 @s = zeros(1,256);%统计各灰度数目,共256个灰度级 * i5 S* L' G& T- y- y9 Q
( |0 D0 n, v5 H( k1 f%绘制直方图8 ]0 z, D" O" D) l1 N; ]$ N4 V
3 X8 C2 l. T8 i. n* Kgp=zeros(1,256);" O+ X: Z& V9 A( u* j1 |- {0 ^
2 v# h0 Q7 J( s! H, i& u6 N6 J" a
for k=0:255
; e. O# t2 L- C; l2 |: K3 f) ]( k( e
\8 P2 f" Z. y z, x' t gp(k+1)=length(find(I==k))/(height*width);
2 K" n. P6 Q" ]$ ?; c$ f" d, N7 r2 d. N8 f
end! S- O4 D$ A: c
! R1 n J* [1 r( u/ ^for i = 1:height 1 p3 e' A4 U4 {7 a9 e i& o5 a. p, q
2 c" E2 B1 T# s) ]
for j = 1: width
, O" G8 M" {' A3 N3 l& h6 |% n; u7 `% l* u6 L+ ?' E0 X+ {) Z, `3 P/ F6 |
s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 * _3 m P a, p% f; y/ L$ S
3 S: I) ?( T: c* i
end
- U( B6 s" s3 S8 Y/ v- g6 h
7 o- V+ w, U, L- y" Gend 6 D3 L, p# ]. O/ q$ v) Z/ {
2 {" x/ i% b( m%计算灰度分布密度
! ?( r$ B T1 O; P2 x2 S5 x) k, \4 J5 h. a( _, \1 q
p = zeros(1,256); % H2 L2 F! W9 E! y) d# q
4 ` _' g$ w& M( ]
for i = 1:256
" a) U( {0 O' X+ W7 l$ m) x
. D7 v$ |& |4 \4 O p(i) = s(i) / (height * width * 1.0); . r% H$ N+ M3 T; D9 Q+ O0 c
. a, T9 j0 r" ^6 I. U- p
end ) b, s7 a) }7 Z; g- W
8 J; @) J# d! O# ]0 _& V
%计算累计直方图分布 , O9 E0 M E* T2 |
3 C7 T$ @6 m; z& ^c = zeros(1,256); 3 B/ v9 \6 x% F# m4 t
7 e1 E( r! n3 d6 r8 [
c(1) = p(1);
" e' r/ `" P$ E5 {$ Q6 P0 r# }4 R; H* ?
for i = 2:256
# Z$ \$ |( @" u3 l8 H" J1 O2 G' H; @) G% N; w) K# J0 }% w
c(i) = c(i - 1) + p(i); q6 M2 P/ ^0 f, h& u5 \
& B$ X0 [5 C* W- Z8 w! d+ A
end
+ t4 `: v- I9 A: G6 ?/ ^+ M# `" _
%累计分布取整,将其数值归一化为1~256 0 ^) [$ c* {, X% x* N
( G1 x& g: c5 s9 _7 s( [, u
c = uint8(255 .* c + 0.5);
9 K9 ?$ n# S, A0 s
) v& L) A: A: q0 d5 b! a* m+ {%对图像进行均衡化
& G) [+ V& X: E# t) b" W3 W6 w* n5 b5 v4 l
for i = 1:height 5 ^8 B9 w( P3 x9 ~$ c4 O$ Z$ W) M* }
) m) o8 w( G6 o6 N. W for j = 1: width + i( r4 j1 p. \
+ e. |2 e) w8 p" V Ig(i,j) = c(I(i,j)+1); 7 M8 q* \, o) n% v$ S
. S* x' \# N4 r" I end 3 } H7 S2 f# Q3 N, N% w( u
! T9 s" ]3 m1 d. Vend " e1 r+ x. Y- m- P1 @
: q. u; S2 Z* T0 S1 S%subplot(122) # q$ \ |! {, C3 G. [- l( T2 R
0 J# T' ~; a7 k( u9 A%imshow(Ig)%显示均衡化后的图像
) C: m1 |$ x+ ?3 W7 H& @" i( H5 k0 M* [. D% w
dis(:,:,2)=Ig;
* S1 @2 g; r: O( }5 k. Q9 g# S) N! g2 A6 S/ g7 R
+ u+ K+ a9 |; ^! k$ F
4 y" i- P* T0 T; T/ K# R3 x& Y8 p. @%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
% |6 k, X1 u7 c% b1 w1 I. B5 d5 j$ j' M: {9 g
I=t(:,:,3);
5 B9 ~7 B: x8 t' X# {2 k6 ?# x5 \7 S
[height,width] = size(I);
, [6 v9 p- v! ]# M) T. o% J4 U* w1 v3 D- V, \% @
7 Q! D6 P5 s" W P% t" X/ X5 {
# R; P G6 I' R
%下面使用直方图均衡化进行处理' r$ b1 p3 m) f2 ^/ u
L0 a2 {9 f. }9 S( H%进行像素灰度统计;
. u" ]3 F+ u5 R K! F( f. t% U# O2 x% r( e- C2 U
s = zeros(1,256);%统计各灰度数目,共256个灰度级
, j9 b& b3 a( B$ j }2 G/ q' e" k8 W
0 Y+ h4 ]; a% {/ X# u; H%绘制直方图
) t9 v; W, N6 k
1 e d: G3 |# W, \: ?4 X6 f# b5 ngp=zeros(1,256);- N8 v- ~5 F; I* K! y
3 f4 ?; ^( R' @6 O- Y% J& L7 ^for k=0:2556 X* ^7 [) A# ]3 l
$ I7 U6 i. `. } G
gp(k+1)=length(find(I==k))/(height*width);
) Y+ D. O/ H5 I E8 i0 |# H# [1 Q3 l2 ]1 M0 J1 W S; w4 |; `8 y
end7 \- b K) H1 W+ i. l1 L m1 |3 D/ R
, W+ s4 k5 T7 J& p/ r% O0 j5 @
for i = 1:height
9 w5 U M8 m2 \% I9 b
, r" `# G- d( p0 L, ~ for j = 1: width - \# K# T4 O3 f; V3 Y2 B
# {8 b- k; E6 y7 W" a& ^ s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
4 O7 v) L& `5 v$ L' f. F% M: k! v; X5 l2 P- w' @7 B' L3 J
end
4 E5 I7 a- p' `$ b% ?2 l- o' S S; ^) g
end " f% y5 w ~ x; g4 P+ S1 H
6 U8 y0 N( @3 X" I1 M1 }%计算灰度分布密度
* {6 K1 Y& U# C# F" X; E6 d* i. x: Z: o* k( r+ U
p = zeros(1,256); 4 Y; m; g2 ~3 E3 s! b% s0 G( o0 t* E& S
* P0 u% a! r% ]4 R' K3 Z: |( p
for i = 1:256
1 k% ^" ?5 S5 G& n
& J& g* @% U" c p(i) = s(i) / (height * width * 1.0); ) T* G, j, e) l
7 X3 t. ~/ H' a! e; ?! m0 jend 3 Q& |5 V* Q4 {6 g
3 ]1 b o; X+ p%计算累计直方图分布
^% d- G- t7 B5 _$ D Q7 i
/ u/ q0 M1 Y, i+ b, U6 w' Pc = zeros(1,256);
0 A3 w! ^' l9 J A0 D" v$ M0 D1 v, J
c(1) = p(1);
3 E! o3 W% |" y
) H8 N- n, e& L( g' |6 a& tfor i = 2:256
% q5 H' S: s% `* Z& R0 M
Q4 q5 o0 A) F: W5 O. P c(i) = c(i - 1) + p(i); * f' k2 c3 q% Y5 k' z. e+ Z" p7 C
/ Y; B, K# c& T3 f) z
end 8 a3 P, Q% u x. `! J$ l
) J# P& r$ Z& E6 t: d7 p%累计分布取整,将其数值归一化为1~256
M1 Y s2 F' U) {# N2 ~) ]) t, e+ Z5 t( M
c = uint8(255 .* c + 0.5);
* w8 Z. |+ Z. r# [4 z* ? F# y9 s, ?
%对图像进行均衡化* \3 I! M* ~. g
4 u% `( x% `5 X" |
for i = 1:height
% M, B3 \7 d8 M6 T: B
5 \) I! K& Y: S2 p6 c( x0 ~1 D for j = 1: width 3 u( s1 s0 ~* B
3 V/ z4 W5 r% p9 \
Ib(i,j) = c(I(i,j)+1); . i$ i- e5 `1 t1 M3 \/ L; M7 R
. Z/ d) ]) d1 k" i8 i) z0 T
end
9 X, L6 X/ J% q9 J, g. n. O
6 @6 O' t5 F5 ~/ W+ S9 Vend 3 C+ A F* ^2 ?7 I) i$ e
9 S' E- @# B) T, U4 ]/ Jdis(:,:,3)=Ib;
1 P. C$ E( ]4 J# O4 z$ K/ }
7 e: I% K- m4 h9 A%subplot(122)
7 K4 b2 y$ `0 l
* b+ M9 ?$ Q+ j7 Z, G, Z9 E% b$ d%imshow(Ib)%显示均衡化后的图像
% Z6 p- O! @# H% z/ y
; ^! ^( E! F4 Z/ j% A- r9 J3 d/ zsubplot(122);
" o- Q# f3 z4 o, r' z' {3 v) t9 ]# R
imshow(dis),title('处理之后的图像')%显示均衡化后的图像% @7 S0 ?, G8 e2 `4 ?
: Q$ ^( q @, T% x. n o) h3 l
/ H$ m _% V1 c% g/ x( N, F$ ]6 w6 k+ J y: k# Y% o
|
|