论文阅读:Auto White-Balance Correction for Mixed-Illuminant Scenes

论文阅读:Auto White-Balance Correction for Mixed-Illuminant Scenes

今天介绍一篇混合光照下的自动白平衡的文章

Abstract

自动白平衡(AWB)是相机 ISP 通路中比较重要的一个模块,主要用于校正环境光照引起的色偏问题,不过常见的 AWB 算法都是基于单光照的假设去做的,然而,实际场景中都是多光源环境,这篇文章提出了一种高效的方法去处理实际场景中的多光源问题,与传统 AWB 方法的一个显著不同点在于,这篇文章不需要对光照进行估计,而是通过对一组预设的白平衡参数,将预设的白平衡参数的权重进行调节,然后加权得到混合光照下的白平衡效果,实验结果说明这种方法相比之前的单光照或者混合光照下的白平衡算法都更有效。

Introduction

自动白平衡是相机 ISP 通路中的一个重要模块,ISP 通过一系列的处理模块,比如去马赛克,降噪,白平衡,tone mapping 等,将 sensor RAW 图处理得到最终的 RGB 图,白平衡处理是 ISP 通路中比较靠前的一个模块,这个模块的作用主要是为了校正环境光照引起的色偏,以模拟人眼的色彩常恒性的特点。

AWB 通常包括两个步骤,第一步是估计环境中的光源;第二步是基于环境中的光源估计,用相应的 AWB 参数进行白平衡处理。第一步是关键,准确的光源估计是白平衡是否校正成功的重要前提,因为第二步基本就是基于光源估计给出 RGB 三个通道的系数,让三个通道分别乘以这三个系数,就完成了白平衡的校正。

之前的很多 AWB 的工作都是基于单光源估计的 AWB 校正方法,这种单光源的假设对于实际场景来说,过于简单。如图一所示,图一展示了一个典型的混合光源场景,一部分是窗外的天空,一部分是室内的场景,如果用单一光源做白平衡校正,总会出现另外一部分场景出现色彩偏差的问题。

在这里插入图片描述

Method

在这里插入图片描述

这篇文章的算法流程如图-2 所示,给定一张去马赛克之后的图,先用一组给定光照下的 AWB 参数进行处理,然后最终 AWB 的图,可以基于这组图的一个线性组合:

I c o r r ↓ = ∑ i W i ⊙ I c i ↓ (1) I_{corr \downarrow} = \sum_{i} W_i \odot I_{c_i \downarrow} \tag{1} Icorr=iWiIci(1)

I c o r r ↓ I_{corr \downarrow} Icorr 是最终校正后的图, W i W_i Wi 是最终融合的权重。

为了构造这样的数据对,文章作者先将一张去马赛克之后的图进行一个固定 AWB(比如日光下) 的处理得到 I i n i t I_{init} Iinit,然后构造一个映射关系,将固定 AWB 下的图映射到对应光照下的图:

I ^ c i = M c i ϕ ( I i n i t ) (2) \hat{I}_{c_i} = M_{c_i} \phi (I_{init}) \tag{2} I^ci=MciϕIinit)(2)

I ^ c i \hat{I}_{c_i} I^ci 是目标 AWB 下的图, ϕ \phi ϕ 表示一个多项式的核函数, M c i M_{c_i} Mci 表示一个映射矩阵,通过类似一个最小二乘的方法,可以得到 M c i M_{c_i} Mci 映射矩阵。

然后,基于这些 I ^ c i \hat{I}_{c_i} I^ci,我们需要进一步去学习融合权重,文章中利用了一个 DNN 模型去学习这个映射权重,为了训练这个映射网络,文章利用了一个公开的数据集,里面包含了大约 65k 的图像样本,每个样本都有一个正确的 AWB 的校正图,这个作为 GT,从这个数据里面,文章作者挑选了大概 9200 张图,然后通过前面介绍的 AWB 处理方法,得到了不同关照下的 AWB 校正图,这些光照包括 2850 Kelvin (K), 3800 K, 5500 K, 6500 K, and 7500 K,分别对应一些典型的色温场景,然后构造了如下的 loss 函数进行训练:

L r = ∥ P c o r r − ∑ i W ^ i ⊙ P c i ∥ F 2 (3) \mathcal{L}_r = \left \| P_{corr} - \sum_{i} \hat{W}_i \odot P_{c_i} \right \|_{F}^{2} \tag{3} Lr= PcorriW^iPci F2(3)

