光场的可视化与重聚焦原理(附重聚焦代码)

2023-10-29 20:40

本文主要是介绍光场的可视化与重聚焦原理(附重聚焦代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

作为计算光学成像领域的一个重要分支,随着近年来光场相机的发展,光场成像得到了越来越多的关注。本文主要介绍了光场的三种可视化途径(阵列子图像、宏像元图像与极平面图像),并分析了光场重聚焦的基本原理。

图1:四维光场在不同维度的可视化表现

光场成像专栏:

光场成像的历史与发展

光场的可视化与重聚焦原理

阵列相机光场去遮挡网络 DeOccNet(WACV2020)

一、光场的可视化途径

因为光场的双平面模型L(u,v,x,y)有四个维度,而图像通常只包含两个维度,因此我们难以直接通过2维图像对4维光场进行描述。然而,我们可以通过固定两个维度,将4维光场投影为2维图像,从而对光场进行观察。这个过程称作光场的可视化。根据所固定维度的类型不同,我们可以得到阵列子图像、宏像元图像与极平面图像三种不同的可视化形式。下文分别对这三种可视化途径进行分析。

(1)阵列子图像

图2:四维光场表达为阵列子图像方式示意图
 

由于相机平面上每一个采样点都可以采集到当前场景的一幅二维图像,因此如果固定相机平面的两个坐标 u=u0, v=v0, 则四维光场可以投影为坐标为 (u0, v0) 的相机所拍摄的子图像。若将光场中每一个视角的相机采集到的子图像看成一个整体,并按照相机平面的坐标顺序将子图像排列为一个阵列,则4维光场可以表达为“阵列子图像”的形式,如图2所示。在获取阵列子图像的过程中,我们固定了相机坐标,这使得每幅子图像反映的是光场的空间信息。由于阵列中的每张图像都对应着相机平面上的不同的采样点,其视角有着微小的差异,这种视角的差异体现在图像上就是不同子图像中同一物体之间存在的位置差异(disparity)。因此,所有的子图像可以联合反映出光场中的角度信息。

(2)宏像元图像

图3:四维光场表达为宏像元图像方式示意图

光场成像与传统成像方式不同之处在于——前者不仅仅可以记录光线的强度信息,还可以记录光线的方向信息。在光场的双平面模型中(参考光场成像的历史与发展),光线方向信息的记录可以理解为穿过像平面上点 (x0, y0) 的不同方向的光线在相机平面上映射为不同的坐标。如果固定x-y 坐标,将不同相机所拍摄的同一位置的像元组合在一起,则可以反映穿过 (x0, y0) 这一点的光线的角度信息。这个由多个像元组合而成的集合称为“宏像元”,如图3所示。宏像元内像素的数量为相机平面上采样点的数量,如果使用阵列相机进行场景获取的话,则对应阵列相机中子相机的数量。如果将所有的宏像元看成是普通的像元,按照单张场景图像的排列方式组合在一起的话,则构成了表达4维光场的另外一种方式——“光场宏像元图像”。

(3)极平面图像

图4:四维光场表达为极平面图像方式示意图

前面两种理解光场的方式分别是通过固定相机平面上的点(阵列子图像)或像平面上的点(宏像元图像),将另外一个平面的点组合在一起。阵列子图像在获取的过程中固定了相机平面的两个坐标,更侧重于反映光线的空间分布信息;宏像元图像在获取的过程中固定了像平面的两个坐标,更侧重于反映光线的角度分布信息。如果固定相机平面的某一个坐标(不失一般性地假设为u=u0 )与像平面的某一个坐标(不失一般性地假设为x=x0),则可以获得光线空间与角度分布的混合信息。如图4所示,这样形成的图像称为“极平面图像(Epipolar Plane Image,EPI)”。

EPI是多视角计算机视觉中的一个重要概念。不同于前面的阵列子图像与宏像元图像,单张EPI既包含光线的空间信息,也包含着光线的角度信息。综合考虑这两种类型的信息,在一幅EPI中就可以推断场景的深度与结构:假设空间中的点向各个方向发出的光线强度相等(即满足朗伯表面的性质),则该点对应于EPI中的一条纹理线,而纹理线的斜率可以映射出该点的深度信息。

(4)讨论

光场的高维度特性是光场图像处理(如光场图像超分辨、光场深度估计、光场视角重建等)面临的主要难题。以上讨论的三种可视化方案均为4维光场在不同空间的投影。对于不同的任务而言,采用不同的投影方式会取得不同的效果。例如有很多光场深度估计的算法选择基于对EPI图像中纹理线的斜率进行分析;arXiv上最近挂出的光场图像超分辨网络 LF-InterNet 则巧妙地通过阵列子图像与宏像元图像两种形式进行信息交互,大幅度提升了超分辨的性能。

二、光场图像的重聚焦

重聚焦作为合成孔径成像的一种最简单的形式,本质是利用“不同深度的物体在多视角子图像中对应的disparity不同”这一基本原理,将多视角子图像按照规律进行平移并叠加,最终凭借较大的等效孔径实现“浅景深”的效果。为了深入理解多视角子图像的叠加,我们首先利用双目图像(图5)对基本原理进行简单说明。

图5:双目立体图像重聚焦原理示意图

如图5(a)所示,假设我们利用双目相机对当前场景从左侧和右侧两个不同的角度进行拍摄,所拍摄的图像分别如图5(b)和图5(c)所示。由于距离相机较近的物体具有较大的视差,因此图中的矩形在双目图像中的disparity较三角形更大。如图5(d)所示,如果将两张图片进行平移,使得矩形重合的话,则不在同一深度的三角形由于disparity不匹配,无法同时重合,此时我们则称矩形处于聚焦状态,三角形处于失焦状态,反之同理。平移两幅图像使得某一深度的物体处于聚焦状态的操作称为“重聚焦”。

图6:光场重聚焦原理示意图

相比于双目图像,光场图像具有更多的视角,这也使得光场重聚焦涉及到多幅图片的联合位移与叠加。为了便于说明光场重聚焦的原理,我们作图6。图6(a)所示为光场子图像阵列,其中的图片之间具有一定的视角差异。由于disparity与深度存在反比关系(参考光场成像的历史与发展),因此物体所在深度越大,对应图像的disparity越小,无穷远处的disparity为0。在通常情况下,为防止图像之间disparity的绝对值过大,这些子图像会首先经过预处理使得场景中某个深度值(称为校正深度)对应的disparity为0,从而使得大于校正深度的物体对应的disparity为负值,小于该校正深度的物体对应的disparity为正值。预处理后,如果将这些图片直接进行叠加,则校正深度的物体由于disparity为0而处于聚焦状态,其他深度的物体则经历不同程度的焦外虚化。

图6(b)形象地说明这个过程,我们取光场子图像阵列中的某一行或某一列的5张图像叠加在一起,用不同颜色的直线从纵向穿过不同深度的物体的同一点,则处于聚焦深度的物体对应的直线应当是竖直状态的,而其他深度的物体对应的直线处于倾斜状态。且直线越倾斜,对应的物体所经历的失焦就越严重。如图6(c)所示,当子图像经过联合位移后,各条直线的状态会发生改变,对应于不同深度的聚焦状态发生改变。

我们在斯坦福大学光场数据集的 Lego Knights 场景中进行了重聚焦实验,图7展示了光场重聚焦的效果。

图7:光场重聚焦效果展示图

最后,笔者给出了光场重聚焦的一个示例代码(Demo),相关下载链接为:https://github.com/YingqianWang/Light-Field-Refocusing-A-Demo

更多《计算机视觉与图形学》知识,可关注下方公众号:

这篇关于光场的可视化与重聚焦原理(附重聚焦代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

ShardingProxy读写分离之原理、配置与实践过程

《ShardingProxy读写分离之原理、配置与实践过程》ShardingProxy是ApacheShardingSphere的数据库中间件,通过三层架构实现读写分离,解决高并发场景下数据库性能瓶... 目录一、ShardingProxy技术定位与读写分离核心价值1.1 技术定位1.2 读写分离核心价值二

深度解析Python中递归下降解析器的原理与实现

《深度解析Python中递归下降解析器的原理与实现》在编译器设计、配置文件处理和数据转换领域,递归下降解析器是最常用且最直观的解析技术,本文将详细介绍递归下降解析器的原理与实现,感兴趣的小伙伴可以跟随... 目录引言:解析器的核心价值一、递归下降解析器基础1.1 核心概念解析1.2 基本架构二、简单算术表达

深入浅出Spring中的@Autowired自动注入的工作原理及实践应用

《深入浅出Spring中的@Autowired自动注入的工作原理及实践应用》在Spring框架的学习旅程中,@Autowired无疑是一个高频出现却又让初学者头疼的注解,它看似简单,却蕴含着Sprin... 目录深入浅出Spring中的@Autowired:自动注入的奥秘什么是依赖注入?@Autowired

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

从原理到实战解析Java Stream 的并行流性能优化

《从原理到实战解析JavaStream的并行流性能优化》本文给大家介绍JavaStream的并行流性能优化:从原理到实战的全攻略,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的... 目录一、并行流的核心原理与适用场景二、性能优化的核心策略1. 合理设置并行度:打破默认阈值2. 避免装箱

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W