《MATLAB應(yīng)用圖像處理》課件第5章_第1頁
《MATLAB應(yīng)用圖像處理》課件第5章_第2頁
《MATLAB應(yīng)用圖像處理》課件第5章_第3頁
《MATLAB應(yīng)用圖像處理》課件第5章_第4頁
《MATLAB應(yīng)用圖像處理》課件第5章_第5頁
已閱讀5頁,還剩189頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

5.1概論

5.2灰度插值5.3幾何變換

5.4空間變換的MATLAB實現(xiàn)5.5空間變換演示習(xí)題

第5章MATLAB圖像空間變換

5.1概論

5.1.1空間變換描述圖像的空間變換(又稱幾何變換)是對圖像數(shù)據(jù)進行幾何運算。幾何運算與點運算不同,它可改變圖像中物體(像素)之間的空間關(guān)系。這種運算可以看成是各像素點在圖像內(nèi)移動的過程??杀磉_為

(5.1)其中,g(x,y)表示輸出圖像,(x,y)表示變換前的坐標(biāo),(x',y')表示變換后的坐標(biāo),a(x,y)和b(x,y)分別表示圖像在x-y坐標(biāo)系中空間變換函數(shù)。若這兩個變換函數(shù)是連續(xù)的,則將保持圖像中的連通關(guān)系??臻g變換通常叫做橡皮片變換,這是由于它可以看做是在一片橡皮片上打印圖像,然后根據(jù)預(yù)先確定的規(guī)則拉伸這個橡皮片的過程。從圖像類型來分,圖像的空間變換有二維平面圖像的空間變換和三維圖像的空間變換以及由三維向二維平面投影變換等。從變換的性質(zhì)分,圖像的空間變換有平移、比例縮放、旋轉(zhuǎn)、反射和錯切等基本變換,透視變換等復(fù)合變換,以及插值運算等。5.1.2主要問題圖像的空間變換過程需要有兩個獨立的算法:空間變換和灰度級插值算法,如圖5.1所示。首先,需要一算法來完成圖像的空間變換。該算法描述了每個像素從其初始位置移動到終止位置的過程。通過這一計算,可以知道變換后像素的位置。同時,還需要一個灰度級插值算法來處理空間變換后圖像中像素灰度級的賦值問題。圖5.1圖像空間變換示意圖幾何運算中灰度級插值是必不可少的部分,因為圖像一般用整數(shù)位置處的像素來定義,而幾何變換中,輸出圖像g(x,y)的灰度值一般由處在非整數(shù)坐標(biāo)上的輸入圖像f?(x,y)的灰度值來確定,即產(chǎn)生“空穴”,即輸出圖像中的一個像素的位置一般對應(yīng)于輸入圖像中的幾個像素之間的位置,即輸入圖像中的一個像素往往被映射到輸出圖像中的幾個像素之間的位置。所以,在進行圖像的空間變換時,除了要進行空間變換外,還要進行灰度級插值。5.1.3空間變換的應(yīng)用

1.幾何校正(calibration)空間變換一個重要的應(yīng)用是消除由于相機固有缺陷引起的圖像的幾何畸變。當(dāng)需要從數(shù)字圖像中得到定量的空間測量數(shù)據(jù)時,幾何校正被證明是十分重要的。例如從衛(wèi)星上或者飛機側(cè)視雷達上得到的圖像,都有相當(dāng)嚴(yán)重的二級核變形,這些圖像必須經(jīng)過幾何校正,然后才能對其內(nèi)容做出解釋。一些圖像系統(tǒng)使用非矩形的像素坐標(biāo),例如,極坐標(biāo)、柱坐標(biāo)、球面坐標(biāo)等,用普通的顯示設(shè)備觀察這些圖像時,必須先對它們進行校正,也就是說,將其轉(zhuǎn)換為矩形像素坐標(biāo)。例如,在油(水)井套管缺陷識別中,有時需要將極坐標(biāo)系中的內(nèi)窺鏡圖像轉(zhuǎn)換為直角坐標(biāo)系中的圖像,然后進行分析與處理。有時機器人的魚眼透鏡拍攝的一幅嚴(yán)重變形的圖像,也可以設(shè)計一個適當(dāng)?shù)目臻g變換將其校正到矩形坐標(biāo)系中,這樣,就可用立體視覺測距技術(shù)對機器人周圍的物體進行三維空間定位。

2.地圖投影空間變換的另一個主要應(yīng)用是地圖繪制中的圖像投影。例如,在利用從宇宙飛船上傳回來的圖像拼成地球、月球以及行星的航片鑲嵌地圖時,可以利用空間變換技術(shù)。宇宙飛船攝像機圖像的矩形邊框被投影到行星的表面上,形成一個有四條曲線邊的“腳印”。行星的球狀表面則被投影到一個平面上以得到一張地圖?!澳_印”也被投影到地圖上,形成一個再次變形的四邊形圖??臻g變換可以把宇宙飛船上的攝像機所拍攝的圖像轉(zhuǎn)換成地圖所要求的形式。多幅圖像按這種方法處理,可組合成行星的航片鑲嵌地圖,這就要求為一個給定的圖像投影確定控制點。為了產(chǎn)生輸入和輸出控制柵格,程序必須能設(shè)置宇宙飛船觀測幾何參數(shù),以及所選用的制圖投影方法的參數(shù)。用于太空項目的軟件是通過從輸出圖像到輸入圖像的反向計算步驟來解決這一問題的。指定的制圖投影技術(shù)定義了輸出圖像的點與行星表面上的點之間的關(guān)系。宇宙飛船的觀測幾何決定了行星表面上的點與拍攝圖像中像素位置之間的空間關(guān)系。程序在輸出圖像上覆蓋一個矩形控制網(wǎng)格,并根據(jù)制圖投影和宇宙飛船觀測幾何將它映射回去覆蓋到輸入圖像上。

3.圖像配準(zhǔn)圖像配準(zhǔn)是將不同時間、不同波段、不同遙感器系統(tǒng)所獲得的同一地區(qū)的圖像(數(shù)據(jù)),經(jīng)幾何變換使同名像點在位置上和方位上完全疊合的操作。圖像配準(zhǔn)(或圖像匹配)是評價兩幅或多幅圖像的相似性以確定同名點的過程。圖像配準(zhǔn)和幾何配準(zhǔn)屬于同一個意義。圖像配準(zhǔn)算法就是設(shè)法建立兩幅圖像之間的對應(yīng)關(guān)系,確定相應(yīng)幾何變換參數(shù),對兩幅圖像中的一幅進行幾何變換的方法。幾何校正注重的是對數(shù)據(jù)本身的處理,目的是對數(shù)據(jù)進行一種真實性的還原;而幾何配準(zhǔn)注重的是圖和圖(數(shù)據(jù))之間的一種幾何關(guān)系,其目的是與參考數(shù)據(jù)達成一致,不論參考數(shù)據(jù)的坐標(biāo)是否標(biāo)準(zhǔn),是否正確。幾何校正和幾何配準(zhǔn)最本質(zhì)的差異在于參考的標(biāo)準(zhǔn)。另外,幾何校正更像前期數(shù)據(jù)處理,幾何配準(zhǔn)更像后期處理。

4.圖像變形(Morphing)在電影和電視工業(yè)中,越來越多的特技是通過幾何變換來實現(xiàn)的。變形(Morphing)就是一種可以使一個物體逐漸轉(zhuǎn)變成另一個物體的技術(shù)。假設(shè)有兩幅圖像,我們希望利用這兩幅圖像得到一系列電影畫面,畫面系列將第一個場景的物體逐步向第二個場景中的物體變換,比如將一張貓臉轉(zhuǎn)變?yōu)橐粡埨匣⒛?。在漸隱(dissolve)技術(shù)中,第一幅圖像逐漸“淡出”,第二幅則逐漸“淡入”,這種方法很少產(chǎn)生逼真的視覺轉(zhuǎn)換。若在漸隱的同時使用變形技術(shù),讓物體上的點從它們的起始位置逐漸移向終止位置,則可產(chǎn)生更為生動的效果。在變形的過程中,最初的和最終的圖像都要進行卷繞使它們的控制點能映射到介于初始位置和終止位置之間位置上,從而產(chǎn)生兩個圖像序列。圖像中的顯著特征逐漸從初始位置移向最終位置,同時在兩個圖像序列之間進行漸隱,以完成變形運算。變形處理也可在兩個電影序列之間進行。這時物體在運動,因而對應(yīng)的控制點必須在每一幀圖像中標(biāo)出。最為常用的辦法是僅為小部分幀指定控制點,其余的幀用空間插值求解得到。對于序列中的每一幀,在兩幅對應(yīng)圖像之間要進行卷繞變換,以使它們的控制點對準(zhǔn)。一對控制點所映射的位置從靠近初始圖像位置的地方逐漸移動向終點圖像位置。在實際應(yīng)用中,常常是背景保持不變,而只是對場景中的一個對象物體進行變形。這時感興趣的對象要在暗背景下拍攝。然后,將經(jīng)過變形處理后的對象序列插入到包含有適當(dāng)背景的場景中。5.2灰度插值從輸入圖像和變換信息得到變換后圖像各像素點的灰度值的過程叫做灰度插值?;叶炔逯狄话惴譃橄蚯坝成浞ê拖蚝笥成浞?,下面分別對這兩種方法進行簡要介紹。

(1)向前映射法。將圖像的空間變換想象成將輸入圖像的灰度值一個一個地轉(zhuǎn)移到輸出圖像中,如果一個輸入像素被映射到四個輸出像素之間的位置,則其灰度值就按插值算法在四個輸出像素之間進行分配。這種方法稱為像素移交(pixelcarry-over)或向前映射法。圖5.2給出了該方法的示意圖。圖5.2向前映射法示意圖

(2)向后映射法。另一種方法能更有效地達到目的,即像素填充(pixelfilling)向后映射算法,如圖5.3所示。在該算法中,輸出像素逐次逐個地映射到輸入圖像中,以便確定其灰度級。如果一個輸出像素被映射到四個輸入像素之間,則其灰度值由這四個像素的灰度插值決定,向后映射算法是向前映射算法的逆變換。圖5.3向后映射法示意圖由于許多輸入像素可能映射到輸出圖像的邊界之外,故向前映射變換計算中存在浪費。而且,每個輸出像素的灰度值可能要由許多輸入像素的灰度值來決定,因而要涉及到多次計算。如果空間中包括縮小變換,則會有四個以上的輸入像素來決定一個輸出像素的灰度值。如果包括放大變換,則一些輸出像素可能會被漏掉。而向后映射算法是逐像素、逐行地產(chǎn)生輸出圖像,每個像素的灰度值由最多四個像素參與的插值唯一決定。當(dāng)然,輸入圖像必須允許按空間變換所定義的方法隨機訪問。該方法有些復(fù)雜,但在實際應(yīng)用中更為切實可行。在向前映射算法中,每個輸出圖像的灰度要經(jīng)過多次運算;而在向后映射算法中,每個輸出圖像的灰度只要經(jīng)過一次運算。實際應(yīng)用中,經(jīng)常采用向后映射法。下面討論向后映射方案中根據(jù)四個輸入像素的灰度值確定輸出像素的灰度值的各種插值方法,包括最接近點方法、雙線性插值方法和高次插值方法等。5.2.1最接近點最為簡單的插值方法就是所謂的零階插值或者稱為最接近點插值。即令輸出像素的灰度值等于距它所映射位置最近的輸入像素的灰度值。最接近點插值方法計算簡單,在許多情況下,其結(jié)果也是可以接受的。然而,當(dāng)圖像中包含像素之間灰度級有變化的細微結(jié)構(gòu)時,最接近點方法會在圖像中產(chǎn)生人工的痕跡,比如會出現(xiàn)鋸齒形的邊緣,從而影響輸出圖像的品質(zhì)。5.2.2雙線性插值要使變換后像素的灰度值能夠更精確地反映原始圖像的信息,必須提高像素插值的階數(shù)。平面一階插值(雙線性插值)與零階插值相比,插值處理效果更令人滿意。由于通過四點確定一個平面函數(shù)屬于過約束問題,所以在一個矩形柵格上進行的一階插值需要用到雙線性函數(shù)。圖5.4為矩形柵格上的雙線性插值示意圖。圖5.4雙線性插值示意圖令f?(x,y)在單位正方形頂點的值已知,假設(shè)我們希望通過插值得到正方形內(nèi)任意點

(x,y)的灰度值f?(x,y),可以令雙線性方程為

f?(x,y)?=?ax?+?by?+?cxy?+?d(5.2)將相鄰四點的值代入上式求出系數(shù)即可得到一個雙線性插值函數(shù)。但這種方法計算繁瑣,另有一個簡單的算法可以產(chǎn)生一個雙線性插值函數(shù),并使之與四個頂點的f?(x,y)值擬合。首先,我們對上端的兩個頂點(0,0)、(1,0)進行線性插值,可得f?(x,0)?=?f?(0,0)?+?x[f?(1,0)?-?f?(0,0)]

(5.3)類似地,對底端兩個頂點(0,1)、(1,1)進行線性插值:f?(x,1)?=?f?(0,1)?+?x[f?(1,1)?-?f?(0,1)]

(5.4)最后作垂直方向的線性插值:f?(x,y)?=?f?(x,0)?+?y[f?(x,1)?-?f?(x,0)]

(5.5)將式(5.3)和式(5.4)代入上式可得:

(5.6)當(dāng)使用雙線性等式對相鄰的四個像素進行插值時,所得表面在鄰域邊界處是吻合的,但斜率卻不吻合。這樣,一個由分段雙線性插值得到的表面是連續(xù)的,但其導(dǎo)數(shù)在鄰域邊界處通常是不連續(xù)的。5.2.3高次插值雙線性插值簡單易行,且效果也較佳。但雙線性插值可能會使圖像的細節(jié)產(chǎn)生退化,尤其是在進行放大處理時,這種情況將更為明顯。在其他應(yīng)用中,雙線性插值的斜率不連續(xù)會產(chǎn)生不希望的效果。這兩種情況都可通過高階插值得到修正。高階插值需要更多相鄰輸入像素點,當(dāng)然這會增加計算量。如果系數(shù)的個數(shù)與像素點的個數(shù)相等,則插值表面可與所有點吻合。如果點的個數(shù)多于系數(shù)的個數(shù),則可使用曲面擬合或最小誤差方法。用于高階插值的函數(shù)有三次樣條,Legendre中心函數(shù)和sin(ax)/a函數(shù)。高階插值常用卷積來實現(xiàn),這部分內(nèi)容請讀者參考書后所附的參考文獻。5.3幾何變換5.3.1齊次坐標(biāo)將點P0(x0,y0)平行移動到P(x,y),其中x方向的平移量為Δx,y方向的平移量為Δy。顯然,在原始坐標(biāo)系中點P(x,y)的坐標(biāo)為

(5.7)這個變換用矩陣的形式可以表示為

(5.8)為了更方便地表達上式,可以通過引入點的3?×?2階變換矩陣T,則式(5.9)可表示為[xy]=?[x0y01]T(5.9)其中

(5.10)此矩陣的第一、二行構(gòu)成單位矩陣,第三行元素為平移常量。在式(5.9)左邊坐標(biāo)行矩陣[x

y]中引入第三個元素,增加一個附加坐標(biāo),將其擴展為1?×?3的行矩陣[x

y1],這樣用三維空間點(x

y1)表示二維空間點(x,y)。此矩陣的第一、二行構(gòu)成單位矩陣,第三行元素為平移常量。在式(5.9)左邊坐標(biāo)行矩陣[x

y]中引入第三個元素,增加一個附加坐標(biāo),將其擴展為1?×?3的行矩陣[x

y1],這樣用三維空間點(x

y1)表示二維空間點(x,y)。式(5.9)的右邊點坐標(biāo)行矩陣[x0y01]沒變,通??蓪??×?2階變換矩陣T擴充為3?×?3階矩陣,由此式(5.9)也可表示為[xy1]?=?[x0y01]T(5.11)其中

