【讀書筆記】計算機圖形學基礎(虎書)第3章 - 點陣圖


大多的計算機圖形或圖片通常使用光柵化顯示(raster指光柵或點陣)的方法,指將圖片當作填滿像素的矩陣。一個例子是電視機使用二極管排列成方形矩陣加以顯示,不同強度的紅綠藍光的混合創造了不同的顏色,該方法的不同二極管是同時變化的。另一個例子是打印機,圖片的變化是按特定順序的,即一橫排一橫排的逐步打印。其他的例子有照相機、掃描儀等。

就計算機而言,我們可能想更改圖片的朝向、大小、顏色或者把圖片貼在運動物體的表面上。這些操作讓"點陣圖的原圖片"與“最終通過器材顯示的圖片”分為兩個不同的事物。除了點陣圖以外還存在向量圖,向量圖更多對形狀與比例進行描述,並與分辨率無關。在實際應用中,向量圖需要先被轉換為點陣圖再被計算機顯示,時間消耗較長但精度更高。

此章介紹點陣圖與計算機顯示的基礎,並着重於介紹顯示方式的非線性。之后的章節也會繼續逐步介紹像素值與光線強度直接的關系。

1.光柵設備

就具體設備而言,可以簡單分為輸入和輸出兩部分。輸出有屏幕顯示與打印。屏幕顯示分為自發光的(emissive)例如LED顯示屏與非自發光的例如LCD。非自發光的通常是在前后板中間加一塊液晶板作為控制,將穿透與反射進行混合,也有一些別的發光方法,一個具體的英文鏈接在此。打印有二元的黑白打印機或連續的彩色打印機。輸入主要為傳感器,例如二維的相機傳感器用於接受光與顏色,還有一維的平板式掃描儀(flatbed/reflective scanner)實際上是打上白光后逐行掃描再通過反射亮度進行分析的。

1.1 顯示設備

此部分的物理知識科普較多,不做具體介紹。就自發光的LED而言,發光的亮度與電流大小相關,RGB顏色與顏色相關,最終的顏色為RGB三色的混合。

液晶顯示LCD是非自發光設備的一種,利用電壓大小來改變光的偏振中文介紹見鏈接,總的來講光通過了一個橫向偏振過濾片,再依次通過液晶片、濾色片、縱向偏振過濾片與人眼。如果液晶片不通過改變電壓來改變光的偏振方向,橫縱兩次的偏振過濾片會將光阻攔,呈現閉合(OFF)的狀態,反之更改電流來改變90度的光偏振為打開(ON)的狀態。因為改變角度為連續的,我們可以有效控制光的強度並最終控制RGB值。

另外擁有固定大小像素格的顯示器都擁有自己的固定分辨率,如果其他分辨率的圖片需要在此顯示器上進行顯示都需要先一步進行轉換。

1.2 打印設備

黑白打印機(ink-jet)的針頭通常由一行或數行構成,針頭經過計算機控制是否在指定地方滴下墨點,決定后針頭一起向前移動,移動的距離決定了分辨度。

熱升華印花打印機(dye sublimation printer)通過打印板(原文是print head)發熱將印花印到紙上。數種不同顏色的顏料經過同樣的操作印至紙上,不同的熱度決定了多少顏料被印至紙上,綜合可得最后的連續值顏色。最后的分辨率由打印機的打印版發熱單元數量與顏料在紙上的加熱/冷卻速度共同決定。

與顯示設備分辨率的全部長寬像素數量不同,打印設備通常以單位面積的像素數量為單位,例如黑白打印機的dpi(dots per inch)與熱升華印花打印機的(ppi, pixels per inch)。黑白打印機的高精度主要是為了避免過於明顯的邊緣,彩色打印機的高精度主要是為了平滑的顏色改變與半色調的調整等。

1.3 輸入設備

最初的點陣圖除了手動輸入外通常通過相機或其他輸入設備來得到。相機這個概念在計算機圖形的多個地方都有應用,例如前文提到的全局、局部坐標系與相機空間的轉換,又或者以后會提到的紋理映射(Texture Mapping)。相機主要使用了矩陣排列的傳感器來衡量光的強度與色彩信息,兩個主要的傳感器種類為CCD與CMOS,兩者的介紹與區別見鏈接。兩者都首先使用鏡頭將光傳輸至底層的傳感器矩陣上,運用每個像素上的光電二極管來感光。具體區別來講,CCD中一列內的多個二極管集合在一起傳輸電壓信號,而CMOS中每個二極管都有自己的電流電壓轉換器。通常彩色相機通常使用顏色過濾的技術,每個像素僅負責RGB的一種,並通過后期處理來還原顏色,具體見下圖。此外也有一些彩色相機選擇用三層感應分別查看RGB顏色並加以混合。

掃描儀與之前的彩色打印機類似,以三層RGB的線形長條光感板為基礎,進行移動來進行掃描。同樣,每輪掃描后向前移動的距離越小則越高清。

