王守業 謝偉軍
JPEG標準,即ISO/IEC1091-1,雖然是對靜態圖像制訂的,但也可用于對連續運動圖像進行壓縮,壓縮時將連續圖像的每一個幀視為一幅靜止圖像進行壓縮,若壓縮器/解壓器速度足夠快,還可以實時處理視頻信號,構成以JPEG為基礎的實時視頻存儲/回放系統。
與MPEG相比,JPEG沒有利用圖像幀間相關信息,壓縮比沒有MPEG高,但JPEG圖像數據以一幀一幀為基礎的特點使得對其處理較為方便。經JPEG壓縮后視頻圖像數據量大大減小,同樣的硬盤可以存儲更長時間圖像,因而在現代數字視頻編輯、處理中大量運用了JPEG文件格式,在因特網上只允許采用兩種圖像格式,JPEG就是其中之一,同時JPEG編碼器的復雜度及成本都遠低于MPEG。因此JPEG編碼器比MPEG編碼器獲得了更為廣泛的實際應用,了解JPEG及JPEG處理器具有重要的現實意義。
JPEG標準提供了4種壓縮算法(或稱4種系統):基線有損壓縮算法、擴展有損壓縮算法、無損壓縮算法、分層壓縮算法,并要求所有的JPEG編碼器和解碼器都必須支持基線算法。
1 JPEG基線系統
1.1 基線系統算法
基線系統即基線有損壓縮算法,是一種基于DCT(Discrete Cosine Transfer)的壓縮算法,其壓縮運算過程為:
(1)以8×8像素塊為單位,對圖像數據進行DCT變換,將數據轉換到頻率域,經變換后得到由64個DCT系統構成的DCT矩陣。
(2)對DCT系統進行排序、量化,經DCT變換后由于能量重新分布,其低頻分量系數變得很大,超出了原來碼長表達范圍,需重新量化以縮小動態范圍,此步驟使數據得到第一次壓縮。量化步長對每個系數是不同的,原則是頻率越低量化步長越小,以便保留較多的低頻分量,DCT矩陣的左上角系數代表了能量較高的圖像低頻分量,其數值較大而量化步長小,越向右下角系數數值越小而量化步長大,如此量化后DCT矩陣右下角高頻部分很多系數變成0,也就是說高頻分量被丟棄,故這種算法是有損的,64個DCT系數的量化步長構成了量化表。在量化前要把DCT系數進行排序變成一維序列,排序按圖1方式進行,稱為“Z”形掃描,其目的是將高頻分量排在一起,經量化后得到連續的0值,在下一步編碼過程中使數據得到最大限度的壓縮。