(5.12)從上式可以看出,引入附加坐標(biāo)后,擴充了矩陣的第三列,并不會影響變換結(jié)果。這種用n?+?1維向量表示n維向量的方法稱為齊次坐標(biāo)表示法。二維圖像中的點坐標(biāo)(x,y)通常表示成齊次坐標(biāo)(Hx,Hy,H),其中H表示非零的任意實數(shù),當(dāng)H?=?1時,則(x,y,1)就稱為點(x,y)的規(guī)范化齊次坐標(biāo)。顯然規(guī)范化齊次坐標(biāo)的前兩個數(shù)是相應(yīng)二維點的坐標(biāo),沒有變化,僅在原坐標(biāo)中增加了H?=?1的附加坐標(biāo)。由點的齊次坐標(biāo)(Hx,Hy,H)求點的規(guī)范化齊次坐標(biāo)(x,y,1),可按如下公式進行:

(5.13)

齊次坐標(biāo)在2D圖像幾何變換中的另一個應(yīng)用是:例如,某點S(60000,40000)在16位計算機上表示,則大于32767的最大坐標(biāo)值,需要進行復(fù)雜的操作,但如果把S的坐標(biāo)形式變成(Hx,Hy,H)形式的齊次坐標(biāo),那么情況就不同了。在齊次坐標(biāo)系中,設(shè)H?=?1/2,則(60000,40000)的齊次坐標(biāo)為(1/2x,1/2y,1/2),那么所要表示的點變?yōu)?30000,20000,1/2),此點顯然在16位計算機上二進制數(shù)所能表示的范圍之內(nèi)。采用齊次坐標(biāo),將變換矩陣改成3×3階的形式,便可實現(xiàn)所有2D圖像幾何變換的基本變換?;咀儞Q的一般過程是:將n×2階的二維點集矩陣表示成齊次坐標(biāo)的形式,然后乘以相應(yīng)的變換矩陣即可完成,具體的表達形式為變換后的點集矩陣?=?變換前的點集矩陣×變換矩陣T

(5.14)(圖像上各點的新齊次坐標(biāo))(圖像上各點的原齊次坐標(biāo))引入齊次坐標(biāo)后,表示2D圖像幾何變換的3×3矩陣的功能就完善了,可以用它完成2D圖像的各種幾何變換。為討論3×3階變換矩陣中各元素在變換中的作用,設(shè)幾何變換的3×3矩陣的一般形式為(5.15)

3×3階矩陣T可以分成四個子矩陣。其中,這一子矩陣可使圖像實現(xiàn)恒等、比例、反射(或鏡像)、錯切和旋轉(zhuǎn)變換。[l

m]這一列矩陣可以使圖像實現(xiàn)平移變換。[p

q]'這一列矩陣可以使圖像實現(xiàn)透視變換,但當(dāng)p?=?0,q?=?0時它無透視作用。[s]這一元素可以使圖像實現(xiàn)全比例變換。5.3.2平移變換圖5.5為圖像平移前后示意圖。圖5.5圖像平移上節(jié)以點的平移為例引入并討論了齊次坐標(biāo),平移變換以3×3矩陣形式給出的變換矩陣為

(5.16)對變換矩陣求逆,可以得到上式的逆變換:[x0y01]?=?[xy1]

(5.17)這樣,平移后圖像上的每一點都可以在原圖像中找到對應(yīng)的點。例如,對于新圖中的(0,0)像素,代入上面的方程組,可以求出對應(yīng)原圖中的像素為(-Δx,-Δy)。如果Δx或Δy大于0,則點(-Δx,-Δy)不在原圖像中。對于不在原圖像中的點,可以直接將它的像素值統(tǒng)一設(shè)置為0或者255(對于灰度圖就是黑色或白色)。同樣,若輸出圖像有像素點不在原圖像中,也就說明原圖像中有點被移出顯示區(qū)域。如果不想丟失被移出的部分圖像,可以將新生成的圖像寬度擴大|Δx|,高度擴大|Δy|。圖5.6為待平移變換的圖像,圖5.7為變換后的圖像,變換前后圖像的大小相同。圖5.6平移前的圖像圖5.7平移后的圖像5.3.3圖像旋轉(zhuǎn)變換一般圖像的旋轉(zhuǎn)是以圖像的中心為原點的,這里先討論簡單的繞坐標(biāo)原點的旋轉(zhuǎn)變換,將繞圖像的中心的旋轉(zhuǎn)作為簡單變換的復(fù)合。圖像的旋轉(zhuǎn)變換是圖像的位置變換,將圖像上的所有像素都旋轉(zhuǎn)一個相同的角度。同樣,圖像的旋轉(zhuǎn)變換也可以用矩陣變換表示。設(shè)點P0(x0,y0)旋轉(zhuǎn)θ角后的對應(yīng)點為P(x,y),如圖5.8所示。那么,旋轉(zhuǎn)前后點P0(x0,y0)、P(x,y)的坐標(biāo)分別為(5.18)圖5.8圖像旋轉(zhuǎn)θ角旋轉(zhuǎn)后的點P(x,y)可以表達成旋轉(zhuǎn)前點坐標(biāo)和旋轉(zhuǎn)角度的組合:

(5.19)上式寫成齊次矩陣形式為[x

y1]?=?[x0y01]

(5.20)其逆運算為[x0y01]?=?[x

y1]

(5.21)旋轉(zhuǎn)后,圖像的大小一般會改變。和圖像平移一樣,在圖像旋轉(zhuǎn)變換中既可以把轉(zhuǎn)出顯示區(qū)域的圖像截去,也可以擴大圖像范圍以顯示所有的圖像,如圖5.9、圖5.10所示。

圖5.9旋轉(zhuǎn)前的圖像圖5.10旋轉(zhuǎn)θ后的圖像(擴大圖像、轉(zhuǎn)出部分被截)5.3.4圖像縮放圖像比例縮放是指將給定的圖像在x軸方向按比例縮放fx倍,在y軸方向按比例縮放fy倍,從而獲得一幅新的圖像。如果fx?=?fy,即在x軸方向和y軸方向縮放的比例相同,稱這樣的比例縮放為圖像的全比例縮放。如果fx?≠?fy,圖像的比例縮放會改變原始圖像的像素間的相對位置,產(chǎn)生幾何畸變。設(shè)原圖像中的點P0(x0,y0)在將圖像進行比例縮放后,在新圖像中的對應(yīng)點為P(x,y),則P0(x0,y0)和P(x,y)之間的對應(yīng)關(guān)系如圖5.11所示。圖5.11圖像比例縮放比例縮放前后兩點P0(x0,y0)、P(x,y)之間的關(guān)系用矩陣形式可以表示為

[x

y1]?=?[x0y01]

(5.22)共逆運算為

[x0y01]?=?[x

y1]

(5.23)5.3.5圖像剪切圖像剪切的變換公式為[x

y1]?=?[x0y01]

(5.24)其中shx、shy分別為沿著x、y軸的剪切參數(shù),上述的剪切變換相當(dāng)于一個橫向剪切與一個縱向剪切的復(fù)合,剪切變換又稱錯切變換。5.3.6復(fù)合變換以上討論了各種簡單的變換,這些變換統(tǒng)稱為仿射變換(除投影變換外)。這些簡單的變換可以組合成復(fù)雜的變換。圖像的復(fù)合變換是指對給定的圖像連續(xù)施行若干次平移、鏡像、比例、旋轉(zhuǎn)等基本變換后所完成的變換,圖像的復(fù)合變換又叫級聯(lián)變換。利用齊次坐標(biāo),對給定的圖像按一定順序依次連續(xù)施行若干次基本變換,從數(shù)學(xué)上可以證明,復(fù)合變換的矩陣等于基本變換的矩陣按順序依次相乘得到的組合矩陣。設(shè)對給定的圖像依次進行了基本變換F1,F(xiàn)2,…,F(xiàn)N,它們的變換矩陣分別為T1,T2,…,TN,則圖像復(fù)合變換矩陣T可以表示為T=T1,…,TN-1TN。

