LFToolbox0.4官方使用文檔說明

1 變化和未來計劃

見ReadMe文件

2 安裝Toolbox

    解壓Toolbox至一個正確的路徑,運行程序 LFMatlabPathSetup來安裝Matlab路徑。每次重新開啓Matlab時都要設定這一步驟,所以你可以考慮在startup.m添加語句,例如:

run('~/MyMatlabCodee/LFToolbox0.4/LFMatlabPathSetup.m')

3 一個快速指南

3.1 編譯取樣光場

  1. 下載LFToolbox並且解壓縮至正確的路徑。運行LFMatlabPathSetup.m來創建Matlab的路徑。
  2. 下載在這裏取樣光場包,解壓至他自己的文件夾內。取樣文件夾的結構的選擇是爲了方便添加您自己的相機和校準:

Samples ----------------------------------------------取樣上級
      Images -------------------------------------------取樣光場圖片
             F01 ------------------------------------------F01圖片
             Illum -----------------------------------------照度圖片
      Cameras -----------------------------------------存儲一個或多個相機的信息
             A000424242 -------------------------------用於測量F01取樣的相機
                         CalZoomedOutFixedFoc -----一個單獨校正結果
                         WhiteImages----------------------F01相機的白圖像
             B5143300780 ------------------------------用於測量照度取樣的相機
                         WhiteImages ---------------------照度相機的白圖像

    從Matlab打開到頂層的示例文件夾。如果你的路徑正確,Matlab命令ls會列出上級文件夾

Image
Cameras
  1. 運行LFUtilProcessWhiteImages來建立一個白圖像數據庫。這一步驟在Cameras文件夾中尋找白圖像,每個白圖像形成一個微透鏡網格模型-網格模型存儲爲*.grid.json。白圖像的數據庫存爲 Cameras/WhiteFileDatabase.mat,並且用於選擇合適的白圖像來編譯每個光場。 對於Toolbox0.3版本,取樣附帶預先計算的.grid.json文件。這些文件可能在他們重新生成過程中被移除。這樣做的時候,對於每個微透鏡網格模型,給出如圖1所示的圖,以直觀確認網格模型的擬合良好。每個圖像展示了整個框架的一個小子集,以便對微透鏡進行仔細審查。五個這樣的圖像顯示,一個爲圖像邊角和一個爲圖像的中心部分。每個紅點顯示在靠近微透鏡中心的部分,舉例來說,就像在圖一中,每個白色塊中最亮的一點處。有一些邊緣的微透鏡沒有紅色標記不影響結果。
圖一:白圖像顯示估計的微透鏡中心,如紅點所示
  1. 運行LFUtilDecodeLytroFold來編碼取樣光場。腳本在Images文件夾及其子文件夾中搜索光場並且將每一個編碼。默認情況下,它搜索所有兼容的Lytro 光場格式,包括lfp,raw。這個編碼過程爲每一個光場選擇合適的白圖象,並且保存編碼的4D光場*__Decoded.mat,和縮略圖, *.png與輸入圖像存儲在一起。每個光場的縮略圖也是被編碼光場的形式。縮略圖是直方圖均衡的,但是保存的光場不是直方圖均衡的。縮略圖舉例如圖二。

圖2:編碼圖片(第一排)和顏色糾正輸出圖片(第二排)鳥的白色斑點是由於相機和鳥之間的一塊髒兮兮的玻璃造成的。運行 LFDispVidCirc 或 LFDispMousePan創造更加清晰的透視視角。
  1. (可選擇)重新運行 LFUtilDecodeLytroFolder來進行顏色矯正。使用命令:
DecodeOptions.OptionalTasks = 'ColourCorrect';
LFUtilDecodeLytroFolder ([ ] , [ ] , DecodeOptions);

DecodeOptions參數要求執行可選的任務顏色校正。第一個和第二個參數通過使用空數組[ ]省略了。
顏色校正應用了在光場元數據中找到的信息,包括基礎的RGB顏色和伽馬校正。這個腳本保持了每個光場上進行的操作軌跡,這樣,操作在編碼過程中就不會再重複了。而是加載每個已經解碼的光場,對其進行操作,使用顏色校正後的光場重寫它。相似的,以後的請求不會重複已經完成的顏色校正操作。
解碼和顏色校正可以在一步執行,包括在對LFUtilDecodeLytroFolder的第一個調用中完成colorcorrect任務。
在toolbox0.3版本,直方圖調整不再自動應用,你可以使用LFHistEqualisze應用直方圖調整。Illum圖像不是伽馬校正的。示例顏色校正輸出在圖二第二行圖片和圖三中展示。

