光场相机原理及仿真实现

估计是因为最近Lytro二代的上市吧,光场相机的概念就又火了一把。借着昨天晚上无意间看到知乎上关于光场相机的问答,我就在此献丑,说下当初我对光场相机的一些理解。

需要指出的是,现在所说的光场相机有很多种,比如魅族的伪光场相机(说是伪光场相机我都觉得坑爹,明明是拍摄了几幅不同焦距的图像而已!)。而我这里说的是Ren NG的光场相机,也就是Lytro。

什么是光场相机呢?光场相机就是先拍照后聚焦的相机;光场相机就是可以记录相机内部的光线传输方向等信息的相机;光场相机就是比傻瓜相机还傻瓜的相机,允许再拍摄后根据拍摄者的需要再重新聚焦到任意的位置。

Matlab仿真实验

按照惯例应该是先要上图的,ok,我先上我一年多以前用matlab仿真实现光场相机产生的图,不够精确,还请见谅。

下图(1)是使用matlab仿真产生的光场相机观测数据。

光场相机原理及仿真实现_第1张图片

图(1)

下图(2)、图(3)是图中9个字母的位置关系(9个字母与相机的距离各不相同):

光场相机原理及仿真实现_第2张图片

图(2)

光场相机原理及仿真实现_第3张图片

图(3)

好了,下面是见证奇迹的时刻了,如图(4)所示,是根据图(1)记录的原始光场数据重聚焦得到的9幅图像,分别聚焦在每个字母的位置。

光场相机原理及仿真实现_第4张图片

图(4)

由于使用matlab仿真验证,数据的离散化等一系列原因导致重构质量还有待提高,不过已经可以说明问题啦。

光线记录

结果已经展示,我也说说原理吧,都说有图有真相,为了让那些像当初的我一样的人能够更好的理解,我会在下面再上几幅图。

光场相机是因为在普通相机镜头(主镜头)焦距处加微透镜阵列实现记录光线的,然后根据记录的光线实现重聚焦的。那么是如何记录光线的呢,我觉得这个可能是很多人想要了结的问题,下面再次上图,如图(5)所示,微透镜s位于主镜头u的焦距处,传感器位于微透镜s的焦距处(这个其实也很重要的,Ren Ng在他的论文中也说啦,下面会简单的介绍)。

注意:由于微透镜的焦距远远小于主透镜的焦距,因此主透镜可以看做位于微透镜镜的无穷远处。从而可以认为主透镜u上的深绿竖条区域经过某个微透镜后正好聚焦在微透镜后的某一个像素上,又由于微透镜是主透镜的几百分之一,那么近似于采样的理解,可以认为这一个像素就是蓝色的线内部所有光线的一个采样。通过这种方式就记录了相机内部的一条光线;同理,其他像素也都对应一条光线(这样就是为什么Lytro一代记录了1100万条光线,而二代记录了4000万条光线)。

光场相机原理及仿真实现_第5张图片

图(5)

夜已深了,既然说了,我就说完吧,上面图(5)说明了光场相机如何记录一条光线,但是可能还是不够清楚,索性再上两幅图,如图(6)所示,此刻的某个微透镜是不是很像传统相机的主透镜了,而主透镜是不是就相当于位于无穷远的场景了(这些都说废话),回归正题,大家是不是发现了,由于主透镜、微透镜阵列、传感器三者的位置关系,每个微透镜后面的像素可以看做是该像素镜像到主透镜区域的过来的光线的采样。

光场相机原理及仿真实现_第6张图片

图(6)

下面再看图(7),有完没完啦,手机党一定要泪奔啦,好吧,在此致以诚挚的歉意。OK,继续,其实此刻拿出图(7)是为了说明一个前面没有讲到的问题,前面只说一个了一个像素记录了一条光线,而没有谈到光线的方向信息。其实很简单,由于每个像素的位置是固定的,每个像素对应的微透镜的位置也是固定的,由于光线的直线传播,很容易得出光线的方向信息。好吧,再通俗一点:以图(6)和图(7)为例,假设主透镜后面有4个微透镜,每个微透镜后面有8个传感器(为了各种方便,此处都已平面空间为例,立体空间可以以此类推),图(6)中的红色传感器对应图(6)中主透镜的红色区域,如果说这个微透镜的坐标为s1(定值),而红色区域的坐标为7,那么红色传感器记录的这条光线就可以表示为:L(7, s),图(6)中的光线就为L(u, s1),而图(7)中的这些光线就为L(4,s)。所有的光线就对应L(u, s)。

光场相机原理及仿真实现_第7张图片

图(7)

重聚焦

在说重聚焦之前有个问题需要说明下:看过光场相机原始数据的(或者看我仿真产生的数据)都知道,直接观测数据是不能看的,是一个一个的圆形区域,因为每个微透镜都对圆形的主透镜成像,所以实际上光场相机上最终产生的图像是对原始数据进行求和之后得到的,怎么求和呢,就是每个微透镜后面对应的像素加起来,所以一个微透镜也就成了最终的一个像素,而微透镜的尺寸是不能太小的,所以就导致了最终的成像分辨率不高。

好吧,下面可以说重聚焦啦,我又要上图了,如图(8)所示:由于光线的直线传播,既然知道了光线在垂直方向上的两个坐标,又知道了两个坐标之间的水平距离,而传感器记录了光线的强度,根据这些条件,剩下的就是简单的几何问题啦,我就不说啦,一切都在图上。实际上我们的聚焦不就是调整这个水平距离,让光线到达聚焦平面嘛,现在既然知道了光线的方向和强度信息,当然可以随意的重聚焦啦。

光场相机原理及仿真实现_第8张图片

图(8)

代码

GitHub

你可能感兴趣的:(matlab,图像处理,编程)