这一小节说一下Matlab光场工具包的使用,展现重聚焦和多视角的效果。函数
从Lytro illum中导出的raw数据为.lfp格式的光场图像文件(约52M大小),该文件包含如下几部分:光场图像数据rawdata;metadata;相机序列号 serials;光场图像大小imgSize;拜尔格式 ‘grgb’。为了从.lfp文件中提取出光场图像rawdata,须要用到Matlab光场工具包,该工具包由D. G. Dansereau等人开发,目前有toolbox0.3,toolbox0.4两个版本,toolbox0.4的下载地址为:https://cn.mathworks.com/matlabcentral/fileexchange/49683-light-field-toolbox-v0-4?s_tid=srchtitle。这个网址还有配套的示例图片(sample 压缩包,另行下载就能够了),工具包的使用教程在工具包解压出来的文件夹里面(.pdf文件)。接下来就是对光场文件进行解码获得光场图像,并对光场图像进行去马赛克,色彩校订等操做获得RGB的彩色光场图像。工具
关于工具包的详细设置和使用方法,强烈建议参考这篇文章http://www.vincentqin.tech/2017/02/16/LightField%E5%85%89%E5%9C%BA/,做者写的很详细,我就不赘述了,当时刚开始使用工具包的时候向该文做者请教了不少东西,在此表示感谢~学习
从.lfp格式的光场文件中解析出RawImg到最终获得RGB图像有如下几个步骤,刚开始请仔细阅读工具包里的PDF文件:3d
1.从相机里导出白图像(White Images):code
根据matlab工具包解释,白图像是用光场相机在不一样的曝光条件下拍摄白色平面获得的图像,这些图像主要有两个做用,一是能够用来校订由镜头阴影形成的图像四角偏暗现象;二是帮助定位微透镜中心的坐标。Lytro illum相机内置了34幅白图像,能够经过相机“导出配对数据”导出到本地。白图像是Raw图,能够经过PhotoShop打开,下面是我用PhotoShop CS5打开后的图像。blog
2.处理白图像:教程
经过对每一幅白图像进行处理,分别获得每一幅白图像对应的微透镜网格模型(lenslet grid model),以下图所示,并创建一个WhiteImagesdatabase映射表。图片
3.利用白图像对光场文件进行解码获得rawImage:开发
输入.lfp文件,工具包读取WhiteImagesDataBase映射表,工具包选取最合适的白图像和微透镜网格模型进行光场文件的解码,获得拜尔格式的光场图像(图像尺寸为7728*5368),以下图左所示,光场工具包中获取光场Raw图是一个中间过程,在LFLytroDecodeImage()函数里面的这条语句LensletImage = LFP.RawImg,保存LensletImage就是了。放大后能够看到每个微透镜图像,以下图右所示。get
4.对rawImage进行去马赛克操做(demosaic): Lytro Illum中拜尔格式分布为‘gbgr’,根据此格式对解码出的光场图像进行去马赛克操做,获得RGB彩色图像。
5.对去马赛克后的图像进行色彩校订(color correction): 对上一步获得的图像进行色彩校订,获得色彩校订后的图像。
好了,如今已经从Lytro Illum光场相机的.lfp文件获得咱们想要的RGB光场图像(图像大小是7728*5368)了。
获得RGB光场图像后就能够作重聚焦了,我用的是空域重聚焦方法就是shift-sum,先对子孔径图像按照重聚焦公式进行平移而后相加求平均,我设置的alpha值为0.2F-2F,中间的步长能够本身设置从而获得不一样数量的重聚焦图片。我生成了256张重聚焦图片,用其中的50张作成了gif动图,以下图,展现一下重聚焦的效果。
子孔径图像是由物体发出的不一样方向的光线成像获得的,在视角上会有差异,Lytro Illum一共有15*15=225个不一样视角下的图像,作成gif动图展现一下效果:
经过5D光场数据矩阵获得多视角图像的代码以下,路径啥的本身设置:
光场相机也是能够算深度图的,并且方法还不止一种,简单提一下,之后或许还会继续研究:
1.利用双目视觉的方法,根据不一样视角下的子孔径图像匹配得出深度图。
2.利用聚焦法,根据不一样深度下每个像素点处的梯度或者纹理的不一样,算出最清晰的那张图片对应的alpha值就能够获得深度图。
学习Lytro Illum光场相机基本流程就是这样了,固然不免有不少理解不到位和错误的地方,诸位大侠若有发现,请多多指正!谢谢~~~