灰度世界算法(Gray World Algorithm)
2016-07-27 13:03
627 查看
人的视觉系统具有颜色恒常性,能从变化的光照环境和成像条件下获取物体表面颜色的不变特性,但成像设备不具有这样的调节功能,
不同的光照环境会导致采集的图像颜色与真实颜色存在一定程度的偏差,需要选择合适的颜色平衡(校正)算法,消除光照环境对颜
色显现的影响。灰度世界算法是最常用平衡算法。
一、灰度世界算法
灰度世界算法以灰度世界假设为基础,该假设认为:对于一幅有着大量色彩变化的图像,
,三个分量的平均值趋于同一灰
度值
。从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰
色”。颜色平衡算法将这一假设强制应用于待处理图像,可以从图像中消除环境光的影响,获得原始场景图像。
算法执行步骤:
(1)一般有两种方法确定
:
要么取固定值(如最亮灰度值的一半,八位显示的话即为128);
要么通过计算图像
三通道平均值
,取
;
(2)计算
三个通道的增益系数:
;
;
;
(3)根据Von Kries对角模型,对于图像中的每个像素
,调整其分量
分量:
这种算法简单快速,但是当图像场景颜色并不丰富时,尤其出现大块单色物体时,该算法常会失效。
注:Von Kries提出,可用一个对角矩阵变换描述两种光照条件下同一物体表面颜色间的关系。假定在光照
下感知
到的物体
值分别为
、
,根据Von
Kries对角理论有:
该理论实现不同光源间的转换。
二、Matlab实现
[objc]
view plain
copy
print?
function Test()
I=imread('test.jpg');
y=GrayWorld(I);
y=uint8(y);
figure(1);imshow(I);
figure(2);imshow(y);
function y=GrayWorld(Image)
r=Image(:,:,1);
g=Image(:,:,2);
b=Image(:,:,3);
avgR = mean(mean(r));
avgG = mean(mean(g));
avgB = mean(mean(b));
avgRGB = [avgR avgG avgB];
grayValue = (avgR + avgG + avgB)/3
scaleValue = grayValue./avgRGB;
newI(:,:,1) = scaleValue(1) * r;
newI(:,:,2) = scaleValue(2) * g;
newI(:,:,3) = scaleValue(3) * b;
y=newI;
测试结果:
参考:
http://www.cnblogs.com/Imageshop/archive/2013/04/20/3032062.html
http://scien.stanford.edu/pages/labsite/1999/psych221/projects/99/jchiang/intro2.html
http://scien.stanford.edu/pages/labsite/2000/psych221/projects/00/trek/GWimages.html
[1] 徐晓昭,蔡轶珩,刘晓民,刘长江,沈兰荪. 改进灰度世界颜色校正算法[J]. 光子学报, 2010, 39(3): 559~564
不同的光照环境会导致采集的图像颜色与真实颜色存在一定程度的偏差,需要选择合适的颜色平衡(校正)算法,消除光照环境对颜
色显现的影响。灰度世界算法是最常用平衡算法。
一、灰度世界算法
灰度世界算法以灰度世界假设为基础,该假设认为:对于一幅有着大量色彩变化的图像,
,三个分量的平均值趋于同一灰
度值
。从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰
色”。颜色平衡算法将这一假设强制应用于待处理图像,可以从图像中消除环境光的影响,获得原始场景图像。
算法执行步骤:
(1)一般有两种方法确定
:
要么取固定值(如最亮灰度值的一半,八位显示的话即为128);
要么通过计算图像
三通道平均值
,取
;
(2)计算
三个通道的增益系数:
;
;
;
(3)根据Von Kries对角模型,对于图像中的每个像素
,调整其分量
分量:
这种算法简单快速,但是当图像场景颜色并不丰富时,尤其出现大块单色物体时,该算法常会失效。
注:Von Kries提出,可用一个对角矩阵变换描述两种光照条件下同一物体表面颜色间的关系。假定在光照
下感知
到的物体
值分别为
、
,根据Von
Kries对角理论有:
该理论实现不同光源间的转换。
二、Matlab实现
[objc]
view plain
copy
print?
function Test()
I=imread('test.jpg');
y=GrayWorld(I);
y=uint8(y);
figure(1);imshow(I);
figure(2);imshow(y);
function y=GrayWorld(Image)
r=Image(:,:,1);
g=Image(:,:,2);
b=Image(:,:,3);
avgR = mean(mean(r));
avgG = mean(mean(g));
avgB = mean(mean(b));
avgRGB = [avgR avgG avgB];
grayValue = (avgR + avgG + avgB)/3
scaleValue = grayValue./avgRGB;
newI(:,:,1) = scaleValue(1) * r;
newI(:,:,2) = scaleValue(2) * g;
newI(:,:,3) = scaleValue(3) * b;
y=newI;
function Test() I=imread('test.jpg'); y=GrayWorld(I); y=uint8(y); figure(1);imshow(I); figure(2);imshow(y); function y=GrayWorld(Image) r=Image(:,:,1); g=Image(:,:,2); b=Image(:,:,3); avgR = mean(mean(r)); avgG = mean(mean(g)); avgB = mean(mean(b)); avgRGB = [avgR avgG avgB]; grayValue = (avgR + avgG + avgB)/3 scaleValue = grayValue./avgRGB; newI(:,:,1) = scaleValue(1) * r; newI(:,:,2) = scaleValue(2) * g; newI(:,:,3) = scaleValue(3) * b; y=newI;
测试结果:
参考:
http://www.cnblogs.com/Imageshop/archive/2013/04/20/3032062.html
http://scien.stanford.edu/pages/labsite/1999/psych221/projects/99/jchiang/intro2.html
http://scien.stanford.edu/pages/labsite/2000/psych221/projects/00/trek/GWimages.html
[1] 徐晓昭,蔡轶珩,刘晓民,刘长江,沈兰荪. 改进灰度世界颜色校正算法[J]. 光子学报, 2010, 39(3): 559~564
相关文章推荐
- django 快速实现完整登录系统(cookie)
- Go语言基础学习教程
- Django中templates使用的补充
- Go语言函数学习教程
- Go语言eclipse环境搭建图文教程
- ubuntu下安装sogou输入法和consolas字体
- 【02】KVM中小企业实践-宿主机安装
- Django中url匹配规则的补充
- Ubuntu下Django的安装
- GoLang standard library - io 分析
- Golang继承模拟实例详解
- hdu 1847 Good Luck in CET-4 Everybody! (SG函数入门)
- PokemonGo完美度算法!是风姐还是松岛枫?--工地斗天地斗天马座
- google 集群计算的3大基础设施
- HDU 3363 Ice-sugar Gourd(枚举 思路)
- django 如何生成选择框
- CodeForces 560C Gerald's Hexagon
- Bellman-Ford算法实现
- django STATIC_URL STATIC_ROOT MEDIA_URL MEDIA_ROOT
- django modelField null和blank的区别