着上篇往下讲,与White Patch Retinex同样。Gray-World 也是恢复图像原色的算法。两种算法最核心的不同在于对光源强度的预计。

Gray World 算法基于一个如果The Gray World Assumption:on average, the world is gray.也就是说自然图像的像素颜色平均值为常值1/2(在颜色范围归一化在[0,1]的情况下)。

以下讲述该算法的详细数学推导过程。

算法:

(1)基本算法

下式是图像成像的数学表达,详细的含义在上篇文章Color Constancy 色彩恒常性(1)White Patch Retinex中有讲到。这里就不再反复。



依旧如果像素的色彩和像素的亮度值成比例

依照Gray World如果,对取平均。则有



且 

式中E(R) = 1/2即是由Gray World如果得出。带入后得到:

依旧如果E(G)=1。那么光源的强度能够预计为:

   (1)

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

(2)

(2)改进算法

上述的原始算法具有非常大的局限性。若图像的颜色比較单一,那么就不再满足gray world如果。为解决问题,提出了一些改进的算法,当中的一种主要思路是,先对图像进行切割。然后求切割后每块图像的颜色均值,进而求出总的颜色均值。用数学能够表示为下式:

式中。nr为切割后区域的个数,a(Rj)为第j个区域的平均像素值。

通过这样的方法求得终于的ai带入式(1)中。

在这样的思想下,提出了一种详细的算法,该算法求三个通道的直方图,然后将其量化为10类,那么终于能够将256*256*256中颜色量化为10*10*10=1000种颜色。书中将这1000种类描写叙述为1000 buckets。

(直观的理解就是把整幅图像画一个直方图,该直方图有1000个柱,也就是1000个bucket)。

终于的求ai的式子为:

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

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

MATLAB代码:

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

  1. function out = GrayWorld(in,para)%
  2. %%%% copyright: ofalling %%%%
  3. if( nargin < 2 )
  4. para = 0;
  5. end
  6. out = zeros(size(in));
  7. inDouble = double(in)/255;
  8. % % gamma correction
  9. gamma = 1/2.2;
  10. inDouble = inDouble.^(gamma);
  11. if ( para == 0)% 最原始的gray world算法
  12. for i = 1:3
  13. a(i) = mean(mean(inDouble(:,:,i)));
  14. f = 2;% f = 2/E(G),assume E(G)=1
  15. out(:,:,i) = inDouble(:,:,i)/(f*a(i));
  16. end
  17. elseif( para == 1)% 先使用直方图切割为1000块再计算光源强度
  18. inR = inDouble(:,:,1);
  19. inG = inDouble(:,:,2);
  20. inB = inDouble(:,:,3);
  21. nb = 0;
  22. for r = 1:10
  23. for g = 1:10
  24. for b = 1:10
  25. bucket = find((inR>0.1*(r-1))&(inR<0.1*r)&(inG>0.1*(g-1))&...
  26. (inG<0.1*g)&(inB>0.1*(b-1))&(inB<0.1*b));
  27. if (size(bucket)~=0 )
  28. nb = nb+1;
  29. bucketC(nb,:) = [0.1*r-0.05 0.1*g-0.05 0.1*b-0.05];
  30. end
  31. end
  32. end
  33. end
  34. for i =1:3
  35. a(i) = mean(bucketC(:,i));
  36. f = 2;% f = 2/E(G),assume E(G)=1
  37. out(:,:,i) = inDouble(:,:,i)/(f*a(i));
  38. end
  39. end

(1)原始算法结果



(2)改进算法结果



对照实验(1)和(2)的结果,发现改进后的算法明显比原始的算法效果好。且改进后的算法使用范围更广。

The Gray World Assumption的更多相关文章

  1. ISP算法高水平分析(上)

    ISP算法高水平分析(上) 一.ISP基本框架及算法介绍 ISP是Image Signal Processor的缩写,全称是影像处理器.在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始 ...

  2. [LeetCode] Gray Code 格雷码

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  3. 滤镜 filter:gray 变灰色

    .gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); ...

  4. 【LeetCode】Gray Code

    Gray Code The gray code is a binary numeral system where two successive values differ in only one bi ...

  5. Gray Code

    Gray Code The gray code is a binary numeral system where two successive values differ in only one bi ...

  6. 【leetcode】Gray Code (middle)

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  7. [LintCode] Gray Code 格雷码

    The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...

  8. 44. Decode Ways && Gray Code

    Decode Ways A message containing letters from A-Z is being encoded to numbers using the following ma ...

  9. LeetCode——Gray Code

    Description: The gray code is a binary numeral system where two successive values differ in only one ...

随机推荐

  1. JavaScript正则表达

    Javascript 与正则表达式 一.正则表达式(regular expression简称res) 1.定义: 一个正则表达式就是由普通字符以及特殊字符(称为元字符)组成的文字模式.该模式描述在查找 ...

  2. c语言命令行参数

    int main(int argc, char * argv[]) { ..... } argc: 代表启动程序时,命令行参数的个数.C和C++语言规定,可执行程序程序本身的文件名,也算是一个命令行参 ...

  3. webview reload 错误 Error Domain=WebKitErrorDomain Code=102 "Frame load interrupted"

    在某个特定的场合先需要对WKWebView进行一次reload,但是直接回走到失败的代理方法中并报如下的错误 Error Domain=WebKitErrorDomain Code=102 " ...

  4. my.ini配置详解

    Mysql my.ini 配置文件详解 #BEGIN CONFIG INFO #DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大 #TYPE: SYSTEM ...

  5. centos 7 mysql 离线安装教程

    1. 解压下载的zip包,会发现有以下几个rpm包: MySQL-client-advanced-5.6.22-1.el7.x86_64.rpm MySQL-devel-advanced-5.6.22 ...

  6. SDOI 2015 约束个数和

    Description: 共\(T \le 5 \times 10^4\)组询问, 每组询问给定\(n\)和\(m\), 请你求出 \[ \sum_{i = 1}^n \sum_{j = 1}^m \ ...

  7. 通信API、使用Web Workers处理线程

    1.跨文档消息传输                                               要想接受从其他的窗口那里发过来的消息,就必须对窗口对象的message事件进行监视. w ...

  8. Python 集成开发环境(IDE)

      DiscoverSDK网站进行了一次调查 - 什么是最好的Python IDE,这里是调查的结果 ​​​Python是一种非常流行的开源编程语言.得益于无尽的模块选项,Python今天广泛用于脚本 ...

  9. hibernate多对一单向配置

    查看:http://blog.csdn.net/u010702229/article/details/13170263

  10. GIS可视化——热点图

    一.简介 SuperMap iClient for JavaScript提供了热点图(HeatMapLayer),用于渲染数据衰减趋势.颜色渐变的效果. 原理:在客户端直接渲染的栅格图,热点图的渲染需 ...