圖1 “ Z”形掃描
順便說明的是,JPEG壓縮率也是由這一步決定的,只要將量化表乘一固定的因子即可,若因子>1,則量化步長增大,壓縮比也增加,反之壓縮比減小。在運動JPEG中甚至可以根據上一幅圖像壓縮結果動態調整該因子,以使每一幀圖像數據量大致相等。
(3)對量化的DCT系數進行Huffman編碼,這是一種可變長編碼技術,對出現概率高的碼字分配以較短的碼長,對出現概率低的碼字分配以長的碼長,這樣編碼后的數據將大大少于編碼前的數據,從而達到數據壓縮的目的。編碼時用到的編碼表稱為Huffman表。
解壓縮過程與上述壓縮過程相反,首先根據Huffman表對壓縮數據進行Huffman解碼得到量化的DCT系數,再根據量化表進行反量化得到DCT系數,對DCT系數重排序再進行IDCT變換即得到像素數據,當然此時數據與原始數據是有差別的。
1.2 JPEG標記段(mark segment)及標記(mark)
JPEG標準可以用于對不同像素結構、不同色度空間、不同掃描方式圖像進行壓縮;另外,不同應用領域對圖像壓縮的要求不同,采用的量化表及Huffman表也不同。為了便于在不同系統間壓縮數據文件的交換處理,JPEG標準中定義了幾種標記段及相應標記,這些標記段及標記存在于JPEG文件中,供解碼器解碼時識別使用,標記段由標記及段體組成,標記是以FF開頭的字,第二字節為非0的16進制數,標記前可以是若干連續字節的FF,如果在數據中有FF則以FF00表示以便與標記區別。以下是JPEG基線系統中定義的一些標記:
(1)圖像開始標記SOI(Start of Image)FFD8
SOI只有標記沒有段體,表示JPEG數據文件的開始,是JPEG文件的第一個標記,也是JPEG文件的第一個字。
(2)幀開始段SOF0(Start of Frame)FFC0
SOF由FFC0及若干字節組成,定義每個色彩分量使用的量化表及其塊數。
(3)掃描開始段SOS(Start of Scan)FFDA
SOS由FFDA及若干字節組成,定義每個色彩分量使用的Huffman表。
(4)圖像結束標記EOI(End of Image)FFD9
EOI緊隨壓縮數據最后一個字節,也是JPEG文件的最后一個字,表示JPEG數據文件的結束。
(5)應用定義段APPn,FFE0-FFEF
JPEG標準允許一幅圖像數據中最多有16個APP段,APP在壓縮時插入用于說明該JPEG文件的應用場合等,解壓縮時該段直接由解碼器讀出傳遞給使用者。
(6)說明段COM,FFFE
COM也是在壓縮時插入用于該JPEG文件進行注釋、備忘等,解壓縮時該段直接由解碼器讀出傳遞給使用者。
(7)量化表定義段DQT,FFDB,記錄編碼時用到的量化表,解碼時傳遞給解碼器使用。
(8)Huffman表定義段DHT,FFC4,記錄編碼時用到Huffman表,解碼時傳遞給解碼器使用。
以上標記段除A,B,C,D是JPEG標準要求必須有的以外,并不一定都要出現在JPEG文件中,例如若壓縮和解壓縮都采用專用芯片ZR36060時,DQT和DHT存在其RAM中是已知的,故文件中可以不加DQT,DHT以便減少數據量,如果壓縮/解壓縮應用于不同的系統之間,則數據文件必須包含DQT及DHT即量化表和Huffman表,否則解碼器將無法進行解壓縮。
2 JPEG專用芯片ZR36060
JPEG壓縮/解壓縮可以由軟件完成,也可采用專用硬件。自從JPEG標準發表以來很多公司投入了對其專用芯片的開發研究并推出了各自的產品,ZR36060就是其中一種用于JPEG壓縮/解壓縮的專用芯片。
ZR36060是美國ZORAN公司生產的一種單片JPEG編/解碼芯片,其片上集成了光柵—塊(raster to block)、塊—光柵(block to raster)轉換、條(strip)緩存、JPEG編/解碼芯核,FIFO,同步發生器等部件,視頻端口支持8bit或16bit YUV輸入,能進行靜態或運動圖像的JPEG壓縮及解壓縮,廣泛應用于數字相機、視頻捕捉卡、數字視頻處理等領域。
2.1 ZR36060特點圖1
(1)單片結構,片上集成了JPEG壓縮/解壓縮所需全部模塊。
(2)運動JPEG壓縮/解壓縮功能,能夠處理高達25幀/s的方像素及CCIR PAL或30幀/s的方像素及CCIR NTSC實時視頻信號。
(3)多種模式數據率控制,可以很方便地改變壓縮比。
(4)視頻數據輸入端口支持多種視頻解碼器( A/D變換器),如Philips,Brooktree,Samsung等。
(5)視頻總線寬度可以是8或16bit。
(6)同步發生器可工作于主或從模式。
(7)控制端口支持標準微處理器操作。
(8)提供多種片上視頻處理:視頻混合(mix),尺度變換(scale)、剪切(crop)及背景色輸出等。
(9)壓縮數據可以主方式從壓縮數據端口或以從方式從控制端口輸出,兩種方式都有握手功能以便進行數據流控制。
2.2 ZR36060功能框圖及功能
圖2是ZR36060內部框圖,其數據端口有3個分別是:
(1)控制端口:用來完成對ZR36060的初始化,當芯片工作于數據從方式時,還用于輸出或輸入壓縮數據。
(2)視頻端口:壓縮時輸入原始視頻數據,解壓縮時輸出解壓后的視頻數據,除數據線外還有行、場同步,時鐘等必要信號線,同步可工作于主方式或從方式,可直接與視頻解碼器或幀存儲器接口以完成實時的運動JPEG處理。
(3)壓縮數據端口:用于數據主方式時輸出或輸入壓縮數據。

