The Gray World Assumption

2024-06-08 18:32
文章标签 gray world 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

相关文章

AJAX:如何编写一个关于AJAX的Hello World?(ajax发送异步请求(四步操作))

用到的一个Servlet类: package cn.edu.web.servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;impor

oracle学习之第一个存储过程:打印Hello World

数据库对象:表、视图、索引、序列、同义词、存储过程、存储函数 存储过程:指的是存储在数据库中供所有用户程序调用的子程序叫存储过程、存储函数 存储过程和存储函数的相同点:完成特定功能的程序 存储过程和存储函数的区别:是否用return语句返回值(存储函数可以,但是存储过程不行) --第一个存储过程:打印Hello World/*调用存储过程2种方式:1、exec sayhellow

在Mac OS上使用Visual Studio Code创建C++ Qt的Hello World应用

引言 Qt是一个跨平台的应用程序和用户界面框架,而Visual Studio Code是一个功能强大的编辑器,两者结合可以极大地提升开发效率。本文将指导你在Mac OS上使用Visual Studio Code创建一个简单的Qt 'Hello World'窗口应用。 环境准备 确保你的MacBook OS运行最新的操作系统。安装Homebrew,Mac OS的包管理器。通过Homebrew安装

SpringBoot (一) :入门篇 Hello World

什么是SpringBoot Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。 SpringBoot有什么

C语言socket HTTP Server hello world程序(Ubuntu Linux 24.04环境)

本程序实现的是一个能返回hello world的http server, 也只能返回hello world,作为C语言http server开发的一个起步阶段。 /*编译生成可执行程序(Ubuntu Linux 24.04)# gcc ./socket_server.c -o socket_server# scp socket_server root@idealand.space:/roo

PAT 甲级 1055 The World‘s Richest

PAT 甲级 1055 The World’s Richest 这道题一次AC,但是后来看《算法笔记·上机训练实战指南》中的解析,说由于M<100,所以每个年龄读入100个人,就可以不读入了,这样能显著提高时间,否则测试点二过不了。但是没有写这个预处理也过了,回去看了看时间是400ms,猜想应该是传参都用的是传引用调用,改成传值调用之后果然超时。 解析也是用传值调用写的,传引用不香吗。 #i

PAT 甲级 1011 World Cup Betting

PAT 甲级 1011 World Cup Betting 简单模拟 #include<bits/stdc++.h>using namespace std;const double EPS=1e-7;int main(){double a,b,c,ans=1;for(int i=0;i<3;++i){cin>>a>>b>>c;if(a-b>-EPS&&a-c>-EPS) {co

Hello World for U

题目1464:Hello World for U 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:2085 解决:564 题目描述: Given any string of N (>=5) characters, you are asked to form the characters into the shape of U. For example, "he

2.Hello World实验

实验现象:使用Arduino 的串口编写一句“Hello Wrold!”,然后用Arduino发送给PC机。 理论学习: 该程序中用到了Arduino程序里面最常见的几个函数: void setup() 该函数用于编写Arduino的初始化内容,本例程内设置通讯波特率就放在这里。   对于通讯的设置只需设置一次就可以了。所以把Serial.bgein(9600)放在这。   Seria

10:Hello, World!的大小

OpenJudge - 10:Hello, World!的大小 描述 还记得在上一章里,我们曾经输出过的“Hello, World!”吗? 它虽然不是本章所涉及的基本数据类型的数据,但我们同样可以用sizeof函数获得它所占用的空间大小。 请编程求出它的大小,看看跟你设想的是否一样? 输入 无。 输出 一个整数,即“Hello, World!”的大小。 >>>>>>分割线>>>>>>>>