杨凯
(四川大学计算机学院,成都 610065)
近年来,虽然微型相机(如智能手机相机)越来越受到人们的喜爱,但是对于专业摄影师而言,依然青睐于数码单反相机生成的美学照片。由于采用了大光圈镜头和大型图像传感器,数码单反相机能拍摄出浅景深和高信噪比的照片。然而大光圈数码单反相机在价格昂贵制造工艺难度高,可以通过合成孔径光场成像[1],利用相机阵列来模拟大光圈光学设备拍摄图像。随着硬件设备的发展,光场成像作为计算机视觉的一个重要分支,近年来也越来越受到研究人员的关注。早在1936 年,Gershun 等人[2]就提出“光场”(Light Field)这一概念,表征光线在现实空间中的性质。到1991 年,E.Adelson 和J.Bergen[3]提出全光函数这一概念,用一个7 维函数p(x,y,z,θ,φ,λ,t)来表示空间中的几何光线分布,其中,x,y,z表示光线的三维空间中的坐标,θ,φ表示光线的传播方向,λ表示光的波长,t表示时间。该七维函数可以表示任意时间任意光线的传播特性,但是难以捕获。1996 年,Levoy[4]和Gortler[5]等人提出双平面模型,如图1 所示,来简化七维全光函数,用于记录光线在空间中的角度信息和位置信息,u,v表示相机平面,s,t表示成像平面。
图1 双平面模型
在此模型的基础上,斯坦福大学研究人员设计了光场显微镜[6-7]、微透镜光场相机[8-9]、光场相机阵列[10-11];Ng 设计研发出第一款商用级光场相机Lytro[12],即Plenoptic1.0,利用傅立叶变换实现在频域中快速重聚焦,能够实现先拍照后聚焦。但是考虑到角度分辨率和空间分辨率的折中,光场相机的分辨率往往不高,一般采用超分辨技术处理最后的重聚焦图片,例如在Lytro 相机中,CCD 的像素为11M,但实际有效分辨率只有0.7M,但最后得到的图片分辨率为3M 左右[13]。
对于传统相机,光线通过主透镜后汇聚在传感器上,对于焦平面上的点将聚焦于一个像素点上,而不在焦平面上的点将形成混淆圆,相邻像素间互相干扰,形成不清晰的像。而对于合成孔径成像而言,通过多个相机设备模拟一个大孔径光学设备,如图2,各个小的相机将记录不同角度的光线,通过计算成像,我们可以利用多个小的相机来模拟大孔径光学设备的聚焦模糊成像效果,这个过程既是重聚焦过程。透镜成像模型与相机阵列成像模型如图2 所示。
图2
通过计算成像,我们将利用相机阵列来模拟一个大孔径光学设备,当我们指定一个聚焦平面时,在该聚焦平面的物点将清晰成像,而不在该平面的物点将模糊。具体的做法是将每个相机得到的图像通过反投影到聚焦平面,然后再求平均。这种反投影其实就是单应变换[14],如图3 所示。Π0表示指定的聚焦平面,为了得到合成孔径光场照片,需要将相机拍摄得到的照片反投影到Π0。在Π0上的点通过反投影投后会在同一位置成像(如点P),而原本不在该平面上的点通过反投影后,将会在不同位置成像(如点Q)。
图3 单应变换
对于给定的相机阵列有N+1 个相机,记为C0,C1,…,CN,假定C0是中心相机;Ii表示相机Ci拍摄得到的图像,Hi表示将图像Ii投影到聚焦平面的单应变换,得到重聚焦合成孔径图像公示(1)如下:
其中ISA表示重聚焦的合成孔径图像,表示将Ii投影到聚焦平面。图4 表显示了由两个相机拍摄得到图像,通过单应变换得到的合成孔径图像,聚焦平面为棋盘格所在平面。可以看出,棋盘格所在平面的物点清晰城成像,而不在聚焦平面上的点出现模糊。
图4 通过单应实现重聚焦。顶部两张照片是由两个相机从不同角度拍摄而得;中间两张对应着顶部照片的单应变换后的视图;下左为中间两张照片累加求平均得到,可以看出非聚焦区域出现明显的边缘信息重复出现;下右是通过88 个相机反投影后求平均得到,可以看出聚焦平面(棋盘格平面)清晰成像,而其他区域已经完全模糊。
图4
上文中已经提到,合成孔径重聚焦的过程就是各个相机图像投影再求平均的过程,对于不在指定聚焦平面上的点,投影后将会在聚焦平面上不同位置重复出现,如图3 中的点Q。通过相机阵列来模拟大孔径光学设备,可以考虑为各个相机在不同的角度域上的采样,相机阵列系统捕获的光场信号是离散的,这种情况是由于角度欠采样所致[15]。
如图5 所示,V 表示相机平面,V0表示参考相机,主光轴为相机阵列虚拟合成孔径的主光轴(即图5 中的A)。Vx均匀分布在V0和Va间组成相机整列。T 表示图像平面,考虑光学无穷远处的像点P 成像在焦平面,f 表示焦距。若P 处无实际物体,则由P 后任意距离△Z的区域Dregion表面光线汇集而成。Sx表示采样率,Sx=1/△Z,△Z表示采样相机间距。
在该双平面模型中,Dregion由Va和决定,当目标平面符合朗伯体假设时,对于任意相机Vx,点P 对应的成像点tx将在间采样得到。当采样相机个数大于间像素个数时,将不存在由角度采样率而导致的混叠[16],如图5 右上所示。
对于图5 中,可以将相机阵列中的各个相机考虑为不同角度域上的采样,稀疏排列的相机必然导致角度欠采样,这也是合成孔径成像重聚焦出现混叠的原因。但是现实中,出于成本和设计上的考虑,致密的相机阵列是不可取的,对于未能捕获的光线,可以考虑采用插值计算来求得,以增加角度采样率。如图6 所示,对于合成的每条光线,利用附近的16 条光线插值计算求出[17]。
图5 双平面模型混叠分析
图6 插值计算合成虚拟光线
通过插值计算合成新的视图[18-20],以增加角度分辨率。但是这种方法需要考虑合成新视图所带来的计算开销。Chai 等人[15]和Lin 等人[21]对角度采样率大小进行了研究,总结出相邻视图的最大视差必须小于一个像素,渲染出的图像才不会出现混叠。因此通过插值计算得到新的视图不仅将面临计算量和新视图数量间的折中,并且对于新视图而言,贡献像素的视差越小,得到的插值点越准确。
文献[22-25]提出的方法通过将成像点进行扩散,计算得到对应的混淆圆CoC(Circles of Confusion),按照深度信息进行融合,得到最后的抗混叠渲染图像。根据凸透镜成像模型,如图7 所示。未能在像平面(也就是聚焦平面)清晰成像的点p,将在图像Ω上形成混淆圆(CoC),我们用φ(p)表示该混淆圆,
图7 混淆圆CoC
φ(p)的直径由如下公式(2)计算得出[25]:
其中,D(p)表示点p 到凸透镜的距离,f 表示凸透镜焦距,φ(A)表示凸透镜的直径,F=f/φ(A)。
该类方法最后将按照深度信息进行融合,深度排序过程成本很高,也需要在计算量和渲染质量上折中。
由于混叠现象会随着角度采样率的增加而减弱[16],混叠现象具有对角度采样率敏感这一特性。肖等人[16]提出随机变换孔径来检测混叠区域,利用同一个相机阵列中不同的相机组合,将得到多组光场数据。对每一组光场数据通过重聚焦得到含有混叠信息的图像。由于混叠对角度采样率敏感,不同角度采样率得到的重聚焦图像的混叠区域存在明显差异。再检测像素点间的变化得到混叠区域,将混叠区域通过降采样以消除混叠,双线性插值计算以提高分辨率,如图8 所示。
图8 中,第一行代表相机阵列,白色格子代表有效相机;第二行为变换孔径成像结果,圆形表示混叠点,方框表示非混叠点;第三、四行分别表示第二行左图、右图中选取点的差异对比,可以看出非混叠点在不同变换孔径中几乎不变,而混叠点则出现明显变换。
图8
本文对合成孔径成像原理进行了分析,介绍了通过单应变换实现光场重聚焦,从透镜成像模型关联到合成孔径成像模型,分析其中出现混叠的原因。介绍了三种抗混叠渲染方法,分别是合成新视图、模拟成像点的混淆圆和考虑混叠区域特性。在清楚了解到各类方法的缺陷后,才能够针对性的提出优化方案,探索时间开销更小、成像质量更高的解决方法。