圖2 ZR36060內部框圖
2.3 控制寄存器及標記段RAM
ZR36060中共有1 024個存儲單元,一部分用于控制寄存器,另一部分存放JPEG標準規定的各標記段。
通用控制寄存器000-025H,控制初始化、中斷、數據方式、壓縮/解壓縮、壓縮率、數據文件大小等參數。
視頻寄存器030--051,同步主/從方式、極性,視頻處理、同步發生器參數等。
JPEG標記段060-3FF,SOF,SOS,APP,COM,DRI,DQT,DHT等,這些標記段將根據控制寄存器的內容決定是否插入壓縮數據中以供將來解壓縮使用。
2.4 壓縮/解壓縮數據流
(1)壓縮狀態:壓縮時數字Y,C信號由Y,C總線進入ZR36060,經視頻接口進入條存儲器(Strip Memory)緩存,之后進入JPEG處理機進行壓縮,壓縮后的JPEG數據進入一個長度512的先入先出寄存器(FIFO)緩存,再經數據(數據主方式)或控制端口(數據從方式)輸出。
在數據主方式下,ZR36060輸出CCS信號指示數據有效并輸出CWR信號作為數據選通,外部設備若來不及接收數據可向ZR36060的BUSY引腳發BUSY請求,ZR36060停止向外輸出數據,暫時將數據壓入FIFO,若FIFO溢出,則JPEG處理機停止壓縮,視頻數據暫時壓入條存儲器,當外設撤消BUSY請求后,ZR36060繼續壓縮、輸出數據,如果外設速度太慢導致條存儲器也溢出,則ZR36060將給出錯誤指示并在中斷允許的情況下發出中斷請求。
在數據從方式下,由外設向ZR36060讀數據,BUSY引腳改由ZR36060驅動輸出,若ZR36060內部FIFO無數據可讀,BUSY將變為有效以通知外設,此時外設應等待BUSY變為無效。若外設讀數據速度太慢也將導致出錯,數據壓滿FIFO和條存儲器,其過程與主方式相同。
(2)解壓縮狀態:解壓縮的數據流向與壓縮剛好相反,JPEG數據由數據或控制端口進入FIFO,之后進入JPEG處理機進行解壓縮,視頻數據則通過條存儲器輸出到Y,C總線。
解壓縮狀態下數據的主/從方式、握手信號、出錯機制等均與壓縮狀態相同。
由于采用FIFO、條存儲器,瞬時速度很高的JPEG數據得以緩存,外設可以平均速率訪問ZR36060,降低了對外設的要求。
3 實時視頻存儲/回放系統
3.1 系統構成
以ZR36060為核心,構成了基于JPEG的實時視頻存儲/回放系統,用于電視信號的數字存儲/回放,其框圖如圖3所示。