圖3:編碼和顏色校正後的Illum圖像,手動通過調整到0.7度的伽馬校正
  1. (可選)使用LFDispVidCirc或LFDispMousePaan來用變化的視角將光場可視化。首先使用如下命令加載光場:
load('Image/F01/IMG_0001_Decoded.mat');

來加載光場變量LF,然後運行 LFDispVidCirc(LF) 或LFDispMousePan(LF)其中之一。前者自動使圓周運動具有動畫效果,後者允許鼠標控制運動:在窗口內點擊和拖拽調整觀點。使用 LFDispMousePan(LF, 2)或者LFDispVidCirc(LF, [ ], [ ], 2)嘗試更大的顯示,這樣使顯示窗口增加一倍(變爲原來的兩倍)在更改顯示大小之前,請關閉任何打開的顯示窗口。

  1. (可選)運行 LFUtilProcessCalibrations 然後重新運行 LFUtilDecodeLytroFolder來執行更改。要糾正特定的光場,使用命令
DecodeOptions.OptionalTasks = 'Rectify' ;
LFUtilDecodeLytroFolder(... 'Image/F01/IMG_0002_rrame.raw',[ ] ,DecodeOptions);

LFUtilProcessCalibrations腳本建立一個校正數據庫,並保存在Cameras/CalibrationDatabase.mat中。這個文件允許爲每一個光場顯示合適的校正。樣品包中只提供一種校準,僅適用於F01樣品2和5。
正如在顏色校正舉例中,我們傳遞一個OptionalTasks參數,這一次請求糾正。糾正後的光場重寫編碼的光場文件,並且編碼的腳本不會重複的採用同一類校正。對樣品2進行糾偏的結果如圖4所示:

圖4:F01取樣2在糾正之前和之後的圖片,有一個子集顯示透鏡畸變的反轉。
## 3.2 加載框架式光場 在toolbox0.3版本中新的東西是LFReadGantryArray,它可以讀取就像那些在斯坦福光場檔案館可獲得的框架式光場(網址:http://lightfield.stanford.edu)框架式的光場通常由安裝在機器框架上的單個攝像機收集,任何存儲爲單個圖像有序集合的光場都可以使用此功能讀取。
  1. 在斯坦福光場檔案館下載一個圖像,舉例:the LegoKnights light field。下載“修正和裁剪”版本
  2. 解壓將歸檔文件放入斯坦福示例的專用文件夾中,其結構如下:
    Stanford---------------------------斯坦福光場頂級
         JellyBeans
                rectified--------------修正和裁剪的圖像文件
    LegoKnights
    rectified--------------修正和裁剪的圖像文件

3.從斯坦福光場取樣頂級 運行 LFReadGantryArray:

LF=LFReadGantryArray( ' LegoKnights/rectified ' ,struct ( 'UVLimit ' ,256));

這將LegoKnights光場加載到一個17×17×256×256×3的數組中。

  1. 運行LFDispMousePan來顯示加載好的光場。
    可以在全分辨率下讀取Stanford light fields,例如,下面的結果是一個17 x 17 x 1024 x 1024 x 3的數組,佔用了909兆字節的RAM:
LF = LFReadGantryArray('LegoKnights/rectified');

一小部分斯坦福光場具有Lawnmower模式。這些圖像可以用如下語句讀入並且調整

LF = LFReadGantryArray('humvee-tree', struct('STSize', [16,16]));
LF(1:2:end,:,:,:,:) = LF(1:2:end,end:-1:1,:,:,:);

3.3 基礎濾波

一些基礎濾波是新出現的 LFToolbox 0.4,包括用於平面焦點的移位和求和濾波器,以及用於平面焦點和體積焦點的一組線性2D和4D濾波器。
運行 LFDemoBasicFiltLytroF01 或者 LFDemoBasicFiltIllum其中一個可以用於演示在Lytro圖像上運行的一些過濾器。這些應該在取樣文件夾的頂級運行,在3.1節描述的編碼光場過程後。採用整流光場可獲得最佳性能。
運行LFDemoBasicFiltGantry作爲一個過濾斯坦福光場的演示。這應該在按照3.2節的說明下載並解壓縮示例之後,從Stanford light fields文件夾的頂級完成。
取消註釋LFDemoBasicFiltGantry頂部附近的適當行,以便從12個輸入光字段中進行選擇。
濾波輸出的例子如圖5、6、7所示。

