幾何變換(數字圖象處理漢化版).ppt_第1頁
幾何變換(數字圖象處理漢化版).ppt_第2頁
幾何變換(數字圖象處理漢化版).ppt_第3頁
幾何變換(數字圖象處理漢化版).ppt_第4頁
幾何變換(數字圖象處理漢化版).ppt_第5頁
已閱讀5頁,還剩43頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、第六章 圖像的幾何變換,有時我們希望改變圖像的形狀、尺寸或者方向以適應我們不同場合的應用需要。 旋轉和縮放都屬于仿射變換。 仿射變換:一種特殊的投影變換。一個非奇異的線性變換(即變換矩陣行列式不為零的線性變換),接一個平移變換構成的組合變換。它能保證變換前后直線的平行性不變。,6.1數值插值 例:我們有四個數值,如果我們希望擴大到八個那么要怎樣做。這八個值一樣要平均分布。也就是說,希望把原來四個點所對應的區域平均的分成八份。設原來的點為 新的點為 假設原來每兩點間的距離為1,則總長度為3,新的分法將把這長度等分為7份,兩點間的距離為3/7,用數來表示如圖6.2 那么原值與新值的關系可以表示成為

2、 可見除了兩個端點外新點沒有與原來的點重合的。,若原來的值都對應一個函數值 那我們要來估計一下新的點對應的函數值,這種估計基于鄰近的原來點的函數值的。 有兩種估計方法:最近鄰插值法、線性插值法 最近鄰插值法是將距離新點最近的原點的函數值賦給新點,作為該點處的函數值。 線性插值是將原相鄰兩點間的函數值用直線連接,然后在這些直線上找到新點所對應的函數值。 例子如圖6.5所示,這樣可求出F,如果,考慮 這點位于 之間,對應的 值為2/7 則,考慮 這點位于 之間,對應的 值為4/7 則,6.2圖像插值,上面提到的方法一樣可以用到圖像中,圖6.6給出了通過插值將一幅4*4的圖像擴充成為8*8的圖像。空

3、心的圓點表示原圖像中的點,實心圓點表示插值運算之后的新點。 圖6.7給出了關于四個相鄰點的圖像插值的過程。設原來點的函數值為 我們可以先沿著頂行計算兩點之間插入的新值 而后再沿著底行計算兩點之間插入的新值 最后沿著產生的新列 計算這兩個新值之間的新值,通過第一節中的公式可以得到,沿著 插值,將前面兩個式子代入第三個式子中,有,這個式子就是雙線性插值的公式。,現在,當給出圖像要縮放的參數(或直接給出行和列的縮放參數)。比如前面的例子。我們有4*4的圖像,希望得到一幅8*8的圖像,那么放大系數是2,或 (2*4)*( 2*4 )。根據第一節的公式有 的關系如下,如果給出了 那么我們可以用最近鄰插值

4、法或雙線性插值法一點一點的計算出來對應的插入的函數值。,當放大系數小于1時,我們做的是抽值運算,這時輸出的圖像大小將小于原圖像,可將圖6.6的實心點看做原圖的像素,而空心點看做抽值后的點。,圖像放大,用最近鄰插值法,最簡單的思想是,如果需要將原圖像放大為k倍,則將原圖像中的每個像素值,填在新圖像中對應的k*k大小的子塊中。,顯然,當k為整數時,可以采用這種簡單的方法。,圖像的成倍放大效果示例,圖像放大,不等比例,設原圖像大小為M*N,放大為k1M*k2N, (k11,k21)。算法步驟如下: 1)設舊圖像是F(i,j), i=1,2,M, j=1,2,N. 新圖像是G(x,y), x=1,2,

5、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這個函數可以實現圖像的縮放。 調用格式為 imresize(A,k,method) A是圖像,k是縮放比例,“method”是插值方式,“nearest”或者“bilinear” 另一種格式為 imresi

6、ze(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),對比上面兩種插值效果能夠看出來,最近鄰法有嚴重的馬賽克效應。 雙線性內插法具有低通濾波性質,使高頻分量受損,圖象輪廓模糊。,6.3一般插值方法,雖然最近鄰法和雙線性插值法看起來不太一樣,但它們都 屬于一般

7、插值的特殊情況。下面來看一下一般插值的想法。 假設我們要求 , ,設 ,定義 一個插入函數R(u)。,圖6.10說明了這式子的由來。 R(u)的中心在 處, 對應著 , 對應著 現在有兩種類型的R函數R0和R1,分別對應著圖6.11中的 結構,并且只定義了 的區間。,函數形式分別為,現在,用R0代替公式中的R,將得到最近鄰法插值的結果。 若用R1代替R,將得到線性插值的結果。,另外還有一種插值方法三次插值 該方法利用三次多項式S(x)來逼近理論上的最佳插值函數 sin(x)/x。其數學表達式為:,定義的區間為 ,用的已知點也多了,用R3代 替R有,這里 位于 之間。,(i-1,j-1),(i-

8、1,j+2),(i+2,j-1),(i+2,j+2),(x,y),u,v,應用到圖像中,其中 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)的灰度值由其周圍十六個點的灰度值加權內插得到。可推導出待求像素的灰度計算式如下: f(x,y)=AB C,head4c=imresize(head,4,bicubic);figure,imshow(head4c),這種方法應用于圖像稱為雙三次差值。 該算法計算量最大,但內插效果最好,精度最高。,6.4利用空域濾波器實現圖像擴大,如果我們僅僅希望得到一個擴大兩倍的圖像,這里

9、有一種 既快速又直接的方法利用線性濾波。通過例子來說明, 一個4*4的圖像,m=magic(4) m = 16 2 3 13 5 11 10 8 9 7 6 12 4 14 15 1,第一步,通過插入0實現變形,主要是在行與行之間和 列與列之間插入全為零的行和列。如果m2是m做0插入 后的矩陣,那么可以將其定義為,function out=zeroint(a) % % m,n=size(a);a2=reshape(a;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

10、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,現在,我們可以分別用兩個空域濾波器來實現最近鄰插值 和雙線性插值。濾波模板分別為,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

11、 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 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.0

12、000 3.0000 2.5000 3.7143 9.4286 13.0000 12.0714 9.6224 5.7041 5.3571 5.9082 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

13、7.5714 13.2857 14.5000 14.0000 6.0000 1.0000,這里用7*7的輸出矩陣是為了確保插值點都位于原圖像的 兩點之中點。,可用如下的矩陣模擬雙三插值,分別用空域濾波的方法將head擴大兩倍,6.5縮小,分為按比例縮小和不按比例縮小兩種。 圖像縮小之后,因為承載的信息量小了,所以畫布可相應縮小。,(a) 按比例縮小 (b) 不按比例縮小,圖像縮小實際上就是對原有的多個數據進行挑選或處理,獲得期望縮小尺寸的數據,并且盡量保持原有的特征不丟失。 最簡單的方法就是等間隔地選取數據。,設原圖像大小為M*N,縮小為k1M*k2N, (k11,k21)。算法步驟如下: 1

14、)設原圖為F(i,j), i=1,2,M, j=1,2,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=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.,在實現方法上可以用imresi

15、ze將其中的參數改成1就可以了。 例子,t=zeros(1024,1024); for 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),圖像的旋轉,圖像的旋轉計算公式如下:,這個計算公式計算出的值為小數,而坐標值為正整數。 這個計算公式計算的結果值所在范圍與原來的值所在的范圍不同。,因此需要前期處理:擴大畫布,取整處理,平移處理 。,圖像旋轉之前,為了避免信息的丟失,畫布的擴大是最重要的。 畫布擴大的原則

16、是:以最小的面積承載全部的畫面信息。,畫布擴大的簡單方法是:根據公式 計算出x和y的最大、最小值,即xmin、xmax和ymin,ymax。 畫布大小為: xmax xmin、 ymax ymin。,旋轉后圖像的畫布大小為:,例,平移量為x=2; y=0。,圖像旋轉的效果示例,圖像旋轉 按照確定畫布時的平移量取整,結論:按照圖像旋轉計算公式獲得的結果與想象中的差異很大。,對原圖的(1,1)像素,x=1,y=1,取整后,該點在新圖的(2,1)上。,對原圖的(1,2)像素,x=1,y=2,取整后,該點在新圖的(2,2)上。,必須進行后處理操作。,圖像旋轉后處理 旋轉后的隱含問題分析,圖像旋轉之后,

17、出現了兩個問題: 1)像素的排列不是完全按照原有的相鄰關系。這是因為相鄰像素之間只能有8個方向(相鄰為45度),如下圖所示。 2)會出現許多的空洞點。,圖像旋轉后處理 解決問題的思路,出現問題的核心是像素之間的連接是不連續的。 相鄰像素的角度是無法改變的,所以只能通過增加分辨率的方法來從整體上解決這個問題。 采用某種填補方法來填充空洞。,圖像旋轉的后處理 插值,最簡單的方法是行插值(列插值)方法。,1)找出當前行的最小和最大的非背景點的坐標,記作:(i,k1)、(i,k2)。,如右圖有: (1,3)、(1,3); (2,1)、(2,4); (3,2)、(3,4); (4,2)、(4,3)。,圖像旋轉的后處理 插值,2)在(k1,k2)范圍內進行插值,插值的方法是:空點的像素值等于前一點的像素值。 3)同樣的操作重復到所有行。,圖像旋轉的后處理 插值效果分析,經過插值處理之后,圖像效果就變得自然,旋轉在MATLAB中通過imrotate實現 結構imrot

溫馨提示

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

評論

0/150

提交評論