這一小節說一下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文件:
1.從相機里導出白圖像(White Images):
根據matlab工具包解釋,白圖像是用光場相機在不同的曝光條件下拍攝白色平面得到的圖像,這些圖像主要有兩個作用,一是可以用來校正由鏡頭陰影造成的圖像四角偏暗現象;二是幫助定位微透鏡中心的坐標。Lytro illum相機內置了34幅白圖像,可以通過相機“導出配對數據”導出到本地。白圖像是Raw圖,可以通過PhotoShop打開,下面是我用PhotoShop CS5打開后的圖像。

2.處理白圖像:
通過對每一幅白圖像進行處理,分別得到每一幅白圖像對應的微透鏡網格模型(lenslet grid model),如下圖所示,並建立一個WhiteImagesdatabase映射表。

3.利用白圖像對光場文件進行解碼得到rawImage:
輸入.lfp文件,工具包讀取WhiteImagesDataBase映射表,工具包選取最合適的白圖像和微透鏡網格模型進行光場文件的解碼,得到拜爾格式的光場圖像(圖像尺寸為7728*5368),如下圖左所示,光場工具包中獲取光場Raw圖是一個中間過程,在LFLytroDecodeImage()函數里面的這條語句LensletImage = LFP.RawImg,保存LensletImage就是了。放大后可以看到每一個微透鏡圖像,如下圖右所示。

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光場相機基本流程就是這樣了,當然難免有很多理解不到位和錯誤的地方,諸位大俠如有發現,請多多指正!謝謝~~~
