薛金勇,黑勇,陳黎明
(中國(guó)科學(xué)院 微電子研究所,北京100029)
數(shù)字圖像傳感器廣泛應(yīng)用在各種視頻應(yīng)用領(lǐng)域,由于圖像的數(shù)據(jù)量很大,所以在圖像傳輸前要對(duì)圖像進(jìn)行有損或無損壓縮,有損壓縮一般應(yīng)用在對(duì)圖像質(zhì)量要求不高的應(yīng)用領(lǐng)域,但是醫(yī)學(xué)圖像等一些高端應(yīng)用領(lǐng)域要求圖像必須采用無損壓縮。快速高效無損圖像壓縮系統(tǒng)是一個(gè)快速高效的無損圖像壓縮算法,比工作在無損模式下的JPEG快5倍,且能夠達(dá)到相同的壓縮比[1],同時(shí)快速高效無損圖像壓縮系統(tǒng)(fast and efficient lossless image compression system,F(xiàn)ELICS)算法復(fù)雜度低,因此非常適合應(yīng)用于醫(yī)療內(nèi)窺鏡系統(tǒng)[2]。但是算法中Golomb-Rice編碼[3]的k參數(shù)選取需要一塊大容量的存儲(chǔ)器,更新存儲(chǔ)器的過程更是消耗大量功耗與時(shí)鐘周期,不定長(zhǎng)編碼也限制了系統(tǒng)的吞吐量。本文據(jù)此提出了一種更加易于超大規(guī)模集成電路(very large scale integration,VLSI)實(shí)現(xiàn)的低功耗 VLSI-oriented FELICS算法,簡(jiǎn)化了k參數(shù)的選取,降低了系統(tǒng)的設(shè)計(jì)復(fù)雜度,提高了系統(tǒng)吞吐率。
編碼一幀圖像,F(xiàn)ELICS算法不進(jìn)行任何編碼直接輸出前2個(gè)像素,然后按照光柵掃描順序依次編碼像素,編碼步驟如下[1]:
1)選取當(dāng)前像素P和2個(gè)相鄰像素N1、N2。N1與N2已知,且已編碼,為P提供相關(guān)信息,其選取規(guī)則如圖1。
2)計(jì)算預(yù)測(cè)區(qū)間下界L=min{N1,N2},上界H=max{N1,N2},預(yù)測(cè)上下文 Δ=H-L。
3)如果L≤P≤H,像素P落在預(yù)測(cè)區(qū)間[L,H],編碼1 bit的0,表示像素P落在預(yù)測(cè)區(qū)間內(nèi),然后對(duì)P-L在[0,Δ]內(nèi)進(jìn)行修正的二元編碼;如果L>P,則像素P低于預(yù)測(cè)區(qū)間,編碼1 bit的1,表示像素P落在預(yù)測(cè)區(qū)間外,再用1 bit的0表示低于預(yù)測(cè)區(qū)間,然后計(jì)算出P點(diǎn)與預(yù)測(cè)區(qū)間邊界的差值D=L-P-1,對(duì)該差值D進(jìn)行Golomb-Rice編碼。
如果P>H,則像素P處于高于預(yù)測(cè)區(qū)間,編碼1 bit的1,表示像素P落在預(yù)測(cè)區(qū)間外,再用1 bit的1表示高于預(yù)測(cè)區(qū)間;然后計(jì)算出P點(diǎn)與預(yù)測(cè)區(qū)間邊界的差值D,D=P-H-1,對(duì)該差值D進(jìn)行Golomb-Rice編碼。

圖1 當(dāng)前像素和相鄰像素Fig.1 Current pixel and the two nearest neighbors
對(duì)P-L在[0,Δ]內(nèi)進(jìn)行修正的二元編碼,即如果Δ+1是2的冪,使用編碼字長(zhǎng)為lb(Δ+1)的簡(jiǎn)單二元編碼;否則調(diào)整編碼方式,一些值的編碼字長(zhǎng)為?lb(Δ+1)」,另一些編碼字長(zhǎng)為「lb(Δ+1)?。由于像素落在預(yù)測(cè)區(qū)間[L,H]中間的概率較大,所以對(duì)其采用較短的編碼。
Golomb-Rice編碼方法分為3步:
1)參數(shù)確定:在開始一幀圖像處理前建立一個(gè)編碼累加表C[Δ][k],其中Δ取值范圍同像素值的變化范圍,k取值范圍為0至像素深度。對(duì)于像素深度為8的Bayer圖像,累加表為256×8的二維數(shù)組。每次Golomb-Rice codes編碼時(shí),根據(jù)Δ0=H-L確定k,即選取最小的k0,使

