本发明涉及集成成像3D(三维)显示技术和计算机多核多线程技术,更具体地说,本发明涉及一种基于CPU(中央处理器)多线程的集成成像3D片源快速生成方法。
背景技术:
集成成像3D显示技术是一种裸眼3D显示技术,无需眼镜或跟踪装置等辅助设备。传统的纯光学集成成像3D显示片源的拍摄难度较大,并且成像质量不高,随着计算机技术的迅速发展,衍生出了计算机集成成像技术。计算机集成成像技术采用3D建模软件建立3D场景模型,并搭建相应的虚拟目标相机阵列渲染生成视差图像,然后通过微图像阵列合成,最终生成集成成像3D片源。
CPU多线程是指基于CPU软件或者硬件方面实现多个线程并行执行的技术,更具体的说,是指CPU利用多个微处理器核心并行地执行不同任务的技术。因此可以通过多个线程,利用CPU多核的优势,实现视差图像并行的读取和微图像阵列的快速合成,从而高效快速地生成集成成像3D片源。
技术实现要素:
本发明提出一种基于CPU多线程的集成成像3D片源快速生成方法,该方法包括视差视频的获取、视差图像的多线程读取和微图像阵列的快速合成三个过程。本发明的详细流程如附图1所示。
所述本发明视差视频的获取过程,利用三维建模软件获取包含视差信息的视频。首先,利用三维建模软件生成虚拟3D场景,建立如附图2所示的包含R×R个相机的虚拟目标相机阵列,其中,水平和竖直方向包含的相机列数和行数都为R。虚拟目标相机阵列包含的相机个数与微图像阵列中图像元的像素个数相同,且相邻相机间距为D,所有相机具有共同的汇聚点O,汇聚点O所在的平面为中心深度平面,中心深度平面与虚拟目标相机阵列平面平行,且距离为L。其次,拍摄过程采用多正交投影合成法,渲染输出获得单帧分辨率为M×N的视差图像。最后,输出得到具有垂直方向和水平方向二维视差的视差视频,以此作为视差图像的多线程读取的源文件。
所述本发明视差图像的多线程读取过程,基于计算机多线程技术,在CPU中利用不同的微处理器核心并行地访问视差视频,读取并获得当前帧的视差图像,其过程如附图3所示。首先,设置访问的视差视频的个数为Q个,并将视差视频编号为0~Q-1,线程数目设置为计算机的核数为G。不同的微处理器核心1~G分别执行不同的线程1~G,每个线程执行计算机分配的迭代块D1、D2…DG,按执行完的先后顺序依次分配随后的迭代块DG+1、DG+2…DG+G…Dw。迭代块的大小即每个线程单次执行的任务次数通过指导性的启发式自调度方法确定,声明最小迭代次数为T,每个迭代块的大小由以下公式计算得到:
(1)
其中,Cw表示剩余未读取的任务次数,Dw是第w个块的大小,当Dw<T时,取Dw为T,直到完成所有的读取任务,也即D1+D2+…+Dw=Q。其中,G个线程并行运行,线程之间采取先到先得的任务分配方式,也即开始时每个线程会分配到较大的迭代块,随后分配到的迭代块大小将逐渐递减。对所有的视差视频依次实现访问操作,读取并获得当前帧的视差图像,直至Q个视差视频当前帧的视差图像均读取完毕。
所述本发明微图像阵列的快速合成过程,同样基于CPU利用计算机多线程技术,并行地将读取的视差图像通过像素映射,合成微图像阵列。设置生成的微图像阵列分辨率为S×P,单个图像元分辨率为R×R,包含图像元个数H×K,其中水平方向包含图像元列数为H,竖直方向包含图像元行数为K。具体映射关系如附图4所示,I(m, n)C表示序列号为C的视差图上第m行第n列对应像素点,I'(i, j)表示微图像阵列上第i行第j列位置对应的像素点,像素映射关系由下式给出:
(2)
其中:
(3)
(4)
(5)
式中,C表示视差图像的序列号,并且0≤C≤R2-1,C为非负整数;mod(x, y)函数表示x对y求余,round(*)函数表示对*四舍五入取整数;m、n、i和j是循环变量,m属于0~M-1范围,n属0~N-1范围;i在0~S-1范围内,j在0~P-1范围内循环取整数值,就能分别将微图像阵列的每一个像素点都赋予相应的视差图对应位置的像素值。本发明中的像素映射过程相互独立,对微图像阵列的快速合成过程仍采用基于指导性的启发式自调度方法的CPU多线程技术并行处理,获得更快的处理速度。其中,声明像素映射的最小迭代次数为J,线程数目仍然为G,使G个线程并行完成各帧视差图像像素映射至微图像阵列对应像素点S×P次,直到完成所有帧对应微图像阵列的快速合成,实现了集成成像3D片源的快速生成。
本发明提出的一种基于CPU多线程的集成成像3D片源快速生成方法。该方法采用基于指导性的启发式自调度方法的多线程技术,充分利用计算机多核的优势,实现了视差图像的高效读取和微图像阵列的快速合成,是一种高效和快速的集成成像3D片源生成方法。
附图说明
附图1为一种基于CPU多线程的集成成像3D片源快速生成方法流程图。
附图2为本发明中三维建模软件获取视差视频示意图。
附图3为基于指导性的启发式自调度多线程读取迭代块任务示意图。
附图4为视差图像合成微图像阵列的像素映射关系。
上述附图中的图示标号为:
1中心深度平面,2虚拟目标相机阵列,3虚拟3D场景,4虚拟目标相机阵列汇聚点O,5读取任务分块,6微图像阵列。
应该理解上述附图只是示意性的,并没有按比例绘制。
具体实施方式
下面详细说明利用本发明的一种基于CPU多线程的集成成像3D片源快速生成方法的一个典型实施例,对本发明进行进一步的具体描述。有必要在此指出的是,以下实施例只用于本发明做进一步的说明,不能理解为对本发明保护范围的限制,该领域技术熟练人员根据上述本发明内容对本发明做出一些非本质的改进和调整,仍属于本发明的保护范围。
本发明提出一种基于CPU多线程的集成成像3D片源快速生成方法,该方法包括视差视频的获取、视差图像的多线程读取和微图像阵列的快速合成三个过程。
所述本发明视差视频的获取过程,利用三维建模软件获取包含视差信息的视频。首先,利用三维建模软件生成虚拟3D场景,建立如附图2所示的包含R×R=8×8个相机的虚拟目标相机阵列,其中,水平和竖直方向包含的相机列数和行数都为R=8。虚拟目标相机阵列包含的相机个数与微图像阵列中图像元的像素个数相同,且相邻相机间距为D=4mm,所有相机具有共同的汇聚点O,汇聚点O所在的平面为中心深度平面,中心深度平面与虚拟目标相机阵列平面平行,且距离为L=1030mm。其次,拍摄过程采用多正交投影合成法,渲染输出获得单帧分辨率为M×N=854像素×480像素的视差图像。最后,输出得到具有垂直方向和水平方向二维视差的视差视频,以此作为视差图像的多线程读取的源文件。
所述本发明视差图像的多线程读取过程,基于计算机多线程技术,在CPU中利用不同的微处理器核心并行地访问视差视频,读取并获得当前帧的视差图像,其过程如附图3所示。首先,设置访问的视差视频的个数为Q=64个,并将视差视频编号为0~Q-1=0~63,线程数目设置为计算机的核数为G=8。不同的微处理器核心1~G=1~8分别执行不同的线程1~G=1~8,每个线程执行计算机分配的迭代块D1、D2…D8,按执行完的先后顺序依次分配随后的迭代块D9、D10…D16…Dw的大小,即每个线程单次执行的任务次数通过指导性的启发式自调度方法确定,声明最小迭代次数为T=5,每个迭代块的大小由以下公式计算得到:
(1)
其中,Cw表示剩余未读取的任务次数,Dw是第w个块的大小,当Dw<5时,取Dw为5,直到完成所有的读取任务,也即D1+D2+…+Dw=64。其中,G=8个线程并行运行,线程之间采取先到先得的任务分配方式,也即开始时每个线程会分配到较大的迭代块,随后分配到的迭代块大小将逐渐递减。对所有的视差视频依次实现访问操作,读取并获得当前帧的视差图像,直至Q=64个视差视频当前帧的视差图像均读取完毕。
所述本发明微图像阵列的快速合成过程,同样基于CPU利用计算机多线程技术,并行地将读取的视差图像通过像素映射,合成微图像阵列。设置生成的微图像阵列分辨率为S×P=1920×1080,单个图像元分辨率为R×R=8×8,包含图像元个数H×K=240×135,其中水平方向包含图像元列数为H=240,竖直方向包含图像元行数为K=135。具体映射关系如附图4所示,I(m, n)C表示序列号为C的视差图上第m行第n列对应像素点,I'(i, j)表示微图像阵列上第i行第j列位置对应的像素点,像素映射关系由下式给出:
(2)
其中:
(3)
(4)
(5)
式中,C表示视差图像的序列号,并且0≤C≤R2-1,C为非负整数;mod(x, y)函数表示x对y求余,round(*)函数表示对*四舍五入取整数;m、n、i和j是循环变量,m属于0~M-1=0~853范围,n属于0~N-1=0~479范围;i在0~S-1=0~1919范围内,j在0~P-1=0~1079范围内循环取整数值,就能分别将微图像阵列的每一个像素点都赋予相应的视差图对应位置的像素值。本发明中的像素映射过程相互独立,对微图像阵列的快速合成过程仍采用基于指导性的启发式自调度方法的CPU多线程技术并行处理,获得更快的处理速度。其中,声明像素映射的最小迭代次数为J=15,线程数目仍然为G=8,使G=8个线程并行完成各帧视差图像像素映射至微图像阵列对应像素点S×P=1920×1080次,直到完成所有帧对应微图像阵列的快速合成,实现了集成成像3D片源的快速生成。
至此,采用本发明提出的一种基于CPU多线程的集成成像微图像阵列快速生成方法生成一幅集成成像微图像阵列所消耗的时间为0.28s,帧率为3.57fps,与基于单线程的实现相比,该方法提升了75%,显著地提升了CPU生成集成成像3D片源的速率。