《幾何變換(數(shù)字圖象處理漢化).ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《幾何變換(數(shù)字圖象處理漢化).ppt(48頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、第六章 圖像的幾何變換,,有時(shí)我們希望改變圖像的形狀、尺寸或者方向以適應(yīng)我們不同場(chǎng)合的應(yīng)用需要。 旋轉(zhuǎn)和縮放都屬于仿射變換。 仿射變換:一種特殊的投影變換。一個(gè)非奇異的線性變換(即變換矩陣行列式不為零的線性變換),接一個(gè)平移變換構(gòu)成的組合變換。它能保證變換前后直線的平行性不變。,6.1數(shù)值插值 例:我們有四個(gè)數(shù)值,如果我們希望擴(kuò)大到八個(gè)那么要怎樣做。這八個(gè)值一樣要平均分布。也就是說,希望把原來四個(gè)點(diǎn)所對(duì)應(yīng)的區(qū)域平均的分成八份。設(shè)原來的點(diǎn)為 新的點(diǎn)為 假設(shè)原來每兩點(diǎn)間的距離為1,則總長度為3,新的分法將把這長度等分為7份,兩點(diǎn)間的距離為3/7,用數(shù)來表示如圖6.2 那么原值與新值的關(guān)系可以
2、表示成為 可見除了兩個(gè)端點(diǎn)外新點(diǎn)沒有與原來的點(diǎn)重合的。,若原來的值都對(duì)應(yīng)一個(gè)函數(shù)值 那我們要來估計(jì)一下新的點(diǎn)對(duì)應(yīng)的函數(shù)值,這種估計(jì)基于鄰近的原來點(diǎn)的函數(shù)值的。 有兩種估計(jì)方法:最近鄰插值法、線性插值法 最近鄰插值法是將距離新點(diǎn)最近的原點(diǎn)的函數(shù)值賦給新點(diǎn),作為該點(diǎn)處的函數(shù)值。 線性插值是將原相鄰兩點(diǎn)間的函數(shù)值用直線連接,然后在這些直線上找到新點(diǎn)所對(duì)應(yīng)的函數(shù)值。 例子如圖6.5所示,這樣可求出F,如果,考慮 這點(diǎn)位于 之間,對(duì)應(yīng)的 值為2/7 則,考慮 這點(diǎn)位于 之間,對(duì)應(yīng)的 值為4/7 則,6.2圖像插值,上面提到的方法一樣可以用到圖像中,圖6.6給出了通過插值將一幅4*4的圖像
3、擴(kuò)充成為8*8的圖像??招牡膱A點(diǎn)表示原圖像中的點(diǎn),實(shí)心圓點(diǎn)表示插值運(yùn)算之后的新點(diǎn)。 圖6.7給出了關(guān)于四個(gè)相鄰點(diǎn)的圖像插值的過程。設(shè)原來點(diǎn)的函數(shù)值為 我們可以先沿著頂行計(jì)算兩點(diǎn)之間插入的新值 而后再沿著底行計(jì)算兩點(diǎn)之間插入的新值 最后沿著產(chǎn)生的新列 計(jì)算這兩個(gè)新值之間的新值,通過第一節(jié)中的公式可以得到,沿著 插值,將前面兩個(gè)式子代入第三個(gè)式子中,有,這個(gè)式子就是雙線性插值的公式。,現(xiàn)在,當(dāng)給出圖像要縮放的參數(shù)(或直接給出行和列的縮放參數(shù))。比如前面的例子。我們有4*4的圖像,希望得到一幅8*8的圖像,那么放大系數(shù)是2,或 (2*4)*( 2*4 )。根據(jù)第一節(jié)的公式有 的關(guān)系如下,如
4、果給出了 那么我們可以用最近鄰插值法或雙線性插值法一點(diǎn)一點(diǎn)的計(jì)算出來對(duì)應(yīng)的插入的函數(shù)值。,當(dāng)放大系數(shù)小于1時(shí),我們做的是抽值運(yùn)算,這時(shí)輸出的圖像大小將小于原圖像,可將圖6.6的實(shí)心點(diǎn)看做原圖的像素,而空心點(diǎn)看做抽值后的點(diǎn)。,圖像放大,用最近鄰插值法,最簡單的思想是,如果需要將原圖像放大為k倍,則將原圖像中的每個(gè)像素值,填在新圖像中對(duì)應(yīng)的k*k大小的子塊中。,顯然,當(dāng)k為整數(shù)時(shí),可以采用這種簡單的方法。,圖像的成倍放大效果示例,,圖像放大,不等比例,設(shè)原圖像大小為M*N,放大為k1M*k2N, (k11,k21)。算法步驟如下: 1)設(shè)舊圖像是F(i,j), i=1,2,,M, j=1,2
5、,,N. 新圖像是G(x,y), x=1,2,,k1M, y=1,2,,k2N. 2)G(x,y)=F(c1*x,c2*y) c1=1/k1 c2=1/k2,,K1=1.5, k2=1.2,i=1,2, j=1,3. x=1,3, y=1,4. x=1/1.5,2/1.5,3/1.5=i1,i1,i2, y=1/1.2,2/1.2,3/1.2,4/1.2=j1,j2,j3, j3.,,圖像放大,圖像不等比例放大,,MATLAB中有imresize這個(gè)函數(shù)可以實(shí)現(xiàn)圖像的縮放。 調(diào)用格式為 imresize(A,k,method) A是圖像,k是縮放比例,“method”是插值方式,“near
6、est”或者“bilinear” 另一種格式為 imresize(A,m,n,method) m,n是輸出圖像的尺寸,c=imread(cameraman.tif); head=c(33:96,90:153); imshow(head) head4n=imresize(head,4,nearest);figure,imshow(head4n) head4b=imresize(head,4,bilinear);figure,imshow(head4b),對(duì)比上面兩種插值效果能夠看出來,最近鄰法有嚴(yán)重的馬賽克效應(yīng)。 雙線性內(nèi)插法具有低通濾波性質(zhì),使高頻分量受損,圖象輪廓模糊。,6.3一般插值方法,
7、雖然最近鄰法和雙線性插值法看起來不太一樣,但它們都 屬于一般插值的特殊情況。下面來看一下一般插值的想法。 假設(shè)我們要求 , ,設(shè) ,定義 一個(gè)插入函數(shù)R(u)。,圖6.10說明了這式子的由來。 R(u)的中心在 處, 對(duì)應(yīng)著 , 對(duì)應(yīng)著 現(xiàn)在有兩種類型的R函數(shù)R0和R1,分別對(duì)應(yīng)著圖6.11中的 結(jié)構(gòu),并且只定義了 的區(qū)間。,函數(shù)形式分別為,現(xiàn)在,用R0代替公式中的R,將得到最近鄰法插值的結(jié)果。 若用R1代替R,將得到線性插值的結(jié)果。,另外還有一種插值方法三次插值 該方法利用三次多項(xiàng)式S(x)來逼近理論上的最佳插值函數(shù) sin(x)/x。其數(shù)學(xué)表達(dá)式為:,定義
8、的區(qū)間為 ,用的已知點(diǎn)也多了,用R3代 替R有,這里 位于 之間。,,,(i-1,j-1),(i-1,j+2),(i+2,j-1),(i+2,j+2),(x,y),,u,v,,,,,,,,,,,,,,,,,,,,,,,,應(yīng)用到圖像中,其中 A=s(1+v) s(v) s(1-v) s(2-v),,C=s(1+u) s(u) s(1-u) s(2-u)T,待求像素(x,y)的灰度值由其周圍十六個(gè)點(diǎn)的灰度值加權(quán)內(nèi)插得到。可推導(dǎo)出待求像素的灰度計(jì)算式如下: f(x,y)=AB C,head4c=imresize(head,4,bicubic);figure,imshow(head4c),這
9、種方法應(yīng)用于圖像稱為雙三次差值。 該算法計(jì)算量最大,但內(nèi)插效果最好,精度最高。,6.4利用空域?yàn)V波器實(shí)現(xiàn)圖像擴(kuò)大,如果我們僅僅希望得到一個(gè)擴(kuò)大兩倍的圖像,這里有一種 既快速又直接的方法利用線性濾波。通過例子來說明, 一個(gè)4*4的圖像,m=magic(4) m = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1,第一步,通過插入0實(shí)現(xiàn)變形,主要是在行與行之間和 列與列之間插入全為零的行和列。如果m2是m做0插入 后的矩陣,那么可以將其定義為,function out=zeroint(a) % % m,n=size(a);a2=reshape(a;
10、zeros(m,n),m,2*n); out=reshape(a2;zeros(2*n,m),2*n,2*m);,m2=zeroint(m) m2 = 16 0 2 0 3 0 13 0 0 0 0 0 0 0 0 0 5 0 11 0 10 0 8 0 0 0 0 0 0 0 0 0 9 0 7 0 6 0 12 0 0 0 0 0 0 0 0 0 4 0 14 0 15 0 1 0 0 0 0 0 0 0 0 0,現(xiàn)在,我們可以分別用兩個(gè)空域?yàn)V波器來實(shí)現(xiàn)最近鄰插值 和雙線
11、性插值。濾波模板分別為,filter2(1 1 0;1 1 0;0 0 0,m2) ans = 16 16 2 2 3 3 13 13 16 16 2 2 3 3 13 13 5 5 11 11 10 10 8 8 5 5 11 11 10 10 8 8 9 9 7 7 6 6 12 12 9 9 7 7 6 6 12 12 4 4 14 14 15 15 1 1 4 4 14 14 15 15 1 1,m2b=imresize(m,8,8,nearest);m2b m2b = 16 16 2 2 3 3 13
12、 13 16 16 2 2 3 3 13 13 5 5 11 11 10 10 8 8 5 5 11 11 10 10 8 8 9 9 7 7 6 6 12 12 9 9 7 7 6 6 12 12 4 4 14 14 15 15 1 1 4 4 14 14 15 15 1 1,m2b=imresize(m,7,7,bilinear);m2b m2b = 16.0000 11.0000 3.0000 2.5000 3.7143 9.4286 13.0000 12.0714 9.6224 5.7041 5.3571 5.908
13、2 9.1735 11.2143 5.7857 7.4184 10.0306 9.9286 9.4184 8.7653 8.3571 7.0000 7.7143 8.8571 8.5000 8.1429 9.2857 10.0000 8.6429 8.2347 7.5816 7.0714 6.9694 9.5816 11.2143 5.7857 7.8265 11.0918 11.6429 11.2959 7.3776 4.9286 4.0000 7.5714 13.2857 14.5000 14.0000 6.0000 1.0000,這里用7*7的輸出矩陣是為了確保插值點(diǎn)都位于原圖
14、像的 兩點(diǎn)之中點(diǎn)。,可用如下的矩陣模擬雙三插值,分別用空域?yàn)V波的方法將head擴(kuò)大兩倍,6.5縮小,分為按比例縮小和不按比例縮小兩種。 圖像縮小之后,因?yàn)槌休d的信息量小了,所以畫布可相應(yīng)縮小。,,(a) 按比例縮小 (b) 不按比例縮小,圖像縮小實(shí)際上就是對(duì)原有的多個(gè)數(shù)據(jù)進(jìn)行挑選或處理,獲得期望縮小尺寸的數(shù)據(jù),并且盡量保持原有的特征不丟失。 最簡單的方法就是等間隔地選取數(shù)據(jù)。,,設(shè)原圖像大小為M*N,縮小為k1M*k2N, (k1<1,k2<1)。算法步驟如下: 1)設(shè)原圖為F(i,j), i=1,2,,M, j=1,2,,N. 壓縮后圖像是G(x,y), x=1,2,,k1M, y=1
15、,2,,k2N. 2)G(x,y)=F(c1*x,c2*y) 其中,c1=1/k1 c2=1/k2,圖像縮小 例題,,,,K1=0.6, k2=0.74,i=1,6, j=1,6. x=1,6*06=1,4, y=1,6*0.75=1,5. x=1/0.6,2/0.6,3/0.6,4/0.6=1.67,3.33,5,6.67=i2,i3,i5,i6, y=1/0.75,2/0.75,3/0.75,4/0.75,5/0.75=j1,j3,j4,j5,j6.,,,,,,,,,,在實(shí)現(xiàn)方法上可以用imresize將其中的參數(shù)改成<1就可以了。 例子,t=zeros(1024,1024); f
16、or i=1:1024; for j=1:1024; t(i,j)=((255.5)2<(i-512)2+(j-512)2) end end t=t; imshow(t),tr=imresize(t,0.25); figure,imshow(tr),圖像的旋轉(zhuǎn),圖像的旋轉(zhuǎn)計(jì)算公式如下:,這個(gè)計(jì)算公式計(jì)算出的值為小數(shù),而坐標(biāo)值為正整數(shù)。 這個(gè)計(jì)算公式計(jì)算的結(jié)果值所在范圍與原來的值所在的范圍不同。,因此需要前期處理:擴(kuò)大畫布,取整處理,平移處理 。,圖像旋轉(zhuǎn)之前,為了避免信息的丟失,畫布的擴(kuò)大是最重要的。 畫布擴(kuò)大的原則是:以最小的面積承載全部的畫面信息。,畫布擴(kuò)大的簡單方法是:根據(jù)公式
17、計(jì)算出x和y的最大、最小值,即xmin、xmax和ymin,ymax。 畫布大小為: xmax xmin、 ymax ymin。,,,旋轉(zhuǎn)后圖像的畫布大小為:,,例,平移量為x=2; y=0。,圖像旋轉(zhuǎn)的效果示例,,,圖像旋轉(zhuǎn) 按照確定畫布時(shí)的平移量取整,,,,,,,,,,結(jié)論:按照?qǐng)D像旋轉(zhuǎn)計(jì)算公式獲得的結(jié)果與想象中的差異很大。,對(duì)原圖的(1,1)像素,x=1,y=1,取整后,該點(diǎn)在新圖的(2,1)上。,對(duì)原圖的(1,2)像素,x=1,y=2,取整后,該點(diǎn)在新圖的(2,2)上。,,必須進(jìn)行后處理操作。,圖像旋轉(zhuǎn)后處理 旋轉(zhuǎn)后的隱含問題分析,圖像旋轉(zhuǎn)之后,出現(xiàn)了兩個(gè)問題: 1)像素的排
18、列不是完全按照原有的相鄰關(guān)系。這是因?yàn)橄噜徬袼刂g只能有8個(gè)方向(相鄰為45度),如下圖所示。 2)會(huì)出現(xiàn)許多的空洞點(diǎn)。,,,圖像旋轉(zhuǎn)后處理 解決問題的思路,出現(xiàn)問題的核心是像素之間的連接是不連續(xù)的。 相鄰像素的角度是無法改變的,所以只能通過增加分辨率的方法來從整體上解決這個(gè)問題。 采用某種填補(bǔ)方法來填充空洞。,,圖像旋轉(zhuǎn)的后處理 插值,最簡單的方法是行插值(列插值)方法。,1)找出當(dāng)前行的最小和最大的非背景點(diǎn)的坐標(biāo),記作:(i,k1)、(i,k2)。,,,,,,,,,如右圖有: (1,3)、(1,3); (2,1)、(2,4); (3,2)、(3,4); (4,2)、(4,3)
19、。,圖像旋轉(zhuǎn)的后處理 插值,2)在(k1,k2)范圍內(nèi)進(jìn)行插值,插值的方法是:空點(diǎn)的像素值等于前一點(diǎn)的像素值。 3)同樣的操作重復(fù)到所有行。,,圖像旋轉(zhuǎn)的后處理 插值效果分析,經(jīng)過插值處理之后,圖像效果就變得自然,,旋轉(zhuǎn)在MATLAB中通過imrotate實(shí)現(xiàn) 結(jié)構(gòu)imrotate(image,angle,method) 此處的method與imresize中相同,缺省情況下是最近鄰法。,c=imread(cameraman.tif); cr=imrotate(c,60); imshow(cr),crc=imrotate(c,60,bicubic); imshow(crc),crc=imrotate(c,90,bicubic); imshow(crc),crc=imrotate(c,180,bicubic); imshow(crc),crc=imrotate(c,270,bicubic); imshow(crc),