對(duì)于每一個(gè)預(yù)測(cè)上下文Δ,編碼累加表C[Δ][k]記錄了使用每一個(gè)可能的k值(0,1,…,7)時(shí)Golomb-Rice編碼的編碼總長(zhǎng)度,同時(shí)使用令編碼總長(zhǎng)度最小的k值進(jìn)行下一次編碼。
2)Golomb-Rice編碼:參數(shù)k確定后,對(duì)D/2k進(jìn)行一元編碼;后對(duì)差值D剩余的低k位進(jìn)行二元編碼。采用此種編碼單個(gè)像素的編碼長(zhǎng)度最長(zhǎng)可達(dá)258 bits。
3)參數(shù)更新:k值確定后,更新編碼累加表:

觀察FELICS的編碼過程,Golomb-Rice編碼的k參數(shù)選取是影響壓縮效率的關(guān)鍵因素,k參數(shù)選取根據(jù)最少編碼位確定,編、解碼器要在Golomb-Rice編碼下對(duì)Δ(0~255),在k(0~7)下累計(jì)編碼位,從而需要256×8Wbits的存儲(chǔ)空間,W表示編碼累加值的位寬。累計(jì)編碼位的過程也要消耗額外的操作周期。
FELICS是不定長(zhǎng)編碼,單個(gè)像素的編碼長(zhǎng)度在Golomb-Rice編碼時(shí)最長(zhǎng)可達(dá)258 bits,因此不論是串行還是并行編碼輸出,都不易于硬件實(shí)現(xiàn),限制了系統(tǒng)的吞吐率。
本文提出的VLSI-oriented FELICS采用限長(zhǎng)Golomb-Rice編碼,可以簡(jiǎn)化參數(shù)k的選擇和更新步驟,消除了256×8Wbits編碼累加表存儲(chǔ)空間,參數(shù)k的選擇可以在一個(gè)時(shí)鐘周期完成,提高了編碼效率,易于低功耗硬件實(shí)現(xiàn);同時(shí)限長(zhǎng)Golomb-Rice編碼使得單像素編碼不超過16 bits,輸出裝置的輸出緩沖器可在單周期內(nèi)完成單個(gè)像素的編碼輸出操作,更適合于實(shí)時(shí)圖像壓縮,能有效提高系統(tǒng)吞吐率。
像素P落在預(yù)測(cè)區(qū)間外,對(duì)D進(jìn)行限長(zhǎng)Golomb-Rice編碼,分為3步:
1)參數(shù)確定:參數(shù)k的確定根據(jù)圖像的上下環(huán)境關(guān)系確定,采用JPEG-LS[4-5]中的序列參數(shù)估計(jì),參數(shù)k估計(jì)基于誤差絕對(duì)值的期望,計(jì)算公式為