圖5:三個過濾Lytro圖像的例子:在前景窗口(左側)和Lorikeet上執行平面聚焦的shift-and-sum過濾器 (中間),和一個超調濾波器執行體積聚焦,通過Lorikeet和背景建築,同時拒絕前景窗口(右,與圖3相比)。
圖6:三個例子的過濾框架圖像:位移和和濾波器執行平面焦點(左),超範濾波器執行體積焦點(中),和兩個超調濾波器之間的最大值,同時聚焦在兩個平面上(右)。
圖7:過濾Lytro Illum圖像的示例,顯示輸入(左)和執行平面聚焦的移位和求和濾波器(右)

3.4 運行簡單的取樣標定

3.4.1 標定

下面的示例假設您已經完成了上面的解碼過程,包括生成白色圖像數據庫。這裏使用的小型校準數據集僅用於快速演示工具箱的操作,在有效校準相機方面存在以下幾個不足:

  • 棋盤格對於足夠的近距離姿勢來說太大了——基於鏡頭的相機有一個小的空間基線,特寫鏡頭有利於校準這個基線。
  • 棋盤格不是很密集-需要更多的角落用於標定
  • 棋盤式的姿勢沒有足夠的多樣性——需要十張或更多不同的圖片用於標定

更真實(和更大)的數據集可以在http://marine.acfr.usyd.edu.au/plenoptic-imaging獲得。想好的結果應該使用19×19網格和3.6 mm間距,且至少有十個不同的姿勢。
在這裏插入圖片描述

圖8:左:解碼棋盤圖的例子-無顏色校正是必要的,不應進行校正;右圖:在校準的第一步中,棋盤角自動適應棋盤的例子。
  1. http://www-personal.acfr.usyd.edu.au/ddan1654/PlenCalSmallExample.zip.下載簡單取樣校正.將它解押至你的Samples/Cameras/A000424242/文件夾。
    Samples-------------------------------------------------取樣頂級
          Cameras-------------------------------------------存儲一個或多個相機文件
                A000424242---------------------------------用於測量取樣的相機
                         CalZoomedOutFixedFoc----------一個單獨的標定結果
                         PlenCalSmallExample-------------一個新加入的標定
                         WhiteImages-------------------------取樣相機的白圖像
          Images---------------------------------------------取樣光場圖片
  2. 運行LFUtilDecodeLytroFolder 來編碼標定光場。從Matlab cd中進入樣本文件夾的頂層,然後使用命令
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,其中包含姿態、內在和失真參數,以及用於解碼棋盤光場的微透鏡網格模型。

3.4.2 驗證

驗證校準的一種方法是校正棋盤圖。這個過程與解碼過程中描述的校正步驟非常相似:

  1. 運行LFUtilProcessCalibrations將新完成的校準添加到校準數據庫中。注意,從該函數的輸出中可以看出,這個小的校準示例非常接近樣本包提供的樣本校準,只有幾個焦點步驟不同。
圖9:預估相機位姿顯示;左:參數初始化後,右:標定完成後;灰色:初始估計,綠色:無失真優化,藍色:失真優化,紅色:細化後。
  1. 把Cameras/A000424242/PlenCalSmallExample/01文件夾中所有文件複製到一個新的Samples/Images/PlenCalSmallExample這個文件夾內。這將允許校正圖像,同時保持未校正的版本進行比較。
  2. 運行 LFUtilDecodeLytroFolder糾正圖像,使用命令:
DecodeOptions.OptionalTasks = 'Rectify';
LFUtilDecodeLytroFolder('Images/PlenCalSmallExample', ...[], DecodeOptions);

檢查文本輸出,請注意校正已經根據這些圖像的縮放和焦點設置自動選擇了小樣本校準。
由於校正數據集的侷限性,對校正後的圖像進行目視檢查可能會顯示較差的結果。

3.4.3 清理和驗證

在Cameras/A000424242/PlenCalSmallExample刪除標定生成的文件 CalInfo.json,並且重新運行 LFUtilProcessCalibrations。上述驗證過程中,儘管相機參數有輕微的不匹配,但反覆使用默認的樣本校準會得到更合理的驗證結果,如圖10所示。

