光场成像简介

创世纪之初,上帝说,要有光,于是,就有了光

我们所处的世界,其实就是一个充满光的世界,光线是这个世界最普通,最常见,最神奇的东西,无处不在,却又摸不着,物理学告诉我们,光是一种电磁波,而电磁波有电磁场,所以光,其实也有光场。

光场(Light Field)是空间中光线集合的完备表示,采集并显示光场就能在视觉上重现真实世界。全光函数(Plenoptic Function)包含7个维度,是表示光场的数学模型。全光函数可以表示为:

L ( x , y , z , ϕ , θ , λ , t ) L(x,y,z,\phi,\theta,\lambda,t) L(x,y,z,ϕ,θ,λ,t)

其中, x , y , z x, y, z x,y,z 表示空间位置, ϕ , θ \phi, \theta ϕ,θ 表示方向, λ \lambda λ 表示波长, t t t 表示时间,我们最常见的摄影或者显示,主要利用了光线的位置和波长 L ( x , y , z , λ ) L(x,y,z,\lambda) L(x,y,z,λ),很少会用到光线的方向信息,要想完全捕获环境中所有光线的信息,这个数据量是非常庞杂的,斯坦福大学的 M.levory和P.Hanraham 将全光函数进行了简化,变成了的一种四维信号: L ( u , v , s , t ) L(u, v, s, t) L(u,v,s,t),L 表示光线的强度,(u, v) 和 (s, t) 分别为光线与两个平面的交点坐标。在四维坐标空间中,一条光线对应光场的一个采样点,如下图所示:

在这里插入图片描述

  • 插入图像

其中 ( u , v ) (u, v) (u,v) 表示透镜光瞳所在的坐标, ( s , t ) (s, t) (s,t) 表示传感器所在的平面坐标,成像的时候,光线先经过透镜的光瞳,然后到达传感器上,传统的成像可以表示成:

I ( s , t ) = ∬ L ( u , v , s , t ) d u d v I(s,t) = \iint L(u, v, s, t)dudv I(s,t)=L(u,v,s,t)dudv

上面的式子表示,真实世界里的一个物点,发出的光线,经过光瞳之后汇聚到传感器上对应的一个像点上。这样的成像,只能记录光线的强度,无法获得光线的方向。

而光场相机与传统成像不同,光场成像需要利用二维的探测器像面同时记录光场的四维信息,即二维位置分布和二维传输方向。为了实现四维信息向二维平面的转换,必须对四维光场进行重采样和分布。光场相机有几种不同的实现方式,比较常见的有 相机阵列,微透镜阵列以及可编程光圈,相机阵列是最早的一种实现方式,后来斯坦福大学的博士吴义仁(Ren Ng)毕业后创立了 Lytro 相机公司,推出了世界上第一款消费级光场相机,采用的是在传感器前面,安置了一排微透镜阵列,如下图所示:

在这里插入图片描述

  • 插入图像

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

不同方向的光线经过主镜头进入相机内部,汇聚到微透镜阵列上不同的微透镜上,经过微透镜后又发散成若干条光线分别到达传感器的感光元件上。这里每一个微透镜视为一个宏像素,每一个(宏像素)微透镜后面对应 k × k k \times k k×k个元像素(感光单元)。这 k × k k \times k k×k 个元像素的亮度总和为最终宏像素的亮度,即宏像素的亮度为其对应所有元像素的积分。而每一个元像素对应通过前面微透镜的一条光线,在Lytro illum中, k × k k \times k k×k个元像素就可以记录 k × k k \times k k×k 条通过前面微透镜的不同方向的光线,所以Lytro illum一共可以记录的光线条数为 $ m \times n \times k \times k $, m × n m \times n m×n 为微透镜个数。

对比传统成像,我们可以看到,传统成像把一个物点发出的所有光线看成一束,都汇聚到一个像点上,而光场相机,把一个物点的光线分成了多束,分别汇聚到不同的像点上,很显然 k × k k \times k k×k 越大,意味着光线被分割的越细,意味着每个像点能接收到的光线越少, k × k k \times k k×k 一般也称为角分辨率,而 m × n m \times n m×n一般称为图像分辨率, k × k k \times k k×k 也称为视点数,类似在主透镜上开了 k × k k \times k k×k 个子孔径,每个子孔径都能成一个 m × n m \times n m×n 大小的图像,如下图所示,主透镜上,有三个虚拟的子孔径,每个子孔径都可以通过微透镜阵列,在传感器 sensor 上成不同的子图像

在这里插入图片描述

  • 插入图像

光场相机的角分辨率和图像分辨率是一个 trade-off 的关系,因为 sensor 总的像素数一定,如果 k × k k \times k k×k 增加了,意味着 m × n m \times n m×n 就会减少,反之亦然。

