彩色圖象的二維變形
摘 要 該文討論了彩色圖像的變形扭曲技術(shù),并針對二維變形給出了一個(gè)速度、精度均令人滿意的算法。
一、引言
在圖像處理的應(yīng)用中,一般圖像所覆蓋區(qū)域邊界是規(guī)則的矩形。為獲得某種特殊效果,常常需要將圖像變換到具有任意不規(guī)則邊界的二維區(qū)域或映像到三維空間曲面,簡單地說,這就是所謂的圖像變形技術(shù)。本文重點(diǎn)討論了其中的任意二維多邊形區(qū)域的變形問題,并針對彩色圖像給出一個(gè)切實(shí)可行的算法。而三維情況下,則屬于計(jì)算機(jī)圖形學(xué)中的紋理貼面范圍,一般均會(huì)牽涉到立體圖形消隱、明暗處理等技術(shù),比較復(fù)雜,本文未作深入探討。
二、變換原理
本文所要討論的二維變形問題可以形式化說明如下:圖像定義在矩形區(qū)域ABCD之上,源多邊形區(qū)域P=p1p2…pnp1(Pi為頂點(diǎn),i=1,2,…n)完全包含在ABCD內(nèi);變形就是通過變換f,將P上的圖像變換到目的多邊形區(qū)域Q=Q1Q2…QnQ1(Qi為頂點(diǎn),i=1,2,…n),其中,P與Q中的各頂點(diǎn)一一對應(yīng),即有:Qi=f(Pi)(i=1,2…n)。圖1是變形的一個(gè)簡單例子:圖中的源多邊形區(qū)域是矩形區(qū)域ABCD,目的多邊形為任意四邊形EFGH,陰影部分在變換前后的變化清楚地說明了變形的效果。
@@T5S13200.GIF;圖1@@
那么,變換應(yīng)該如何進(jìn)行呢?
一種直接的思路是顯式地求出變換f的表達(dá)式。而f的實(shí)施又分兩種方法;其一為正向變換法,即用f將P內(nèi)的任一像素點(diǎn)變換到Q內(nèi),取原像素值加以顯示。由于P與Q所包含像素點(diǎn)的數(shù)目一般不相同,甚至相差很大,造成Q中的像素點(diǎn)或者未被賦值,形成令人討厭的空洞,或者被多次賦值,浪費(fèi)了時(shí)間,總的效果不理想;其二利用f的反變換f-1,將Q內(nèi)的每一像素點(diǎn)反變換至P內(nèi)的對應(yīng)點(diǎn),一般此點(diǎn)具有實(shí)數(shù)坐標(biāo),則可以通過插值,確定其像素值,這樣,結(jié)果圖像中的每一像素點(diǎn)均被賦值唯一的一次,既提高了精度,又可以避免不必要的賦值,使用效果較好。
上述顯示求變換(或反變換)的表達(dá)式的思路,比較精確,但是這往往牽涉到復(fù)雜的多元方程求解問題,并非輕易可以完成。本文所給出的另外一條思路是:既然P與Q中各頂點(diǎn)一一對應(yīng),組成變換對,即源多邊形P中的任一頂點(diǎn)Pi(i=1,2…n)經(jīng)過變換f,得到目的多邊形Q中的頂點(diǎn)Qi(i=1,2…n),則Qi的反變換點(diǎn)也必為Pi。這樣,對Q內(nèi)(包括邊界)的各像素點(diǎn)A,可以利用各頂點(diǎn)的反變換點(diǎn)的坐標(biāo)值通過雙線性插值技術(shù)近似求出其反變換點(diǎn)B;再用點(diǎn)B的坐標(biāo)值在源圖像中進(jìn)行插值,最終求得結(jié)果像素值,用于顯示A。
第二種方法在保留一定精度的前提下,避免了變換表達(dá)式的顯式求解,實(shí)現(xiàn)簡便。本文基于此思想,設(shè)計(jì)了一個(gè)快速變形算法;另外,算法中還借鑒了多邊形區(qū)域掃描轉(zhuǎn)換的掃描線算法的思路,以實(shí)現(xiàn)對Q內(nèi)各像素點(diǎn)的高效掃描。以下,本文首先介紹了插值技術(shù)及增量計(jì)算技術(shù),然后將給出二維變形算法的詳細(xì)步驟。
三、插值技術(shù)
已知目的多邊形Q各頂點(diǎn)Qi(i=1,2…n)的變換坐標(biāo)值,如何求出Q內(nèi)任一像素的反變換坐標(biāo)呢?雙線性插值法是一種簡單快速的近似方法。具體做法是:先用多邊形頂點(diǎn)Qi(i=1,2…n)的反變換坐標(biāo)線性插值出當(dāng)前掃描線與多邊形各邊的交點(diǎn)的反變換坐標(biāo),然后再用交點(diǎn)的反變換坐標(biāo)線性插值出掃描線位于多邊形內(nèi)的區(qū)段上每一像素處的反變換坐標(biāo)值用于以后的計(jì)算。逐條掃描線處理完畢后,Q內(nèi)每一像素點(diǎn)的反變換坐標(biāo)值也就均求出來了。如圖2中所示,掃描線Y(縱坐標(biāo)=Y)與多邊形相交于點(diǎn)A和B兩點(diǎn),D則是位于掃描線上位于多邊形內(nèi)的區(qū)段AB上的任一點(diǎn)。已知多邊形的3個(gè)頂點(diǎn)Qi(i=1,2,3)的反變換坐標(biāo)為(RXi,RYi);
又令A(yù)、B及D各點(diǎn)的反變換坐標(biāo)分別是(RXa,RYa),(RXb,RYb)和(RXd,RYd)。則RXp可按以下公式求出:
RXa=uRX1 (1-u)RX2 式1
RXb=vRX1 (1-v)RX3式2
RXd=tRXa (1-t)RXb 式3
其中,u=|AQ2|/|Q1Q2|,v=|BQ3|/|Q1Q3|,t=|DB|/|AB|,
稱為插值參數(shù)。
RYd的值亦可完全類似地求出,甚至不必改變插值參
[1] [2] [3]