|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
用MATLAB仿真基于直方图均衡化的水下激光图像处理" d) i) c6 L5 V: @- D
) H* q' G+ Z. L0 sMATLAB仿真程序:6 J: q4 c g# ?# {
7 f3 A5 H( n5 ~' |' |%{1 Q; ~6 q8 ]+ @ o3 n
, h- j& ?: [$ Y& h* J
基于直方图均衡化的水下图像增强(MATLAB仿真)
" t2 D4 `% B* D5 J6 b/ e
$ T/ l0 g. u$ q 对RGB三个通道分别进行均衡化处理,得到增强之后的图像1 |* h" U/ ]5 c& T4 d; _# N. X7 a
$ _- Q M0 [3 h4 t- j 实际测试,效果明显,下面5 D5 }6 ]% z* k9 [5 j0 T. Q; [
9 A4 z6 h/ \# G, x, p
时间:2014年9月11日23:59:01
^( J' h) ~3 Q6 N& J. i
+ u& k7 A" G5 F& d# P7 W& {' ?! {& u 整理:天空之恋+ h) Y9 I; [- T
) d9 {5 n' _0 W% S9 U8 S
地点:桂电
" ^8 o0 Y" D, [( O& q3 O% I" S5 N3 m' D. z# |
%}
$ K& M1 V( q* ?7 }8 @4 S+ P3 v: W# {- C+ M# \7 k
clear;, C5 j/ q9 q, J! I& r9 v5 B1 y9 l$ d
7 L) h5 o: l) `$ e. u& e) _5 ?4 I
t = imread('wa5.png'); 8 u+ \0 N, V. ?" y
8 h/ o, S( z" }% G3 GI=t(:,:,1);
5 R- f. C& q, Z5 P6 V4 P/ C" P4 B1 ]0 a O! D' ^- z! l
[height,width] = size(I); # }- K7 ?5 A6 {' b
\) I$ H7 V& W/ Y3 G l+ b
subplot(121);$ s1 n) E/ W- ]! K' Q. ~& d' y' j
; \+ p0 i: |+ ~: Q' L
imshow(t),title('原始图像')%显示原始图像
) l0 M) ~, X6 y+ b! t6 W9 n0 O% }) W# ?! _/ \- {# }, t8 E
%对R通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用3 m. Q2 N o) |+ K& U9 J \8 O
$ F& {; i3 q- }3 G%进行像素灰度统计;
: c/ K$ W, B. H9 _3 Q; m8 L) l: I0 U# [8 q" V& P% N* Y
s = zeros(1,256);%统计各灰度数目,共256个灰度级 5 t) Y/ ?3 ]. p! F$ x8 ?
6 V$ E: |! e- R4 I%绘制直方图" `7 S$ P4 q& G) R7 T
- Q) V7 _) U% V7 ?' vgp=zeros(1,256);
- a3 E) d$ Y' G A
3 }& l% C9 |4 b q& d6 n. y0 Afor k=0:255) f$ s% Q) }/ B& k& e
( j; d' X6 o- y/ ~) N# N. L1 h
gp(k+1)=length(find(I==k))/(height*width);' R# s' Q b; \% e: U( g: i$ S
. o" I5 I/ k5 T3 P8 k6 J$ hend
* R' F: j' G3 s/ u# S3 s# d6 p, V4 n; i
for i = 1:height
9 \( a5 i* o2 B: A3 }
0 \& I* }6 f+ ~# U6 H* E for j = 1: width
7 @" m! x* A9 s' }9 F6 V; ]
1 P# |/ u3 m6 x+ q$ @4 e! t s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 4 u7 I3 D' r+ ^
: M, D( T$ I$ v7 m6 N
end
1 R% X$ i3 O) R' u$ ~
" I6 B8 b9 C$ r( n/ P! Y) ~end
6 h: g( t3 y, Y9 @. d* Y- c, f+ A. ~# `
%计算灰度分布密度 - z) C# M0 M- n O
& |- t0 r; b3 C2 B) ~7 j3 kp = zeros(1,256); 6 y: s; U/ K# X
0 @0 t# K; N) `' d2 a- g5 J* Hfor i = 1:256
! |1 Z; C6 }! r% c, c
6 |& g9 X( _; i; ?+ i$ u p(i) = s(i) / (height * width * 1.0);
$ R5 @, X8 E# [. k! e) h% Z8 {9 L
5 S! ^; c0 }$ o! _* ^* u M* n! [end
. u. @# H- l& P1 d! Q! P, z7 n- x ]/ A! m$ o' Z
%计算累计直方图分布
+ ]: U& {+ _7 ~# x s; b' n1 p/ @( f$ z: T5 d& i: F
c = zeros(1,256); & ~/ H" N* t! F% l" e! v
, @; B( s, W. P( G9 q
c(1) = p(1);7 z& j% i1 U! w! b& z% `& P
2 G& o3 }: v0 e" [
for i = 2:256
* @9 d( ?4 g( Y3 R% ` ^1 v% Z+ p4 q I: x8 |
c(i) = c(i - 1) + p(i); ) z/ G# c; g; F' Y7 E, w- w! g
' `, O0 E" l7 k3 T5 U
end
4 I/ Y& {# K/ v. f( B; v# g1 n( ]% `: r2 M4 w$ p4 ~
%累计分布取整,将其数值归一化为1~256
0 A8 T8 s3 U# [& ~7 o# @; ~/ `- O0 H, z; u1 ^1 G- f( w- [2 ?7 _/ ~
c = uint8(255 .* c + 0.5); 7 T) Y: [0 \1 |0 L! n
! @4 c }5 S3 R) \: O4 j: r, @%对图像进行均衡化
% y8 `* l4 L* o) x# p6 [8 W) l
. a- y* P& Z1 i& W& z) bfor i = 1:height
6 Z3 Y( k% ~% \. t- e0 }+ ~# g5 h# ?
for j = 1: width ' A) ^4 f4 N4 p" L3 Z; _
# Y; Q/ R- w: J
Ir(i,j) = c(I(i,j)+1);
$ u U. Z! |9 |. {) {/ _$ w4 ]3 ?
end ) q' w4 n5 `! q5 |/ w, F
& R% g ? a( ^; d
end
1 @4 A+ ]* r9 c3 z5 ]9 \8 a; G o. P6 A7 l, X9 t3 x: a
dis(:,:,1)=Ir;6 T! t$ g- d& b4 X+ U
8 d* X+ \5 U) A. {% W6 w* r%subplot(122)
* Z" s0 u7 w* n, W! R0 \! w# z
8 W. G8 [" h; }- I* x%imshow(Ir)%显示均衡化后的图像
; R' {! w( j) b9 `' D
$ n l p" M+ Y6 `%对G通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用
5 y; w- X# E0 S( [3 D9 ]& V) ^8 I1 {. q- o# P# ?
I=t(:,:,2);& y$ s& b% P4 K& u6 `
. j, `6 P# N1 j5 y: [( Q3 S6 g
[height,width] = size(I); 3 z. W: w, t9 ^; @
! B: z+ @% X7 p
. O7 Z& M' K ]" p6 X! k
; e% y8 `0 d9 U8 o% X6 o5 I%下面使用直方图均衡化进行处理" _: O( P3 O8 b2 h/ @3 \4 ?) m
9 ^1 W# K R+ N" J J
%进行像素灰度统计; 6 k) q5 D. ~0 c
1 T, S7 {! t ?% R M
s = zeros(1,256);%统计各灰度数目,共256个灰度级 : y1 W! f2 ?3 K' d
4 x4 I- _- H( f%绘制直方图
a3 g' `3 K B& Q' h8 |) E& \$ H! y' v& T( c
gp=zeros(1,256);& C) |& \" S# x, S, s: i
, U0 U% M' s+ b6 i3 `
for k=0:255
% X) ~" {' Q; q* Y
3 @7 y1 S8 ~% e3 c* e+ f gp(k+1)=length(find(I==k))/(height*width);
) Z1 a1 {$ v2 N# U# g& O4 A6 T3 h5 p
end5 [4 ~6 c0 F/ F: w
- @# b) D5 p2 }; L- J7 E& i5 W) |. E2 mfor i = 1:height " g4 ~3 a" G$ W
; ^& i4 v+ h6 u% I/ e
for j = 1: width * m* u$ \: s- i1 Y. A/ N% I3 j
w7 \8 [5 C& ^ s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一 " t; @) E% |5 w- b; F- `) q9 k9 U
& W3 a* q6 V' X
end
' K+ |! Y0 \( f( W6 I2 E: x! d, I- e2 E* A% Q9 B
end + v. O: l- p4 Z( l; J* g3 l; u( x
6 h: {# `- ]$ ]% a+ a
%计算灰度分布密度
. z8 n7 Q6 e5 }' \ t/ ~: K% L! @0 F2 W, ]1 M
p = zeros(1,256); * L. T0 g6 b9 F* `8 c
. E; i6 s" o& Z% V4 Z( Z
for i = 1:256
/ D, Z) U% B2 N3 P$ @
- X$ T1 k5 l' E6 e9 U& p" | p(i) = s(i) / (height * width * 1.0);
: q0 E3 K1 x* d/ E9 p" @: t9 k: a' O2 |
end 6 J/ W* w" k# _. h1 j c
; G) T8 e$ O3 D5 o
%计算累计直方图分布 - {5 F @2 C/ i4 w9 H4 x; k
( x" B* l5 h6 _
c = zeros(1,256);
( F) g! }( a0 z' ^, V: l% h" K; N2 f$ y3 m% G" L
c(1) = p(1);2 k8 V6 f" n8 x* Z' _# t
/ p" [9 O! d* Q0 J$ N$ `) Z- T
for i = 2:256 & u. K9 c8 h7 v, k- Z
- _" K/ y5 ]" E5 P6 _
c(i) = c(i - 1) + p(i);
3 i+ k5 S* s* v: U7 F9 t7 Q$ B) l8 s) N t, f; q0 n
end
. V& o/ T j2 ~; ~" u: V
1 Y, L; ?+ O I# \: R/ _%累计分布取整,将其数值归一化为1~256
( q# e9 s) d/ l3 c, }( V& ?# b/ d5 J4 |) Y5 {+ H e7 R
c = uint8(255 .* c + 0.5);
+ ^$ |- b# s) f8 h! u) p" ]: h" d' q. ^
%对图像进行均衡化
! k* g7 z% B: D7 [8 [, y$ j; T. w
+ Z7 n6 j9 s& x6 j- Efor i = 1:height ! J6 C5 K3 X; _& J, S4 z
$ |( d2 |/ o$ X8 U' _# D+ _$ Q
for j = 1: width
/ I; L( a* Y: ~; J# q. e
0 y: L1 Z2 X# h- N3 g" u0 d2 k Ig(i,j) = c(I(i,j)+1);
2 p2 p& _6 b+ }+ E# R# Y: L& h x2 t$ n
end $ L. H% ?' _. u3 t1 }& l3 C
# `9 Z9 Y+ R; c# Y. q6 jend
- n3 r4 O' ?) ~* H0 A* \7 |' `, K$ E4 L0 I4 F1 R
%subplot(122)
: z! q1 w$ \. v
3 n$ i" Z: x& h%imshow(Ig)%显示均衡化后的图像
2 X# ~ r- b- j; \
0 _4 }: m7 P; X- s' ?3 mdis(:,:,2)=Ig;
( q8 a6 }& Z' }8 a' e7 f
6 \- i0 Z8 Q& N1 g3 w! M
' o6 \; [% a% K- J! x; F0 {8 B1 i
%对B通道进行均衡化处理,均衡化可以写一个统一的函数,直接调用9 e- p+ l2 A5 @8 F
8 z6 E( j& D( g' y; hI=t(:,:,3); [! U8 N( `' V' y1 R/ B
6 ~% p% Z* _' X" n/ q5 y- b* x
[height,width] = size(I);
/ O- ^5 E. y' s& _0 C, n/ p) q, L7 \/ Y
" @7 g ?6 |- b, X1 W; n: h5 X; R9 D8 k7 v
%下面使用直方图均衡化进行处理
2 F, p7 u% l9 K; B) Y1 g+ G0 G1 ?! z7 l6 @! t- Y. `- z. y D
%进行像素灰度统计;
0 A. G( _1 C6 S& p$ P8 W4 ]# b0 N, `4 R
s = zeros(1,256);%统计各灰度数目,共256个灰度级 1 _ I2 w j- ]/ w
' ]2 u5 V2 X' I4 D; _" {( [' N
%绘制直方图& v% u. G( ?2 W
) A1 R- e2 k2 J+ \9 w+ V. M/ P
gp=zeros(1,256);
) }% a* F1 `. D; y* o% T& C: y! K6 `: E7 e1 l; M. ^2 K
for k=0:255( E6 s1 z/ k' g0 x# A
- Q9 H3 ], h2 P gp(k+1)=length(find(I==k))/(height*width);
6 y+ k z% w9 O+ P* V% K- P, H0 E3 G2 w$ G2 P; z M' {+ r+ {+ k
end4 ]1 _/ ]7 w# ^$ G0 R$ P
$ c, j0 B! D3 V/ r
for i = 1:height
0 l! T7 w1 J: g$ F+ ^. i5 S9 P
4 C9 f3 K# z k; b/ Q4 M/ u4 y: [ for j = 1: width _! d9 ]0 j+ M+ d/ A
& Q$ l. _8 X' w+ a1 K9 v' n s(I(i,j) + 1) = s(I(i,j) + 1) + 1;%对应灰度值像素点数量增加一
/ t/ K- O, b7 `1 [
. \8 l8 n' `7 r& T1 Q, Y4 k, I end ! S) o5 s4 f2 C( u. u, @1 u& z: Y8 ~
! ~5 N' Y# ^$ {. {; U; Y0 ^
end
) z# \5 Q8 Z3 e: H& W/ m9 A. F
7 S! ~ R: H& |$ R$ _%计算灰度分布密度 H! r/ q7 @: B8 }" O
, s' y- ?2 Q; A" _! t- y3 |/ l F
p = zeros(1,256); " l/ B& x' v7 r% D1 N' w
" f6 ~) ]& t& W( s+ w0 K6 M/ Z
for i = 1:256 2 f8 K. I$ Q1 V
) ]3 g' u7 e5 g2 S% a0 b
p(i) = s(i) / (height * width * 1.0);
6 }" n+ }! x! i" c6 @: r1 m0 w; G, q2 @% K$ D: c" |4 L& v6 U
end
5 C4 _' G: N5 K7 I! `
6 X) ]7 t/ j/ U%计算累计直方图分布 + i) {' o, l5 c* J* k+ `
6 |4 v* L5 o) Z% Q& X6 n& s! b
c = zeros(1,256);
! d4 V# y0 J- u! E: Y' ?! ]9 `0 `& z+ o: _" I6 }
c(1) = p(1);7 E- Y! |& Z8 `
6 g+ o* K2 U1 P2 k/ ]! h3 nfor i = 2:256 7 Q, o/ x0 T* [- `* H
1 v2 `* g" ?- V c(i) = c(i - 1) + p(i);
# B' G; t( V' q% Z+ t3 o8 C6 s+ ?
8 N5 o \9 F1 A" a4 ~8 l' S, pend 9 S( e5 Q2 {* T7 c
% ^ D/ y& |1 J% e4 e0 F%累计分布取整,将其数值归一化为1~256 ) c" a' U8 a( e# h/ P- C
* ]. O# j1 o* v7 @* t3 N; ?. V
c = uint8(255 .* c + 0.5);
' ?; o4 w) h9 t- K
+ d$ V/ ?3 k& t% Z: v%对图像进行均衡化5 E d. d3 C2 {) u, s) X
{) }, [; i3 ? ^* {. ^: lfor i = 1:height 9 Z8 g7 |0 `/ h. x3 i6 s- `
( T/ g* |% Q( S' N6 ]" V6 p/ q
for j = 1: width . o4 J0 @6 T+ x5 E! Z
6 q" b \5 ]6 F, z% O* R Ib(i,j) = c(I(i,j)+1); 1 {1 G( O7 M5 W0 Q
8 j [4 O+ {3 S end
6 H3 W1 c, m6 B# N4 r( B8 A
; n, ^' z( O& N# }- e# f! lend
, U5 o3 b: x" R+ C$ m
* x% ^+ e0 N( L) P$ gdis(:,:,3)=Ib; / E2 p2 y0 D. P5 `) |) s# v& |7 w4 y
5 y( f8 q: M5 q* g' b%subplot(122)
: m w* j# H0 k4 W5 R1 v. ?
9 y: ]9 y& e; `, H+ Q%imshow(Ib)%显示均衡化后的图像
5 u9 E; M' w! U; T- x1 C+ X0 T* C& l( l T2 s6 B% \7 R
subplot(122);" h3 L, x8 e: @3 d+ K
$ [" L1 C$ W8 ^$ r
imshow(dis),title('处理之后的图像')%显示均衡化后的图像6 n: z( t$ k% z% G" A, e
) g/ ]. ^: I7 ?6 a1 v- T6 f7 l1 B# r9 G8 U$ F7 P
( k L0 P* X' N# Q- r. }' I5 L: H |
|