见ReadMe文件
解压Toolbox至一个正确的路径,运行程序 LFMatlabPathSetup来安装Matlab路径。每次重新开启Matlab时都要设定这一步骤,所以你可以考虑在startup.m添加语句,例如:
run('~/MyMatlabCodee/LFToolbox0.4/LFMatlabPathSetup.m')
Samples ----------------------------------------------取样上级
Images -------------------------------------------取样光场图片
F01 ------------------------------------------F01图片
Illum -----------------------------------------照度图片
Cameras -----------------------------------------存储一个或多个相机的信息
A000424242 -------------------------------用于测量F01取样的相机
CalZoomedOutFixedFoc -----一个单独校正结果
WhiteImages----------------------F01相机的白图像
B5143300780 ------------------------------用于测量照度取样的相机
WhiteImages ---------------------照度相机的白图像
从Matlab打开到顶层的示例文件夹。如果你的路径正确,Matlab命令ls会列出上级文件夹
Image
Cameras
|
|
DecodeOptions.OptionalTasks = 'ColourCorrect';
LFUtilDecodeLytroFolder ([ ] , [ ] , DecodeOptions);
DecodeOptions参数要求执行可选的任务颜色校正。第一个和第二个参数通过使用空数组[ ]省略了。
颜色校正应用了在光场元数据中找到的信息,包括基础的RGB颜色和伽马校正。这个脚本保持了每个光场上进行的操作轨迹,这样,操作在编码过程中就不会再重复了。而是加载每个已经解码的光场,对其进行操作,使用颜色校正后的光场重写它。相似的,以后的请求不会重复已经完成的颜色校正操作。
解码和颜色校正可以在一步执行,包括在对LFUtilDecodeLytroFolder的第一个调用中完成colorcorrect任务。
在toolbox0.3版本,直方图调整不再自动应用,你可以使用LFHistEqualisze应用直方图调整。Illum图像不是伽马校正的。示例颜色校正输出在图二第二行图片和图三中展示。
|
load('Image/F01/IMG_0001_Decoded.mat');
来加载光场变量LF,然后运行 LFDispVidCirc(LF) 或LFDispMousePan(LF)其中之一。前者自动使圆周运动具有动画效果,后者允许鼠标控制运动:在窗口内点击和拖拽调整观点。使用 LFDispMousePan(LF, 2)或者LFDispVidCirc(LF, [ ], [ ], 2)尝试更大的显示,这样使显示窗口增加一倍(变为原来的两倍)在更改显示大小之前,请关闭任何打开的显示窗口。
DecodeOptions.OptionalTasks = 'Rectify' ;
LFUtilDecodeLytroFolder(... 'Image/F01/IMG_0002_rrame.raw',[ ] ,DecodeOptions);
LFUtilProcessCalibrations脚本建立一个校正数据库,并保存在Cameras/CalibrationDatabase.mat中。这个文件允许为每一个光场显示合适的校正。样品包中只提供一种校准,仅适用于F01样品2和5。
正如在颜色校正举例中,我们传递一个OptionalTasks参数,这一次请求纠正。纠正后的光场重写编码的光场文件,并且编码的脚本不会重复的采用同一类校正。对样品2进行纠偏的结果如图4所示:
|
3.从斯坦福光场取样顶级 运行 LFReadGantryArray:
LF=LFReadGantryArray( ' LegoKnights/rectified ' ,struct ( 'UVLimit ' ,256));
这将LegoKnights光场加载到一个17×17×256×256×3的数组中。
LF = LFReadGantryArray('LegoKnights/rectified');
一小部分斯坦福光场具有Lawnmower模式。这些图像可以用如下语句读入并且调整
LF = LFReadGantryArray('humvee-tree', struct('STSize', [16,16]));
LF(1:2:end,:,:,:,:) = LF(1:2:end,end:-1:1,:,:,:);
一些基础滤波是新出现的 LFToolbox 0.4,包括用于平面焦点的移位和求和滤波器,以及用于平面焦点和体积焦点的一组线性2D和4D滤波器。
运行 LFDemoBasicFiltLytroF01 或者 LFDemoBasicFiltIllum其中一个可以用于演示在Lytro图像上运行的一些过滤器。这些应该在取样文件夹的顶级运行,在3.1节描述的编码光场过程后。采用整流光场可获得最佳性能。
运行LFDemoBasicFiltGantry作为一个过滤斯坦福光场的演示。这应该在按照3.2节的说明下载并解压缩示例之后,从Stanford light fields文件夹的顶级完成。
取消注释LFDemoBasicFiltGantry顶部附近的适当行,以便从12个输入光字段中进行选择。
滤波输出的例子如图5、6、7所示。
|
|
|
下面的示例假设您已经完成了上面的解码过程,包括生成白色图像数据库。这里使用的小型校准数据集仅用于快速演示工具箱的操作,在有效校准相机方面存在以下几个不足:
更真实(和更大)的数据集可以在http://marine.acfr.usyd.edu.au/plenoptic-imaging获得。想好的结果应该使用19×19网格和3.6 mm间距,且至少有十个不同的姿势。
|
LFUtilDecodeLytroFolder( ...'Cameras/A000424242/PlenCalSmallExample/');
这应该发现和解码校准棋盘图像。请注意,颜色校正被省略了,因为它不是必需的,而且校正会影响结果。其中一个解码棋盘图的缩略图如图8所示。
3. 运行 LFUtilCalLensletCam来运行标定。该功能自动完成所有阶段的校准。使用的命令
CalOptions.ExpectedCheckerSize = [8,6];
CalOptions.ExpectedCheckerSpacing_m = 1e-3 * [35.1, 35.0];
LFUtilCalLensletCam( ...'Cameras/A000424242/PlenCalSmallExample',CalOptions);
这些选项说明校准函数棋盘间距是35.1×35.0毫米,有8×6变焦。注意边缘角落不包括在这个数字里面,所以一个标准的8×8平方棋盘收益率7×7角。这些值可以在标定示例附带的自述文件中找到。自动标定通过角识别、参数初始化、无透镜畸变的参数优化、带透镜畸变的参数优化,最后进行参数细化。这些在第5节中有更详细的说明。
在参数初始化步骤中,重新绘制姿态估计显示,如图9所示。这种显示在整个保持阶段都在更新,反映了姿态和相机模型估计的精细化。
文本输出中还显示了重新投影错误。这个小校准示例的典型最终均方根误差(RMSE)值在0.2 mm附近。
校准过程的最终产品是校准信息文件CalInfo.json,其中包含姿态、内在和失真参数,以及用于解码棋盘光场的微透镜网格模型。
验证校准的一种方法是校正棋盘图。这个过程与解码过程中描述的校正步骤非常相似:
|
DecodeOptions.OptionalTasks = 'Rectify';
LFUtilDecodeLytroFolder('Images/PlenCalSmallExample', ...[], DecodeOptions);
检查文本输出,请注意校正已经根据这些图像的缩放和焦点设置自动选择了小样本校准。
由于校正数据集的局限性,对校正后的图像进行目视检查可能会显示较差的结果。
在Cameras/A000424242/PlenCalSmallExample删除标定生成的文件 CalInfo.json,并且重新运行 LFUtilProcessCalibrations。上述验证过程中,尽管相机参数有轻微的不匹配,但反复使用默认的样本校准会得到更合理的验证结果,如图10所示。
|
处理来自您自己的相机的图像与到目前为止介绍的示例非常相似。
首先,创建一个与相机/A000424242文件夹平行的新文件夹,以包含相机的白色图像和执行的任何校准。命名规定是将这个文件夹命名为与相机序列号匹配的文件夹。接下来,为白图像创建一个子文件夹。您的文件夹结构现在应该是这样的:
Samples----------------------------------------------------样例最高级
Cameras-----------------------------------------------存储一个或多个相机
A000424242-------------------------------------用于测量样例的相机
CalZoomedOutFixedFoc-----------------一个独立的标定结果
PlenCalSmallExample--------------------一个新添加的标定结果
WhiteImages--------------------------------示例相机的白图像
Images--------------------------------------------------光场图片示例
按照附录A中描述的步骤,提取相机的白色图像并将它们放入新创建的白色图像文件夹中。您执行的任何校准都应该位于WhiteImages文件夹旁边的自己的文件夹中。
在samples文件夹的顶层,运行LFUtilProcessWhiteImages来处理相机的白色图像。生成的网格模型将被添加到白色图像数据库,并自动应用于您的相机拍摄的照片。
您可能会得到一个复杂的树结构,图像下面有许多子文件夹。
LFUtilProcessWhiteImages将递归搜索这个结构,解码它识别的任何光场。
要纠正你自己的图像,你应该标定你的相机。按照上述步骤进行,除了使用自己存储在在你自己的相机文件夹里的图像。举例来说,你的第一次标定可能存储在Samples/A123412123/CalZoomedOut。
此工具箱根据[1]中描述的解码过程将基于透镜的光场图像解码为4D光场结构。这个过程的核心是输入一个白图像和一个微透镜图像。白图像是通过扩散器拍摄的图像,用于校正渐晕(图像边缘附近变暗),并构建一个表示透镜中心位置的网格。
每个Lytro相机都预装了一组独特的白图像,对应于各种变焦和对焦设置。解码光场图像时,选择与相机拍照时的变焦和对焦设置最接近的白图像。白图像可以按照A.1节中的说明从Lytro文件中提取。
在解码光场图像之前,必须对白图像进行分析。这将构建一系列网格模型,每个白图像一个,以及一个列出可用图像的数据库。每个相机这个过程只需要做一次,并且实用功能LFUtilProcessWhiteImages用于自动化流程。
对于每幅要解码的图像,根据相机序列号选择适合该图像的白图像,进行缩放和对焦设置,将白图像和原始微透镜图像传递给解码函数,解码函数构建4D光场。LFToolbox0.4提供了函数LFSelectFromDatabase来帮助为光场选择适当的白色图像,LFLytroDecodeImage演示了这一点。
下面几节将更详细地描述这个工作流,并假设您已经提取了白图像并将光场复制到类似于上面快速导览中使用的文件夹结构中。有关处理……的详细信息,请参见附录ALytro文件。
为了将网格模型与镜头位置匹配,需要对每张白色图像进行一次分析。实用程序LFUtilProcessWhiteImages自动为您的白图像文件夹中的每个白图像构建网格模型。如果您希望将白图像存储在默认结构之外的结构中,只需更改LFUtilProcessWhiteImages中的WhiteImageDatabasePath变量以指向您的白图像文件夹,或者传递一个参数FileOptions,其中包含WhiteImageDatabasePath字段。
在F01相机中,白图像有两种曝光级别。这两种曝光都不需要,这个工具箱只使用其中较亮的一种。对白图像的检测通常也会发现一些额外的、非常暗的图像。这些都是无用的,并且会被自动忽略。
当LFUtilProcessWhiteImages遍历白图像时,它将网格模型保存为.grid。白图像文件夹中的json文件。它同时构建一个数据库,跟踪与每个白图像相关的序列号、缩放和焦点设置。它将其保存为WhiteFileDatabase.mat。这是由函数LFSelectFromDatabase用来选择适合解码给定光场图像的白图像。
在LFLytroDecodeImage中演示了该解码过程。这个脚本首先加载一个微透镜图像和相关的元数据,选择使用LFSelectFromDatabase挑选适当的白图像,然后将微透镜图像、元数据和白图像传递给处理大部分工作的LFDecodeLensletImageSimple。
LFSelectFromDatabase根据序列数字b、缩放和焦点设置选择适当的白图像。目前,缩放优先于聚焦,尽管这是否是最佳的方法还是个问题。
LFDecodeLensletImageSimple继续按照[1]中描述的那样来解码光场。这包括去马赛克,设计,转换和切片的输入微透镜图像,以产生一个4D结构。更复杂的方法是将步骤组合成联合解,它们通常会产生更好的结果,特别是在透镜边缘附近。选择这里的方法是因为它的简单性和灵活性。
解码过程的一些细节是可以控制的,参见上述函数的帮助文本。
一个光场基本上是一个四维的结构。粗略来讲,每个像素对应着一个光线,并且两个维度定义光线的位置,其余两个维度定义光线的方向。对于由基于透镜的相机(如Lytro)测量的图像,二维选择透镜图像,二维选择透镜图像中的一个像素。根据[1]中的规定,透镜由对k,l (k是水平的)索引,透镜t中的像素由i ,j (i是水平的)索引。
Lytro的每个微透镜有大约9*9个有效像素,所以LFUtilDecodeLytroFolder的输出结果在i,j方向尺寸大概为9。类似地,在去除与六边形微透镜阵列相关的六边形采样后,Lytro的图像在k和l两种情况下都能产生大约380个像素。样本的实际数量取决于微透镜网格与传感器的对齐方式,并且会随着相机的不同而变化。
检查LFDecodeLensletImageSimple的输出,我们看到它产生一个光场低频的5 d数组大小约9×9×380×380×3。重要的是,LF的索引顺序是j,i,l,k,c,其中c是RGB颜色通道。
要检查通过k和l维度的切片,可以使用命令imshow(squeeze(LF(5,5,:,:,:,?))),从i和j维度的中心生成视图。这看起来非常像图2所示的示例。
要检查i和j维中的一个切片,可以使用命令imshow(squeeze(LF(:,:,380/2,380/2,?))),生成类似于图11所示的输出。请注意,这显示了l微透镜下图像的形状,并以包含很少或没有信息的变暗的角像素为特征。存在用于“填充”这些光场区域的方法,并可能在工具箱的未来版本中进行探索。
LFDecodeLensletImageSimple提供了一个权重通道LFWeight,它表示与每个像素相关的置信度。这样一个通道的i和j切片如图11所示。权重通道用于过滤接受权重项的应用程序。
|
要在没有权重通道的光场中工作,例如要可视化切片,只需索引前三个通道,如imshow(squeeze(LF(5,5,:,:,:,1:3))。
LFUtilCalLensletCam自动通过以下校准阶段:
棋盘角识别。寻找角落是最耗时的步骤,尤其是对于密集的棋盘。首先比较所有输入图像的缩放和对焦设置,如果其中有任何不同,将显示一条警告消息。下一个角落自动定位在二维切片的棋盘光场。输出类似于图8中右边所示,允许可视化确认提取的角是合理的。正常情况下,并非所有的子图像都能成功地识别出所有的角,这是由于在lenslet图像之间的光损失和渗透。每个图像的棋盘角存储在每个输入文件旁的 *_CheckerCorners.mat文件。
初始化姿态和固有参数。首先将棋盘角信息汇总到校准的顶层的单个文件中,Cameras/A000424242/PlenCalSmallExample/CheckerboardCorners.mat。初始姿态和固有估计然后计算并存储在相同的级别,在标定信息文件CalInfo.json中。
优化不失真。对内部函数和姿态进行了优化,并将结果保存到CalInfo.json中。新的姿态估计更新的姿态估计显示。文本显示了优化的过程,包括优化每个阶段之前和之后的RMSE。每个优化阶段还显示一个Matlab生成的优化显示,显示一阶最优性——有关这方面的更多信息,请参阅Matlab的文档。
优化与扭曲。这完成了相机模型包括镜头失真。再次更新姿态估计显示和文本输出。
细化。这只是重复优化与失真,以进一步细化相机模型和姿态估计。
标定结果存储在标定信息文件中:CalInfo.json.标定估计在[1]中有细节描述,并且包括:
由于透镜网格模型是校准的一部分,因此使用校准过程中使用的相同网格参数对应用校准的光场进行解码至关重要。如果用于校正光场的微透镜网格模型与用于解码光场的微透镜网格模型存在显著差异,该软件会进行初步检查并发出警告。
在未校正的光场中寻找光场样本对应的射线相对比较复杂,需要同时应用本征矩阵和畸变模型。然而,一旦一个光场被矫正,校正后光场的本征矩阵直接将样本与光线联系起来,就像 θ = H n \theta=Hn θ=Hn。矫正后的本征矩阵保存在每个矫正光场 RectOptions.RectCamIntrinsicsH中。
对小的标定例子数据集,是一个简单的例子:
n = [1,1,1,1,1]';
p = RectOptions.RectCamIntrinsicsH * n;
产生射线 p = [ 0.0015 , 0.0015 , − 0.34 , − 0.34 , 1 ] T p=[0.0015,0.0015,-0.34,-0.34,1]^T p=[0.0015,0.0015,−0.34,−0.34,1]T,相似地, n = [ 5 , 5 , 190.5 , 190.5 , 1 ] ′ n=[5,5,190.5,190.5,1]' n=[5,5,190.5,190.5,1]′产生射线 p = [ 0 , 0 , 0 , 0 , 1 ] T p=[0,0,0,0,1]^T p=[0,0,0,0,1]T,因为这个n对应于采样光场的中心对应于中心射线。(记住光场尺寸为:9×9×380×380)
矫正接受作为一个可选的参数所需的固有光场的矫正-即你可以指定的值,你想在RectOpations .RectCamintrinsicsH。默认情况下,校准后的固有矩阵取一个保守值,在s、t和u、v中产生正方形像素。例如,如果需要非正方形像素,您可能希望更改此设置。
新版本0.3有一个帮助函数,用于构建这个矩阵,是LFCalDispRectIntrinsics。推荐的使用模式是加载一个光场,调用一次l LFCalDispRectIntrinsics来设置默认的固有矩阵,操作该矩阵,然后在将其用于一个或多个纠正调用之前可视化操作后的采样模式。假设img001已经解码,但没有被纠正,一个典型的过程可能是这样的:
load('Images/IMG_0001__Decoded.mat');
RectOptions = ...
LFCalDispRectIntrinsics( LF, LFMetadata, RectOptions );
这将加载光场,然后设置默认的固有矩阵,生成显示采样模式的显示,如图12所示。
如果我们想要更接近这个光场的水平u边进行采样,在使用非平方像素的情况下,我们可以增加H(3,3),如下所示:
RectOptions.RectCamIntrinsicsH(3,3) = ...
1.1 * RectOptions.RectCamIntrinsicsH(3,3);
RectOptions.RectCamIntrinsicsH = LFRecenterIntrinsics( ...
RectOptions.RectCamIntrinsicsH, size(LF) );
LFCalDispRectIntrinsics( LF, LFMetadata, RectOptions );
这增加了沿u的采样范围,然后通过u重新居中采样LFRecenterIntrinsics,然后显示得到的采样模式,如图12所示。
最后,对LFUtilDecodeLytroFolder的适当调用将使用所请求的固有矩阵对多个光场进行校正:
DecodeOptions.OptionalTasks = 'Rectify';
LFUtilDecodeLytroFolder([], [], DecodeOptions, RectOptions);
请注意,相同的矩阵可以应用于任何光场,但是对于不同的相机和对焦/变焦设置,产生的采样模式是不同的。图13显示了应用图12中的例子校正的结果——注意,在第二幅图像中,更多的记录图像是可见的,但是它的非正方形像素必须在后续的处理步骤中考虑进去。
|
|
从工具箱0.3版本开始,不再需要外部工具从Lytro软件生成的文件中提取白色图像、图片或元数据
每台相机都有一个解码所需的白色图像的唯一数据库。在Windows机器上,白色图像数据位于表单的文件夹中:
sn-
在mac上,相关地址为:
/Users//Lytro.lytrolib/cameras/sn-
Windows机器上的一个具体例子是:
C:\Users\Bob\AppData\Local\Lytro\cameras\sn-A000424242
Lytro Illum可以将其白色图像保存在SDCard上的压缩文件中,作为“配对过程”的一部分-参见Lytro关于创建这种“配对的文献数据”。数据文件夹或配对数据文件包含指定的文件被命名为:data.C.0,data.C.1等等。这些都是特定于lytro的存储格式,可以使用它来解压LFUtilUnpackLytroArchive。
例如,在解压配对数据或将数据文件夹的内容复制到camera //WhiteImages中之后,从示例文件夹的顶部运行LFUtilUnpackLytroArchive。默认情况下,该功能将搜索相机文件夹中的所有存档文件,并将它们解压。
在提取的结果文件中,我们感兴趣的文件的名称如下:
MOD_0000.RAW
MOD_0000.TXT
MOD_0001.RAW
MOD_0001.TXT
…
原始文件是对应于各种缩放和焦点设置的白图像,而txt文件包含我们需要分类哪些是哪些的元数据。其他文件包含关于Lytro的大量信息,但是在这个工具箱的修订中没有使用这些信息。一旦解压,您可以安全地删除复制的data.C.*文件。
这个版本的工具箱可以直接读取Lytro LFP文件,使用函数LFReadLFP。该工具箱还与使用外部提取的.raw文件兼容工具LFP。
Lytro Desktop version 4及更高版本使查找LFP文件变得更容易,因为它们存储在操作系统的默认图片文件夹中——查找表单的文件夹:My Pictures/Lytro Desktop/Libraries/Lytro Library.lytrolibrary/。图片库有很多子文件夹,结构复杂。你可以直接把这个结构复制到你的工作文件夹下-该工具箱将在解码光场时递归搜索子文件夹。
桌面软件还可以将光场导出到您选择的位置。
如果使用Illum,您可以直接从相机复制文件,因为它直接通过USB公开其文件系统。
如果您运行的是较老版本的Lytro桌面软件,那么可以在存储白色图像的images文件夹旁边的images文件夹中找到Lytro图像文件。例如,在Windows机器上,默认位置是
在mac上它位于
/Users//Lytro.lytrolib/images/ *
其中末尾的’ * '取数值,如01、02等。
Lytro LFP是一种储存格式,可能包含几种类型的数据之一。包含light字段的文件通常根据它们的大小很明显——F01大约16mb, Illum大约55mb。文件扩展名根据文件源的不同而不同,导出的文件、相机上的文件和图像库文件都具有本节标题中所示的四种扩展名。
默认情况下,LFUtilDecodeLytroFolder递归地搜索具有这些扩展名的任何文件,以及以前的工具箱版本所使用的原始文件,并解码它能够理解的任何内容。聚焦堆栈和其他文件也存储为
.lfp文件并且LFUtilDecodeLytroFolder将忽略这些文件。
缩略图被构建到一些LFP文件中。函数l LFUtilExtractLFPThumbs将找到缩略图并将它们保存到磁盘。
这是一个按任务组织的顶级函数的快速列表。有关更多信息,请参考每个函数中包含的文档,以及工具箱内部工作的SupportFunctions文件夹。
些函数首先为所有参数定义默认值,如LFUtilDecodeLytroFolder。因此,可以将它们作为函数调用,也可以不带任何参数直接运行。在没有参数的情况下调用时,编辑代码中的值以匹配所需的设置。当作为函数调用时,只需要传递那些与默认值不同的参数和字段。传递一个空数组[]以省略参数,并省略接受默认值的字段。
有关此参数传递方案的示例,请参见LFUtilDecodeLytroFolder的帮助。
编码 | 输入 |
---|---|
LFLytroDecodeImage | 从LFP或原始文件解码Lytro图像。可以直接调用将单个图像解码到内存中,也可以通过LFUtilDecodeLytroFolder间接调用。 |
LFReadGantryArray | 加载框架式光场,举例:斯坦福光场: http://lightfield.stanford.edu. |
LFUtilDecodeLytroFolder | 实用的解码,色彩校正和校正Lytro图像。可处理多个光场;递归搜索文件夹结构;接受文件名规范,包括通配符。自动选择适当的白色图像和校准文件从多个相机跨越多个变焦和焦点设置。将递增应用于文件的操作,以便,例如,以前解码的光字段可以递增颜色校正,纠正或两者都不需要重复的操作。结果保存到磁盘。输出如图2、4、10所示。演示LFLytroDecodeImage、LFColourCorrect、LFHistEqualize和LFCalRectifyLF。解码依赖于已构造的白图像数据库LFUtilProcessWhiteImages和rectification,类似地依赖于由LFUtilProcessCalibrations创建的校准数据库。 |
LFUtilProcessWhiteImages | 处理填充有白图像的文件夹,生成网格模型(.grid.json),以及一个白图像数据库(WhiteFileDatabase.mat),用于选择适合于l光场的白图像。黑暗图像自动检测和跳过。 |
滤波 | |
---|---|
LFBuild2DFreqFan | 在频域中构造二维fan滤波器。使用LFFilt2DFFT应用这个过滤器。 |
LFBuild2DFreqLine | 在频域中构造二维线滤波器。s、u、t、v中两行滤波器的级联与4D平面滤波器相同,如LFBuild4DFreqPlane所构造的平面滤波器。使用LFFilt2DFFT应用此过滤器。 |
LFBuild4DFreqDualFan | 在频域中构造一个4D双fan滤波器。使用LFFilt4DFFT应用这个过滤器。 |
LFBuild4DFreqHypercone | 在频域中构造一个4D超锥滤波器。使用LFFilt4DFFT应用此过滤器。 |
LFBuild4DFreqHyperfan | 在频域中构造一个4D超调滤波器。这对于从光场中选择深度范围内的对象是有用的,即体积焦点。使用LFFilt4DFFT应用此过滤器。 |
LFBuild4DFreqPlane | 在频域中构造一个四维平面滤波器。这对于从光场中选取单一深度的对象非常有用,在效果上类似于使用移位和过滤器LFFiltShiftSum重新聚焦。使用LFFilt4DFFT应用此过滤器。 |
LFDemoBasicFiltLytroF01 | 演示Lytro f01捕获图像上的一些基本过滤器。 |
LFDemoBasicFiltIllum | 演示了Lytro illum捕获图像的一些基本过滤器。 |
LFDemoBasicFiltGantry | 演示了斯坦福光场存档光场的一些基本过滤器。 |
LFFilt2DFFT | 使用FFT对4D光场应用二维频域滤波器。 |
LFFilt4DFFT | 使用FFT应用4D频域滤波器。 |
LFFiltShiftSum | 位移和滤波器是一种空间域深度选择性滤波器,其效果与平面聚焦相似。 |
图像调整 | |
---|---|
LFColourCorrect | 应用色彩平衡向量、RGB色彩校正矩阵和伽玛校正。在LFUtilDecodeLytroFolder中演示了使用方法。 |
LFHistEqualize | 根据直方图均衡化调整光场的亮度。对彩色和单色图像进行处理,将彩色图像转换为HSV,并对值通道进行均衡。能够处理不同的输入维度,包括二维图像和4D光场。如果权重通道作为第四个颜色通道出现,则使用它忽略零权重像素。在LFUtilDecodeLytroFolder中演示了使用方法。 |
可视化 | |
---|---|
LFDisp | 函数的作用是:显示一个光场的二维静态切片。最里面的图像在s和t中拍摄,也可用于三维图像数组。 |
LFDispMousePan | 显示具有基本视差效果的二维光场切片。单击并拖动图像以更改视图。可选参数控制显示大小。请注意,在未过滤光场的边缘变暗意味着在空间范围的中心附近效果最好。有关自动动画显示,请参见l LFDispVidCirc。该功能重用以前打开的光场显示窗口。请注意,更改显示大小要求在调用此函数之前关闭显示窗口。 |
LFDispVidCirc | 动画显示二维切片的光场,类似于LFDispMousePan,除了运动预设为一个圆形的路径。可选参数包括圆形路径的半径、动画速度和显示大小。 |
LFFigure | 代替matlab中的"figure",他不会窃取焦点 |
标定 | |
---|---|
LFCalDispEstPoses | 可视化相机姿态估计。叫LFUtilCalLensletCam。 |
LFCalDispRectIntrinsics | 帮助建立和可视化整改中要求的内部函数,参见LFRecenterIntrinsics |
LFCalRectifyLF | 应用校准校正光场。所需要的本征矩阵可以由标定的本征矩阵提供,也可以由标定的本征矩阵自动计算。证明了LFUtilDecodeLytroFolder。 |
LFRecenterIntrinsics | 重定位一个光场内置矩阵,用于修改在LFCalRectifyLF请求的函数。见LFCalDispRectIntrinsics |
LFUtilCalLensletCam | 运行基于镜头的摄像机校准的所有步骤。 |
LFUtilProcessCalibrations | 建立一个校准数据库,以允许选择适当的标定为给定的光场。 |
输入输出文件 | |
---|---|
LFFindFilesRecursive | 递归地在文件夹中搜索匹配一个或多个模式的文件。参考此函数用于理解 LFUtilDecodeLytroFolder,LFUtilExtractLFPThumbs 和LFUtilUnpackLytroArchive的路径参数 |
LFReadLFP | 读取Lytro lfp/lfr光场文件。 |
LFReadMetadata | 读取json文件 |
LFReadRaw | 读取10位、12位和16位原始图像文件。 |
LFWriteMetadata | 写入json文件 |
实用程序/方便 | |
---|---|
LFMatlabPathSetup | 设置Matlab路径以包含LF工具箱。每次Matlab重新启动时都必须重新运行它,因此可以考虑在启动时添加一行代码。m如第2节所示 |
LFUtilUnpackLytroArchive | 从多卷Lytro存档中提取白色图像和其他文件。 |
LFUtilExtractLFPThumbs | 从LFP文件中提取缩略图并将其写入磁盘。 |