星期一, 11月 26, 2007

week10_CH6

Chap6 IMAGE GEOMETRY 影像幾何學
 
 我們可能在很多情況下會去改變影像的形狀,大小或方向.
 可能想符合一個特別的位置或for printing而放大影像;
 可能為了可以放在Web page上而減少它的size.
 或希望透過旋轉調整原本不正確的角度或simply for effect.
 旋轉和scaling都是affine transformation(仿射的變換)的例子,
 其中線轉變成線,特別的是,平行線在轉變後依然保持平行.
 非仿射幾何轉換包含warping(彎曲歪斜),但在此章不討論.

6.1 Interpolation of Data
  從一個簡單的問題開始:設有一4個數值的集合,我們希望延展成8個.
  除了頭尾的原點和延展後的點會相同之外,其餘的點都不同.
  interpolation:根據周圍數值估算出函數值.
  有以下三種方法:
  (1)Nearest-neighbor interpolation:
    每個延展後的點和它距離最近的原點相同
  (2)Linear interpolation:
    每個原點間用筆直的線相連,延展後的點對應到的距離即是.
  (3)Calculating linearly interpolated values:
    設兩原點之間一延展點為F,則(F-f(x1))/λ=(f(x2)-f(x1))/1
    [幾何相似定理].

6.2 Image Interpolation
  從線改為看平面,創一個4x4影像經過interpolated後成為8x8影像.
  
  P122&P123算式最後導出f(x',y')稱為bilinear interpolation.
  現在可以更容易scaling影像了.給一影像和一個scaling factor,
  或一個我們要scale的size,先創一個符合要求大小的矩陣.

  給一(x',y')矩陣,我們可一點接一點的從(x,y)對應周圍的點經由
  nearest-neighbor或bilinear interpolation計算出一個
  interpolated數值.
  
  MATLAB中有函數imresize可以做到上述動作,可被表示為
  resize(A,k,'method')
  其中A是一個影像的型態,k is ascaling factor,method是
  nearest或bilinear.
  
  實做後發現nearest-neighbor有邊緣呈現鋸齒狀的效果.
  bilinear interpolation雖然平坦多了,但有程度上的模糊.

  Interpolation不能預測數值:不能從什麼也沒有的情況下創出data.
  只能猜出最合原點的數值.

6.3 General Interpolation
  利用三種函數方程式表示6.2所示的方法
  (1)Nearest-neighbor interpolation
{0 if u≦-0.5
    R0(u)={1 if -0.50.5
  
  (2)Linear interpolation
   R1(u)={1+u if u≦0
       {1-u if u≧0

  (3)Cubic interpolation
   R3(u)={1.5∣u∣^3-2.5∣u∣^2+1 if ∣u∣≦1,
      {-0.5∣u∣^3+2.5∣u∣^2-4∣u∣+2 if 1<∣u∣≦2

6.4 Enlargement by Spatial Filtering   
  用linear filtering也可以放大影像

6.5 Scaling Smaller   
  ●image minimization:把間隔的點減少以達縮小影像這個目的   
  ●subsampling   
  ●tr=imresize(t,0.25);    
   使用Nearest-neighbor interpolation產生一個有缺口的圓   
  ●trc=imresize(t,0.25,'bicubic');    
   經由Bicubic interpolation可修補上一種方法所產生的缺口

6.6 Rotation   
  利用矩陣旋轉圖形的公式可知旋轉後的點為何.      
  ●在MATLAB中有imrotate(image,angle,'method')可用    
   其中method和前述相同,表示nearest、bilinear或bicubic    
   angle是指定的旋轉角度   
  ●ipud可以顛倒(使相反)行跟列   
  ●iplr讓影像上下相反   
  ●左右相反: 90° flipud(c');        
        180° fliplr(flipud(c));        
        270° fliplr(c');

6.7 Anamorphosis   
  從某一程度的角度看影像,在MATLAB中的指令為rgb2gray   
  指定範圍:skull=a(566:743,157:586);   
  消除這種歪斜效果的指令:   
  skull2=imresize(imrotate(skull,-22,'bicubic'),[500,150],'bicubic');
  因為對那個骷髏頭非常感興趣想實做這部份


但是竟然沒有這張圖>_<

標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