圖像是多媒體中攜帶資訊的極其重要的媒體,有人發表過統計資料,認為人們擷取的資訊的70%來自視覺系統,實際就是圖像和電視。但是,圖像數字化之後的資料量非常大,在網際網路上傳輸時很費時間,在盤上存儲時很占“地盤”,是以就必須要對圖像資料進行壓縮。壓縮的目的就是要滿足存儲容量和傳輸帶寬的要求,而付出的代價是大量的計算。幾十年來,許多科技工作者一直在孜孜不倦地尋找更有效的方法,用比較少的資料量表達原始的圖像。
圖像資料壓縮主要根據下面兩個基本事實來實作的。一個是圖像資料中有許多重複的資料,使用數學方法來表示這些重複資料就可以減少資料量;另一個事實是人的眼睛對圖像細節和顔色的辨認有一個極限,把超過極限的部分去掉,這也就達到壓縮資料的目的。利用前一個事實的壓縮技術就是無損壓縮技術,利用後一個事實的壓縮技術就是有損壓縮技術。實際的圖像壓縮是綜合使用各種有損和無損壓縮技術來實作的。
為了了解人的視覺系統如何認識彩色、計算機系統中如何表示彩色圖像進而更有效地減少資料量,本章将介紹表示數字彩色圖像所需要的最基本的常識,以及目前使用得相當廣泛的JPEG壓縮标準。
5.1 視角系統對顔色的感覺
顔色是視覺系統對可見光的感覺結果。可見光是波長在380 nm~780 nm之間的電磁波,我們看到的大多數光不是一種波長的光,而是由許多不同波長的光組合成的。研究表明,人的視網膜有對紅、綠、藍顔色敏感程度不同的三種錐體細胞,另外還有一種在光功率極端低的條件下才起作用的杆狀體細胞,是以顔色隻存在于眼睛和大腦。在計算機圖像進行中,杆狀細胞還沒有扮演什麼角色。人的視覺系統對顔色的感覺可歸納出如下幾個特性:
1.眼睛本質上是一個照相機。人的視網膜(human retina)通過神經元來感覺外部世界的顔色,每個神經元或者是一個對顔色敏感的錐體(cone),或者是一個對顔色不敏感的杆狀體(rod)。
2.紅、綠和藍三種錐體細胞對不同頻率的光的感覺程度不同,對不同亮度的感覺程度也不同,如圖5-01所示。這就意味着,人們可以使用數字圖像處理技術來降低資料率而不使人感到圖像品質明顯下降。
圖5-01 視覺系統對顔色和亮度的響應特性[1][3]
3.自然界中的任何一種顔色都可以由R,G,B這3種顔色值之和來确定,它們構成一個3維的RGB矢量空間。這就是說,R,G,B的數值不同混合得到的顔色就不同,也就是光波的波長不同。圖5-02表示,使用基色波長為700 nm(紅色)、546.1 nm(綠色)和435.8 nm(藍色)時,在可見光範圍裡,相加混色産生某一波長的光波所需要的三種基色的數值。圖中的縱坐标表示标稱機關光強度,橫坐标表示波長,負值表示某些波長(即顔色)不能精确地通過相加混色得到。使用等量的三基色可比對等能量的白光。
圖5-02 産生波長不同的光所需要的三基色值[1]
5.2 圖像的顔色模型
一個能發出光波的物體稱為有源物體,它的顔色由該物體發出的光波決定,使用RGB相加混色模型;一個不發光波的物體稱為無源物體,它的顔色由該物體吸收或者反射哪些光波決定,用CMY相減混色模型。
5.2.1 顯示彩色圖像用RGB相加混色模型
電視機和計算機顯示器使用的陰極射線管(cathode raytube,CRT)是一個有源物體。CRT使用3個電子槍分别産生紅(Red)、綠(Green)和藍(Blue)三種波長的光,并以各種不同的相對強度綜合起來産生顔色,如圖5-03所示。組合這三種光波以産生特定顔色稱為相加混色,稱為RGB相加模型。相加混色是計算機應用中定義顔色的基本方法。
圖5-03 彩色顯象管産生顔色的原理
從理論上講,任何一種顔色都可用三種基本顔色按不同的比例混合得到。三種顔色的光強越強,到達我們眼睛的光就越多,它們的比例不同,我們看到的顔色也就不同,沒有光到達眼睛,就是一片漆黑。當三基色按不同強度相加時,總的光強增強,并可得到任何一種顔色。某一種顔色和這三種顔色之間的關系可用下面的式子來描述:
顔色=R(紅色的百分比)+G(綠色的百分比)+B(藍色的百分比)
當三基色等量相加時,得到白色;等量的紅綠相加而藍為0值時得到黃色;等量的紅藍相加而綠為0時得到品紅色;等量的綠藍相加而紅為0時得到青色。這些三基色相加的結果如圖5-04所示。
圖5-04 相加混色
一幅彩色圖像可以看成由許多的點組成的,如圖5-05所示。圖像中的單個點稱為像素(pixel),每個像素都有一個值,稱為像素值,它表示特定顔色的強度。一個像素值往往用R,G,B三個分量表示。如果每個像素的每個顔色分量用二進制的1位來表示,那末每個顔色的分量隻有“1”和“0”這兩個值。這也就是說,每種顔色的強度是100%,或者是0%。在這種情況下,每個像素所顯示的顔色是8種可能出現的顔色之一,如表5-01所示。
圖5-05 一幅圖像由許多像素組成
表5-01相加色
RGB | 顔色 |
000 | 黑 |
001 | 藍 |
010 | 綠 |
011 | 青 |
100 | 紅 |
101 | 品紅 |
110 | 黃 |
111 | 白 |
對于标準的電視圖形陣列(Video graphics array,VGA)适配卡的16種标準顔色,其對應的R,G,B值如表5-02所示。在Microsoft公司的Windows中,用代碼0~15表示。在表中,代碼1~6表示的顔色比較暗,它們是用最大光強值的一半産生的顔色;9~15是用最大光強值産生的。
表5-02 16色VGA調色闆的值
代碼 | R | G | B | H | S | L | 顔色 |
160 | |||||||
1 | 128 | 160 | 240 | 60 | |||
2 | 128 | 80 | 240 | 60 | |||
3 | 128 | 128 | 120 | 240 | 60 | ||
4 | 128 | 240 | 60 | ||||
5 | 128 | 128 | 200 | 240 | 60 | ||
6 | 128 | 128 | 40 | 240 | 60 | 褐色(Dark yellow) | |
7 | 192 | 192 | 192 | 160 | 180 | 白(Light gray) | |
8 | 128 | 128 | 128 | 160 | 120 | 深灰(Dark Gray) | |
9 | 255 | 160 | 240 | 120 | 淡藍(Light blue) | ||
10 | 255 | 80 | 240 | 120 | 淡綠(Light green) | ||
11 | 255 | 255 | 120 | 240 | 120 | 淡青(Light cyan) | |
12 | 255 | 240 | 120 | 淡紅(Light Red) | |||
13 | 255 | 255 | 200 | 240 | 120 | ||
14 | 255 | 255 | 40 | 240 | 120 | 黃(yellow) | |
15 | 255 | 255 | 255 | 160 | 240 | 高亮白(Bright white) | |
淡品紅(Light Magenta) | |||||||
品紅(Magenta) | |||||||
紅(Red) | 青(Cyan) | 綠(Green) | 藍(Blue) |
黑(Black)
在表5-02中,每種基色的強度是用8位表示的,是以可産生224=16 777 216種顔色。但實際上要用一千六百多萬種顔色的場合是很少的。在多媒體計算機中,除用RGB來表示圖像之外,還用色調-飽和度-亮度(hue-saturation-lightness,HSL)顔色模型。
在HSL模型中,H定義顔色的波長,稱為色調;S定義顔色的強度(intensity),表示顔色的深淺程度,稱為飽和度;L定義摻入的白光量,稱為亮度。用HSL表示顔色的重要性,是因為它比較容易為畫家所了解。若把S和L的值設定為1,當改變H時就是選擇不同的純顔色;減小飽和度S時,就可展現摻入白光的效果;降低亮度時,顔色就暗,相當于摻入黑色。是以在Windows中也用了HSL表示法,16色VGA調色闆的值也表示在表5-02中。
5.2.2 列印彩色圖像用CMY相減混色模型
用彩色墨水或顔料進行混合,這樣得到的顔色稱為相減色。在理論上說,任何一種顔色都可以用三種基本顔料按一定比例混合得到。這三種顔色是青色(Cyan)、品紅(Magenta)和黃色(Yellow),通常寫成CMY,稱為CMY模型。用這種方法産生的顔色之是以稱為相減色,乃是因為它減少了為視覺系統識别顔色所需要的反射光。
在相減混色中,當三基色等量相減時得到黑色;等量黃色(Y)和品紅(M)相減而青色(C)為0時,得到紅色(R);等量青色(C)和品紅(M)相減而黃色(Y)為0時,得到藍色(B);等量黃色(Y)和青色(C)相減而品紅(M)為0時,得到綠色(G)。這些三基色相減結果如圖5-06所示。
圖5-06 相減混色
彩色列印機采用的就是這種原理,印刷彩色圖檔也是采用這種原理。按每個像素每種顔色用1位表示,相減法産生的8種顔色如表5-03所示。由于彩色墨水和顔料的化學特性,用等量的三基色得到的黑色不是真正的黑色,是以在印刷術中常加一種真正的黑色(black ink),是以CMY又寫成CMYK。
表5-03 相減色
青色 | 品紅 | 黃色 | 相減色 |
白 | |||
1 | 黃 | ||
1 | 品紅 | ||
1 | 1 | 紅 | |
1 | 青 | ||
1 | 1 | 綠 | |
1 | 1 | 藍 | |
1 | 1 | 1 | 黑 |
相加色與相減色之間有一個直接關系,如表5-04所示。利用它們之間的關系,可以把顯示的顔色轉換成輸出列印的顔色。相加混色和相減混色之間成對出現互補色。例如,當RGB為1∶1∶1時,在相加混色中産生白色,而CMY為1∶1∶1時,在相減混色中産生黑色。從另一個角度也可以看它們的互補性。從表5-04中可以看到,在RGB中的顔色為1的地方,在CMY對應的位置上,其顔色值為0。例如RGB為0∶1∶0時,對應CMY為1∶0∶1。
表5-04 相加色與相減色的關系
相加混色 | 相減混色 | 生成的顔色 |
RGB | CMY | |
000 | 111 | 黑 |
001 | 110 | 藍 |
010 | 101 | 綠 |
011 | 100 | 青 |
100 | 011 | 紅 |
101 | 010 | 品紅 |
110 | 001 | 黃 |
111 | 000 | 白 |
RGB彩色空間和CMY彩色空間也可以使用圖5-07所示的立方體來表示。
圖5-07 RGB彩色空間和CMY彩色空間的表示法
5.3 彩色空間的線性變換标準
為了使用人的視角特性以降低資料量,通常把RGB空間表示的彩色圖像變換到其他彩色空間。目前采用的彩色空間變換有三種:YIQ, YUV和YCrCb。每一種彩色空間都産生一種亮度分量信号和兩種色度分量信号,而每一種變換使用的參數都是為了适應某種類型的顯示裝置。其中,YIQ适用于NTSC彩色電視制式,YUV适用于PAL和SECAM彩色電視制式,而YCrCb适用于計算機用的顯示器。
5.3.1 YUV與YIQ模型
在彩色電視制式中,使用YUV和YIQ模型來表示彩色圖像。在PAL彩色電視制式中使用YUV模型,其中的YUV不是那幾個英文單詞的組合詞,而是符号,Y表示亮度,UV用來表示色差,U、V是構成彩色的兩個分量;在NTSC彩色電視制式中使用YIQ模型,其中的Y表示亮度,I、Q是兩個彩色分量。
YUV表示法的重要性是它的亮度信号(Y)和色度信号(U、V)是互相獨立的,也就是Y信号分量構成的黑白灰階圖與用U、V信号構成的另外兩幅單色圖是互相獨立的。由于Y、U、V是獨立的,是以可以對這些單色圖分别進行編碼。此外,黑白電視能接收彩色電視信号也就是利用了YUV分量之間的獨立性。
YUV表示法的另一個優點是可以利用人眼的特性來降低數字彩色圖像所需要的存儲容量。人眼對彩色細節的分辨能力遠比對亮度細節的分辨能力低。若把人眼剛能分辨出的黑白相間的條紋換成不同顔色的彩色條紋,那末眼睛就不再能分辨出條紋來。由于這個原因,就可以把彩色分量的分辨率降低而不明顯影響圖像的品質,因而就可以把幾個相鄰像素不同的彩色值當作相同的彩色值來處理,進而減少所需的存儲容量。
例如,要存儲RGB 8∶8∶8的彩色圖像,即R、G和B分量都用8位二進制數表示,圖像的大小為640×480像素,那末所需要的存儲容量為921 600位元組。如果用YUV來表示同一幅彩色圖像,Y分量仍然為640×480,并且Y分量仍然用8位表示,而對每四個相鄰像素(2×2)的U、V值分别用相同的一個值表示,那末存儲同樣的一幅圖像所需的存儲空間就減少到460 800位元組。這實際上也是圖像壓縮技術的一種方法。
無論是用YIQ、YUV和YCrCb還是用HSL模型來表示彩色圖像,由于現在所有的顯示器都采用RGB值來驅動,這就要求在顯示每個像素之前,須要把彩色分量值轉換成RGB值。這種轉換需要花費大量的計算時間。這是一個要在軟硬體設計中需要綜合考慮的因素。
5.3.2 YUV與RGB彩色空間變換
在考慮人的視覺系統和陰極射線管(CRT)的非線性特性之後,RGB和YUV的對應關系可以近似地用下面的方程式表示:
Y = 0.299R + 0.587G + 0.114B
U = - 0.147R- 0.289G + 0.436B
V = 0.615R - 0.515G - 0.100B
或者寫成矩陣的形式,
5.3.3 YIQ與RGB彩色空間變換
RGB和YIQ的對應關系用下面的方程式表示:
Y = 0.299R + 0.587G + 0.114B
I = 0.596R - 0.275G - 0.321B
Q = 0.212R - 0.523G + 0.311B
或者寫成矩陣的形式,
5.3.4 YCrCb與RGB彩色空間變換
數字域中的彩色空間變換與模拟域的彩色空間變換不同。它們的分量使用Y、Cr和Cb來表示,與RGB空間的轉換關系如下:
Y=0.299R+0.578G+0.114B
Cr=(0.500R-0.4187G-0.0813B)+128
Cb=(-0.1687R-0.3313G+0.500B)+128
或者寫成矩陣的形式,
RGB與YCrCb之間的變換關系可寫成如下的形式:
5.4 圖像的三個基本屬性
描述一幅圖像需要使用圖像的屬性。圖像的屬性包含分辨率、像素深度、真/僞彩色、圖像的表示法和種類等。本節介紹前面三個特性。
5.4.1 分辨率
我們經常遇到的分辨率有兩種:顯示分辨率和圖像分辨率。
1. 顯示分辨率
顯示分辨率是指顯示屏上能夠顯示出的像素數目。例如,顯示分辨率為640×480表示顯示屏分成480行,每行顯示640個像素,整個顯示屏就含有307200個顯像點。螢幕能夠顯示的像素越多,說明顯示裝置的分辨率越高,顯示的圖像品質也就越高。除像手提式那樣的計算機用液晶顯示LCD(liquid crystal display)外,一般都采用CRT顯示,它類似于彩色電視機中的CRT。顯示屏上的每個彩色像點由代表R,G,B三種模拟信号的相對強度決定,這些彩色像點就構成一幅彩色圖像。
計算機用的CRT和家用電視機用的CRT之間的主要差别是顯像管玻璃面上的孔眼掩模和所塗的熒光物不同。孔眼之間的距離稱為點距(dot pitch)。是以常用點距來衡量一個顯示屏的分辨率。電視機用的CRT的平均分辨率為0.76 mm,而标準SVGA顯示器的分辨率為0.28 mm。孔眼越小,分辨率就越高,這就需要更小更精細的熒光點。這也就是為什麼同樣尺寸的計算機顯示器比電視機的價格貴得多的原因。
早期用的計算機顯示器的分辨率是0.41 mm,随着技術的進步,分辨率由0.41→0.38→0.35→0.31→0.28一直到0.26 mm以下。顯示器的價格主要集中展現在分辨率上,是以在購買顯示器時應在價格和性能上綜合考慮。
2. 圖像分辨率
圖像分辨率是指組成一幅圖像的像素密度的度量方法。對同樣大小的一幅圖,如果組成該圖的圖像像素數目越多,則說明圖像的分辨率越高,看起來就越逼真。相反,圖像顯得越粗糙。
在用掃描器掃描彩色圖像時,通常要指定圖像的分辨率,用每英寸多少點(dots per inch,DIP)表示。如果用300 DIP來掃描一幅8″×10″的彩色圖像,就得到一幅2400×3000個像素的圖像。分辨率越高,像素就越多。
圖像分辨率與顯示分辨率是兩個不同的概念。圖像分辨率是确定組成一幅圖像的像素數目,而顯示分辨率是确定顯示圖像的區域大小。如果顯示屏的分辨率為640×480,那末一幅320×240的圖像隻占顯示屏的1/4;相反,2400×3000的圖像在這個顯示屏上就不能顯示一個完整的畫面。
這裡順便說一下,在顯示一幅圖像時,有可能會出現圖像的寬高比(aspect radio)與顯示屏上顯示出的圖像的寬高比不一緻這種現象。這是由于顯示裝置中定義的寬高比與圖像的寬高比不一緻造成的。例如一幅200×200像素的方形圖,有可能在顯示裝置上顯示的圖不再是方形圖,而變成了矩形圖。這種現象在20世紀80年代的顯示裝置上經常遇到。
5.4.2 像素深度
像素深度是指存儲每個像素所用的位數,它也是用來度量圖像的分辨率。像素深度決定彩色圖像的每個像素可能有的顔色數,或者确定灰階圖像的每個像素可能有的灰階級數。例如,一幅彩色圖像的每個像素用R,G,B三個分量表示,若每個分量用8位,那末一個像素共用24位表示,就說像素的深度為24,每個像素可以是224=16 777 216種顔色中的一種。在這個意義上,往往把像素深度說成是圖像深度。表示一個像素的位數越多,它能表達的顔色數目就越多,而它的深度就越深。
雖然像素深度或圖像深度可以很深,但各種VGA的顔色深度卻受到限制。例如,标準VGA支援4位16種顔色的彩色圖像,多媒體應用中推薦至少用8位256種顔色。由于裝置的限制,加上人眼分辨率的限制,一般情況下,不一定要追求特别深的像素深度。此外,像素深度越深,所占用的存儲空間越大。相反,如果像素深度太淺,那也影響圖像的品質,圖像看起來讓人覺得很粗糙和很不自然。
在用二進制數表示彩色圖像的像素時,除R,G,B分量用固定位數表示外,往往還增加1位或幾位作為屬性(Attribute)位。例如,RGB 5∶5∶5表示一個像素時,用2個位元組共16位表示,其中R,G,B各占5位,剩下一位作為屬性位。在這種情況下,像素深度為16位,而圖像深度為15位。
屬性位用來指定該像素應具有的性質。例如在CD-I系統中,用RGB 5∶5∶5表示的像素共16位,其最高位(b15)用作屬性位,并把它稱為透明(Transparency)位,記為T。T的含義可以這樣來了解:假如顯示屏上已經有一幅圖存在,當這幅圖或者這幅圖的一部分要重疊在上面時,T位就用來控制原圖是否能看得見。例如定義T=1,原圖完全看不見;T=0,原圖能完全看見。
在用32位表示一個像素時,若R,G,B分别用8位表示,剩下的8位常稱為α通道(alpha channel)位,或稱為涵蓋(overlay)位、中斷位、屬性位。它的用法可用一個預乘α通道(premultiplied alpha)的例子說明。假如一個像素(A,R,G,B)的四個分量都用規一化的數值表示,(A,R,G,B)為(1,1,0,0)時顯示紅色。當像素為(0.5,1,0,0)時,預乘的結果就變成(0.5,0.5,0,0),這表示原來該像素顯示的紅色的強度為1,而現在顯示的紅色的強度降了一半。
用這種辦法定義一個像素的屬性在實際中很有用。例如在一幅彩色圖像上疊加文字說明,而又不想讓文字把圖涵蓋掉,就可以用這種辦法來定義像素,而該像素顯示的顔色又有人把它稱為混合色(key color)。在圖像産品生産中,也往往把數字電視圖像和計算機生産的圖像混合在一起,這種技術稱為視圖混合(video keying)技術,它也采用α通道。
5.4.3 真彩色、僞彩色與直接色
搞清真彩色、僞彩色與直接色的含義,對于編寫圖像顯示程式、了解圖像檔案的存儲格式有直接的指導意義,也不會對出現諸如這樣的現象感到困惑:本來是用真彩色表示的圖像,但在VGA顯示器上顯示的圖像顔色卻不是原來圖像的顔色。
1. 真彩色(true color)
真彩色是指在組成一幅彩色圖像的每個像素值中,有R,G,B三個基色分量,每個基色分量直接決定顯示裝置的基色強度,這樣産生的彩色稱為真彩色。例如用RGB 5∶5∶5表示的彩色圖像,R,G,B各用5位,用R,G,B分量大小的值直接确定三個基色的強度,這樣得到的彩色是真實的原圖彩色。
如果用RGB 8:8:8方式表示一幅彩色圖像,就是R,G,B都用8位來表示,每個基色分量占一個位元組,共3個位元組,每個像素的顔色就是由這3個位元組中的數值直接決定,如圖5-08(a)所示,可生成的顔色數就是224=16 777 216種。用3個位元組表示的真彩色圖像所需要的存儲空間很大,而人的眼睛是很難分辨出這麼多種顔色的,是以在許多場合往往用RGB 5:5:5來表示,每個彩色分量占5個位,再加1位顯示屬性控制位共2個位元組,生成的真顔色數目為215 = 32K。
在許多場合,真彩色圖通常是指RGB 8:8:8,即圖像的顔色數等于224,也常稱為全彩色(full color)圖像。但在顯示器上顯示的顔色就不一定是真彩色,要得到真彩色圖像需要有真彩色顯示擴充卡,目前在PC上用的VGA擴充卡是很難得到真彩色圖像的。
圖5-08 真彩色和僞彩色圖像之間的差别
2. 僞彩色(pseudo color)
5.5 圖像的種類
5.5.1 矢量圖與點位圖
在計算機中,表達圖像和計算機生成的圖形圖像有兩種常用的方法:一種叫做是矢量圖(vector based imgc5)法,另一種叫點位圖(bit mapped imgc5)法。雖然這兩種生成圖的方法不同,但在顯示器上顯示的結果幾乎沒有什麼差别。
矢量圖是用一系列計算機指令來表示一幅圖,如畫點、畫線、畫曲線、畫圓、畫矩形等。這種方法實際上是數學方法來描述一幅圖,然後變成許多的數學表達式,再程式設計,用語言來表達。在計算顯示圖時,也往往能看到畫圖的過程。繪制和顯示這種圖的軟體通常稱為繪圖程式(draw programs)。
矢量圖有許多優點。例如,當需要管理每一小塊圖像時,矢量圖法非常有效;目标圖像的移動、縮小放大、旋轉、拷貝、屬性的改變(如線條變寬變細、顔色的改變)也很容易做到;相同的或類似的圖可以把它們當作圖的構造塊,并把它們存到圖庫中,這樣不僅可以加速畫的生成,而且可以減小矢量圖檔案的大小。
然而,當圖變得很複雜時,計算機就要花費很長的時間去執行繪圖指令。此外,對于一幅複雜的彩色照片(例如一幅真實世界的彩照),恐怕就很難用數學來描述,因而就不用矢量法表示,而是采用點位圖法表示。
點位圖法與矢量圖法很不相同。其實,點位圖已經在前面幾節作了詳細介紹,它是把一幅彩色圖分成許多的像素,每個像素用若幹個二進制位來指定該像素的顔色、亮度和屬性。是以一幅圖由許多描述每個像素的資料組成,這些資料通常稱為圖像資料,而這些資料作為一個檔案來存儲,這種檔案又稱為圖像檔案。如要畫點位圖,或者編輯點位圖,則用類似于繪制矢量圖的軟體工具,這種軟體稱為畫圖程式(paint programs)。
點位圖的擷取通常用掃描器,以及錄影機、錄相機、雷射視盤與視訊信号數字化卡一類裝置,通過這些裝置把模拟的圖像信号變成數字圖像資料。
點位圖檔案占據的存儲器空間比較大。影響點位圖檔案大小的因素主要有兩個:即前面介紹的圖像分辨率和像素深度。分辨率越高,就是組成一幅圖的像素越多,則圖像檔案越大;像素深度越深,就是表達單個像素的顔色和亮度的位數越多,圖像檔案就越大。而矢量圖檔案的大小則主要取決圖的複雜程度。
矢量圖與點位圖相比,顯示點位圖檔案比顯示矢量圖檔案要快;矢量圖側重于“繪制”、去創造,而點位圖偏重于“擷取”、去“複制”;矢量圖和點位圖之間可以用軟體進行轉換,由矢量圖轉換成點位圖采用光栅化(rasterizing)技術,這種轉換也相對容易;由點位圖轉換成矢量圖用跟蹤(tracing)技術,這種技術在理論上說是容易,但在實際中很難實作,對複雜的彩色圖像尤其如此。
5.5.2 灰階圖與彩色圖
灰階圖(gray-scale imgc5)按照灰階等級的數目來劃分。隻有黑白兩中顔色的圖像稱為單色圖像(monochrome imgc5),如圖5-09所示的标準圖像。圖中的每個像素的像素值用1位存儲,它的值隻有“0”或者“1”,一幅640×480的單色圖像需要占據37.5 KB的存儲空間。
圖5-10是一幅标準灰階圖像。如果每個像素的像素值用一個位元組表示,灰階值級數就等于256級,每個像素可以是0~255之間的任何一個值,一幅640×480的灰階圖像就需要占據300 KB的存儲空間。
圖5-09 标準單色圖 圖5-10 标準灰階圖
彩色圖像(color imgc5)可按照顔色的數目來劃分,例如256色圖像和真彩色(224=16 777 216種顔色)等。圖5-11是一幅用256色标準圖像轉換成的256級灰階圖像,彩色圖像的每個像素的R、G和B值用一個位元組來表示,一幅640×480的8位彩色圖像需要307.2 KB的存儲空間;圖5-12是一幅真彩色圖像轉換成的256級灰階圖像,每個像素的R,G,B分量分别用一個位元組表示,一幅640×480的真彩色圖像需要921.6 KB的存儲空間。
許多24位彩色圖像是用32位存儲的,這個附加的8位叫做alpha通道,它的值叫做alpha值,它用來表示該像素如何産生特技效果。
使用真彩色表示的圖像需要很大的存儲空間,在網絡傳輸也很費時間。由于人的視角系統的顔色分辨率不高,是以在沒有必要使用真彩色的情況下就盡可能不用。
圖5-11 256色标準圖像轉換成的灰階圖
圖5-12 24位标準圖像轉換成的灰階圖
5.6 伽馬(g )校正
5.6.1 γ的概念
如果電子錄影機的輸出電壓與場景中光的強度成正比,如果CRT發射的光的強度與輸入電壓成正比,…,凡是生成和顯示圖像的所有部件都是線性的話,那麼圖像處理就會變得比較容易,圖像程式員也就不會那麼辛苦了!然而,現實世界并不是那樣,目前幾乎所有的CRT顯示裝置、攝影膠片和許多電子照相機的光電轉換特性都是非線性的。幸好這些非線性部件都有一個能夠反映各自特性的幂函數,它的一般形式是:
y=xn => 輸出=(輸入)γ
式中的γ(gamma)是幂函數的指數,它用來衡量非線性部件的轉換特性。這種特性稱為幂-律(power-law)轉換特性。按照慣例,“輸入”和“輸出”都縮放到0~1之間。其中,0表示黑電平,1表示顔色分量的最高電平。對于特定的部件,人們可以度量它的輸入與輸出之間的函數關系,進而找出γ值。
實際的圖像系統是由多個部件組成的,這些部件中可能會有幾個非線性部件。如果所有部件都有幂函數的轉換特性,那麼整個系統的傳遞函數就是一個幂函數,它的指數γ等于所有單個部件的γ的乘積。如果圖像系統的整個g =1,輸出與輸入就成線性關系。這就意味在重制圖像中任何兩個圖像區域的強度之比率與原始場景的兩個區域的強度之比率相同,這似乎是圖像系統所追求的目标:真實地再現原始場景。但實際情況卻不完全是這樣。
當這種再生圖像在“明亮環境”下,也就是在其他白色物體的亮度與圖像中白色部分的亮度幾乎相同的環境下觀看時,γ=1的系統的确可使圖像看起來像“原始場景”一樣。但是某些圖像有時在“黑暗環境”下觀看所獲得的效果會更好,放映電影和投影幻燈片就屬于這種情況。在這種情況下,γ值不是等于1而通常認為γ≈ 1.5,人的視角系統所看到的場景就好像是“原始場景”。根據這種觀點,投影幻燈片的γ值就設計為1.5左右,而不是1。
還有一種環境稱為中間環境的“暗淡環境”,這種環境就像房間中的其他東西能夠看到,但比圖像中白色部分的亮度更暗。看電視的環境和計算機房的環境就屬于這種情況。在這種情況下,通常認為再現圖像需要γ» 1.25才能看起來像“原始場景”。
5.6.2 γ校正
所有CRT顯示裝置都有幂-律轉換特性,如果生産廠家不加說明,那麼它的γ值大約等于2.5。使用者對發光的磷光材料的特性可能無能為力去改變,因而也很難改變它的γ值。為使整個系統的γ值接近于使用所要求的γ值,起碼就要有一個能夠提供γ校正的非線性部件,用來補償CRT的非線性特性。
在所有廣播電視系統中,γ校正是在攝象機中完成的。最初的NTSC電視标準需要攝象機具有γ=1/2.2=0.45的幂函數,現在采納γ=0.5的幂函數。PAL和SECAM電視标準指定攝象機需要具有γ=1/2.8=0.36的幂函數,但這個數值已顯得太小,是以實際的攝象機很可能會設定成γ=0.45或者0.5。使用這種攝象機得到的圖像就預先做了校正,在γ=2.5的CRT螢幕上顯示圖像時,螢幕圖像相對于原始場景的γ大約等于1.25。這個值适合“暗淡環境”下觀看。
過去的時代是“模拟時代”,而今已進入“數字時代”,進入計算機的電視圖像依然帶有γ=0.5的校正,這一點可不要忘記。雖然帶有γ值的電視在數字時代工作得很好,尤其是在特定環境下建立的圖像在相同環境下工作,可是在其他環境下工作時,往往會使顯示的圖像讓人看起來顯得太亮或者太暗,是以在可能條件下就要做γ校正。
在什麼地方做γ校正是人們所關心的問題。從擷取圖像、存儲成圖像檔案、讀出圖像檔案直到在某種類型的顯示螢幕上顯示圖像,這些個環節中至少有5個地方可有非線性轉換函數存在并可引入γ值。例如,
●camera_gamma:攝象機中圖像傳感器的γ(通常γ=0.4或者0.5)
●encoding_gamma:編碼器編碼圖像檔案時引入γ
●decoding_gamma :譯碼器讀圖像檔案時引入γ
●LUT_gamma:圖像幀緩存查找表中引入γ
●CRT_gamma:CRT的γ(通常γ=2.5)
在數字圖像顯示系統中,由于要顯示的圖像不一定就是錄影機來的圖像,假設這種圖像的γ值等于1,如果encoding_gamma=0.5,CRT_gamma=2.5和decoding_gamma,LUT_gamma都為1.0時,整個系統的γ就近似等于1.25。
根據上面的分析,為了在不同環境下觀看到“原始場景”可在适當的地方加入γ校正。
5.7 JPEG壓縮編碼
5.7.1 JPEG算法概要
JPEG(Joint Photographic Experts Group) 是一個由 ISO和IEC兩個組織機構聯合組成的一個專家組,負責制定靜态的數字圖像資料壓縮編碼标準,這個專家組開發的算法稱為JPEG算法,并且成為國際上通用的标準,是以又稱為JPEG标準。JPEG是一個适用範圍很廣的靜态圖像資料壓縮标準,既可用于灰階圖像又可用于彩色圖像。
JPEG專家組開發了兩種基本的壓縮算法,一種是采用以離散餘弦變換(Discrete Cosine Transform,DCT)為基礎的有損壓縮算法,另一種是采用以預測技術為基礎的無損壓縮算法。使用有損壓縮算法時,在壓縮比為25:1的情況下,壓縮後還原得到的圖像與原始圖像相比較,非圖像專家難于找出它們之間的差別,是以得到了廣泛的應用。例如,在V-CD和DVD-Video電視圖像壓縮技術中,就使用JPEG的有損壓縮算法來取消空間方向上的備援資料。為了在保證圖像品質的前提下進一步提高壓縮比,近年來JPEG專家組正在制定JPEG 2000(簡稱JP 2000)标準,這個标準中将采用小波變換(wavelet)算法。
JPEG壓縮是有損壓縮,它利用了人的視角系統的特性,使用量化和無損壓縮編碼相結合來去掉視角的備援資訊和資料本身的備援資訊。JPEG算法框圖如圖5-13所示,壓縮編碼大緻分成三個步驟:
1.使用正向離散餘弦變換(forward discrete cosinetransform,FDCT)把空間域表示的圖變換成頻率域表示的圖。
2.使用權重函數對DCT系數進行量化,這個權重函數對于人的視覺系統是最佳的。
3.使用霍夫曼可變字長編碼器對量化系數進行編碼。
譯碼或者叫做解壓縮的過程與壓縮編碼過程正好相反。
JPEG算法與彩色空間無關,是以“RGB到YUV變換”和“YUV到RGB變換”不包含在JPEG算法中。JPEG算法處理的彩色圖像是單獨的彩色分量圖像,是以它可以壓縮來自不同彩色空間的資料,如RGB, YCbCr和CMYK。
圖5-13 JPEG壓縮編碼-解壓縮算法框圖
5.7.2 JPEG算法的主要計算步驟
JPEG壓縮編碼算法的主要計算步驟如下:
●正向離散餘弦變換(FDCT)。
●量化(quantization)。
●Z字形編碼(zigzag scan)。
●使用差分脈沖編碼調制(differential pulse codemodulation,DPCM)對直流系數(DC)進行編碼。
●使用行程長度編碼(run-length encoding,RLE)對交流系數(AC)進行編碼。
●熵編碼(entropy coding)。
1. 正向離散餘弦變換
下面對正向離散餘弦變換(FDCT)變換作幾點說明。
(1) 對每個單獨的彩色圖像分量,把整個分量圖像分成8×8的圖像塊,如圖5-14所示,并作為兩維離散餘弦變換DCT的輸入。通過DCT變換,把能量集中在少數幾個系數上。
圖5-14 離散餘弦變換
(2) DCT變換使用下式計算,
...... (5-1)
它的逆變換使用下式計算,
...... (5-2)
上面兩式中,
C(u), C(v) = 1/
, 當u,v = 0;
C(u), C(v) = 1, 其他。
f(i, j)經DCT變換之後,F(0,0)是直流系數,其他為交流系數。
(3) 在計算兩維的DCT變換時,可使用下面的計算式把兩維的DCT變換變成一維的DCT變換,
............ (5-3)
.............(5-4)
圖5-15 兩維DCT變換方法
實際的計算方法可參看[6]
2. 量化
量化是對經過FDCT變換後的頻率系數進行量化。量化的目的是減小非“0”系數的幅度以及增加“0”值系數的數目。量化是圖像品質下降的最主要原因。
對于有損壓縮算法,JPEG算法使用如圖5-16所示的均勻量化器進行量化,量化步距是按照系數所在的位置和每種顔色分量的色調值來确定。因為人眼對亮度信号比對色差信号更敏感,是以使用了兩種量化表:如表5-05所示的亮度量化值和表5-06所示的色差量化值。此外,由于人眼對低頻分量的圖像比對高頻分量的圖像更敏感,是以圖中的左上角的量化步距要比右下角的量化步距小。表5-05和表5-06中的數值對CCIR 601标準電視圖像已經是最佳的。如果不使用這兩種表,你也可以把自己的量化表替換它們。
圖5-16 均勻量化器
表5-05 亮度量化值表
| 表5-06 色度量化值
|
3. Z字形編排
圖5-17 量化DCT系數的編排
1 | 5 | 6 | 14 | 15 | 27 | 28 | |
2 | 4 | 7 | 13 | 16 | 26 | 29 | 42 |
3 | 8 | 12 | 17 | 25 | 30 | 41 | 43 |
9 | 11 | 18 | 24 | 31 | 40 | 44 | 53 |
10 | 19 | 23 | 32 | 39 | 45 | 52 | 54 |
20 | 22 | 33 | 38 | 46 | 51 | 55 | 60 |
21 | 34 | 37 | 47 | 50 | 56 | 59 | 61 |
35 | 36 | 48 | 49 | 57 | 58 | 62 | 63 |
圖5-18 量化DCT系數的序号
4. 直流系數的編碼
8×8圖像塊經過DCT變換之後得到的DC直流系數有兩個特點,一是系數的數值比較大,二是相鄰8×8圖像塊的DC系數值變化不大。根據這個特點,JPEG算法使用了差分脈沖調制編碼(DPCM)技術,對相鄰圖像塊之間量化DC系數的內插補點(Delta)進行編碼,
Delta=DC(0, 0)k-DC(0, 0)k-1........ (5-5)
5. 交流系數的編碼
量化AC系數的特點是1× 64矢量中包含有許多“0”系數,并且許多“0”是連續的,是以使用非常簡單和直覺的遊程長度編碼(RLE)對它們進行編碼。
JPEG使用了1個位元組的高4位來表示連續“0”的個數,而使用它的低4位來表示編碼下一個非“0”系數所需要的位數,跟在它後面的是量化AC系數的數值。
6. 熵編碼
使用熵編碼還可以對DPCM編碼後的直流DC系數和RLE編碼後的交流AC系數作進一步的壓縮。
在JPEG有損壓縮算法中,使用霍夫曼編碼器來減少熵。使用霍夫曼編碼器的理由是可以使用很簡單的查表(lookup table)方法進行編碼。壓縮資料符号時,霍夫曼編碼器對出現頻度比較高的符号配置設定比較短的代碼,而對出現頻度較低的符号配置設定比較長的代碼。這種可變長度的霍夫曼碼表可以事先進行定義。
[例5.1] 表5-07所示的是DC碼表符号舉例。如果DC的值(Value)為4,符号SSS用于表達實際值所需要的位數,實際位數就等于3。
表5-07 DC碼表符号舉例
Value | SSS |
-1, 1 | 1 |
-3,-2, 2,3 | 2 |
-7..-4, 4..7 | 3 |
7. 組成位資料流
5.7.3 應用JPEG算法舉例
有關JPEG算法更詳細的資訊和資料,請參看JPEG标準ISO/IEC 10918。下面是使用JPEG算法對一個8×8圖像塊計算得到的結果。在這個例子中,計算正向離散餘弦變換(FDCT)之前對源圖像中的每個樣本資料減去了128,在逆向離散餘弦變換之後對重構圖像中的每個樣本資料加了128。
|
|
|
|
|
|
|
|
圖5-19 JPEG壓縮編碼舉例
練習與思考題
- 什麼叫做真彩色和僞彩色?
- PAL制彩色電視使用什麼顔色模型?NTSC制彩色電視使用什麼顔色模型?計算機圖像顯示使用什麼顔色模型?
- 用YUV或YIQ模型來表示彩色圖像的優點是什麼?為什麼黑白電視機可看彩色電視圖像?
- 彩色顯象管使用紅、綠、藍這三種磷光材料發光合成彩色,這就需要把用YUV、YIQ或者YCrCb表示的圖像信号轉換成用RGB表示的圖像信号。分别寫出NTSC彩色電視、PAL彩色電視和計算機圖像顯示與RGB的彩色空間轉換關系式。
- 分别用3,3和2位表示的一幅圖像,問該幅圖像的顔色數目最多是多少?
- 如果有一幅256色的圖像,問該圖的顔色深度是多少?
- 按照JPEG标準的要求,一幅彩色圖像經過JPEG壓縮後還原得到的圖像與原始圖像相比較,非圖像專家難于找出它們之間的差別,問此時的最大壓縮比是多少?
- JPEG壓縮編碼算法的主要計算步驟是:①DCT變換,②量化,③Z字形編碼,④使用DPCM對直流系數(DC)進行編碼,⑤使用RLE對交流系數(AC)進行編碼,⑥熵編碼。假設計算機的精度足夠高,問在上述計算方法中,哪些計算對圖像的品質是有損的?哪些計算對圖像的品質是無損的?
- 什麼叫做γ校正?在計算機中找一幅彩色圖像,使用Office 97中的Microsoft Photo Editor或者其他圖像處理軟體顯示該圖像,然後使用γ校正功能修改γ值,觀察圖像有什麼變化。
參考文獻和站點
- Natravali,A.N.and Haskell,B.G.. Digital Pictures-Representation and Compression. Plenum Press,New York and London,1988.
- ISO/IEC JTC 1. DIS 10918-1,Digital Compression and Coding of Continuous-Tone still imgc5 Part 1,Requirements and Guidelines. July 1992
- Dr. Ze-Nian Li,http://fas.sfu.ca/cs/undergrad/CourseMaterials/CMPT365/index.html,(浏覽日期:1999年1月)
- γ校正:http://www.inforamp.net/~poynton/colour_and_gamma/GammaFAQ.html,(浏覽日期:1999年2月)
- Wallace,G.,The JPEG still Picture Compression Standard. Communications of the ACM,Vol.34,No.4,Apr.1991
- C. Loeffler, A. Ligtenberg and G. Moschytz. Practical Fast 1-D DCT Algorithms with 11 Multiplications. Proc. Int'l. Conf. on Acoustics, Speech, and Signal Processing, 1989 (ICASSP’ 89), pp988-991
JPEG編碼的最後一個步驟是把各種标記代碼和編碼後的圖像資料組成一幀一幀的資料,這樣做的目的是為了便于傳輸、存儲和譯碼器進行譯碼,這樣的組織的資料通常稱為JPEG位資料流(JPEG bitstream)。
量化後的系數要重新編排,目的是為了增加連續的“0”系數的個數,就是“0”的遊程長度,方法是按照Z字形的式樣編排,如圖5-17所示。這樣就把一個8 ´ 8的矩陣變成一個1 ´ 64的矢量,頻率較低的系數放在矢量的頂部。
僞彩色圖像的含義是,每個像素的顔色不是由每個基色分量的數值直接決定,而是把像素值當作彩色查找表( color look- up table,CLUT)的表項入口位址,去查找一個顯示圖像時使用的R,G,B強度值,用查找出的R,G,B強度值産生的彩色稱為僞彩色。
彩色查找表CLUT是一個事先做好的表,表項入口位址也稱為索引号。例如16種顔色的查找表,0号索引對應黑色,... ,15号索引對應白色。彩色圖像本身的像素數值和彩色查找表的索引号有一個變換關系,這個關系可以使用Windows 95/98定義的變換關系,也可以使用你自己定義的變換關系。使用查找得到的數值顯示的彩色是真的,但不是圖像本身真正的顔色,它沒有完全反映原圖的彩色。如圖5-08(b)所示。
3. 直接色(direct color)
每個像素值分成R,G,B分量,每個分量作為單獨的索引值對它做變換。也就是通過相應的彩色變換表找出基色強度,用變換後得到的R,G,B強度值産生的彩色稱為直接色。它的特點是對每個基色進行變換。
用這種系統産生顔色與真彩色系統相比,相同之處是都采用R,G,B分量決定基色強度,不同之處是前者的基色強度直接用R,G,B決定,而後者的基色強度由R,G,B經變換後決定。因而這兩種系統産生的顔色就有差别。試驗結果表明,使用直接色在顯示器上顯示的彩色圖像看起來真實、很自然。
這種系統與僞彩色系統相比,相同之處是都采用查找表,不同之處是前者對R,G,B分量分别進行變換,後者是把整個像素當作查找表的索引值進行彩色變換。