專利名稱:Jpeg_ls游程編碼fpga實(shí)現(xiàn)方法
技術(shù)領(lǐng)域:
本發(fā)明涉及圖像處理技術(shù)領(lǐng)域,更進(jìn)一步涉及圖像壓縮領(lǐng)域中的JPEG_LS(JointPhotographic Experts Group-lossless)圖像壓縮系統(tǒng)中一種游程編碼現(xiàn)場(chǎng)可編程門陣列FPGA(Field-Programmable Gate Array)實(shí)現(xiàn)方法。本發(fā)明在建立遍歷全部索引值情況加和表的基礎(chǔ)上,提供用于二分比較的數(shù)組,通過(guò)查表和二分比較更新索引值,實(shí)現(xiàn)游程編碼。本發(fā)明可應(yīng)用于圖像壓縮系統(tǒng)中大面積灰度值相同的圖像壓縮編碼。
背景技術(shù):
JPEG_LS圖像壓縮編碼實(shí)現(xiàn)方法廣泛應(yīng)用于圖像壓縮領(lǐng)域,由于其游程編碼依靠 循環(huán)結(jié)構(gòu)完成,每一次循環(huán)都需要更新數(shù)據(jù),所以游程編碼一直難以在硬件設(shè)計(jì)中高速、低資源實(shí)現(xiàn)。北京空間機(jī)電研究所專利申請(qǐng)的“ JPEG_LS游程編碼硬件實(shí)現(xiàn)方法”(專利申請(qǐng)?zhí)?01010120398. 4,公開號(hào)CN101783953)中公開了一種用FPGA實(shí)現(xiàn)JPEG-LS游程編碼的方法,該方法首先通過(guò)計(jì)數(shù)獲得游程長(zhǎng)度,引入編碼映射操作,在FPGA內(nèi)部存儲(chǔ)4個(gè)映射表,通過(guò)比較查表操作流水線實(shí)現(xiàn)編碼,解決了原標(biāo)準(zhǔn)結(jié)構(gòu)中多個(gè)時(shí)鐘周期循環(huán)編碼問(wèn)題。該方法根據(jù)殘差編碼采用索引值單周期更新操作,同時(shí)游長(zhǎng)編碼和殘差編碼采用索引值雙周期更新操作,提高了編碼速度。該方法的不足之處是為了完成編碼映射操作,引入了 4個(gè)映射表,每個(gè)表都要存儲(chǔ)大量的數(shù)據(jù)信息,需要耗費(fèi)許多存儲(chǔ)器等硬件資源。西安空間無(wú)線電技術(shù)研究所在其專利申請(qǐng)“基于JPEG-LS算法的碼流拼接實(shí)現(xiàn)系統(tǒng)及方法”(專利申請(qǐng)?zhí)?01010240137. 6,公開號(hào)CN101895760)中公開了一種基于JPEG_LS壓縮編碼的碼流拼接及實(shí)現(xiàn)方法,其中涉及游程編碼結(jié)構(gòu)如下在像素點(diǎn)滿足游長(zhǎng)條件時(shí),對(duì)其進(jìn)行游程編碼操作,每輸入一個(gè)滿足條件的像素點(diǎn)就更新游程長(zhǎng)度,接著用游程長(zhǎng)度逐次與索引值信息進(jìn)行比較,以比特流的形式輸出比較結(jié)果,完成標(biāo)準(zhǔn)算法中復(fù)雜的游長(zhǎng)編碼,同時(shí)在逐次比較中更新索引值,用更新的索引值和游程長(zhǎng)度進(jìn)行殘差編碼,最終拼接碼流完成編碼。該方法的不足之處是對(duì)每個(gè)滿足條件的像素點(diǎn)都進(jìn)行比較操作,每次比較輸出結(jié)果,每個(gè)周期都進(jìn)行比較和更新操作,致使其運(yùn)算量大,處理速度慢。
發(fā)明內(nèi)容
本發(fā)明的目的在于針對(duì)上述已有技術(shù)的不足,提出一種處理速率高,占用資源少的全流水結(jié)構(gòu)JPEG_LS游程編碼FPGA實(shí)現(xiàn)方法。該方法建立并查找加和表,通過(guò)二分比較法將已有技術(shù)中復(fù)雜的循環(huán)編碼結(jié)構(gòu)簡(jiǎn)化,縮短編碼實(shí)現(xiàn)的周期,在減少資源的同時(shí)提高
處理速率。為了實(shí)現(xiàn)上述目的,本發(fā)明的技術(shù)方案是將通過(guò)索引值建立映射表,映射表中包含32個(gè)加和數(shù)組,其中每個(gè)數(shù)組對(duì)應(yīng)一種索引值情況,數(shù)組中存儲(chǔ)逐次累加的結(jié)果。編碼器編碼時(shí)引用上一次編碼更新的索引值,查找此索引值對(duì)應(yīng)的加和數(shù)組,用二分比較法,通過(guò)五次比較得出游程長(zhǎng)度與加和數(shù)組的比較信息。根據(jù)比較信息計(jì)算出循環(huán)次數(shù),由此循環(huán)次數(shù)進(jìn)行游長(zhǎng)編碼、游程長(zhǎng)度更新和索引值的第一步更新,簡(jiǎn)化了更新索引值的循環(huán)結(jié)構(gòu)。分隔編碼、殘差編碼和行尾編碼與索引值的第二步更新在判斷行尾信號(hào)后順序執(zhí)行,最后將四次編碼的碼流依次連接合成為碼字輸出。本發(fā)明包括以下步驟(I)輸入像素點(diǎn) Ia)將需要壓縮的圖像像素點(diǎn)輸入到JPEG_LS編碼器中;Ib)將當(dāng)前像素點(diǎn)數(shù)值信息傳輸至下一個(gè)像素點(diǎn)編碼處;Ic)按照當(dāng)前像素點(diǎn)與其鄰近點(diǎn)的相應(yīng)位置關(guān)系,依次從隨機(jī)存儲(chǔ)器中讀出當(dāng)前像素點(diǎn)的上一行鄰近點(diǎn)信息;Id)將需要壓縮的圖像行尾信號(hào)輸入到JPEG_LS編碼器中;Ie)將需要壓縮的圖像初次編碼信號(hào)輸入到JPEG_LS編碼器中。(2)判斷游程長(zhǎng)度2a)比較當(dāng)前像素點(diǎn)數(shù)值與其所有鄰近點(diǎn)數(shù)值是否相等,若所有鄰近點(diǎn)數(shù)值均與當(dāng)前像素點(diǎn)數(shù)值相等,則計(jì)數(shù)器加“1”,返回步驟(I)讀取下一個(gè)要處理的像素點(diǎn)及其鄰近點(diǎn)信息,直至出現(xiàn)任一鄰近點(diǎn)數(shù)值與當(dāng)前像素點(diǎn)數(shù)值不相等的情形時(shí),停止計(jì)數(shù);2b)將停止后的計(jì)數(shù)器內(nèi)存儲(chǔ)的數(shù)值提取出來(lái)作為游程長(zhǎng)度,存儲(chǔ)在移位寄存器內(nèi)。(3)建立加和表3a)對(duì)標(biāo)準(zhǔn)算法中參考數(shù)組的每個(gè)數(shù)值做“2”次冪運(yùn)算,將冪運(yùn)算結(jié)果組成移位數(shù)組;3b)將標(biāo)準(zhǔn)算法中的索引值在取值范圍內(nèi)連續(xù)取值,按照索引值的取值大小,依次在移位數(shù)組內(nèi)分別查找出編號(hào)對(duì)應(yīng)索引值的數(shù)值,將查找出的數(shù)值與編號(hào)在其后方的數(shù)值逐次進(jìn)行累加運(yùn)算,將每次累加運(yùn)算的結(jié)果組成編號(hào)為索引值的加和數(shù)組;3c)將步驟3b)中得到的所有加和數(shù)組存入隨機(jī)存儲(chǔ)器中,組成一個(gè)加和表,供后續(xù)操作進(jìn)行查找。(4)判斷索引值大小判斷步驟(I)中的初次編碼信號(hào)是否有效,若有效,設(shè)置索引值為“0”,否則設(shè)置索引值為移位寄存器內(nèi)編碼更新的索引值,將索引值存儲(chǔ)在移位寄存器內(nèi)。(5)查找加和表按照索引值大小,查找加和表中編號(hào)對(duì)應(yīng)于索引值的加和數(shù)組,讀取出加和數(shù)組中存儲(chǔ)的數(shù)值信息,將得到的加和數(shù)組信息存儲(chǔ)在移位寄存器中。(6) 二分比較6a)將范圍為“O”到“32”的區(qū)間作為比較區(qū)間;6b)求出當(dāng)前比較區(qū)間兩個(gè)邊界點(diǎn)數(shù)值的平均值,將平均值作為中間點(diǎn),以中間點(diǎn)為界限,將比較區(qū)間劃分為上、下兩部分區(qū)間;6c)提取出移位寄存器內(nèi)的加和數(shù)組和游程長(zhǎng)度,查找加和數(shù)組中編號(hào)對(duì)應(yīng)于當(dāng)前中間點(diǎn)的數(shù)值,判斷游程長(zhǎng)度值是否小于中間點(diǎn)對(duì)應(yīng)的數(shù)值若小于,則在比較信息中記錄一比特“0”,選取下半個(gè)區(qū)間作為比較區(qū)間;否則,在比較信息中記錄一比特“1”,選取上半個(gè)區(qū)間作為比較區(qū)間,返回步驟6b),重新選取中間點(diǎn)進(jìn)行比較操作,直到進(jìn)行五次比較操作,獲得五個(gè)比特的比較信息后,停止操作;6d)將獲得五個(gè)比特比較信息的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù),對(duì)十進(jìn)制數(shù)進(jìn)行加“ I ”操作;將相加后的結(jié)果作為循環(huán)次數(shù)值,存入移位寄存器內(nèi)。(7)游長(zhǎng)編碼將從移位寄存器中提取的循環(huán)次數(shù)值作為度量值,輸出以此度量值為長(zhǎng)度的全“ I ”碼流到壓縮碼流緩存器中。(8)更新參數(shù)8a)提取移位寄存器中的更新索引值和循環(huán)次數(shù)值,將更新索引值與循環(huán)次數(shù)值相加,將相加的結(jié)果作為索引值更新的中間結(jié)果存入移位寄存器中; Sb)將循環(huán)次數(shù)值減去“I”得到的數(shù)值作為查找編號(hào),讀出移位寄存器中的游程長(zhǎng)度和加和數(shù)組,提取加和數(shù)組中查找編號(hào)對(duì)應(yīng)的數(shù)值,用游程長(zhǎng)度減去此對(duì)應(yīng)數(shù)值,得到更新的游程長(zhǎng)度值,將更新的游程長(zhǎng)度值存入移位寄存器中。(9)判斷步驟(I)中輸入的行尾信號(hào)是否有效9a)若有效,輸出一比特“I”到壓縮碼流緩存器中;將從移位寄存器中提取的索引值更新的中間結(jié)果作為編碼更新的索引值;9b)若無(wú)效,輸出一比特“O”到壓縮碼流緩存器中,提取移位寄存器中索引值更新的中間結(jié)果和更新的游程長(zhǎng)度,將索引值更新的中間結(jié)果作為編號(hào),提取參考數(shù)組中此編號(hào)對(duì)應(yīng)的數(shù)值,將此數(shù)值作為度量值,輸出以度量值為長(zhǎng)度,以更新的游程長(zhǎng)度值為大小的二進(jìn)制碼流;將索引值更新的中間結(jié)果減去“I”得到的數(shù)值作為編碼更新的索引值;9c)將編碼更新的索引值存儲(chǔ)在移位寄存器中,供編碼器在判斷索引值時(shí)使用。(10)碼字合成將編碼時(shí)存入壓縮碼流緩存器中的碼流按照存儲(chǔ)順序連接在一起,輸出連接后合成的碼流到編碼器外部。本發(fā)明與現(xiàn)有技術(shù)相比具有如下優(yōu)點(diǎn)第一,本發(fā)明建立遍歷所有索引值情況的加和表,將累加和結(jié)果存入表中,編碼時(shí)通過(guò)索引值查找對(duì)應(yīng)的加和數(shù)組,通過(guò)游程長(zhǎng)度與加和數(shù)組的比較,獲得游長(zhǎng)編碼中的循環(huán)次數(shù),利用查表法簡(jiǎn)化了標(biāo)準(zhǔn)實(shí)現(xiàn)方法中復(fù)雜的循環(huán)結(jié)構(gòu),克服了現(xiàn)有技術(shù)多次循環(huán)比較的復(fù)雜結(jié)構(gòu),實(shí)現(xiàn)用固定的時(shí)鐘周期完成編碼,加快了 JPEG_LS游程編碼的壓縮處理速率。第二,本發(fā)明在現(xiàn)有技術(shù)的基礎(chǔ)上,對(duì)標(biāo)準(zhǔn)算法中的邏輯進(jìn)行簡(jiǎn)化,通過(guò)查找一個(gè)累加和數(shù)組代替了復(fù)雜的循環(huán)結(jié)構(gòu),克服了現(xiàn)有技術(shù)邏輯復(fù)雜、資源占用多的問(wèn)題,以低資源實(shí)現(xiàn)了編碼壓縮。第三,本發(fā)明采用二分比較法,將游程長(zhǎng)度與加和數(shù)組中的數(shù)值進(jìn)行五次比較,得到循環(huán)次數(shù),利用二分比較法,克服了現(xiàn)有技術(shù)比較次數(shù)過(guò)多、實(shí)現(xiàn)速度緩慢的問(wèn)題,減少了比較運(yùn)算的次數(shù),在節(jié)省硬件資源的同時(shí)加快了壓縮編碼速率。
圖I為本發(fā)明流程圖;圖2為本發(fā)明當(dāng)前像素點(diǎn)與鄰近點(diǎn)位置關(guān)系的示意圖3為本發(fā)明二分比較過(guò)程中劃分區(qū)間的示意圖。
具體實(shí)施例方式參照?qǐng)D1,本發(fā)明的具體實(shí)施步驟如下步驟I,輸入像素點(diǎn)將需要壓縮的圖像像素點(diǎn)輸入到JPEG_LS編碼器中。將當(dāng)前像素點(diǎn)數(shù)值信息傳輸至下一個(gè)像素點(diǎn)編碼處,當(dāng)前像素點(diǎn)數(shù)值信息作為下一個(gè)處理像素點(diǎn)的鄰近點(diǎn),在下一次編碼時(shí)使用。按照當(dāng)前像素點(diǎn)與其鄰近點(diǎn)的相應(yīng)位置關(guān)系,依次從隨機(jī)存儲(chǔ)器(RAM)中讀出當(dāng)前像素點(diǎn)的上一行鄰近點(diǎn)信息。當(dāng)前像素點(diǎn)與鄰近點(diǎn)的其對(duì)應(yīng)位置關(guān)系為上一個(gè)處理的像素點(diǎn),上一個(gè)處理像素點(diǎn)上方的像素點(diǎn),當(dāng)前處理像素點(diǎn)上方的像素點(diǎn),下一個(gè)處理像素·點(diǎn)上方的像素點(diǎn)。將需要壓縮的圖像行尾信號(hào)輸入到JPEG_LS編碼器中,行尾信號(hào)用來(lái)判斷是否到了圖像一行中最后一個(gè)像素點(diǎn),將行尾信號(hào)作為傳輸信號(hào)在電路中向后級(jí)傳輸,一直傳輸至行尾編碼處理級(jí)。將需要壓縮的圖像初次編碼信號(hào)輸入到JPEG_LS編碼器中,初始編碼信號(hào)用于判斷本幀圖像是否為第一次編碼,將初始編碼信號(hào)作為傳輸信號(hào)在電路中向后級(jí)傳輸,一直傳輸至判斷索引值的處理級(jí)。圖2所示為本發(fā)明實(shí)施例中當(dāng)前像素點(diǎn)與鄰近點(diǎn)位置的關(guān)系,圖中,a表示上一個(gè)處理的像素點(diǎn),c表示上一個(gè)處理像素點(diǎn)上方的像素點(diǎn),b表示當(dāng)前處理像素點(diǎn)上方的像素點(diǎn),d表示下一個(gè)處理像素點(diǎn)上方的像素點(diǎn)。按照上述位置關(guān)系獲得四個(gè)鄰近點(diǎn)像素值,并將其輸入至編碼器中,供游程編碼使用。本發(fā)明實(shí)施例中,設(shè)置行尾信號(hào)與初始編碼信號(hào)為無(wú)效狀態(tài)。步驟2,判斷游程長(zhǎng)度比較當(dāng)前像素點(diǎn)數(shù)值與其所有鄰近點(diǎn)數(shù)值是否相等,若所有鄰近點(diǎn)數(shù)值均與當(dāng)前像素點(diǎn)數(shù)值相等,則計(jì)數(shù)器加“1”,返回步驟I讀取下一個(gè)要處理的像素點(diǎn)及其鄰近點(diǎn)信息,直至出現(xiàn)任一鄰近點(diǎn)數(shù)值與當(dāng)前像素點(diǎn)數(shù)值不相等的情形時(shí),停止計(jì)數(shù)。當(dāng)所有鄰近點(diǎn)信息均與當(dāng)前像素點(diǎn)信息相等時(shí),說(shuō)明圖像出現(xiàn)了平滑區(qū)域,當(dāng)前像素點(diǎn)滿足進(jìn)行游程編碼的條件,將記錄游程編碼像素點(diǎn)個(gè)數(shù)的計(jì)數(shù)器加“ I ”。將停止后的計(jì)數(shù)器內(nèi)存儲(chǔ)的數(shù)值提取出來(lái)作為游程長(zhǎng)度,存儲(chǔ)在移位寄存器內(nèi)。本發(fā)明實(shí)施例中,用RunCnt表示游程長(zhǎng)度,令游程長(zhǎng)度RunCnt =15。步驟3,建立加和表對(duì)標(biāo)準(zhǔn)算法中參考數(shù)組的每個(gè)數(shù)值做“2”次冪運(yùn)算,將冪運(yùn)算結(jié)果組成移位數(shù)組。將標(biāo)準(zhǔn)算法中的索引值在取值范圍內(nèi)連續(xù)取值,按照索引值的取值大小,依次在移位數(shù)組內(nèi)分別查找出編號(hào)對(duì)應(yīng)索引值的數(shù)值,將查找出的數(shù)值與編號(hào)在其后方的數(shù)值逐次進(jìn)行累加運(yùn)算,將每次累加運(yùn)算的結(jié)果組成編號(hào)為索引值的加和數(shù)組。逐次累加的步驟如下(I)設(shè)置移位數(shù)組的編號(hào)為索引值,設(shè)置加和數(shù)組的編號(hào)為“0”,將加和數(shù)組中編號(hào)為“-I”的數(shù)值設(shè)置為“O”;⑵將移位數(shù)組中編號(hào)對(duì)應(yīng)的數(shù)值與加和數(shù)組中編號(hào)減“I”對(duì)應(yīng)的數(shù)值相加,將得到的結(jié)果存入加和數(shù)組中編號(hào)對(duì)應(yīng)位;(3)將移位數(shù)組的編號(hào)與“I”相加,若相加后移位數(shù)組的編號(hào)大于“30”,設(shè)置移位數(shù)組的編號(hào)為“31”,否則移位數(shù)組的編號(hào)為相加后的結(jié)果,將加和數(shù)組中的編號(hào)與“I”相加,相加后得到的結(jié)果為加和數(shù)組的編號(hào),返回步驟(2)進(jìn)行加和操作,一直到加和數(shù)組中存滿“32”個(gè)數(shù)值,停止加和操作。其中,索引值取值范圍為“O”到“31”的整數(shù)值。將得到的所有加和數(shù)組存入隨機(jī)存儲(chǔ)器中,組成一個(gè)加和表,供后續(xù)操作進(jìn)行查找。因?yàn)樗饕倒灿小?2”個(gè)取值,所以共建立了 32個(gè)加和數(shù)組組成加和表。本發(fā)明實(shí)施例中,標(biāo)準(zhǔn)數(shù)組用J表示,移位數(shù)組用J_Trans表示,索引值用RunIndex表示,索引值對(duì)應(yīng)的加和數(shù)組用Sum_RunIndex表示,k表示加和數(shù)組中的編號(hào),取值范圍是“O”到“31”, Sum_RunIndex[k]表示加和數(shù)組中第k+Ι個(gè)數(shù)值,i表示數(shù)組中的編號(hào),取值范圍是“O”到“31”,J [i]表示數(shù)組J中第i+Ι個(gè)數(shù)值。
本發(fā)明以RunIndex = 3 為例,建立加和表 Sum_3 :其中,J =
;移位數(shù)組 J_Trans = 2J[1]=[I,I,I,1,2,2,2,2,4,4,4,4,8,8,8,8,16,16,32,32,64,64,128,256,512,1024,2048,4096,8192,16384,32768];首先設(shè)置移位數(shù)組初始編號(hào)為索引值“3”,設(shè)置加和數(shù)組編號(hào)為“0”,令加和數(shù)組Sum_3[-1]的數(shù)值等于“O”;將移位數(shù)組中編號(hào)為“3”數(shù)值J_Trans[3]與加和數(shù)組中編號(hào)為“_1”的數(shù)值Sum_3[-1]相加Sum_3
= J_Trans[3] +Sum_3[-1] = 1+0 = I,將得到的結(jié)果“I” 存入加和數(shù)組中編號(hào)為“O”的Sum_3
中,即Sum_3
= I ;將移位數(shù)組編號(hào)加“1”,移位數(shù)組編號(hào)更新為“4”,經(jīng)判斷相加后的結(jié)果小于“30”,故編號(hào)為相加后的結(jié)果“4”,將加和數(shù)組的編號(hào)加“ 1”,將得到的結(jié)果“ I”作為加和數(shù)組的編號(hào);使用更新后的編號(hào)繼續(xù)進(jìn)行加和運(yùn)算,將移位數(shù)組中編號(hào)為“4”的數(shù)值J_Trans[4]與加和數(shù)組中編號(hào)為“O”的數(shù)值Sum_3
相加Sum_3[l] = J_Trans[4] +Sum_3[O] = 1+2 = 3,將相加后的結(jié)果存入加和數(shù)組中編號(hào)為“I”的數(shù)值中,即Sum_3[l]=3 ;依次做加和運(yùn)算,一直到加和數(shù)組的編號(hào)取到“31”,建立了加和數(shù)組Sum_3中的“32”數(shù)值。計(jì)算出編號(hào)k從“O”到“31”的所有取值,得到包含32個(gè)數(shù)據(jù)的Sum_3數(shù)組Sum_3=[1,3,5,7,9,13,17,21,25,33,41,49,57,73,89,121,153,217,281,409,665,1177,2201,4249,8345,16537,32921,65689,98457,131225,163993,196761]。步驟4,判斷索引值大小判斷步驟I中的初次編碼信號(hào)是否有效,若有效,設(shè)置索引值為“0”,否則設(shè)置索引值為移位寄存器內(nèi)的更新索引值,將索引值存儲(chǔ)在移位寄存器內(nèi)。初次編碼信號(hào)用于判斷是否為本幀圖像的第一次編碼,如果此信號(hào)有效,說(shuō)明之前沒有進(jìn)行過(guò)編碼,并無(wú)更新出的索引值,故將索引值設(shè)置為初始值“O”。本發(fā)明實(shí)施例中,由于編碼信號(hào)無(wú)效,故取移位寄存器中存儲(chǔ)的更新索引值,令移位寄存器內(nèi)更新的索引值RunIndex = 3。步驟5,查找加和表
按照索引值大小,查找加和表中編號(hào)對(duì)應(yīng)于索引值的加和數(shù)組,讀取出加和數(shù)組中存儲(chǔ)的數(shù)值信息,將得到的數(shù)值信息存儲(chǔ)在移位寄存器中。本發(fā)明實(shí)施例中,索引值RunIndex = 3,查找加和表中編號(hào)為“3”的加和數(shù)組Sum_3的32個(gè)數(shù)據(jù)信息。步驟6,二分比較6a)將范圍為“O”到“32”的區(qū)間作為比較區(qū)間;6b)求出當(dāng)前比較區(qū)間兩個(gè)邊界點(diǎn)數(shù)值的平均值,將平均值作為中間點(diǎn),以中間點(diǎn)為界限,將比較區(qū)間劃分為上、下兩部分區(qū)間;6c)提取出移位寄存器內(nèi)的加和數(shù)組和游程長(zhǎng)度,查找加和數(shù)組中編號(hào)對(duì)應(yīng)于當(dāng)前中間點(diǎn)的數(shù)值,判斷游程長(zhǎng)度值是否小于中間點(diǎn)對(duì)應(yīng)的數(shù)值若小于,則在比較信息中記 錄一比特“0”,選取下半個(gè)區(qū)間作為比較區(qū)間;否則,在比較信息中記錄一比特“1”,選取上半個(gè)區(qū)間作為比較區(qū)間,返回步驟6b),重新選取中間點(diǎn)進(jìn)行比較操作,直到進(jìn)行五次比較操作,獲得五個(gè)比特的比較信息后,停止操作;圖3為本發(fā)明實(shí)施例中二分比較過(guò)程中劃分區(qū)間的示意圖,圖中Sum_RunIndex表示步驟6c)中移位寄存器內(nèi)的加和數(shù)組,共包含“32”個(gè)數(shù)值。圖中第一行的中間界點(diǎn)表示第一次執(zhí)行步驟6b)時(shí)求出的平均值,此平均值將整個(gè)區(qū)間劃分為兩個(gè)區(qū)間,每個(gè)區(qū)間包含“16”個(gè)數(shù)值,通過(guò)步驟6c)中的比較操作選取其中一個(gè)區(qū)間;第二行中新增的“2”個(gè)界點(diǎn)分別是第一次執(zhí)行步驟6b)時(shí)劃分出的“2”個(gè)區(qū)間的平均值,此平均值將原始區(qū)間劃分為“2”個(gè)區(qū)間,每個(gè)區(qū)間包含“8”個(gè)值,共得到“4”個(gè)區(qū)間,通過(guò)步驟6c)比較選取其中一個(gè)區(qū)間;第三行中新增的“4”個(gè)界點(diǎn)分別是第二次執(zhí)行步驟6b)時(shí)劃分出的“4”個(gè)區(qū)間的平均值,此平均值將原始區(qū)間劃分為兩個(gè)區(qū)間,每個(gè)區(qū)間包含“4”個(gè)值,共得到“8”個(gè)區(qū)間,通過(guò)步驟6c)比較選取其中一個(gè)區(qū)間;第四行中新增的“8”個(gè)界點(diǎn)分別是第三次執(zhí)行步驟6b)時(shí)劃分出的“8”個(gè)區(qū)間的平均值,此平均值將原始區(qū)間劃分為兩個(gè)區(qū)間,每個(gè)區(qū)間包含“2”個(gè)值,共得到“16”個(gè)區(qū)間,通過(guò)步驟6c)比較選取其中一個(gè)區(qū)間;第五行中新增的“16”個(gè)界點(diǎn)分別是第四次執(zhí)行步驟6b)時(shí)劃分出的“16”個(gè)區(qū)間的平均值,此平均值將原始區(qū)間劃分為兩個(gè)區(qū)間,每個(gè)區(qū)間包含“I”個(gè)值,共得到“32”個(gè)區(qū)間,通過(guò)步驟6c)比較選取其中一個(gè)區(qū)間,完成二分比較操作,得到比較信息。6d)將獲得五個(gè)比特比較信息的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù),對(duì)十進(jìn)制數(shù)進(jìn)行加“ I ”操作;將相加后的結(jié)果作為循環(huán)次數(shù)值,存入移位寄存器內(nèi)。本發(fā)明實(shí)施例中,游程長(zhǎng)度RunCnt = 15,比較RunCnt與Sum_3[16]的大小Runcnt = 15 < Sum_3[16] = 153,在比較信息中記錄一比特“O”,選擇比較區(qū)間為“O”到“16”;比較RunCnt 與 Sum_3 [8]的大小Runcnt = 15 < Sum_3 [8] = 25,在比較信息中記錄一比特“ O ”,選擇比較區(qū)間為“ O ”到“ 8 ” ;比較RunCnt 與 Sum_3[4]的大小Runcnt = 15 > Sum_3 [4] = 9,在比較信息中記錄一比特“ I ”,選擇比較區(qū)間為“4”到“8 ” ;比較RunCnt 與 Sum_3 [6]的大小Runcnt = 15 < Sum_3 [6] = 17,在比較信息中記錄一比特“O ”,選擇比較區(qū)間為“4”到“6 ” ;比較RunCnt 與 Sum_3 [5]的大小Runcnt = 15 > Sum_3 [5] = 13,在比較信息中記錄一比特“1”,停止比較操作,得到比較信息:“00101” ; 將比較信息轉(zhuǎn)換為十進(jìn)制數(shù)為“5”,用f0r_num表示循環(huán)次數(shù),for_num為“6”。
步驟7,游長(zhǎng)編碼將從移位寄存器中提取的循環(huán)次數(shù)值作為度量值,輸出以此度量值為長(zhǎng)度的全“ I ”碼流到壓縮碼流緩存器中。本發(fā)明實(shí)施例中,循環(huán)次數(shù)f 0r_num為“ 6 ”,游長(zhǎng)編碼為6個(gè)“ 1”,存儲(chǔ)“ 111111 ”到壓縮碼流緩存中。步驟8,參數(shù)更新提取移位寄存器中的更新索引值和循環(huán)次數(shù)值,將更新索引值與循環(huán)次數(shù)值相力口,將相加的結(jié)果作為索引值更新的中間結(jié)果存入移位寄存器中; 將循環(huán)次數(shù)值減去“I”得到的數(shù)值作為查找編號(hào),讀出移位寄存器中的游程長(zhǎng)度和加和數(shù)組,提取加和數(shù)組中查找編號(hào)對(duì)應(yīng)的數(shù)值,用游程長(zhǎng)度減去此對(duì)應(yīng)數(shù)值,得到更新的游程長(zhǎng)度值,將更新的游程長(zhǎng)度值存入移位寄存器中。本發(fā)明實(shí)施例中,索引值更新中間結(jié)果等于RunIndex+for_num = 3+6 = 9,比較信息十進(jìn)制數(shù)為“5”,加和數(shù)組中編號(hào)為“5”的數(shù)值為Sum_3[5] = 13,游程長(zhǎng)度為Runcnt =15,更新的游程長(zhǎng)度為 RunCnt_Sum_3 [5] = 15-13 = 2。步驟9,判斷步驟I中輸入的行尾信號(hào)是否有效若有效,輸出一比特“I”到壓縮碼流緩存器中;將從移位寄存器中提取的索引值更新的中間結(jié)果作為編碼更新的索引值;若無(wú)效,輸出一比特“O”到壓縮碼流緩存器中,提取移位寄存器中索引值更新的中間結(jié)果和更新的游程長(zhǎng)度,將索引值更新的中間結(jié)果作為編號(hào),提取參考數(shù)組中此編號(hào)對(duì)應(yīng)的數(shù)值,將此數(shù)值作為度量值,輸出以度量值為長(zhǎng)度,以更新的游程長(zhǎng)度值為大小的二進(jìn)制碼流;將索引值更新的中間結(jié)果減去“I”得到的數(shù)值作為編碼更新的索引值。將編碼更新的索引值存儲(chǔ)在移位寄存器中,供編碼器在判斷索引值時(shí)使用。本發(fā)明實(shí)施例中,行尾信號(hào)無(wú)效,則在壓縮碼流緩存器中存入一比特“0”,索引值更新的中間結(jié)果為“9”,提取數(shù)組J中編號(hào)為“9”的數(shù)值J[9],J[9]為“2”,更新的游程長(zhǎng)度值為“2”,用“2”個(gè)比特的二進(jìn)制數(shù)表示數(shù)值“2”即為“10”,將“10”存入碼流緩存器中;編碼更新的索引值為索引值更新的中間結(jié)果減去“1”,相減后得到更新索引值為“8”。步驟10,碼字合成將編碼時(shí)存入壓縮碼流緩存器中的碼流按照存儲(chǔ)順序連接在一起,輸出連接后合成的碼流到編碼器外部本發(fā)明實(shí)施例中,碼流緩存器中存入的碼流為“111111010”,此碼流作為此次編碼
的輸出碼字。
權(quán)利要求
1.一種JPEG_LS游程編碼FPGA實(shí)現(xiàn)方法,包括以下步驟 (1)輸入像素點(diǎn) Ia)將需要壓縮的圖像像素點(diǎn)輸入到JPEG_LS編碼器中; Ib)將當(dāng)前像素點(diǎn)數(shù)值信息傳輸至下一個(gè)像素點(diǎn)編碼處; Ic)按照當(dāng)前像素點(diǎn)與其鄰近點(diǎn)的相應(yīng)位置關(guān)系,依次從隨機(jī)存儲(chǔ)器中讀出當(dāng)前像素點(diǎn)的上一行鄰近點(diǎn)信息; Id)將需要壓縮的圖像行尾信號(hào)輸入到JPEG_LS編碼器中; Ie)將需要壓縮的圖像初次編碼信號(hào)輸入到JPEG_LS編碼器中; (2)判斷游程長(zhǎng)度 2a)比較當(dāng)前像素點(diǎn)數(shù)值與其所有鄰近點(diǎn)數(shù)值是否相等,若所有鄰近點(diǎn)數(shù)值均與當(dāng)前像素點(diǎn)數(shù)值相等,則計(jì)數(shù)器加“1”,返回步驟(I)讀取下一個(gè)要處理的像素點(diǎn)及其鄰近點(diǎn)信息,直至出現(xiàn)任一鄰近點(diǎn)數(shù)值與當(dāng)前像素點(diǎn)數(shù)值不相等的情形時(shí),停止計(jì)數(shù); 2b)將停止后的計(jì)數(shù)器內(nèi)存儲(chǔ)的數(shù)值提取出來(lái)作為游程長(zhǎng)度,存儲(chǔ)在移位寄存器內(nèi); (3)建立加和表 3a)對(duì)標(biāo)準(zhǔn)算法中參考數(shù)組的每個(gè)數(shù)值做“2”次冪運(yùn)算,將冪運(yùn)算結(jié)果組成移位數(shù)組;3b)將標(biāo)準(zhǔn)算法中的索引值在取值范圍內(nèi)連續(xù)取值,按照索引值的取值大小,依次在移位數(shù)組內(nèi)分別查找出編號(hào)對(duì)應(yīng)索引值的數(shù)值,將查找出的數(shù)值與編號(hào)在其后方的數(shù)值逐次進(jìn)行累加運(yùn)算,將每次累加運(yùn)算的結(jié)果組成編號(hào)為索引值的加和數(shù)組; 3c)將步驟3b)中得到的所有加和數(shù)組存入隨機(jī)存儲(chǔ)器中,組成一個(gè)加和表,供后續(xù)操作進(jìn)行查找; (4)判斷索引值大小 判斷步驟(I)中的初次編碼信號(hào)是否有效,若有效,設(shè)置索引值為“O”,否則設(shè)置索引值為移位寄存器內(nèi)編碼更新的索引值,將索引值存儲(chǔ)在移位寄存器內(nèi); (5)查找加和表 按照索引值大小,查找加和表中編號(hào)對(duì)應(yīng)于索引值的加和數(shù)組,讀取出加和數(shù)組中存儲(chǔ)的數(shù)值信息,將得到的加和數(shù)組信息存儲(chǔ)在移位寄存器中; (6)二分比較 6a)將范圍為“0”到“32”的區(qū)間作為比較區(qū)間; 6b)求出當(dāng)前比較區(qū)間兩個(gè)邊界點(diǎn)數(shù)值的平均值,將平均值作為中間點(diǎn),以中間點(diǎn)為界限,將比較區(qū)間劃分為上、下兩部分區(qū)間; 6c)提取出移位寄存器內(nèi)的加和數(shù)組和游程長(zhǎng)度,查找加和數(shù)組中編號(hào)對(duì)應(yīng)于當(dāng)前中間點(diǎn)的數(shù)值,判斷游程長(zhǎng)度值是否小于中間點(diǎn)對(duì)應(yīng)的數(shù)值若小于,則在比較信息中記錄一比特“0”,選取下半個(gè)區(qū)間作為比較區(qū)間;否則,在比較信息中記錄一比特“1”,選取上半個(gè)區(qū)間作為比較區(qū)間,返回步驟6b),重新選取中間點(diǎn)進(jìn)行比較操作,直到進(jìn)行五次比較操作,獲得五個(gè)比特的比較信息后,停止操作; 6d)將獲得五個(gè)比特比較信息的二進(jìn)制數(shù)轉(zhuǎn)化為十進(jìn)制數(shù),對(duì)十進(jìn)制數(shù)進(jìn)行加“I”操作;將相加后的結(jié)果作為循環(huán)次數(shù)值,存入移位寄存器內(nèi); (7)游長(zhǎng)編碼 將從移位寄存器中提取的循環(huán)次數(shù)值作為度量值,輸出以此度量值為長(zhǎng)度的全“I”碼流到壓縮碼流緩存器中; (8)更新參數(shù) 8a)提取移位寄存器中的更新索引值和循環(huán)次數(shù)值,將更新索引值與循環(huán)次數(shù)值相加,將相加的結(jié)果作為索引值更新的中間結(jié)果存入移位寄存器中; Sb)將循環(huán)次數(shù)值減去“I”得到的數(shù)值作為查找編號(hào),讀出移位寄存器中的游程長(zhǎng)度和加和數(shù)組,提取加和數(shù)組中查找編號(hào)對(duì)應(yīng)的數(shù)值,用游程長(zhǎng)度減去此對(duì)應(yīng)數(shù) 值,得到更新的游程長(zhǎng)度值,將更新的游程長(zhǎng)度值存入移位寄存器中; (9)判斷步驟(I)中輸入的行尾信號(hào)是否有效、 9a)若有效,輸出一比特“I”到壓縮碼流緩存器中;將從移位寄存器中提取的索引值更新的中間結(jié)果作為編碼更新的索引值; 9b)若無(wú)效,輸出一比特“0”到壓縮碼流緩存器中,提取移位寄存器中索引值更新的中間結(jié)果和更新的游程長(zhǎng)度,將索引值更新的中間結(jié)果作為編號(hào),提取參考數(shù)組中此編號(hào)對(duì)應(yīng)的數(shù)值,將此數(shù)值作為度量值,輸出以度量值為長(zhǎng)度,以更新的游程 長(zhǎng)度值為大小的二進(jìn)制碼流;將索引值更新的中間結(jié)果減去“I”得到的數(shù)值作為編碼更新的索引值; 9c)將編碼更新的索引值存儲(chǔ)在移位寄存器中,供編碼器在判斷索引值時(shí)使用; (10)碼字合成 將編碼時(shí)存入壓縮碼流緩存器中的碼流按照存儲(chǔ)順序連接在一起,輸出連接后合成的碼流到編碼器外部。
2.根據(jù)權(quán)利要求I所述的JPEG_LS游程編碼FPGA實(shí)現(xiàn)方法,其特征在于,步驟Ic)中所述的鄰近點(diǎn)及其對(duì)應(yīng)位置關(guān)系為上一個(gè)處理的像素點(diǎn),上一個(gè)處理像素點(diǎn)上方的像素點(diǎn),當(dāng)前處理像素點(diǎn)上方的像素點(diǎn),下一個(gè)處理像素點(diǎn)上方的像素點(diǎn)。
3.根據(jù)權(quán)利要求I所述的JPEG_LS游程編碼FPGA實(shí)現(xiàn)方法,其特征在于,步驟(3)中所述的標(biāo)準(zhǔn)算法參考數(shù)組存儲(chǔ)了 32個(gè)數(shù)據(jù)信息。
4.根據(jù)權(quán)利要求I所述的JPEG_LS游程編碼FPGA實(shí)現(xiàn)方法,其特征在于,步驟3b)中所述的索引值取值范圍為“0”到“31”的整數(shù)值。
全文摘要
本發(fā)明公開一種JPEG_LS游程編碼FPGA實(shí)現(xiàn)方法。本發(fā)明在JPEG_LS標(biāo)準(zhǔn)實(shí)現(xiàn)方法的基礎(chǔ)上,按照索引值建立、存儲(chǔ)與查找映射表,獲得累加和數(shù)組,并且采用二分比較法,將游程長(zhǎng)度與累加和數(shù)組中的數(shù)值進(jìn)行五次比較,得到循環(huán)次數(shù),實(shí)現(xiàn)游長(zhǎng)編碼,同時(shí)分兩步簡(jiǎn)單有效地實(shí)現(xiàn)索引值更新。本發(fā)明解決了索引值更新結(jié)構(gòu)復(fù)雜的問(wèn)題,在短周期內(nèi)實(shí)現(xiàn)游長(zhǎng)編碼,通過(guò)累加運(yùn)算簡(jiǎn)化了映射表結(jié)構(gòu),節(jié)省了硬件資源。本發(fā)明采用全流水結(jié)構(gòu),硬件實(shí)現(xiàn)資源消耗少,具有實(shí)時(shí)性,易于現(xiàn)場(chǎng)可編程門陣列實(shí)現(xiàn)。
文檔編號(hào)H04N7/26GK102724505SQ20121019881
公開日2012年10月10日 申請(qǐng)日期2012年6月6日 優(yōu)先權(quán)日2012年6月6日
發(fā)明者劉凱, 張毅, 李云松, 王舒瑤, 賈超群, 郭杰, 雷杰, 魏雯 申請(qǐng)人:西安電子科技大學(xué)