论文阅读:Seeing in Extra Darkness Using a Deep-Red Flash

论文阅读:Seeing in Extra Darkness Using a Deep-Red Flash

今天介绍的这篇文章是 2021 年 ICCV 的一篇 oral 文章,主要是为了解决极暗光下的成像问题,通过一个深红的闪光灯补光。实现了暗光下很好的成像效果,整篇文章基本没有任何公式,所用到的网络也比较简单,但最后成了一篇顶会的 Oral 文章,可能主要创新在于软硬件结合吧。

Abstract

本篇文章提出了一种新的闪光灯技术,利用一个深红波段的闪光灯进行补光,文章作者说,他们主要观察到在明亮环境下,人眼由视锥细胞主导成像感知,在暗光环境下,人眼主要由视杆细胞主导成像感知。人眼的视杆细胞对波长大于 620nm 的红外光谱并不敏感,然而相机 sensor 依然有感应。文章作者提出了一种新的调制策略,通过 CNN 网络实现图像引导的滤波,将一张有噪的 RGB 图像与一张闪光拍摄的图像进行融合。同时,文章将这个融合网络,进一步扩展到了视频重建,文章作者搭建了硬件原型,在不同的静态和动态场景都进行了验证,实验结果,证明这种新型闪光灯技术可以取得很好的成像效果,尤其是在暗光环境下。

Introduction

暗光成像是手机摄影中的一个重要特性,为了提升手机暗光成像的能力,现有的方法也做了多种尝试,从对 sensor 的改造,比如将 RGGB 的贝尔模式替换成了 RYYB 的贝尔模式,到后端算法的设计,比如利用多帧曝光技术。

基于闪光灯的摄影技术,同样也有非常悠久的历史,而且一般来说会获得更好的效果,尤其是在非常暗的环境下还有复杂运动的时候,这种时候,多帧融合的方式可能会存在配准对齐失效的问题。不过,闪光摄影技术也有一些弊端,一个是闪光灯发出的光随着距离的增加,衰减地很快,所以闪光灯一般能照射的有效距离不会太远;此外,闪光灯在闪光的一瞬间,对人眼会造成一个很强的炫目,在暗光环境下,这种强烈的闪光也会造成很不舒适的光污染,对暗视觉下的人眼系统造成损伤。如果利用不可见光波段比如近红外或者近紫外的闪光灯,可以一定程度上避免这个问题,不过目前的相机 sensor 一般对近红外或者近紫外没有光谱响应,需要进行定制化的设计。另外一个问题,RGB 域的图像与不可见光波段的图像域,由于物质对不同光谱的反射特性不一样的原因,可能存在一定的差异。这个对跨模态的图像配准与图像融合都存在一定的挑战。

1.1 Human Visual System

接下来,文章对人眼视觉系统做了分析,人眼的视网膜负责人眼对环境光的响应,视网膜上包含两种感光细胞,一种是视锥细胞,一种是视杆细胞,视锥细胞主要负责人眼对明亮环境以及颜色的感知,视锥细胞对 550nm 波长的光谱响应最强烈,视杆细胞主要负责人眼对暗光环境以及亮度的感知,视杆细胞对 500nm 波长的光谱响应最强烈,视杆细胞对长波长的光谱不敏感,视杆细胞对500nm 波长的光谱响应强度是对 650nm 波长的光谱响应强度的 3 倍。视锥细胞与视杆细胞的组合,形成了对中等光强环境的光谱响应。环境由明亮转为黑暗的时候,人眼需要一个更长的时间来适应,反过来,环境由暗转为明亮的时候,人眼的适应时间会更短。

1.2 Deep-Red Flash

文章作者接下来就提出用深红波段的闪光灯来实现暗光下的摄影,与常见的白光闪光灯比,可以感受到的光照强度会更低,对人眼的刺激会更小,而且夜晚视觉会也能够保存。与不可见波段的闪光灯技术相比,普通的相机 sensor 对深红波段是可以直接响应吸收的,不需要另外再对 sensor 定制,另外,深红波段也属于可见光范围内,与 RGB 图像可以更好地融合。

Camera and Flash Module

