一种光场图像的压缩方法与流程

文档序号:11389085阅读:798来源:国知局
一种光场图像的压缩方法与流程

本发明属于光场图像处理的技术领域,具体涉及一种以全局运动矢量为基础的光场图像压缩方法。



背景技术:

“光场”是用来记录光线分布情况的一个模型,可以全方位地描述光线在空间与时间中的各种信息。对于传统相机成像来说,一张照片上的一个像素点只是不同方向的光线叠加之后的结果;对于光场相机来说,其采集到的图像上还包含着光辐射在传播过程中的四维位置和方向的信息,相比只记录二维的传统成像方式多出2个自由度,可以对光路进行轨迹追踪,因而在图像重建过程中,能够获得更加丰富的图像信息。光场图像在计算物体景深、医学影像以及虚拟现实等领域有着广泛的应用。

目前有两种常见的光场图像进行采集方式:微透镜相机以及相机阵列。两种方式都是将四维光场信息记录在二维的图片上,光场图像包含的信息量十分巨大,相应地,其文件大小也高于传统的图片文件,如何高效储存与传输光场图像已经是当前十分迫切的需求。

使用相机阵列拍摄出的光场子图像间存在极高的相关性,由于每幅子图像之间只有相机位置的变化,而没有图像中物体的相对移动,因此相邻图像间几乎只有相对平移的关系,利用这一相关性,对两幅图像进行基于全局运动估计的帧间预测编码,能大大提高光场图像的编码效率。



技术实现要素:

本发明的目的在于,提供一种能提升光场图像压缩效率的图像压缩方法,即基于全局运动估计的光场子图像编码方法。

本发明采用的技术方案为:一种光场图像的压缩方法,包括下列步骤:

步骤1:输入待压缩的光场图像子阵列;

步骤2:对光场子图像进行图像组划分,将同一行或同一列的所有图像作为一个图像组;

步骤3:分别对各组图像进行编码压缩:将每一行最左或每一列最上的图像作为参考帧,基于参考帧计算其相邻帧的全局运动矢量以及预测图像,对全局运动矢量以及相邻帧与预测图像的差值进行编码;

步骤4:对于每一组待编码的子图像,将该组最近完成编码的图像作为参考帧,基于参考帧计算其相邻帧的全局运动矢量以及预测图像,对全局运动矢量以及相邻帧与预测图像的差值进行编码;

步骤5:重复步骤4,直到所有子图像组的每一幅子图像都完成了全局运动矢量以及图像差值的编码,整个光场图像压缩过程结束。

在步骤3和4中,全局运动矢量的具体计算方法为:设每个光场子图像的大小是l*w个像素,对当前帧的中心区域中的n*n个大小为k*k像素的图像块进行运动估计,得到这n*n个图像块的运动矢量,以其众数作为当前帧的全局运动矢量;

所述参数k的计算方法为k=max[16,ωlog2s],其中ω为预设尺度因子,s=min[l,w];

所述参数n的计算方法为n=max[4,log2(s/k)],其中s=min[l,w];

所述中心区域是指,当前图像的中心像素点最邻近的n*n个子图像区域。

在步骤3和4中,图像块的运动矢量的具体计算方法为:

首先判断分组方式:

若是按行分组,将当前待测图像块与参考帧对应位置的图像块在从左到右的水平搜索范围内进行最小绝对差值和计算,找出最小绝对差值和最小的图像块,两图像块间的水平相对位移即为水平运动矢量dx;之后再将当前待测图像块与参考帧对应位置的图像块在从上到下的垂直搜索范围内进行进行最小绝对差值和计算,找出最小绝对差值和最小的图像块,两图像块间的垂直相对位移即为垂直运动矢量dy,则[dx,dy]即为当前图像块的运动矢量;

若是按列分组,将当前待测图像块与参考帧对应位置的图像块在从上到下的垂直搜索范围内进行最小绝对差值和计算,找出最小绝对差值和最小的图像块,两图像块间的垂直相对位移即为垂直运动矢量dy;之后再将当前待测图像块与参考帧对应位置的图像块在从左到右的水平搜索范围内进行进行最小绝对差值和计算,找出最小绝对差值和最小的图像块,两图像块间的水平相对位移即为水平运动矢量dx,则[dx,dy]即为当前图像块的运动矢量。