但由于準(zhǔn)確的計(jì)算量化誤差絕對(duì)值的期望比較困難,在JPEG-LS編碼過程中使用誤差的平均值,設(shè)置2個(gè)變量N和A,其中N表示到目前為止出現(xiàn)的誤差的數(shù),A表示到目前為止誤差絕對(duì)值的累計(jì)值。k參數(shù)滿足k=min{k'|2k'N≥A},即最小的k值使2kN≥A成立。在本設(shè)計(jì)中,N為編碼落在預(yù)測(cè)區(qū)間外的像素?cái)?shù)目,A為像素落在預(yù)測(cè)區(qū)間外的誤差累計(jì)。至此,k參數(shù)的選取簡(jiǎn)化為計(jì)算A與N的最高非零位的差值,如果N通過左移使之最高非零位與A對(duì)齊,且值不小于A,則k參數(shù)為A與N的最高非零位的差值,否則為A與N的最高非零位的差值加1。通過對(duì)胃窺鏡圖像進(jìn)行仿真,平均壓縮比由2.66降為2.63,但是硬件復(fù)雜度得到了極大降低,更易于VLSI實(shí)現(xiàn)。
2)限長(zhǎng)的Golomb-Rice編碼:確定參數(shù)k后,進(jìn)行Golomb-Rice編碼時(shí),當(dāng)需要編碼的數(shù)值D遠(yuǎn)大于2k時(shí),碼字會(huì)變得很長(zhǎng)。因此如果D/2k≤5,則編碼為差值D的Golomb-Rice編碼;否則編碼采用限長(zhǎng)編碼 {6'b000000+8'bD},由于 FELICS是前綴編碼,使用6'b000000用來表示Golomb-Rice采用了限長(zhǎng)編碼,差值D以其 8 bits二進(jìn)制表示為8'bD,連同指示像素P落于預(yù)測(cè)區(qū)間外的1 bit編碼、以及指示像素P高于或低于預(yù)測(cè)區(qū)間的1 bit編碼,單個(gè)像素的編碼長(zhǎng)度最大為16 bits。
3)參數(shù)更新:在完成限長(zhǎng)的Golomb-Rice編碼后,對(duì)參數(shù)進(jìn)行更新。利用圖像的局部特性,為了獲得更好的壓縮效果,當(dāng)N超過一定閾值時(shí),將N和A歸零,閾值通常取32~256的數(shù),這樣k值主要取決于當(dāng)前像素附近的局部圖像,通過對(duì)胃窺鏡圖像進(jìn)行仿真,閾值取32可以獲得較好的壓縮效果;否則N=N+1,A=A+D。
對(duì)12幅標(biāo)準(zhǔn)測(cè)試圖像(圖2)的壓縮結(jié)果表明(如表1),本文VLSI-oriented FELICS相比FELICS,壓縮比下降了約為1.7%。在低功耗內(nèi)窺鏡系統(tǒng)中,對(duì)12幅醫(yī)學(xué)圖像腸胃圖(如圖3)R通道的壓縮結(jié)果表明,F(xiàn)ELICS算法平均壓縮比約為2.659;VLSI-oriented FELICS的平均壓縮比約為2.626,相比FELICS壓縮比下降約為1.2%;文獻(xiàn)[6]參數(shù)k采取定值2,平均壓縮比約為2.476,相比FELICS壓縮比下降約為6.9%。對(duì)比文獻(xiàn)[6]參數(shù)k采取固定值,本文中參數(shù)k采取自適應(yīng)選取,能夠更好的適應(yīng)圖像特征,對(duì)大部分圖像均能獲得良好的壓縮比,同時(shí)硬件與時(shí)鐘周期的開銷也非常低。
VLSI-oriented FELICS硬件實(shí)現(xiàn)消除了256×8Wbits編碼累加表存儲(chǔ)空間,復(fù)雜度和功耗可大幅減小,參數(shù)k選擇可在一個(gè)時(shí)鐘周期完成,編碼效率顯著提升。

圖2 標(biāo)準(zhǔn)測(cè)試圖像Fig.2 Standard test images

表1 VLSI-oriented FELICS與FELICS對(duì)標(biāo)準(zhǔn)圖像壓縮率比較Table 1 Comparison of compression ratio between VLSI-oriented FELICS and FELICS