圖10:糾正棋盤;如圖4所示。在[1]中得到更完整的數據集

3.5 除了樣本:使用你獲取的光場

處理來自您自己的相機的圖像與到目前爲止介紹的示例非常相似。
首先,創建一個與相機/A000424242文件夾平行的新文件夾,以包含相機的白色圖像和執行的任何校準。命名規定是將這個文件夾命名爲與相機序列號匹配的文件夾。接下來,爲白圖像創建一個子文件夾。您的文件夾結構現在應該是這樣的:

Samples----------------------------------------------------樣例最高級
      Cameras-----------------------------------------------存儲一個或多個相機
            A000424242-------------------------------------用於測量樣例的相機
                  CalZoomedOutFixedFoc-----------------一個獨立的標定結果
                  PlenCalSmallExample--------------------一個新添加的標定結果
                  WhiteImages--------------------------------示例相機的白圖像
      Images--------------------------------------------------光場圖片示例

按照附錄A中描述的步驟,提取相機的白色圖像並將它們放入新創建的白色圖像文件夾中。您執行的任何校準都應該位於WhiteImages文件夾旁邊的自己的文件夾中。
在samples文件夾的頂層,運行LFUtilProcessWhiteImages來處理相機的白色圖像。生成的網格模型將被添加到白色圖像數據庫,並自動應用於您的相機拍攝的照片。
您可能會得到一個複雜的樹結構,圖像下面有許多子文件夾。
LFUtilProcessWhiteImages將遞歸搜索這個結構,解碼它識別的任何光場。
要糾正你自己的圖像,你應該標定你的相機。按照上述步驟進行,除了使用自己存儲在在你自己的相機文件夾裏的圖像。舉例來說,你的第一次標定可能存儲在Samples/A123412123/CalZoomedOut。

4 細節編碼

綜述

此工具箱根據[1]中描述的解碼過程將基於透鏡的光場圖像解碼爲4D光場結構。這個過程的核心是輸入一個白圖像和一個微透鏡圖像。白圖像是通過擴散器拍攝的圖像,用於校正漸暈(圖像邊緣附近變暗),並構建一個表示透鏡中心位置的網格。
每個Lytro相機都預裝了一組獨特的白圖像,對應於各種變焦和對焦設置。解碼光場圖像時,選擇與相機拍照時的變焦和對焦設置最接近的白圖像。白圖像可以按照A.1節中的說明從Lytro文件中提取。
在解碼光場圖像之前,必須對白圖像進行分析。這將構建一系列網格模型,每個白圖像一個,以及一個列出可用圖像的數據庫。每個相機這個過程只需要做一次,並且實用功能LFUtilProcessWhiteImages用於自動化流程。
對於每幅要解碼的圖像,根據相機序列號選擇適合該圖像的白圖像,進行縮放和對焦設置,將白圖像和原始微透鏡圖像傳遞給解碼函數,解碼函數構建4D光場。LFToolbox0.4提供了函數LFSelectFromDatabase來幫助爲光場選擇適當的白色圖像,LFLytroDecodeImage演示了這一點。
下面幾節將更詳細地描述這個工作流,並假設您已經提取了白圖像並將光場複製到類似於上面快速導覽中使用的文件夾結構中。有關處理……的詳細信息,請參見附錄ALytro文件。

4.2 分析白圖像

爲了將網格模型與鏡頭位置匹配,需要對每張白色圖像進行一次分析。實用程序LFUtilProcessWhiteImages自動爲您的白圖像文件夾中的每個白圖像構建網格模型。如果您希望將白圖像存儲在默認結構之外的結構中,只需更改LFUtilProcessWhiteImages中的WhiteImageDatabasePath變量以指向您的白圖像文件夾,或者傳遞一個參數FileOptions,其中包含WhiteImageDatabasePath字段。
在F01相機中,白圖像有兩種曝光級別。這兩種曝光都不需要,這個工具箱只使用其中較亮的一種。對白圖像的檢測通常也會發現一些額外的、非常暗的圖像。這些都是無用的,並且會被自動忽略。
當LFUtilProcessWhiteImages遍歷白圖像時,它將網格模型保存爲.grid。白圖像文件夾中的json文件。它同時構建一個數據庫,跟蹤與每個白圖像相關的序列號、縮放和焦點設置。它將其保存爲WhiteFileDatabase.mat。這是由函數LFSelectFromDatabase用來選擇適合解碼給定光場圖像的白圖像。

