摘要:紋理合成是當前計算機圖形學、計算機視覺和圖像處理領域的研究熱點之一。文章對基于樣圖的二維紋理合成技術進行了研究,有機結合了前人的一些觀點,在此基礎上提出了一種新的算法:在Efros和Liang提出的塊拼接紋理合成算法的基礎上融入Ashikhmin提出的基于位置相對性的合成技術,并加入與視覺相關的權值,得到了很好的視覺效果。
關鍵詞:紋理合成;紋理連貫性;MRF模型;塊拼接
0 引言
紋理映射是繪制復雜場景真實感圖形最為常用的技術,但由于采樣區域的局限,所獲取的紋理樣本通常為小塊紋理,若將小塊紋理直接映射到大的曲面上,它將導致映射后表面紋理模糊不清,若采用重復映射技術,則可能出現表面紋理接縫走樣等問題。
基于樣圖的紋理合成,是近幾年迅速發展起來的一種新的紋理合成技術。它基于給定的小區域紋理樣本,按照表面的幾何形狀,拼合生成整個曲面的紋理,紋理在視覺上是相似而連續的。基于樣圖的紋理合成技術不僅可以克服傳統紋理映射方法的缺點,而且避免了過程紋理合成調整參數的繁瑣,因而受到越來越多的研究人員的關注,成為計算機圖形學、計算機視覺和圖像處理領域的研究熱點之一。本文的算法就是基于Ashi-khmin提出的基于位置相對性的合成技術和Efros和Liang同時分別提出的基于MRF模型和塊拼接的紋理合成算法。
早期紋理合成技術有金字塔模型、多分辨率模型、MRF模型、層次法表示等,但效果均不太理想。在1999年的ICCV會議上,Efros基于MRF模型,提出了以鄰近點相關為基本準則的非參數采樣合成算法,取得了很好的合成效果。緊接著,在2000年的SIGGRAPH會議上,Wei和Levoy提出了一種改進的算法:鄰域改為L形狀,而非矩形。這種改進大大減小了計算量,加快了合成速度。在2001年,Ashikhmin利用相關性原理,根據位置的相對關系,在待選點中尋找最佳匹配點,這種方法對絕大多數的自然紋理合成都能取得很好的效果,而且速度比文獻[11]還要快;同樣是2001年,Efros和Liang同時分別提出了基于MRF模型和塊拼接的紋理合成算法,在紋理的合成質量和合成速度上比以前的算法都有顯著提升。這些使得紋理合成技術發展到了一個新的高度。
本文提出了一種新的紋理合成算法。算法思想與文獻[2-3]類似,但加入了文獻[1]的特點,在搜索匹配塊時采用了新的搜索規則,加速了匹配過程;同時在邊界重疊區的匹配誤差計算時采用了與視覺相關的權值,使合成結果更符合視覺要求。
1 相關工作
在2001年,Ashikhmin提出了一種新的簡單有效的搜索匹配方法,該方法對于合成自然紋理有著非常理想的效果。與Wei和Levoy的算法在整個樣本圖中搜索匹配點不同,Ashikhmin利用相關性原理,根據輸出圖像中當前點的L鄰域中的點(如圖1輸出圖像所示),找到與其匹配的輸入圖像中對應點的位置(如圖1中的箭頭所指點),然后偏移相應量后獲得待選點(如圖1輸入圖像中的黑塊)。以輸出圖像中當前點P的右上角鄰點A為例,A是已合成的點,其在輸入圖像中的匹配位置為A′,由于輸出圖像中,當前點P與A在x方向相差-1,在y方向相差1,即P=A+(-1,1),對應地,在樣本圖中,待選點A″由A′+(-1,1)獲得。其它待選點的計算類似。圖1中輸入圖像中的黑點為當前點P的所有待選點,比較各待選點與P點的L鄰域的誤差,選取誤差最小的點作為P點的匹配點。
在2001年的SIGGRAPH會議上,Efros提出一種基于塊拼接的紋理合成算法。比起以往的算法,該算法使用紋理塊作為紋理合成的單元,這是在文獻[10]基礎上的一個拓展。該算法在紋理合成的時間、合成紋理的視覺效果方面都得到了很大的提高,避免了以往的算法容易引起的模糊,紋元錯位嚴重等問題。如圖2所示,該方法按掃描線順序從左至右、從上至下逐塊合成紋理(圖2演示了合成順序),其中陰影塊為當前待合成紋理塊,其他正方形塊為已合成紋理塊,紅色輪廓線區域不僅是當前待合成紋理塊的邊界,而且也是與已合成部分的重疊區域。在合成過程中,所謂重疊區域匹配是指重疊區域的誤差小于某給定的閥值。重疊區域的誤差指它們重疊區域中對應像素的RGB值誤差之和。這里RGB值誤差定義為它們間的L2距離。例如,N1,N2若為重疊區域,則它們的誤差為:其中函數R(pixel),G(pixel),B(pixel)分別表示紋理圖像的紅、綠、藍三原色。

