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

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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

Java集合之Iterator迭代器实现代码解析

《Java集合之Iterator迭代器实现代码解析》迭代器Iterator是Java集合框架中的一个核心接口,位于java.util包下,它定义了一种标准的元素访问机制,为各种集合类型提供了一种统一的... 目录一、什么是Iterator二、Iterator的核心方法三、基本使用示例四、Iterator的工

Java 线程池+分布式实现代码

《Java线程池+分布式实现代码》在Java开发中,池通过预先创建并管理一定数量的资源,避免频繁创建和销毁资源带来的性能开销,从而提高系统效率,:本文主要介绍Java线程池+分布式实现代码,需要... 目录1. 线程池1.1 自定义线程池实现1.1.1 线程池核心1.1.2 代码示例1.2 总结流程2. J

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu