热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

光场相机重聚焦之二——LytroIllum记录光场

上一节中大概讲述了光场相机和光场的参数化表示,这一节就说一下光场相机内部是如何记录光场以及实现重聚焦的。博主用的是LytroIllum,所以就以Illum为例来说了,Illum的功能还是挺多的,上手

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

博主用的是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拍摄得到的光场文件以及一些处理,并且展示一下重聚焦的效果,今天就到此。


推荐阅读
  • Webpack5内置处理图片资源的配置方法
    本文介绍了在Webpack5中处理图片资源的配置方法。在Webpack4中,我们需要使用file-loader和url-loader来处理图片资源,但是在Webpack5中,这两个Loader的功能已经被内置到Webpack中,我们只需要简单配置即可实现图片资源的处理。本文还介绍了一些常用的配置方法,如匹配不同类型的图片文件、设置输出路径等。通过本文的学习,读者可以快速掌握Webpack5处理图片资源的方法。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • vue使用
    关键词: ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文介绍了使用CentOS7.0 U盘刻录工具进行安装的详细步骤,包括使用USBWriter工具刻录ISO文件到USB驱动器、格式化USB磁盘、设置启动顺序等。通过本文的指导,用户可以轻松地使用U盘安装CentOS7.0操作系统。 ... [详细]
  • 在Docker中,将主机目录挂载到容器中作为volume使用时,常常会遇到文件权限问题。这是因为容器内外的UID不同所导致的。本文介绍了解决这个问题的方法,包括使用gosu和suexec工具以及在Dockerfile中配置volume的权限。通过这些方法,可以避免在使用Docker时出现无写权限的情况。 ... [详细]
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文详细介绍了SQL日志收缩的方法,包括截断日志和删除不需要的旧日志记录。通过备份日志和使用DBCC SHRINKFILE命令可以实现日志的收缩。同时,还介绍了截断日志的原理和注意事项,包括不能截断事务日志的活动部分和MinLSN的确定方法。通过本文的方法,可以有效减小逻辑日志的大小,提高数据库的性能。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 本文介绍了使用kotlin实现动画效果的方法,包括上下移动、放大缩小、旋转等功能。通过代码示例演示了如何使用ObjectAnimator和AnimatorSet来实现动画效果,并提供了实现抖动效果的代码。同时还介绍了如何使用translationY和translationX来实现上下和左右移动的效果。最后还提供了一个anim_small.xml文件的代码示例,可以用来实现放大缩小的效果。 ... [详细]
  • Spring源码解密之默认标签的解析方式分析
    本文分析了Spring源码解密中默认标签的解析方式。通过对命名空间的判断,区分默认命名空间和自定义命名空间,并采用不同的解析方式。其中,bean标签的解析最为复杂和重要。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
author-avatar
不会游泳的鱼
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有