2007年11月27日 星期二

Chapter6 week11

[實做筆記區]

※6.1 Interpolation of Data
Start with a simple problem:suppose we have a collection of four values that we wish to enlarge to eight.

「如何把四個數字擴大八個數字?」
 在6.1中一共提到了四個方法,
 而Figure6.1與6.2指的是同一種方法...

「Slightly redrawn」 (Page.120)
 X1 ~ X4 之間一共有三個間隔,而每個間隔相差的直為1
 X'1 ~ X'8 的長度與 X1~X4的長度相等,此外
 X'1 ~ X'8之間一共有七個間隔,每個間隔的大小為3/7 也就是0.4286

 數學公式如下:X'=1/3(7x-4)
        X =1/7(3x'+4)

「Nearest-neighbor interpolation」 (Page.120)
 X →X' 挑最近的的點 如6.3所示
 X1最近的點:X'1 & X'2 (課本於X'2標空圈)
 X2最近的點:X'3 & X'4
 X3最近的點:X'5 & X'6
 X4最近的點:X'7 & X'8 (課本於X'7標空圈)
「Linear interpolation」 (Page.121)
 F-f(X)/λ = f(X2)-f(X1)/1
 →F=λf(X2)+(1-λ)f(X1)
 註:F是想知道的X'n
   λ是以 X1 到 X2 的距離,F距離 X1 佔整段比例的比數

 
※6.2 Image Interpolation
 6.1提到了點與線之間的數值放大(使用線性做範例)
 6.2則是一個面的,也就是Image。
 Example:將4×4的Image放大到8×8
 (x,y)對應到放大後的位置,用下面的公式計算
 該公式稱為 bilinear interpolation
 f(x',y')=λμf(x+1,y+1)+λ(1-μ)f(x+1,y)
     +(1-λ)μf(x,y+1)+(1-λ)(1-μ)f(x,y)

 Matlab內有個function叫做 imresize 負責上述提過的處理
 語法是:resize(A, k, 'method')
 method一共有:'nearest', 'bilinear', 'bicubic' 三種方法





※6.3 General Interpolation (Page.125)
 本節提到的是cubic interpolation
 也就是Method中的bicubic....
 f(x')=R3(-1-λ)f(x1)+R3(-λ)f(x2)+R3(1-λ)f(x3)+R4(2-λ)f(x4)
 x'透過 x1, x2, x3, x4 共四個點計算出
 解讀如下:
 因為計算的過程中該曲線f(x) x值 最高項次是 3次方
 此外,在平面上求得(x',y')需仰賴bilinear的概念
 故稱為bicubic interpolation



※6.4 Enlargement by Spatial Filtering 
 在Enlarge的過程中使用filter(?)








※6.5 Scaling Smaller
 似乎可以用公式畫圓(但是沒有成功= =)



※6.6 Rotation (旋轉)
 將圖片(中的每個點)旋轉Θ度
 語法如下:var = imrotate(c,60);
      //將c旋轉60度的值給var
 此外,旋轉90度的倍數有特殊的語法
  90度:c90 = flipud(c);
 180度:c180 = filplr(flipud(c));
 270度:c270 = fliplr(c);







※6.7 Anamorphosis (失真圖像)




[問題區]
1. Page 120, Figure 6.3
  Nearest-neighbor interpolation,以空圈標記了最近的點
  然而位於邊緣的 X1 ,與 X4 僅僅標記了X'2與X'7
  X'1與X'8並未被標,是因為重疊的關係?

  在這張圖,從 X'→X 似乎沒有太大的問題
     然而從 X→X' 是否如字面意義挑最近的點
  例如 X'3 較 X'4更接近 X2...X→X'時,X2是否取X'3的值

2. Page 137
  90度:c90 = flipud(c);
 180度:c180 = filplr(flipud(c));
 270度:c270 = fliplr(c);

 因為課本上使用imrotate的旋轉,是逆時鐘旋轉...
 然而這邊提到特殊與法的時候,有提到度數
 我以為c90的結果應該與imrotate(c,90)相同
 然而實際上並不是,而是往下折(x,y')

 c180 也不等於 imrotate(c,180)而是(x',y') 
 c270 是(x',y)

 註:(x,y')是指 x 相對位置不變,y的位置作映射
   (x',y') x y 作映射
   (x',y)是指 y 相對位置不變,x的位置作映射

 這樣算是我解讀上有所問題嗎?

沒有留言: