第5章 彩色數字圖像基礎

第5章 彩色數字圖像基礎

  圖像是多媒體中攜帶信息的極其重要的媒體,有人發表過統計資料,認爲人們獲取的信息的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

顏色

0

0

0

0

160

0

0

1

0

0

128

160

240

60

2

0

128

0

80

240

60

3

0

128

128

120

240

60

4

128

0

0

0

240

60

5

128

0

128

200

240

60

6

128

128

0

40

240

60

 褐色(Dark yellow)

7

192

192

192

160

0

180

 白(Light gray)

8

128

128

128

160

0

120

 深灰(Dark Gray)

9

0

0

255

160

240

120

 淡藍(Light blue)

10

0

255

0

80

240

120

 淡綠(Light green)

11

0

255

255

120

240

120

 淡青(Light cyan)

12

255

0

0

0

240

120

 淡紅(Light Red)

13

255

0

255

200

240

120

14

255

255

0

40

240

120

 黃(yellow)

15

255

255

255

160

0

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 相減色

青色

品紅

黃色

相減色

0

0

0

0

0

1

0

1

0

品紅

0

1

1

1

0

0

1

0

1

1

1

0

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 亮度量化值表

17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99

表5-06 色度量化值

16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 104 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99

  3. Z字形編排


圖5-17 量化DCT係數的編排

0

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)進行編碼,
    DeltaDC(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

0

0

-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。

139 144 149 153 155 155 155 155 144 151 153 156 159 156 156 156 150 155 160 163 158 156 156 156 159 161 162 160 160 159 159 159 159 160 161 162 162 155 155 155 161 161 161 161 160 157 157 157 162 162 161 163 162 157 157 157 162 162 161 161 163 158 158 158

 源圖像樣本

144 146 149 152 154 156 156 156 148 150 152 154 156 156 156 156 155 156 157 158 158 157 156 155 160 161 161 162 161 159 157 155 163 163 164 163 162 160 158 156 163 164 164 164 162 160 158 157 160 161 162 162 162 161 159 158 158 159 161 161 162 161 159 158

重構圖像樣本

235.6 -1.0 -12.1 -5.20 2.1 -1.7 -2.7 1.3 -22.6 -18.5 -6.2 -6.2 -2.9 -0.1 0.4 -1.2 -10.9 -9.3 -1.6 1.5 0.2 0.9 -0.6 -0.1 -7.1 -1.9 0.2 1.5 0.9 -0.1 0.0 0.3 -0.6 -0.8 1.5 1.6 -0.1 -0.7 0.6 1.3 1.8 -0.2 -1.6 -0.3 -0.8 1.5 1.0 -1.0 -1.3 -0.4 -0.3 -1.5 -0.5 1.7 1.1 -0.8 -6.2 1.6 -3.8 -1.8 1.9 1.2 -0.6 -0.4

 FDCT係數

240 0 -10 0 0 0 0 0 -24 0 0 0 0 0 0 0 -14 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

逆量化後的係數

16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99

 量化表

16 11 10 16 24 40 51 61 12 12 14 19 26 58 60 55 14 13 16 24 40 57 69 56 14 17 22 29 51 87 80 62 18 22 37 56 68 109 103 77 24 35 55 64 81 104 113 92 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 99

量化表

15 0 -1 0 0 0 0 0 -2 -1 0 0 0 0 0 0 -1 -1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

規格化量化係數

15 0 -1 0 0 0 0 0 -2 -1 0 0 0 0 0 0 -1 -1 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 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

規格化量化係數

圖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分量分別進行變換,後者是把整個像素當作查找表的索引值進行彩色變換。
發佈了12 篇原創文章 · 獲贊 2 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章