光场源文件生成SAI

通过win5-lid文章找到了16年的文章,win5-lid是使用这个16年做的数据集55G

 

16年数据集下载链接:http://plenodb.jpeg.org/lf/epfl/ 可以下载到lft文件、解码后的4D光场文件、通过lytro desktop计算出来的深度图

 

找到了光场工具箱LFToolbox0.5 2020年发布的工具箱

通过将下载后的工具箱复制到(./toolboox)文件夹下,然后通过设置路径加载工具箱文件夹,即可调用里面的函数

edit + 文件名 可以自己打开m文件

what + 工具箱名可以查看工具箱里所有m文件

which + 文件名 可以查看m文件的具体信息

 

里面有demo想尝试学一下里面的demo,下次可以汇报这个

https://www.cnblogs.com/riddick/p/6738277.html

 

https://vincentqin.tech/posts/LightField-Toolbox/

 LFToolbox

学习笔记

索引顺序

水平光线位置s

垂直光线位置t,

水平光线方向u,

垂直光线方向v

和颜色通道c,我们使用索引顺序L(t,s,v,u,c)。

 

双平面参数化

每个像素索引[i,j,k,l]映射到空间[s,t,u,v]中的相应光线,其中s,t、u和v中的每个都以米为单位测量。

1.解码:透镜阵列将4D光场编码到2D传感器上,解码将取消此过程。

2.校准:这是描述相机光学特性,以将每个测量像素映射到空间光线。

3.校正:消除解码光场中的失真,将像素到光线的映射简化为线性关系。

matlab运行过程记录:

1、按照pdf文件里说的将demo添加到了路径里面去,然后运行了几个函数

按顺序

--运行LFUtilProcessWhiteImages来建立白图像数据集

--运行LFUtilDecodeLytroFolder来解码样本光场,对lfp和raw文件进行解码

--再次运行LFUtilDecodeLytroFolder来进行颜色校正,颜色校正应用光场元数据中的信息,包括基本RGB颜色和Gamma校正,运行如下指令来进行颜色矫正

    DecodeOptions.OptionalTasks = 'ColourCorrect';
    LFUtilDecodeLytroFolder([], [], DecodeOptions);

--运行LFUtilProcessCalibrations 定位和编目摄像机校准

--运行校正特定的光场————要校正自己的光场,必须校准相机。

    DecodeOptions.OptionalTasks = 'Rectify';
    LFUtilDecodeLytroFolder( ...
    'Images/F01/IMG_0002__frame.raw', [], DecodeOptions);

  校正的作用如下,消除透镜畸变

  

--通过伽马矫正使得光场图像变亮,先转变成浮点,然后再去开根号

    LF = LFConvertToFloat(LF);
    LFDisp( LF.^0.5 )
    axis image

也可以直接不改变原本光场存储的值而是去提高其显示亮度

    LFDisp( LFDisp(LF).^0.5 )
    axis image

--显示光场的函数

FigureHandle = LFDispVidCirc( LF )用来以伪视频方式播放LF图像

FigureHandle = LFDispMousePan( LF )用来以鼠标拖动的方式来展示LF图像

通过LFDispMousePan(LF, 2) or LFDispVidCirc(LF, [], 2)将显示的大小加倍 

显示一张SAI图LFDisp( LF(9,8,:,:,:) );显示一个EPI图LFDisp( LF(9,:,226,:,:) )都是显示函数,

以一条的形式显示EPI图像LFDisp( LFHistEqualize( LFDisp( LF(9,:,226,:,:) ) ).^0.7 )显示相同的对比度拉伸和gamma校正

LFDispTiles(LF, 'stuv')显示SAI阵列,1到15连续的;LFDispTiles( LF, 'stuv', struct('SubsampRate',2))显示1到15中奇数的

 

 LFDispTiles( LF(:,:, 85:100, 230:245, :) )显示切片;LFDisp( LFHistEqualize( LFDispTiles( LF(:,:,85:100, 230:245,:) ) ) )另外一种显示方式,提高了亮度

 

LFDispTiles( LF, 'uvst' )显示的是宏像素图,旁边的黑条是坐标,与图无关

 

LFDispProj( LF, 3,4 )将光场可视化为2D平面上的投影,其中3,4表示的是(v and u),相当于在零斜率深度重新聚焦,目前理解的是s,t上的值相加后平均;LFDispProj( LF, 3,4, 'max' )做同样的事情,但找到每个u,v样本沿s,t的最大值

LFDispProj可以理解成选择向不同两个维度上进行投影后得出的图像,投影方式默认为加和平均

 

3.3没去管

3.4

ESLF存储方式即宏像素图,使用LF = LFReadESLF('Images/ESLF/Plant.eslf.jpg');去读取

写入ESLF文件:

load('Images/Illum/Jacaranda__Decoded.mat','LF');
WriteAlpha = true;
LFWriteESLF( LF, 'Jacaranda.eslf.png', WriteAlpha );   写入后418M

LFWriteESLF( LF, 'Jacaranda.eslf.png' );忽略alpha通道,写入后300M

LF = LFConvertToInt( LF, 'uint8' );
LFWriteESLF( LF, 'Jacaranda.eslf.png' );转化为8bit写入后102M

LFWriteESLF( LF, 'Jacaranda.eslf.jpg' );转化为8bit写入后16M

LFWriteESLF( LF, 'Jacaranda.eslf.jpg', [], 'Quality', 95 );调整压缩率,写入后38M

 3.5

工具箱提供了一个用于平面聚焦和重聚焦,超分辨率的空间移位和求和过滤器,以及一组用于平面和体积聚焦的线性2D和4D过滤器。

LFDemoBasicFiltLytroF01出9张图,input一张,slope 一个参数 slopes两个参数

shift sum filter,slope 3张

Freq.line filt t,v slope, BW 2张

Fequency planar filter slope BW 1张

Frequency hyperfan filter,slopes ,BW 2张

3.6及以后还没看

4详细解码

5详细校准

 

 

 

 

 

 

 

 

 

LFDispVidCirc用来以伪视频方式播放LF图像

FigureHandle = LFDispVidCirc( LF )用来以伪视频方式播放LF图像

FigureHandle = LFDispMousePan( LF )用来以鼠标拖动的方式来展示LF图像

 

 

从Lytro Illum光场相机的.lfp文件得到我们想要的RGB光场图像(图像大小是7728*5368)

 

A开头的相机是第一代 F01

B开头的相机是第二代

问题:illum解码编码后的大小是15*15*434*625*4,其中这个4是什么呢?

alpha通道干嘛用的

LFHistEqualize是干什么的呢?

目标就是搞一张合成的模糊光场图像出来

 

那些校准矫正要往后再来搞什么的

 

三通道和四通道的区别:四通道图像是在三通道的基础上加上了一个Alpha通道,Alpha用来衡量一个像素或图像的透明度。比如Alpha为0时,该像素完全透明,Alpha为255时,该像素是完全不透明。在matlab中三通道分别表示RGB,在opencv中表示的是BGR

 

posted @ 2022-11-16 10:07  无待无己  阅读(135)  评论(0编辑  收藏  举报