其中, P c o r r P_{corr} Pcorr P c i P_{c_i} Pci 分别表示 GT 图像和输入图像中抽取的图像块,$\hat{W}_i $ 表示最终需要训练学习得到的权重图,为了在最终重建的输出图中,出现色彩空间之外的颜色,文章作者对输出做了一个 cross-channel softmax 的操作。为了保证权重图的平滑性,文章作者还加了一个 TV 平滑项:

L s = ∥ W ^ i ∗ ▽ x ∥ F 2 + ∥ W ^ i ∗ ▽ y ∥ F 2 (4) \mathcal{L}_s = \left \|\hat{W}_i \ast \bigtriangledown_{x} \right \|_{F}^{2} + \left \|\hat{W}_i \ast \bigtriangledown_{y} \right \|_{F}^{2} \tag{4} Ls= W^ix F2+ W^iy F2(4)

最终的损失函数如下所示:

L = L r + L s \mathcal{L} = \mathcal{L}_r + \mathcal{L}_s L=Lr+Ls

推理的时候,文章中先用固定的 AWB 参数生成不同的 AWB 图,然后连接到一起送入网络,为了提升最终的 AWB 校正效果,文章中还试过聚合的策略,将输入的图用了三个不同的尺度,1.0,0.5, 0.25,将这三个不同尺度的输出都上采样到原始大图的大小,然后再取平均,文章还提到用导向滤波的方式进行后处理,可以得到更边缘平滑的权重图,最后的 AWB 校正图如下式所示:

I c o r r = ∑ i W i ↑ ⊙ I c i (1) I_{corr} = \sum_{i} W_{i \uparrow} \odot I_{c_i} \tag{1} Icorr=iWiIci(1)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/163462.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

(C++)字符串相加

愿所有美好如期而遇 题目链接:415. 字符串相加 - 力扣(LeetCode) 思路 我们看到字符串长度可能到达一万,而且不允许使用处理大整数的库,也就是说,转成整数相加后再转成字符串是不可行的。 那么我们就让…

Dubbo的优雅下线原理分析

文/朱季谦 Dubbo如何实现优雅下线? 这个问题困扰了我一阵,既然有优雅下线这种说法,那么,是否有非优雅下线的说法呢? 这,还真有。 可以从linux进程关闭说起,其实,我们经常使用到杀…

STM32硬件调试器不一定准确,proteus不一定准确

我在做实验的过程中,发现里面的那个变量ii一直都不变搞了很久没有发现问题, 然后怀疑是不是软件出了问题,然后直接只用单片机的一个灯泡来检测是否正常,发现:单片机里面正常,但是硬件调试的时候&#xff0…

计算机网络秋招面试题

自己在秋招过程中遇到的计算机网络的面试题 OSI七层网络模型 DNS:应用层协议 根据域名查IP地址 DNS查询⽅式有哪些? 递归解析 局部DNS服务器⾃⼰负责向其他DNS服务器进⾏查询,⼀般是先向该域名的根域服务器查询,再由根域名服…

【C++】容器string的常用成员函数接口

目录 string - C Reference 1 容量相关 1.1 size/length 1.2 capacity 1.3 resize 1.4 reserve 1.5 empty 2 运算符重载 2.1 operator 2.2 operator[] 2.3 operator&#xff08;非成员函数&#xff09; 2.4 operator 2.5 operator>> && operator<…

【使用vscode在线web搭建开发环境--code-server搭建】

官方版本下载 https://github.com/coder/code-server/releases?q4.0.0&expandedtrue使用大于版本3.8.0,因为旧版本有插件市场不能访问的情况版本太高需要更新环境依赖 拉取安装包 []# wget "https://github.com/coder/code-server/releases/download/v4.0.0/code-…

64位ATT汇编语言使用bss段.skip指令储存字符,并使用系统调用输出字符

.global main .section .data .section .bss# 需要输出的字符数组&#xff0c;还没有初始化mystring: .skip 4 .section .text main:# 将mystring这个字符串的地址存入到rbx寄存器中leaq mystring,%rbx# 将a放入到mystring第一个字节里边movb $a,(%rbx)# 将地址往后边移动一个字…

16万亿Web3蓝图落地新加坡

