關鍵詞: 編碼 , 靜止圖像 , 嵌入式設備
嵌入式多媒體設備的靜止圖像編碼有著廣泛的應用,如照片的拍攝與傳輸。設備處理的圖像越來越大,存儲容量和傳能力都相當有?因而靜止圖像編解碼要求具有較低的運算復雜性、較少的存儲器需求和極好的壓縮性能。目前已經制定的靜止圖像壓縮標準主要有JPEG和JPEG2000。JPEG標準在中高速率上壓縮效果較好, 對于細節(jié)分量多的灰度圖像, 當編碼壓縮率低于每像素0.25比特時,視覺失真大,重構圖像存在嚴重的方塊效應,不能很好地適應網絡傳輸圖像的需要。JPEG2000為了降低運算中的存儲器需求,使用分塊技術,對每個小塊進行處理,但采用較小的塊在低碼率時存在與JPEG一樣的方塊效應。因而JPEG2000 在低比特率應用時, 建議不分塊或者分成較大的塊,以保證良好的率失真性能, 但運算復雜性和存儲器需求都極高。
視頻編碼新標準H.264代表著繼MPEG1/2和MPEG4后的第三代視頻編碼標準。H.264比以前的標準提供了更高的編碼增益。H.264的INTRA幀編碼算法充分利用圖像中的空間相關和變換域的相關性,提供了極高的編碼增益,可以用來對靜止圖像進行編碼。在文獻中H.264采用JM73代碼,JPEG2000 采用Jasper 1.700.5,對標準靜止測試圖像和視頻序列進行測試。測試結果表明:與JPEG2000相比,H.264 INTRA幀具有更高的客觀質量和主觀質量,但譯碼器的運算復雜性卻比JPEG2000低50%左右。在嵌入式設備上,多媒體應用的實時性不僅取決于算法的運算次數,還取決于可得到的存儲器帶寬。CPU的工作頻率越來越高,存儲器的頻率卻增加緩慢,很多算法的瓶頸在于數據輸入輸出。有效減小算法的存儲器需求,減少中間結果的存儲需求,可縮減片外存儲器訪問次數,提高應用的實時性能。下面主要討論降低H.264 INTRA幀編碼的運算復雜性和存儲器需求的方法。
圖1 H.264編碼器的結構流程圖
H.264 INTRA 16x16 prediction modes (all predicted from pixels H and V)
圖2 INTRA 4×4和INTRA 16×16預測
1 減少運算復雜性
H.264 INTRA幀具有比JPEG2000更高的客觀質量,這主要是由于INTRA幀采用的多種幀內預測模式較好地去掉了空間冗余。對于平滑的背景區(qū)域采用16×16大小的粗糙預測,共有4種可能的預測方向。對于快速變化的圖像區(qū)域,采用4×4的塊,共有9種預測模式。在預測后,對殘差信號進行整型變換消除頻譜相關性。高效的去方塊效應濾波器改善了圖像的信噪比和主觀質量。圖1是H.264編碼器的結構流程圖。
從圖1可以看出,在整幀圖像的熵編碼后,對逆整型變換后的重建數據進行去方塊效應,去方塊效應后的重建圖像數據用作下一幀預測圖像的編碼,或者用于編碼同時顯示重建圖像。編碼器的作用主要是壓縮原始數據產生輸出碼流,若不需要在本地編碼器中顯示重建圖像(例如衛(wèi)星照片的拍攝),則編碼器中的整幀圖像的去方塊效應可以省去,節(jié)省大約30%的運算。宏塊的幀內預測包含9種4×4模式和4種16×16模式如圖2。INTRA 16×16 預測僅僅采用左邊16個像素和上邊16個像素作參考;INTRA 4×4 預測僅僅采用左邊4個像素和上邊9個像素作參考,因而在逆整型變換和重建(逆變換結果與預測值相加)時,僅僅需要計算16×16宏塊的第16行與第16列像素、4×4塊的第4行與第4列像素,沒有必要計算所有的像素。對于16×16的塊,減少224個重建像素的計算。對于4×4的塊,減少8個重建像素的計算。整型變換、量化、逆量化、掃描以及逆變換消耗比較多的編碼時間,可利用在模式選擇時計算的絕對差值和(SAD),提前判斷整型變換后量化系數全0塊,從而省去全0塊的整型變換、量化、逆量化、掃描以及逆變換這一系列操作。若SAD小于某個門限T,各個變換系數絕對值小于量化步長(Qstep),該塊為0塊。
實驗中取T等于3Qstep,獲得了較高的檢測率和較低的檢測差錯率。H.264 采用整型變換,為簡化門限的推導,其中的整型變換與4×4的離散余弦變換(DCT)相差較小,DCT變換為:
在INTRA幀量化中,
時,F(u,v)量化為0,即
時,所有變換系數量化為0。由于該式是量化系數全為零的充分條件,而不是必要條件。實驗結果顯示,使用該門限檢測出零塊的正確性為100%,大量的量化系數為全零塊卻檢測不出來。為了大幅提高零塊檢出率,增大該門限T為3Qstep,測量miss.qcf 20幀編碼的平均情況,測試結果見表1。從表1可以看出,零塊檢測率隨著量化索引增大而增大,可能將部分非零塊檢測成零塊,但這對信噪比影響不大。
2 縮減存儲器需求
減少運算中的存儲器需求對于嵌入式設備十分重要。宏塊編碼的過程包含預測、模式選擇、變換量化掃描、逆量化等。從圖2可以看出,在INTRA16×16的4種預測模式中,只使用上邊和左邊的各16個像素作為預測參考,在INTRA 4×4 的9種預測模式中,僅使用左邊4個像素和上邊9個像素作為預測參考,因而重建圖像并不需要整幀存儲,只需存儲這幾個參考點就可以了。假設宏塊編碼按照從左到右、從上到下順序進行,則水平方向的像素需要存儲一整行。
在INTRA 4×4模式編碼時,由于相鄰的4×4塊模式高度相關,采用相鄰塊的預測模式預測當前塊的最可能模式,同樣只需要存儲上邊一行4×4和左邊一個4×4塊的編碼模式(如圖3)。在對量化后變字長編碼(VLC)系數的個數進行編碼時,需要利用相鄰兩塊的非零系數個數對該塊進行預測,也只需要存儲上邊一行4×4和左邊一個4×4塊的編碼模式的非零系數個數,如圖3。
在對整幀圖像的數據比特串(SODB)添加原始字節(jié)序列載荷(RBSP)結尾比特(RBSP trailing bits,添加一比特的“1”和若干比特“0”,以便字節(jié)對齊)后,再檢查RBSP 中是否存在連續(xù)的三字節(jié)“00000000 00000000 000000xx”;若存在這種連續(xù)的三字節(jié)碼,在第三字節(jié)前插入一字節(jié)的“0×03”,以免與起始碼競爭,形成EBSP碼流,這需要將近兩倍的整幀圖像碼流大小。為了減小存儲器需求,在每個宏塊編碼結束后即檢查該宏塊SODB中的起始碼競爭問題,并保留SODB最后兩字節(jié)的零字節(jié)個數,以便與下一宏塊的SODB的開始字節(jié)形成連續(xù)的起始碼競爭檢測;對一幀圖像的最后一個宏塊,先添加結尾停止比特,再檢測起始碼競爭。
采用這種方法產生H.264 附錄B中的字節(jié)流時,存儲器需求從兩幀碼流大小縮小到兩個宏塊碼流大小。通過對碼流輸出過程的改進,使INTRA幀編碼需要的存儲器大小不隨圖像大小的增加而增加,這時編碼過程中的存儲器不超過9K個整數。對于基于片上存儲器的多媒體處理器,存儲器需求的減少可以大量縮減中間結果的片外片上轉移,減小數據轉移的負擔,提高程序的運行速度。
采用H.264 INTRA幀對靜止圖像進行編碼時,在編碼器端不需要顯示本地重建圖像,可省掉去方塊效應濾波器;利用模式選擇時計算的絕對差值和,可提前判斷量化后全零系數塊,節(jié)省大量的計算。分階段地對各個宏塊的碼流插入競爭阻止字節(jié)(emulation prevention byte),以保證原始字節(jié)序列載荷中不含起始碼,有效減少存儲器的需求。運算復雜性和存儲器需求極低的H.264 INTRA編碼模式,可代替JPEG2000,用于嵌入式設備的靜止圖像編碼。
圖3 相鄰 4×4 INTRA編碼塊
評論
查看更多