專利名稱:一種圖像壓縮和解壓縮的方法和裝置的制作方法
一種圖像壓縮和解壓縮的方法和裝置技術(shù)領(lǐng)域
本發(fā)明屬于圖像壓縮領(lǐng)域,具體地說,涉及一種圖像壓縮和解壓縮的方法和裝置。
技術(shù)背景
隨著智能手機(jī)的普及,智能手機(jī)已經(jīng)成為人們生活中的必需品。從其發(fā)展趨勢上 可以看出,智能手機(jī)的運(yùn)算能力越來越強(qiáng),網(wǎng)絡(luò)連接速度越來越快。與此同時,與人們生活 息息相關(guān)的汽車,其智能化速度卻遠(yuǎn)遠(yuǎn)不及智能手機(jī)。在這種情況下,一種彌補(bǔ)這種不平衡 的方法是,將車載終端和智能手機(jī)連接起來。圖1是示意圖,示出了車載終端和智能手機(jī)的 協(xié)作方式。如圖1所示,用戶通過操作車載終端來控制智能手機(jī),在一定程度上可將智能手 機(jī)上的內(nèi)容、軟件應(yīng)用等所包含的圖像和聲音發(fā)送到車載終端上顯示和播放,從而可以利 用智能手機(jī)提供的功能來完成某些任務(wù),如導(dǎo)航、網(wǎng)絡(luò)連接等。MiirorLink即是為該場景設(shè) 計的協(xié)議。
通過圖1可以看出,在兩種設(shè)備之間傳輸?shù)臄?shù)據(jù)包括屏幕顯示數(shù)據(jù)、聲音數(shù)據(jù)、控 制數(shù)據(jù)這三類。在這三類數(shù)據(jù)中,數(shù)據(jù)量最大從而占用傳輸網(wǎng)絡(luò)帶寬最多的是屏幕顯示數(shù) 據(jù)。例如,要傳輸一個分辨率為800X480的圖像的話,若每個像素占用4個字節(jié),則需要傳 輸?shù)臄?shù)據(jù)量為800X480X4=1536000字節(jié),即約1.5M字節(jié)??紤]到刷屏頻率,例如假設(shè)屏 幕每秒刷新10幀,則每秒需要傳輸?shù)臄?shù)據(jù)量為15M,這個數(shù)據(jù)量是十分巨大的。
在實際中,屏幕分辨率小于640X360的移動設(shè)備已經(jīng)很少見。另一方面,如果刷 屏頻率小于10幀/秒,則畫面會有明顯的卡頓現(xiàn)象。因此,若要同時滿足分辨率和刷屏頻 率的上述要求的話,設(shè)像素大小為4字節(jié),則網(wǎng)絡(luò)實際帶寬就必須在15M/秒以上。屏幕分 辨率越高、刷屏頻率越快,則要求的帶寬就越大。目前無線傳輸?shù)睦碚搸拑H能能達(dá)到約 15M/秒左右,實際帶寬約為7M/秒左右,這顯然無法滿足上述要求。因此,如何減少傳輸?shù)?數(shù)據(jù)量就成為了 一個重要的研究課題。
一種減少傳輸數(shù)據(jù)量的方法是,減少每個像素值所占的存儲空間,即將32位(即4 個字節(jié))像素值轉(zhuǎn)成16位(即2個字節(jié))像素值。這樣雖然損失一些顯示效果,卻節(jié)約一半 的帶寬。實際的效果表明,16位圖像的顯示效果對于MirrorLink這種應(yīng)用場景來說是可容 忍的。以前面的例子來說,若采用16位像素值進(jìn)行傳輸,則需要的帶寬降低一半,為7M/秒 左右,這已經(jīng)接近無線傳輸?shù)膶嶋H帶寬了。因此,在大多數(shù)MirrorLink的實現(xiàn)中,一般均采 用16位像素值進(jìn)行傳輸。
采用16位像素值進(jìn)行傳輸后,仍需進(jìn)一步減小數(shù)據(jù)傳輸量,以提高效率以及增大 可擴(kuò)展性。容易想到,可以將屏幕數(shù)據(jù)壓縮后再進(jìn)行傳輸,以減少數(shù)據(jù)的傳輸量。壓縮數(shù)據(jù) 到達(dá)接收端后,通過解壓縮來獲得原始數(shù)據(jù)。
然而,選擇適用于移動設(shè)備和車載終端的壓縮算法是一個很大的挑戰(zhàn)。這是因為, 這兩種設(shè)備均屬于嵌入式設(shè)備,運(yùn)算能力都較弱。對于某些壓縮算法來說,盡管其壓縮比很 大,但其壓縮運(yùn)算的復(fù)雜度比較高,會占用大量的CPU運(yùn)算時間,使得刷屏頻率反而降低。 因此,需要選擇一種運(yùn)算復(fù)雜度與壓縮比都適中的算法。
分析屏幕圖像的像素數(shù)據(jù)可以發(fā)現(xiàn),屏幕圖像中重復(fù)的像素值占很大部分。因此, 可以采用行程長度編碼(run-length encoding,RLE)壓縮算法進(jìn)行壓縮。該算法的壓縮和解壓縮都比較簡單,不會占用大量的CPU運(yùn)算時間,而且在屏幕圖像像素值重復(fù)較多時能夠獲得較大的壓縮比,因此很適合用于該場合。
圖2是行程長度編碼的原理圖。該算法將原始的一元數(shù)據(jù)轉(zhuǎn)換為二元數(shù)據(jù),即從 {數(shù)據(jù)元}轉(zhuǎn)換為{重復(fù)次數(shù),數(shù)據(jù)元}。如圖2所示,設(shè)有一列數(shù)據(jù)AAABBBBCCCC,假設(shè)每個數(shù)據(jù)占用一個字節(jié),則編碼前該數(shù)據(jù)要占用的存儲空間為11字節(jié)。采用RLE編碼后,該列數(shù)據(jù)變?yōu)?A4B4C,即相鄰的重復(fù)數(shù)據(jù)元不需要重復(fù)存儲,只需要存儲數(shù)據(jù)元及其重復(fù)次數(shù)即可。這列數(shù)據(jù)經(jīng)RLE編碼后僅需要6字節(jié)的存儲空間,因此達(dá)到了壓縮的目的。
使用RLE算法壓縮圖像時,利用圖像像素值在每一像素行上都有可能重復(fù)的特點,通過逐行掃描的方式進(jìn)行壓縮。然而,對圖像原始數(shù)據(jù)進(jìn)行分析可以發(fā)現(xiàn),圖像像素如果發(fā)生重復(fù),一般是成塊重復(fù),而不是以行為單位重復(fù)。因此,普通的行程長度編碼并不能充分利用圖像像素按區(qū)域重復(fù)的特征,因而不能有效地對圖像進(jìn)行壓縮。
發(fā)明內(nèi)容
本發(fā)明是為了解決現(xiàn)有技術(shù)中存在的上述技術(shù)問題而做出,其目的在于提供一種圖像壓縮和解壓縮的方法和裝置,以改善行程長度編碼算法的壓縮效率和運(yùn)算速度。
為了實現(xiàn)上述目的,根據(jù)本發(fā)明的一個方面,提供一種圖像壓縮方法,其包括:
a)獲取具有η行m列像素的圖像,并創(chuàng)建空的存儲文件;
b)在所述圖像的η個像素行中確定當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行, 如果該像素行當(dāng)前的未壓縮像素數(shù)不為零,則在所述存儲文件中有序地記錄該像素行的首個未壓縮像素P的像素值,如果該像素行當(dāng)前的未壓縮像素數(shù)為零,則壓縮過程結(jié)束,此時的所述存儲文件即為圖像壓縮文件;
c)確定該像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,并將這N個像素作為已壓縮像素,在所述存儲文件中有序地記錄該像素數(shù)N,然后以該像素行為當(dāng)前像素行執(zhí)行步驟d);
d)如果當(dāng)前像素行是末像素行,則執(zhí)行步驟b);如果當(dāng)前像素行不是末像素行,則在當(dāng)前像素行的下一像素行中確定該像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,并將這N個像素作為已壓縮像素,其中,如果該像素數(shù)N > O,則在所述存儲文件中有序地記錄該像素數(shù)N,然后以該像素行作為當(dāng)前像素行執(zhí)行步驟d);如果該像素數(shù)N=0,則執(zhí)行步驟b)。
優(yōu)選地,在步驟d)中,每次在執(zhí)行步驟b)之前還可以包括在所述存儲文件中有序地記錄特定標(biāo)志位。
另外,優(yōu)選地,所述圖像壓縮方法可以包括:建立具有η個元素的數(shù)組c [],使得該數(shù)組中的第i個元素的值c[i]為所述圖像的第i個像素行的當(dāng)前未壓縮像素的數(shù)目,其中,O彡i彡n-1,從而在步驟b)中,通過所述數(shù)組c[]的各元素值c[i]以及各元素下標(biāo)值 i,獲得當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行,并獲得該像素行的第一個未壓縮像素 P ;在步驟C)和d)中,通過所述數(shù)組C []和所述像素數(shù)N來確定下次執(zhí)行步驟b)時各像素行的當(dāng)前未壓縮像素的數(shù)目。通過該技術(shù)方案,可以方便地對各像素行進(jìn)行搜索和統(tǒng)計。
進(jìn)一步優(yōu)選地,所述的圖像壓縮方法還可以包括:建立具有m個元素的數(shù)組b[], 使得該數(shù)組的第j個元素的值b[j]為所述圖像的當(dāng)前已壓縮像素數(shù)為j的像素行的個數(shù), 其中,0彡j彡m-Ι,從而在步驟b)中,按j從小到大的順序找出第一個b[j]不為O時的 j,該j值即為所述圖像的各像素行的當(dāng)前已壓縮像素數(shù)中的最小值,從而得以確定所述圖像的各像素行中當(dāng)前已壓縮像素數(shù)最小即當(dāng)前未壓縮像素數(shù)最大的像素行。通過該技術(shù)方案,可以提高壓縮文件的速度。
根據(jù)本發(fā)明的另一方面,提供一種圖像解壓縮方法,其包括:
A)獲取由上述圖像壓縮方法產(chǎn)生的圖像壓縮文件,并創(chuàng)建具有η行m列單元的空的存儲文件;
B)在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序讀取當(dāng)前首個未讀取數(shù)據(jù)作為像素值P’,并讀取該數(shù)據(jù)之后的首個未讀數(shù)據(jù)作為像素數(shù)N ;
C)在所述存儲文件 的η個單元行中確定當(dāng)前未存儲單元數(shù)最大且行號最小的單元行,并使該單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該單元行作為當(dāng)前單元行執(zhí)行步驟D);
D)在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序搜索當(dāng)前首個未讀取數(shù)據(jù),如果該數(shù)據(jù)不存在,則解壓縮過程結(jié)束,此時的所述存儲文件即為圖像原始文件;如果該數(shù)據(jù)存在且非像素值數(shù)據(jù),則讀取該數(shù)據(jù)作為像素數(shù)N,并使所述存儲文件的當(dāng)前單元行的下一單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該下一單元行作為當(dāng)前單元行執(zhí)行步驟D);如果該數(shù)據(jù)存在且為像素值數(shù)據(jù),則執(zhí)行步驟B)。
上述圖像解壓縮方法的一個變型可以包括:
Α’)獲取由在圖形壓縮文件中插入標(biāo)志位的圖像壓縮方法產(chǎn)生的圖像壓縮文件, 并創(chuàng)建具有η行m列單元的空的存儲文件;
B)在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序讀取當(dāng)前首個未讀取數(shù)據(jù)作為像素值P’,并讀取該數(shù)據(jù)之后的首個未讀數(shù)據(jù)作為像素數(shù)N ;
C)在所述存儲文件的η個單元行中確定當(dāng)前未存儲單元數(shù)最大且行號最小的單元行,并將該單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該單元行作為當(dāng)前單元行執(zhí)行步驟D’ );
D’ )在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序搜索當(dāng)前首個未讀取數(shù)據(jù),如果該數(shù)據(jù)不存在,則解壓縮過程結(jié)束,此時的所述存儲文件即為圖像原始文件;如果該數(shù)據(jù)存在且非標(biāo)志位數(shù)據(jù),則讀取該數(shù)據(jù)作為像素數(shù)N,并使所述存儲文件中的當(dāng)前單元行的下一單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該下一單元行作為當(dāng)前單元行執(zhí)行步驟D’ );如果該數(shù)據(jù)存在且為標(biāo)志位數(shù)據(jù),則使該標(biāo)記位數(shù)據(jù)的下一個數(shù)據(jù)為所述圖像壓縮文件中的當(dāng)前首個未讀取數(shù)據(jù),并執(zhí)行步驟B)。
優(yōu)選地,所述圖像解壓縮方法可以包括:建立具有η個元素的數(shù)組c□,使得該數(shù)組中的第i個元素的值c[i]為所述存儲文件的第i個單元行的當(dāng)前未存儲單元的數(shù)目,其中,O彡i彡n-1,從而在步驟C)中,通過所述數(shù)組c[]的各元素值c[i]以及各元素下標(biāo)值 i,獲得所述存儲文件中的當(dāng)前未存儲單元數(shù)最大且行號最小的單元行;以及在步驟C)以及在步驟D)或D’)中,通過所述數(shù)組c[]和所述像素數(shù)N來確定下次執(zhí)行步驟C)時所述存儲文件的各單元行的當(dāng)前未存儲單元的數(shù)目。通過該技術(shù)方案,可以方便地對各單元行進(jìn)行搜索和統(tǒng)計。
進(jìn)一步優(yōu)選地,所述圖像解壓縮方法還可以包括:建立具有m個元素的數(shù)組b 口, 使得該數(shù)組的第j個元素的值b[j]為所述存儲文件的當(dāng)前已存儲單元數(shù)為j的單元行的 個數(shù),其中,O ( j ( m-1,從而在步驟C)中,按j從小到大的順序找出第一個b[j]不為O 時的j,該j值即為所述存儲文件的各單元行的當(dāng)前已存儲單元數(shù)中的最小值,從而得以確 定所述存儲文件的各單元行中當(dāng)前已存儲單元數(shù)最小即當(dāng)前未存儲單元數(shù)最大的單元行。 通過該技術(shù)方案,可以提高解壓縮文件的速度。
根據(jù)本發(fā)明的又一個方面,提供一種圖像壓縮裝置,其包括:
圖像獲取單元,用于獲取具有η行m列像素的圖像;
存儲文件創(chuàng)建單元,用于創(chuàng)建空的存儲文件;
像素行確定單元,用于在所述圖像的η個像素行中確定當(dāng)前未壓縮像素數(shù)最大且 行號最小的像素行以及該像素行的首個未壓縮像素P ;
像素數(shù)統(tǒng)計單元,用于統(tǒng)計所述圖像的當(dāng)前像素行中從當(dāng)前首個未壓縮像素算起 連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,并將這N個像素作為已壓縮 像素;
記錄單元,用于在所述存儲文件中有序地記錄由像素行確定單元多次確定的所述 像素P的像素值以及由像素數(shù)統(tǒng)計單元對于每次確定的像素P統(tǒng)計的至少一個像素行的所 述像素數(shù)N ;
末行判斷單元,用于在記錄單元每次記錄了所述像素數(shù)N后判斷當(dāng)前像素行是否 為末像素行,如果判斷為是末像素行,則由像素行確定單元重新確定所述像素P,如果判斷 為不是末像素行,則由像素數(shù)統(tǒng)計單元統(tǒng)計當(dāng)前像素行的下一像素行的所述像素數(shù)N;
像素數(shù)判斷單元,用于判斷所述圖像的當(dāng)前像素行中從當(dāng)前首個未壓縮像素算起 連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N是否大于零,如果判斷為N > O,則記錄單元在所述存儲文件中有序地記錄N值,如果判斷為Ν=0,則由像素行確定單元 重新確定所述像素P。
根據(jù)本發(fā)明的再一個方面,提供一種圖像解壓縮裝置,其包括:
圖像壓縮文件獲取單元,用于獲取由上述圖像壓縮裝置產(chǎn)生的圖像壓縮文件;
存儲文件創(chuàng)建單元,用于創(chuàng)建具有η行m列單元的空的存儲文件;
數(shù)據(jù)讀取單元,用于在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序依次 讀取當(dāng)前首個未讀取數(shù)據(jù);
單元行確定單元,用于在所述存儲文件的η個單元行中確定當(dāng)前未存儲單元數(shù)最 大且行號最小的單元行;
數(shù)據(jù)寫入單元,用于在所述存儲文件的單元行中寫入像素值;
判斷單元,用于判斷數(shù)據(jù)讀取單元每次所讀取的當(dāng)前首個未讀取數(shù)據(jù)是否為像素 值數(shù)據(jù),如果數(shù)據(jù)讀取單元讀取的當(dāng)前首個未讀取數(shù)據(jù)為像素值P’,則再讀取該數(shù)據(jù)之后 的首個未讀取數(shù)據(jù)作為像素數(shù)N,數(shù)據(jù)寫入單元將像素值P’存儲在單元行確定單元所確定 的當(dāng)前單元行的前N個連續(xù)排列的當(dāng)前未存儲單元中;如果數(shù)據(jù)讀取單元讀取的當(dāng)前首個 未讀取數(shù)據(jù)為非像素值數(shù)據(jù),則數(shù)據(jù)寫入單元以該數(shù)據(jù)作為像素數(shù)N,并將像素值P’存儲 在所述存儲文件的當(dāng)前單元行的下一單元行的前N個連續(xù)排列的當(dāng)前未存儲單元中。
由上面的描述可知,本發(fā)明所述的圖像壓縮和解壓縮的方法和裝置通過采用橫向 深度優(yōu)先(即,從當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行開始壓縮)以及碰壁反彈(即, 統(tǒng)計某像素行連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,然后在其下 一像素行統(tǒng)計所述像素數(shù)N)的搜索方式對圖像局部區(qū)域內(nèi)的像素進(jìn)行充分搜索,節(jié)省了大 量重復(fù)存儲相同像素值的空間,從而實現(xiàn)了較大的壓縮比。另外,針對實際情況還提出了加 速查找過程的方法。實際效果顯示,采用該方法和裝置獲得的平均壓縮比在40%左右,且不 消耗過多的CPU資源,是一種適用范圍較廣的壓縮算法。
通過參考以下結(jié)合附圖的說明及權(quán)利要求書的內(nèi)容,本發(fā)明的其它目的及結(jié)果將 更加明白及易于理解。在附圖中:
圖1是示意圖,示出了車載終端和智能手機(jī)的協(xié)作方式;
圖2是行程長度編碼的原理圖3是流程圖,示出了本發(fā)明的一個實施例所述的圖像壓縮方法;
圖4-1至圖4-10是一組圖像模型圖,示出了采用本發(fā)明的一個實施例所述的圖像 壓縮方法壓縮圖像時已壓縮像素與未壓縮像素的變化;
圖5是方框圖,示出了本發(fā)明的一個實施例所述的圖像壓縮裝置的構(gòu)造;
圖6是方框圖,示出了本發(fā)明的一個實施例所述的圖像解壓縮裝置的構(gòu)造。
具體實施方式
在下面的描述中,出于說明的目的,為了提供對一個或多個實施例的全面理解,闡 述了許多具體細(xì)節(jié)。然而,很明顯,也可以在沒有這些具體細(xì)節(jié)的情況下實現(xiàn)這些實施例。 在其它例子中,為了便于描述一個或多個實施例,公知的結(jié)構(gòu)和設(shè)備以方框圖的形式示出。
圖3是流程圖,示出了本發(fā)明的一個實施例所述的圖像壓縮方法,圖4-1至圖4-10 是一組圖像模型圖,示出了采用本發(fā)明的一個實施例所述的圖像壓縮方法壓縮圖像時已壓 縮像素與未壓縮像素的變化。下面以圖4-1至圖4-10為例,結(jié)合圖3的流程圖來說明本發(fā) 明的一個實施例所述的圖像壓縮方法。
如圖3所示,首先,在步驟SlOl中,獲取具有η行m列像素的圖像。所獲得的圖像 示例性地示于圖4-1中,其中,該示例圖像有n=6個像素行、m=6個像素列,另外該示例圖像 所包含的像素具有兩種像素值,即,無色方塊所表示的像素具有像素值A(chǔ),陰影方塊所表示 的像素具有像素值B。同時,創(chuàng)建一個空的存儲文件。該空的存儲文件的示例性例子示于圖 4-1的上部。
接著在步驟S103中,在所述圖像的η個像素行中通過搜索確定當(dāng)前未壓縮像素數(shù) 最大且行號最小的像素行。然后在步驟S105中判斷該像素行當(dāng)前的未壓縮像素數(shù)是否為 零,也即是判斷該像素行當(dāng)前是否有首個未壓縮像素P。如果在步驟S105中判斷為該像素 行當(dāng)前的未壓縮像素數(shù)不為零,則在步驟S107中在所述存儲文件中有序地記錄該像素行 的首個未壓縮像素P的像素值。如果在步驟S105中判斷為該像素行當(dāng)前的未壓縮像素數(shù) 為零(即沒有未壓縮像素P),則壓縮過程結(jié)束,此時的所述存儲文件即為圖像壓縮文件。
舉例說,在圖4-1所示的情形中,在開始壓縮時,各像素行的當(dāng)前未壓縮像素數(shù)均為6且最大,而這其中行號最小的像素行為首像素行,該像素行中首個未壓縮像素P為左上 角的像素,然后在存儲文件中記錄所述像素P的像素值A(chǔ)。而在圖4-10所示的情形中,當(dāng)壓 縮完成時,各像素行的當(dāng)前未壓縮像素數(shù)均為O且最大,而這其中行號最小的像素行為首 像素行,該像素行中沒有未壓縮像素P,于是壓縮過程結(jié)束。
然后,在步驟S109中,確定該像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與 像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,并將這N個像素作為已壓縮像素,在所述 存儲文件中有序地記錄該像素數(shù)N,然后以該像素行為當(dāng)前像素行執(zhí)行步驟Slll。
舉例說,在圖4-2所示的情形中,首像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排 列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N=3,于是,在所述存儲文件中在已記 錄的像素P的像素值A(chǔ)之后有序地記錄像素數(shù)3 (此時N=3),這3個像素就變成已壓縮像 素了,而下一次對該像素行進(jìn)行統(tǒng)計時,該像素行的當(dāng)前未壓縮像素數(shù)變?yōu)?-3=3。應(yīng)該注 意,只要在步驟S105中搜索到像素P,則在步驟S109中統(tǒng)計到的像素數(shù)N —定不為零,至少 為I (即像素P本身)。
然后,在步驟Slll中,判斷當(dāng)前像素行是否為末像素行。如果在步驟Slll中判斷 為當(dāng)前像素行不是末像素行,則在步驟S113中,在當(dāng)前像素行的下一像素行中確定該像素 行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的 數(shù)目N,并將這N個像素作為已壓縮像素,接著在步驟SI 15中判斷N是否為零。如果在步驟 SI 15中判斷為該像素數(shù)N > O,則在步驟SI 17中,在所述存儲文件中有序地記錄該像素數(shù) N,然后以該像素行作為當(dāng)前像素行返回步驟S111,循環(huán)執(zhí)行步驟S111-S117。
舉例說,在圖4-2所示的情形中,當(dāng)前像素行(此時即為首像素行)不是末像素行, 其下一像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值A(chǔ)的當(dāng)前未 壓縮像素的數(shù)目N=l,于是,在所述存儲文件中在已記錄的數(shù)據(jù)之后有序地記錄該像素數(shù)I (此時N=l),這I個像素就變成已壓縮像素了,而下一次對該像素行進(jìn)行統(tǒng)計時,該像素行 的當(dāng)前未壓縮像素數(shù)變?yōu)?-1 = 5。循環(huán)執(zhí)行上述步驟后可以得到,在后續(xù)像素行中,各像 素行從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值A(chǔ)的當(dāng)前未壓縮像素的 數(shù)目N分別為3、2、1、6,于是,在所述存儲文件中在已記錄的數(shù)據(jù)之后有序地記錄這些像素 數(shù)3、2、1、6,這些像素就變成已壓縮像素了,而下一次對這些像素行進(jìn)行統(tǒng)計時,這些像素 行的當(dāng)前未壓縮像素數(shù)分別變?yōu)?-3=3、6-2=4、6-1=5和6-6=0。
在圖4-2所示的情形中,當(dāng)對末像素行執(zhí)行了統(tǒng)計并記錄了所述像素數(shù)N后返 回步驟Slll判斷該像素行是否為末像素行時,判斷的結(jié)果為是末像素行,此時返回步驟 S103,重新搜索新的像素P。在一個例子中,每次在重新搜索像素P之前,還可以在所述存儲 文件中在已記錄的數(shù)據(jù)之后有序地記錄特定標(biāo)志位,例如Φ。該特定標(biāo)記位用于在解壓縮 時識別像素值數(shù)據(jù),即,該標(biāo)記位之后的數(shù)據(jù)為像素值數(shù)據(jù),而不是像素數(shù)數(shù)據(jù)。但如果數(shù) 據(jù)的結(jié)構(gòu)本身足以區(qū)別像素值數(shù)據(jù)和像素數(shù)數(shù)據(jù),則不需要記錄該標(biāo)記位,以便使圖形壓 縮文件更小。當(dāng)本輪循環(huán)結(jié)束后,圖形壓縮文件中存儲的內(nèi)容為{Α313216Φ},如圖4-2的 上部所示。
本發(fā)明所述的圖像壓縮方法包括多輪由上述步驟構(gòu)成的壓縮循環(huán),直到將所述圖 像的全部像素都壓縮了為止。圖4-2至圖4-10示出了對圖4-1所示的圖像進(jìn)行各輪壓縮 循環(huán)后已壓縮像素與未壓縮像素的對比。在每輪壓縮循環(huán)中,首先在所述圖像的η個像素行中通過搜索確定當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行以及該像素行的首個未壓縮像素P,并記錄該像素P的像素值。圖4-1至圖4-9的左側(cè)的下劃線均示出了下輪壓縮循環(huán)開始時的當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行。然后,確定并記錄像素P所在像素行及其后續(xù)像素行的每個像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N。圖4-2至圖4-10順序地示出了各輪壓縮循環(huán)結(jié)束時的圖像壓縮狀態(tài),每個圖的左側(cè)的虛線框均示出了本輪壓縮循環(huán)結(jié)束后在壓縮文件中順序記錄的各像素數(shù)N。其中,當(dāng)在某個所述后續(xù)像素行中判斷為從該像素行獲得的像素數(shù)N=O時,則本輪壓縮循環(huán)結(jié)束,返回步驟S103,執(zhí)行下一輪壓縮循環(huán)。N=O的情況有兩種, 一種情況如圖4-3、4-4、4-5、4-7、4-9所示,構(gòu)成所述后續(xù)像素行的所有后續(xù)像素行中的最后一個后續(xù)像素行當(dāng)前不存在未壓縮像素(即,該像素行的所有像素當(dāng)前都已壓縮完畢), 另一種情況如圖4-6、4-8所示,構(gòu)成所述后續(xù)像素行的所有后續(xù)像素行中的最后一個后續(xù)像素行當(dāng)前的首個未壓縮像素的像素值與本輪壓縮循環(huán)所確定的像素P的像素值不同。另夕卜,當(dāng)某個所述后續(xù)像素行為末像素行時,則本輪壓縮循環(huán)也結(jié)束,如圖4-2所示。最后,每輪壓縮循環(huán)結(jié)束后,所述存儲文件的內(nèi)容示于圖4-1至4-10的上部。
上述在所述圖像的η個像素行中通過搜索確定當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行這一步驟可以通過例如以下的具體方法來實現(xiàn)。即,建立具有η個元素的數(shù)組 c□,使得該數(shù)組中的第i個元素的值c[i]為所述圖像的第i個像素行的當(dāng)前未壓縮像素的數(shù)目,其中,O彡i彡η-l。在圖像壓縮過程中,通過所述數(shù)組c□的各元素值c[i]以及各元素下標(biāo)值i,獲得當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行,并獲得該像素行的第一個未壓縮像素P ;通過所述數(shù)組c []和所述像素數(shù)N來確定下輪循環(huán)時各像素行的當(dāng)前未壓縮像素的數(shù)目,以計算機(jī)語言來表示,就是c [i]=c [i]-N。
在圖4-1至圖4-10中,在每個圖的左側(cè)示出了數(shù)組c []的各元素c[i]每輪壓縮循環(huán)結(jié)束后的的當(dāng)前值。其中,c 口包括6個元素(即OSiS 5),在未開始壓縮圖像時,數(shù)組c[]的各個元素的初值均為m=6 (即圖像的列數(shù))。
顯然,也可以將c[i]定義為所述圖像的第i個像素行的當(dāng)前已壓縮像素的數(shù)目, 則數(shù)組c[]的各元素c[i]的初值均為0,并且數(shù)組元素的更新公式為c[i]=c[i]+N。這種具體定義完全不影響對像素P的搜索以及對像素數(shù)N的統(tǒng)計。
在上述圖像壓縮方法的實施過程中,需要頻繁搜索當(dāng)前未壓縮像素數(shù)最大的像素行。該過程會消耗大量的計算資源,因此,對該 過程進(jìn)行優(yōu)化是提高所述圖像壓縮方法的壓縮速度的重要一步。
以采用數(shù)組c[]來表示各像素行的當(dāng)前未壓縮像素數(shù)為例。一種容易想到的提升搜索速度的方法是,對數(shù)組c []的元素進(jìn)行排序。例如,根據(jù)數(shù)組c []中每個元素值的大小將其排成一個鏈表,這樣當(dāng)需要尋找其中的最大值時,直接從該鏈表的頭部(或尾部)獲取即可。但采用該方法需要在每次壓縮完一像素行并更新了與該像素行對應(yīng)的C[i]的值之后對C[i]進(jìn)行插入排序,而大量的插入排序會導(dǎo)致很低的運(yùn)算性能。
另一種解決方法是對數(shù)組c []中的元素值做哈希(hash),而在哈希沖突時進(jìn)行鏈表擴(kuò)展。哈希算法一般可以采用將c[i]的值對圖像的像素列長度取余來進(jìn)行哈希,即, hash(c[i])=c[i]%m,其中m為圖像像素列的列數(shù)。這樣,原本無序的數(shù)組c[]經(jīng)過哈希運(yùn)算存入相應(yīng)的位置后,就變成了有序的數(shù)組。該方法的運(yùn)算速度雖然比前一方法的運(yùn)算速度快些,但是,對于圖像壓縮這樣的應(yīng)用,哈希算法很容易產(chǎn)生哈希沖突。因此仍需在鏈表擴(kuò)展時花大量的運(yùn)算時間進(jìn)行插入排序。
本發(fā)明提供一種對當(dāng)前未壓縮像素數(shù)最大的像素行進(jìn)行搜索的方法,該方法能顯著提升搜索速度。具體說,建立具有m個元素的數(shù)組b [],使得該數(shù)組的第j個元素的值 b[j]為所述圖像的當(dāng)前已壓縮像素數(shù)為j的像素行的個數(shù),其中,O彡j彡m-1,從而在搜索當(dāng)前未壓縮像素數(shù)最大的像素行時,通過數(shù)組b[]確定所述圖像的各像素行中當(dāng)前未壓縮像素數(shù)最大的像素行。
初始時,當(dāng)前已壓縮像素數(shù)為O的像素行的個數(shù)為η,即,所有像素行均未壓縮。通過數(shù)組b□,可以快速確定所有像素行中已壓縮像素數(shù)最小的像素行。S卩,從j = O開始按 j從小到大的順序查找第一個b[j]不等于O時的j值。該過程是一個非??焖俚倪^程., 這是因為,每次查找出的j是不斷增大的,即,下一次查找j時不需要從j = O開始,僅需要從本次查找到的j開始。因此,通過該方法可以快速確定出當(dāng)前已壓縮像素數(shù)的最小值(也即當(dāng)前未壓縮像素數(shù)的最大值)。然后,再在所有像素行中查找當(dāng)前已壓 縮像素數(shù)為該最小值的像素行,即查找當(dāng)前未壓縮像素數(shù)最大的像素行。這個過程不需要任何排序操作。實際效果表明,該方法是一種CPU消耗很小的方法。
本發(fā)明也提供與上述圖像壓縮方法相對應(yīng)的圖像解壓縮方法。
本發(fā)明所述的圖像解壓縮方法包括下述步驟:
A)獲取由前面所描述的圖像壓縮方法產(chǎn)生的圖像壓縮文件,并創(chuàng)建具有η行m列單元的空的存儲文件;
B)在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序讀取當(dāng)前首個未讀取數(shù)據(jù)作為像素值P’,并讀取該數(shù)據(jù)之后的首個未讀數(shù)據(jù)作為像素數(shù)N ;
C)在所述存儲文件的η個單元行中確定當(dāng)前未存儲單元數(shù)最大且行號最小的單元行,并使該單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該單元行作為當(dāng)前單元行執(zhí)行步驟D);
D)在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序搜索當(dāng)前首個未讀取數(shù)據(jù),如果該數(shù)據(jù)不存在,則解壓縮過程結(jié)束,此時的所述存儲文件即為圖像原始文件;如果該數(shù)據(jù)存在且非像素值數(shù)據(jù),則讀取該數(shù)據(jù)作為像素數(shù)N,并使所述存儲文件的當(dāng)前單元行的下一單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該下一單元行作為當(dāng)前單元行執(zhí)行步驟D);如果該數(shù)據(jù)存在且為像素值數(shù)據(jù),則執(zhí)行步驟B)。
上述圖像解壓縮過程與前面所述的圖像壓縮過程是對應(yīng)一致的,也是包括由多輪解壓縮步驟構(gòu)成的循環(huán)。上述圖像解壓縮過程的每輪解壓縮循環(huán)結(jié)束后,在包括η行m列單元的存儲文件中恢復(fù)了的像素的分布與所述圖像壓縮過程的每輪壓縮循環(huán)結(jié)束后在包括η 行m列像素的圖像中已壓縮的像素的分布完全一樣。本領(lǐng)域中的技術(shù)人員很容易從所述圖像壓縮過程理解所述圖像解壓縮過程,因此,這里就不再贅述。
如果在所述圖像壓縮過程中,在圖像壓縮文件中插入了所述特定標(biāo)記位(例如 Φ ),則上述圖像解壓縮過程中的步驟D)可以變?yōu)橄率霾襟ED’ ):在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序搜索當(dāng)前首個未讀取數(shù)據(jù),如果該數(shù)據(jù)不存在,則解壓縮過程結(jié)束,所述存儲文件即為圖像原始文件;如果該數(shù)據(jù)存在且非標(biāo)志位數(shù)據(jù),則讀取該數(shù)據(jù)作為像素數(shù)N,并使所述存儲文件中的當(dāng)前單元行的下一單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該下一單元行作為當(dāng)前單元行執(zhí)行步驟D’);如果該數(shù)據(jù)存在且為標(biāo)志位數(shù)據(jù),則使該標(biāo)記位數(shù)據(jù)的下一個數(shù)據(jù)為所述圖像壓縮文件中的當(dāng)前首個未讀取數(shù)據(jù),并執(zhí)行步驟B)。
同理,在上述圖像解壓縮過程中,在所述存儲文件的η個單元行中確定當(dāng)前未存儲單元數(shù)最大且行號最小的單元行這一步驟可以通過下述具體方法來實現(xiàn)。該方法與圖像壓縮過程中在所述圖像的η個像素行中確定當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行的方法完全類似。即,上述圖像解壓縮方法可以包括:建立具有η個元素的數(shù)組c□,使得該數(shù)組中的第i個元素的值c [i]為所述存儲文件的第i個單元行的當(dāng)前未存儲單元的數(shù)目, 其中,O彡i彡n-1,從而在步驟C)中,通過所述數(shù)組c[]的各元素值c[i]以及各元素下標(biāo)值i,獲得所述存儲文件中的當(dāng)前未存儲單元數(shù)最大且行號最小的單元行;以及在步驟C) 以及在步驟D)或D’)中,通過所述數(shù)組c[]和所述像素數(shù)N來確定下次執(zhí)行步驟C)時所述存儲文件的各單元行的當(dāng)前未存儲單元的數(shù)目。
為了提高所述圖像解壓縮過程的速度,所述圖像解壓縮方法還可以包括:建立具有m個元素的數(shù)組b □,使得該數(shù)組的第j個元素的值b[j]為所述存儲文件的當(dāng)前已存儲單元數(shù)為j的單元行的個數(shù),其中,O彡j彡m-1,從而在步驟C)中,通過數(shù)組b[]確定所述存儲文件的所有單元行中當(dāng)前未存儲單元數(shù)最大的單元行。該圖像解壓縮過程的加速方法與前述圖像壓縮過程的加速方法完全類似,這里就不再贅述。
如上參照圖3以及圖4-1至圖4-10描述了本發(fā)明所述的圖像壓縮方法和相應(yīng)的圖像解壓縮方法。本發(fā)明所述的圖像壓縮方法和相應(yīng)的圖像解壓縮方法可以采用軟件實現(xiàn),也可以采用硬件實現(xiàn),或采用軟件和硬件組合的方式實現(xiàn)。
圖5是本發(fā)明的一個實施例所述的圖像壓縮裝置的結(jié)構(gòu)示意圖。如圖5所示,本發(fā)明的一個實施例所述的圖像壓縮裝置200包括:圖像獲取單元210、存儲文件創(chuàng)建單元220、 像素行確定單元230、像素數(shù)統(tǒng)計單元240、記錄單元250、末行判斷單元260和像素數(shù)判斷單元270。
圖像獲取單元210用于獲取具有η行m列像素的圖像。
存儲文件創(chuàng)建單元220用于創(chuàng)建空的存儲文件。
像素行確定單元230用于在所述圖像的η個像素行中確定當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行以及該像素行的首個未壓縮像素P。
像素數(shù)統(tǒng)計單 元240用于統(tǒng)計所述圖像的當(dāng)前像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,并將這N個像素作為已壓縮像素。
記錄單元250用于在所述存儲文件中有序地記錄由像素行確定單元230多次確定的所述像素P的像素值以及由像素數(shù)統(tǒng)計單元240對于每次確定的像素P統(tǒng)計的至少一個像素行的所述像素數(shù)N。
末行判斷單元260用于在記錄單元250每次記錄了所述像素數(shù)N后判斷當(dāng)前像素行是否為末像素行,如果判斷為是末像素行,則由像素行確定單元230重新確定所述像素 P,如果判斷為不是末像素行,則由像素數(shù)統(tǒng)計單元240統(tǒng)計當(dāng)前像素行的下一像素行的所述像素數(shù)N。
像素數(shù)判斷單元270,用于判斷所述圖像的當(dāng)前像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N是否大于零,如果判斷 為N > O,則記錄單元250在所述存儲文件中有序地記錄N值,如果判斷為N=O,則由像素行 確定單元230重新確定所述像素P。
圖6是本發(fā)明的一個實施例所述的圖像解壓縮裝置的結(jié)構(gòu)示意圖。如圖6所示,本 發(fā)明的一個實施例所述的圖像解壓縮裝置300包括:圖像壓縮文件獲取單元310、存儲文件 創(chuàng)建單元320、數(shù)據(jù)讀取單元330、單元行確定單元340、數(shù)據(jù)寫入單元350和判斷單元360。
圖像壓縮文件獲取單元310用于獲取由圖像壓縮裝置200所產(chǎn)生的圖像壓縮文 件。
存儲文件創(chuàng)建單元320用于創(chuàng)建具有η行m列單元的空的存儲文件;
數(shù)據(jù)讀取單元330用于在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序 依次讀取當(dāng)前首個未讀取數(shù)據(jù)。
單元行確定單元340用于在所述存儲文件的η個單元行中確定當(dāng)前未存儲單元數(shù) 最大且行號最小的單元行。
數(shù)據(jù)寫入單元350。用于在所述存儲文件的單元行中寫入像素值;
判斷單元360。用于判斷數(shù)據(jù)讀取單元330每次所讀取的當(dāng)前首個未讀取數(shù)據(jù)是 否為像素值數(shù)據(jù),如果數(shù)據(jù)讀取單元330讀取的當(dāng)前首個未讀取數(shù)據(jù)為像素值P’,則再讀 取該數(shù)據(jù)之后的首個未讀取數(shù)據(jù)作為像素數(shù)N,數(shù)據(jù)寫入單元350將像素值P’存儲在單元 行確定單元340所確定的當(dāng)前單元行的前N個連續(xù)排列的當(dāng)前未存儲單元中;如果數(shù)據(jù)讀 取單元330讀取的當(dāng)前首個未讀取數(shù)據(jù)為非像素值數(shù)據(jù),則數(shù)據(jù)寫入單元350以該數(shù)據(jù)作 為像素數(shù)N,并將像素值P’存儲在所述存儲文件的當(dāng)前單元行的下一單元行的前N個連續(xù) 排列的當(dāng)前未存儲單元中。
由上面的描述可知,本發(fā)明所述的圖像壓縮和解壓縮的方法和裝置通過采用橫向 深度優(yōu)先(即,從當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行開始壓縮)以及碰壁反彈(即, 統(tǒng)計某像素行連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,然后在其下 一像素行統(tǒng)計所述像素數(shù)N)的搜索方式對圖像局部區(qū)域內(nèi)的像素進(jìn)行充分搜索,節(jié)省了大 量重復(fù)存儲相同像素值的空間,從而實現(xiàn)了較大的壓縮比。另外,針對實際情況還提出了加 速查找過程的方法。實際效果顯示,采用該方法和裝置獲得的平均壓縮比在40%左右,且不 消耗過多的CPU資源,是一種適用范圍較廣的壓縮算法。
盡管已經(jīng)結(jié)合詳細(xì)示出并描述的優(yōu)選實施例公開了本發(fā)明,但是本領(lǐng)域技術(shù)人員 應(yīng)當(dāng)理解,對于上述本發(fā)明所提出的圖像壓縮和圖像解壓縮方法和裝置,還可以在不脫離 本發(fā)明內(nèi)容的基礎(chǔ)上做出各種改進(jìn)。因此,本發(fā)明的保護(hù)范圍應(yīng)當(dāng)由所附的權(quán)利要求書的 內(nèi)容確定。
權(quán)利要求
1.一種圖像壓縮方法,包括:a)獲取具有η行m列像素的圖像,并創(chuàng)建空的存儲文件;b)在所述圖像的η個像素行中確定當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行,如果該像素行當(dāng)前的未壓縮像素數(shù)不為零,則在所述存儲文件中有序地記錄該像素行的首個未壓縮像素P的像素值,如果該像素行當(dāng)前的未壓縮像素數(shù)為零,則壓縮過程結(jié)束,此時的所述存儲文件即為圖像壓縮文件;c)確定該像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,并將這N個像素作為已壓縮像素,在所述存儲文件中有序地記錄該像素數(shù)N,然后以該像素行為當(dāng)前像素行執(zhí)行步驟d);d)如果當(dāng)前像素行是末像素行,則執(zhí)行步驟b);如果當(dāng)前像素行不是末像素行,則在當(dāng)前像素行的下一像素行中確定該像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P 有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,并將這N個像素作為已壓縮像素,其中,如果該像素數(shù)N > O,則在所述存儲文件中有序地記錄該像素數(shù)N,然后以該像素行作為當(dāng)前像素行執(zhí)行步驟d);如果該像素數(shù)N=0,則執(zhí)行步驟b)。
2.如權(quán)利要求1所述的圖像壓縮方法,其中,在步驟d)中,每次在執(zhí)行步驟b)之前還包括在所述存儲文件中有序地記錄特定標(biāo)志位。
3.如權(quán)利要求1所述的圖像壓縮方法,包括,建立具有η個元素的數(shù)組c □,使得該數(shù)組中的第i個元素的值c [i]為所述圖像的第 i個像素行的當(dāng)前未壓縮像素的數(shù)目,其中,O ( i ( n-1,從而在步驟b)中,通過所述數(shù)組 c[]的各元素值c[i]以及各元素下標(biāo)值i,獲得當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行,并獲得該像素行的第一個未壓縮像素P ;在步驟c)和d)中,通過所述數(shù)組c []和所述像素數(shù)N來確定下次執(zhí)行步驟b)時各像素行的當(dāng)前未壓縮像素的數(shù)目。
4.如權(quán)利要求3所述的圖像壓縮方法,還包括,建立具有m個元素的數(shù)組b [],使得該數(shù)組的第j個元素的值b [j]為所述圖像的當(dāng)前已壓縮像素數(shù)為j的像素行的個數(shù),其中,O ( j ( m-1,從而在步驟b)中,按j從小到大的順序找出第一個b[j]不為O時的j,該j值即為所述圖像的各像素行的當(dāng)前已壓縮像素數(shù)中的最小值,從而得以確定所述圖像的各像素行中當(dāng)前已壓縮像素數(shù)最小即當(dāng)前未壓縮像素數(shù)最大的像素行。
5.一種圖像解壓縮方法,包括:A)獲取由權(quán)利要求1所述的圖像壓縮方法產(chǎn)生的圖像壓縮文件,并創(chuàng)建具有η行m列單元的空的存儲文件;B)在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序讀取當(dāng)前首個未讀取數(shù)據(jù)作為像素值P’,并讀取該數(shù)據(jù)之后的首個未讀數(shù)據(jù)作為像素數(shù)N ;C)在所述存儲文件的 η個單元行中確定當(dāng)前未存儲單元數(shù)最大且行號最小的單元行, 并使該單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該單元行作為當(dāng)前單元行執(zhí)行步驟D);D)在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序搜索當(dāng)前首個未讀取數(shù)據(jù), 如果該數(shù)據(jù)不存在,則解壓縮過程結(jié)束,此時的所述存儲文件即為圖像原始文件;如果該數(shù)據(jù)存在且非像素值數(shù)據(jù),則讀取該數(shù)據(jù)作為像素數(shù)N,并使所述存儲文件的當(dāng)前單元行的下一單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該下一單元行作為當(dāng)前單元行執(zhí)行步驟D);如果該數(shù)據(jù)存在且為像素值數(shù)據(jù),則執(zhí)行步驟B)。
6.一種圖像解壓縮方法,包括:A,)獲取由權(quán)利要求2所述的圖像壓縮方法產(chǎn)生的圖像壓縮文件,并創(chuàng)建具有η行m列單元的空的存儲文件;B)在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序讀取當(dāng)前首個未讀取數(shù)據(jù)作為像素值P’,并讀取該數(shù)據(jù)之后的首個未讀數(shù)據(jù)作為像素數(shù)N ;C)在所述存儲文件的η個單元行中確定當(dāng)前未存儲單元數(shù)最大且行號最小的單元行, 并將該單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該單元行作為當(dāng)前單元行執(zhí)行步驟D’);D’ )在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序搜索當(dāng)前首個未讀取數(shù)據(jù),如果該數(shù)據(jù)不存在,則解壓縮過程結(jié)束,此時的所述存儲文件即為圖像原始文件;如果該數(shù)據(jù)存在且非標(biāo)志位數(shù)據(jù),則讀取該數(shù)據(jù)作為像素數(shù)N,并使所述存儲文件中的當(dāng)前單元行的下一單元行的前N個連續(xù)排列的當(dāng)前未存儲單元均存儲像素值P’,然后以該下一單元行作為當(dāng)前單元行執(zhí)行步驟D’ );如果該數(shù)據(jù)存在且為標(biāo)志位數(shù)據(jù),則使該標(biāo)記位數(shù)據(jù)的下一個數(shù)據(jù)為所述圖像壓縮文件中的當(dāng)前首個未讀取數(shù)據(jù),并執(zhí)行步驟B)。
7.如權(quán)利要求5或6所述的圖像解壓縮方法,包括:建立具有η個元素的數(shù)組c □,使得該 數(shù)組中的第i個元素的值c [i]為所述存儲文件的第i個單元行的當(dāng)前未存儲單元的數(shù)目,其中,O ( i ( n-1,從而在步驟C)中,通過所述數(shù)組c[]的各元素值c[i]以及各元素下標(biāo)值i,獲得所述存儲文件中的當(dāng)前未存儲單元數(shù)最大且行號最小的單元行;以及在步驟C)及在步驟D)或D’)中,通過所述數(shù)組c []和所述像素數(shù)N來確定下次執(zhí)行步驟C)時所述存儲文件的各單元行的當(dāng)前未存儲單元的數(shù)目。
8.如權(quán)利要求7所述的圖像解壓縮方法,還包括:建立具有m個元素的數(shù)組b [],使得該數(shù)組的第j個元素的值b [j]為所述存儲文件的當(dāng)前已存儲單元數(shù)為j的單元行的個數(shù),其中,O ( j ( m-1,從而在步驟C)中,按j從小到大的順序找出第一個b[j]不為O時的j,該j值即為所述存儲文件的各單元行的當(dāng)前已存儲單元數(shù)中的最小值,從而得以確定所述存儲文件的各單元行中當(dāng)前已存儲單元數(shù)最小即當(dāng)前未存儲單元數(shù)最大的單元行。
9.一種圖像壓縮裝置,包括:圖像獲取單元,用于獲取具有η行m列像素的圖像;存儲文件創(chuàng)建單元,用于創(chuàng)建空的存儲文件;像素行確定單元,用于在所述圖像的η個像素行中確定當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行以及該像素行的首個未壓縮像素P ;像素數(shù)統(tǒng)計單元,用于統(tǒng)計所述圖像的當(dāng)前像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N,并將這N個像素作為已壓縮像素;記錄單元,用于在所述存儲文件中有序地記錄由像素行確定單元多次確定的所述像素P的像素值以及由像素數(shù)統(tǒng)計單元對于每次確定的像素P統(tǒng)計的至少一個像素行的所述像素數(shù)N ;末行判斷單元,用于在記錄單元每次記錄了所述像素數(shù)N后判斷當(dāng)前像素行是否為末像素行,如果判斷為是末像素行,則由像素行確定單元重新確定所述像素P,如果判斷為不是末像素行,則由像素數(shù)統(tǒng)計單元統(tǒng)計當(dāng)前像素行的下一像素行的所述像素數(shù)N ;像素數(shù)判斷單元,用于判斷所述圖像的當(dāng)前像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N是否大于零,如果判斷為N > O, 則記錄單元在所述存儲文件中有序地記錄N值,如果判斷為N=0,則由像素行確定單元重新確定所述像素P。
10.一種圖像解壓縮裝置,包括:圖像壓縮文件獲取單元,用于獲取由權(quán)利要求9所述的圖像壓縮裝置產(chǎn)生的圖像壓縮文件;存儲文件創(chuàng)建單元,用于創(chuàng)建具有η行m列單元的空的存儲文件;數(shù)據(jù)讀取單元,用于在所述圖像壓縮文件中按所述圖像壓縮方法的記錄順序依次讀取當(dāng)前首個未讀取數(shù)據(jù);單元行確定單元,用 于在所述存儲文件的η個單元行中確定當(dāng)前未存儲單元數(shù)最大且行號最小的單元行;數(shù)據(jù)寫入單元,用于在所述存儲文件的單元行中寫入像素值;判斷單元,用于判斷數(shù)據(jù)讀取單元每次所讀取的當(dāng)前首個未讀取數(shù)據(jù)是否為像素值數(shù)據(jù),如果數(shù)據(jù)讀取單元讀取的當(dāng)前首個未讀取數(shù)據(jù)為像素值P’,則再讀取該數(shù)據(jù)之后的首個未讀取數(shù)據(jù)作為像素數(shù)N,數(shù)據(jù)寫入單元將像素值P’存儲在單元行確定單元所確定的當(dāng)前單元行的前N個連續(xù)排列的當(dāng)前未存儲單元中;如果數(shù)據(jù)讀取單元讀取的當(dāng)前首個未讀取數(shù)據(jù)為非像素值數(shù)據(jù),則數(shù)據(jù)寫入單元以該數(shù)據(jù)作為像素數(shù)N,并將像素值P’存儲在所述存儲文件的當(dāng)前單元行的下一單元行的前N個連續(xù)排列的當(dāng)前未存儲單元中。
全文摘要
本發(fā)明提供一種圖像壓縮方法和裝置及其相應(yīng)的圖像解壓縮方法和裝置,所述圖像壓縮方法包括多輪壓縮循環(huán),在每輪壓縮循環(huán)中,首先在圖像的n個像素行中確定當(dāng)前未壓縮像素數(shù)最大且行號最小的像素行并記錄該像素行的首個未壓縮像素P的像素值。然后,分別確定并記錄像素P所在像素行及其后續(xù)像素行中從當(dāng)前首個未壓縮像素算起連續(xù)排列的與像素P有相同像素值的當(dāng)前未壓縮像素的數(shù)目N。其中,當(dāng)在某個所述后續(xù)像素行中判斷為從該像素行獲得的所述像素數(shù)N=0,或者當(dāng)某個所述后續(xù)像素行為末像素行時,本輪壓縮循環(huán)結(jié)束。該方法獲得的平均壓縮比在40%左右,且不消耗過多的CPU資源,是一種適用范圍較廣的壓縮算法。
文檔編號H04N7/26GK103139567SQ20131003190
公開日2013年6月5日 申請日期2013年1月28日 優(yōu)先權(quán)日2013年1月28日
發(fā)明者聶山人, 張騫, 楊明, 張翼, 劉婕妤, 毛泳江 申請人:東軟集團(tuán)股份有限公司