圖3 實現視頻壓縮/存儲系統框圖
整個系統由以下幾部分構成:
(1)視頻解碼器:視頻解碼器是數字化視頻處理系統中必不可少的一環,其功能是將輸入模擬復合全視頻信號進行色度解碼及A/D變換,輸出數字化的亮度、色度信號。本系統采用了Brooktree公司的BT819A,其亮色分離、色度濾波等均采用數字處理,水平、垂直采樣率、輸出格式等均可通過IIC總線編程設置,該芯片支持處理PAL及NTSC制式,在本系統中將其設置為CCIR601 PAL隔行掃描格式,樣點數為720×288,Y∶U∶V=4∶2∶2。
(2)視頻編碼器:視頻編碼器的功能與視頻解碼器相反,將數字的亮、色信號進行D/A變換并重新編碼為復合全視頻信號或RGB輸出。視頻編碼器在數字電視、數字視頻處理中的作用是恢復模擬信號,用于末級激勵視放或標準視頻輸出。本系統采用Brooktree公司的BT856完成視頻編碼,通過IIC總線可將其編程設置為PAL及NTSC復合視頻或RGB輸出,芯片內還固化了標準75/0/75/0彩色信號,可作為無信號時背景輸出。
(3)存儲器SDRAM及其讀寫控制器:系統使用兩片SDRAM作為數據存儲器,容量為2×8MB,設計存儲15s左右的圖像,平均數據率約1MBps,每幀隔行掃描的圖像數據被壓縮至20kB左右,此壓縮比下的回放圖像在正常觀看距離基本觀察不出失真。
JPEG芯片輸入/輸出數據流瞬時速率最高可達到20 MBps,平均速率最高也達到了2~3 MBps,為了與SDRAM接口,系統使用了一片EPLD來控制數據存取,受MCU及JPEG芯片控制,EPLD產生SDRAM的地址信號、行列選通、讀寫控制等,優點是:控制靈活,結構緊湊,成本低。
(4)JPEG編/解碼器ZR36060:是整個系統的核心,通過視頻總線與BT819A,BT856連接,壓縮數據則通過EPLD控制對SDRAM存取。
(5)微處理器CPU:系統控制由單片微處理器完成,采用了SAMSUNG KS88C8216電視專用單片機,該單片機具有遙控接收、OSD等功能,用于完成對系統各部分初始化操作、壓縮/解壓縮控制、接收遙控指令、提供OSD顯示等。
(6)輸入/輸出切換:完成壓縮/解壓縮之間視頻信號的切換。
3.2 系統功能介紹
(1)存儲功能:系統加電復位后即進入存儲狀態,將視頻信號進行A/D變換、JPEG壓縮、存入SDRAM中,壓縮是連續進行的,SDRAM存儲區采用循環寫入方式,寫滿后地址指針復位將舊數據覆蓋,這種工作方式類似飛機上的“黑匣子”,稱之為“前向存儲”。
(2)回放功能:存儲過程中若收到回放遙控指令,系統將進入解壓縮狀態,解壓縮從壓縮停止數據的下一個數據開始,將SDRAM中的JPEG數據送入ZR36060,當解壓縮到上次停止位置時停止回放。
(3)停止:回放過程中再次按下回放鍵則中止回放進入停止狀態,SDRAM中數據保持不變,可以無限次進行回放。在停止狀態下按存儲鍵則再次開始壓縮,進入存儲狀態。
4 技術難點
4.1 SOI識別
ZR36060解壓縮時要求其輸入數據必須從SOI開始,由于圖像是按幀變化的,壓縮數據也是變化的,在循環存儲寫入方式下壓縮停止點下一個存儲數據是不可預料的,在解壓縮開始時必須對存儲器進行搜索以找到下一個SOI即FFD8,這一工作由EPLD完成,解壓縮開始時由EPLD從壓縮停止點開始向下搜索存儲區,搜索到FFD8后從FFD8開始向ZR36060寫入壓縮數據。
4.2 場序識別
在隔行掃描情況下,一幀圖像被分為奇偶兩場,JPEG標準用于運動圖像壓縮時壓縮數據是場間獨立的,單純從壓縮數據無法區分場序。由于循環寫入方式的原因,壓縮停止點下一場的場序也是不可預料的,如果不加以處理將產生奇偶場顛倒,前期開發過程中確實出現了這一情況,其表現為水平方向線條上下抖動,使用大屏幕電視觀察則更加明顯。
由于同步發生器有場序指示且變化遠小于CPU處理速度,只要知道解壓縮第一場場序,由CPU控制等待正確場序到來時開始解壓縮就不會出現場序顛倒。有兩種方法可以得到場序信息:一是改工作方式為后向存儲,壓縮時以固定場序開始,寫滿存儲區后停止,不再存儲,解壓縮從壓縮開始點開始,如此則場序也是已知的。另一種方法是在數據中插入場序信息,解壓縮時根據插入信息判斷場序。
該系統設計用于電視機中對電視節目的實時存儲回放,若采用后向存儲將大大降低其使用價值,因而實際中采用了后一種方法。
為簡化系統設計,經過與ZORAN公司技術人員探討,根據ZR36060特點,提出了根據奇偶場序寫入不同SOI的方法:在壓縮時由BT819場序標志信號控制邏輯電路在奇場時將ZR36060輸出的SOI改為FFFF,偶場時SOI不變仍為FFD8,解壓縮時仍然由EPLD搜索FFD8,這樣解壓縮將固定從偶場開始,奇場時ZR36060能夠識別FFFF并重構SOI,不會破壞ZR36060的工作。
4.3 錯誤識別
ZR36060工作時會發生若干錯誤,如信號太弱或用戶換臺引起同步紊亂、外部數據瓶頸導致數據溢出等均會引起錯誤,錯誤嚴重時甚至引起死機,導致系統癱瘓。
為防止這種情況發生,有必要對ZR36060的工作狀態進行檢測,在出錯時及時予以糾正,檢測以ZR36060的握手信號作為標志,正常時隨著數據流交換握手信號是高低電平不斷變化的,出錯后數據流停止則握手信號也隨之停住不動,微處理器檢測到握手信號停止變化超過1秒時判斷出錯,重新對系統進行初始化。
5 與電視機接口
系統與電視機接口包括視頻接口、OSD接口、遙控接口等。
本系統串接于電視主板復合視頻通路,由微處理器控制電子開關切換,存儲/停止時將輸入輸出信號直通,回放時將輸出信號切換為解壓縮輸出。
OSD輸出以二極管“或”邏輯接入主板CPU OSD信號,行、場同步則直接由主板引入,在進行存儲、回放等操作時微處理器輸出OSD信號提供屏顯提示,屏顯位置則進行了仔細選擇以避開主板OSD信息。
遙控信號直接取自主板遙控接收頭,經微處理器識別得到存儲、回放等遙控命令,同時還要對主板遙控命令進行識別判斷,以維持整機控制邏輯的完整,例如回放時若收到換臺命令,則中止回放進入停止狀態。
視頻信號實時存儲回放是數字視頻技術的新領域,這方面筆者做了一些嘗試,愿與同行們共同交流、探討,促進該技術的發展。
作者單位:廣東珠海建盛電子公司 郵編: 519000