作者&#xff1a;秦晋 11月15日&#xff0c;新加坡金管局&#xff08;MAS&#xff09;宣布与金融行业合作&#xff0c;以扩大资产代币化计划&#xff0c;并开发扩大代币化市场的基础能力。Project Guardian 由 17 家金融机构组成&#xff0c;启动五个行业试点&#xff0c;以测试…

Leetcode—3.无重复字符的最长子串【中等】

2023每日刷题&#xff08;三十二&#xff09; Leetcode—3.无重复字符的最长子串 实现代码 class Solution { public:int lengthOfLongestSubstring(string s) {unordered_set<char> smap;int maxlen 0;int left 0;for(int i 0; i < s.size(); i) {while(smap.fi…

公共字段自动填充-Mybatis Plus实现

简历描述 使用ThreadLocal动态获取当前登录用户&#xff0c;从而解决MybatisPlus公共字段自动填充问题。达到简化编码的目的&#xff0c;使业务方法更加简洁。 问题分析 前面我们已经完成了后台系统的员工管理功能的开发&#xff0c;在新增员工时需要设置创建时间、创建人、…

Zabbix5.0部署及应用

环境 主机名 IP 类型server01192.168.134.165zabbix-serverserver02 192.168.134.166zabbix-agent 官方部署文档 1 .安装yum源 [rootserver01 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-rel…

浅谈WPF之控件模板和数据模板

WPF不仅支持传统的Windows Forms编程的用户界面和用户体验设计&#xff0c;同时还推出了以模板为核心的新一代设计理念。在WPF中&#xff0c;通过引入模板&#xff0c;将数据和算法的“内容”和“形式”进行解耦。模板主要分为两大类&#xff1a;数据模板【Data Template】和控…

初刷leetcode题目(2)——数据结构与算法

&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️Take your time ! &#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️&#x1f636;‍&#x1f32b;️…

PostgreSQL 难搞的事系列 --- vacuum 的由来与PG16的命令的改进 (1)

开头还是介绍一下群&#xff0c;如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, Oceanbase, Sql Server等有问题&#xff0c;有需求都可以加群群内有各大数据库行业大咖&#xff0c;CTO&#xff0c;可以解决你的问题。加群请联系 liuaustin3 &#xff0c;在新加的朋友…

从零开始:抖音酒店景区小程序开发指南

为了满足用户多样化的需求&#xff0c;开发一款抖音酒店景区小程序成为了业界的一个新兴趋势。在这篇文章中&#xff0c;我们将探讨如何开发一款引人注目的抖音风格的酒店景区小程序。 一、抖音风格的设计理念 在设计酒店景区小程序时&#xff0c;我们需要融入抖音的设计理念。…

22 - 如何优化垃圾回收机制?

我们知道&#xff0c;在 Java 开发中&#xff0c;开发人员是无需过度关注对象的回收与释放的&#xff0c;JVM 的垃圾回收机制可以减轻不少工作量。但完全交由 JVM 回收对象&#xff0c;也会增加回收性能的不确定性。在一些特殊的业务场景下&#xff0c;不合适的垃圾回收算法以及…

Leetcode—剑指OfferII LCR 022.环形链表II【中等】

2023每日刷题&#xff08;三十三&#xff09; Leetcode—LCR 022.环形链表II 算法思想 参考k神的博客 实现代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ struct ListNode *detectCycle(struct List…

【C++】类和对象(6)--运算符重载

目录 一 概念 二 运算符重载的实现 三 关于时间的所有运算符重载 四 默认赋值运算符 五 const取地址操作符重载 一 概念 C为了增强代码的可读性引入了运算符重载&#xff0c;运算符重载是具有特殊函数名的函数&#xff0c;也具有其返回值类型&#xff0c;函数名字以及参数…

Git 简介及使用

前言 假设有这样一个场景&#xff0c;老板让员工做一个档案&#xff0c;员工这个档案做好了之后交给老板看&#xff0c;此时老板不满意&#xff0c;又让回去改&#xff0c;改完给老板看&#xff0c;但是老板又不是很满意&#xff0c;就这样改了又改&#xff0c;给老板看过之后&…

代码随想录算法训练营第四十五天| 139.单词拆分

文档讲解&#xff1a;代码随想录 视频讲解&#xff1a;代码随想录B站账号 状态&#xff1a;看了视频题解和文章解析后做出来了 139.单词拆分 class Solution:def wordBreak(self, s: str, wordDict: List[str]) -> bool:n len(s)dp [False] * (n1)dp[0] Truemax_len m…