圖3 醫(yī)學(xué)圖像腸胃圖Fig.3 Medical images of intestines and stomach
Bayer圖像格式被廣泛的應(yīng)用在彩色數(shù)字圖像傳感器[7]。GBRG格式Bayer圖像,其RGB三色通道間的像素相關(guān)性較小,單色通道內(nèi)的像素相關(guān)性較大[8],在編碼時(shí)為了去除更多圖像冗余信息,要對(duì)上述的FELICS算法針對(duì)Bayer圖像進(jìn)行適當(dāng)?shù)恼{(diào)整,對(duì)Bayer圖像的RGB三色分別進(jìn)行FELICS壓縮,以達(dá)到更高的壓縮比。在編碼時(shí)需要根據(jù)當(dāng)前像素P所處的通道選取同通道內(nèi)的相鄰像素進(jìn)行FELICS編碼,隨著當(dāng)前像素所處的通道變化,不同通道的FELICS壓縮交叉進(jìn)行,編碼依序送入輸出緩沖器。
FELICS對(duì)Bayer圖像的擴(kuò)展表現(xiàn)在圖像壓縮實(shí)施過程中相鄰像素的選擇,以及k參數(shù)的維持,下面分別介紹。
2.2.1 相鄰像素的選擇
對(duì)于Bayer圖像,同通道內(nèi)的相鄰像素選取規(guī)則如FELICS算法描述。但同通道內(nèi)的像素在整幅圖像中是隔行或者隔列相鄰的,所以在選取相鄰像素時(shí)必須越過相鄰的行和列,在同通道內(nèi)按FELICS算法相鄰像素規(guī)則選取,如圖4所示。

圖4 Bayer圖像相鄰像素的選取規(guī)則Fig.4 The two nearest neighbors in Bayer image
2.2.2k參數(shù)的維持
對(duì)Bayer圖像的RGB三通道分別維持k參數(shù)選取變量N、A、k:
1)參數(shù)確定:對(duì)Bayer的每個(gè)通道維持各自的變量N和A,分別為變量NG1、AG1,NB、AB,NR、AR,NG2、AG2。在Golomb-Rice編碼時(shí),判斷當(dāng)前像素P所處的通道,選擇相應(yīng)的N和A。如當(dāng)前像素處于R通道,則N=NR,A=AR。k參數(shù)滿足公式k=min{k'|2k'N≥A}。
2)參數(shù)更新:在完成限長(zhǎng)的Golomb-Rice編碼后,對(duì)參數(shù)進(jìn)行更新。判斷當(dāng)前像素P所處的通道,更新相應(yīng)的N和A。如當(dāng)前像素處于R通道,則更新NR,AR。
本文針對(duì)Bayer圖像的FELICS擴(kuò)展能夠?qū)ayer圖像進(jìn)行良好的快速無損壓縮。Bayer圖像所需存儲(chǔ)空間本身是RGB格式圖像的1/3[8],在低功耗的內(nèi)窺鏡系統(tǒng)中,VLSI-oriented FELICS對(duì)醫(yī)學(xué)圖像的壓縮比可達(dá)2.6,因此可以得到約7.8的無損圖像壓縮比。
綜上,本文的 VLSI-oriented FELICS消除了256×8×Wbits編碼累加表存儲(chǔ)空間;參數(shù)k選擇可在一個(gè)時(shí)鐘周期完成;單像素編碼不超過16 bits,輸出編碼單元的輸出緩沖器可在單周期內(nèi)完成單個(gè)像素的編碼輸出操作;針對(duì)Bayer圖像的FELICS擴(kuò)展能夠?qū)ayer圖像進(jìn)行較好的快速無損壓縮。因此VLSI-oriented FELICS更適合于實(shí)時(shí)圖像壓縮系統(tǒng),更易于VLSI的低功耗實(shí)現(xiàn)。
設(shè)計(jì)采用3級(jí)流水線,Bayer圖像大小可配置,系統(tǒng)時(shí)鐘包括圖像數(shù)據(jù)傳輸時(shí)鐘PCLK和工作時(shí)鐘CLK,采用一塊深度可配置的雙時(shí)鐘異步FIFO緩存圖像數(shù)據(jù)。壓縮后的圖像數(shù)據(jù)經(jīng)過解壓縮與圖像插值將圖像彩色復(fù)原,系統(tǒng)框圖如圖5。

圖5 VLSI-oriented FELICS系統(tǒng)框圖Fig.5 Block diagram of VLSI-oriented FELICS system
硬件實(shí)現(xiàn)包括控制單元,編碼預(yù)測(cè)單元,編碼單元和編碼輸出單元。控制單元判斷一幅圖像的開始與結(jié)束,產(chǎn)生控制信號(hào)協(xié)調(diào)各個(gè)模塊的工作;編碼預(yù)測(cè)單元將傳感器的輸入像素存儲(chǔ),產(chǎn)生當(dāng)前像素P、相鄰像素N1與N2、預(yù)測(cè)上下文Δ;編碼單元進(jìn)行修正的二元編碼或者限長(zhǎng)Golomb-Rice編碼,輸出編碼的數(shù)據(jù)與位長(zhǎng);編碼數(shù)據(jù)每組成16 bits,編碼輸出單元將其輸出。設(shè)計(jì)整體采用流水線結(jié)構(gòu),用以提高系統(tǒng)的時(shí)鐘頻率,硬件結(jié)構(gòu)框圖如圖6。表2是本文算法與表文獻(xiàn)[6,9]設(shè)計(jì)復(fù)雜度與硬件開銷的對(duì)比。從表2可以看出本文提出的針對(duì)Bayer圖像的FELICS擴(kuò)展算法僅使用7.02 K門與10.2 KBits的存儲(chǔ)器,功耗為 26.8 μW/MHz,吞吐率為60 f/s,由于文獻(xiàn)[6]要求對(duì)全高清圖像進(jìn)行壓縮,因此硬件實(shí)現(xiàn)對(duì)速度要求非常高,采用了并行結(jié)構(gòu),但對(duì)其吞吐率歸一化并且考慮圖像傳輸格式因素,其吞吐率與本文的實(shí)現(xiàn)具有一定的可比性。最終,相較文獻(xiàn)[6,9],本文的實(shí)現(xiàn)均具有一定優(yōu)勢(shì)或者可比性,其VLSI設(shè)計(jì)復(fù)雜度低、功耗低,非常適合對(duì)功耗與面積要求極高的內(nèi)窺鏡系統(tǒng)。
圖像傳感器采用OmniVision公司的OV7649,其VGA幀時(shí)序[10]如圖7。當(dāng)圖像數(shù)據(jù)傳輸時(shí)鐘PCLK為24 MHz時(shí),系統(tǒng)的吞吐率可以達(dá)到60 f/s。
設(shè)計(jì)使用 SMIC 0.13 μm的工藝,進(jìn)行 DC綜合,Prime Power功耗分析,其特征參數(shù)如表3。最后設(shè)計(jì)經(jīng)過了FPGA驗(yàn)證與實(shí)現(xiàn),符合設(shè)計(jì)要求。

