上一节中大概讲述了光场相机和光场的参数化表示,这一节就说一下光场相机内部是如何记录光场以及实现重聚焦的。

博主用的是Lytro Illum,所以就以Illum为例来说了,Illum的功能还是挺多的,上手使用的童靴需要相机使用手册可以上网找一下,都有的。

切入正题

首先,说一下Lytro Illum的一些基本信息:Illum的Senser一共有4000万个像素左右,得到的传感器图像(光场图像)尺寸为7728*5368,就是4148 3904个像素;Illum的微透镜阵列个数为541*434个,每一个微透镜后面对应的像素个数为15*15=225个;illum传感器得到的图像为拜尔格式,排布为'gbgr'。

博主以三个小问题开头,这也是我刚开始研究Lytro Illum时的疑问:

1.光场相机内部如何记录光线的方向?

有了上一节所说的微透镜结构,光场相机就可以实现光线的方向和强度的记录。如下图所示,不同方向的光线经过主镜头进入相机内部,汇聚到微透镜阵列上不同的微透镜上,经过微透镜后又发散成若干条光线分别到达传感器的感光元件上。这里每一个微透镜视为一个宏像素,每一个(宏像素)微透镜后面对应15*15个元像素(感光单元)。这15*15个元像素的亮度总和为最终宏像素的亮度,即宏像素的亮度为其对应所有元像素的积分。而每一个元像素对应通过前面微透镜的一条光线,在Lytro illum中,15*15个元像素就可以记录225条通过前面微透镜的不同方向的光线,所以Lytro illum一共可以记录的光线条数为N*225, N 为微透镜个数。

2.Lytro illum中光场如何参数化表示?

根据4D光场原理,光场用表示,在Lytro illum中, , 其中s, t分别表示微透镜(宏像素)阵列行数和列数。,其中 u, v 分别表示每一个微透镜后面元像素的行数和列数。而每一个宏像素处的亮度为其对应所有元像素的积分,用下式表示:

在光场 中,如果固定s, t, 即选定某一个微透镜,遍历u,v,就可以得到该微透镜下15*15个元像素图像,如下左图所示;如果固定u, v,即选定每一个微透镜下某一处元像素,遍历s, t,就可以得到一幅主镜头的子孔径图像,一共可以得到225幅子孔径图像, 如下右图所示为其中一幅。在如果你使用的是Matlab工具包,得到的光场数据保存在一个5D的数组中,比四维多出的一维是通道数。即LF(u,v,s,t,c),获取单个微透镜下((300,300)为例)的图像可以使用这条语句Img=squeeze(LF(:,:,300,300, 1:3)),而获取某一个子孔径图像((5,5)为例)可以使用这条语句Img=squeeze(LF(5,5, :, :, 1:3))。

每个微透镜单元后同一位置的像元均是主镜头同一子孔径的投影,由这些像元可共同组成一幅子孔径图像。不同的子孔径图像是不同方向的光线成像得到,因此在视角上会有区别。

    

3.Lytro illum如何实现重聚焦?

重聚焦就是将采集到的光场重新投影到新的像平面进行积分。以二维情况为例,L(u, s)为采集到的光场,U 和S分别表示主镜头孔径所在的平面和微透镜阵列所在平面,两个平面之间的距离为L。选择新的对焦平面S’,与U平面的距离为L’,令L’=α*L。S’平面上所成的像等于U-S’之间光场的积分,即:

对于同一条光线而言,应该有:

同时根据光线与各平面的交点坐标可以得到如下关系;

令, 变换后得到:

将其代入上式,得到:

推广到四维情况,可以得到如下的重聚焦公式:

从式中可以看出,重对焦就是对光场在位置维度进行平移后在方向维度进行积分的过程。

光场相机的理论研究差不多就这样了,想更深入研究的可以看关于光场相机的论文,其实看我上一篇列出来的就可以了。

下一节主要讲一下如何使用matlab光场工具包解码Lytro Illum拍摄得到的光场文件以及一些处理,并且展示一下重聚焦的效果,今天就到此。