接下来,文章介绍了整个系统的硬件原型,从图中可以看到,一个可以发射深红波段的闪光灯放置在一个 Camear 旁边,LED 闪光灯通过信号触发,以便闪光灯与拍照能够同步。

在这里插入图片描述

Mesopic Flash Reconstruction

这一部分是文章的算法部分,首先文章分析了如何从深红闪光灯下的图像提取引导信息,文章中用到的 sensor,通过光谱响应分析测定,对于 660nm 波长的深红光谱来说,sensor 的红色通道的响应强度是绿色通道的 4 倍,是蓝色通道响应强度的 10 倍。一个直观的策略是直接用红色通道的信息作为引导信息,不过文章作者发现,这种方式可得到的动态范围比较窄,对于红色物体来说,可能很快就达到饱和了,而对于蓝色物体来说,却无法获得足够的能量强度。

为了分析不同物体对这种深红闪光灯的光谱响应,文章作者用 1269 Munsell 色卡进行分析,这个色卡基本可以代表大多数的自然物体,文章考虑了色卡上的每个色块在理想光照情况下对 660nm 的光谱响应,文章中使用一个恒定的光源,同时色块垂直光源发出的入射光线。最后的统计结果如下图所示:

在这里插入图片描述

上图左边的图表示的是,相比使用单个红色通道,使用三通道的信息,可以获得更大的动态范围。右边的图是一个统计直方图,表明 80% 的自然物体,对深红波段的光谱响应大于 0.1,说明深红波段有广泛的适用性。

接下来介绍图像融合,有了前面的大量铺垫,这个图像融合反而是比较简单的一种方法,文章中就是用了一个 UNet 来实现这个融合操作,文章中就是直接将没有闪光灯时的 RGB 图像与有闪光灯时的 RGB 图像连接在一起,然后送入一个 UNet 网络,实现整个的融合。

文章中,也介绍了如何对视频流进行操作,文章中提出了一种交叉采集图像,然后逐帧融合的方法,采集的时候,采集一帧有闪光的图像,然后再接一帧没有闪光的图像,这样交替地采集下去,为了实现时域的对齐,文章对 Flash-RGB 图像进行配准,因为常规的 RGB 图像噪声很大,很难配准对齐了。而 Flash-RGB 是通过深红闪光灯补光采集到的图像,所以图像的信噪比更好,更容易进行配准,通过 Flash-RGB 图像配准得到的位移向量场,文章中进行了拆分,一部分用于前一帧 Flash-RGB 图像的 warp,与当前帧的 No-Flash RGB 图像对齐融合,另外一部分用于当前帧的 No-Flash RGB 图像的 warp,与当前帧的 Flash-RGB 图像对齐融合,这样做,可以保证帧率不会减少。融合之后,还会再接一个时域平滑的网络,整体的算法框图如下所示:
在这里插入图片描述

Experiments

最后介绍一下实验部分,文章中在训练这个网络的时候,用的是仿真数据,文章中用的是 NYU v2 dataset,给定一张正常的 RGB 图像,通过给 RGB 图像加噪,来模拟暗光下的 RGB 图像,另外对 RGB 图像的三通道直接叠加,模拟深红闪光下的图像,不过为了更好的让网络学习如何利用这个引导信息,文章对模拟的深红图像进行了一个频率调制:

f ( x , y ) = α ⋅ sin ⁡ ( 2 π T ( x − x ˉ ) 2 + ( y − y ˉ ) 2 ) + β f(x, y) = \alpha \cdot \sin(\frac{2 \pi}{T} \sqrt{(x - \bar{x})^2 + (y - \bar{y})^2}) + \beta f(x,y)=αsin(T2π(xxˉ)2+(yyˉ)2 )+β

其中, x ∈ { 1 , 2 , . . . , W } x \in \{1, 2, ..., W \} x{1,2,...,W}, y ∈ { 1 , 2 , . . . , H } y \in \{1, 2, ..., H \} y{1,2,...,H}, α \alpha α 是幅度, x ˉ , y ˉ \bar{x}, \bar{y} xˉ,yˉ 是相位偏移, T T T 是周期, β \beta β 表示垂直偏移。

