面向硬件實現的快速高效無損圖像壓縮方法
【專利摘要】本發明涉及微電子學的集成電路設計領域和數字圖像編碼壓縮領域,為提供一種面向硬件實現的快速高效無損圖像壓縮方法。與傳統的FELICS算法相比,能夠簡化Golomn-Rice編碼中k參數的選取過程,減小所需存儲器的大小并縮短計算周期,提高圖像壓縮系統的效率。為此,本發明采取的技術方案是,面向硬件實現的快速高效無損圖像壓縮方法,包括如下步驟:編碼一幀圖像,采用標準的FELICS算法不進行任何編碼直接輸出前2個像素,然后按照光柵掃描順序依次對像素進行編碼。本發明主要應用于成電路設計。
【專利說明】面向硬件實現的快速高效無損圖像壓縮方法
【技術領域】
[0001]本發明涉及微電子學的集成電路設計領域和數字圖像編碼壓縮領域,尤其涉及一種面向硬件實現的快速高效無損圖像壓縮方法。
技術背景
[0002]數字圖像傳感器廣泛應用在各種視頻應用領域,由于圖像的數據量很大,所以在圖像傳輸前要對圖像進行有損或無損壓縮,有損壓縮一般應用在對圖像質量要求不高的應用領域,但是醫學圖像等一些高端應用領域要求圖像必須采用無損壓縮。快速高效無損圖像壓縮系統(fast and efficient lossless image compress1n system, FELICS)是一個快速高效的無損圖像壓縮算法,比工作在無損模式下的JPEG(Joint Photographic ExpertsGroup)算法快5倍,且能夠達到相同的壓縮比,同時快速高效無損圖像壓縮系統算法復雜度低,因此非常適合應用于醫療內窺鏡系統。但是算法中哥倫布.萊斯(Golomb-Rice)編碼的k參數選取需要一塊大容量的存儲器,更新存儲器的過程更是消耗大量功耗與時鐘周期,對面積和功耗提出了很大的要求并且限制了系統的吞吐率。
【發明內容】
[0003]為了克服現有技術的不足,提供一種面向硬件實現的快速高效無損圖像壓縮方法。與傳統的FELICS算法相比,能夠簡化Golomn-Rice編碼中k參數的選取過程,減小所需存儲器的大小并縮短計算周期,提高圖像壓縮系統的效率。為此,本發明采取的技術方案是,面向硬件實現的快速高效無損圖像壓縮方法,包括如下步驟:編碼一幀圖像,采用標準的FELICS算法不進行任何編碼直接輸出前2個像素,然后按照光柵掃描順序依次對像素進行編碼,具體編碼步驟如下:
[0004]I)選取當前像素P和2個相鄰像素N1、N2,NI與N2已知,且已編碼,為P提供相關信息;其中按照當前像素P點的位置分為四種情況對相鄰像素進行選取:若P點為第一行的前兩個像素,則不對P進行編碼,直接輸出為第一行的其余像素,則選取左邊兩個像素值作為參考值;若P為第一列而非第一行的像素,則選取P上方和右上方兩個像素作為參考值;若P在上述三種情況以外的位置則選取P左側和上方兩個像素作為參考值;
[0005]2)計算預測區間下界L = min{Nl, N2},上界H = max {NI, N2},預測上下文Δ =H — L ;其中L為兩個參考像素值中較小者,H為較大者,Δ為較大者與較小者的差值,即預測區間;
[0006]3)如果L≤P≤H,像素P落在預測區間[L,H],編碼Ibit的O并置于該像素輸出編碼的最高位,表示像素P落在預測區間內,然后對P — L在[0,Δ]內進行修正的二元編碼;如果L > P,則像素P低于預測區間,編碼Ibit的1,表示像素P落在預測區間外,再用Ibit的O表示低于預測區間,并將‘10’置于輸出編碼的最高位,然后計算出P點與預測區間邊界的差值D = L-P-1,對該差值D進行Golomb-Rice編碼;如果P > H,則像素P處于高于預測區間,編碼Ibit的1,表示像素P落在預測區間外,再用Ibit的I表示高于預測區間,并將‘11’置于輸出編碼的最高位;然后計算出P點與預測區間邊界的差值D,D =P 一 H 一 I,對該差值D進彳了 Golomb-Rice編碼;
[0007]當像素值落在預測區間外時將采用Golomb-Rice編碼,在開始一幀圖像處理前建立一個編碼累加表C[A][k],其中Λ取值范圍同像素值的變化范圍,k取值范圍為O至像素位深度;每次Golomb-Rice codes編碼時,根據Δ O = H — L確定k,即選取最小的kO,使
[0008]C[ Δ0] [k0] ^ C[ Δ0] [k], k = O, I,..., (I)
[0009]對于每一個預測上下文的Λ,編碼累加表C[A] [k]記錄了使用每一個可能的k值(O, I,…)時Golomb-Rice編碼的編碼總長度,同時使用令編碼總長度最小的k值進行下
一次編碼;
[0010]參數k確定后,對D/2k進行一元編碼;后對差值D剩余的低k位進行二元編碼
[0011]最后要更新編碼累加表:
[0012]C[ Δ J [k] = C[ Δ 0] [k] +D/2k+k+l, k = O, I,..., 7 (2)
[0013]觀察FELICS的編碼過程,編、解碼器要在Golomb-Rice編碼下對Λ (O~255),在k(0~像素位深度)下累計編碼位,從而需要256 X 8W bits的存儲空間,W表示編碼累加值的位寬。更新編碼累加表的過程也要消耗額外的操作周期。
[0014]其中修正的二元編碼就是將落在預測區間的像素點進行變長編碼,即對出現頻率較高的值賦予較短的碼值,對出現頻率較低的值賦予較長的碼值。
[0015]參數k的確定基于預測誤差絕對值的期望,使用誤差的平均值來代替期望值,為每一個可能出現的Λ值(O~255)設置2個變量N和Α,其中N表示到目前為止該Λ值下出現的誤差的個數,A表示到目前為止誤差絕對值的累計值,每一個△值只需要兩個量就可以完成記錄,因此存儲空間由256X8W bits下降為256X2W bits。k參數滿足k =min{k ; 2k ; N≥A},即最小的k值使2kN≥A成立;N為到目前為止Λ值相同的像素數目,A為其誤差累計;k參數的選取簡化為計算A與N的最高非零位的差值,如果N通過左移使之最高非零位與A對齊,且值不小于A,則k參數為A與N的最高非零位的差值,否則為A與N的最高非零位的差值加I。
[0016]將原始圖像適當分塊,來利用像素的局部特性,經過理論分析在硬件消耗和速度之間進行折中以確定最佳的分塊大小。
[0017]本發明的技術特點與效果:
[0018]本發明中,不必計算出可使編碼長度達到最小的k值,而是用其期望來代替。首先,將存儲器大小由256 X 8ff bits下降為256 X 2ff bits ;其次,免去了更新累加表所需的八個周期,只需要一個周期用累計值除以數量就可以得出k值的期望值。因此,本發明與標準的FELICS算法相比,消耗的硬件資源更少并且處理效率更快。
【專利附圖】
【附圖說明】
[0019]圖1為當P點位置不同時,其參考像素值選取的四種不同情況。
【具體實施方式】
[0020]編碼一幀圖像,標準的FELICS算法不進行任何編碼直接輸出前2個像素,然后按照光柵掃描順序依次對像素進行編碼,編碼步驟如下:[0021]I)選取當前像素P和2個相鄰像素N1、N2。NI與N2已知,且已編碼,為P提供相關信息。其中按照當前像素P點的位置分為四種情況對相鄰像素進行選取:若P點為第一行的前兩個像素,則不對P進行編碼,直接輸出為第一行的其余像素,則選取左邊兩個像素值作為參考值;若P為第一列而非第一行的像素,則選取P上方和右上方兩個像素作為參考值;若P在上述三種情況以外的位置則選取P左側和上方兩個像素作為參考值。參見圖1。
[0022]2)計算預測區間下界L = min{Nl, N2},上界H = max {NI, N2},預測上下文Δ =H-L0其中L為兩個參考像素值中較小者,H為較大者,Λ為較大者與較小者的差值,即預測區間。
[0023]3)如果L≤P≤H,像素P落在預測區間[L,H],編碼Ibit的O并置于該像素輸出編碼的最高位,表示像素P落在預測區間內,然后對P — L在[0,Δ]內進行修正的二元編碼;如果L > P,則像素P低于預測區間,編碼Ibit的1,表示像素P落在預測區間外,再用Ibit的O表示低于預測區間,并將‘10’置于輸出編碼的最高位,然后計算出P點與預測區間邊界的差值D = L — P — 1,對該差值D進行Golomb-Rice編碼。如果P > H,則像素P處于高于預測區間,編碼Ibit的1,表示像素P落在預測區間外,再用Ibit的I表示高于預測區間,并將‘11’置于輸出編碼的最高位;然后計算出P點與預測區間邊界的差值D,D=P — H 一 I,對該差值D進彳了 Golomb-Rice編碼。
[0024]其中修正的二元編碼就是將落在預測區間的像素點進行變長編碼,即對出現頻率較高的值賦予較短的碼值,對出現頻率較低的值賦予較長的碼值,由于本發明未對標準FELICS算法中修正的二元編碼模塊進行改動,故其工作原理不再贅述。
[0025]當像素值落在預測區間外時將采用Golomb-Rice編碼,由于Golomb-Rice編碼中k值的選取將會對最后的編碼結果產生很大的影響。為了選取合適的k值,FELICS算法在開始一幀圖像處理前建立一個編碼累加表C[A][k],其中Λ取值范圍同像素值的變化范圍,k取值范圍為O至像素位深度。對于像素位深度為8的圖像,累加表為256X8的二維數組。每次Golomb-Rice codes編碼時,根據Δ O = H — L確定k,即選取最小的kO,使
[0026]C[A0] [k0] ≤ C[A0] [k], k = 0,1,...,7 (3)
[0027]對于每一個預測上下文的Λ,編碼累加表C[A][k]記錄了使用每一個可能的k值(0,1,---,7)時Golomb-Rice編碼的編碼總長度,同時使用令編碼總長度最小的k值進行下
一次編碼。
[0028]參數k確定后,對D/2k進行一元編碼;后對差值D剩余的低k位進行二元編碼。
[0029]最后要更新編碼累加表:
[0030]C[ Δ J [k] = C[ Δ 0] [k] +D/2k+k+l, k = O, I,..., 7 (4)
[0031]觀察FELICS的編碼過程,編、解碼器要在Golomb-Rice編碼下對Λ (O~255),在k(0~7)下累計編碼位,從而需要256 X 8W bits的存儲空間,W表示編碼累加值的位寬。更新編碼累加表的過程也要消耗額外的操作周期。
[0032]本發明中參數k的確定基于預測誤差絕對值的期望,但由于準確的計算量化誤差絕對值的期望比較困難,故使用誤差的平均值來代替期望值,為每一個可能出現的Λ值(O~255)設置2個變量N和Α,其中N表示到目前為止該Λ值下出現的誤差的個數,A表示到目前為止誤差絕對值的累計值,每一個△值只需要兩個量就可以完成記錄,因此存儲空間由256X8Wbits下降為256X2Wbits。k參數滿足k = min{k ' 2k ; N≥A},即最小的k值使2kN≥A成立。在本設計中,N為到目前為止Δ值相同的像素數目,A為其誤差累計。因此,k參數的選取簡化為計算A與N的最高非零位的差值,如果N通過左移使之最高非零位與A對齊,且值不小于A,則k參數為A與N的最高非零位的差值,否則為A與N的最高非零位的差值加I。本方法用k值的期望來代替可使編碼長度達到最小的k值,壓縮比會略有減小,但是硬件復雜度得到了極大降低,更易于VLSI實現,并且無需像標準FELICS算法中那樣消耗八個周期來更新累加表,只需一個周期就可以選出合適的k值。
[0033]另外,在該方法的基礎之上,還可以將原始圖像適當分塊,來利用像素的局部特性,經過理論分析在硬件消耗和速度之間進行折中以確定最佳的分塊大小。
[0034]為了更詳細的說明本發明的工作過程,下面將以具體數值的例子來進一步說明。
[0035]在技術方案中曾提到為了兼顧硬件資源消耗和處理速度,可以對圖像分塊處理,經過分析得出當圖像以64X64分塊進行處理時其壓縮性能和處理速度達到最優,因此選用這種分塊方式進行圖像壓縮編碼。
[0036]現假定當前處理的像素值為P = 40,兩個參考像素值分別為L = 55,H = 60。可以看出P〈L,因此需要對P進行Golomn-Rice編碼,首先用一個‘I’來表示P落在[L,H]之外,再用一個‘O,表不P〈L。
[0037]接下來要確定好合適的k值,首先要計算出預測區間的值Λ =H-L = 5,接下來查找到累加表中Λ = 5的儲存器,找到目前為止該Λ對應的N值和A值。假定N = 5,A =20,那么就要計算出使k =2k ; N≥A}成立的k值,來本例子中,k = 2。
[0038]確定好合適的k值之后就可以對預測差值D = L-P-1 = 55-40-1 = 14進行以k=2為基的Golomn-Rice編碼,首先確定一進制的編碼,即D/2k = 14/4 = 3,因此一進制編碼為‘111’,接下來對余數2進行二進制編碼,因此二進制編碼為‘10’。
[0039]接下來將一進制編碼與二進制編碼結合起來并在中間插入一個‘0’就完成了Golomn-Rice編碼,編碼結果為‘111010’。
[0040]最后將Golomn-Rice編碼結果和表示P值位置的‘10’結合之后就是可以輸出的碼流,即 ‘10111010,。
【權利要求】
1.一種面向硬件實現的快速高效無損圖像壓縮方法,其特征是,包括如下步驟:編碼一幀圖像,采用標準的FELICS算法不進行任何編碼直接輸出前2個像素,然后按照光柵掃描順序依次對像素進行編碼,具體編碼步驟如下: 1)選取當前像素P和2個相鄰像素N1、N2,NI與N2已知,且已編碼,為P提供相關信息;其中按照當前像素P點的位置分為四種情況對相鄰像素進行選取:若P點為第一行的前兩個像素,則不對P進行編碼,直接輸出;若卩為第一行的其余像素,則選取左邊兩個像素值作為參考值;若P為第一列而非第一行的像素,則選取P上方和右上方兩個像素作為參考值;若P在上述三種情況以外的位置則選取P左側和上方兩個像素作為參考值; 2)計算預測區間下界L= min{Nl, N2},上界H = max {NI, N2},預測上下文Δ = H —L ;其中L為兩個參考像素值中較小者,H為較大者,Δ為較大者與較小者的差值,即預測區間; 3)如果LSP≤H,像素P落在預測區間[L,H],編碼Ibit的O并置于該像素輸出編碼的最高位,表示像素P落在預測區間內,然后對P — L在[O,Λ ]內進行修正的二元編碼;如果L > P,則像素P低于預測區間,編碼Ibit的1,表示像素P落在預測區間外,再用Ibit的O表示低于預測區間,并將‘10’置于輸出編碼的最高位,然后計算出P點與預測區間邊界的差值D = L — P — 1,對該 差值D進行Golomb-Rice編碼;如果P > H,則像素P處于高于預測區間,編碼Ibit的1,表示像素P落在預測區間外,再用Ibit的I表示高于預測區間,并將‘11’置于輸出編碼的最高位;然后計算出P點與預測區間邊界的差值D,D = P-H - 1,對該差值D進行Golomb-Rice編碼; 當像素值落在預測區間外時將采用Golomb-Rice編碼,在開始一幀圖像處理前建立一個編碼累加表C[A][k],其中Λ取值范圍同像素值的變化范圍,k取值范圍為O至像素位深度;每次Golomb-Rice codes編碼時,根據Δ O = H — L確定k,即選取最小的kO,使
C[ Δ0] [k0]≤C[ Δ0] [k], k = O, I,..., (I) 對于每一個預測上下文的Λ,編碼累加表C[A][k]記錄了使用每一個可能的k值(0,I,…)時Golomb-Rice編碼的編碼總長度,同時使用令編碼總長度最小的k值進行下一次編碼; 參數k確定后,對D/2k進行一元編碼;后對差值D剩余的低k位進行二元編碼 最后要更新編碼累加表:
C[A0] [k] = C[A0] [k]+D/2k+k+l,k = 0,1,...,7 (2) 觀察FELICS的編碼過程,編、解碼器要在Golomb-Rice編碼下對Λ (O~255),在k(O~像素位深度)下累計編碼位,從而需要256X8W bits的存儲空間,W表示編碼累加值的位寬。更新編碼累加表的過程也要消耗額外的操作周期。
2.如權利要求1所述的面向硬件實現的快速高效無損圖像壓縮方法,其特征是,其中修正的二元編碼就是將落在預測區間的像素點進行變長編碼,即對出現頻率較高的值賦予較短的碼值,對出現頻率較低的值賦予較長的碼值。
3.如權利要求1所述的面向硬件實現的快速高效無損圖像壓縮方法,其特征是,參數k的確定基于預測誤差絕對值的期望,使用誤差的平均值來代替期望值,為每一個可能出現的Λ值(O~255)設置2個變量N和Α,其中N表示到目前為止該Λ值下出現的誤差的個數,A表示到目前為止誤差絕對值的累計值,每一個Λ值只需要兩個量就可以完成記錄,因此存儲空間由256X8Wbits下降為256X2Wbits。k參數滿足k = min{k ' 2k ; N≥A},即最小的k值使2kN≥A成立;N為到目前為止Δ值相同的像素數目,A為其誤差累計;k參數的選取簡化為計算A與N的最高非零位的差值,如果N通過左移使之最高非零位與A對齊,且值不小于A,則k參數為A與N的最高非零位的差值,否則為A與N的最高非零位的差值加I。
4.如權利要求1所述的面向硬件實現的快速高效無損圖像壓縮方法,其特征是,將原始圖像適當分塊,來利用像素的局部特性,經過理論分析在硬件消耗和速度之間進行折中以確定最佳的分塊大 小。
【文檔編號】H04N19/14GK104038765SQ201410298885
【公開日】2014年9月10日 申請日期:2014年6月26日 優先權日:2014年6月26日
【發明者】姚素英, 于瀟, 徐江濤, 史再峰, 高靜, 聶凱明, 高志遠 申請人:天津大學