The Gray World Assumption

2024-06-08 18:32
文章标签 world gray assumption

本文主要是介绍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中有讲到,这里就不再重复。

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

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

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

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

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

依然假设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)求得恢复后的输出。

MATLAB代码:

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

 

[plain]  view plain copy print ?
  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)原始算法结果

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

(2)改进算法结果

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

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

这篇关于The Gray World Assumption的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1042974

相关文章

【JFinal】IDEA+maven上手JFinal之Hello World!

一、New Project 1、在 IDEA 环境下新建 Project 项目 2、选择创建 Maven 项目,并且不使用模板 3、输入 Maven 的 GroupId 和 ArtifactId 4、输入项目名称 二、将当前 Project 改为 POM 工程 将项目的 jfinal-web-demo 作为项目的 parent 工程,用于定义 maven 依赖包的版本信息、

CVPR 2024最新论文分享┆YOLO-World:一种实时开放词汇目标检测方法

论文分享简介 本推文主要介绍了CVPR 2024上的一篇论文《YOLO-World: Real-Time Open-Vocabulary Object Detection》,论文的第一作者为Tianheng Cheng和Lin Song,该论文提出了一种开放词汇目标检测的新方法,名为YOLO-World。论文通过引入视觉-语言建模和大规模预训练解决了传统YOLO检测器在固定词汇检测中的局限性。论

Adobe After Effects的插件--------CC Particle World

CC Particle World是一个粒子效果器,用于在三维空间中生成和模拟各种粒子系统,包括火焰、雨、雪、爆炸、烟雾等等。它会自动随时间变化发射粒子。 本文部分参照 https://www.163.com/dy/article/IEJVDN760536FE6V.html 使用条件 使用该插件的图层需是2D图层。 我们新建一个纯色图层(也可以是其他类型图层),作为【效果控件载体图层】

探索8421码、余三码、Gray码和余三循环码的编码技术

探索8421码、余三码、Gray码和余三循环码的编码技术 编码是数字电子学中的重要概念,它在数字通信、计算机系统和数据处理等领域扮演着至关重要的角色。本文将介绍几种常见的编码方式,包括8421码、余三码、Gray码以及余三循环码,并探讨它们的原理、特点和应用场景。 1. 8421码(BCD码) 8421码(BCD码,Binary-Coded Decimal)是一种用4位二进制数表示十进制

java-在idea中antrl的hello world

java-在idea中antrl的hello world 1. 在idea中安装ANTLR V4的插件2. 下载ANTLR的jar包3. idea中创建普通的java项目4. 创建一个Hello.g4的文件5. 使用idea生产接口文件6. java创建一个类和main方法7. 调试输出8. 参考链接 1. 在idea中安装ANTLR V4的插件 路径如下,安装完成后重启ide

World of Warcraft [CLASSIC][80][Shushia][Molten Core][BOSS-5 Baron Geddon]

80级术士单杀[熔火之心]40人团队副本 [5号BOSS 迦顿男爵] BOSS技能①[点燃法力],每3秒燃烧400点法力值,实际上还附带400点伤害,持续5分钟 BOSS技能②[人体炸弹] :迦顿男爵会随机给一个人施放DEBUFF,被DEBUFF影响的人需要在最短时间内跑到远离人群的角落,等待炸弹爆炸。这个技能会造成3000+的伤害,并且会对周围一定范围内的玩家造成等量伤害,感觉我

java-antrl手敲命令的hello world

java-antrl手敲命令的hello world 环境步骤1. 下载ANTLR的jar包2. 新建一个g4文件3. 生成语法对应的java文件4. 编译语法对应的java文件5. 测试语法5.1 打印测试信息5.2 查看语法分析树 6. 注意事项6.1 每一个antlr4版本的jar包都对应java的相应版本,要对应。6.2 [@1,6:10='parrt',<ID>,1:6]解析6.3

汇编语言输出“Hello World!“

1.软件 Nasmide64.exe(李忠老师编写) Fixvhdw64.exe(李忠老师编写) VirtualBox虚拟机(免费 开源) 2.过程 01.Fixvhdw64.exe输入以下代码: mov ax,0xb800mov ds,axmov byte [0x00],'H'mov byte [0x02],'e'mov byte [0x04],'l'mov byte [0

Webots入门(一)-build up a world

以Webots的guide.pdf为例建立一个拥有a floor, four obstacles 和 a surrounding wall的环境。我想大部分人都可以照着guide一步一步实现整个world的建立,但是对于其中的组件的使用不是特别理解,比如为什么要用这个组件,不用另外的组件。这里跳过色彩方面的讲解,因为自己也不是很了解。下面进入正题:          先上一张感性