王 琦
3D能夠給觀眾帶來更真實的視覺體驗,但是目前無論是電視臺,還是圖片庫運營商、影視節(jié)目發(fā)行商、大型網絡音視頻網站存儲的內容介質超過99%都是2D視頻、圖像。由于3D攝像、拍照等環(huán)節(jié)成本較高,因此基于人眼對三維模型的視覺模型,2D轉3D的技術應用顯的尤為重要,通過該項技術可以將普通的2D圖像轉成3D圖像,進而可以由2D視頻轉換為3D視頻。
本文從人眼視覺模型出發(fā)闡述3D相關技術,著重討論2D轉3D技術,并給出一種軟件實現方法及實驗結果。
3D相關技術包括3D顯示技術、立體視覺、2D轉3D、多視點編解碼等。本章將簡述除2D轉3D技術之外的相關技術。
圖像、視頻處理、傳輸技術經歷了從黑白到彩色,從模擬電視到數字電視,從標準清晰度到高清的多次變革。每次變革都提高了人們的視覺享受。目前,千家萬戶都在觀看的二維(2D)圖像、視頻平面顯示系統(tǒng)由于缺少物體的深度信息,使人的視覺缺乏立體(深度)感而有與實際的自然場景不一致的感覺。目前,觀看立體圖像、視頻的方式主要有佩戴立體眼鏡(偏振式、快門式、分色式)和自動立體顯示(視差柵欄式、柱透鏡光柵式)。
人類之所以能夠感知自然深度是由于左右眼觀看真實世界有輕微的差異,每只眼睛的視網膜上各形成一個獨立的影像,傳到大腦皮層后結合為具有深度感的視像。進一步說,當相距約6.5cm的雙眼觀察物體時,因視向的不同,左眼看到物體的左邊物點,右眼看到物體的右邊物點,在兩個視網膜上得到不同的兩個視像,其兩者之差成為視差。由此可見,雙眼視差是形成對立體物體有深度感的重要條件,視差與深度之間存在必然聯系。人眼對獲取的景象的深度感知能力(Depth Perception)主要來自于:雙目視差(Binocular Parallax)、運動視差(Motion Parallax)、眼睛的適應性調節(jié)(Accommodation)、視差圖像在人腦的融合(Convergence)。[1]
MVC標準建立在AVC標準之上,以AVC標準補篇(附錄H)的形式出現。詳見[2]。
觀眾在觀看2D圖像、視頻時,兩眼同時接收同一圖像、視頻序列幀;而在觀看3D圖像、視頻,要體驗到立體感,則左眼接收左序列幀,右眼接收有視差的右序列幀。因此2D轉3D的技術難點在于如何由單目序列幀生成一對有視差的雙目序列幀。
根據輸入2D圖像數目的不同,現有的2D轉3D技術大體上可以分為兩類:基于兩幅或多幅圖像的轉換技術和基于單幅圖像的轉換技術。第一種技術利用多路相機拍攝的圖像或者是單路相機拍攝動態(tài)場景得到的圖像,使用了奪目深度線索;而第二種技術利用單幅靜止圖像作為輸入,使用的是單目深度線索,作為目前最常用,也是目前國內電視臺中已經上線運營過的技術是基于3d紅藍立體原理的圖像轉換技術。
3d紅藍立體原理的圖像轉換技術主要是指人類是通過左眼和右眼所看到的物體的細微差異來獲得立體感的,要從一幅平面的圖像中獲得立體感,那么這幅平面圖像中就必須包含具有一定視差的兩幅圖像的信息,再通過適當的方法和工具分別傳送到我們的左右眼睛。
那么一幅紅藍立體圖是如何包含兩幅圖像信息。純黃的RGB數值是255,255,0,可以看出:純黃色=純紅色+純綠色,根據互補色原理,補色指完全不含另一種顏色,紅和綠混合成黃色,因為完全不含藍色,所以黃色就是藍色的補色。我們可以通過計算來確定任意一個顏色的互補色:首先取得這個顏色的RGB數值,再用255分別減去現有的RGB值即可。比如黃色的RGB值是255,255,0,那么通過計算:r(255-255),g(255-255),b(255-0),互補色為:0,0,255。正是藍色。紅色的互補色為青色,紅色的RGB值是(0--255),0,0;而青色的RGB值是0,(0--255),(0--255),由于它們不含有對方的顏色,利用這個特點,我們用紅色來保存一幅圖像的信息,而用青色來保存另一幅圖像的信息,這樣就完全可以用一幅圖像來包含兩幅圖像的信息了。
我們可以用一個公式來表達;第一幅圖像RGB1=R1,G1,B1;第二幅圖像RGB2=R2,G2,B2,合成后的立體圖像RGB12=R1,G2,B2(這種情況程序實現時深度向外)或RGB21=R2,G1,B1(這種情況程序實現時深度向內)。從公式RGB12=R1,G2,B2中可以看出,合成后的立體圖像實際上包含了第一幅圖像的紅色RGB=R1,0,0和第二幅圖像的青色RGB=0,R2,B2。
接下來的問題就是怎樣保證我們的左右眼分別只看到一幅圖像,研究一下立體眼鏡,紅色眼鏡片的RGB值是255,0,0;青色眼鏡片的RGB值是0,255,255,因為只有紅色才能透過紅色眼鏡片,傳送到我們左眼的圖像的RGB紅=R1,0,0;因為只有青色才能透過青色眼睛片,傳送到我們右眼的圖像的RGB青=0,R2,B2。這樣包含在一幅紅藍立體圖中的兩幅圖像的信息就被分別傳送到了我們的左右眼睛。
Depth from motion主要經過視頻幀的讀取、視頻分割、視差估計(深度圖的求?。?,合成3D視頻幀等幾個步驟,如圖1所示:
圖1 Depth from motion
深度圖(Depth map):場景中各點相對于攝像機的距離,即深度圖中的每一個像素值表示場景中某一點與攝像機之間的距離。視差圖(Parallax map):以圖像對中任一幅圖像為基準,其大小為該基準圖像的大小,元素值為視差值的圖像。
DIBR(Depth image based Rendering)[3]技術著重解決的是如何由提供的原圖片和對應的深度圖生成一對3D立體圖。
DIBR的算法處理流程是:圖片預處理(原圖和深度圖):深度圖歸一化,對深度圖進行不對稱高斯濾波。因為人類的視覺模型獲取視差主要來自與水平差,而并非垂直差,所以要進行不對稱的高斯濾波。
Structure from Motion技術通過分析二維物體的運動信號得到三維結構,只有一個取景器(如攝像機)的情況下,通過分析取景器移動時拍到的場景來得到場景的三維信息。類似于多取景器狀況下的立體視覺。。從二維圖像得到三維場景具有挑戰(zhàn)性,因為圖像的形成過程是不可逆的。
本文給出一種基于3d紅藍立體原理的圖像轉換技術,并實現了一套2D到3D的軟件系統(tǒng)。實驗證明,該方法僅對顏色空間層進行相應處理,具有使用簡單、高效等特點,后期可方便的擴展到硬件實現,且可兼容市面上的低價格3D眼睛。
2D轉3D轉換實現總流程,如圖2所示:
圖2 2D轉3D轉換實現總流程圖
首先定義存儲圖像的結構體,設定選擇模式,程序根據設定的模式為結構體賦值并申請圖像存儲空間,設置顏色搭配模式,為文件中的指定幀進行3D圖像轉換。
2D轉3D轉換處理,首先要判斷轉換處理模式,處理模式共分為2種,分別為圖像進行左右處理和上下處理,對其進行YUV轉換為RGB并按序保存,最后把幀畫面寫入圖像中,從而完成2D轉3D功能,如圖3所示:
圖3 2D轉3D處理流程圖
下面根據2D轉3D處理處理流程的兩種選擇模式進行細化處理,通過轉換存儲矩陣,判斷顏色搭配模式,實現YUV分量轉RGB并依次存儲,最后將其寫入BMP文件,如圖4、圖5所示:
圖4 圖像轉換左右處理邏輯流程圖
圖5 圖像轉換上下處理邏輯流程圖
轉換公式
YUV分量轉換RGB公式如下:
R=Y+1.4075*(V-128)
G=Y-0.3455*(U-128)-0.7169*(V-128)
B=Y+1.799*(U-128)
人眼立體感知處理的7種不同顏色組合及對應處理公式如下:
3D red-blue image(左B右R,即紅藍)
R=left R*0+right R*1
G=left G*0+right G*0
B=left B*1+right B*0
3D red-cyan image(左GB右R,即紅青)
R=left R*0+right R*1
G=left G*1+right G*0
B=left B*1+right B*0
3D red-green image(左G右R,即紅綠)
R=left R*0+right R*1
G=left G*1+ right G*0
B=left B*0+right B*0
3D green-red image(左R右G,即綠紅)
R=left R*1+right R*0
G=left G*0+right G*1
B=left B*0+right B*0
3D magenta-green image(左G右RB,即品紅綠)
R=left R*0+right R*1
G=left G*1+ right G*0
B=left B*0+right B*1
3D green-magenta image(左RB右G,即綠品紅)
R=left R*1+right R*0
G=left G*0+right G*1
B=left B*1+right B*0
3D brown-blue image(左B右RG,即棕藍)
R=left R*0+right R*0.5
G=left G*0+right G*0.25
B=left B*1+right B*0
通過判斷顏色組合模式,套用轉換公式實現YUV分量轉RGB并依次存儲,最后將其寫入BMP文件完成對一個畫面的3D轉換處理。
1、影片圖片的枚舉變量設計:
typedef enum{YUV420=0,YUV422,YUV444,
RGB565,RGB888,RGB32,}AV_ImageFormat;
2、圖像轉換處理結構體設計:
typedef struct AV_3DVideo_PostProcessing__OperatePar{
//for Input Image
//unsigned int inImageFormat;
AV_ImageFormat inImageFormat;
unsigned char*inYUVFrame[3];
unsigned int inYUVWidth[3];
unsigned int inYUVHeight[3];
unsigned int inYUVStride[3];
//for Output Image
AV_ImageFormat outImageFormat;
unsigned char*outRGBFrame;
unsigned int outRGBWidth;
unsigned int outRGBHeight;
unsigned int outRGBStride;
unsigned char*outYUVFrame[3];
unsigned int outYUVWidth[3];
unsigned int outYUVHeight[3];
unsigned int outYUVStride[3];
//for Effect type
unsigned int colorchoose;
unsigned int typechoose;
}AV_3DVideo_PostProcessing__OperatePar;
Int AV_3DVideo_Create(unsigned int *handle,AV_3DVideo_PostProcessing__OperatePar*videoconversion);
int AV_3DVideo_Destroy(unsigned int handle);
int AV_3DVideo_PostProcessing(unsigned int handle,VA_3DVideo_PostProcessing__OperatePar*videoconversion);
基于以上思路,開發(fā)Demo運行系統(tǒng),并對一個800x450的YUV420序列進行2D到3D轉換。
根據以上實驗結果,結合人眼佩戴眼睛后實現感觀體驗。將YUV分量轉換為RGB并依次存儲,左G右RB,即品紅綠;或者將YUV分量轉換為RGB并依次存儲左RB右G即綠品紅,這兩種轉換效果相對較好。
通過本文實現的DEMO系統(tǒng),已經能初步較好的完成2D轉3D圖像轉換,并通過配置相關觀看裝置技術能給人們帶來一定的3D體驗。希望隨著2D轉3D技術的不斷前進,能夠將將更多的普通2D圖像方便的轉成3D圖像。
[1]王樹峰,基于立體視覺方法的圖像三維模型重建研究,[D]南京航空航天大學,20080301
[2]ITU-T T-REC-H.264-201003-I!!PDF-E
[3]Tao Li,Qionghai Dai,Xudong Xie,An Efficient Method for Automatic Stereoscopic Conversion,[D]Visual Information Engineering,2008.VIE 2008.5th International Conference on
[4]Liang Zhang;Tam,W.J “Stereoscopic image generation based on depth images for 3D TV,”[D]IEEE Conference on Broadcasting,pp.191-199,2005