為了使重疊區域平滑過渡,文章還提出了裁剪線的概念。在匹配的重疊區域每一行中,找到偏差最小的像素點,由這些像素點就構成了裁剪線。如圖3所示,把裁剪線作為B2的邊緣,把B2貼入合成圖中,反復重復以上過程,就獲得了合成紋理圖。此算法雖然簡單,但合成效果很好。該算法存在的問題是有時紋理出現過多的重復,有些邊界不匹配。

2 本文的算法
Ashikhmin巧妙地運用了如下事實:對當前待合成點的鄰域內的已知點在樣本圖中的匹配點做相應的平移變換可導出當前待合成的點。這種性質可稱之為“紋理的連貫性”。Efros和Liang提出的塊拼接合成算法中,沒有利用這個性質。同時,由于L2距離并不是衡量兩個紋理塊之間視覺相似性的最好的手段,我們根據人的視覺系統對圖像中顏色變化尖銳的地方反應敏感,對顏色變化平緩的地方反應較為遲鈍的特點,對L(sub)2(/sub)距離給出了相應的視覺權值,進一步提高了合成效果。本文基于[1—2]提出了一種新的紋理合成算法,它有以下特點:
(1)根據當前待合成紋理塊的L鄰域(將Wei中像素的L鄰域概念中的像素推廣成像素塊)內的已合成紋理塊在樣本圖中的位置找到相應的待選紋理塊(類似文獻[1]方法),將待選塊先進行匹配檢查,加速匹配搜索。
(2)采用部分的MRF模型。如果搜索過程中找到邊界誤差小于閥值的紋理塊,則馬上停止搜索,將其作為當前待合成紋理塊;如果沒有發現誤差小于閥值的紋理塊,則采用MRF模型,得到當前待合成紋理塊。
(3)在計算兩個紋理塊邊界重迭區的誤差時,引入與視覺相關的權值,使合成結果更符合視覺特性。
本文算法可簡述如下:首先確定當前要合成的紋理塊,確定其L鄰域,根據L鄰域中已合成紋理塊的位置搜索記錄匹配紋理塊位置的數組,找到匹配塊,偏移相應位置后,得到當前待選紋理塊。然后比較待選紋理塊的邊界匹配誤差,如果誤差小于給定閥值,則直接選擇它作為當前待合成紋理塊;否則搜索整個樣本圖中的紋理塊,直到找到邊界誤差小于閥值的紋理塊,或者根據邊界誤差最小的紋理塊“估計”匹配紋理塊。同時在計算誤差的時候加入視覺相關的權值。
下面我們對算法作詳細介紹。
2.1 搜索匹配紋理塊
搜索匹配紋理塊的過程吸收了算法[1]和[2]的特點,具體來說分為兩步:
(1)由當前待合成紋理塊P確定其L鄰域N(p)中的紋理塊,得到在樣本圖中所對應的待選紋理塊集合T(p),在T(p)中搜索。
(2)在樣本圖中所有紋理塊集合T(all)中搜索。
先討論第一步搜索過程。為了提高合成速度,通常采用3×3的L鄰域(這里以一個紋理塊長度為一個單位)。此時鄰域紋理塊集合N(p)最多包含當前待合成紋理塊P的正左邊、左上角、正上方、右上角四個相鄰紋理塊(即圖4左邊綠色輪廓線所包含的紋理塊)。查找匹配紋理塊位置數組,得到這四個鄰域紋理塊在樣本圖像中的匹配位置(如圖4右邊綠色填充的紋理塊),偏移相應量后即為當前待選紋理塊。以輸出圖像中當前待合成紋理塊P的左上角鄰域紋理塊A為例,A在樣本圖中的匹配紋理塊為A′,指定紋理塊大小為Wpatch×Wpatch,邊界重迭區寬度為Woverlap,A′左上角的坐標為(x,Y),則由A產生的待選紋理塊A′的左上角的坐標為(X+Wpatch-Woverlap,Y+Wpatch-Woverlap)。其它待選紋理塊的計算類似。如圖4所示,輸入圖像中的粗邊方塊即為待選紋理塊。得到T(p)后,比較其中各待選紋理塊與當前待合成紋理塊L鄰域的邊界誤差,如果存在誤差小于給定閾值得的待選紋理塊Tmatch,則選擇它作為當前待合成的紋理塊。
如果沒有找到Tmatch,才進行第二步搜索。此時計算樣本圖中所有紋理塊的邊界誤差,并記錄誤差值。如果存在邊界誤差值小于給定閾值的紋理塊Pmatch,則停止搜索,將Pmatch作為當前待合成紋理塊;如果搜索完整個樣本圖,都沒有找到邊界誤差小于閾值的紋理塊,則選擇邊界誤差最小的紋理塊作為當前待合成的紋理塊。經過上述兩步搜索得到的紋理塊,我們可以按[2]中提到的圖像縫合方式或[3]中提到的顏色混合方式合成到結果圖中。
2.2 與視覺相關的權值計算
已有算法在計算兩個邊界區的誤差時,用到了距離L2,這種誤差度量方法將每個像素置于同等的地位對待,并不恰當。從視覺的角度觀察圖像,每個像素對人眼睛和心理的刺激是不同的,人往往對圖像中顏色變化尖銳的地方反應敏感,而對顏色變化平緩的地方反應相對遲鈍。基于這一點,本文提出給樣本圖和邊界區中的像素設定權值,來搜索更符合視覺要求的匹配紋理塊。圖5中:(a)是一張圖像;(b)是像素權值的示意圖,其中像素顏色深的地方權值較大。
下面介紹權值的計算方法。對圖像中的某像素點P,我們給定以該點為中心的窗口Mw×Nw,對于窗口中的任一點Q,我們定義P和Q的RGB顏色誤差為:
這里N是窗口中除P點以外的像素個數,γ是用來控制像素點的權值受周圍像素影響程度的因子。在合成前,首先對樣本紋理中每一個像素計算其權值,把結果保存在權值數組中。在合成紋理塊時,對當前合成邊界區的像素計算權值,再用如下方法計算邊界區誤差:

這里Bin指邊界重迭區在樣本圖中的部分,Bout指邊界重迭區在合成圖中的部分,Bin是Bin中的第i個像素,Bout是Bout中的第i個像素,Winj指像素Bin的權值,Woutj指像素Bout的權值,N指邊界重迭區的像素總數。值得注意的是:加入了像素權值以后,如果兩個像素的顏色相同,但權值不同,那么這兩個像素之間也將產生相似性誤差。
3 結果和分析
我們用PC機(PⅢ667/256M)對一些紋理進行合成。圖6是本算法與[2]算法合成結果的對比。圖6中左邊一列為樣本圖,按從上至下其分辨率分別為108×108像素、108×108像素和138×138像素;中間一列是用本算法合成的結果圖,大小為164×164像素;右邊一列為用[2]算法合成的結果圖,大小為164×164像素。從圖6我們可以看到用本算法合成的結果比用[2]算法合成的結果視覺效果要好。同時本文算法的合成速度也得到了很大的提高。表1列出圖中各紋理合成的一些實驗數據,可以看出,在合成所用紋理塊大小相同的情況下,本算法的合成時間比[2]算法要短20%到30%大小。

在實驗中我們發現如下規律:
(1)紋理塊越大,合成時間越短,紋理塊越小,合成時間越長;但紋理塊的大小與樣本圖相關,通常情況下,紋理塊要比“紋元”略大。如果紋理塊過大,塊與塊之間的接縫較明顯;如果紋理塊過小,則有可能引起紋理特征變形。
(2)邊界區的寬度一般取紋理塊寬度的1/4到1/6較為合適。本文取紋理塊寬度的1/6。
(3)γ是用來控制像素點的權值大小的可調節變量,過大或過小都會降低合成質量。本文所用的γ大小為0.05。
(4)對于確定當前待合成紋理塊的誤差閾值,一般取為0,即要求紋理塊邊界完全吻合,但實驗中發現取閾值為20以下對合成質量影響不大。本文所用的閾值為10。
4 結束語
本文提出了一種新的紋理合成算法。算法吸收了文獻[1—3]等多個算法的特點;利用“紋理塊的連貫性”,加快了紋理合成的速度;同時算法在進行紋理塊邊界誤差的計算時對每個像素加入了與視覺相關的權值,得到了較好的合成結果。由此可以看出,每個像素的重要性確實是不一樣的。
紋理合成是當前計算機圖形學和計算機視覺領域的研究熱點。其潛在的應用包括高維紋理合成、紋理的壓縮和解壓縮、視頻的合成和編輯、幾何紋理的建模和合成、網格紋理直接合成、網絡數據的快速傳輸、計算機動畫、影視特技和虛擬現實等方面。