最后是一些效果样例的展示:
在这里插入图片描述
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++ 的设计模式之 工厂方法加单例

在下面的示例中&#xff0c;我将演示如何创建一个工厂类&#xff0c;该工厂类能够生成四个不同类型的单例对象&#xff0c;每个单例对象都通过单独的工厂方法进行创建。 #include <iostream> #include <mutex>// Singleton base class class Singleton { protecte…

C++项目实战——基于多设计模式下的同步异步日志系统-⑪-日志器管理类与全局建造者类设计(单例模式)

文章目录 专栏导读日志器建造者类完善单例日志器管理类设计思想单例日志器管理类设计全局建造者类设计日志器类、建造者类整理日志器管理类测试 专栏导读 &#x1f338;作者简介&#xff1a;花想云 &#xff0c;在读本科生一枚&#xff0c;C/C领域新星创作者&#xff0c;新星计…

三、RestClient操作索引库与文档

文章目录 三、RestClient操作索引库与文档3.1 操作索引库3.2 操作文档结束语 三、RestClient操作索引库与文档 ES官方提供了各种不同语言的客户端&#xff0c;用来操作ES。这些客户端的本质就是组装DSL语句&#xff0c;通过http请求发送给ES。 官方文档地址: https://www.ela…

HarmonyOS 语言基础类库开发指南上线啦!

语言基础类库提供哪些功能&#xff1f;多线程并发如何实现&#xff1f;TaskPool&#xff08;任务池&#xff09;和 Worker 在实现和使用场景上有何不同&#xff1f; 针对开发者关注的并发等语言基础类库的相关能力&#xff0c;我们在新推出的语言基础类库开发指南中提供了详细的…

MATLAB——RBF、GRNN和PNN神经网络案例参考程序