1.復(fù)合平移設(shè)將某個圖像先平移到新的位置P1(x1,y1)后,再平移到P2(x2,y2)的位置,則復(fù)合平移矩陣為T=T1T2?=(5.25)由此可見,盡管一些順序的平移用到矩陣的乘法,但最后得到的平移矩陣,只是將平移常量作了加法運算。

2.復(fù)合比例對某個圖像連續(xù)進行比例變換,最后合成的復(fù)合比例矩陣,只要對比例常量作乘法運算即可。復(fù)合比例矩陣如下:T=T1T2?=?

(5.26)

3.復(fù)合旋轉(zhuǎn)類似地,對某個圖像連續(xù)進行旋轉(zhuǎn)變換,最后合成的旋轉(zhuǎn)變換矩陣中的角度常量等于兩次旋轉(zhuǎn)角度的和,復(fù)合旋轉(zhuǎn)變換矩陣如下:T=T1T2=(5.27)

4.繞圖形中心旋轉(zhuǎn)目標(biāo)圖形以(x,y)為軸心順時針旋轉(zhuǎn)θ弧度,相當(dāng)于兩次平移變換與一次原點旋轉(zhuǎn)變換的復(fù)合,變換矩陣為T?=?(5.28)上述均為相對原點(圖像中央)作比例、旋轉(zhuǎn)等變換,如果要相對某一個參考點作變換,則要使用含有不同種基本變換的圖像復(fù)合變換。不同的復(fù)合變換,其變換過程不同,但是無論它的變換過程多么復(fù)雜,都可以分解成一系列基本變換。5.3.7投影變換透視變換是指利用透視中心、像點、目標(biāo)點三點共線的條件,按透視旋轉(zhuǎn)定律使承影面(透視面)繞跡線(透視軸)旋轉(zhuǎn)某一角度,破壞原有的投影光線束,仍能保持承影面上投影幾何圖形不變的變換。把三維物體或?qū)ο筠D(zhuǎn)變?yōu)槎S圖形表示的過程稱為投影變換。對于透視投影,一束平行于投影面的平行線的投影可保持平行,而不平行于投影面的平行線的投影會聚集到一個點,這個點稱為滅點(VanishingPoint),滅點可以看做無限遠處的一點在投影面上的投影。透視投影的滅點可以有無限多個,不同方向的平行線在投影面上能形成不同的滅點,坐標(biāo)軸方向的平行線在投影面上形成的滅點又稱作主滅點。因為有x,y和z三個坐標(biāo)軸,所以主滅點最多有3個。透視投影是按主滅點的個數(shù)來分類的,即按投影面與坐標(biāo)軸的夾角來分類的,可分為一點透視、兩點透視和三點透視,如圖5.12所示。圖5.12透視變換一點透視只有一個主滅點,即投影面與一個坐標(biāo)軸正交,與另外兩個坐標(biāo)軸平行,如圖5.12(a)所示。進行一點透視投影變換,要很好地考慮圖面布局,以避免三維形體或?qū)ο蟮钠矫嬗蚍e聚成直線或直線積聚成點而影響直觀性。具體地說,就是要考慮下列幾點:

(1)三維形體或?qū)ο笈c畫面(投影面)的相對位置;(2)視距,即視點與畫面的距離;(3)視點的高度。由此,假設(shè)視點在坐標(biāo)原點,z坐標(biāo)軸方向與觀察方向一致,三維形體或?qū)ο笊夏骋稽cP(x,y,z),經(jīng)一點透視變換后在投影面(觀察平面)UO'V上的對應(yīng)點為P'(x',y',z'),投影面與z軸垂直,且與視點的距離為d,z軸過投影面窗口的中心,窗口是邊長為2S的正方形,如圖5.13所示。根據(jù)相似三角形對應(yīng)邊成比例的關(guān)系,有(5.29)圖5.13一點透視變換原理圖利用齊次坐標(biāo),將該過程寫成變換矩陣形式:(5.30)一般地,視點不在原點。對于投影平面是任意平面的情況,一點透視變換的矩陣也可以用一個3?×?3矩陣表示:(5.31)其中,aij為指定的變換系數(shù),且有:(5.32)將式(5.31)展開,有:(5.33)5.3.8高階變換以上討論了簡單的全局空間變換,在這些變換中,各處像素的變換可以用全局一致的變換模型來表達。下面討論全局變換不一致的復(fù)雜空間變換。齊次坐標(biāo)為確定各種基本變換和復(fù)合變換公式提供了一個簡單的方法。然而在一些圖像處理的應(yīng)用中,所需的空間變換都相當(dāng)復(fù)雜,無法用簡便的數(shù)學(xué)式表達,此外,所需空間變換數(shù)據(jù)經(jīng)常要從實際圖像的測量中獲得,因此希望從這些測量結(jié)果獲得幾何變換的參數(shù)。這一方面的應(yīng)用實例就是對幾何畸變的攝像機拍攝圖像的幾何校正。首先,將一個矩形柵格目標(biāo)數(shù)字化并顯示出來,因為攝像機中有幾何變形,所顯示的圖案不會是準(zhǔn)確的矩形,所求空間變換應(yīng)能使其柵格圖案再次被復(fù)原到準(zhǔn)確的矩形,從而修正攝像機產(chǎn)生的畸變。采用同樣的空間變換可用于校正同一攝像機生成的數(shù)字化圖像(這里假定畸變與景象無關(guān)),從而得到不畸變的圖像。根據(jù)變換的定義區(qū)域可以將利用這些控制點進行圖像校正(變形)的方法分成兩類:一種為全局的多項式卷繞,另一種為局部的控制柵格插值。

(1)多項式卷繞。為空間變換a(x,y)和b(x,y)找到一個函數(shù)表達式,多項式通常用來作為空間變換的一般形式,其參數(shù)的選擇應(yīng)能夠使多項式及其位移量吻合,這種方法稱為多項式卷繞(polynomialwarping)。如果多項式的項數(shù)與控制點數(shù)相同,則可以設(shè)計出能夠準(zhǔn)確地映射到指定的控制點的變換,然后通過解線性方程求得多項式的系數(shù),一般能夠用矩陣求逆得到所需的結(jié)果。然而當(dāng)控制點的個數(shù)多于多項式的項數(shù)時,則必須采用擬合來決定多項式的系數(shù),這就要求空間變換后的圖像整體上與指定的控制點進行最佳擬合,但是,每個控制點不一定嚴(yán)格吻合。圖5.14(a)為用于確定多項式卷繞的測試靶示意圖,圖(b)為變形后的靶點分布圖,利用圖(a)、圖(b)可以確定一多項式卷繞變換。圖(d)為利用靶點分布確定出的多項式卷繞從變換后的圖像(c)恢復(fù)出來的圖像。

圖5.14圖像多項式卷繞假設(shè)某個測試靶上有十個測試點,可以用如下的二維三階函數(shù)擬合這些點:將測試點的數(shù)值代入可以得到如下方程組,以求得x坐標(biāo)的多項式卷繞系數(shù):(5.34)(5.35)

(2)控制柵格插值。在許多情況下,多項式卷繞不能夠適應(yīng)復(fù)雜變換的要求,因此,一些幾何運算程序?qū)D像分成許多多邊形區(qū)域,并對每個區(qū)域使用雙線性映射函數(shù),用戶指定有控制點組成的輸入控制柵格,這些控制點在輸入圖像中形成四邊形的頂點。輸入控制柵格映射到輸出圖像中水平放置的矩形柵格上,四邊形頂點(輸入控制點)直接映射到相應(yīng)的矩形頂點上,而輸入四邊形內(nèi)部的點則被映射到對應(yīng)輸出矩形內(nèi)部的點上,圖5.15為控制柵格差值原理示意圖。圖5.15圖像控制柵格插值原理示意圖雙線性插值通常用于控制柵格插值,這是由于其計算簡單,且可以產(chǎn)生一個能夠保持連續(xù)性和連通性的光滑映射。雙線性映射的一般表達為(5.36)因為總共有八個已知的連接點,通過求解由這些點組建的方程可以解出上式中的八個系數(shù)。這些系數(shù)構(gòu)成了用于變換四邊形區(qū)域內(nèi)所有像素的幾何失真模型,該四邊形是由導(dǎo)出系數(shù)的連接點定義的。通常,需要足夠多的連接點以覆蓋整個圖像,每個四邊形都有描述本區(qū)域變換的系數(shù)。連接點根據(jù)其應(yīng)用可用多種不同技術(shù)建立。例如,一些圖像生成系統(tǒng)有物理的、人為的缺陷,鑲嵌在圖像傳感器上。這產(chǎn)生了一個已知點集(叫做網(wǎng)狀標(biāo)志),在圖像被獲取時直接鑲在圖像上??梢允褂眠@些點集,對圖像進行校正。反過來,我們可以任意定義需要的變形,從而對圖像進行變形處理。圖5.16給出了這一效果。圖5.16圖像控制柵格插值示意圖5.4空間變換的MATLAB實現(xiàn)

5.4.1縮放變換函數(shù)imresize函數(shù)imresize對圖像進行縮放變換,圖像可以是灰度、索引或者真彩色的。該函數(shù)有如下幾種調(diào)用方法。

(1)指定縮放系數(shù)。

B=imresize(A,scale)

[Ynewmap]=imresize(X,map,scale)%處理索引圖像其中,A為待縮放的圖像,scale為縮放系數(shù)。若待縮放的圖像為索引類型的,則應(yīng)該給出其X和map矩陣,此時輸出參數(shù)為待改變的圖像及其縮放系數(shù)??s放系數(shù)大于1表示放大圖像,小于1大于0表示縮小圖像。例如,下面的代碼將圖像放大為原來的1.25倍:

I=imread('circuit.tif');

J=imresize(I,1.25);

imshow(I)

figure,imshow(J)運行結(jié)果如圖5.17所示。圖5.17圖像縮放演示實例

(2)指定變換后圖像大小。

B=imresize(A,[mrowsncols])對于非索引圖像,可以直接指定輸出圖像的大小。大小由參數(shù)[mrowsncols]給定,其中mrows和ncols分別指定輸出圖像的行數(shù)和列數(shù)。如果圖像指定輸出的比例與原始圖像的不一致,則圖像會發(fā)生變形(拉長或壓扁)。如果其中一個方向的參數(shù)大小設(shè)定為NaN,則MATLAB會根據(jù)原始圖形的比例自動計算這一長度。例如,指定圖像的輸出大小為100?×?150,代碼如下:

I=imread('circuit.tif');

J=imresize(I,[100150]);

imshow(I)

figure,imshow(J)

(3)指定灰度插值方法。?MATLAB調(diào)用imresize對圖像進行縮放時可以指定像素插值方法,具體的調(diào)用方法如下:[...]=imresize(...,method)插值方法的指定有三個形式:插值方法、系統(tǒng)核函數(shù)和用戶自定義核函數(shù)。其中插值方法見表5.1。缺省狀態(tài)下,imresize使用雙三次插值方法。表5.1繪制插值參數(shù)選項表5.2系?統(tǒng)?核?函?數(shù)用戶自定義核函數(shù)由一個有兩個元素的元胞數(shù)組{f,w}構(gòu)成,f為用戶自定義的插值函數(shù)句柄,w為核函數(shù)的寬度。f?(x)在區(qū)域[-w/2,w/2]外的值為零。當(dāng)縮小圖像的時候,由于輸出圖像的大小小于原始的,故可能失去原始圖像的部分像素點信息,這一現(xiàn)象叫做混疊(Aliasing)。混疊線性常表現(xiàn)為stair-step模式(特別是對于高對比度的圖像),或是ripple-effect模式。5.4.2旋轉(zhuǎn)變換函數(shù)imrotate函數(shù)imrotate對圖像進行繞其中心的旋轉(zhuǎn)變換,其基本調(diào)用方法如下:

B=imrotate(A,angle)其中A為待變換圖像,angle為旋轉(zhuǎn)的角度(單位為度)。如果旋轉(zhuǎn)角度大于零,則圖像逆時針旋轉(zhuǎn),否則順時針旋轉(zhuǎn)。與圖像縮放函數(shù)imresize類似,imrotate也可以指定像素插值方法,此時調(diào)用方法為

B=imrotate(A,angle,method)其中method的取值與imresize的一致。圖像旋轉(zhuǎn)過程中圖像的大小會發(fā)生變化,原始圖像的大小不一定能容納下變換后的圖像。缺省狀態(tài)下,imrotate函數(shù)會產(chǎn)生一個足夠大的圖像以將原始圖像都包容進去。位于原始圖像外的像素點的值設(shè)定為0,顯示出來就是純黑。另外,用戶也可以通過'crop'參數(shù)指定輸出圖像的大小與輸入的一致。此時的調(diào)用方法如下:

B=imrotate(A,angle,method,bbox)其中,bbox指定輸出圖像的大小參數(shù),缺省為'loose'。bbox可以為'crop',表明對輸出圖像進行裁剪,使其大小與輸入圖像的一致;也可以為'loose',表明產(chǎn)生一個足夠大的圖像以將原始圖像都包容進去。例如,采用雙線性插值方法將輸入圖像逆時針旋轉(zhuǎn)35°:

I=imread('circuit.tif');

J=imrotate(I,35,'bilinear');

imshow(I)

figure,imshow(J)運行結(jié)果如圖5.18所示。圖5.18圖像旋轉(zhuǎn)演示實例5.4.3tformfwd和tforminv

tformfwd函數(shù)用于對指定的點施加指定的向前空間變換;tforminv函數(shù)用于對指定的點施加指定的向后空間變換。[X,Y]=tformfwd(T,U,V)對指定的二維空間中的點(U,V)施加由T定義的向前空間變換。其中X為變換后點的X坐標(biāo)向量,Y為變換后的點的X坐標(biāo)向量,U為變換點的X坐標(biāo)向量,V為Y坐標(biāo)向量,T是TFORM結(jié)構(gòu)體,可以由maketform、floptform或cp2tform函數(shù)創(chuàng)建。U和V可以有任意行數(shù),但行數(shù)必須相等。X和Y的行數(shù)與U和V的相等。

[U,V]=tforminv(T,X,Y)對指定的二維空間中的點(X,Y)施加由T定義的向后空間變換。例如:

u=[06-2]';v=[035]';

x=[-104]';y=[-1-104]';

tform=maketform('affine',[uv],[xy]);

[xm,ym]=tformfwd(tform,u,v)

[um,vm]=tforminv(tform,x,y)由于變換tform由輸入點(u,v)和輸出點(x,y)定義,所以(u,v)的向前變換(xm,ym)等于(x,y),(x,y)的向后變換(um,vm)等于(u,v)。此外,imtransform、findbounds和tformarray等函數(shù)內(nèi)部調(diào)用tformfwd和tforminv,進行確定輸出圖像的范圍的前置變換,或?qū)⑤敵龅南袼?矩陣位置反饋到輸入位置??梢允褂胻formfwd和tforminv函數(shù)來瀏覽幾何變換的效果(通過將這些變換施加到點和線上,并且繪制出變換結(jié)果)。以上的函數(shù)能夠處理單個點或圖像。5.4.4變換結(jié)構(gòu)體構(gòu)造函數(shù)maketform

maketform函數(shù)產(chǎn)生空間變換參數(shù)結(jié)構(gòu)體數(shù)據(jù)TFORM函數(shù)。maketform有兩類輸入?yún)?shù),第一參數(shù)指定待定義的變換類型,包括仿射變換、透視變換、用戶自定義變換等幾類;第二類參數(shù)為變換規(guī)則,有兩種方法可定義這一參數(shù):以相對應(yīng)的變換矩陣為輸入?yún)?shù)或以對應(yīng)點變換前后坐標(biāo)為輸入?yún)?shù)。不管采用哪種方法,都能夠產(chǎn)生變作為maketform函數(shù)參數(shù)輸入?yún)?shù)相應(yīng)的TFORM結(jié)構(gòu)數(shù)據(jù)。

1.變換類型本章的第2節(jié)對諸如平移、旋轉(zhuǎn)縮放、映射等變換做了詳細的介紹,同時也介紹了簡單變換的復(fù)合變換。MATLAB支持的幾類變換見表5.3。表5.3MATLAB支持空間變換類型

2.變換參數(shù)根據(jù)前面的討論,任何變換都可以用變換前后的點進行描述,同時對于仿射和投影變換還可以用變換矩陣進行描述。MATLAB對這種描述變換過程的方式都支持,也就是說輸入變換參數(shù)有兩類方法:

(1)用變換矩陣作為maketform函數(shù)的輸入?yún)?shù)。對于二維仿射變換,可以用一個3?×?3變換矩陣進行描述。仿射變換矩陣的最后一列為[001]',用戶可僅僅指定其中的3?×?2子矩陣,此時imtransform函數(shù)自動產(chǎn)生第三列數(shù)據(jù)。這種方法可以用于任意維的空間變換矩陣。表5.4中給出了各種仿射變換的變換矩陣,任意變換都可以單獨使用,或組合使用以實現(xiàn)組合變換。表5.4仿射變換的變換矩陣

(2)使用對應(yīng)點集作為maketform函數(shù)的輸入?yún)?shù)??梢酝ㄟ^點列作為maketform函數(shù)的參數(shù)構(gòu)建變換矩陣。對于仿射變換,必須選擇輸入和輸出圖像上三個不共線的對應(yīng)點作為輸入?yún)?shù);對于投影變換,必須選擇四個點。這種方法僅僅能夠用于創(chuàng)建二維空間變換參數(shù)。3.創(chuàng)建TFORM結(jié)構(gòu)數(shù)據(jù)

T=maketform('affine',A)以變換矩陣為輸入?yún)?shù)創(chuàng)建一個描述N維的空間仿射變換的TFORM結(jié)構(gòu)數(shù)據(jù)。A為一個非奇異實矩陣,A的大小為(N?+?1)?×?(N?+?1)或(N?+?1)?×?N(此時A的第N?+?1列必須為[zeros(N,1);1])。根據(jù)以上對二維空間變換理論的討論可知,矩陣A實際上定義了向前變換。

X?=?tformfwd(U,T),其中U是一個描述原始圖像任意像素點位置的1?×?N向量,返回量X是一個描述變換后圖像任意像素點位置的1?×?N向量,且有X?=U*A(1:N,1:N)+A(N?+?1,1:N)。同時,T包含了描述向前變換和向后(逆)變換的矩陣和執(zhí)行相應(yīng)變換的函數(shù)。

T=maketform('affine',U,X)

以對應(yīng)點集為輸入?yún)?shù)創(chuàng)建一個描述二維空間仿射變換的TFORM結(jié)構(gòu)數(shù)據(jù)。其中U是一個描述原始圖像任意三個非共線像素點位置的3?×?2向量,X是一個描述變換后圖像對應(yīng)的三個像素點位置的3?×?2向量,此三點不共線。U、X的每一行代表一個點。

T=maketform('projective',A)以變換矩陣為輸入?yún)?shù)創(chuàng)建一個描述N維的空間透視變換的TFORM結(jié)構(gòu)數(shù)據(jù)。A為一個非奇異實矩陣,A大小為(N?+?1)?×?(N?+?1),且A中元素(N?+?1,N?+?1)必須不等于零。矩陣A實際上定義了向前變換,X?=?tformfwd(U,T),其中U是一個描述原始圖像任意像素點位置的1?×?N向量,返回量X是一個描述變換后圖像任意像素點位置的1?×?N向量,且有X=W(1:N)/W(N?+?1),其中W=[U1]*A。同時,T同時包含了描述向前變換和向后(逆)變換的矩陣和執(zhí)行相應(yīng)變換的函數(shù)。

T=maketform('projective',U,X)以對應(yīng)點集為輸入?yún)?shù)創(chuàng)建一個描述二維的空間透視變換的TFORM結(jié)構(gòu)數(shù)據(jù)。其中U是一個描述原始圖像任意四個像素點位置的4?×?2向量,X是一個描述變換后圖像對應(yīng)的四個像素點位置的4?×?2向量,要求輸入點和輸出點中的任意三點都不共線。U、X的每一行代表一個點。

T=maketform('composite',T1,T2,...,TL)

T=maketform('composite',[T1T2...TL])以變換TFORM結(jié)構(gòu)數(shù)據(jù)為輸入?yún)?shù)創(chuàng)建一個描述復(fù)合變換過程的TFORM變換參數(shù)。輸入的變換矩陣Ti的順序與實際需要變換的順序一致。假設(shè)復(fù)合變化由三個簡單變換組成,則實際的變換為tformfwd(U,T)=tformfwd(tformfwd(tformfwd(U,T3),T2),T1)。這里要求Ti的維數(shù)要一致。且要求都必須定義了向前和向后變換函數(shù)。利用maketform創(chuàng)建自定義變換的方法的請參見MATLAB的在線幫助或者幫助手冊。

4.?TFORM結(jié)構(gòu)組成例如,選擇三個點,以用maketform函數(shù)產(chǎn)生相應(yīng)的變換矩陣。這三個點分別為輸入和輸出圖像上對應(yīng)的三個頂點,代碼運行結(jié)果如下:

in_points=[1111;2111;2121]

out_points=[5151;6151;6161]

tform2=maketform('affine',in_points,out_points)

tform2=

ndims_in:2

ndims_out:2

forward_fcn:@fwd_affine

inverse_fcn:@inv_affine

tdata:[1x1struct]其中ndim_in和ndims_out分別表示變換前后空間的維數(shù);forward_fcn為向前變換的函數(shù)句柄;inverse_fcn為向后變換的函數(shù)句柄;tdata為一個結(jié)構(gòu)體數(shù)據(jù),包含兩個域,T和Tinv,分別對應(yīng)向前變換矩陣和向后(逆)變換矩陣。除了調(diào)用maketform函數(shù)創(chuàng)建TFORM結(jié)構(gòu)數(shù)據(jù)外,也可以調(diào)用cp2tform函數(shù)創(chuàng)建TFORM結(jié)構(gòu)數(shù)據(jù),這一部分請參見圖像匹配相關(guān)內(nèi)容。5.4.5逆變換結(jié)構(gòu)體產(chǎn)生函數(shù)fliptform

TFLIP=fliptform(T)將TFORM結(jié)構(gòu)體中的向前變換和向后變化對調(diào)。若有如下代碼:

T=maketform('affine',[500;.520;001]);

T2=fliptform(T)則下列兩個變化是等效的:

x=tformfwd([-37],T)

x=tforminv([-37],T2)5.4.6二維變換函數(shù)imtransform

imtransform函數(shù)對圖像進行二維空間變換。調(diào)用時必須指定待變換圖像、描述變換參數(shù)的TFORM結(jié)構(gòu)體數(shù)據(jù)以及其它可選參數(shù)。

(1)調(diào)用方法一:

B=imtransform(A,TFORM)對圖像A作由TFORM定義的空間變換,TFORM結(jié)構(gòu)體數(shù)據(jù)可以由maketform產(chǎn)生,也可以由cp2tform產(chǎn)生。如果圖像為RGB模式的真彩色圖像,其灰度矩陣為三維的,則imtransform函數(shù)自動對每一維施加同樣的灰度插值計算。調(diào)用過程中,imtransform函數(shù)自動移動輸出圖像的中心以使輸出圖像能夠顯示更多的內(nèi)容。所以這種調(diào)用方法將此函數(shù)應(yīng)用于圖像配準(zhǔn)時,所得到的結(jié)果往往不是自己希望得到的,可以借助于“XData”和“YData”參數(shù)使圖像處于所需的位置。

(2)調(diào)用方法二:

B=imtransform(A,TFORM,INTERP)其中,INTERP為指定的插值方法,其取值如表5.5所示。表中雙線性插值方法為缺省值。INTERP參數(shù)可為由makeresampler函數(shù)返回的RESAMPLER的結(jié)構(gòu)體數(shù)據(jù),通過這個參數(shù)可以對圖像變換實施更精細的控制。表5.5interp插值方法

(3)調(diào)用方法三:

[B,XDATA,YDATA]=imtransform(...)輸入?yún)?shù)同第一、第二種方法。但這種調(diào)用方法通過輸出參數(shù)XDATA和YDATA返回輸出圖像空間中輸出圖像的位置參數(shù)。XDATA和YDATA都是二維向量,XDATA給出輸出圖像的第一列和最后一列的x坐標(biāo)值,YDATA給出輸出圖像的第一行和最后一行的y坐標(biāo)值。一般來講,imtransform函數(shù)自動計算XDATA和YDATA的值,以使輸出圖像B包含A整個變換后的信息。這種默認的行為可以通過輸出參數(shù)進行修改,具體的方法參見調(diào)用方法四。

(4)調(diào)用方法四:

[B,XDATA,YDATA]=imtransform(...,param1,val1,param2,val2,...)通過param1、val1、param2、val2等輸入?yún)?shù)對來對空間變換作精細的控制。其它的輸入?yún)?shù)與調(diào)用方法一、二相同,輸出參數(shù)與第三種方法相同。表5.6給出了可選輸入?yún)?shù)變量名稱以及意義。表5.6imtransform可選參數(shù)表輸出變量XDATA和YDATA不一定等于輸入變量'XData'和'YData'。這源于兩方面的原因:行數(shù)和列數(shù)的取整;指定的輸入?yún)?shù)'XData'、'YData'、'XYScale'和'Size'之間不一致,存在沖突。但是不管在哪種情況下,輸出變量XDATA和YDATA的第一個元素都等于輸入變量'XData'和'YData'的第一個元素,僅僅是第二個元素之間存在差異。為了使讀者更清楚地理解變量,下面舉例說明:例5.1灰度圖像對于灰度圖像,指定顏色值為一標(biāo)量。對于上述例子的第五步中,可以如下調(diào)用以設(shè)置輸出顏色和區(qū)域。

cb_fill=imtransform(cb,tform_translate,...

'XData',[1(size(cb,2)+xform(3,1))],...'YData',[1(size(cb,1)+xform(3,2))],...'FillValues',.7);figure,imshow(cb_fill)輸出結(jié)果如圖5.19所示。圖5.19調(diào)用imtransform對灰度圖像進行變換例5.2彩色圖像對于彩色圖像,可以使用標(biāo)量或者1?×?3的向量。如果指定值為標(biāo)量,則imtransform函數(shù)使用這個數(shù)值作為RGB三個顏色的數(shù)值,以創(chuàng)建一個1?×?3的向量;如果為向量,則imtransform函數(shù)認為這個數(shù)值為RGB的顏色值。

rgb=imread('onion.png');

xform=[100

010

40401]

tform_translate=maketform('affine',xform);cb_rgb=imtransform(rgb,tform_translate,...'XData',[1(size(rgb,2)+xform(3,1))],...'YData',[1(size(rgb,1)+xform(3,2))],...'FillValues',[187;192;57]);figure,imshow(cb_rgb)圖5.20為上述代碼對圖像平移變換的結(jié)果。圖5.20調(diào)用imtransform對彩色圖像進行變換如何設(shè)置多幅RGB圖像變換時的填充顏色值呢?例如,現(xiàn)在需要變換10幅彩色圖像,圖像用一個4-D的數(shù)組表示,大小為200×200×3×10,指定填充顏色值有集中方法:(1)設(shè)定一個標(biāo)量作為填充值;(2)設(shè)定一個1×3的數(shù)組作為RGB顏色值;(3)制定一個3×10的矩陣,作為各個圖像RGB填充色。5.5空間變換演示

5.5.1MATLAB空間變換的基本步驟除了簡單的幾何變換可以直接調(diào)用簡單變換函數(shù)(imcrop、imresize、imrotate等)外,復(fù)雜的二維變換也可調(diào)用imtransform函數(shù)來實現(xiàn),高維變換調(diào)用tformarray函數(shù)來實現(xiàn)。MATLAB中調(diào)用這些函數(shù)來實現(xiàn)空間變換的一般步驟如下:

(1)定義空間旋轉(zhuǎn)參數(shù),參見本章中的定義變換數(shù)據(jù)一節(jié)。

(2)創(chuàng)建名為TFORM的變換結(jié)構(gòu)數(shù)據(jù),這一數(shù)據(jù)定義你所期望進行的變換類型。TFORM數(shù)據(jù)是包含變換參數(shù)的MATLAB結(jié)構(gòu)類型的數(shù)據(jù)。通過這一參數(shù),用戶可以指定translation、scaling、rotation、shearing、projectivetransformations、customtransformations等仿射變換的參數(shù)。調(diào)用maketform函數(shù)產(chǎn)生TFORM結(jié)構(gòu)。具體參見創(chuàng)建TFORM結(jié)構(gòu)一節(jié)。另外,用戶也可以調(diào)用第6章圖像匹配中的cp2tform函數(shù)創(chuàng)建此結(jié)構(gòu)。

(3)調(diào)用imtransform函數(shù)執(zhí)行變換,此函數(shù)的輸入?yún)?shù)為待變換的圖像和TFORM結(jié)構(gòu)數(shù)據(jù)。5.5.2圖像的基本空間變換例如,以剪貼板圖像為變換對象,對其分別施加TFORM結(jié)構(gòu)體所能夠支持的各類空間變換,以使讀者明白各類空間變換的意義以及MATLAB圖像處理工具包中的實現(xiàn)方法和步驟。待變換圖像為用checkboard函數(shù)產(chǎn)生的剪貼板圖像如圖5.21所示。

I=checkerboard(10,2);

imshow(I);圖5.21checkboard生成的原始圖像

1.非反射相似變換圖像經(jīng)過非反射相似變換后平行線仍然是平行線,直線仍然是直線。此類變換包括旋轉(zhuǎn)、縮放和平移,變換中形狀和角度保持不變。本小節(jié)以旋轉(zhuǎn)和平移為例對此變換進行演示。演示中以變換矩陣的形式給出maketform的第二類參數(shù)。

(1)旋轉(zhuǎn)、縮放變換。將圖像繞其中心旋轉(zhuǎn)40°,x、y方向都放大為原來的1.2倍。scale=1.2; %縮放比例angle=40*pi/180; %旋轉(zhuǎn)角度tx=0; %x平移量ty=0; %y平移量sc=scale*cos(angle);ss=scale*sin(angle);T1=[sc–ss0;sssc0;txty1];非反射相似變換是仿射變換的子集,可以調(diào)用maketform函數(shù)創(chuàng)建TFORM結(jié)構(gòu),并調(diào)用imtransform函數(shù)對圖像進行變換:

t_nonsim1=maketform('affine',T1);

I_nonreflective_similarity1=

imtransform(I,t_nonsim1,'FillValues',.3);

figure,imshow(I_nonreflective_similarity1);運行結(jié)果如圖5.22所示。圖5.22線性仿射變換之旋轉(zhuǎn)縮放

(2)平移變換。平移變換由于僅僅是圖像的位置發(fā)生了變換,用圖像顯示對細節(jié)表示不是很明確,本小節(jié)借助于某些參數(shù)將這些細節(jié)表現(xiàn)出來,以使讀者進一步了解平移變換。與旋轉(zhuǎn)和縮放變換類似,使用3?×?3矩陣來指定變換參數(shù):

tx=40;%x平移量

ty=40;%y平移量

T2=[100;

010;

txty??1]與縮放和旋轉(zhuǎn)例子類似,可以調(diào)用maketform函數(shù)創(chuàng)建TFORM結(jié)構(gòu),并調(diào)用imtransform函數(shù)對圖像進行變換:tform_translate=maketform('affine',T2);

