例如:一張A4(210mm×297mm) 幅面的照片,若用中等分辨率(300dpi)的掃描儀按真彩色掃描,其數(shù)據(jù)量為多少?共有210*297/25.4/25.4*300=29002個象素,每個像素是24位,其數(shù)據(jù)量為29002*24=696Kb。
(補(bǔ)充說明dpi代表每平方英寸的點數(shù),1英寸=1000mil=25.4mm)
例如,一幅具有中等分辨率(640*480像素)真彩色圖像(24位/像素),它的數(shù)據(jù)量約為每幀640*480*24=7.37Mb。若要達(dá)到每秒25幀的全動態(tài)顯示要求,每秒所需的數(shù)據(jù)量為184Mb,而且要求系統(tǒng)的數(shù)據(jù)傳輸速率必須達(dá)到184Mb/s,這在目前是無法達(dá)到的。
再例如:對聲音,用16位/樣值的PCM編碼,采樣速率選為44.1kHz,則雙聲道立體聲聲音每秒將有44.1*16*2=176KB的數(shù)據(jù)量,而1分鐘的數(shù)據(jù)量則為176KB*60=10.56MB,而一首歌通常在3-5分鐘,可想而知如果不進(jìn)行數(shù)據(jù)壓縮存儲量和交換量都相當(dāng)驚人。
總之,大數(shù)據(jù)量的圖象信息會給存儲器的存儲容量,通信干線信道的帶寬,以及計算機(jī)的處理速度增加極大的壓力。單純靠增加存儲器容量,提高信道帶寬以及計算機(jī)的處理速度等方法來解決這個問題是不現(xiàn)實的,這時就要考慮壓縮。
壓縮的理論基礎(chǔ)是信息論。從信息論的角度來看,壓縮就是去掉信息中的冗余,即保留不確定的信息,去掉確定的信息(可推知的),也就是用一種更接近信息本質(zhì)的描述來代替原有冗余的描述。這個本質(zhì)的東西就是信息量(即不確定因素)。
壓縮可分為兩大類:第一類壓縮過程是可逆的,也就是說,從壓縮后的圖象能夠完全恢復(fù)出原來的圖象,信息沒有任何丟失,稱為無損壓縮;第二類壓縮過程是不可逆的,無法完全恢復(fù)出原圖象,信息有一定的丟失,稱為有損壓縮。選擇哪一類壓縮,要折衷考慮,盡管我們希望能夠無損壓縮,但是通常有損壓縮的壓縮比(即原圖象占的字節(jié)數(shù)與壓縮后圖象占的字節(jié)數(shù)之比,壓縮比越大,說明壓縮效率越高)比無損壓縮的高。
圖象壓縮一般通過改變圖象的表示方式來達(dá)到,因此壓縮和編碼是分不開的。圖象壓縮的主要應(yīng)用是圖象信息的傳輸和存儲,可廣泛地應(yīng)用于廣播電視、電視會議、計算機(jī)通訊、傳真、多媒體系統(tǒng)、醫(yī)學(xué)圖象、衛(wèi)星圖象等領(lǐng)域。
壓縮編碼的方法有很多,主要分成以下四大類:(1)象素編碼;(2)預(yù)測編碼;(3)變換編碼;(4)其它方法。
所謂象素編碼是指,編碼時對每個象素單獨處理,不考慮象素之間的相關(guān)性。在象素編碼中常用的幾種方法有:(1)脈沖編碼調(diào)制(Pulse Code Modulation,簡稱PCM);(2)熵編碼(Entropy Coding);(3)行程編碼(Run Length Coding);(4)位平面編碼(Bit Plane Coding)。其中我們要介紹的是熵編碼中的哈夫曼(Huffman)編碼和行程編碼(以讀取.PCX文件為例)。
所謂預(yù)測編碼是指,去除相鄰象素之間的相關(guān)性和冗余性,只對新的信息進(jìn)行編碼。舉個簡單的例子,因為象素的灰度是連續(xù)的,所以在一片區(qū)域中,相鄰象素之間灰度值的差別可能很小。如果我們只記錄第一個象素的灰度,其它象素的灰度都用它與前一個象素灰度之差來表示,就能起到壓縮的目的。如248,2,1,0,1,3,實際上這6個象素的灰度是248,250,251,251,252,255。表示250需要8個比特,而表示2只需要兩個比特,這樣就實現(xiàn)了壓縮。
常用的預(yù)測編碼有Δ調(diào)制(Delta Modulation,簡稱DM);微分預(yù)測編碼(Differential Pulse Code Modulation,DPCM),具體的細(xì)節(jié)在此就不詳述了。
所謂變換編碼是指,將給定的圖象變換到另一個數(shù)據(jù)域(如頻域)上,使得大量的信息能用較少的數(shù)據(jù)來表示,從而達(dá)到壓縮的目的。變換編碼有很多,如(1)離散傅立葉變換(Discrete Fourier Transform,簡稱DFT);(2)離散余弦變換(Discrete Cosine Transform,簡稱DCT);(3)離散哈達(dá)瑪變換(Discrete Hadamard Transform,簡稱DHT)。
其它的編碼方法也有很多,如混合編碼(Hybird Coding)、矢量量化(Vector Quantize,VQ) 、LZW算法。在這里,我們只介紹LZW算法的大體思想。