欢迎关注“电击小子程高兴的MATLAB小屋” %————RBF程序实例 %% I. 清空环境变量 clear all clc %% II. 训练集/测试集产生 %% % 1. 导入数据 load spectra_data.mat %% % 2. 随机产生训练集和测试集 temp randperm(size(NIR,1)); % 训练集——50个样本 P_train NIR(t…

子组件监听父组件消息,随之变化与不变化

父组件通过props传递给子组件消息&#xff0c;子组件有两种情况接收处理&#xff1a; 1、子组件监听父组件props的变化&#xff0c;同时随之变化【可以直接取props中的值展示&#xff0c;也可以监听值得变化处理】 2、子组件初始化时更新&#xff0c;随后不再随父组件变化 示…

【MySQL系列】- SELECT语句执行顺序

【MySQL系列】- SELECT语句执行顺序 文章目录 【MySQL系列】- SELECT语句执行顺序一、MYSQL逻辑查询处理的步骤图二、MYSQL执行顺序详解2.1 执行FROM操作2.2 应用ON过滤器2.3 JOIN外部行2.4 应用WHERE过滤器2.5 GROUP BY分组2.6 应用ROLLUP 或 CUBE2.7 HAVING过滤2.8 处理SELEC…

源码编译安装部署lnmp

源码编译安装部署lnmp 文章目录 源码编译安装部署lnmp1.简介&#xff1a;2.环境说明&#xff1a;3.部署前的准备工作4.安装nginx4.1.进入官网拉取nginx源码包4.2.通过IP地址访问nginx的web页面 5.安装mysql5.1.安装依赖包5.2.创建用户和组5.3.下载源码包并解压到/usr/local/5.4…

一些常用的软件架构

分层架构 分层架构&#xff08;Layered Architecture&#xff09;&#xff1a; 分层架构是将系统划分为多个逻辑层&#xff0c;每个层都有特定的职责&#xff0c;实现了分离关注点和提高可维护性。常见的层包括表示层&#xff08;Presentation Layer&#xff09;、业务逻辑层&…

深入理解Scrapy

Scrapy是什么 An open source and collaborative framework for extracting the data you need from websites. In a fast, simple, yet extensible way. Scrapy是适用于Python的一个快速、简单、功能强大的web爬虫框架&#xff0c;通常用于抓取web站点并从页面中提取结构化的数…

靶机 Chill_Hack

Chill_Hack 信息搜集 存活检测 arp-scan -l 详细扫描 扫描结果 显示允许 ftp 匿名链接 FTP 匿名登录 匿名登陆 ftp 下载文件并查看 anonymous10.4.7.139下载命令 get note.txt查看文件 译 Anurodh告诉我&#xff0c;在命令 Apaar 中有一些字符串过滤后台扫描 扫描结果…

css美化滚动条

/*定义滚动条高宽及背景 高宽分别对应横竖滚动条的尺寸*/ ::-webkit-scrollbar { width: 8px; height: 8px; background-color: rgba(0,0,0,.2); } /*定义滚动条轨道 内阴影圆角*/ ::-webkit-scrollbar-track { -webkit-box…

leetCode 5. 最长回文子串 动态规划 + 优化空间 / 中心扩展法 + 双指针

5. 最长回文子串 - 力扣&#xff08;LeetC5. 最长回文子串 - 力扣&#xff08;LeetCode&#xff09;5. 最长回文子串 - 力扣&#xff08;LeetC 给你一个字符串 s&#xff0c;找到 s 中最长的回文子串。如果字符串的反序与原始字符串相同&#xff0c;则该字符串称为回文字符串。…

模型的选择与调优(网格搜索与交叉验证)

1、为什么需要交叉验证 交叉验证目的&#xff1a;为了让被评估的模型更加准确可信 2、什么是交叉验证(cross validation) 交叉验证&#xff1a;将拿到的训练数据&#xff0c;分为训练和验证集。以下图为例&#xff1a;将数据分成4份&#xff0c;其中一份作为验证集。然后经过…

VulnHub lazysysadmin

一、信息收集 1.nmap扫描开发端口 开放了&#xff1a;22、80、445 访问80端口&#xff0c;没有发现什么有价值的信息 2.扫描共享文件 enum4linux--扫描共享文件 使用&#xff1a; enum4linux 192.168.103.182windows访问共享文件 \\192.168.103.182\文件夹名称信息收集&…

UWB安全数据通讯STS-加密、身份认证

DW3000系列才能支持UWB安全数据通讯&#xff0c;DW1000不支持 IEEE 802.15.4a没有数据通讯安全保护机制&#xff0c;IEEE 802.15.4z中指定的扩展得到增强&#xff08;在PHY/RF级别&#xff09;&#xff1a;增添了一个重要特性“扰频时间戳序列&#xff08;STS&#xff09;”&a…

软件开发“自我毁灭”的七宗罪

软件开发是一门具有挑战性的学科&#xff0c;它建立在数以百万计的参数、变量、库以及更多必须绝对正确的因素之上。即便是一个字符不合适&#xff0c;整个堆栈也会随之瓦解。 多年来&#xff0c;软件开发团队已经想出了一些完成工作的规则。从复杂的方法论到新兴的学科和哲学…

c++工厂注册类

工厂注册类 利用模版形式注册类 #include <iostream> #include <memory> #include <functional> namespace cyn {//自定义断言 //#ifndef _DEBUG // _RELEASE 或者 _DEBUG &#xff0c;根据你的编译器/构建系统 #ifdef _DEBUG // _RELEASE 或者 _DEBUG …

百度地图高级进阶开发:圆形区域周边搜索地图监听事件(覆盖物重叠显示层级\图像标注监听事件、setZIndex和setTop方法)

百度地图API 使用百度地图API添加多覆盖物渲染时&#xff0c;会出现覆盖物被相互覆盖而导致都无法触发它们自己的监听&#xff1b;在百度地图API里&#xff0c;map的z-index为0&#xff0c;但是触发任意覆盖物的监听如click时也必定会触发map的监听&#xff1b; 项目需求 在…

最详细STM32,cubeMX 点亮 led

这篇文章将详细介绍 如何在 stm32103 板子上点亮一个LED. 文章目录 前言一、开发环境搭建。二、LED 原理图解读三、什么是 GPIO四、cubeMX 配置工程五、解读 cubeMX 生成的代码六、延时函数七、控制引脚状态函数点亮 LED 八、GPIO 的工作模式九、为什么使用推挽输出驱动 LED总结…