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

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编译生成多个.class文件的原理和作用

《Java编译生成多个.class文件的原理和作用》作为一名经验丰富的开发者,在Java项目中执行编译后,可能会发现一个.java源文件有时会产生多个.class文件,从技术实现层面详细剖析这一现象... 目录一、内部类机制与.class文件生成成员内部类(常规内部类)局部内部类(方法内部类)匿名内部类二、

Python中随机休眠技术原理与应用详解

《Python中随机休眠技术原理与应用详解》在编程中,让程序暂停执行特定时间是常见需求,当需要引入不确定性时,随机休眠就成为关键技巧,下面我们就来看看Python中随机休眠技术的具体实现与应用吧... 目录引言一、实现原理与基础方法1.1 核心函数解析1.2 基础实现模板1.3 整数版实现二、典型应用场景2

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

一文带你了解SpringBoot中启动参数的各种用法

《一文带你了解SpringBoot中启动参数的各种用法》在使用SpringBoot开发应用时,我们通常需要根据不同的环境或特定需求调整启动参数,那么,SpringBoot提供了哪些方式来配置这些启动参... 目录一、启动参数的常见传递方式二、通过命令行参数传递启动参数三、使用 application.pro

基于@RequestParam注解之Spring MVC参数绑定的利器

《基于@RequestParam注解之SpringMVC参数绑定的利器》:本文主要介绍基于@RequestParam注解之SpringMVC参数绑定的利器,具有很好的参考价值,希望对大家有所帮助... 目录@RequestParam注解:Spring MVC参数绑定的利器什么是@RequestParam?@

JAVA封装多线程实现的方式及原理

《JAVA封装多线程实现的方式及原理》:本文主要介绍Java中封装多线程的原理和常见方式,通过封装可以简化多线程的使用,提高安全性,并增强代码的可维护性和可扩展性,需要的朋友可以参考下... 目录前言一、封装的目标二、常见的封装方式及原理总结前言在 Java 中,封装多线程的原理主要围绕着将多线程相关的操

kotlin中的模块化结构组件及工作原理

《kotlin中的模块化结构组件及工作原理》本文介绍了Kotlin中模块化结构组件,包括ViewModel、LiveData、Room和Navigation的工作原理和基础使用,本文通过实例代码给大家... 目录ViewModel 工作原理LiveData 工作原理Room 工作原理Navigation 工

Java的volatile和sychronized底层实现原理解析

《Java的volatile和sychronized底层实现原理解析》文章详细介绍了Java中的synchronized和volatile关键字的底层实现原理,包括字节码层面、JVM层面的实现细节,以... 目录1. 概览2. Synchronized2.1 字节码层面2.2 JVM层面2.2.1 ente

SpringBoot接收JSON类型的参数方式

《SpringBoot接收JSON类型的参数方式》:本文主要介绍SpringBoot接收JSON类型的参数方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、jsON二、代码准备三、Apifox操作总结一、JSON在学习前端技术时,我们有讲到过JSON,而在

MySQL的隐式锁(Implicit Lock)原理实现

《MySQL的隐式锁(ImplicitLock)原理实现》MySQL的InnoDB存储引擎中隐式锁是一种自动管理的锁,用于保证事务在行级别操作时的数据一致性和安全性,本文主要介绍了MySQL的隐式锁... 目录1. 背景:什么是隐式锁?2. 隐式锁的工作原理3. 隐式锁的类型4. 隐式锁的实现与源代码分析4