圖6 VLSI-oriented FELICS硬件結(jié)構(gòu)框圖Fig.6 Block diagram of hardware architecture of VLSI-oriented FELICS

表2 與已發(fā)表文獻(xiàn)比較Table 2 Comparisons with existing works

圖7 VGA幀時(shí)序圖Fig.7 VGA frame timing diagram

表3 設(shè)計(jì)參數(shù)Table 3 Specification of the design
本文提出了一種更加易于VLSI實(shí)現(xiàn)的低功耗VLSI-oriented FELICS算法:1)采用限長(zhǎng) Golomb-Rice編碼,簡(jiǎn)化了k參數(shù)的選取,消除了大容量的存儲(chǔ)器以及操作周期;自適應(yīng)的選取過程使得修改后的FELICS算法對(duì)不同特征的圖像仍然保證了圖像的壓縮效果;限長(zhǎng)編碼有效的提高了系統(tǒng)的吞吐率。2)更加適合硬件實(shí)現(xiàn),通過合理的劃分流水線,可以獲得更大的系統(tǒng)吞吐量,以滿足更廣泛的應(yīng)用,如全高清視頻應(yīng)用[6]等。3)針對(duì)Bayer圖像格式的算法擴(kuò)展進(jìn)一步擴(kuò)展了算法的應(yīng)用范圍。4)在SMIC 0.13 μm工藝條件下,完成了算法的VLSI設(shè)計(jì)、FPGA驗(yàn)證以及功耗分析。系統(tǒng)工作時(shí)鐘為25 MHz,圖像數(shù)據(jù)時(shí)鐘為24 MHz時(shí),VGA圖像的吞吐率可以達(dá)到 60 f/s,功耗為 669 μW,每幀的功耗僅為11.15 μW。
[1]HOWARD P G,VITTER J S.Fast and efficient lossless image compression[C]//IEEE Data Compression Conference.Snowbird,USA,1993:351-360.
[2]IDDAN G,MERON G,GLUKHOVSKY A,et al.Wireless capsule endoscopy[J].Nature,2000,405:417.
[3]GOLOMB S W.Run-Length Encodings[J].IEEE Transactions on Information Theory,1966,12(3):399-401.
[4]WEINBERGER M J,SEROUSSI G,SAPIRO G.The LOCO-I lossless image compression algorithm:principles and standardization into JPEG-LS[J].IEEE Transactions on Image Processing,2000,9(8):1309-1324.
[5]WU X,MEMON N.Context-based,adaptive,lossless image coding [J].IEEE Transactions on Communications,1997,45(4):437-444.
[6]TSAI T H,LEE Y H,LEE Y Y.Design and analysis of high-throughput lossless image compression engine using VLSI-oriented FELICS algorithm[J].IEEE Transactions on Very Large Scale Integration(VLSI)Systems,2010,18(1):39-52.
[7]BAYER B E.Color imaging array:USA,3,971,065[P].1976-5-12.
[8]XU Xinfeng,HEI Yong.A shortcut to compressing Bayerpattern imagery losslessly[C]//IEEE International Congress on Image and Signal Processing.Tianjin,2009:1-4.
[9]CHEN Xinkai,ZHANG Xiaoyu,ZHANG Linwei,et al.A wireless capsule endoscope system with low-power controlling and processing ASIC [J].IEEE Transactions on Biomedical Circuits and Systems,2009,3(1):11-22.
[10]OmniVision Technologies.OV7649/OV7149 CMOS VGA(640 x 480)CAMERACHIPTM[Z].Sunnyvale:OmniVision Technologies,2003:8-9.