4.3 編碼一個微透鏡圖像

在LFLytroDecodeImage中演示了該解碼過程。這個腳本首先加載一個微透鏡圖像和相關的元數據,選擇使用LFSelectFromDatabase挑選適當的白圖像,然後將微透鏡圖像、元數據和白圖像傳遞給處理大部分工作的LFDecodeLensletImageSimple。
LFSelectFromDatabase根據序列數字b、縮放和焦點設置選擇適當的白圖像。目前,縮放優先於聚焦,儘管這是否是最佳的方法還是個問題。
LFDecodeLensletImageSimple繼續按照[1]中描述的那樣來解碼光場。這包括去馬賽克,設計,轉換和切片的輸入微透鏡圖像,以產生一個4D結構。更復雜的方法是將步驟組合成聯合解,它們通常會產生更好的結果,特別是在透鏡邊緣附近。選擇這裏的方法是因爲它的簡單性和靈活性。
解碼過程的一些細節是可以控制的,參見上述函數的幫助文本。

4.4 編碼光場的結構

一個光場基本上是一個四維的結構。粗略來講,每個像素對應着一個光線,並且兩個維度定義光線的位置,其餘兩個維度定義光線的方向。對於由基於透鏡的相機(如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所示。權重通道用於過濾接受權重項的應用程序。

圖11:樣本1的光場及其在i和j維上的相關權重通道。
注意,LFLytroDecodeImage將權值通道加到變量LF上,得到一個四通道結構,LFUtilDecodeLytroFolder就是這種四通道格式保存光場。這對於光場是一種方便的格式,因爲權重通道在處理光場時通常很有用。例如,LFHistEqualize使用這個通道來忽略零權重像素。權重通道很可能在工具箱的未來版本的過濾操作中有用。

要在沒有權重通道的光場中工作,例如要可視化切片,只需索引前三個通道,如imshow(squeeze(LF(5,5,:,:,:,1:3))。

5 細節標定

LFUtilCalLensletCam自動通過以下校準階段:
棋盤角識別。尋找角落是最耗時的步驟,尤其是對於密集的棋盤。首先比較所有輸入圖像的縮放和對焦設置,如果其中有任何不同,將顯示一條警告消息。下一個角落自動定位在二維切片的棋盤光場。輸出類似於圖8中右邊所示,允許可視化確認提取的角是合理的。正常情況下,並非所有的子圖像都能成功地識別出所有的角,這是由於在lenslet圖像之間的光損失和滲透。每個圖像的棋盤角存儲在每個輸入文件旁的 *_CheckerCorners.mat文件。

初始化姿態和固有參數。首先將棋盤角信息彙總到校準的頂層的單個文件中,Cameras/A000424242/PlenCalSmallExample/CheckerboardCorners.mat。初始姿態和固有估計然後計算並存儲在相同的級別,在標定信息文件CalInfo.json中。

優化不失真。對內部函數和姿態進行了優化,並將結果保存到CalInfo.json中。新的姿態估計更新的姿態估計顯示。文本顯示了優化的過程,包括優化每個階段之前和之後的RMSE。每個優化階段還顯示一個Matlab生成的優化顯示,顯示一階最優性——有關這方面的更多信息,請參閱Matlab的文檔。

優化與扭曲。這完成了相機模型包括鏡頭失真。再次更新姿態估計顯示和文本輸出。

細化。這只是重複優化與失真,以進一步細化相機模型和姿態估計。

5.1 標定結果

標定結果存儲在標定信息文件中:CalInfo.json.標定估計在[1]中有細節描述,並且包括:

  • 微透鏡網格模型:描述傳感器上微透鏡圖像的旋轉、間距和偏移量。
  • 全光結構模型:一個5×5的矩陣H關聯像素索引 n=[i,j,k,l,1]Tn =[i,j,k,l,1]^T對一條不扭曲的光線ϕu=[s,t,u,v,1]T\phi^{u} = [s,t,u,v,1]^T,由ϕu=Hn\phi^u=Hn
  • 畸變參數:描述射線方向的徑向畸變,對每條光線採用小角度就像:θ=[θ1,θ2][dx/dy,dy/dz]\theta=[\theta_1,\theta_2]\approx[dx/dy,dy/dz]。五個畸變函數爲:b=[bs,bt]b=[b_s,b_t]k=[k1..3]k=[k_{1..3}],這裏b是離心參數,k是徑向畸變係數。完整的畸變矢量是有序的:d=[b,k]d=[b,k]。如果θu\theta^u,θd\theta^d是獨自的不失真的和失真的二維光線。然後θd=(1+k1r2+k2r4+...)(θub)+b,r=θs2+θt2\theta^d=(1+k_1r^2+k_2r^4+...)(\theta^u-b)+b,r=\sqrt{\theta_s^2+\theta_t^2}

由於透鏡網格模型是校準的一部分,因此使用校準過程中使用的相同網格參數對應用校準的光場進行解碼至關重要。如果用於校正光場的微透鏡網格模型與用於解碼光場的微透鏡網格模型存在顯著差異,該軟件會進行初步檢查併發出警告。

5.2 整改結果

在未校正的光場中尋找光場樣本對應的射線相對比較複雜,需要同時應用本徵矩陣和畸變模型。然而,一旦一個光場被矯正,校正後光場的本徵矩陣直接將樣本與光線聯繫起來,就像θ=Hn\theta=Hn。矯正後的本徵矩陣保存在每個矯正光場 RectOptions.RectCamIntrinsicsH中。
對小的標定例子數據集,是一個簡單的例子:

n = [1,1,1,1,1]';
p = RectOptions.RectCamIntrinsicsH * n;

產生射線p=[0.0015,0.0015,0.34,0.34,1]Tp=[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]'產生射線p=[0,0,0,0,1]Tp=[0,0,0,0,1]^T,因爲這個n對應於採樣光場的中心對應於中心射線。(記住光場尺寸爲:9×9×380×380)

5.3 控制矯正

矯正接受作爲一個可選的參數所需的固有光場的矯正-即你可以指定的值,你想在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中的例子校正的結果——注意,在第二幅圖像中,更多的記錄圖像是可見的,但是它的非正方形像素必須在後續的處理步驟中考慮進去。

圖12:默認和調整的採樣模式。在這裏,採樣模式被水平拉伸,合併了更多的測量圖像,但產生矩形像素。下圖顯示了應用這些方法的結果。
圖13:使用前一個圖中描述的默認和調整的採樣模式進行校正。

附錄A 使用Lytro 文件工作

從工具箱0.3版本開始,不再需要外部工具從Lytro軟件生成的文件中提取白色圖像、圖片或元數據

A.1 提取白圖像

每臺相機都有一個解碼所需的白色圖像的唯一數據庫。在Windows機器上,白色圖像數據位於表單的文件夾中:
<drive_letter>:\Users<username>\AppData\Local\Lytro\cameras\ …
sn-<serial_number>
在mac上,相關地址爲:
/Users//Lytro.lytrolib/cameras/sn-<serial_number>
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.*文件。

A.2 定位圖片文件

這個版本的工具箱可以直接讀取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機器上,默認位置是
<drive_letter>:\Users<username>\AppData\Local\Lytro\images\ *
在mac上它位於
/Users//Lytro.lytrolib/images/ *
其中末尾的’ * '取數值,如01、02等。

A.2.1 LFP, LFR, lfp 還是 lfr?

Lytro LFP是一種儲存格式,可能包含幾種類型的數據之一。包含light字段的文件通常根據它們的大小很明顯——F01大約16mb, Illum大約55mb。文件擴展名根據文件源的不同而不同,導出的文件、相機上的文件和圖像庫文件都具有本節標題中所示的四種擴展名。

默認情況下,LFUtilDecodeLytroFolder遞歸地搜索具有這些擴展名的任何文件,以及以前的工具箱版本所使用的原始文件,並解碼它能夠理解的任何內容。聚焦堆棧和其他文件也存儲爲
.lfp文件並且LFUtilDecodeLytroFolder將忽略這些文件。

A.2.2 縮略圖

縮略圖被構建到一些LFP文件中。函數l LFUtilExtractLFPThumbs將找到縮略圖並將它們保存到磁盤。

B 相關功能

這是一個按任務組織的頂級函數的快速列表。有關更多信息,請參考每個函數中包含的文檔,以及工具箱內部工作的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文件中提取縮略圖並將其寫入磁盤。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章