综上所述,由于采用了上述技术方案,本发明的有益效果为:本发明首先根据光场图像的行列数目,决定更加有效的分组方式;使用参考帧图像对当前待编码图像进行全局运动估计,相对于分块运动估计的做法,大大减少了计算量,提高了计算速度;在进行全局运动估计的过程中,通过分析图像的大小和复杂度,自动选取合理的分块方式与块数量,在保证准确性的前提下减小了运算量。最后通过全局运动补偿提高参考帧图像与当前待编码帧图像的相关性,实现高效的光场子图像压缩过程。

附图说明

图1为子图像按行分组示意图;

图2为n=4为例的中心区域的含义;

图3为对图像块进行运动估计的过程。

具体实施方式:

为使本发明的目的与技术方案更加清楚,下面结合实施方式与示意图,对本发明作进一步详细描述。

基于本发明的方法,对输入的光场子图像阵列进行如下处理:

步骤1、确定光场子图像分组方式。设光场子图像阵列的数目为m*n,即m行n列,若m<n,则将每一行子图像作为一个图像组;若n<m,则将每一列子图像作为一个图像组。

步骤2、确定要检测的图像块大小k*k。其中k=max[16,ωlog2s],其中ω为预设尺度因子,设每个光场子图像的大小是l*w个像素,s=min[l,w];

步骤3、确定需要进行运动估计的图像块数量num=n*n,其中n=max[4,log2(s/k)],其中s=min[l,w];

步骤4、将每一行最左(若将每一行子图像作为一个图像组)或每一列最上(若将每一行列图像作为一个图像组)的图像作为参考帧,对其相邻帧(下一帧)进行全局运动估计。

步骤5、全局运动估计的方法是:对于当前编码帧的中心区域中的n*n个大小为k*k像素的图像块进行运动估计,得到n*n个图像块运动矢量[dx(i),dy(i)];所述中心区域是指,当前图像的中心像素点最邻近的n*n个子图像区域。取数组dx(i)中元素的众数为dx,取数组dy(i)中元素的众数为dy,则矢量[dx,dy]为整幅子图像的全局运动矢量。

步骤6、对图像块进行运动估计的方法是:首先判断分组方式,若是按行分组,对于当前编码帧的每一个图像块curblock(i),在参考帧的对应位置图像块的向左k像素到向右k像素进行全搜索算法的图像块匹配,为减小计算量,使用最小绝对差值和(sad)算法,公式为:

sad(mv)=∑|f2(x,mv)-f1(x)|

步骤7、找到参考帧在水平方向搜索范围内与图像块curblock(i)的sad最小的对应图像块horblock(i),记录图像块curblock(i)与horblock(i)间的水平位移矢量dx(i);之后在参考帧的horblock(i)图像块向上k像素到向下k像素进行全搜索算法的图像块匹配,找到参考帧在垂直方向搜索范围内与图像块curblock(i)的sad最小的对应图像块verblock(i),记录图像块horblock(i)与verblock(i)间的垂直位移矢量dy(i);则[dx(i),dy(i)]即为当前图像块curblock(i)的运动矢量。

步骤8、若是按列分组,对于当前编码帧的每一个图像块curblock(i),在参考帧的对应位置图像块的向上k像素到向下k像素进行全搜索算法的图像块匹配,使用最小绝对差值和(sad)算法,找到参考帧在垂直方向搜索范围内与图像块curblock(i)的sad最小的对应图像块verblock(i),记录图像块curblock(i)与verblock(i)间的水平位移矢量dy(i);之后在参考帧的verblock(i)图像块向左k像素到向右k像素进行全搜索算法的图像块匹配,找到参考帧在水平方向搜索范围内与图像块curblock(i)的sad最小的对应图像块horblock(i),记录图像块verblock(i)与horblock(i)间的水平位移矢量dx(i);则[dx(i),dy(i)]即为当前图像块curblock(i)的运动矢量。

步骤9、求得当前帧的全局运动矢量[dx,dy]后,将参考帧平移[dx,dy]后作为预测图像,将当前帧与预测图像做差,将得到的差值d与全局运动矢量[dx,dy]进行编码。

步骤10、将最近完成编码的图像作为参考帧,将其下一帧图像作为待编码的当前帧,重复步骤5~9,对当前帧进行压缩编码。

步骤11、当每一组子图像中的每一幅子图像都进行过编码之后,整个光场图像阵列的压缩编码结束。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1