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