光场相机重聚焦原理之——光场的参数化表征

2023-12-06 19:18

本文主要是介绍光场相机重聚焦原理之——光场的参数化表征,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

博主最近在搞光场相机方面的研究啦,好了废话不多说,开始!

 1. 一些前言废话

首先,来一下光场的基本概念,来自百度百科。光场(light field):就是指光在每一个方向通过每一个点的光量。从概念里,你至少可以得到两点信息:1.光场包含光的方向;2.光场包含一个点的光量。

光场相机是个什么东西,和我们平常的相机有什么区别呢?

其实光场相机也是一个相机。。好吧有点儿啰嗦。我们知道普通的相机拍照成像,得到的离散的像素点,每一个像素都会有其像素值,那么这个像素值反应的就是光场中某一点的光量,仅此而已,我们不能够从图像中得到打到这个像素点位置的光线是从哪个方向来的,所以,普通的相机只能够得到光场中的光量信息,丢失了方向信息。

而牛逼哄哄的光场相机则不同,不仅能够记录光场的光量信息,也能记录光场中光的方向信息,也就是说它能够记录摄像机内部的整个光场!

光场相机长什么模样,以著名的Lytro公司的光场相机为例, 它们就是下面的模样,左图为第一代产品,名为 Lytro F01,(丑爆了)。右图为第二代产品,名为Lytro Illum (还将就).

当然还有著名的工业级光场相机 RayTrix,德国的企业,就不多说了。

                      

Lytro公司是斯坦福大学的吴义仁(Ren Ng)博士毕业后创办的公司,是世界上首款消费级别的光场相机,还是挺厉害的。他的博士毕业论文名为《Digital Light Field Photography》获得了2006年美国计算机协会(ACM)博士论文大奖。(据说现在已经从公司辞职回到学校教学去了。。。)

 

那光场相机能够记录整个光场又能怎么样呢?好,这就是卖点了,该相机能够实现先拍照后对焦。你没看错,就是这样,在拍完照了,你想重新对焦到图像中哪一个位置,就能通过点击图像得到该位置清晰的图片,放两张Ren Ng论文里《Light field photography with a hand-held plenoptic camera》的图片,对焦平面由近及远,是不是蛮神奇的,消费者不用担心拍到的图片没有聚焦到理想的位置,可以通过后期相机内部对光场的处理实现重聚焦作用(refocus)。

 

 2. 少说废话

 如果能够吊起你的胃口,那说明你还比较感兴趣。说重聚焦之前,我们需要先了解一下光场的参数化表征,就是说如何把抽象的光场参数化表示出来。当然,这些不是我研究的,都是一些大牛们做过的事情,想看原论文的可以根据下面提到的作者,年份等去谷歌学术一下。如果想快速掌握就看中文的文献就够了,因为研究的同胞们还是很多的,如下,当然Ren Ng的原著期刊论文也必须要看一看:

①周志良. 光场成像技术研究[J]. 博士学位论文. 合肥: 中国科学技术大学, 2012.

②聂云峰, 相里斌, 周志良. 光场成像技术进展[J]. 中国科学院大学学报, 2011, 28(5): 563-572.

③Ng R, Levoy M, Brédif M, et al. Light field photography with a hand-held plenoptic camera[J]. Computer Science Technical Report CSTR, 2005, 2(11): 1-11.

 

光场概念最早由A.Gershun在1936年提出,用于描述光在三维空间中的辐射传输特性。1991年,E.Adelson和J.Bergen根据人眼对外部光线的视觉感知,提出用7维函数来表征空间分布的几何光线,称为全光函数(Plenoptic Function) 。如果只考虑光线在自由空间的传输,其波长一般不会发生变化,则任一时刻的光线可由5维坐标表示。更进一步,忽略光线在传输过程中的衰减,M.levory和P.Hanraham将5维的全光函数降至4维,提出用两个相互平行的平面对四维光场进行参数化表示。

如下图所示,  表示光场的一个采样,L表示光线的强度,(u, v)和(s, t)分别为光线与两个平面的交点坐标。在四维坐标空间中,一条光线对应光场的一个采样点。现实中大部分成像系统中都可以简化为相互平行的两个平面,比如传统成像系统中的镜头光瞳面和探测器像面,如果用传感器像面中的坐标(x,y)表示光线的分布位置,那么镜头光瞳面坐标(u,v)就反应了光线的传输方向。

 

 

图2  四维光场的参数化表示

传统成像系统所采集到的光场分布可以用下图表示,探测器像面上每个点接收来自整个光瞳的光线进行积分,像面(x,y)处的光照度为

其中,(u,v)为镜头出瞳面上的坐标。

 

 

图3  传统成像的光场分布

可见传统成像系统所探测到的光场只能反应其强度和位置(x,y)之间的关系,而损失了其(u,v)方向的信息。

 

而光场相机与传统成像不同,光场成像需要利用二维的探测器像面同时记录光场的四维信息,即二维位置分布和二维传输方向。为了实现四维信息向二维平面的转换,必须对四维光场进行重采样和分布。光场相机在传感器前面放置微透镜阵列来实现光场的采集,如下图:

镜头、微透镜阵列、传感器三者之间位置关系为:微透镜阵列放置在主镜头的焦平面附近,而传感器放置在微透镜的焦平面附近。

也是就说光场相机和普通相机不一样的地方,主要就是在主镜头的焦平面附近放置了一个微透镜阵列,而将传感器Sensor放在了微透镜的焦平面附近,通过这样的关系来记录四维光场!

 那么在光场相机中参数化的光场是怎么表示的呢,为什么加一个微透镜阵列就能够记录光场中光线的方向的?L(u,v,s, t)中的u,v,s,t分别表示什么,又是如何实现重聚焦的?

夜已深,请看下文更新吧!

这篇关于光场相机重聚焦原理之——光场的参数化表征的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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程序远程debug原理与配置全过程

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

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

C#中通过Response.Headers设置自定义参数的代码示例

《C#中通过Response.Headers设置自定义参数的代码示例》:本文主要介绍C#中通过Response.Headers设置自定义响应头的方法,涵盖基础添加、安全校验、生产实践及调试技巧,强... 目录一、基础设置方法1. 直接添加自定义头2. 批量设置模式二、高级配置技巧1. 安全校验机制2. 类型