光场相机重聚焦之二——Lytro Illum记录光场的更多相关文章

  1. 光场相机重聚焦之三——Matlab光场工具包使用、重聚焦及多视角效果展示

    这一小节说一下Matlab光场工具包的使用,展示重聚焦和多视角的效果. 从Lytro illum中导出的raw数据为.lfp格式的光场图像文件(约52M大小),该文件包含以下几部分:光场图像数据raw ...

  2. Lytro 光场相机重对焦C++实现以及CUDA实现

    前面有几篇博客主要介绍了光场和光场相机相关知识,以及重对焦效果和多视角效果的展示.算是自己学习光场过程的一种总结. 这次贴上自己用OpenCV/C++编写的重对焦算法实现(包含CPU版和CUDA GP ...

  3. Minimum Transport Cost(floyd+二维数组记录路径)

    Minimum Transport Cost Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/O ...

  4. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  5. Dokuwiki 二次开发记录

    Dokuwiki 二次开发记录 [转]http://www.syyong.com/other/Dokuwiki-Secondary-Development-Record.html DokuWiki 是 ...

  6. OBS-Studio二次开发记录

    OBS-Studio 是一款跨平台的,开源的视频直播客户端软件. 公司需要对他进行二次开发,开发的目的是使用它的录屏功能. 开发的要求是:定制全新的界面,所见即所得,window系统兼容要好. 开发步 ...

  7. geotrellis使用(十二)再记录一次惨痛的伪BUG调试经历(数据导入以及读取瓦片)

    Geotrellis系列文章链接地址http://www.cnblogs.com/shoufengwei/p/5619419.html 目录 前言 BUG还原 查找BUG 解决方案 总结 后记 一.前 ...

  8. Django day08 多表操作 (二) 添加表记录

    一: 一对多 1. 一对多新增 两种方式:  publish = 对象    publish_id = id 1. publish_id 和 publish 的区别就是: 1)publish_id 可 ...

  9. Java学习笔记二--API课堂记录

    JavaSE课堂记录(二) 第一节课 方法的重载:方法名相同,参数列表不同 方法的重写:方法名,参数列表相同 两同:方法名相同,参数列表相同 两小:访问权限小与等于父类,返回值类型小于等于父类(返回值 ...

随机推荐

  1. mysql 局域网同事之间直接用客户端访问

    情景: 几个人作为小组开发一个项目,以我的机器为服务器,将mysql服务安装在我的机器上,其他小伙伴用客户端都能访问我这个数据库 解决:   首先: 1.设置mysql允许其它机器连接(linux环境 ...

  2. 用python抓取求职网站信息

    本次抓取的是智联招聘网站搜索“数据分析师”之后的信息. python版本: python3.5. 我用的主要package是 Beautifulsoup + Requests+csv 另外,我将招聘内 ...

  3. SignalR指定用户推送消息

    一.首先,在MVC项目中安装SingalR包(SingalR2.0需要.net4.5以上,VS2010可以安装1.1.3版本,本例为VS2010+SignalR1.1.3). 打开工具-NuGet程序 ...

  4. Angular2发布思路(整理官网Deployment页面)

    本文是按着ng2官网的高级内容“Deployment”的思路整理得出的,原文虽然在angular2的中文站下挂着,截止目前却还是英文版未翻译,笔者就在这里结合自己的理解给出原文的一点点整理.这是原文地 ...

  5. NOI全国赛(2001)--食物链

    今天写了道并查集的题,看来并查集的题刷少了,,,,,用法好神奇啊!!!开三倍并查集 用i表示自己,i+n存天敌,i+2*n存可以克制de,再逻辑判断一下即可. 所以,要意识到并查集的分类处理可以开不同 ...

  6. 零件库管理信息系统设计--part03:管理员登录部分设计

    兄弟们,我又回来啦! 上次我把表建完了.今天来点干货,我们用ssm框架来先简单实现一下管理员的登录功能. 在实现之前,我对user表(管理员表)做了些简单的修改,先来看看: 忽略哪些蓝色的马赛克和乱输 ...

  7. Intellij IDEA中文乱码解决

    界面乱码 原因:IDEA默认设置界面的字体不支持中文 解决:修改为支持中文的字体,建议字体Microsoft Yahei UI.大小11,具体操作File -> Setting -> Ap ...

  8. 【一通百通】c/php的printf用法

    1.先说说PHP printf()函数: printf()函数的调用格式为: printf("<格式化字符串>", <参量表>); %d 十进制有符号整数  ...

  9. 数据库dbutils

    common-dbutils.jarQueryRunnerupdate方法:* int update(String sql, Object... params) -->  可执行增.删.改语句* ...

  10. IOS简单画板实现

    先上效果图 设计要求 1.画笔能设置大小.颜色 2.有清屏.撤销.橡皮擦.导入照片功能 3.能将绘好的画面保存到相册 实现思路 1.画笔的实现,我们可以通过监听用户的 平移手势 中创建 UIBezie ...