本發明涉及集成成像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片源的速率。