了解了圖像原理之後,我們就介紹分別有哪些圖像的種類,而這些圖像又以檔案的形式儲存在硬碟裏面,或者傳輸於網路之上.
關於檔案格式的最主要考量就是壓縮的方法,我們介紹壓縮的分類與應用上的考量.
數位圖像的像素 (1/2)
這是壹份所謂 320 x 200 的圖,它的「寬度」(Width) 有 320 像素 (pixels),「高度」 (Height) 有 200 條線 (lines).
先解釋像素 (pixel).壹張像這個小醜圖的數位圖像,其實是由壹堆小粒小粒的色彩排出來的.
每壹小粒色彩代表壹個單壹的顏色,這些不同的顏色湊在壹起,被我們看到,就在腦袋裏產生了意義,因而認出來這是壹個化了妝的小醜.
每壹小粒色彩,用壹個,兩個,或三個數來紀錄,稱為壹個「像素」.
數位圖像的像素 (2/2)
所謂 320 x 200 的圖,就是寬有 320 個像素,高有 200條線 的圖,想像那些像素排成壹個矩形,總***有 64,000 個像素.
230 x 200 的像素矩形太大了,所以我們故意把它縮小成壹張 40 x 25 的圖.
如果覺得它太小了看不見,可以放大八倍 (寬和高各放大 8 倍) 來看看.
256 色圖
縮小的小醜圖是壹張『256 色』圖,寬有 40 個像素,高有 25 個像素.每個像素用壹個介於 1 和 256 之間的數表示.
256 色圖
『256 色』圖的像素代表的不是色彩,而是色彩的編號.以這張小醜圖為例,它壹***只用到 81 種不同的顏色.
灰階圖 (1/2)
現在展示壹張灰階的小醜圖.它的寬度是 320,高度是 200,也就是仍然有 64,000 個像素,但是此時是個『灰階』圖,每個像素就直接紀錄那個位置的灰色亮度.
我們可以觀察,這張『灰階』圖的像素數值與『256 色』圖的像素數值相同,電腦只是將像素的數值解釋成『亮度』,就造成了這張圖.
灰階圖 (2/2)
『灰階』圖不需要另外儲存色盤,每個像素直接紀錄那個位置的灰色亮度.因為電腦知道,譬如說 64 號亮度的 RGB 亮度就是 (64, 64, 64).為了能夠列出像素的數值,我們還是只看那張縮小的黑白版小醜圖 .
高彩圖
所謂『高彩』圖就是同壹張圖裏面可以顯示不超過 65,536 種不同的顏色.很顯然地,像小醜圖這種總***只有 64,000 個像素的圖,不太可能用到這麼多不同的顏色.『高彩』圖的每個像素要用兩個數表示,每個數都介於 0 和 255 之間.
…..
全彩圖
所謂的『全彩』圖就是同壹張圖裏面可以顯示所有可能的色彩,也就是 255 x 255 x 255 ***約壹千六百萬色.很顯然地,像小醜圖這種總***只有 64,000 個像素的圖,根本不可能用到這麼多不同的顏色 (每個像素只代表壹個顏色).
…
圖像的『資料量』
所謂圖像的『資料量』就是壹張數位圖像在記憶體內所占有的空間.
資料量越大的圖像,通常在螢幕上看起來越大,色彩也越豐富,但是它占用的記憶體就越多.
視覺上我們認為數位圖像有兩個維度:寬 (Width) 和高 (Height).
現在要接受壹個新的概念:數位圖像其實有三個維度:除了寬度和高度之外,還有『深度』或者『厚度』.
而數位圖像的資料量,就是這三個維度的乘積,也就是體積.
數位圖像的深度
決定圖像資料量的第三個維度就是選用的色彩豐富程度,術語稱作深度 (Depth).
其實深度就是每個像素代表幾個數的意思.色彩最單調的就是『灰階』圖,它的深度是 1.
比『灰階』圖多壹點點色彩的是『256 色』圖,它的深度理論上也是 1,因為每個像素只代表壹個數:色盤上的編號.
但是因為含有色盤的關系,經驗上我們就說其深度是 1.01.這是壹個我不打算講清楚細節的地方.
『高彩』圖的深度是 2,『全彩』圖的深度是 3.
圖像的資料量
壹張數位圖像的資料量,就是上述寬,高,深所形成的立方體體積,而單位是 Byte (『字元』或『位元組』).電腦的術語中,稱 1024 Byte 為壹個『千』Byte,記做 KB (kilo-byte);又稱 1024 個 KB,或者大約壹百萬個 Byte 為 MB (mega-byte).
以壹張 320 x 200 的『灰階』圖為例,其資料量就是 320 * 200 * 1 = 64,000 byte 也就是 62.5KB.
以壹張 320 x 200 的『全彩』圖為例,其資料量就是 320 * 200 * 3 = 192000 byte 也就是 187.5KB.
檔案與壓縮
在這張圖像,軟體和檔案之間的關系示意圖上,我們看到電腦以『檔案』的形式儲存數位圖像於磁碟機內,或者傳輸數位圖像於網際網路上.
負責儲存或傳輸的是作業系統 (OS),例如 MS-Windows 98, ME, XP 之類的.
但是負責展現圖像的軟體,例如 MS-IE,檔案總管,ACDsee 或 PhotoImpact 之類的,卻要負責把檔案內容轉換成像素的數值,若是遇到『256 色』圖,還要處理色盤.
壓縮比
檔案通常不會壹五壹十地儲存像素 (和色盤) 所對應的數值,而是儲存經過壓縮的像素數值.
壓縮的過程其實是按照壹種數學函數,把像素的數值按照函數規則映射到另壹種數值.
我們使用電腦,應該已經知道每個檔案的性質之中,有所謂的『檔案大小』,也是用 Byte 作單位來計量.
壓縮之後的數位圖像通常會變得比較小,也就是說檔案大小應該會小於圖像的資料量.變小的比率就是『壓縮比』.
無失真(Lossless)壓縮與破壞性(Losssy)壓縮 (1/2)
無失真壓縮與破壞性壓縮 (2/2)
圖片格式的壓縮法 (1/2)
圖片格式的壓縮法 (2/2)
圖像的呈現
在這個可愛的動畫裏面,我們提示:是監視器『跑去拿』VRAM 裏面的指示,而不是電腦將指示從 VRAM 『送給』監視器.監視器每隔壹小段時間就去電腦裏面拿 VRAM 裏面的指示,然後按照只是在螢幕上掃射各種不同的顏色.因為它掃得很快,我們的眼睛因為視覺暫留的關系,就覺得那個畫面是靜止的.
像素和光點
像素和光點之間的對應,正常的時候是 1 對 1,也就是壹個像素就對應壹粒光點.讓我們重溫縮小版的小醜圖,當像素與光點是正常地 1:1 的時候,實在是很小,看不見.如果有必要的話,軟體可以讓壹個像素對應更多粒光點,例如 1:64.這就是『強迫放大』壹張圖像的效果.雖然圖像的畫面是放大了,不過壹點也沒有變得比較清楚.
所謂監視器的『解析度』就是每列有幾個光點,壹***有幾列光點.例如 800 x 600 的解析度就是在監視器上,每列有 800 個光點,壹*** 600 列.
影像媒體
影像原理
影像格式
數位圖像導論
圖片JPEG影像類型討論
圖形壓縮,解壓縮探討JPEG 原理
圖片JPEG影像類型討論 (1/3)
目前影像壓縮的方法有很多種,基本上可以分為「無失真」及「有失真」兩類.例如我們常見的PCX ,GIF ,TIFF ,及TGA 等格式就是屬於無失真的影像壓縮格式.
它們利用傳統檔案的壓縮原理及技術來處理影像壓縮,所以壓縮前的原始影像與壓縮後還原的結果絲毫不差.
至於我們所熟知的 JPEG (Joint Photographic Coding Expert Group) 則是屬於有失真的影像壓縮格式.
圖片JPEG影像類型討論 (2/3)
JPEG 由國際標準組織(International Organization for Standardization ,簡稱ISO) 和國際電話電報諮詢委員會( International Telegraph and Telephone Consultative Committee ,簡稱CCITT) 所建立的壹個數位影像壓縮標準,主要是用於靜態影像壓縮方面.
JPEC 采用可失真(Lossy) 編碼法的概念,利用數位余弦轉換法(Discrete Cosine Transform,簡稱DCT) 將影像資料中較不重要的部份去除,僅保留重要的資訊,以達到高壓縮率的目的.
雖然被JPEC 處理後的影像會有失真的現象,但由於JPEG 的失真比例可以利用參數來加以控制;壹般而言,當壓縮率( 即壓縮過後的體積除以原有資料量的結果) 在5% ~15% 之間時,JPEC 依然能保證其適當的影像品質,這是壹般無失真壓縮法所作不到的.
圖片JPEG影像類型討論 (3/3)
我們將以下圖的陽明山風景為例,利用不同的JPEC 壓縮參數(PHOTOIMPACT 5.0 漸進式 1024 X 768)來壓縮它,其壓縮的結果如圖二和圖三.圖二的影像品質與原圖十分接近,而壓縮率已達65% ;至於圖三,其壓縮率為25% ,壓縮效果良好,但此時影像品質已經有明顯的失真了.
JPEG100 原圖100%_ 671K
JPEG65 壓縮65%_ 341K
JPEG25 壓縮25% 261K
JPEG原理 (1/3)
JPEG所根據的原理是:人的眼睛對影像中亮度的變化最為敏感,遠遠超過對顏色變化的感覺,所以,JPEG儲存的,並不是壹點壹點的顏色,而是亮度及顏色的"變化率".藉著變化速率的曲線的還原,來重現大部分的影像,尤其是影像的"感覺".
對大部分JPEG型態的壓縮來說,第壹步要先將RGB轉換成亮度與色度,最常見的是CCIR601格式,也就是所謂Y,Cb,,Cr格式,Y代表亮度,Cb代表藍色色度,Cr代表紅色色度( 也可用U代表Cb, V代表Cr,即所謂YUV格式),轉換公式如下:
Y = 0.299R + 0.587G + 0.114B
Cb = 0.1687R – 0.3313G + 0.5B
Cr = 0.5R – 0.4187G – 0.0813B
這是壹個不會失真的轉換,Y,Cb,Cr還是可以完全轉換回R,G,B的.
JPEG原理 (2/3)
由於人眼對亮度遠比對色度敏感,所以在壓縮和重建影像時,可以用份量較多的Y,而減少Cb 及Cr的份量.
轉換後的數值,仍然是壹個圖點壹個圖點的格式.必須將相鄰近的點合並,透過DCT(Discrete Cosine transform)轉換,將點資料轉換成"變化速率"的曲線資料,再將這曲線數位化(這就就是造成JPEG失真所在的地方) .
數位化時所用的系數,決定了資料流失量的多寡,及影像品質的好壞,這些被數位化後的資料,還可以再用Huffman或其他編碼方式,予以壓縮,存成JPEG檔案.還原的步驟剛好逆其道而行.
首先,將JPEG資料解壓縮,變成變化速率數位曲線,然後使用逆向的DCT轉換,重建影像.原本壹些低階的位元,可能無法重現,都用0加以補足.
JPEG原理 (3/3)
由於Y,Cb,Cr的重要性不同,JPEG允許三者各自賦予不同的份量.例如:以壹個2x2點矩陣(***4個圖點)來說,Y值最好有4個(***有4個圖點),但Cb,Cr各自只記錄壹個(平均值),這樣壹來,原本在RGB模式,需要4x3=12 bytes的資料,現在只需要4+1+1=6 bytes,無形中節省了50%的空間,但影響影像品質並沒有太多.
致於DCT,其實是有點類似傅立葉轉換,將原本屬於振幅強度的資料陣列,轉換成強度變化頻率的資料陣列.
JPEG使用線性數位化,也就是每壹個DCT轉換值,都被壹個不同的數位化系數去除,再四拾五入到壹個整數,以儲存起來.在這個過程中,變化率陣列的每壹個元素,將會視其頻率大小,除以壹個不同的系數.
對人眼來說,比較緩慢的變化,會比快速變化更被註意.這個過程會把資料的長度大幅降低.所以變化率越大的元素,壓縮比越大.這也就是JPEG對於不規則影像( 如電視畫面,照片等)比較有利的地方.
影像媒體
影像原理
影像格式
數位圖像導論
圖片JPEG影像類型討論
圖形壓縮,解壓縮探討JPEG 原理
圖形壓縮,解壓縮探討JPEG 原理
JPEG是壹種對彩色或灰階之類連續色調圖形作壓縮和解壓縮的標準.
這個標準是由ISO/IEC JTC1/SC29 WG10所訂定.JPEG可應用在許多如研討畫圖片,彩色電傳,影像資料庫,桌上出版系統,多媒體及醫療等的靜態影像的壓縮之上.
JPEG最基本的概念就是將影像的壹個區塊從空間域轉換為頻率域.壹般而言影像高頻部份的量會比低頻部份要小得多.
而由於人們的眼睛對空間高頻的部份較不敏感,因此高頻部份就可以用較大量化處理的方式來產生較為粗略的影像來表示,由於較粗略的影像需要較少的位元,於是可以大幅度地減少要儲存或通訊的資訊量,而縮減後的資訊影像也的確可以為人們的視覺感官所接受.
影像壓縮原理
資料的壓縮方法可分為無損壓縮 (lossless compression) 與略損壓縮(lossy compression)兩類.
對於資料本身在壓縮後再還原必須保持原貌的需求上,必須使用無損壓縮,無損壓縮有不得失真的限制,因此壓縮效果有限.對於文數字,程式等資料型態適用.
影像資料的壹個特性是空間冗余(Spatial Redundancy).
壹般來說,在同壹張畫面上必有壹些***通特性(Correlation),也許是色彩上的,也許是幾何上的,或是其它特徵值得到的.
所謂的空間冗余去除,就是要識別出畫面中重要的元素,並移除重復且較無影響的元素的動作.
影像壓縮方法概說 (1/2)
首先介紹壹種基本的壓縮方法: 稱為變動長度編碼法(Run Length Encoding,簡稱RLE).
其原理是把資料中重復多次的內容,記錄其內容細節與出現約次數.例如: ABCDEABCDEABCDEABODE,我們可記錄ABCDE出現4次,兩項資訊,是不是比直接記錄重復的ABCDE要精簡呢
變動長度編碼法的演算法相當簡單,除了可以直接應用外也可以與其他壓縮方法搭配.
但變動長度編碼法不壹定能達到壓縮的效果,有時候遇到重復性很低的資料,壓過的大小可能不減反增.
影像壓縮方法概說 (2/2)
In order to understand the correlation between pixels in an image and hence decide which data to eliminate mathematical transforms are used.
目前使用在影像壓縮的最普及數學轉換為離散余弦轉換 (DCT,Discrete Cosine Transform) .
DCT是用來分析影像資料中較不重要的部分,然後用量化(Quantization)方法將其去除,僅保留重要資訊,來達到高壓縮的效果,
而其失真比例可以利用量化參數來加以控制.此方法用於JPEG格式之影像,當壓縮比在5% ~ 15%間時,依然能保證其適當的影像品質.此壹壓縮方法的發展,讓影像媒體的儲存與應用更加地方便.
JPEG Compression with Different Quality
Original
QF=20
QF=50
QF=30
QF=80
QF=10
原圖與壓縮圖比較
原圖與壓縮圖比較 cont'd
原圖與壓縮圖比較 cont'd
原圖與壓縮圖比較 cont'd
原圖與壓縮圖比較 cont'd
原圖與壓縮圖比較 cont'd
Subjective View of Titanic
Baseline JPEG Encoding
Convert to
8x8 block
Subtract
128 in pixel
DCT
Transform
Quantize
Zigzag/
RLC
Entropy
Encode
DPCM
Encode
DC coefficient
AC Range: -1023 ~ 1023
DC Range: 0 ~ 2048
JPEG 編碼及解碼器
8X8
像素
區塊
FDCT
編碼資料流
JPEG
語法
產生器
無失真壓縮
霍夫曼編碼
失真壓縮
量化處理
斜向
掃描
量化表
霍夫曼
編碼表
FDCT:Forward Discrete Transform(正離散余弦轉換)
8X8
像素
區塊
IDCT
編碼資料流
JPEG
語法
產生器
無失真壓縮
霍夫曼編碼
反量化
斜向
掃描
量化表
霍夫曼
編碼表
IDCT:Inverse Discrete Transform(逆離散余弦轉換)
JPEG編碼方式
為了因應不同的通訊及儲存狀況下之應用,JPEG提供二四種不同的編碼方式:
1,循序模式 (Sequential mode)
2,漸進模式(Progressive mode)
3,層模式(Hierarchical mode)
4,無失真模式(Losslessmode)
1,循序模式(Sequential mode)
循序模式編碼的方式將影像以掃瞄方式由左至右由上而下作編碼,這個循序模式的編碼架構簡單而有效率,對大部份的應用程式是相當合宜的,架構僅對資料作單壹次處理的方式作影像編碼的工作,也就是所謂的循序編碼的模式了.這種方式對每個輸入資料提供8位元的解析度.
Sequential Coding Example
Sequential Coding Example
2,漸進模式(Progressive mode)
影像的建立無論是采取從模糊的低頻影像到清晰的高頻影像 (即頻譜選擇 方式),或是自最大有效位元到最小有效位元的建立方式(即連續近似法), 漸進模式的編碼都對影像作多重掃描來作處理.以頻譜選擇方式為例,影 像以DCT轉換到頻率域,而壹些頻寬可立即從DCT系數得到,由於只執行壹次DCT,因此在這樣的方式下只有壹種的空間解析度.漸進模式對於在頻寬受到限制的頻道上作影像傳輸相當有用,使用者可以先看到粗略的影像,再決定是否需要最終的影像.
漸進模式解壓縮後影像呈現的方式,先出現模糊的低頻影像,而後再顯現清晰的高頻影像.這種的編碼方式滿足了許多應用程式漸進呈現顯示,算術編碼以及對解析度 (如12位元)的較高需求,算術編碼法提供了比Huffman編碼法有5-10%更好的壓縮.
另外此模式也對循序編碼和八位元的解析度提供了支援.
Progressive Coding Example
Progressive Coding Example
3,階層模式(Hierarchical mode)
階層模式的編碼方式乃是將影像以低空間解析度的影像先作編碼,再以此低解析度影像為基礎對較高解析度影像與低解析度影像問的差異作編碼以得到較高解析度的編碼影像.
相同壹個影像可以以階層模式作好幾種不同解析度的編碼,階層模式可以同時滿足各種具有不同容量的設備上,使得即使低價的設備也可以將此壹多解析度的影像作解碼後得到其所能達到的最佳品質.
相較之下.漸進模式只能采用單壹解析度作影像的重建與顯現,階層模式的確為各種不同的設備提供了更佳的強性與解析度.
Hierarchical Coding Example
4,無失真模式 (Lossless Mode)
所謂的無失真表示了此模式可以將影像原原本本地將影像還原重建回來.
為了重建時能得到和原來完全壹樣的影像,在無失真模式下並沒有使用DCT,也因此無失真模式的壓縮率比使用DCT作壓縮處理的失真方式要低得多.
這種模式壹般只用在壹些如重要的醫療影像等對影像有無失真需求的場合之中,而各個像素的數值從二位元到十六位元都可以.
另外這種的處理模式對循序編碼也提供支援,使用者可選擇Huffman編碼或算術編碼的方式作處理.
Lossless Coding
Predictor
Entropy Encoder
Huffman
Table
Source Image
Compressed Data
Lossless encoder
亮度與色度 (1/2)
雖然JPEG並未對色彩空間作規劃,但大部份的JPEG應用程式都不用RGB的表示方式.而以YCbCr來表示;另外,也由於人的視力系統對色度的敏銳度比較不高 .
因此以 YCbCr 色度的方式來表示可以再做壹次作取樣(Subsampling) 來減低資訊量,這也是普遍使用YCbCr.另壹個重要的理由.如下圖所示的.
4:4:4格式代表 YCbCr 原來完整的資訊.而色度表示法可以再次取樣以4:2:2或4:2:0格式來表達;4:2:2格式將原本的資訊旦減少為三分之二.
而4:2:0格式則可以將資訊三減少為壹半.雖然色度的資訊量減少了.但對人的視覺神經而言卻僅僅感受到微小的差別而已.
亮度與色度 (2/2)
離散余弦轉換
為了說明執行離散余弦轉換 (DCT: Discrete Cosine Transform)的影響,我們將以自壹張圖取下的壹個小區塊 (8X8像素)的亮度資料,並將之轉換成空間頻率域,而後再自每個像素值中減去128以期每個像素都可以符合在DCT演算法中的8位元運算範圍.經過轉換後的二維 (2D)系數如下所示,這個2D頻率域的橫軸以fx表示而縱軸以fy來表示;左上角代表DC的系數值 -80,低頻部份包含了區塊的大部份能量.而對人眼較不敏感的高頻部份,則通常含有較低的能量.
0
0
0
-2
-4
0
8
0
-2
-2
0
0
0
6
0
12
0
0
-2
0
-4
6
8
-2
0
-2
4
10
-6
-2
0
8
-2
4
4
-4
-12
0
-4
10
2
0
0
0
12
8
-8
24
0
-2
-2
2
6
-6
4
-80
量化 (1/2)
以下所列為 JPEG所建議的量化(Quantization)矩陣,以期能對每秒 30個 720X576像素畫面的 CCIR-601 標準作影像的處理與顯示.
這個矩陣的目的是在對亮度(Luminance)是作量化處理,至於色度(Chrominance)系數則還有另壹個矩陣做處理.
99
103
100
112
98
95
92
72
101
120
121
103
87
78
64
49
92
113
104
81
64
55
35
24
77
103
109
68
56
37
22
18
62
80
87
51
29
22
17
14
56
69
57
40
24
16
13
14
55
60
58
26
19
14
12
12
61
51
40
24
16
10
11
16
量化 (2/2)
在亮度系數的量化方面,每個 2D DCT 系數除以相對的量化矩陣的值,在四舍五入後得到如下的量化後 DCT 系數:
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
0
0
0
0
-1
0
0
1
0
0
0
0
1
1
-1
2
0
0
0
0
0
0
0
-5
舉例來說,DC系數 -80除以其所相對應值16後得到量化值 -5.註意量化後區塊高頻部份出現許多零值,代表人類視覺系統對高頻部份並不敏感.由於四舍五入的部份並不能在解碼時重現,因此這個步驟將是個失真的過程.
斜向掃描 (Zigzag Scanning) (1/2)
區塊在量化之後,只有低頻的部份有非零值,為了能進壹步地減少儲存空間與通訊容量的大小.
盡可能地將零值放在壹起,使得處理時能以幾個零來表示而非個別的處理每個零.
因此運用如下圖的方式做斜向掃描 (zigzag scan),這種斜向掃描的掃描線乃是沿著空間頻率大小增加的方向作掃描的.
使得許多的零可以被串接在壹起,達到原來的期望.
斜向掃描(2/2)
對量化後系數作斜向掃描的情形,斜向掃描僅針對AC系數部份作處理.
也就是跳過左上角DC系數的部份,至於DC系數的部分則另行以下圖的方式與其所相鄰的區塊作掃描.
字流長度與霍夫曼編碼法
掃描完成後,接下來的工作便運用字流長度 (Run length)與霍夫曼(Huffman)編碼法混用的方式,以期使得位元的數量能夠達到最佳化的目的.首先自斜向掃描處理取得序列的AC系數,如上例得到以下數列:0,2,1,-1,0,0,1,0,1,1,0,0,1,0,0,0,-1,0,0,-1,..,0,而後字流長度或稱為變動長度(Variable length)編碼對這個序列作編碼以更進壹步地降低所需的位元數,編碼的數值所得到的是由零值的數目按著非零值的數所構成,而得到如下的編碼序列格式:
(字流中零值的數目,下個非零值的數)
因此,如上面的例子就可以編碼成:(1,2) ,(0,1) , (0,-1) , (2,1) , (1,1) , (0,1),(0,1),(2,1),(3,-1),End of Block (EOB) 來表示;而後再以霍夫曼編碼減少為了要代表字流長度編碼的位元數.
霍夫曼編碼是依統計所推論出來讓最常用的碼以最少的位元數來表示,JPEG為亮度與色度的DC及AC的霍夫曼編碼提供了壹個表格以為處理之需;另外在作階層模式或無失真模式編碼時,也可藉以算術編碼表的運用來取代霍夫曼編碼表.