2009年10月30日 星期五

Week 07: 簡介用於數位影像處理的數學工具

本週我們要討論的主題是 § 2-6 簡介用於數位影像處理的數學工具, 這些數學工具真的很好用, 我們下學期的 互動視訊遊戲製作 這門課, 就會用到這些工具來撰寫程式。



第三個作業: 請完成類似 Photoshop 或 PhotoImpact 的 Histogram 顯示功能。
 

 

2009年10月23日 星期五

Week 06: 像素間的基本關係

本週我們要討論的主題是 § 2-5 像素間的基本關係, 這節所談論到的基本定義, 應用非常廣泛, 例如: 影像處理軟體 Photoshop, PhotoImpact 中的魔術棒選取工具, 就是用到這些觀念!


 
甚至, 我們下學期要開的互動視訊遊戲製作, 也會用到 connected component 的觀念!
 

 

 

2009年10月16日 星期五

Week 05: 影像如何旋轉? (2)

1. 兩角和與差的三角函数公式

 sin(θ1+θ2) = sinθ1 cosθ2 + cosθ1 sinθ2
 sin(θ1-θ2) = sinθ1 cosθ2 - cosθ1 sinθ2
 cos(θ1+θ2) = cosθ1 cosθ2 - sinθ1 sinθ2
 cos(θ1-θ2) = cosθ1 cosθ2 + sinθ1 sinθ2

 要推導出旋轉座標轉換公式, 必須用到上述的公式。

2. 影像旋轉演算法
 輸入: 原始影像 imOriginal[][]
 輸出: 旋轉後影像 imRotation[][]

 a. 根據原始影像的大小(高與寬), 計算旋轉後影像的大小。
  以對角線長度當作旋轉後影像之大小。
  int iImageHeight; //原始影像的高
  int iImageWidth; //原始影像的寬
  int iImageDiagonal; //原始影像的對角長度, 旋轉後影像的高與寬
  iImageDiagonal = ceil(sqrt(iImageHeight*iImageHeight+iImageWidth+iImageWidth));

 b. 動態宣告大小為 iImageDiagonal * iImageDiagonal 的二維陣列
 
 c. 計算兩張影像的旋轉中心之座標
  int iOriginalCenterI,iOriginalCenterJ;
  int iRotationalCenterI,iRotationalCenterJ;

  iOriginalCenterI = iImageHeight / 2;
  iOriginalCenterJ = iImageWidth / 2;

 d. 針對旋轉後影像的每一個像素的座標, 分別計算原始影像的對應像素之座標
  int iNewI, iNewsJ; //旋轉後影像, 像素 (i, j) 相對於旋轉中心的座標
  iNewJ = j - iNewOriginX;
  iNewI = i - iNewOriginY;
  
  // 使用旋轉公式, 計算出旋轉前的相對座標
  iOldJ = iNewI * dCosAngle - iNewJ * dSinAngle;
  iOldI = iNewI * dSinAngle + iNewJ * dCosAngle;

  // 還原出影像陣列的座標
  iOldJ = iOldJ + iOldOriginY;
  iOldI = iOldI + iOldOriginX;
 
  // 開始搬移影像內容 
  ucRotationalMatrixR[i][j] = ucMatrixR[iOldI][iOldJ];
  ucRotationalMatrixG[i][j] = ucMatrixG[iOldI][iOldJ];
  ucRotationalMatrixB[i][j] = ucMatrixB[iOldI][iOldJ];
 

2009年10月9日 星期五

Week 04: 影像如何旋轉? (1)



課堂討論主題:
1. 影像旋轉的演算法
 a. 什麼是演算法?
 b. 要解決的問題是什麼?
 c. 影像旋轉演算法的輸入是什麼?
 d. 影像旋轉演算法的輸出是什麼?
 e. 維基百科上的 旋轉 條目
 
本課程第二個作業: 影像旋轉

2009年10月2日 星期五

Week 03: Digital = Sampling + Quantization

課堂討論主題:
 § 2-4: 影像的取樣和量化