(河南理工大學 計算機科學與技術(shù)學院,河南 焦作 454150)
紋理合成[1]是在給定小樣圖的紋理特征基礎(chǔ)上,利用其已有的紋理結(jié)構(gòu)特征合成一個大面積紋理圖像,并保證紋理結(jié)構(gòu)的相似性與連續(xù)性。紋理合成是為了避免紋理映射中產(chǎn)生裂縫走樣亦或存在接縫等現(xiàn)象而提出的,將人工合成紋理圖像作為目標,在樣本圖像中搜尋匹配點,將其復制到輸出圖像中來生成與樣本相似的連續(xù)紋理,是計算機圖形圖像處理領(lǐng)域中的重要研究內(nèi)容。紋理傳輸是在紋理合成的基礎(chǔ)上發(fā)展起來的,然而它又和紋理合成技術(shù)不同,紋理合成僅需一小塊樣本圖像就能夠合成任意大小的紋理圖像,而紋理傳輸則涉及到兩個圖像,把源圖像的紋理特征傳遞到目標圖像上,從而形成具有源圖像紋理風格的藝術(shù)圖像,紋理傳輸這一特性使其在許多方面都有應(yīng)用價值。
Efros[2]提出的基于塊拼貼的紋理合成(Image Quilting)算法,通過尋找最小誤差路徑來實現(xiàn)塊之間的拼接,得到了良好的結(jié)果,使圖像拼接過程過于隨機導致的結(jié)構(gòu)性紋理合成結(jié)果不理想的問題得到了解決;Schl?mer[3]等人對Wang Tiles方法進行擴展,用于半隨機紋理的合成;Zu[4]等人使用Wang Tiles方法實現(xiàn)了紋理合成;孫勁光、王繼東[5-6]等人提出了基于Wang Tiles的改進紋理合成算法,提高了紋理合成算法結(jié)果的質(zhì)量;沈哲[7]等人運用并行方式提高了紋理合成算法的效率;Wei[8]等人提出一種基于搜索的紋理合成算法,其中樣本可以按任意順序生成,但結(jié)果紋理保持相同;Wu[9]等人提出一種特征感知方法來合成自然紋理。
Image Quilting算法相比基于像素的合成算法在時間和效果上得到了改善,但仍存在缺點:合成的紋理結(jié)果會出現(xiàn)重復現(xiàn)象,如果樣圖較小時將會更明顯;對許多結(jié)構(gòu)性比較強的紋理和一些自然隨機紋理如草叢、水波會造成邊界不連續(xù),合成的結(jié)果不太理想,Raad,Kuri及Lasram[10-13]等人提出了相關(guān)的改進算法。本文對Image Quilting算法進行改進,通過多階誤差曲面來計算最小誤差分割路徑,使得到的拼貼路徑更加精確,達到更好的合成效果。同時在按照路徑拼貼紋理塊后引入Poisson Blending來對邊界不連續(xù)區(qū)域進行平滑處理,并且將其應(yīng)用到紋理傳輸中。
Image Quilting算法的基本思想是:按照掃描線的順序,采用一定的匹配準則,從輸入紋理挑選一定大小的紋理塊復制到輸出紋理,直到符合輸出紋理圖像的尺寸要求。如圖1所示,圖1(a)為樣本紋理,圖像中的紅色方塊代表紋理塊;圖1(b)為在樣圖中隨機選取紋理塊置于合成圖中;圖1(c)為在合成圖中把紋理塊置于重疊區(qū)域;圖1(d)為在紋理塊之間的重疊區(qū)域找到最小邊界切割作為新紋理塊的邊界,并按切割路徑縫合紋理塊邊界。
圖1 重疊塊間拼貼
(1)
通過式(2)得到重疊區(qū)域最后一行的各點誤差:
Ei,j=ei,j+min(Ei-1,j,Ei,j-1,Ei+1,j-1)
(2)
對于垂直方向的接縫,先在水平方向上逐行搜尋誤差最小的點,通過誤差曲面的最小垂直路徑的終點即為E中最后一行的最小值,并且它回溯地從點集中找到一條路徑最短的連線,所要尋找的最小誤差邊界切割就是這條連線。而水平的重疊區(qū)域可以采用類似的處理方式。既有垂直而且又有水平的重疊區(qū)域,最小路徑則將在中間交匯,最佳切割路徑被認為是重疊部分中所有最小值的連線。這樣所得到的誤差才能夠最小,拼貼后的邊界區(qū)域在視覺上也將更加光滑。
多階誤差曲面是在給出的像素值之間用N階誤差來定義誤差曲面,將重疊區(qū)域的誤差曲面定義為
(3)
圖2為N取不同值(2,4,8,16)時由樣本圖像所得到的合成結(jié)果,其中,圖2(a)為樣本圖??梢钥吹疆擭取2時(圖2(b))合成結(jié)果中明顯有一些地方產(chǎn)生錯誤拼接,導致在邊界處產(chǎn)生了不連續(xù)的現(xiàn)象,但是隨著N值的增長,得到的合成結(jié)果中邊界不連續(xù)現(xiàn)象得到明顯改善。
圖3為圖2中各合成結(jié)果對應(yīng)的誤差曲面變化分析圖,表1為N取2,4,8,16不同值時誤差曲面值超過3000的個數(shù)統(tǒng)計、標準差以及計算時間表??梢钥吹?,圖3(a)為N=2的誤差曲面圖,經(jīng)統(tǒng)計誤差值超過3000的有47個;圖3(b)為N=4的誤差曲面圖,誤差值超過3000的有28個;圖3(c)為N=8的誤差曲面圖,誤差值超過3000的有22個;圖3(d)為N=16的誤差曲面圖,誤差值超過3000的有11個。通過分析圖中誤差曲面值可以得出:隨著N的增長,誤差曲面的值不斷減小,誤差曲面值越小,在兩塊之間的重疊區(qū)域得到的邊界分割越精確。由誤差曲面值的標準差(Standard Deviation,SD)比較可知,隨著N值的增長,誤差值的SD值越來越小,說明誤差值的離散程度越來越小,同時計算時間上差別不大。
圖2 不同N值的合成結(jié)果
圖3 誤差曲面變化分析
表1 N值變化時的誤差值個數(shù)、標準差與計算時間
由于Image Quilting算法在拼貼塊時容易產(chǎn)生接縫不連續(xù)的現(xiàn)象,這里在按照最小誤差邊界分割路徑完成塊拼貼之后,通過引入Poisson Blending來優(yōu)化處理不連續(xù)區(qū)域,使其得到修復,令合成效果更好。Poisson Blending[14]是梯度域圖像處理方法的一種,利用構(gòu)造泊松方程求解像素最優(yōu)值的方法,在保留源圖像梯度信息的同時,可以很好地融合源圖像與目標圖像的背景。該方法根據(jù)邊界條件求解泊松方程,實現(xiàn)了梯度域上的連續(xù),從而達到邊界處的無縫融合,這可以應(yīng)用到圖像修復中[15]。
引入Poisson Blending來對拼貼塊接縫處進行平滑處理的原理如圖4所示。
圖4 Poisson Blending平滑處理
圖4中,B1和B2是有重疊區(qū)域的兩個紋理塊,圖中重疊區(qū)域切割路徑(如圖中曲線所示)左邊為保留B1的部分像素,重疊區(qū)域切割路徑右邊為貼入B2的部分像素。在切割路徑周圍選取一定寬度的區(qū)域作為目標區(qū)域,即圖中兩條實線之間的區(qū)域,那么重疊區(qū)域所屬B1部分除選作目標區(qū)域外的剩余區(qū)域則為源圖像。如圖4(a)中ΨB為將要與目標塊ΨA融合的選中源圖像塊,?A、?B和?C分別是ΨA、ΨB和ΨC的邊界,如圖中所示邊界。該算法在盡可能多地保留ΨB梯度信息的同時調(diào)整ΨB的顏色信息,以便于即將形成的新圖像塊ΨC(如圖4(b)所示)與圖像剩余部分能很好地融合。
算法過程如下:
首先為了保證邊界的等照度線可以適當?shù)乇3?,令ΨC的邊界像素值初始化等于ΨA的邊界像素值,即
ΨC(x,y)=ΨA(x,y) ?(x,y)∈?B
(4)
接著限制ΨC的圖像梯度與ΨB的圖像梯度相同,與此同時ΨC中其余像素的RGB值(RGB代表紅、綠、藍3個通道的顏色)獨立地調(diào)整為與邊界像素值一致:
▽C(x,y)=▽B(x,y)?(x,y)∈ΨC?C
(5)
▽(x,y)表示像素(x,y)處的圖像梯度。公式(5)求解時用含有i變量的線性方程通過迭代矩陣方法求解(i是ΨC(x,y)中的像素數(shù)量),這里用Jacobi方法求解。引入Poisson Blending后得到的合成結(jié)果如圖5所示。
圖5 Image Quilting合成結(jié)果和引入Poisson Blending
圖5(a)為原算法的合成結(jié)果,圖5(c)為引入poisoon Blending的合成結(jié)果,圖5(b)和5(d)分別為合成結(jié)果圖中產(chǎn)生不連續(xù)的同一區(qū)域在改進前后的對比。
采用改進算法分別對自然紋理以及結(jié)構(gòu)性紋理圖像進行多組合成實驗,如表2所示。將本文算法合成結(jié)果與Image Quilting算法合成結(jié)果進行比較,所有樣例從左到右依次為輸入樣本n(n=1,2,3,4,5)、Image Quilting算法合成結(jié)果、文獻[10]算法合成結(jié)果以及本文算法分別取N=4和N=8時的合成結(jié)果。本文所有實驗結(jié)果都是通過Matlab程序,在2.50 GHz主頻、2 GB內(nèi)存的計算機上完成。
從表2中對樣本1的算法合成結(jié)果可以看出:Image Quilting算法在對幾行擺放的蘋果進行合成時,蘋果下方的隔開物品有幾行產(chǎn)生了明顯的斷開,沒有連續(xù)在一起,合成結(jié)果不理想;文獻[10]中優(yōu)化后算法的合成結(jié)果,也產(chǎn)生了同樣的不連續(xù)現(xiàn)象;取N=4和N=8時的算法合成結(jié)果,可以看到不連續(xù)現(xiàn)象得到改善,合成結(jié)果質(zhì)量提高。
對樣本2的合成結(jié)果可以看到:Image Quilting算法與文獻[10]算法對竹席進行合成過程中同樣出現(xiàn)了拼接錯誤產(chǎn)生模糊和不連續(xù)的現(xiàn)象;而本文算法取N=4和N=8時能得到更好的合成結(jié)果。
對樣本3的合成結(jié)果可以看到:Image Quilting算法和文獻[10]算法合成結(jié)果中有紋理重復等邊界不匹配現(xiàn)象,得到的結(jié)果不夠自然;本文算法對樣本3的合成結(jié)果避免了上述現(xiàn)象產(chǎn)生。
通過大量的實驗結(jié)果可得,改進算法對結(jié)構(gòu)性和自然紋理都能得到更高質(zhì)量的合成結(jié)果。
表3為將上文中改進的紋理合成技術(shù)應(yīng)用到紋理傳輸?shù)慕Y(jié)果,從左到右依次為源圖像n(n=1,2)、目標圖像和經(jīng)過紋理傳輸之后的輸出圖像。第1行是將面包紋理作為源圖像,將黑白人物照片作為目標圖像,經(jīng)紋理傳輸?shù)玫揭粋€用面包紋理渲染出來的人物圖像,該圖像和目標圖像人物照片是相似的,然而照片人物的紋理卻變成了面包。第2行是將米飯紋理作為源樣本紋理,將人物圖像作為目標圖像,應(yīng)用紋理傳輸后得到一個以米飯顆粒為紋理的人物圖像特效。從圖中可以看出傳輸結(jié)果在保持源圖像和目標圖像的圖像特征的基礎(chǔ)上得到了比較好的效果。
提出了一種基于多階誤差曲面的紋理合成改進算法,通過改變誤差曲面公式的階數(shù)來得到更精確的最佳切割路徑,使得拼接時結(jié)構(gòu)信息保持得更好;并且在找到最佳切割路徑完成紋理塊的拼貼后引入Poisson Blending對紋理合成中出現(xiàn)接縫不連續(xù)的現(xiàn)象進行了優(yōu)化,將這種改進的紋理合成技術(shù)應(yīng)用到紋理傳輸中。通過實驗驗證了本文算法對紋理合成的結(jié)果有所改善,能夠適用于結(jié)構(gòu)和自然隨機紋理。今后會在算法的計算性能方面做進一步的優(yōu)化改進,以提高算法的效率。
表2 本文算法合成結(jié)果與Image Quilting算法及文獻[10]算法合成結(jié)果對比
表3 紋理傳輸結(jié)果