1. 程式人生 > >基於單幅影象的2D轉3D演算法研究

基於單幅影象的2D轉3D演算法研究

最近,3D影片盛行,3D電視技術也層出不窮,3D技術在帶給大家非凡的視覺衝擊同時,也在告訴大家這背後隱藏了太多的商機。

    目前的3D技術大體分為兩種:軟體技術和硬體技術。所謂硬體技術就是在拍攝影片時採用多攝像頭及各種3D相關裝置來拍攝片源;所謂軟體技術就是將2D片源通過一定的軟體轉換為3D格式。

    如何使用軟體技術將2D轉為3D呢?今天我們來研究一種基於單幅影象的3D轉換演算法。

    首先,我們要了解一種最簡單的紅藍3D技術,所謂的2D影象轉3D影象,它需要兩幅有視差的影象來合成一張具有3D資訊的效果圖,實際上就是用一幅影象包含兩張影象的資訊。如何實現這一點呢?我們知道在RGB顏色空間中,影象中的每個畫素都可以都包含R,G,B三個顏色分量,比如:純紅色(255,0,0),純綠色(0,255,0),純藍色(0,0,255)等。

    純紅色(255,0,0)的補色為青色(0,255,255),這兩種顏色互不包含,是互補的關係,也就是說,基於這種補色關係,我們有如下結果:

    假設影象A的畫素M(x,y)的RBG為(R1,G1,B1),影象B的畫素N(x,y)的RGB為(R2,G2,B2),我們所需要的3D影象S對應畫素O(x,y)的RGB值可計算如下(紅藍模式):

                      O(R,G,B) = (R1,G2,B2) 

                      O(R,G,B) = (R2,G1,B1)

    以上兩個公式中,任何一個,都包含了其中一張影象的R資訊,和另一張影象的G,B資訊,由於紅色的補色是青色,這兩個是互不包含的關係,因此,以上公式得到的結果中就包含了兩張影象的資訊了。

    對於紅藍眼鏡,其中兩個鏡片的顏色正是紅色和青色,這樣,影象經過鏡片進入我們眼睛時,實際上就包含了兩幅影象資訊(一幅影象的R資訊,另一幅影象的G,B資訊),從而產生了立體感覺。

    基於以上原理,我們可以用PS,方便的將如下兩張有視差的影象轉換為一張紅藍3D影象:

注:以上原始圖1,2像來自於網路

    有了上面的理解,我們明白,我們需要2張2D的有視差的影象,才能轉換為1張3D影象,但是,我們如何將1張原始影象直接轉換為3D影象呢?     一個基本思想,我們通過原始影象,獲取影象的深度,視差等3D資訊,來構建3D效果圖。     這個思想的實現,是個關鍵問題,經過本人研究,這裡,介紹一個思路:     假設有原始影象A,我們要得到的紅藍3D影象為S,演算法過程如下:     1,濾波演算法           使用一定的濾波演算法去除A中的噪聲,比如:高斯濾波演算法,均值濾波演算法,中值濾波演算法等等。     2,銳化演算法           使用一定的銳化演算法恢復並增強A中的細節,比如:Sobel,Laplace,Robert等等。     3,新增深度資訊           經過1-2之後,我們得到影象B,這個影象與A已經有了一定的差異,但是,我們如果將B和A作為兩張有視差的原始影象來得到S,那麼效果並不好,我們還要新增一定的深度資訊,構成影象C,這個深度資訊獲取的演算法,可以參考論文(Rapid 2D to 3D Conversion),這樣我們就可以得到影象C了。

     4,按照前文所述紅藍3D原理,將影象A,C轉為S,S就是一副3D影象了。

     這裡附上我自己的效果圖:

最後,分享一個專業的影象處理網站(微畫素),裡面有很多原始碼下載: