幾何變換(數字圖象處理漢化版).ppt
《幾何變換(數字圖象處理漢化版).ppt》由會員分享,可在線閱讀,更多相關《幾何變換(數字圖象處理漢化版).ppt(48頁珍藏版)》請在裝配圖網上搜索。
第六章圖像的幾何變換,,有時我們希望改變圖像的形狀、尺寸或者方向以適應我們不同場合的應用需要。旋轉和縮放都屬于仿射變換。仿射變換:一種特殊的投影變換。一個非奇異的線性變換(即變換矩陣行列式不為零的線性變換),接一個平移變換構成的組合變換。它能保證變換前后直線的平行性不變。,6.1數值插值例:我們有四個數值,如果我們希望擴大到八個那么要怎樣做。這八個值一樣要平均分布。也就是說,希望把原來四個點所對應的區(qū)域平均的分成八份。設原來的點為新的點為假設原來每兩點間的距離為1,則總長度為3,新的分法將把這長度等分為7份,兩點間的距離為3/7,用數來表示如圖6.2那么原值與新值的關系可以表示成為可見除了兩個端點外新點沒有與原來的點重合的。,若原來的值都對應一個函數值那我們要來估計一下新的點對應的函數值,這種估計基于鄰近的原來點的函數值的。有兩種估計方法:最近鄰插值法、線性插值法最近鄰插值法是將距離新點最近的原點的函數值賦給新點,作為該點處的函數值。線性插值是將原相鄰兩點間的函數值用直線連接,然后在這些直線上找到新點所對應的函數值。例子如圖6.5所示,這樣可求出F,如果,考慮這點位于之間,對應的值為2/7則,考慮這點位于之間,對應的值為4/7則,6.2圖像插值,上面提到的方法一樣可以用到圖像中,圖6.6給出了通過插值將一幅4*4的圖像擴充成為8*8的圖像??招牡膱A點表示原圖像中的點,實心圓點表示插值運算之后的新點。圖6.7給出了關于四個相鄰點的圖像插值的過程。設原來點的函數值為我們可以先沿著頂行計算兩點之間插入的新值而后再沿著底行計算兩點之間插入的新值最后沿著產生的新列計算這兩個新值之間的新值,通過第一節(jié)中的公式可以得到,沿著插值,將前面兩個式子代入第三個式子中,有,這個式子就是雙線性插值的公式。,現在,當給出圖像要縮放的參數(或直接給出行和列的縮放參數)。比如前面的例子。我們有4*4的圖像,希望得到一幅8*8的圖像,那么放大系數是2,或(2*4)*(2*4)。根據第一節(jié)的公式有的關系如下,如果給出了那么我們可以用最近鄰插值法或雙線性插值法一點一點的計算出來對應的插入的函數值。,當放大系數小于1時,我們做的是抽值運算,這時輸出的圖像大小將小于原圖像,可將圖6.6的實心點看做原圖的像素,而空心點看做抽值后的點。,圖像放大,用最近鄰插值法,最簡單的思想是,如果需要將原圖像放大為k倍,則將原圖像中的每個像素值,填在新圖像中對應的k*k大小的子塊中。,顯然,當k為整數時,可以采用這種簡單的方法。,圖像的成倍放大效果示例,,圖像放大,不等比例,設原圖像大小為M*N,放大為k1M*k2N,(k1>1,k2>1)。算法步驟如下:1)設舊圖像是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/k1c2=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”另一種格式為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),對比上面兩種插值效果能夠看出來,最近鄰法有嚴重的馬賽克效應。雙線性內插法具有低通濾波性質,使高頻分量受損,圖象輪廓模糊。,6.3一般插值方法,雖然最近鄰法和雙線性插值法看起來不太一樣,但它們都屬于一般插值的特殊情況。下面來看一下一般插值的想法。假設我們要求,,設,定義一個插入函數R(u)。,圖6.10說明了這式子的由來。R(u)的中心在處,對應著,對應著現在有兩種類型的R函數R0和R1,分別對應著圖6.11中的結構,并且只定義了的區(qū)間。,函數形式分別為,現在,用R0代替公式中的R,將得到最近鄰法插值的結果。若用R1代替R,將得到線性插值的結果。,另外還有一種插值方法——三次插值該方法利用三次多項式S(x)來逼近理論上的最佳插值函數sin(x)/x。其數學表達式為:,定義的區(qū)間為,用的已知點也多了,用R3代替R有,這里位于之間。,,,(i-1,j-1),(i-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’)的灰度值由其周圍十六個點的灰度值加權內插得到??赏茖С龃笙袼氐幕叶扔嬎闶饺缦拢篺(x’,y’)=A?B?C,head4c=imresize(head,4,bicubic);figure,imshow(head4c),這種方法應用于圖像稱為雙三次差值。該算法計算量最大,但內插效果最好,精度最高。,6.4利用空域濾波器實現圖像擴大,如果我們僅僅希望得到一個擴大兩倍的圖像,這里有一種既快速又直接的方法利用線性濾波。通過例子來說明,一個4*4的圖像,m=magic(4)m=16231351110897612414151,第一步,通過插入0實現變形,主要是在行與行之間和列與列之間插入全為零的行和列。如果m2是m做0插入后的矩陣,那么可以將其定義為,functionout=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=16020301300000000050110100800000000090706012000000000401401501000000000,現在,我們可以分別用兩個空域濾波器來實現最近鄰插值和雙線性插值。濾波模板分別為,filter2([110;110;000],m2)ans=16162233131316162233131355111110108855111110108899776612129977661212441414151511441414151511,m2b=imresize(m,[8,8],nearest);m2bm2b=16162233131316162233131355111110108855111110108899776612129977661212441414151511441414151511,m2b=imresize(m,[7,7],bilinear);m2bm2b=16.000011.00003.00002.50003.71439.428613.000012.07149.62245.70415.35715.90829.173511.21435.78577.418410.03069.92869.41848.76538.35717.00007.71438.85718.50008.14299.285710.00008.64298.23477.58167.07146.96949.581611.21435.78577.826511.091811.642911.29597.37764.92864.00007.571413.285714.500014.00006.00001.0000,這里用7*7的輸出矩陣是為了確保插值點都位于原圖像的兩點之中點。,可用如下的矩陣模擬雙三插值,分別用空域濾波的方法將head擴大兩倍,6.5縮小,分為按比例縮小和不按比例縮小兩種。圖像縮小之后,因為承載的信息量小了,所以畫布可相應縮小。,,(a)按比例縮小(b)不按比例縮小,圖像縮小實際上就是對原有的多個數據進行挑選或處理,獲得期望縮小尺寸的數據,并且盡量保持原有的特征不丟失。最簡單的方法就是等間隔地選取數據。,,設原圖像大小為M*N,縮小為k1M*k2N,(k1<1,k2<1)。算法步驟如下:1)設原圖為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/k1c2=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].,,,,,,,,,,在實現方法上可以用imresize將其中的參數改成<1就可以了。例子,t=zeros(1024,1024);fori=1:1024;forj=1:1024;t(i,j)=((255.5)^2>figure,imshow(tr),圖像的旋轉,圖像的旋轉計算公式如下:,這個計算公式計算出的值為小數,而坐標值為正整數。這個計算公式計算的結果值所在范圍與原來的值所在的范圍不同。,因此需要前期處理:擴大畫布,取整處理,平移處理。,圖像旋轉之前,為了避免信息的丟失,畫布的擴大是最重要的。畫布擴大的原則是:以最小的面積承載全部的畫面信息。,畫布擴大的簡單方法是:根據公式計算出x’和y’的最大、最小值,即x’min、x’max和y’min,y’max。畫布大小為:x’max–x’min、y’max–y’min。,,,旋轉后圖像的畫布大小為:,,例,平移量為△x’=2;△y’=0。,圖像旋轉的效果示例,,,圖像旋轉——按照確定畫布時的平移量取整,,,,,,,,,,結論:按照圖像旋轉計算公式獲得的結果與想象中的差異很大。,對原圖的(1,1)像素,x=1,y=1,取整后,該點在新圖的(2,1)上。,對原圖的(1,2)像素,x=1,y=2,取整后,該點在新圖的(2,2)上。,,必須進行后處理操作。,圖像旋轉后處理——旋轉后的隱含問題分析,圖像旋轉之后,出現了兩個問題:1)像素的排列不是完全按照原有的相鄰關系。這是因為相鄰像素之間只能有8個方向(相鄰為45度),如下圖所示。2)會出現許多的空洞點。,,,圖像旋轉后處理——解決問題的思路,出現問題的核心是像素之間的連接是不連續(xù)的。相鄰像素的角度是無法改變的,所以只能通過增加分辨率的方法來從整體上解決這個問題。采用某種填補方法來填充空洞。,,圖像旋轉的后處理——插值,最簡單的方法是行插值(列插值)方法。,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實現結構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),- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權。
- 關 鍵 詞:
- 幾何 變換 數字圖象處理 漢化
裝配圖網所有資源均是用戶自行上傳分享,僅供網友學習交流,未經上傳用戶書面授權,請勿作他用。
鏈接地址:http://www.3dchina-expo.com/p-11521506.html