防誤碼擴散的jpeg-ls圖像無損/近無損壓縮算法硬件實現(xiàn)方法
【專利摘要】本發(fā)明公開了一種防誤碼擴散的圖像無損/近無損壓縮方法:采用并行預測方式,將分塊的圖像通過兩路并行得到預測結(jié)果,在每個預測環(huán)節(jié),像素之間間隔一個像素時鐘周期,使得由參數(shù)索引、預測修正、殘差計算、參數(shù)更新反饋環(huán)路可使用流水線設計;在近無損壓縮模式下,每個像素有足夠的時間進行像素重建,在當前像素進行上下文建模前能剛好得到上一個像素對應的像素重建值;通過引入分塊壓縮與檢糾錯編碼相結(jié)合的方法,防止了誤碼的大面積擴散,提高了抗信道誤碼性能,同時子塊大小可調(diào),檢糾錯編碼方式可調(diào);進行分區(qū)域近無損壓縮,可根據(jù)實際應用需求,對圖像的不同區(qū)域采用不同的近無損參數(shù)Near進行壓縮,可進一步提高圖像的整體壓縮比。
【專利說明】
防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實現(xiàn) 方法
技術領域
[0001] 本發(fā)明屬于圖像壓縮技術領域,更具體地,設及到一種防誤碼擴散的無損/近無損 圖像壓縮方法及其硬件實現(xiàn),本發(fā)明適用于空間運用的星載圖像無損/近無損壓縮系統(tǒng)。
【背景技術】
[0002] 近年來我國在外太空探索和對地觀測等空間應用領域正處于高速發(fā)展階段,傳感 器的性能也隨之得到了極大的提升,遙感數(shù)據(jù)量日益龐大,使得有限的信道帶寬和數(shù)據(jù)存 儲容量與傳輸大量遙感數(shù)據(jù)之間的矛盾日益突出。顯然,數(shù)據(jù)壓縮技術是解決運一問題的 一個有效途徑,使其在遙感領域越來越受到重視。肝EG-LS壓縮算法是已建立的對于彩色及 灰度圖像無損壓縮的標準,是基于Weinberger等提出的低復雜度的無損圖像壓縮方法 (LOCO-I : low complexity lossless compression for ima邑es),廣泛應用于衛(wèi)星圖像無 損壓縮,是CCSDS推薦的無損/近無損壓縮算法。作為圖像數(shù)據(jù)無損/近無損壓縮標準,在壓 縮性能和壓縮效率方面具有很多優(yōu)越性,因此成為目前圖像無損壓縮應用中最廣泛被采用 的方法之一。
[0003] 遙感數(shù)據(jù)的極為寶貴且獲取不易,因此在對遙感數(shù)據(jù)壓縮時無損/近無損壓縮起 到了極為重要的作用。同時,在軍事應用領域,實時性是遙感數(shù)據(jù)獲取、傳輸和處理的首要 指標,因此對遙感數(shù)據(jù)的壓縮處理還必須滿足高實時性的要求。再者,星上空間極為復雜而 惡劣,電路易因單粒子翻轉(zhuǎn)等出錯,而星地鏈路則易受天氣狀況影響,在惡劣天氣下易產(chǎn)生 信道誤碼,因此壓縮系統(tǒng)必須具有極高的可靠性。因此JPEG-LS壓縮算法的在運樣的應用 背景下,會存在一些技術難點:實時實現(xiàn)問題和誤碼擴散問題。
[0004] 肝EG-LS算法硬件實現(xiàn)的主要難點在于其近無損壓縮模式的實現(xiàn),其中的像素重 建環(huán)節(jié)引入了反饋環(huán)路,導致了算法的實時實現(xiàn)的困難,制約了壓縮系統(tǒng)的處理速度。西安 電子科技大學在其申請專利"JPEG-LS常規(guī)編碼硬件實現(xiàn)方法"(專利申請?zhí)枺?201210198818.X,公開號:CN102724506)中公開了一種肝EG-LS圖像壓縮標準的硬件實現(xiàn)方 法。運種方法只實現(xiàn)了肝EG-L姻像壓縮標準中的無損壓縮模式,回避了近無損壓縮模式中 的像素重建環(huán)節(jié),但喪失了近無損壓縮功能。
[0005] JPEG-LS算法進行遙感圖像壓縮時,若因太空的惡劣環(huán)境使得壓縮碼流中引入了 誤碼,則會因碼流中的上下文關聯(lián)性,導致解碼時出現(xiàn)圖像錯亂而失真。
【發(fā)明內(nèi)容】
[0006] 本發(fā)明針對當今空間應用領域?qū)Φ凸摹⒌蛷碗s度、高實時性、高可靠性圖像數(shù)據(jù) 壓縮系統(tǒng)的迫切需要提出。本發(fā)明通過在肝EG-LS常規(guī)編碼模式的基礎上引入圖像分塊壓 縮的方法,同時該方法與檢糾錯編碼(2DECC編碼和RS編碼)相結(jié)合,極大地增強了肝EG-LS 抗誤碼擴散的性能。本發(fā)明采用并行預測方式,將分塊的圖像通過兩路并行得到預測結(jié)果, 在每個預測環(huán)節(jié),像素之間間隔一個像素時鐘周期,使得在確保參數(shù)及時更新的同時消除 了反饋回路數(shù)據(jù)依賴對流水線的阻塞,因此由參數(shù)索引、預測修正、殘差計算、參數(shù)更新反 饋環(huán)路可使用流水線設計。并行預測的結(jié)果最終轉(zhuǎn)換為單路串行方式進行Golomb編碼。同 時,像素之間間隔一個像素時鐘周期使得在近無損模式下,每個像素能夠有足夠的時間計 算出對應的像素重建值供下一個像素進行上下文建模,使得圖像壓縮系統(tǒng)能夠在無損壓縮 和近無損壓縮模式間自由切換。并且,可W W圖像子塊為最小編碼單元,針對圖像不同區(qū)域 采用不同的近無損度參數(shù)Near進行壓縮,因此可對感興趣的目標區(qū)域進行無損壓縮,對其 他區(qū)域進行有損壓縮,運樣可W在不損失感興趣目標區(qū)域的信息的前提下提高壓縮比,減 小數(shù)據(jù)傳輸帶寬的壓力。整個壓縮系統(tǒng)不需要對算法進行任何會導致壓縮比下降的改進即 可在確保各環(huán)節(jié)具有充足時序裕量的同時,完整實現(xiàn)了真正的全流水設計,由此達到極高 的處理速度。
[0007] 本發(fā)明包括W下步驟:
[000引(1)預設參數(shù)
[0009] (1.1)讀入像素位寬參數(shù)PixeLwidth。本發(fā)明支持兩種量化比特數(shù)的圖像的壓 縮:10bit和12bit;
[0010] (1.2)讀入子塊大小參數(shù):子塊行數(shù);row_size和子塊列數(shù)column_size,確定最小 編碼單元 MCU(Minimum_Coded_Unit)--子塊大小;
[0011 ] (1.3)讀入檢糾錯模式選擇參數(shù)co;rrection_mode,選通所需的檢糾錯編碼方式: RS編碼或者屏蔽檢糾錯編碼;
[0012] (1.4)利用圖像的帖同步信號對上述參數(shù)進行鎖定,保持在一幅圖像進行壓縮的 時候,子塊大小參數(shù)和檢糾錯模式選擇運兩種參數(shù)不變;
[0013] (2)輸入像素值和近無損度參數(shù)化ar,進行圖像分塊
[0014] (2.1)將需要壓縮的圖像像素數(shù)據(jù)和與每一個像素對應的近無損度參數(shù)化ar-起 輸入至圖像緩存與分塊模塊中;
[0015] (2.2)根據(jù)讀入的子塊大小參數(shù)控制圖像的緩存量,當存儲器中圖像的行數(shù)等于 子塊行數(shù)時,通過控制讀地址按照設定好的子塊大小參數(shù)逐塊讀出圖像像素 Ix和與該像素 所對應的近無損度參數(shù)化ar,通過運種方式將整幅圖像分成若干子塊,并W子塊作為最小 編碼單元進行壓縮編碼。
[0016] (3) W圖像子塊為單位,將串行數(shù)據(jù)轉(zhuǎn)換為兩路并行數(shù)據(jù)
[0017] (3.1)像素數(shù)據(jù)和與之對應的近無損度參數(shù)Near按子塊為單位串行輸入到4個 FIFO所組成的結(jié)構(gòu)中。第1個子塊的像素按照像素時鐘連續(xù)寫入FIFOl中,寫完一個子塊后, 第2個子塊的像素按照像素時鐘連續(xù)寫入FIF03中,W此類推,第3個子塊的像素按照像素時 鐘連續(xù)寫入FIF02中,之后第4個子塊的像素按照像素時鐘連續(xù)寫入FIF04中,后續(xù)子塊按照 W上順序依次寫入四個FIFO中;
[0018] (3.2)像素數(shù)據(jù)按子塊為單位分為并行兩路輸出到兩路預測編碼模塊。FIFOl和 FIF02W圖像子塊為單位交替輸出像素 Ix和與該像素所對應的近無損度參數(shù)化ar至預測編 碼模塊1,并且每個像素之間間隔一個像素時鐘周期。同樣的,F(xiàn)IF03和FIF04W圖像子塊為 單位交替輸出像素 Ix和與該像素所對應的近無損度參數(shù)化ar至預測編碼模塊2,并且每個 像素之間間隔一個像素時鐘周期;
[0019] (3.3)上下文參數(shù)RAM初始化。在每一個子塊的像素寫入FIFO之前,對該子塊所對 應的近無損度參數(shù)化ar值進行采樣,并對上下文參數(shù)RAM進行初始化操作。
[0020] (4)并行預測編碼模塊。采用空間并行原理,設置兩路預測編碼模塊,同時進行預 測編碼,生成Golomb編碼所需的變量。
[0021] (4.1)上下文建模。把重建后的像素值Rx(即步驟4.3)中數(shù)據(jù)預處理環(huán)節(jié)計算得到 的像素重建值)輸入到"FIFO+寄存器"緩存結(jié)構(gòu)中,根據(jù)子塊大小參數(shù)控制FIFO的讀時機, 當已經(jīng)緩存了子塊中一行的像素后,開始從FIFO中讀出數(shù)據(jù),從寄存器上依次獲得當前像 素值的近鄰3、(3、6、(1,同時統(tǒng)計當前像素在子塊中的坐標值。根據(jù)行列計數(shù)得到當前像素的 坐標值,并讀取每一個子塊的第一個像素,即首像素巧。再根據(jù)當前像素值的行列坐標和子 塊大小參數(shù)對當前像素的4個近鄰進行邊緣處理,獲得重建值3曰、1?(3、肺、1?(1:當前像素的坐 標為子塊的第一行第一列時,3曰、3(3、肺、1?(1均等于首像素巧;當前像素的坐標為子塊的第一 行非第一列時,Ra等于對應坐標的像素值曰,而Rc、Rb、Rd均等于首像素巧;當前像素的坐標 為子塊的第一列非第一行時,與Rb等于b,Rc等于Ra在前一行時的重建值;當前像素的坐 標為子塊的最后一列時,Rb、Rd等于b的像素值,Ra、Rc等于a、c的像素值;在其他位置時,Ra、 1?。、肺、1?(1依次等于曰、。、13、(1;
[0022] (4.2)分為兩個計算環(huán)節(jié)同時進行:索引值計算和像素預測 [00剖像素預測:
[0024]根據(jù)JPEG-LS算法原理,通過上下文建模中Ra值、肺值W及Rc計算出像素預測值 Px,用寄存器輸出。
[00劇索引值計算:
[0026] (4.2.1)根據(jù)上下文建模的結(jié)果計算S個梯度值:Rd與Rb相減得到梯度一 D[0];Rb 與Re相減得到梯度二D[l] ;Rc與Ra相減得到梯度SD[2];
[0027] (4.2.2)根據(jù)初始化得到的梯度量化闊值(T1、T2、T3)分別對=個梯度進行量化, 具體處理方法為:將S個梯度值分別并行地與八個闊值(-T3、-T2、-T1、-NEAR、NEAR、T1、T2、 T3)作比較,每個比較結(jié)果對應于8位的最終比較結(jié)果中的一位,=個梯度生成3個Sbit的比 較結(jié)果。即若梯度大于口限第i級口限,但小于或等于該級口限,則Sbit的比較結(jié)果的0~i-1位均為1,i~7位為0;
[0028] (4.2.3)根據(jù)比較結(jié)果即可知道梯度位于哪個口限區(qū)間內(nèi),由此把該區(qū)間對應的 量化值賦給量化結(jié)果即可得到S個量化結(jié)果Q_0,Q_1,Q_2;
[0029] (4.2.4)梯度修正與符號判斷:分別判斷^個梯度量化值9_0,9_1,9_2是否為負 數(shù),若=個量化值從左到右第一個不為0的數(shù)是負數(shù),那么就把=個量化值的絕對值賦給= 個梯度修正值QO,Ql,Q2,同時符號標志SIGN等于-1,否則直接把=個量化值依次賦給梯度 修正值QO,Ql,Q2,同時符號標志SIGN等于1 ,SIGN值用寄存器輸出;
[0030] (4.2.5)索引地址計算:把^個梯度值依90,91,92依次與81、9、1相乘,再把^個乘 積相加,算出索引值Q,用寄存器輸出至流水線下一級。同時,寄存器輸出之前,索引值Q直接 作用至"上下文參數(shù)RAM", W數(shù)據(jù)伴隨的有效信號為讀使能,讀出索引值Q所對應的A、B、C、N 四個參數(shù)。
[0031] (4.3)數(shù)據(jù)預處理:包含上下文參數(shù)C、N選擇,預測值修正,殘差計算,殘差量化,像 素重建,殘差取模W及N參數(shù)更新等步驟。
[0032] (4.3.1)索引值Q不經(jīng)過任何計算直接用寄存器鎖存一級輸出至下一級,W供步驟 4.4中使用。
[0033] (4.3.2)上下文參數(shù)C、N選擇:在步驟4.2中,索引值Q和數(shù)據(jù)有效信號作用于"上下 文參數(shù)RAM" -周期后,參數(shù)A、B、C、N輸出。根據(jù)"沖突控制"模塊輸出的"沖突指示信號" collosion,從步驟4.5回傳的更新后的參數(shù)C_update、N_update和剛從"上下文參數(shù)RAM"讀 出的參數(shù)C、N當中進行選擇,輸出需要使用的參數(shù)C_sel、N_sel。當(3〇11〇3;[0]1為0時,選擇從 "上下文參數(shù)RAM"讀出的參數(shù)C、N,而collosion為l時,選擇從步驟4.5回傳的更新后的參數(shù) C_update、N_update。參數(shù)選擇采用組合邏輯實現(xiàn)。參數(shù)A和B不做任何計算,由寄存器鎖存 一級輸出。
[0034] (4.3.3 )N參數(shù)更新:根據(jù)肝EG-LS標準,使用符號標志SIGN與步驟"上下文參數(shù)C、N 選擇"所獲取的參數(shù)N_sel進行N參數(shù)的更新,更新后得到N_update。當N參數(shù)進行更新時,若 N_sel = =RESET條件滿足時,將N_f lag置1,否則置0 ;根據(jù)JPEG-LS標準,上下文參數(shù)更新 時,N_sel = =RESET運一條件的滿足與否會影響參數(shù)A、B的更新選擇,因此N_flag隨N_ update-起通過寄存器輸出至下一級,W供上下文參數(shù)A、B、C更新時使用。N_sel也用寄存 器輸出至下一級。
[0035] (4.3.4)預測值修正:根據(jù)肝EG-LS標準,使用符號標志SIGN與步驟"上下文參數(shù)C、 N選擇"所獲取的參數(shù)(:_361對預測值Px進行修正,獲得預測修正值PX_C ;
[0036] (4.3.5)殘差計算:根據(jù)肝EG-LS標準,利用符號標志SIGN、當前像素值Ix與預測修 正值Px_c運算獲得殘差值化rval;
[0037] (4.3.6)殘差量化:根據(jù)肝EG-LS標準,對殘差值化rval進行量化,得到殘差量化值 Errval_q;
[0038] (4.3.7)像素重建:根據(jù)肝EG-LS標準,通過符號標志SIGN、當前像素值IX、殘差量 化值化rval_qW及近無損度參數(shù)化ar值計算得到像素重建值Rx,再將像素重建值Rx反饋至 上下文建模模塊中,用來提供步驟4.1中當前像素上下文建模的環(huán)境模板。在無損壓縮模式 下,像素重建值Rx等于原像素值IX。
[0039] (4.3.8)殘差取模:根據(jù)JPEG-LS標準,利用殘差取模范圍RANGE對殘差量化值 化rval_q進行取模,使殘差映射到取模范圍內(nèi),得到殘差取模值化rval_Mod,并用寄存器輸 出至下一級。
[0040] (4.4)上下文參數(shù)更新,包含兩個環(huán)節(jié):上下文參數(shù)A、B選擇,上下文參數(shù)A、B、C更 新。
[0041] (4.4.1)上下文參數(shù)A、B選擇:根據(jù)"沖突控制"模塊輸出的"沖突指示信號" 。〇11〇3;[0]1,從步驟4.6回傳的更新后的參數(shù)4_啡(1曰16、8_啡(1曰16和步驟4.3輸出的參數(shù)八、6 當中進行選擇,輸出需要使用的參數(shù)4_361、B_sel。當col Iosion為0時,選擇步驟4.3輸出的 參數(shù)A、B,而(3〇11〇3;[0]1為1時,選擇從步驟4.6回傳的更新后的參數(shù)4_啡(1曰16、8_啡(1曰16。參 數(shù)選擇采用組合邏輯實現(xiàn)。
[00創(chuàng) (4.4.2)上下文參數(shù)A、B、C更新:根據(jù)肝EG-LS標準,使用殘差取模值化rval_Mod, 選擇后的參數(shù)A_sel、B_sel、C_sel,W及步驟4.3中N參數(shù)更新后輸出的N_f lag信號,采用組 合邏輯對上下文參數(shù)選擇后獲取的A、B、C參數(shù)進行更新計算(每一個子塊所對應的近無損 度參數(shù)化ar會伴隨像素進入預測編碼流水線中,根據(jù)當前使用的近無損度參數(shù)化ar進行參 數(shù)更新計算),得到更新的參數(shù)4_啡(1曰16、8_啡(1曰16、(:_啡(1曰16,連同步驟4.3中輸出過來的 N_update-起,寫入"上下文參數(shù)RAM",伴隨的數(shù)據(jù)有效信號作為RAM的"寫使能"信號,步驟 4.3中輸出的索引值Q作為RAM的"寫地址"。與此同時,A_叫date、B_叫date、C_叫date、N_ update通過寄存器輸出至下一級。篩選后的用來進行參數(shù)更新的S個參數(shù)A_sel、B_sel、N_ sel和殘差取模值化rval_Mod也通過寄存器輸出至下一級,W供殘差映射和K值計算使用。
[0043] (4.5)包括主要的兩個環(huán)節(jié),即殘差映射和K值計算。
[0044] (4.5.1) Stage4輸出的C_update、N_update參數(shù)直接回傳至步驟4.3參與預處理運 算中的上下文參數(shù)〔、的£擇。4_啡(1曰16、8_啡(1曰16參數(shù)則直接經(jīng)寄存器輸出至步驟4.6。
[0045] (4.5.2)殘差映射:根據(jù)肝EG-LS標準,使用殘差取模值化rval_Mod,選擇后的參數(shù) A_s e 1、B_s e 1計算出映射后的殘差值MErrva 1,經(jīng)寄存器輸出至步驟4.6。
[0046] (4.5.3化值計算:肝EG-LS標準中
實現(xiàn)方法為比較A與向左移位后的 N,當A = N時,現(xiàn)JK = O;當N<A < (N< < 1)時,現(xiàn)JK= 1;當(N< < 1) <A < (N< <2)時,現(xiàn)JK = 2; 當(N<<2)<A< (N<<3)時,貝化=3……W此類推,用運種方式實現(xiàn),可W減小計算復雜 度,縮短計算延時;計算得到K值后,通過寄存器輸出至步驟4.6;
[0047] (4.5.4)預測編碼中還有一個重要的環(huán)節(jié),即"數(shù)據(jù)沖突控制"。將步驟4.2和步驟 4.4中的索引值Q進行對比,生成對比結(jié)果:"沖突指示信號"collision。由于并行預測編碼 時,每一路的像素均相隔一個周期輸入,因此,當兩者相等時,表示相鄰的兩個像素使用的 是"上下文參數(shù)RAM"中的同一個地址的參數(shù),當前地址Qn像素剛進入"讀參數(shù)"環(huán)節(jié)時,上一 個Qn-I對應像素的上下文參數(shù)已更新完畢,但還未寫入到"上下文參數(shù)RAM"中,此時輸出 collision=l。當兩者不相等時,表示相鄰的兩個像素使用的是"上下文參數(shù)RAM"中的不同 地址的參數(shù),當前像素需要使用最新的上下文參數(shù)時,可W直接訪問"上下文參數(shù)RAM",此 時輸出collision = 0"collision伴隨每一級的數(shù)據(jù)有效信號逐級傳遞,并分別作用于步驟 4.2和步驟4.4中的上下文參數(shù)選擇模塊。
[004引(4.5.5)上下文參數(shù)RAM兵鳥操作模塊:為了防止誤碼擴散,需確保每個子塊的編 碼過程都是獨立完整的,即需要把每個子塊當做一幅獨立的圖像進行編碼,因此每個子塊 的參數(shù)初始化和更新都是獨立的,需要用到兩組RAM。在當前子塊做完進入下一子塊的編碼 時需清除當前塊對參數(shù)RAM的更新操作,使其回歸初始值,即需要對參數(shù)RAM使用各參數(shù)的 初始值進行初始化。由于A、B、C、N四個參數(shù)均為長度為365的數(shù)組,要完成初始化,需對365 個RAM地址寫入初始值。
[0049] (4.6)將步驟4 e)中傳輸過來的更新后的參數(shù)A_up da t e、B_up da t e回傳給步驟4.4 中,參與上下文參數(shù)A、B、C更新之前的上下文參數(shù)A、B選擇。
[0050] (5) W圖像子塊為單位,將兩路預測編碼結(jié)果并為一路輸出。
[0051] 當兩個預測編碼模塊進行預測編碼后,將兩路輸出結(jié)果W子塊為單位合并為一路 輸出至后續(xù)賭編碼模塊。預測編碼模塊1的將隨流水線傳遞的近無損度參數(shù)化ar、子塊的首 像素巧、編碼結(jié)果K值W及殘差映射值MErrval拼位后一并寫入到FIF05中,而預測編碼模塊 2的將隨流水線傳遞的近無損度參數(shù)化ar、子塊的首像素巧、編碼結(jié)果K值W及殘差映射值 MErrval拼位后一并寫入至IjFIFOS中。當FIF05中寫滿一個子塊的數(shù)目后,開始讀FIF05,讀完 一個子塊數(shù)目的數(shù)據(jù)后轉(zhuǎn)至FIF06,同樣等到輸出完一個子塊數(shù)目的數(shù)據(jù)后再跳轉(zhuǎn)至 FIF06,按照此循環(huán)進行讀取,使得預測編碼結(jié)果可連續(xù)輸出。
[0化2] (6)賭編碼:Golomb編碼
[0053] (6.1)根據(jù)串行輸出的K值,把串行輸出的殘差映射值MErrval右移K位,即把殘差 映射值除W2K,由此獲得商值val;
[0054] (6.2)用殘差映射值MErrval減去商值val并左移K位的結(jié)果,由此獲得殘差映射值 除W2K的余數(shù)n;
[0055] (6.3)生成編碼:如果計算出的商值val小于編碼限長口限LMAX,則把數(shù)值1左移K 位,在加上余數(shù)n即可生成編碼,而把商值加上K,再加1即可得到編碼長度,即val+K+1;若商 值不小于編碼限長口限LMAX,則把數(shù)值1右移像素位寬位,同時加上殘差映射值MErrval,再 減去1即可得到編碼,而此時的編碼長度為LIMIT;
[0056] (6.4)編碼拼接:根據(jù)編碼長度,從LIMIT位的編碼中提取有效編碼,從高到低地拼 接到64位的寄存器中,此處兩個64位的寄存器配合各自的計數(shù)器兵鳥地完成該工作。若其 中一個64位的寄存器寫滿時就把它輸出并清空,同時把編碼拼到另一個寄存器中;
[0化7] (7化DCXError Detection and Correction)信息生成
[0058] 將各個編碼長度進行累加,統(tǒng)計每個子塊的編碼總長,總長信息能保證區(qū)分開每 一個子塊對應的碼流。將每個子塊首像素巧和編碼總長W及該子塊使用的近無損度參數(shù) 化ar拼位,生成邸C信息。邸C信息提供了解碼所必需的相關信息;
[0059] (8)碼流整合與抓C信息插入:把生成的64位的碼流通過FIFO轉(zhuǎn)成16位后輸出,每 輸出16個子塊的碼流,就把運16個子塊的抓C信息插入到他們的碼流之后,為保證可靠性, 每個塊的抓C信息都要復制S份16塊為一組地插入到碼流中,S份之間兩兩相隔16個子塊 的碼流,即每輸出16塊的編碼之后,除了要插入當前16個子塊的抓C信息,還要把其前兩組 16個子塊的抓C信息插一遍,如此確保每個子塊的抓C信息倒在碼流中插了 3份。運樣雖然帶 來了一定的數(shù)據(jù)冗余,但是可保證在碼流傳輸時的信道誤碼對碼流信息造成一定程度損壞 的情況下,還能在解碼時將邸C信息提取出來,增加了碼流的抗誤碼性能。
[0060] (9)檢糾錯編碼:根據(jù)參數(shù)檢糾錯模式來選通使用的檢糾錯模式,RS編碼或者屏蔽 檢糾錯編碼:
[0061] (9.1)若選通RS編碼模式,則對生成的插入抓C信息的混合碼流,每223的扣信息 碼,生成32byte校驗碼并插入到該223的扣信息碼之后,W此生成抗誤碼碼流;
[0062] (9.2)若選通屏蔽檢糾錯編碼模式,則不進行檢糾錯編碼,直接將生成的插入抓C 信息的混合碼流輸出。
[0063] (9.3)選擇RS檢糾錯編碼可W防止一定程度的信道誤碼,但是會造成壓縮比的損 失,如果通信信道誤碼率低,為了提高壓縮比,可W選擇屏蔽檢糾錯編碼。
[0064] (10)碼流組帖:在一幅圖像的碼流的起始端加入帖頭識別字段和相關編碼信息, 編碼信息包括子塊大小,圖像大小,圖像像素位寬,檢糾錯編碼模式W及近無損度參數(shù),在 碼流的結(jié)尾加入帖尾識別字段,輸出生成的編碼碼流。
【附圖說明】
[0065] 圖1為本發(fā)明的流程圖;
[0066] 圖2為本發(fā)明中圖像分塊方式的示意圖;
[0067] 圖3為并行預測模塊的結(jié)構(gòu)框圖;
[0068] 圖4為并行預測模塊的輸入控制結(jié)構(gòu)框圖;
[0069] 圖5為并行預測模塊的輸出控制結(jié)構(gòu)框圖;
[0070] 圖6為并行預測模塊串并轉(zhuǎn)換接口的FIFO讀寫時序圖;
[0071 ]圖7為預測模塊的結(jié)構(gòu)框圖;
[0072] 圖8為當前像素與其四近鄰的關系圖;
[0073] 圖9為梯度量化模塊的結(jié)構(gòu)圖;
[0074] 圖10為預處理模塊的結(jié)構(gòu)圖;
[0075] 圖11為上下文參數(shù)更新結(jié)構(gòu)圖;
[0076] 圖12為數(shù)據(jù)沖突控制模塊結(jié)構(gòu)圖;
[0077] 圖13為數(shù)據(jù)沖突控制原理示意圖。
【具體實施方式】
[0078] 為了使本發(fā)明的目的、技術方案及優(yōu)點更加清楚明白,W下結(jié)合附圖及實施例,對 本發(fā)明進行進一步詳細說明。應當理解,此處所描述的具體實施例僅僅用W解釋本發(fā)明,并 不用于限定本發(fā)明。此外,下面所描述的本發(fā)明各個實施方式中所設及到的技術特征只要 彼此之間未構(gòu)成沖突就可W相互組合。
[0079] 如圖1所示,為本發(fā)明關于基于肝EG-LS壓縮算法的分塊壓縮抗誤碼擴散全流水線 無損/近無損星上圖像壓縮系統(tǒng)的實現(xiàn)流程所示,包括如下步驟:
[0080] 步驟1,預設參數(shù)。
[0081] 第一步,讀入像素位寬參數(shù)PixeLwidth。本發(fā)明支持兩種量化比特數(shù)的圖像的壓 縮:IObit和12bit。在針對特定的量化比特數(shù)的圖像壓縮時,像素位寬是一個確定的值,并 且保持不變。
[0082] 第二步,讀入子塊大小參數(shù):子塊行數(shù);row_size和子塊列數(shù)column_size,子塊行 數(shù)row_size可取8、16兩種(增大子塊行數(shù)將需要更大的存儲空間,同時導致更長的處理延 時),子塊列數(shù)column_size可取32、64兩種,因此有四種圖像子塊模式:8X32,8X64,16X 32W及16X64。將圖像分成若干子塊后進行壓縮,可W使得在壓縮碼流傳輸時引入誤碼后, 在解碼時,能將誤碼擴散影響局限在某一個子塊內(nèi)而不至于擴散影響到圖像其他部分的正 常解碼。實驗證明,子塊越小,壓縮比越低,但抗誤碼擴散性能越好;子塊越大,壓縮比越高, 但抗誤碼擴散性能越差。需根據(jù)實際需求設定適合的子塊大小。
[0083] 第S步,讀入檢糾錯模式選擇參數(shù)co;rrection_mode,選通所需的檢糾錯編碼方 式:RS編碼或者屏蔽檢糾錯編碼。
[0084] 第四步,利用圖像的帖同步信號對上述參數(shù)進行鎖定,保持在一幅圖像進行壓縮 的時候,子塊大小參數(shù)和檢糾錯模式選擇運兩種參數(shù)不變。
[0085] 步驟2,輸入像素值和近無損度參數(shù)化ar,進行圖像分塊。
[0086] 第一步,將需要壓縮的圖像像素數(shù)據(jù)和每一個像素所對應的近無損度參數(shù)化ar- 起輸入至圖像緩存與分塊模塊中。
[0087] 第二步,如圖2所示,根據(jù)讀入的子塊大小參數(shù)控制圖像的緩存量,當存儲器中圖 像的行數(shù)等于子塊行數(shù)時,通過控制讀地址按照設定好的子塊大小參數(shù)逐塊讀出圖像像素 Ix和與該該像素所對應的近無損度參數(shù)化ar,通過運種方式將整幅圖像分成若干子塊,并 W子塊作為最小編碼單元(MCU)進行壓縮編碼。
[00則本發(fā)明中,近無損度參數(shù)化ar可W取0,1,2,3四種,當化ar = 0時為無損壓縮模式, Near非0時為近無損壓縮模式。并且,本發(fā)明適應分區(qū)域無損/近無損壓縮,即可針對圖像中 不同的區(qū)域采用不同的近無損度參數(shù)Near進行壓縮,例如,可對感興趣的目標區(qū)域進行無 損壓縮,對其他區(qū)域進行有損壓縮,運樣可W在不損失感興趣目標區(qū)域的信息的前提下提 高壓縮比,減小數(shù)據(jù)傳輸帶寬的壓力。因此,在圖像進入壓縮系統(tǒng)之前,應設定好圖像各個 區(qū)域所采用的近無損度參數(shù)化ar。組成每個區(qū)域的最小單元為圖像的子塊,需要在輸入每 一個像素時,同時輸入與該像素所在區(qū)域?qū)慕鼰o損度參數(shù)化ar。
[0089] 步驟3, W圖像子塊為單位,將串行數(shù)據(jù)轉(zhuǎn)換為兩路并行數(shù)據(jù)。
[0090] 如圖3所示,利用四個FIFO把分塊后的圖像像素 Ix和與其對應的近無損度參數(shù) 化ar拼位后W圖像子塊為單位分別輸入到兩路并行的預測編碼模塊中,并且,F(xiàn)IFO在輸出 時,像素之間均間隔一個像素時鐘周期輸入(可使得步驟4中的Stage3有足夠的時間進行像 素重建的相關計算),各個FIFO的讀寫時序如圖6所示,第1、3、5、7……子塊進入預測編碼模 塊1進行預測編碼,第2、4、6、8……子塊進入預測編碼模塊2進行預測編碼。
[0091] 第一步,串行數(shù)據(jù)輸入。假設一個子塊的像素連續(xù)傳輸所需的時間為T,寫入時序 為:第1個子塊的像素按照像素時鐘連續(xù)寫入FIFOl中,T時間后寫完,第2個子塊的像素按照 像素時鐘連續(xù)寫入FIF03中,W此類推,第3個子塊的像素按照像素時鐘連續(xù)寫入FIF02中, 之后第4個子塊的像素按照像素時鐘連續(xù)寫入FIF04中,后續(xù)子塊按照W上順序依次寫入四 個FIFO中。
[0092] 第二步,并行數(shù)據(jù)輸出。兩路輸入的變量包括圖像像素 Ix和與之對應的近無損度 參數(shù)Near。若圖6所示,預測編碼模塊1的數(shù)據(jù)輸入時序為:當?shù)?個子塊的像素全部寫入 FIF03后,F(xiàn)IFOl開始輸出一個第1個子塊的像素,輸出時每個像素間隔一個像素時鐘周期, 輸出完整個子塊的像素需要至少2T的時間,待FIFOl將第1個子塊的像素輸出完后,切換至 FIF02,將FIF02中第3個子塊的像素在至少2T時間內(nèi)輸出完,此后FIFOl和FIF02依次交替輸 出。
[0093] 預測編碼模塊2的數(shù)據(jù)輸入時序與預測編碼模塊1相同:當FIF02中第3個子塊的像 素寫入完畢后,F(xiàn)IF03開始輸出第2個子塊的像素,輸出完后,緊接著FIF04開始輸出第4子塊 的像素,此后FIF03和FIF04依次交替輸出。同樣的,F(xiàn)IF03和FIF04輸出數(shù)據(jù)時,每個像素間 隔一個時鐘周期。
[0094] 第=步,上下文參數(shù)RAM初始化。由于按子塊進行壓縮,前后子塊之間參數(shù)需要保 持獨立,因此在下一個子塊進行預測編碼之前需要根據(jù)該子塊對應的近無損度參數(shù)化ar對 參數(shù)重新初始化,若在當前子塊做完之后才進行初始化,勢必阻止流水線的正常運行,降低 壓縮速度,因此需使用兵鳥操作,即在每一路預測編碼模塊中,A、B、C、N四個上下文參數(shù)均 擁有兩組具有365個地址(地址取值范圍為0到364)的RAM。正常工作時,一組RAM用于當前圖 像子塊的上下文參數(shù)更新,另一組則針對下一個圖像子塊進行初始化,W等待下一子塊的 訪問。因此初始化工作需提前進行:
[00M]在每一個子塊的像素寫入FIFO之前,需對該子塊所對應的近無損度參數(shù)化ar值進 行采樣,如圖6所示,當預測編碼模塊1中的第3個子塊剛開始寫入FIF02時,對該子塊的近無 損度參數(shù)化ar進行采樣,并開始初始化,由上下文參數(shù)RAM2參與此工作;與此同時,預測編 碼模塊I正在對第I個子塊像素進行上下文參數(shù)更新,由上下文參數(shù)RAMl參與上下文參數(shù)更 新工作;當?shù)?個子塊預測編碼結(jié)束后,第3個子塊從FIF02輸出,此時便使用上下文參數(shù) RAM2進行相關的參數(shù)更新工作……W運種方式進行兵鳥操作,可保證當該子塊的像素進行 預測編碼時,使用的是初始化完畢的上下文參數(shù)。
[0096] 由于像素位寬最大可達12bit,因此A、B兩個參數(shù)的參數(shù)RAM大小均為365*20bit、C 參數(shù)的為365*9bit,N的為365*7bitDB參數(shù)與C參數(shù)的初始值均為0,N參數(shù)初始值始終為1,A 參數(shù)的初始值為:
[0097]
[0098] 初始化工作是將A、B、C、N四個參數(shù)的初始值按照像素時鐘,連續(xù)地寫入到上下文 參數(shù)RAM的0到364的地址當中,本發(fā)明中使用雙端口RAM,運樣在初始化時,可W同時使用兩 個端口進行寫操作,運樣可W節(jié)省一半的初始化時間。
[0099] 步驟4,并行預測編碼模塊。
[0100] 如圖6所示,采用兩路預測模塊并行的模式,其中單路的預測模塊結(jié)構(gòu)如圖6所示, 采用全流水線結(jié)構(gòu),其中像素重建值Rx和一些上下文參數(shù)存在反饋回路。
[0101] Stagel:上下文建模。把重建后的像素值Rx(S化ge3中數(shù)據(jù)預處理環(huán)節(jié)中計算得到 的像素重建值)輸入到"FIFO+寄存器"緩存結(jié)構(gòu)中,根據(jù)子塊大小參數(shù)控制FIFO的讀時機, 當緩存了子塊中一行的像素量后,開始從FIFO中讀出數(shù)據(jù),從寄存器上依次獲得當前像素 值的近鄰a、c、b、d,同時統(tǒng)計當前像素在子塊中的坐標值。根據(jù)行列計數(shù)得到當前像素的坐 標值,并讀取每一個子塊的第一個像素,即首像素巧。再根據(jù)當前像素值的行列坐標和子塊 大小參數(shù)對當前像素的4個近鄰進行邊緣處理,獲得重建值3曰、1?(3、肺、1?(1。對于大多數(shù)像素, 如圖8(a)所示,其像素重建值與緩存結(jié)構(gòu)輸出的值存在如下關系:
[0102] 1?曰=曰,肺=13,1?。= (3,1?(1 = (1,即分別等于對應坐標的像素值。
[0103] 當處于W下4種特殊情形時為防誤碼擴散需保證每個子塊預測和編碼的獨立性, 因此需要打斷其與相鄰塊之間的關系,簡言之,當前子塊的上下文建模不能使用其之前和 之后的子塊的像素,因此需做W下處理:
[0104] (1)如圖8(b)所示,當前像素的坐標為子塊的第一行第一列時,3曰、1?(3、肺、1?(1均等 于首像素巧;
[0105] (2)如圖8(c)所示,當前像素的坐標為子塊的第一行非第一列時,Ra等于a對應坐 標的像素值,而Rc、Rb、Rd均等于首像素巧;
[0106] (3)如圖8(d)所示,當前像素的坐標為子塊的第一列非第一行時,I?a與Rb等于b對 應坐標的像素值,Re等于Ra在前一行時的重建值Ra_r;
[0107] (4)如圖8(e)所示,當前像素的坐標為子塊的最后一列時,Rb、Rd等于b對應坐標的 像素值,Ra、Re分別等于a、C對應坐標的像素值。
[0108] 完成后,將上下文重建值Ra、Rc、肺、Rd用寄存器輸出。
[0109] S化ge2:分為兩個計算環(huán)節(jié)同時進行,即索引值計算和像素預測。
[0110] (1)像素預測:比較上下文建模中Ra值與Rb值的大小,若Ra大于肺,則將Ra作為較 大值,將Rb作為較小值,否則將Rb作為較大值,將Ra作為較小值;比較Re值與較大值的大小, 若Re值大于較大值,則像素預測值Px等于較小值,否則,比較Re值與較小值的大小,若Re值 小于較小值,則像素預測值Px取較大值,否則,固定預測值Px取Ra值加上Rb值再減去Re值的 結(jié)果,最終得到像素預測值Px,用寄存器輸出。
[0111] (2)索引值計算:
[0112] (2.1)根據(jù)上下文建模的結(jié)果計算=個梯度值:Rd與Rb相減得到梯度一 D[0];Rb與 Re相減得到梯度二D[l] ;Rc與Ra相減得到梯度SD[2];
[0113] (2.2)根據(jù)初始化得到的梯度量化闊值(TUTl)分別對=個梯度進行量化,依據(jù) 肝EG-LS標準,當像素位寬pixel_wi化h選擇12bit時,梯度量化闊值為18、67、276;當像素位 寬pixel_wi化h選擇IObit時,梯度量化闊值為6、19、72,具體處理方法為:將=個梯度值分 別并行地與八個闊值(-T3、-T2、-T1、-肥AR、肥AR、T1、T2、T3)作比較,每個比較結(jié)果對應于8 位的最終比較結(jié)果中的一位,=個梯度生成3個Sbit的比較結(jié)果。即若梯度大于口限第i級 n限,但小于或等于該級口限,則Sbit的比較結(jié)果的0~i-1位均為l,i~7位為0;
[0114] (2.3)根據(jù)比較結(jié)果即可知道梯度位于哪個口限區(qū)間內(nèi),由此把該區(qū)間對應的量 化值賦給量化結(jié)果即可得到S個量化結(jié)果Q_0,Q_1,Q_2;
[0115] (2.4)梯度修正與符號判斷:分別判斷^個梯度量化值9_0,9_1,9_2是否為負數(shù), 若=個量化值從左到右第一個不為0的數(shù)是負數(shù),那么就把=個量化值的絕對值賦給=個 梯度修正值QO,Ql,Q2,同時符號標志SIGN等于-1,否則直接把=個量化值依次賦給梯度修 正值QO,Ql,Q2,同時符號標志SIGN等于1 ,SIGN值用寄存器輸出;
[0116] (2.5)索引地址計算:把=個梯度值依QO,Ql,Q2依次與81、9、1相乘,在把=個乘積 相加,算出索引值Q,用寄存器輸出至流水線下一級。同時,寄存器輸出之前,索引值Q直接作 用至"上下文參數(shù)RAM", W數(shù)據(jù)伴隨的有效信號為讀使能,讀出索引值Q所對應的A、B、C、N四 個參數(shù)。
[0117] S化ge3:數(shù)據(jù)預處理。
[0118] 包括幾個環(huán)節(jié):上下文參數(shù)C、N選擇,預測值修正,殘差計算,殘差量化,像素重建, 殘差取模W及N參數(shù)更新,如圖10所示。
[0119] 索引值Q不經(jīng)過任何計算直接用寄存器鎖存一級輸出至Stage4。
[0120] (2)上下文參數(shù)C、N選擇:在Stage2中,索引值Q和數(shù)據(jù)有效信號作用于"上下文參 數(shù)RAM" -周期后,參數(shù)A、B、C、N輸出。根據(jù)"沖突控制"模塊輸出的"沖突指示信號" col Iosion,從stages回傳的更新后的參數(shù)C_update、N_update和剛從"上下文參數(shù)RAM"讀 出的參數(shù)C、N當中進行選擇,輸出需要使用的參數(shù)C_sel、N_sel。當(3〇11〇3;[0]1為0時,選擇 從"上下文參數(shù)RAM"讀出的參數(shù)C、N,而collosion為1時,選擇從stages回傳的更新后的參 數(shù)C_啡date、N_啡date。參數(shù)選擇采用組合邏輯實現(xiàn)。參數(shù)A和B不做任何計算,由寄存器鎖 存一級輸出。
[0121] (3)N參數(shù)更新:根據(jù)JPEG-LS標準,使用符號標志SIGN與步驟"上下文參數(shù)C、N選 擇"所獲取的參數(shù)N_se 1進行N參數(shù)的更新,更新后得到N_update。當N參數(shù)進行更新時,若N_ sel = = RESET條件滿足時,將N_f lag置1,否則置0;根據(jù)JPEG-LS標準,上下文參數(shù)更新時, N_sel = =RESET運一條件的滿足與否會影響參數(shù)A、B的更新選擇,因此N_f lag隨N_update 一起通過寄存器輸出至下一級,W供上下文參數(shù)A、B、C更新時使用。N_sel也用寄存器輸出 至下一級。
[0122] (4)預測值修正:根據(jù)肝EG-LS標準,使用符號標志SIGN與步驟"上下文參數(shù)C、N選 擇"所獲取的參數(shù)(:_361對預測值Px進行修正,獲得預測修正值PX_C。
[0123] (5)殘差計算:根據(jù)肝EG-LS標準,利用符號標志SIGN、當前像素值Ix與預測修正值 Px_c運算獲得殘差值化rval。
[0124] (6)殘差量化:根據(jù)JPEG-LS標準,對殘差值化rval進行量化,得到殘差量化值 Er r va 1 _q,計算公式為:
[0125]
[01%]其中,int為取整操作,Errval為殘差值,化ar為近無損度參數(shù)。
[0127] (7)像素重建:根據(jù)肝EG-LS標準,通過符號標志SIGN、當前像素值IX、殘差量化值 化;rval_q W及近無損度參數(shù)化ar值計算得到像素重建值Rx,計算公式為:
[0128] Rx = Px_c+SIGN*E;;r;rval_q*U*Pfear+l)
[0129] 得到的像素重建值Rx再反饋至上下文建模模塊中,用來提供Stagel中當前像素上 下文建模的環(huán)境模板。在無損壓縮模式下,像素重建值Rx等于原像素值IX。
[0130] (8)殘差取模:根據(jù)肝EG-LS標準,利用殘差取模范圍RANGE對殘差量化值化rval_q 進行取模,使殘差映射到取模范圍內(nèi):
[0131]
[0132] 得到殘差取模值化rval_Mod,用寄存器輸出至下一級。
[0133] 預測編碼使用的參數(shù):每一個子塊所對應的近無損度參數(shù)化ar會隨著像素進入預 測編碼流水線中,在進行預測編碼時,根據(jù)像素位寬pixel_width和近無損度參數(shù)化ar實時 選擇列表中對應的殘差取模范圍RANGE。殘差取模范圍RANGE取值與像素位寬W及近無損度 參數(shù)化ar值相關:
[0134]
[01巧]S化ge4:上下文參數(shù)更新。
[0136] 如圖11所示,包含兩個環(huán)節(jié):上下文參數(shù)A、B選擇,上下文參數(shù)A、B、C更新。
[0137] (1)上下文參數(shù)A、B選擇:根據(jù)"沖突控削'模塊輸出的"沖突指示信號'collosion, 從Stage6回傳的更新后的參數(shù)A_update、B_update和Stage3輸出的參數(shù)A、B當中進行選擇, 輸出需要使用的參數(shù)4_361、8_361。當。〇11〇3;[0]1為0時,選擇51曰旨63輸出的參數(shù)4、8,而 〇〇11〇3;[0]1為1時,選擇從51日旨日6回傳的更新后的參數(shù)4_啡(1日1日、8_啡(1日1日。參數(shù)選擇采用組 合邏輯實現(xiàn)。
[0138] (2)上下文參數(shù)A、B、C更新:根據(jù)肝EG-LS標準,使用殘差取模值化rval_Mod,選擇 后的參數(shù)4_啡(1曰16、B_update、C_update, W及Stage3中N參數(shù)更新后輸出的N_f lag信號,采 用組合邏輯對上下文參數(shù)選擇后獲取的A、B、C參數(shù)進行更新計算(每一個子塊所對應的近 無損度參數(shù)化ar會伴隨像素進入預測編碼流水線中,根據(jù)當前使用的近無損度參數(shù)化ar進 行參數(shù)更新計算),得到更新的參數(shù)4_啡(1曰16、B_update、C_update,連同Stage3中輸出過來 的N_update-起,寫入"上下文參數(shù)RAM",伴隨的數(shù)據(jù)有效信號作為RAM的"寫使能"信號, Stage3中輸出的索引值Q作為RAM的"寫地址"。與此同時,A_update、B_update、C_update、N_ update通過寄存器輸出至下一級。篩選后的用來進行參數(shù)更新的S個參數(shù)A_sel、B_sel、N_ sel和殘差取模值化rval_Mod也通過寄存器輸出至下一級,W供殘差映射和K值計算使用。
[0139] S化ge5:包括主要的兩個環(huán)節(jié),即殘差映射和K值計算。
[0140] (1 )Stage4輸出的C_update、N_update參數(shù)直接回傳至Stage3參與預處理運算中 的上下文參數(shù)C、N選擇。A_update、B_update參數(shù)則直接經(jīng)寄存器輸出至StageG。
[0141] (2)殘差映射:根據(jù)JPEG-LS標準,使用殘差取模值化rval_Mod,選擇后的參數(shù)八_ S e 1、B_s e 1計算出映射后的殘差值MErrva 1,經(jīng)寄存器輸出至stages。
[0142] (3化值計算:根據(jù)肝EG-LS標準,
,實現(xiàn)方法為將A與向左移位后的N進 行比較,當A = N時,現(xiàn)JK = O;當N<A < N( <) 1時,現(xiàn)JK= 1;當(N< < 1) <A < (N< <2)時,現(xiàn)JK =2;當(N<<2)<A< (N<<3)時,貝化=3……W此類推,用運種方式實現(xiàn),可W減小計算 復雜度,縮短計算延時。計算得到K值后,通過寄存器輸出至stages。
[0143] (4)預測編碼中還有一個重要的環(huán)節(jié),即"數(shù)據(jù)沖突控制"。如圖12所示,將Stage2 和Stage4中的索引值Q進行對比,生成對比結(jié)果:"沖突指示信號"collision。如圖13所示, 由于并行預測編碼時,每一路的像素均相隔一個周期輸入,因此,當兩者相等時,表示相鄰 的兩個像素使用的是"上下文參數(shù)RAM"中的同一個地址的參數(shù),當前地址Qn像素剛進入"讀 參數(shù)"環(huán)節(jié)時(Stage2),上一個Qn-I對應像素的上下文參數(shù)已更新完畢(Stage4),但還未寫 入到"上下文參數(shù)RAM"中,此時輸出collision=l。當兩者不相等時,表示相鄰的兩個像素 使用的是"上下文參數(shù)RAM"中的不同地址的參數(shù),當前像素需要使用最新的上下文參數(shù)時, 可W直接訪問"上下文參數(shù)RAM",此時輸出collIsion = ODcollision伴隨每一級的數(shù)據(jù)有 效信號逐級傳遞,并分別作用于Stage2和Stage4中的上下文參數(shù)選擇模塊。
[0144] (5)上下文參數(shù)RAM兵鳥操作模塊:為了防止誤碼擴散,需確保每個子塊的編碼過 程都是獨立完整的,即需要把每個子塊當做一幅獨立的圖像進行編碼,因此每個子塊的參 數(shù)初始化和更新都是獨立的,需要用到兩組RAM。在當前子塊做完進入下一子塊的編碼時需 清除當前塊對參數(shù)RAM的更新操作,使其回歸初始值,即需要對參數(shù)RAM使用各參數(shù)的初始 值進行初始化。由于A、B、C、N四個參數(shù)均為長度為365的數(shù)組,要完成初始化,需對365個RAM 地址寫入初始值。
[0145] StageG:將stages中傳輸過來的更新后的參數(shù)A_update、B_update回傳給Stage4 中,參與上下文參數(shù)A、B、C更新之前的上下文參數(shù)A、B選擇。
[0146] 步驟5, W圖像子塊為單位,將兩路預測編碼結(jié)果并為一路輸出。
[0147] 如圖5所示,當兩個預測編碼模塊進行預測編碼后,將兩路輸出結(jié)果W子塊為單位 合并為一路輸出至后續(xù)賭編碼模塊。預測編碼模塊1的將隨流水線傳遞的近無損度參數(shù) Near、子塊的首像素巧、編碼結(jié)果K值W及殘差映射值MErrval拼位后一并寫入到FIF05中, 而預測編碼模塊2的將隨流水線傳遞的近無損度參數(shù)化ar、子塊的首像素巧、編碼結(jié)果K值 W及殘差映射值MErrval拼位后一并寫入到FIF06中。操作時序如圖6所示,當FIF05中寫滿 一個子塊的數(shù)目后,開始讀FIF05,讀完一個子塊數(shù)目的數(shù)據(jù)后轉(zhuǎn)至FIF06,同樣等到輸出完 一個子塊數(shù)目的數(shù)據(jù)后再跳轉(zhuǎn)至FIF06, W此循環(huán)讀取,使得預測編碼結(jié)果可連續(xù)輸出。
[0148] 步驟6,賭編碼:Golomb編碼。
[0149] 第一步,根據(jù)串行輸出的K值,把串行輸出的殘差映射值MErrval右移K位,即把殘 差映射值除W2K,由此獲得商值val;
[0150] 第二步,用殘差映射值MErrval減去商值val并左移K位的結(jié)果,由此獲得殘差映射 值除W2K的余數(shù)n;
[0151] 編碼參數(shù)包括殘差映射位寬qbpp和變長編碼口限LMAX,因此,針對不同像素位寬 和近無損度參數(shù)化ar,殘差映射位寬qbpp的取值為:
[0152]
[0153]在參數(shù)初始化時,可根據(jù)像素位寬pixel_width和近無損度參數(shù)化ar選擇列表中 對應的殘差映射位寬qbpp。而變長編碼口限LMAX可根據(jù)JPEG-LS標準中的計算公式實時計 算得到:LMAX = LIMIT-Qbpp-I,供后面生成編碼使用;
[0154] 第S步,生成編碼:如果計算出的商值val小于編碼限長口限LMAX,則把數(shù)值1左移 K位,在加上余數(shù)n即可生成編碼,而把商值加上K,再加1即可得到編碼長度,即val+K+1;若 商值不小于編碼限長口限LMAX,則把數(shù)值1右移像素位寬位,同時加上殘差映射值MErrval, 再減去1即可得到編碼,而此時的編碼長度為LIMIT;
[0155] 第四步,編碼拼接:根據(jù)編碼長度,從LIMIT位的編碼中提取有效編碼,從高到低地 拼接到64位的寄存器中,此處兩個64位的寄存器配合各自的計數(shù)器兵鳥地完成該工作。若 其中一個64位的寄存器寫滿時就把它輸出并清空,同時把編碼拼到另一個寄存器中。
[0156] 步驟7,邸C化rror Detection and Correction)信息生成。
[0157] 將各個編碼長度進行累加,統(tǒng)計每個子塊的編碼總長,總長信息能保證區(qū)分開每 一個子塊對應的碼流。將每個子塊首像素巧和編碼總長W及該子塊使用的近無損度參數(shù) 化ar拼位,生成邸C信息。邸C信息提供了解碼所必需的相關信息。
[015引步驟8,碼流整合與邸C信息插入。
[0159] 把生成的64位的碼流通過FIFO轉(zhuǎn)成16位后輸出,每輸出16個子塊的碼流,就把運 16個子塊的抓C信息插入到他們的碼流之后,為保證可靠性,每個塊的抓C信息都要復制S 份16塊為一組地插入到碼流中,=份之間兩兩相隔16個子塊的碼流,即每輸出16塊的編碼 之后,除了要插入當前16個子塊的抓C信息,還要把其前兩組16個子塊的抓C信息插一遍,如 此確保每個子塊的抓C信息倒在碼流中插了 3份。運樣雖然帶來了一定的數(shù)據(jù)冗余,但是可 保證在碼流傳輸時的信道誤碼對碼流信息造成一定程度損壞的情況下,還能在解碼時將 EDC信息提取出來,增加了碼流的抗誤碼性能。
[0160] 步驟9,檢糾錯編碼。
[0161] 根據(jù)參數(shù)檢糾錯模式來選通使用的檢糾錯模式,RS編碼或者屏蔽檢糾錯編碼:
[0162] 若選通RS編碼模式,則對生成的插入抓C信息的混合碼流,每223b^e信息碼,生 成32byte校驗碼并插入到該223的扣信息碼之后,W此生成抗誤碼碼流;
[0163] 若選通屏蔽檢糾錯編碼模式,則不進行檢糾錯編碼,直接將生成的插入邸C信息的 混合碼流輸出。
[0164] 選擇RS檢糾錯編碼可W防止一定程度的信道誤碼,但是會造成壓縮比的損失,如 果通信信道誤碼率低,為了提高壓縮比,可W選擇屏蔽檢糾錯編碼。
[01化]步驟10,碼流組帖。
[0166] 在一幅圖像的碼流的起始端加入帖頭識別字段和相關編碼信息,編碼信息包括子 塊大小,圖像大小,圖像像素位寬,檢糾錯編碼模式W及近無損度參數(shù),在碼流的結(jié)尾加入 帖尾識別字段,輸出生成的編碼碼流。
[0167] 本領域的技術人員容易理解,W上所述僅為本發(fā)明的較佳實施例而已,并不用W 限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi)所作的任何修改、等同替換和改進等,均應包含 在本發(fā)明的保護范圍之內(nèi)。
【主權項】
1. 一種防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實現(xiàn)方法,其特征在于, 包括以下步驟: (1) 預設參數(shù) (1 · 1)讀入像素位寬參數(shù)pixel_width; (1.2) 讀入子塊大小參數(shù):子塊行數(shù)row_size和子塊列數(shù)column_size,確定最小編碼 單元 MCU(Minimum_Coded_Unit)子塊大小; (1.3) 讀入檢糾錯模式選擇參數(shù)correction_mode,選通所需的檢糾錯編碼方式:RS編 碼或者屏蔽檢糾錯編碼; (1.4) 利用圖像的幀同步信號對上述參數(shù)進行鎖定,保持在一幅圖像進行壓縮的時候, 子塊大小參數(shù)和檢糾錯模式選擇這兩種參數(shù)不變; (2) 輸入像素值和近無損度參數(shù)Near,進行圖像分塊 (2.1) 將需要壓縮的圖像像素數(shù)據(jù)和與每一個像素對應的近無損度參數(shù)Near-起輸入 至圖像緩存與分塊模塊中; (2.2) 根據(jù)讀入的子塊大小參數(shù)控制圖像的緩存量,當存儲器中圖像的行數(shù)等于子塊 行數(shù)時,通過控制讀地址按照設定好的子塊大小參數(shù)逐塊讀出圖像像素 lx和與該像素所對 應的近無損度參數(shù)Near,通過這種方式將整幅圖像分成若干子塊,并以子塊作為最小編碼 單元進行壓縮編碼; (3) 以圖像子塊為單位,將串行數(shù)據(jù)轉(zhuǎn)換為兩路并行數(shù)據(jù) (3.1) 像素數(shù)據(jù)和與之對應的近無損度參數(shù)Near按子塊為單位串行輸入到4個FIFO所 組成的結(jié)構(gòu)中;第1個子塊的像素按照像素時鐘連續(xù)寫入FIF01中,寫完一個子塊后,第2個 子塊的像素按照像素時鐘連續(xù)寫入FIF03中,以此類推,第3個子塊的像素按照像素時鐘連 續(xù)寫入FIF02中,之后第4個子塊的像素按照像素時鐘連續(xù)寫入FIF04中,后續(xù)子塊按照以上 順序依次寫入四個FIFO中; (3.2) 像素數(shù)據(jù)按子塊為單位分為并行兩路輸出到兩路預測編碼模塊;FIF01和FIF02 以圖像子塊為單位交替輸出像素 lx和與該像素所對應的近無損度參數(shù)Near至預測編碼模 塊1,并且每個像素之間間隔一個像素時鐘周期;同樣的,F(xiàn)IF03和FIF04以圖像子塊為單位 交替輸出像素 lx和與該像素所對應的近無損度參數(shù)Near至預測編碼模塊2,并且每個像素 之間間隔一個像素時鐘周期; (3.3) 上下文參數(shù)RAM初始化:在每一個子塊的像素寫入FIFO之前,對該子塊所對應的 近無損度參數(shù)Near值進行采樣,并對上下文參數(shù)RAM進行初始化操作; (4) 并行預測編碼模塊:采用空間并行原理,設置兩路預測編碼模塊,同時進行預測編 碼,生成Go lomb編碼所需的變量; (4.1)上下文建模:把重建后的像素值Rx輸入到"FIF0+寄存器"緩存結(jié)構(gòu)中,根據(jù)子塊 大小參數(shù)控制FIFO的讀時機,當已經(jīng)緩存了子塊中一行的像素后,開始從FIFO中讀出數(shù)據(jù), 從寄存器上依次獲得當前像素值的近鄰a、c、b、d,同時統(tǒng)計當前像素在子塊中的坐標值;根 據(jù)行列計數(shù)得到當前像素的坐標值,并讀取每一個子塊的第一個像素,即首像素 Fp;再根據(jù) 當前像素值的行列坐標和子塊大小參數(shù)對當前像素的4個近鄰進行邊緣處理,獲得重建值 1^、此、此、1?(1 :當前像素的坐標為子塊的第一行第一列時,1^、此、此、1?(1均等于首像素??;當 前像素的坐標為子塊的第一行非第一列時,Ra等于對應坐標的像素值a,而Rc、Rb、Rd均等于 首像素 Fp;當前像素的坐標為子塊的第一列非第一行時,Ra與Rb等于b,Rc等于Ra在前一行 時的重建值;當前像素的坐標為子塊的最后一列時,Rb、Rd等于b的像素值,Ra、Rc等于a、c的 像素值;在其他位置時,Ra、Rc、Rb、Rd依次等于a、c、b、d; (4.2)分為兩個計算環(huán)節(jié)同時進行:索引值計算和像素預測 像素預測: 根據(jù)JPEG-LS算法原理,通過上下文建模中Ra值、Rb值以及Rc計算出像素預測值Px,用 寄存器輸出; 索引值計算: (4.2.1) 根據(jù)上下文建模的結(jié)果計算三個梯度值:Rd與Rb相減得到梯度一 D[0];Rb與Rc 相減得到梯度二D[l] ;Rc與Ra相減得到梯度三D[2]; (4.2.2) 根據(jù)初始化得到的梯度量化閾值(T1、T2、T3)分別對三個梯度進行量化,具體 處理方法為:將三個梯度值分別并行地與八個閾值(_T3、-T2、-T1、-NEAR、NEAR、T1、T2、T3) 作比較,每個比較結(jié)果對應于8位的最終比較結(jié)果中的一位,三個梯度生成3個8bit的比較 結(jié)果;即若梯度大于門限第i級門限,但小于或等于該級門限,則8bit的比較結(jié)果的0~i-1 位均為1,i~7位為0; (4.2.3) 根據(jù)比較結(jié)果即可知道梯度位于哪個門限區(qū)間內(nèi),由此把該區(qū)間對應的量化 值賦給量化結(jié)果即可得到三個量化結(jié)果Q_〇,Q_1,Q_2; (4.2.4) 梯度修正與符號判斷:分別判斷三個梯度量化值Q_0,Q_1,Q_2是否為負數(shù),若 三個量化值從左到右第一個不為〇的數(shù)是負數(shù),那么就把三個量化值的絕對值賦給三個梯 度修正值Q〇,Q1,Q2,同時符號標志SIGN等于-1,否則直接把三個量化值依次賦給梯度修正 值Q0,Q1,Q2,同時符號標志SIGN等于1,SIGN值用寄存器輸出; (4.2.5) 索引地址計算:把三個梯度值依Q0,Ql,Q2依次與81、9、1相乘,再把三個乘積相 加,算出索引值Q,用寄存器輸出至流水線下一級;同時,寄存器輸出之前,索引值Q直接作用 至"上下文參數(shù)RAM",以數(shù)據(jù)伴隨的有效信號為讀使能,讀出索引值Q所對應的A、B、C、N四個 參數(shù); (4.3)數(shù)據(jù)預處理:包含上下文參數(shù)C、N選擇,預測值修正,殘差計算,殘差量化,像素重 建,殘差取模以及N參數(shù)更新; (4.3.1) 索引值Q不經(jīng)過任何計算直接用寄存器鎖存一級輸出至下一級,以供步驟4.4 中使用; (4.3.2) 上下文參數(shù)C、N選擇:在步驟4.2中,索引值Q和數(shù)據(jù)有效信號作用于"上下文參 數(shù)RAM" 一周期后,參數(shù)A、B、C、N輸出;根據(jù)"沖突控制"模塊輸出的"沖突指示信號" (:〇11〇8;[〇11,從步驟4.5回傳的更新后的參數(shù)(]_即(^丨6、1'1_即(^丨6和剛從"上下文參數(shù)1^1"讀 出的參數(shù)C、N當中進行選擇,輸出需要使用的參數(shù)(:_861、1'1_861;當collosion為0時,選擇從 "上下文參數(shù)RAM"讀出的參數(shù)C、N,而co 11 〇 s i on為1時,選擇從步驟4.5回傳的更新后的參數(shù) C_update、N_update;參數(shù)選擇采用組合邏輯實現(xiàn);參數(shù)A和B不做任何計算,由寄存器鎖存 一級輸出; (4.3.3) N參數(shù)更新:根據(jù)JPEG-LS標準,使用符號標志SIGN與步驟"上下文參數(shù)C、N選 擇"所獲取的參數(shù)N_sel進行N參數(shù)的更新,更新后得到N_update;當N參數(shù)進行更新時,若N_ sel = = RESET條件滿足時,將N_flag置1,否則置0;根據(jù)JPEG-LS標準,上下文參數(shù)更新時, N_sel = =RESET這一條件的滿足與否會影響參數(shù)A、B的更新選擇,因此N_f 一起通過寄存器輸出至下一級,以供上下文參數(shù)A、B、C更新時使用;N_sel也用寄存器輸出 至下一級; (4.3.4) 預測值修正:根據(jù)JPEG-LS標準,使用符號標志SIGN與步驟"上下文參數(shù)C、N選 擇"所獲取的參數(shù)C_sel對預測值Px進行修正,獲得預測修正值Px_c; (4.3.5) 殘差計算:根據(jù)JPEG-LS標準,利用符號標志SIGN、當前像素值lx與預測修正值 算獲得殘差值Errval; (4.3.6) 殘差量化:根據(jù)JPEG-LS標準,對殘差值Errval進行量化,得到殘差量化值 Errval_q; (4.3.7) 像素重建:根據(jù)JPEG-LS標準,通過符號標志SIGN、當前像素值Ix、殘差量化值 ErrVal_q以及近無損度參數(shù)Near值計算得到像素重建值Rx,再將像素重建值Rx反饋至上下 文建模模塊中,用來提供步驟4.1中當前像素上下文建模的環(huán)境模板;在無損壓縮模式下, 像素重建值Rx等于原像素值Ιχ; (4.3.8) 殘差取模:根據(jù)JPEG-LS標準,利用殘差取模范圍RANGE對殘差量化值Errval_q 進行取模,使殘差映射到取模范圍內(nèi),得到殘差取模值ErrVal_M〇d,并用寄存器輸出至下一 級; (4.4) 上下文參數(shù)更新,包含兩個環(huán)節(jié):上下文參數(shù)A、B選擇,上下文參數(shù)A、B、C更新; (4.4.1) 上下文參數(shù)八』選擇:根據(jù)"沖突控制"模塊輸出的"沖突指示信號"(:〇11〇以〇11, 從步驟4.6回傳的更新后的參數(shù)4_卯(^七6、13_卯(^七6和步驟4.3輸出的參數(shù)4、13當中進行選 擇,輸出需要使用的參數(shù)六_8e 1、B_se 1;當co 11 〇sion為0時,選擇步驟4.3輸出的參數(shù)A、B,而 collosion為1時,選擇從步驟4.6回傳的更新后的參數(shù)4_卯(^6、13_卯(^6;參數(shù)選擇采用 組合邏輯實現(xiàn); (4.4.2) 上下文參數(shù)A、B、C更新:根據(jù)JPEG-LS標準,使用殘差取模值Errval_Mod,選擇 后的參數(shù)六_861、8_861、(:_861,以及步驟4.3中~參數(shù)更新后輸出的~_;^38信號,采用組合邏 輯對上下文參數(shù)選擇后獲取的A、B、C參數(shù)進行更新計算(每一個子塊所對應的近無損度參 數(shù)Near會伴隨像素進入預測編碼流水線中,根據(jù)當前使用的近無損度參數(shù)Near進行參數(shù)更 新計算),得到更新的參、B_update、C_update,連同步驟4 · 3中輸出過來的N_ update-起,寫入"上下文參數(shù)RAM",伴隨的數(shù)據(jù)有效信號作為RAM的"寫使能"信號,步驟 4.3中輸出的索引值Q作為RAM的"寫地址";與此同時,A_update、B_update、C_update、N_ update通過寄存器輸出至下一級;篩選后的用來進行參數(shù)更新的三個參數(shù)A_sel、B_sel、N_ sel和殘差取模值Errval_Mod也通過寄存器輸出至下一級,以供殘差映射和K值計算使用; (4.5) 包括主要的兩個環(huán)節(jié),即殘差映射和K值計算; (4.5.1) Stage4輸出的C_update、N_update參數(shù)直接回傳至步驟4.3參與預處理運算中 的上下文參數(shù)(3、1'1選擇 ;4_即(^丨6、13_即(^丨6參數(shù)則直接經(jīng)寄存器輸出至步驟4.6; (4.5.2) 殘差映射:根據(jù)JPEG-LS標準,使用殘差取模值Errval_Mod,選擇后的參數(shù)A_ s e 1、B_s e 1計算出映射后的殘差值MErrva 1,經(jīng)寄存器輸出至步驟4.6; (4.5.3 )K值計算:JPEG-LS標準中,實現(xiàn)方法為比較A與向左移位后的N,當A =N時,則K = 0;當N<A< (N<<1)時,則K=l;當(N<<1)<A< (N<<2)時,則K = 2;當(N <<2)<A<(N<<3)時,則K = 3……以此類推,用這種方式實現(xiàn),可以減小計算復雜度,縮 短計算延時;計算得到Κ值后,通過寄存器輸出至步驟4.6; (4.5.4) 預測編碼中還有一個重要的環(huán)節(jié),即"數(shù)據(jù)沖突控制";將步驟4.2和步驟4.4中 的索引值Q進行對比,生成對比結(jié)果:"沖突指示信號"collision;由于并行預測編碼時,每 一路的像素均相隔一個周期輸入,因此,當兩者相等時,表示相鄰的兩個像素使用的是"上 下文參數(shù)RAM"中的同一個地址的參數(shù),當前地址Qn像素剛進入"讀參數(shù)"環(huán)節(jié)時,上一個Qn-l 對應像素的上下文參數(shù)已更新完畢,但還未寫入到"上下文參數(shù)RAM"中,此時輸出 C〇llisi〇n=l;當兩者不相等時,表示相鄰的兩個像素使用的是"上下文參數(shù)RAM"中的不同 地址的參數(shù),當前像素需要使用最新的上下文參數(shù)時,可以直接訪問"上下文參數(shù)RAM",此 時輸出collision = 0; collision伴隨每一級的數(shù)據(jù)有效信號逐級傳遞,并分別作用于步驟 4.2和步驟4.4中的上下文參數(shù)選擇模塊; (4.5.5) 上下文參數(shù)RAM乒乓操作模塊:為了防止誤碼擴散,對每個子塊獨立進行編碼, 因此每個子塊的參數(shù)初始化和更新都是獨立的,使用兩組RAM;在當前子塊做完進入下一子 塊的編碼時需清除當前塊對參數(shù)RAM的更新操作,使其回歸初始值,即需要對參數(shù)RAM使用 各參數(shù)的初始值進行初始化;由于A、B、C、N四個參數(shù)均為長度為365的數(shù)組,要完成初始化, 需對365個RAM地址寫入初始值; (4.6)將步驟4.5中傳輸過來的更新后的參數(shù)A_update、B_update回傳給步驟4.4中,參 與上下文參數(shù)A、B、C更新之前的上下文參數(shù)A、B選擇; (5) 以圖像子塊為單位,將兩路預測編碼結(jié)果并為一路輸出; 當兩個預測編碼模塊進行預測編碼后,將兩路輸出結(jié)果以子塊為單位合并為一路輸出 至后續(xù)熵編碼模塊;預測編碼模塊1的將隨流水線傳遞的近無損度參數(shù)Near、子塊的首像素 Fp、編碼結(jié)果K值以及殘差映射值MErrval拼位后一并寫入到FIF05中,而預測編碼模塊2的 將隨流水線傳遞的近無損度參數(shù)Near、子塊的首像素 Fp、編碼結(jié)果K值以及殘差映射值 MErrval拼位后一并寫入至ljFIF06中;當FIF05中寫滿一個子塊的數(shù)目后,開始讀FIF05,讀完 一個子塊數(shù)目的數(shù)據(jù)后轉(zhuǎn)至FIF06,同樣等到輸出完一個子塊數(shù)目的數(shù)據(jù)后再跳轉(zhuǎn)至 FIF06,按照此循環(huán)進行讀取,使得預測編碼結(jié)果可連續(xù)輸出; (6) 熵編碼:Golomb編碼 (6.1) 根據(jù)串行輸出的K值,把串行輸出的殘差映射值MErrval右移K位,即把殘差映射 值除以2K,由此獲得商值val; (6.2) 用殘差映射值MErrval減去商值val并左移K位的結(jié)果,由此獲得殘差映射值除以 2K的余數(shù)η; (6.3) 生成編碼:如果計算出的商值val小于編碼限長門限LMAX,則把數(shù)值1左移Κ位,在 加上余數(shù)η即可生成編碼,而把商值加上K,再加1即可得到編碼長度,即val+Κ+Ι;若商值不 小于編碼限長門限LMAX,則把數(shù)值1右移像素位寬位,同時加上殘差映射值MErrval,再減去 1即可得到編碼,而此時的編碼長度為LIMIT; (6.4) 編碼拼接:根據(jù)編碼長度,從LIMIT位的編碼中提取有效編碼,從高到低地拼接到 64位的寄存器中,此處兩個64位的寄存器配合各自的計數(shù)器乒乓地完成該工作;若其中一 個64位的寄存器寫滿時就把它輸出并清空,同時把編碼拼到另一個寄存器中; (7) EDC(Error Detection and Correction)信息生成 將各個編碼長度進行累加,統(tǒng)計每個子塊的編碼總長,總長信息能保證區(qū)分開每一個 子塊對應的碼流;將每個子塊首像素 Fp和編碼總長以及該子塊使用的近無損度參數(shù)Near拼 位,生成EDOf目息;EDOf目息提供了解碼所必需的相關彳目息; (8) 碼流整合與EDC信息插入:把生成的64位的碼流通過FIFO轉(zhuǎn)成16位后輸出,每輸出 16個子塊的碼流,就把這16個子塊的EDC信息插入到他們的碼流之后,為保證可靠性,每個 塊的EDC信息都要復制三份16塊為一組地插入到碼流中,三份之間兩兩相隔16個子塊的碼 流,即每輸出16塊的編碼之后,除了要插入當前16個子塊的EDC信息,還要把其前兩組16個 子塊的H)C信息插一遍,如此確保每個子塊的EDC信息倒在碼流中插了 3份;這樣雖然帶來了 一定的數(shù)據(jù)冗余,但是可保證在碼流傳輸時的信道誤碼對碼流信息造成一定程度損壞的情 況下,還能在解碼時將H)C信息提取出來,增加了碼流的抗誤碼性能; (9) 檢糾錯編碼:根據(jù)參數(shù)檢糾錯模式來選通使用的檢糾錯模式,RS編碼或者屏蔽檢糾 錯編碼: (9.1) 若選通RS編碼模式,則對生成的插入EDC信息的混合碼流,每223byte信息碼,生 成32byte校驗碼并插入到該223byte信息碼之后,以此生成抗誤碼碼流; (9.2) 若選通屏蔽檢糾錯編碼模式,則不進行檢糾錯編碼,直接將生成的插入EDC信息 的混合碼流輸出; (9.3) 選擇RS檢糾錯編碼可以防止一定程度的信道誤碼,但是會造成壓縮比的損失,如 果通信信道誤碼率低,為了提高壓縮比,可以選擇屏蔽檢糾錯編碼; (10) 碼流組幀:在一幅圖像的碼流的起始端加入幀頭識別字段和相關編碼信息,編碼 信息包括子塊大小,圖像大小,圖像像素位寬,檢糾錯編碼模式以及近無損度參數(shù),在碼流 的結(jié)尾加入幀尾識別字段,輸出生成的編碼碼流。2. 根據(jù)權利要求1所述的防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實現(xiàn)方 法,其特征在于,步驟1.1中所述的像素位寬pixel_width為lObit和12bit兩種取值。3. 根據(jù)權利要求1或2所述的防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實 現(xiàn)方法,其特征在于,步驟1.2中所述子塊大小參數(shù):子塊行數(shù)r 〇W_size取8、16兩種;子塊列 數(shù)(3〇11111111_8丨26取32、64兩種。4. 根據(jù)權利要求1或2所述的防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實 現(xiàn)方法,其特征在于,步驟2中所述的近無損度參數(shù)Near取0、1、2、3四種,當Near = 0時為無 損壓縮模式,Near非0時為近無損壓縮模式。5. 根據(jù)權利要求1或2所述的防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實 現(xiàn)方法,其特征在于,在步驟3.3中使用乒乓操作,即在每一路預測編碼模塊中,A、B、C、N四 個上下文參數(shù)均擁有兩組具有365個地址的RAM;正常工作時,一組RAM用于當前圖像子塊的 上下文參數(shù)更新,另一組則針對下一個圖像子塊進行初始化,以等待下一子塊的訪問;因此 初始化工作需提前進行:在每一個子塊的像素寫入FIFO之前,需對該子塊所對應的近無損 度參數(shù)Near值進行采樣,當預測編碼模塊1中的第3個子塊剛開始寫入FIF02時,對該子塊的 近無損度參數(shù)Near進行采樣,并開始初始化,由上下文參數(shù)RAM2參與此工作;與此同時,預 測編碼模塊1正在對第1個子塊像素進行上下文參數(shù)更新,由上下文參數(shù)RAM1參與上下文參 數(shù)更新工作;當?shù)?個子塊預測編碼結(jié)束后,第3個子塊從FIF02輸出,此時便使用上下文參 數(shù)RAM2進行相關的參數(shù)更新工作。6. 根據(jù)權利要求5所述的防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實現(xiàn)方 法,其特征在于,步驟3.3中所述的RAM:像素位寬最大為12bit,A、B兩個參數(shù)的參數(shù)RAM大小 均為 365*20bit、C 參數(shù)的為 365*9bit,N 的為 365*7bit; 根據(jù)初始讀入的像素位寬pixel_width和采樣得到的近無損度參數(shù)Near對四個參數(shù)A、 B、C、N的參數(shù)RAM進行初始化,B參數(shù)與C參數(shù)的初始值均為0,N參數(shù)初始值始終為1,A參數(shù)的 初始值為:7. 根據(jù)權利要求1或2所述的防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實 現(xiàn)方法,其特征在于,步驟4.2中所述的梯度量化閾值依據(jù)JPEG-LS標準,當像素位寬pixel_ 界1(11:11選擇1213;[1:時,梯度量化閾值為18、67、276 ;當像素位寬。1161_¥1(11:11選擇1013;[1:時,梯 度量化閾值為6、19、72。8. 根據(jù)權利要求1或2所述的防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實 現(xiàn)方法,其特征在于,步驟4.3中所述的殘差取模范圍RANGE取值與像素位寬以及近無損度 Near值相關:在進行圖像壓縮時,根據(jù)像素位寬pixel_width和近無損度參數(shù)Near選擇列表中對應 的殘差取模范圍RANGE。9. 根據(jù)權利要求1或2所述的一種防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬 件實現(xiàn)方法,其特征在于,步驟6.3中所述的編碼參數(shù)包括殘差映射位寬qbpp和變長編碼門 限LMAX,在不同像素位寬和近無損度參數(shù)情況下,殘差映射位寬qbpp的取值為:在參數(shù)初始化時,可根據(jù)像素位寬pixel_width和近無損度參數(shù)Near選擇列表中對應 的殘差映射位寬qbpp;而變長編碼門限LMAX可根據(jù)JPEG-LS標準中的計算公式實時計算得 至 lJ:LMAX = UMIT-qbpp-l。10. 根據(jù)權利要求1或2所述的防誤碼擴散的JPEG-LS圖像無損/近無損壓縮算法硬件實 現(xiàn)方法,其特征在于,步驟7中所述的EDC技術:把每個子塊的碼流長度作為編碼信息插入到 碼流中,該信息在不同的位置插入三次且保證相鄰的兩個插入點相隔足夠遠以保證誤碼發(fā) 生時仍可提取正確的子塊碼流長度信息;解碼時,根據(jù)該子塊長度信息提取各個子塊的碼 流,可以把出現(xiàn)在子塊中的信道誤碼影響限制在單個子塊內(nèi)。
【文檔編號】H04N19/124GK105828070SQ201610165800
【公開日】2016年8月3日
【申請日】2016年3月23日
【發(fā)明人】顏露新, 張?zhí)煨? 陳立群, 桑紅石, 鐘勝, 李軍
【申請人】華中科技大學