The Gray World Assumption
Color Constancy 色彩恒常性(2)The Gray World Assumption
着上篇往下讲,与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是改进后的方法):
- function out = GrayWorld(in,para)%
- %%%% copyright: ofalling %%%%
- if( nargin < 2 )
- para = 0;
- end
- out = zeros(size(in));
- inDouble = double(in)/255;
- % % gamma correction
- gamma = 1/2.2;
- inDouble = inDouble.^(gamma);
- if ( para == 0)% 最原始的gray world算法
- for i = 1:3
- a(i) = mean(mean(inDouble(:,:,i)));
- f = 2;% f = 2/E(G),assume E(G)=1
- out(:,:,i) = inDouble(:,:,i)/(f*a(i));
- end
- elseif( para == 1)% 先使用直方图切割为1000块再计算光源强度
- inR = inDouble(:,:,1);
- inG = inDouble(:,:,2);
- inB = inDouble(:,:,3);
- nb = 0;
- for r = 1:10
- for g = 1:10
- for b = 1:10
- bucket = find((inR>0.1*(r-1))&(inR<0.1*r)&(inG>0.1*(g-1))&...
- (inG<0.1*g)&(inB>0.1*(b-1))&(inB<0.1*b));
- if (size(bucket)~=0 )
- nb = nb+1;
- bucketC(nb,:) = [0.1*r-0.05 0.1*g-0.05 0.1*b-0.05];
- end
- end
- end
- end
- for i =1:3
- a(i) = mean(bucketC(:,i));
- f = 2;% f = 2/E(G),assume E(G)=1
- out(:,:,i) = inDouble(:,:,i)/(f*a(i));
- end
- end
(1)原始算法结果


(2)改进算法结果


对照实验(1)和(2)的结果,发现改进后的算法明显比原始的算法效果好。且改进后的算法使用范围更广。
The Gray World Assumption的更多相关文章
- ISP算法高水平分析(上)
ISP算法高水平分析(上) 一.ISP基本框架及算法介绍 ISP是Image Signal Processor的缩写,全称是影像处理器.在相机成像的整个环节中,它负责接收感光元件(Sensor)的原始 ...
- [LeetCode] Gray Code 格雷码
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- 滤镜 filter:gray 变灰色
.gray { -webkit-filter: grayscale(100%); -moz-filter: grayscale(100%); -ms-filter: grayscale(100%); ...
- 【LeetCode】Gray Code
Gray Code The gray code is a binary numeral system where two successive values differ in only one bi ...
- Gray Code
Gray Code The gray code is a binary numeral system where two successive values differ in only one bi ...
- 【leetcode】Gray Code (middle)
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- [LintCode] Gray Code 格雷码
The gray code is a binary numeral system where two successive values differ in only one bit. Given a ...
- 44. Decode Ways && Gray Code
Decode Ways A message containing letters from A-Z is being encoded to numbers using the following ma ...
- LeetCode——Gray Code
Description: The gray code is a binary numeral system where two successive values differ in only one ...
随机推荐
- 调试UPX压缩的notepad
@date: 2016/11/29 @author: dlive 0x01 运行时压缩 对比upx压缩前后的notepad可以看到如下特点 PE头的大小一样 节区名称改变(.text -> .U ...
- Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法
Ubuntu 14.04 x64配置Android 4.4 kitkat编译环境的方法跟Ubuntu 12.04 - 13.10 以及jellybean编译环境配置没多大区别, 顺便记录下而已: Ub ...
- VMware Workstation/Fusion 中安装 Fedora 23/24 及其他 Linux 系统时使用 Open VM Tools 代替 VMware Tools 增强工具的方法
VMware Workstation/Fusion 分别是 Windows/Linux 和 macOS 下面对应的桌面虚拟化软件.过去,在 VMware 中安装了操作系统虚拟机后,需要在虚拟机中再安装 ...
- python 设计模式之门面模式
facade:建筑物的表面 门面模式是一个软件工程设计模式,主要用于面向对象编程. 一个门面可以看作是为大段代码提供简单接口的对象,就像类库. 门面模式被归入建筑设计模式.门面模式隐藏系统内部的细 ...
- POJ 2411 Mondriaan's Dream [经典状态压缩dp]
题意:略. 思路:这一题开始做的时候完全没有思路,便去看了别人的题解. 首先,对于这个题目解法想有一个初步的了解,请看这里:http://www.2cto.com/kf/201208/146894.h ...
- luogu P3147 [USACO16OPEN]262144
题目描述 Bessie likes downloading games to play on her cell phone, even though she doesfind the small to ...
- [BZOJ3212][POJ3468]A Simple Problem with Integers
题目大意: 维护一个长度为$n(n\leq100000)$的数列,支持区间加.区间求和两种操作,操作共$m(m\leq100000)$次. 思路: Splay区间操作. #include<cst ...
- Python学习笔记——安装
最近打算使用下GAE,便准备学习一下python.我对python是一窍不通,因此这里将我的学习历程记录下来,方便后续复习. 安装python: 可以从如下地址:http://www.python.o ...
- ASP.NET 5已终结,迎来ASP.NET Core 1.0和.NET Core 1.0 转
作者:yourber 命名是非常困难的事情,微软这次为了和ASP.NET4.6做区分,采用了全新的命名方式ASP.NET Core 1.0,它是一个全新的框架. ASP.NET 在过去的 15 年里是 ...
- Delphi Integer 转成单字节
整形不能超过256 b:=Byte(StrToInt(n)); var s: string; b: Byte; begin s := Edit1.Text; b := Byte(Str ...