|
|
EDA365欢迎您登录!
您需要 登录 才可以下载或查看,没有帐号?注册
x
基于MATLAB图像处理的白平衡算法,也称灰色世界法. N4 V* H! t7 R8 ~" H8 d# q
& J& u* j) \. R5 J) Z
: i: f1 M* v- `白平衡,即所谓的白色的平衡。1 s( {, R( w5 R- |! r
" i. H% }9 M" r, V- S- O
白平衡的算法有很多,这里记录的是最简单实用的白平衡算法,即灰色世界法!; E8 E' V. i* M6 G
( A6 N H* _1 R& m) \灰度世界算法(Gray World)是以灰度世界假设为基础的,该假设认为对于一幅有着大量色彩变化的图像, R、 G、 B 三个分量的平均值趋于同一个灰度K。$ B9 ? j) r* z% u0 Q! A' B8 t8 Y
$ j0 a7 x) @. }% ]
下面是具体的算法代码:- I$ Q) B0 B" I0 X: w
3 h" F: ~3 j' J! {
( x* y+ j2 _- h( c" E) a q
- RGB=imread('test.jpg');
- R = RGB(:,:,1); G = RGB(:,:,2); B = RGB(:,:,3);
- Rx4 = RGB(:,:,1)*4; Gx4 = RGB(:,:,2)*4; Bx4 = RGB(:,:,3)*4; //Rx4只是做了一个简单的线性的提亮,可以不用参考。
- Rave = mean(mean(R));
- Gave = mean(mean(G));
- Bave = mean(mean(B));
- Kave = (Rave + Gave + Bave) / 3;
- R1 = (Kave/Rave)*R; G1 = (Kave/Gave)*G; B1 = (Kave/Bave)*B;
- R2 = (Kave/Rave)*Rx4; G2 = (Kave/Gave)*Gx4; B2 = (Kave/Bave)*Bx4;
- RGB_white = cat(3, R1, G1, B1);
- RGB_whitex4 = cat(3, R2, G2, B2);
- RGB_white_out = uint8(RGB_white); RGB_white_outx4 = uint8(RGB_whitex4);
6 k, w2 S' [. z" `( m1 L' \% g* P
7 u# c7 ^4 J5 l4 X( Q' g5 |( w3 t* }8 i" g4 r
0 m( y* H% Q T9 F& G. v7 ~8 G5 i% V
下面是算法的效果:
7 t* ?0 M! `% v+ s0 {' o& g* U" Z0 I( _6 i9 p- T) O
原图:
1 Z Y& R7 Q3 Y
; R( e" a4 h, F Q1 \( L' D
; |8 l6 m" B- [
7 n8 W' U1 k& c. j+ v7 E# g1 }5 ]8 ?0 b, u% u
白平衡之后:
: J9 l3 r) N+ ?! ^ w' T/ `6 ]7 l1 t$ } p- V2 M
0 H5 o; s& p3 @
: S1 v2 m( x! i! J/ x1 c6 i& x' j# d" j# P
可见,最原始的算法,效果还是不错的,后面有机会会补充其他好一些的算法。/ Q, Q+ B, i( n1 W# @, v9 x
4 A9 S# C7 ]; K5 e: v |
|