[cb_transxdataydata]=imtransform(cb,tform_translate);例子中xdata和ydata返回輸出圖像坐標(biāo)空間中輸出圖像的位置。xdata和ydata分別包含x、y向的像素位置。由于原點的位置為(1,1),故輸出的位置為(41,41),見圖5.23。圖5.23平移變換參數(shù)說明調(diào)用imshow函數(shù)顯示變換后的圖像,如圖5.24所示。figure,imshow(cb_trans)圖5.24非反射變換二(平移變換)對于平移變換的圖像,變化前后一致,如何理解呢?可以通過查看imtransform函數(shù)返回的xdata和ydata數(shù)據(jù)來考察空間變換。輸入圖像的左上點的位置變換前為(1,1),變換后為(41,41),右下點數(shù)據(jù)從(80,80)變?yōu)?120,120)。這就表明圖像進行了指定的平移變換。變換前后的顯示圖像沒有變化的原因在于imtransform函數(shù)總是將圖像裁剪到適當(dāng)?shù)拇笮∫阅軌蚯∏扇菁{整個圖像??梢酝ㄟ^指定輸出圖像大小和輸出空間大小的參數(shù)來改變這一缺省設(shè)置,從而將圖像的平移變換效果表現(xiàn)出來:

cb_trans2=imtransform(cb,tform_translate,...

'XData',[1(size(cb,2)+xform(3,1))],...

'YData',[1(size(cb,1)+xform(3,2))]);

figure,imshow(cb_trans2)代碼中XData和YData指定輸出坐標(biāo)系統(tǒng)中包含圖像的空間大小。上述代碼運行結(jié)果如圖5.25所示。圖5.25平移變換利用XData和YData參數(shù)處理后顯示結(jié)果

2.相似變換經(jīng)過相似變換后,相似三角形變換成相似三角形。非反射相似變換是相似變換的子集。相似變換的變換模型與非反射相似變換的一致,為[uv]=[xy1]T,其中T是由四個參數(shù)外加可選的放射決定的。

scale=1.5; %縮放參數(shù)

angle=10*pi/180; %旋轉(zhuǎn)角度

tx=0; %?x平移

ty=0; %?y平移

a=-1;

sc=scale*cos(angle);

ss=scale*sin(angle);

T=[sc-ss0;

a*ssa*sc0;

txty1];調(diào)用maketform函數(shù)創(chuàng)建TFORM結(jié)構(gòu),并調(diào)用imtransform函數(shù)對圖像進行變換:t_sim=maketform('affine',T);[I_similarity,xdata,ydata]=imtransform(I,t_sim,'FillValues',.3);與平移變換的例子類似,這里采用imtransform函數(shù)返回參數(shù)xdata和ydata來顯示圖像的平移變換效果,如圖5.26所示。figure,imshow(I_similarity,'XData',xdata,'YData',ydata)圖5.26相似變換

3.仿射變換在仿射變換中,x/y方向的縮放和剪切可以相互獨立。同時可以有平移、鏡面對稱和旋轉(zhuǎn)變換。平行線經(jīng)變換后仍然是平行線,直線變化后仍然是直線。設(shè)變換矩陣為

T=[?1?0.30;

1??10;

0??01];調(diào)用maketform函數(shù)創(chuàng)建TFORM結(jié)構(gòu),并調(diào)用imtransform函數(shù)對圖像進行變換:

t_aff=maketform('affine',T);

I_affine=imtransform(I,t_aff,'FillValues',.3);

figure,imshow(I_affine)

title('仿射變換')運行結(jié)果如圖5.27所示。圖5.27仿射變換

4.投影變換經(jīng)投影變換后,四邊形仍然是四邊形,直線仍然是直線。仿射變換是投影變換的子集。對于投影變換,其變換方程為

u?=?up/vpv?=?vp/wp(5.37)

T是3×3矩陣,其中幾個元素都可以改變以指定不同的變化矩陣:(5.38)上述矩陣等同于下面兩方程:(5.39)變換例子為T=[100.008;110.01;00

1];調(diào)用maketform函數(shù)創(chuàng)建TFORM結(jié)構(gòu),并調(diào)用imtransform函數(shù)對圖像進行變換:t_proj=maketform('projective',T);I_projective=imtransform(I,t_proj,'FillValues',.3);figure,imshow(I_projective)title('projective')結(jié)果如圖5.28所示。圖5.28投影變換5.多項式變換(多項式卷繞)這里我們以二階多項式為例,說明多項式卷繞的過程。包含x和y項的二階卷繞多項式模型為

[u,v]?=?[1x

y

xy

x2y2]T(5.40)

u和v都是x和y的二階多項式,每個二階變換多項式有六項,可以指定六個參數(shù)。變換矩陣T為6?×?2的。首先調(diào)用cp2form函數(shù)產(chǎn)生TFORM結(jié)構(gòu)體數(shù)據(jù):

xybase=reshape(randn(12,1),6,2);t_poly=cp2tform(xybase,xybase,'polynomial',2);T=[0 0;?1 0;?0 1;?0.001 0;?0.02 0;?0.01 0];t_poly.tdata=T;對圖像施加多項式卷繞變換(如圖5.29所示):I_polynomial=imtransform(I,t_poly,'FillValues',.3);figure,imshow(I_polynomial)title('多項式卷繞')圖5.29多項式卷繞

6.分段線性變換在分段線性變換中,仿射變換獨立地應(yīng)用到圖像各個獨立的三角形區(qū)域。例如,下面的代碼顯示將保持圖形的左上角的三角形,而將右下角的三角形進行拉伸。首先調(diào)用cp2form函數(shù)產(chǎn)生TFORM結(jié)構(gòu)體數(shù)據(jù):

xy_input=[1010;1030;3030;3010];

xy_base=[1010;1030;4035;3010];

t_piecewise_linear=

cp2tform(xy_input,xy_base,'piecewiselinear');對圖像施加分段線性變換并顯示變換結(jié)果(如圖5.30所示):

I_piecewise_linear=imtransform(I,t_piecewise_linear);

figure,imshow(I_piecewise_linear)title('分段線性變換')圖5.30分段線性變換

7.?sinusoidal變換調(diào)用相關(guān)函數(shù)產(chǎn)生描述變換的結(jié)構(gòu)體數(shù)據(jù):

[nrows,ncols]=size(I);

[xi,yi]=meshgrid(1:ncols,1:nrows);

a1=5;%sinusoids變換幅度

a2=3;

imid=round(size(I,2)/2); %中間元素坐標(biāo)

u=xi+a1*sin(pi*xi/imid);

v=yi-a2*sin(pi*yi/imid);

tmap_B=cat(3,u,v);

resamp=makeresampler('linear','fill');調(diào)用tformarray對圖像施加指定的變換,并顯示變換結(jié)果:

I_sinusoid=tformarray(I,[],resamp,[21],[12],[],tmap_B,.3);

figure,imshow(I_sinusoid)

title('sinusoid變換')圖5.31為圖像經(jīng)sinusoid變換的結(jié)果。圖5.31sinusoid變換

8.?Barrel變換

Barrel扭曲將圖形從中心向外進行放射狀的變形,外面的變形大于內(nèi)部的變形,結(jié)果呈現(xiàn)為凸面。首先產(chǎn)生描述變換的結(jié)構(gòu)體數(shù)據(jù):

%徑向barrel扭曲

xt=xi(:)-imid;

yt=yi(:)-imid;

[theta,r]=cart2pol(xt,yt);

a=.001;%三次項幅度

s=r+a*r.^3;

[ut,vt]=pol2cart(theta,s);

u=reshape(ut,size(xi))+imid;

v=reshape(vt,size(yi))+imid;tmap_B=cat(3,u,v);調(diào)用tformarray對圖像施加指定的變換,并顯示變換結(jié)果(如圖5.32所示):

I_barrel=tformarray(I,[],resamp,[21],[12],[],tmap_B,.3);figure,imshow(I_barrel)

title('barrel變換')圖5.32barrel變換

9.?pincushion變換大頭針扭曲是barrel扭曲的逆變換,這是由于三次項系數(shù)為負。變換仍然是外部的變形大于內(nèi)部的,但是結(jié)果呈現(xiàn)為凹面。首先產(chǎn)生描述變換的結(jié)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論