2. 圖片、像素與幾何

從數學意義上來講,像素是一個點采樣(point sample),而不是一個小方塊,具體可以見此論文,主要論述的觀點是像素是離散的,顯示圖片是由離散至連續的一個濾波器(reconstruction filter)轉換過程。從圖形學的應用中,早期可以將像素看為一個擁有單一顏色的小方塊。數學上我們認為對於任何點\((x,y)\)可以通過函數\(I(x,y):R \rightarrow V\)得到一些信息,例如光的強度或者RGB值。在實際處理時,點采樣通過計算該點周圍的平均值來得到結果,從而將有限的離散點轉換為連續的圖像。

就圖形API來講,點的坐標可能有所區別,因為歷史原因可能存在左上角為\((0,0)\)的情況,坐標可能是所對應方格的左下角或者中心,需要額外注意。本書將整數坐標放置在對應方格的中心上。

2.1 像素值

一個像素可能記錄一個灰度值或者三個RGB值,如果利用浮點數記錄則需要64位儲存,若僅使用\(0-255\)的范圍則僅需要8位,容量縮小了八倍(如果對比32位浮點則可以縮小4倍)。我們通常將利用浮點值記錄的方法稱為HDR(high dynamic range)而利用整數的成為LDR(low dynamic range)。通常一個像素的值有以下分類,比較重要的是1位的灰度值,8位RGB(共24位)的彩色普通圖片與16位或32位的高清HDR圖片。

縮小位數通常會導致兩個問題,分別是clipping和banding。其中clipping指的是真實顏色的亮度或其他值大於被設置的最大值,導致真實顏色被像素值的最大值所取代,額外的亮度或其他值被切割(clip)掉了。另外banding指的是將真實值取整至最接近的像素值時,存在連續值變換為離散值的問題,當精度較低時會存在突兀的顏色變換線或者條狀物(band)。這一現象在靜態時難以觀察,但在動畫或者視頻中較為明顯。

2.2 顯示器的亮度與Gamma值

顯示器的輸出亮度與輸入的亮度值之間存在非線性關系,具體可以看作“輸出亮度等於最大亮度的\(\alpha^{\gamma}\)倍”,其中\(\alpha\)\([0,1]\)內的輸入亮度。實際計算時不需要太過准確,通常選用黑白之間的半值進行計算,可得\(0.5=\alpha^{\gamma}\)\(\gamma = \frac{ln 0.5}{ln \alpha}\)。計算\(\alpha\)時一般讓用戶或測試員調整\(\alpha\)值,直到灰度圖與黑白相間的棋盤圖從遠處看擁有類似的亮度,具體對比見下圖。

在知道\(\gamma\)值后,我們可以通過\(a'=a^{\frac{1}{\gamma}}\)的調整來使得輸出亮度與輸入亮度值變動比例一致。因為亮度值通常依然利用0至255去代表\(\frac{i}{255}\),最后通常會有256個不同的亮度。在需要高度掌握最終亮度的時候可能需要一一確認加以調整,並根據角度需求添加額外的變化。

3. RGB顏色

此部分主要表示RGB三色可以通過加法混合的方法得到絕大部分顏色。就拓展而言可以見以下鏈接。
-色料三原色與色光三原色,主要一個是發光的加法疊光,一個是反射的減法疊光。
-調色
-其他色彩空間

4. Alpha合成

對於同一個像素上前后景圖片進行疊加操作時需要使用Alpha合成的特殊操作。簡單一點的是前景完全覆蓋背景,更為復雜一點的是前景僅在像素的一半或一部分覆蓋背景,就像遠處樹林的葉子一樣。因此,像素覆蓋率成為了一個合成時的重要因素,並得到簡單明了的公式"最終顏色=像素覆蓋率前景顏色+(1-像素覆蓋率)背景顏色"。因為像素覆蓋率用\(\alpha\)來表示,這個方法與公式也被稱為Alpha合成。Alpha合成也可以使用其他的公式,具體可以見此論文

因為每個像素的Alpha值可能不同,可以用一個矩陣或者灰度圖來進行儲存,稱之為Alpha遮罩或者透明度遮罩。除開常規的RGB的三個顏色通道外,Alpha值可以當作第四個Alpha通道。以下是一個Alpha通道的一個示范。

4.1 圖片的儲存格式

在RGB每一個8位儲存的基礎上,往往通過壓縮的形式減少儲存成本。 主要分為無損壓縮和有損壓縮,有損壓縮會無法回復的丟失部分信息。以下附鏈接介紹
-BMP,GIF,JPEG,PNG,SVG,WebP
-TIFF
-PPM
因為圖片類型的不同往往需要調整輸入和輸出方法,但是通常圖片讀取庫已經寫好了不同的使用方法,可以直接使用。對於快速開發來講可以直接使用最簡單直接的ppm讀值。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM