標籤:電腦視覺
電腦圖形學 複習筆記
(個人整理,僅做複慣用 :D,轉載註明出處:http://blog.csdn.net/hcbbt/article/details/42779341)
第一章 電腦圖形學綜述
研究內容
圖形的概念:電腦圖形學的研究對象
- 能在人的視覺系統中產生視覺印象的客觀對象
- 包括自然景物、拍攝到的圖片、用數學方法描述的圖形等等
圖形的要素
- 幾何要素:刻畫對象的輪廓、形狀等
- 非幾何要素:刻畫對象的顏色、材質等
圖形標記法
- 點陣表示
枚舉出圖形中所有的點,簡稱為映像。
- 參數表示
由圖形的形狀參數(方程或分析運算式的係數,線段的端點座標等)+屬性參數(顏色、線型等)來表示,簡稱為圖形。
與相關學科的關係
- 映像變換 (影像處理)
- 映像產生 (電腦圖形學)
- 模型(特徵)提取 (電腦視覺,模式識別)
- 模型變換 (計算幾何)
發展曆史_軟體發展及軟體標準
- 通用標準
- 事實標準
- DirectX (MS)
- OpenGL(SGI)
- Adobe公司Postscript
電腦圖形學的應用
- 圖形化使用者介面:介於人與電腦之間、人與機器的通訊。
- CAD/CAM:設計、布局
- 科學計算可視化
- 交易管理
- 地理資訊系統(GIS)
- 多媒體
- 娛樂
- 電腦藝術
- 虛擬現實
當前的研究動態
- 造型技術
- 真實感圖形繪製技術
- 人機互動技術
- 與電腦網路技術的緊密結合
第二章 圖形系統綜述
視頻顯示裝置
重新整理式CRT
- 大部分視頻監視器的操作是基於標準的陰極射線管(CRT)
- CRT 電子槍、聚焦系統、加速電極、偏轉系統、熒光屏組成
- 熒光屏通過熒光物質收集電子束而發光。
- 持續發光時間:電子束離開某點後,該點的亮度值衰減到初始值1/10所需的時間
- 重新整理頻率:每秒鐘重繪螢幕的次數:CRT產生穩定映像所需要的最小重新整理頻率=1秒/熒光物質的持續發光時間
- 像素:構成螢幕(映像)的最小元素
- 解析度:CRT 在水平或豎直方向單位長度上能識別的最大像素個數,單位通常為 dpi
光柵掃描顯示器
- 掃描行,在光柵掃描系統中,電子束橫向掃描螢幕,一次一行,從頂到底依次進行,每一行稱為一個掃描行;
- 幀,幀是指整個螢幕範圍;
- 幀緩衝或者重新整理緩衝,圖形定義儲存在稱為重新整理緩衝或者幀緩衝的儲存空間中,該儲存空間儲存一組對應螢幕所有點的強度值,電子束在螢幕上逐點移動時從重新整理緩衝或者幀緩衝取出強度值控制螢幕對應點的強度;
- 緩衝深度或者位平面數,每像素的位元稱為緩衝深度或者位平面數;
- 位元影像,每像素一位的幀緩衝通常稱為位元影像;
- 像素圖,每像素多位的幀緩衝稱為像素圖;
- 水平回掃,重新整理每條掃描線後,電子束返回到螢幕左端,稱為電子束的水平回掃;
- 垂直回掃,在每幀的終止處,電子束返回到螢幕的左上方,開始顯示下一幀,稱為電子束的垂直回掃;
- 隔行掃描,首先從第0行開始,每隔一行掃描,將偶數行都掃描完畢垂直回掃後,電子束從第1行開始掃描所有奇數行。
隨機掃描顯示器
- 電子束只在螢幕上顯示圖形的部分移動。電子束逐條地跟蹤圖形的組成線條,從而產生線條圖。
- 重新整理顯示檔案:隨機掃描系統的重新整理平率依賴於顯示的線數。
- 彩色CRT監視器
- 電子束穿透法:顯示彩色圖形的一種防複髮式在螢幕上塗多層不同的熒光粉,發射顏色由電子束在熒光層中的穿透深度決定。
- 蔭罩法:常用於光柵掃描系統,它能產生的彩色範圍比電子束穿透法大得多
- 平板顯示器
- 三維觀察裝置
光柵掃描系統
- 優點:
- 成本低
- 易於繪製填充圖形
- 色彩豐富
- 重新整理頻率一定,與圖形的複雜程度無關
- 易於修改圖形
- 缺點:
- 普通顯卡=視頻控制器+緩衝(顯存)
- 圖形加速卡=視頻控制器+顯存+顯示處理器(GPU)
輸入裝置
- 二維:滑鼠、座標數字化儀、跟蹤球、光筆、觸控螢幕、操縱杆、掃描器..
- 三維:空間球、資料手套..
硬拷貝裝置
圖形軟體
- 座標表示:
- 全局座標系:通常全局座標系是一個三維笛卡兒座標系。它是一個全域座標系統,一般為右手座標系。
- 建模座標系(局部座標系):為了幾何造型和觀察物體方便起見,獨立於全局座標系定義的二維或三維笛卡兒座標系稱為局部座標系。
- 裝置座標系或螢幕座標系:螢幕座標系也稱為裝置座標系,它主要用於某一特定的電腦圖形顯示裝置(如光柵顯示器)的表面的點的定義。
- 建模座標 -> 全局座標 -> 正常化座標 -> 裝置座標
- 圖形的基本構造塊稱為輸出圖元
- 建模變換利用建模座標給出的對象描述來構成情境
- 觀察變換用來指定將要顯示的視圖,以及在輸出顯示地區出現的範圍
- 主要任務:
- 建模(Modeling) 對象的頂點資料集
- 幾何處理(Geometric Processing) 對象是頂點,包括:投影、圖元裝配、裁剪器、明暗處理
- 光柵化或掃描轉換(Rasterization) 從裁剪後的對象產生片段
- 片元處理(Fragment Processing)
OpenGL
第三章 輸出圖元
圖元的產生(掃描轉換):
- 從圖元的參數表示形式(由圖形軟體包的使用者指定)到點陣表示形式(光柵顯示系統重新整理時所需的表示形式)的轉換。
- 主要工作包括:確定像素集合及其顏色,顯示繪圖物件。
畫線演算法
- 數字微分(DDA)畫線演算法
void lineDDA(int x0, int y0, int xEnd, int yEnd) { int dx = xEnd - x0, dy = yEnd - y0, steps, k; float xIncrement, yIncrement, x = x0, y = y0; if (abs(dx) > abs(dy)) //判斷斜率是否大於 steps = abs(dx); else steps = abs(dy); xIncrement = float(dx) / float(steps); yIncrement = float(dy) / float(steps); setPixel(round(x), round(y)); for (k = 0; k < steps; k++) { x += xIncrement; y += yIncrement; setPixel(round(x), round(y)); }}
- Bresenham畫線演算法
// 下面的是斜率 < 1.0 的程式// 斜率 > 1.0 的只要交換 x x和 y 方向的規則即可void lineBres(int x0, int y0, int xEnd, int yEnd) { int dx = fabs(xEnd - x0); int dy = fabs(yEnd - y0); int p = 2 * dy - dx; int twoDy = 2 * dy, twoDyMinusDx = 2 * (dy - dx); int x, y; if (x0 > xEnd) { x = xEnd; y = yEnd; xEnd = x0; } else { x = x0; y = y0; } setPixel(x, y); while (x < xEnd) { x++; if (p < 0) p += twoDy; else { y++; p += twoDyMinusDx; } setPixel(x, y); }}
- 畫線演算法的討論
- 畫線演算法考核方式:
- 公式推導
- 給出具體的例子,如點 (1,2)->(8,10) 描出中間的點。
圓 圓弧 橢圓的產生
- 圓的產生
- 直接離散:離散點、離散角度
- 中點畫圓法 :詳細的示範
- F(X,Y)=X^2+Y^2-R^2
- 如果
F(X+1,Y+0.5)>=0
,則下一個點是(X+2,Y-0.5)
- 如果
F(X+1,Y+0.5)<0
,則下一個點是(X+2,Y-1.5)
- 設定D值,每次判斷增量即可
- 正負法畫圓
- 如果F(xi,yi)<0,說明點Pi在圓內,那麼下一步應向圓外走
- 如果F(xi,yi)>0,說明點Pi在圓外,那麼下一步應向圓內走
多邊形填充區
- 多邊形凹凸性判定:
- 延長線法:延長每邊,觀察如果頂點分布在延長線兩側,則為凹多邊形
- 向量法
- 按逆時針方向計算多邊形的邊向量的叉積
- 記錄叉積結果Z分量的符號。
- 如果Z分量變為負值,則多邊形為凹多邊形,可以沿叉乘向量對中的第一條邊的延長線將多邊形分解開
- 判斷點與多邊形的內外關係:
- 射線法(奇偶規則):由點出發向任意方向作射線,計算此射線與多邊形所有交點個數,如果交點個數為奇數,則點在多邊形內部,如果交點個數為偶數,則點在多邊形外部.
- 非零環繞數規則:所有的邊按照統一的方向統計有多少條是從同一側面通過這條射線的,又有多少條是從射線另一側通過的,之後相減,如果結果是零,表示之前任意選擇的點在圖形外部,其他一切非零數表示在內部
- 多邊形網格表示的方法
- 顯式表示
- 指向頂點表的指標
- 指向邊表的指標
- 方程表示
第四章 圖元的屬性
顏色和尋找表
- 顏色是所有圖元的一個基本屬性
- 在彩色光柵系統中,可選用的顏色數量依賴於幀緩衝中提供的儲存容量。
- 顏色資訊有兩種儲存方法: 直接儲存RGB編碼。 儲存顏色碼(尋找表)
- 使用彩色表可提供合理的同時顯示的顏色數量
點的屬性
線的屬性
填充區屬性
通用掃描線填充演算法
- 掃描線演算法是按掃描線順序,計算掃描線與多邊形的相交區間,再用要求的顏色顯示這些區間的象素,完成轉換工作。區間的端點可以通過計算掃描線與多邊形邊界線的交點獲得。
- 對於一條掃描線,多邊形的掃描轉換過程可以分為四個步驟:
- 求交:計算掃描線與多邊形各邊的交點;
- 排序:把所有交點按x值遞增順序排序;
- 配對:第一個與第二個,第三個與第四個等等;每對交點代表掃描線與多邊形的一個相交區間,
- 著色:把相交區間內的象素置成多邊形顏色,把相交區間外的象素置成背景色。
不規則邊界地區填充方法
- 遞迴演算法
void flood_fill_4(int x, y, old_color, fill_color) { int current; current = read_pixel(x, y); if (current == old_color && current != fill_color) { write_pixel(x, y, fill_color); flood_fill_4(x - 1, y, old_color, fill_color); /* 左 */ flood_fill_4(x, y + 1, old_color, fill_color); /* 上 */ flood_fill_4(x + 1, y, old_color, fill_color); /* 右 */ flood_fill_4(x, y - 1, old_color, fill_color); /* 下 */ }}
- 掃描線演算法 示範
void Scanline(int x, int y) { if (x < 0 || x >= ROW || y < 0 || y >= COL || vis[x][y]) return; int xl = 0, xr = 0, i; drawPoint(x, y, 2); for (xl = x - 1; xl >= 0; xl--) { if (!vis[xl][y]) drawPoint(xl, y, 2); else break; } for (xr = x + 1; xr < ROW; xr++) { if (!vis[xr][y]) drawPoint(xr, y, 2); else break; } for (i = xl + 1; i < xr; i++) { Scanline(i, y - 1); Scanline(i, y + 1); }}
反走樣
- 走樣
- 用離散量(像素)表示連續的量(圖形)而引起的失真,叫混淆或叫走樣(aliasing)。
- 點陣圖形的走樣現象:
- 階梯狀邊界;
- 圖形細節失真;
- 狹小圖形遺失:動畫序列中時隱時現,產生閃爍。
第五章 幾何變換
- 矩陣運算 數學基礎
基本的二維幾何變換
- 平移
x‘=x+tx, y‘=y+ty
- 旋轉
x‘=xcosθ-ysinθ, y‘=xsinθ+ycosθ
- 縮放
x‘=sxx, y‘=syy
矩陣表示和齊次座標
逆變換
- 平移變換 T(tx,ty)的逆矩陣為T(-tx,-ty)
- 旋轉變換 R(θ)的逆矩陣為R(-θ)
- 縮放變換 S(sx,sy)的逆矩陣為S(1/sx,1/sy)
二維複合變換
- 矩陣乘法不可交換
- 複合二維變換的高效實現應該是:先用矩陣乘法將多個基本二維變換矩陣合并成一個複合二維變換矩陣,再計算變換後的座標。
其它二維變換
二維座標系間的變換
- 步驟:
- 將x’y’系統的座標原點平移到xy系統的原點.
- 將x’軸旋轉到x軸上.
M = R(- θ)*T(-x0,-y0)
三維空間的幾何變換
三維複合變換
- 矩陣連乘合并
- 最右邊的矩陣是第一個作用於對象的變換,最左邊的矩陣是最後一個
三維座標系間的變換
仿射變換
第六章 二維觀察
二維觀察流水線
- 全局座標系中要顯示的地區稱為視窗(裁剪視窗)
- 視窗映射到顯示器的地區稱為視口。
- 視窗定義了顯示的內容,而視口定義在什麼位置顯示。
- 通常將全局座標系中一部分區域對應到裝置座標系的操作稱為觀察變換。
- 建模座標 -> 全局座標 -> 正常化座標 -> 裝置座標
OpenGL二維觀察函數
gluOrtho2D(xwmin, xwmax, ywmin, ywmax);glViewport(xvmin, yvmin, width, height);
二維點的裁剪
- 滿足
xwmin <= x <= xwmax;
ywmin <= y <= ywmax;
則保留該點.
二維線的裁剪
- Cohen-Sutherland演算法
- 基本思想:
- 若直線的兩個端點P1P2完全在視窗內,則顯示該線段P1P2,簡稱“取”之
- 若直線的兩個端點P1P2明顯在視窗外,則丟棄該線段,簡稱“棄”之
- 直線裁剪
- 地區碼
位 4 3 2 1座標區 上 下 右 左
- 利用地區碼判斷非常方便,詳細演算法分析
- 中點分割演算法
- 同樣利用地區碼
- 基本思想前兩步跟 Cohen-Sutherland演算法 一樣:
- 3 中點分割的方法求出線段與視窗的交點:即從P0點出發找出距P0最近的可見點A和從P1點出發找出距P1最近的可見點B,兩個可見點之間的連線即為線段P0P1的可見部分。
- Cohen-Sutherland演算法和中點分割演算法的比較
- Cyrus-Beck演算法
- 將線段表示成參數方程的形式,求線段與視窗邊界的交點的參數,確定了線段的可見部分之後再用交點的參數計算交點的座標
- 適用於凸多邊形裁剪視窗
- 梁友棟-Barsky演算法
- 簡化為
up<=q
的參數式再處理
- 詳細演算法分析 的後半部分
- NLN演算法
第七章 三維觀察
三維觀察概念綜述
三維觀察流水線
- 模型座標->(建模變換)->全局座標->(觀察變換)->觀察座標->(投影變換)->投影座標->(正常化變換和裁剪)->正常化座標->(視口變換)->裝置座標
三維觀察座標參數
- 觀察點(觀察位置,視點,照相機位置)
- 觀察向上向量
全局座標繫到觀察 座標系的變換
M = R * T
- T(-x0, -y0, -z0)
- R(uvn) (見’三維座標系間的變換’)
投影變換
- 投影變換就是將維數為n的點變換成維數小於n的點。
- 類型:
正投影
斜投影
- 當投影路徑與觀察平面不垂直時,該映射稱為斜平行投影
透視投影
第八章 3D 物件的表示
多面體
- 多邊形網格表示的方法
- 顯式表示
- 指向頂點表的指標
- 指向邊表的指標
- 方程表示
OpenGL多面體函數
曲面
- 常用的曲面:二次曲面、超二次曲面、多項式和指數函數、樣條曲面
二次曲面
第九章 可見面判別演算法
可見面判別(隱藏面消除)演算法
- 分類:物空間和像空間
- 利用排序和連貫性來提高演算法效能
Back-Face Detection 後向面判別
- 思想:
- Ax+By+Cz+D=0
- 如果點(x, y, z)為視線上的點,並且滿足Ax+By+Cz+D <0
- 該平面為後向面
- 測試方法:多邊形面法向量N * 視線向量V > 0,則為後向面
Depth-Buffer Method 深度緩衝演算法
- 思想:對檢視平面上每個像素所對應的表面深度進行比較
- 屬於像空間演算法
- 演算法:
- 初始化幀緩衝和深度緩衝
depthBuff(x, y) = 1.0
, frameBuff(x, y) = backgndColor
- 處理情境中的每一物體:計算各點深度,若
z < depthBuff(x, y)
,就更新
A-Buffer Method A-緩衝演算法
- 基本方法是展開深度緩衝器,使每個像素位置對應一個表面鏈表
- 每個單元包含兩個域:深度域 、強度域
Scan-Line Method 掃描線演算法
- 將3D對象各表面投影到檢視平面,計算掃描線與投影多邊形的相交區間。相交區間屬於同一表面,直接顯示該表面的顏色資訊;而當出現重疊區間時,採用深度測試確定採用哪個表面的強度資訊。
Depth-Sorting Method 深度-排序演算法
- 若情境中任何多邊形表面在深度上均不貫穿或迴圈遮擋,則各多邊形的優先順序順序可完全確定
- 演算法:
- 將表面按深度遞減方向排序
- 由深度最大的表面開始,逐個對錶面進行掃描轉換
OPENGL部分
一道大題,主要考察大家對基本圖形應用與OPENGL編程架構的掌握。
OPENGL語句,只需要理解,不需要記憶。
電腦圖形學 複習筆記