灰度世界算法(Gray World Algorithm)和White Patch Retinex算法

前言

接触和了解Color Constancy主要是通过 Marc Ebner 的一本专著“ Color Constancy ”。这篇文章主要讲色彩恒常性中一个最基本的算法——Gray World 算法和White Patch Retinex算法。在讲述算法之前,先回答两个问题。

(1)什么是色彩恒常性?what is Color Constancy?

首先,颜色并不是一个实实在在的东西,它只是我们大脑和视网膜处理的结果。我们的视觉系统有一个特殊的功能就是在光源变化的情况下,依然能够确定物体的真实颜色,这种鲁棒性是计算机等处理机器所不具有的。色彩的恒常性,也就可以简单的理解为,在外界光源变化的情况下,依然能够保留物体原始的色彩。我们研究色彩恒常性,提出各种算法,目的就是让计算机也具有人类视觉系统的这个特殊功能,在不同光源的照射下还原图像的本来颜色。White Patch Retinex算法就是其中的一个最简单的算法。在后面的实验结果中,我们也可以看出,由于黄色光照下而整体颜色偏黄的餐桌,经过White Patch Retinex算法处理后,桌布恢复了白色。

(2)retinex是什么意思?what is retinex?

retinex 是来自于中古拉丁文Retina 和拉丁文Cortic两个单词的组合, 发音[re-tin-ex] 或 ['ret-nex] 。由Edwin Land 在他的人类色彩视觉模型中提出,是结合眼睛的视网膜(retina)和大脑的头皮层(cortex)而创新出来的一个词。在图像处理中,这个词可以更加明确的定义为一个自动将视觉现实转换到图像的过程,让图像象你实际看见的世界一样的明亮、清晰和清楚。

(原文:from Medieval Latin retina and Latin cortic. Edwin Land coined word for his model of human color vision, combining the retina of the eye and the cerebral cortex of the brain. More specifically defined in image processing as a process that automatically provides visual realism to images.) 来自:Retinex Image processing NASA Langley Research Center



灰度世界算法(Gray World Algorithm)

人的视觉系统具有颜色恒常性,能从变化的光照环境和成像条件下获取物体表面颜色的不变特性,但成像设备不具有这样的调节功能,

不同的光照环境会导致采集的图像颜色与真实颜色存在一定程度的偏差,需要选择合适的颜色平衡(校正)算法,消除光照环境对颜

色显现的影响。灰度世界算法是最常用平衡算法。

一、灰度世界算法

灰度世界算法以灰度世界假设为基础,该假设认为:对于一幅有着大量色彩变化的图像,  , 三个分量的平均值趋于同一灰度值  。 从物理意义上讲,灰色世界法假设自然界景物对于光线的平均反射的均值在总体上是个定值,这个定值近似地为“灰色”。 颜色平衡算法将这一假设强制应用于待处理图像,可以从图像中消除环境光的影响,获得原始场景图像。

算法执行步骤:

(1)一般有两种方法确定  :

要么取固定值(如最亮灰度值的一半,八位显示的话即为128);

要么通过计算图像   三通道平均值   ,取 

(2)计算  三个通道的增益系数:  ;  ;  ;

(3)根据Von Kries对角模型,对于图像中的每个像素  ,调整其分量  分量:

这种算法简单快速,但是当图像场景颜色并不丰富时,尤其出现大块单色物体时,该算法常会失效。

注 :Von Kries提出,可用一个对角矩阵变换描述两种光照条件下同一物体表面颜色间的关系。假定在光照  下感知

到的物体  值分别为  、  , 根据Von Kries对角理论有:

该理论实现不同光源间的转换。

二、Matlab实现

I=imread('N.jpg');
y=GrayWorld(I);
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;

三、具体数学推导过程。

算法:

(0)图像成像模型

White Patch Retinex算法的目的是恢复图像的本身色彩,这势必就要估计图像中外界光源的强度。下面是图像成像的数学表达式:

[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理(1)

式中,[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理是图像成像的几何尺寸因子,[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理是物体在[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理位置处对波长[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理的光的反射系数(反射系数的大小,直接决定成像的亮度),[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理是光源的强度,[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理是照相机的感光系数。最终的成像为[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理,其中[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理是相互对应的关系,前者是图像中的位置,后者是实际物体的位置。

一般RGB照相机的感光材料仅对r,g,b三个颜色反应,即[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理由三个窄带波长组成。假设[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理是delta函数,那么(1)式可以简化为:

[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理 (2)

图像成像模型到此结束。我们接下来的任务就是估计光源强度[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理


(1)基本算法

下式是图像成像的数学表达

[原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理
依然假设像素的色彩和像素的亮度值成比例[原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

按照Gray World假设,对[原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理取平均,则有

灰度世界算法(Gray World Algorithm)和White Patch Retinex算法_第1张图片
且 [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

式中E(R) = 1/2即是由Gray World假设得出,带入后得到:

灰度世界算法(Gray World Algorithm)和White Patch Retinex算法_第2张图片

依然假设E(G)=1,那么光源的强度可以估计为:

 [原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理  (1)

最终经过色彩恢复后的图像为:

[原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理(2)

(2)改进算法

上述的原始算法具有很大的局限性。若图像的颜色比较单一,那么就不再满足gray world假设。为解决这个问题,提出了一些改进的算法,其中的一种主要思路是,先对图像进行分割,然后求分割后每块图像的颜色均值,进而求出总的颜色均值。用数学可以表示为下式:

[原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

式中,nr为分割后区域的个数,a(Rj)为第j个区域的平均像素值。通过这种方法求得最终的ai带入式(1)中。

在这种思想下,提出了一种具体的算法,该算法求三个通道的直方图,然后将其量化为10类,那么最终可以将256*256*256中颜色量化为10*10*10=1000种颜色,书中将这1000种类描述为1000 buckets。(直观的理解就是把整幅图像画一个直方图,该直方图有1000个柱,也就是1000个bucket)。

最终的求ai的式子为:

[原创]Color Constancy 色彩恒常性(2)The Gray World Assumption - 钰央 - 计算机视觉·图像处理

式中,nnz为直方图中像素点个数非0的bucket的个数,nb为bucket的总个数(按照书中的意思,nb =1000,我的理解是nb = nnz),ci(j)为第j个bucket中像素的值。

同样的,将求得的ai带入式(1)中,然后带入式(2)求得恢复后的输出。


White Patch Retinex  

 |


算法:

(1)图像成像模型

如上所示。

(2)最原始的White Patch Retinex算法

White Patch Retinex算法的主要思想是:if there is a white patch in the scene, then this patch reflects the maximum light possible for each band.This will be the color of the illuminant.举例说明,如果

[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理

那么,[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理

如果像素的颜色和成像的I成正比,即[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理,那么[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理

根据White Patch Retinex算法的主要思想,寻找图像中最亮的点,那么有:[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理,求得的[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理被作为光源的强度。

恢复后的图像为:[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理

使用该算法恢复的图像如实验中(1)的结果所示。可以看出,该算法能去掉一部分的光源颜色,但是效果不是很好。接下来将讲述一种改进后的算法,改进后的算法在实验结果和鲁棒性上均有所提高。

(3)改进后的White Patch Retinex算法

改进后的方法不在单纯的使用最亮点来估计光源强度,而是求原始图像每个通道的累计直方图,取累计到某一个值 p*n 时对应的图像像素值作为[原创]Color Constancy 色彩恒常性(1)White Patch Retinex - 钰央 - 计算机视觉·图像处理。其中p为百分值,实验中取为1%-5%,n为图像的像素点数。

具体可用下列式子表示:

其中所求像素值jc应满足下列限制条件:

式(5)中的Hc为各个通道的直方图,k为灰度级,根据上述理论就可以求得环境光A

MATLAB代码:

代码(其中,para=0是原始的方法,para=1是改进后的方法):

[plain]  view plain copy print ?
  1. function out = WhitePatchRetinex(in,para)
  2. %%%% copyright: ofalling %%%%
  3. if( nargin < 2 )
  4. para = 0;
  5. end
  6. out = zeros(size(in));
  7. inDouble = double(in);
  8. L = [0 0 0];
  9. if ( para == 0 )
  10. for i = 1:3
  11. L(i) = max(max(in(:,:,i)));
  12. out(:,:,i) = inDouble(:,:,i)/L(i);
  13. end
  14. elseif ( para == 1 )% more robust algorithm
  15. np = 0.1 * size(in,1)*size(in,2);
  16. for i = 1:3
  17. H = imhist(in(:,:,i));
  18. j = 256;
  19. sum = 0;
  20. while( (sum < np)&(j > 1) )
  21. j = j-1;
  22. sum = sum + H(j);
  23. end
  24. L(i) = j;
  25. out(:,:,i) = inDouble(:,:,i)/L(i);
  26. end
  27. end

参考:

Marc Ebner 的主页: http://www.ra.cs.uni-tuebingen.de/mitarb/ebner/welcome.html
书籍:Marc Ebner. “ Color Constancy ”.Wiley 1st edition. 2007.  http://www.ra.cs.uni-tuebingen.de/mitarb/ebner/ColorConstancyBook.html
论文:A Parallel Algorithm for Color Constancy . http://www.ra.cs.uni-tuebingen.de/mitarb/ebner/research/colorConstancy/colorConstancy.html

有关Color Constancy 的网站: http://colorconstancy.com/


你可能感兴趣的:(图像处理)