光场图像的表示有很多不同的形式,因为完整的光场图像是一个思维的信息,如果算上颜色通道,就是一个五维的信息,这里不考虑颜色通道,光场数据可以表示成: L ( u , v , s , t ) L(u, v, s, t) L(u,v,s,t)

  • 如果固定 ( u , v ) (u, v) (u,v),那么我们可以获得某一个视角下的子图像
  • 如果固定 ( s , t ) (s, t) (s,t),那么我们可以获得某一个微透镜后面的一个宏像素
  • 如果固定 ( u , s ) (u, s) (u,s),那么我们可以获得一个极线图,类似从图像阵列的某一列子图像中,抽取固定的一列拼接而成
  • 如果固定 ( v , t ) (v, t) (v,t),那么我们同样可以获得一个极线图,从图像阵列的某一行子图像中,抽取固定的一行拼接而成

如下图所示:

上图左边对应一个子图像,右边对应宏像素
在这里插入图片描述
上图分别对应图像阵列,极线图

  • 参考
    https://www.vincentqin.tech/posts/light-field-depth-estimation/
    https://www.cnblogs.com/riddick/p/6731130.html
    http://www.plenoptic.info/pages/refocusing.html
  • 6
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Matlab可以用来进行光场成像的仿真。大致的流程是先生成一个三维场景模型,然后通过光线追踪算法模拟光线在场景中的传播和反射,最终得到在成像平面上的图像。 具体来说,可以使用Matlab中的Computer Vision Toolbox中的函数来生成三维场景模型,比如使用stlread函数读取stl格式的三维模型文件,使用patch函数将其渲染出来。 然后,可以使用光线追踪算法模拟光线在场景中的传播和反射。Matlab中可以使用raytrace函数进行光线追踪,它可以接受场景模型和成像平面的参数作为输入,返回在成像平面上的图像。 最后,可以使用Matlab中的图像处理函数对图像进行后处理,比如去噪、增强等,来提高成像质量。 需要注意的是,光场成像是一个比较复杂的过程,需要掌握一定的光学和计算机视觉知识。同时,光线追踪算法也需要一定的计算资源支持,因此在进行大规模仿真时需要考虑计算性能。 ### 回答2: Matlab是一种功能强大的科学计算软件,可以用于各种领域的仿真和建模。光场成像是一种通过记录光场的幅度和相位信息来实现高质量图像重建的技术。 在Matlab中实现光场成像仿真,需要利用光传播和图像处理的相关工具包。一般来说,仿真包括以下几个步骤: 1. 创建光场模型:在Matlab中,可以使用光传播的数值模型,如传输矩阵法或衍射积分法,来描述光场的传播。通过设置合适的参数,生成需要仿真的物体的幅度和相位信息。 2. 光场传播:利用数值传播模型,将光场从物体传播到光学系统(例如透镜或衍射光栅),并记录每一步的光场信息。 3. 加入噪声:为了更加真实地模拟实际场景,可以随机添加噪声,如高斯噪声或泊松噪声,使仿真结果更接近实际情况。 4. 图像重建:通过对记录的光场数据进行逆传播计算,重建出高质量的图像。这一步骤可能涉及到图像处理、数值优化等算法。 5. 结果评估:使用合适的评估指标,如峰值信噪比(PSNR)、结构相似性指数(SSIM)等,对重建图像的质量进行评估,并进行性能比较。 通过使用Matlab中的相关函数和工具箱,可以有效地实现光场成像的仿真。Matlab提供了丰富的数学函数、图像处理工具箱和仿真模拟工具,使得光场成像的仿真过程更加便捷和高效。不仅如此,Matlab还支持可视化工具,可以直观地展示光场成像的结果,进一步提高仿真的效果。 ### 回答3: MATLAB是一种强大的数值计算和仿真软件,可以用于光场成像的仿真。光场成像是指通过记录光场的幅度和相位信息来生成图像的过程。在MATLAB中,可以使用光场传递函数(POF)来进行光场成像的仿真。 光场传递函数是描述光场传递过程的数学模型,用于计算成像系统中光场的传播和衍射过程。通过定义适当的光场传递函数,我们可以模拟光在不同介质中的传播和衍射现象,并得到目标物体在成像平面上的光场分布。 MATLAB提供了许多用于仿真光场传递函数的工具箱和函数,如计算波前传播、衍射模拟、光场重构等。通过这些函数,我们可以模拟不同类型的光场成像系统,如菲涅尔衍射成像、全息成像、干涉成像等。 在进行光场成像仿真时,通常会先定义目标物体的光场分布,在光场传递函数的作用下,计算光场在不同位置的传播和衍射过程,并最终得到成像平面上的光场分布。通过观察成像平面上的光场分布,我们可以了解到目标物体在成像系统中的成像效果。 除了光场成像仿真,MATLAB还提供了丰富的图像处理和分析工具,可以对仿真结果进行进一步的处理和分析。例如,可以使用MATLAB的图像处理工具箱对仿真结果进行滤波、增强、去噪等处理,提高图像的质量和清晰度。 综上所述,MATLAB是一款功能强大的仿真软件,可以用于光场成像的仿真。通过构建合适的光场传递函数模型,可以对不同类型的光场成像系统进行仿真,并得到目标物体在成像平面上的光场分布。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值