專利名稱:雙向圖像壓縮方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種可適用于任何顏色及復(fù)雜度的圖像壓縮方法,其是根據(jù)所構(gòu)成被壓縮圖形的圖元的有序方向分布特性,采用動態(tài)最優(yōu)壓縮判斷模式,使最后的壓縮結(jié)果更大限度地利用圖形的分布特性,進一步減少圖像的冗余度。
習(xí)知的圖像壓縮方法,由于其通常需要快速的解壓縮還原,所以其主體框架的壓縮算法多半是采用LZW(Lempel-Ziv-Welch)或LZSS等類似依據(jù)指針字典的LZ系列的壓縮算法。
所謂的LZW壓縮算法,舉例而言,在編碼開始時,假設(shè)字典中的內(nèi)容為P、Q、R,等待編碼的數(shù)據(jù)塊如圖1a所示,其中,Pos表示輸入數(shù)據(jù)的當(dāng)前位置,Char表示數(shù)據(jù)塊,則在進行LZW編碼時,其編碼程序如圖1b所示,也就是說,若字串中的內(nèi)容已存在于字典中,則增加下一字元至字串中,若字串中的內(nèi)容未見于字典中,則將字串輸出為Output,同時將此字串加入至字典中。
一般相對于一個圖形,進行數(shù)據(jù)壓縮處理時,要經(jīng)過圖2所示的流程,方可實施圖形壓縮,也就是首先需將圖形的構(gòu)成像素基于一種數(shù)據(jù)包構(gòu)成原則,排列成一隊列數(shù)據(jù)包;接著,針對該隊列數(shù)據(jù)包的數(shù)據(jù),按照某一純數(shù)據(jù)壓縮算法加以處理。
對于所有的LZ壓縮算法,包括LZ77、LZ78、LZR、LZW、LZMY、LZC、LZJ、LZSS、LZB、LZH、LZT、LZFG等壓縮算法,其主要的技術(shù)特點為其壓縮處理方式以字節(jié)為其準(zhǔn)的壓縮處理,而其據(jù)以壓縮的原則為(1)字節(jié)重復(fù),或是(2)兩組數(shù)據(jù)塊匹配相同。因此,欲提高壓縮率,必須確實符合上述的壓縮原則。然而,因為LZ算法只是針對一個隊列數(shù)據(jù)包的純壓縮算法,所以對于一個固定唯一的數(shù)據(jù)包,運用上述壓縮原則的使用效率也是固定唯一的。
在一般的壓縮方法中,大多使用預(yù)設(shè)的方式,也就是根據(jù)字節(jié)的水平方向,將圖形中的多個像素構(gòu)成數(shù)據(jù)包。例如,對于一個6×7的16色圖形而言,如圖3a所示,其中P1、P2、P3、…、BP42均為該圖形的像素,其6×7=42個。因為對16色的圖形而言,每個像素占用4個字節(jié),所以兩個像素可以構(gòu)成一個字節(jié),如此則依照預(yù)設(shè)的方式,所構(gòu)成的數(shù)據(jù)包為{P1、P2},{P3、P4}、{P5、P6}、{P7、P8}、{P9、P10}、{P11、P12}、{P13、P14}、{P15、P16}、{P27、P18}、{P19、P20}、{P21、P22}、{P23、P24}、{P25、P26}、{P27、P28}、{P29、P20}、{P31、P32}、{P33、P34}、{P35、P36}、{P37、P38}、{P39、P40}、{P41、P42}。
可是此種運用預(yù)設(shè)方式構(gòu)成的隊列數(shù)據(jù)包,卻無法使得前述壓縮原則在LZ算法中的使用效率得到一個較佳的結(jié)果。以此一6×7大小的圖形為例,若將P1~P42各賦予顏色點值0~2,則像素陣列如圖3b所示。當(dāng)以不同的排列方式構(gòu)成不同的隊列數(shù)據(jù)包時,由下表很明顯地可看出,其壓縮效果并不相同。<
很明顯地,對于同一個圖形,當(dāng)采用兩種不同的方式構(gòu)成隊列數(shù)據(jù)包時,即使采用同一種純壓縮算法,所得到的壓縮結(jié)果也可能完全不同。這也說明了僅使用傳統(tǒng)的預(yù)設(shè)方式構(gòu)成隊列數(shù)據(jù)包,并不能使得前述的壓縮原則,在LZ算法中始終保持最佳的壓縮效率。
如上所述,以往普通的壓縮方法,欲提高壓縮效率,通常只注意到如何提高壓縮編碼的利用率,但忽略了一個重要的壓縮處理環(huán)節(jié),即如何構(gòu)成隊列數(shù)據(jù)包。因此,在先前技術(shù)中對所構(gòu)成像素的方向排列有序性做了若干假設(shè),其假設(shè)有序像素在水平方向上分布更加規(guī)則。然而,事實證明在前述的假設(shè)下,僅依靠提高編碼利用率,要提高1%的壓縮率也很困難。
另一方面,所有的LZ壓縮算法的實現(xiàn)有一個主要的特征其將一個固定大小的空間(例如為4K字節(jié))作為壓縮窗口,每次壓縮一個壓縮窗口內(nèi)的數(shù)據(jù)包中的數(shù)據(jù),待壓縮結(jié)束后,再移動到下一個壓縮窗口進行壓縮,直到整個數(shù)據(jù)包處理結(jié)束。顯然在該算法中,LZ算法中壓縮途徑(1)或(2)的效能的發(fā)揮只能在一個壓縮窗口(例如為4K字節(jié))內(nèi)實現(xiàn)。以一個標(biāo)準(zhǔn)壓縮窗口4字節(jié)的大小,其對于圖形文件占用空間相比而言有時會顯得太小了,例如對16色640×480的圖形而言,約可包含640×480、2、4096=38個壓縮窗口。這樣,對一個圖形而言,大量的壓縮窗口與壓縮窗口間的數(shù)據(jù)相關(guān)性(如字節(jié)重復(fù)性、數(shù)據(jù)塊匹配性)可能被白白忽略浪費掉。因此,對圖形壓縮而言,充分利用壓縮窗口間的數(shù)據(jù)相關(guān)性,是進一步提高壓縮率的積極手段。但是欲快速地實現(xiàn)全域字節(jié)重復(fù)及全域數(shù)據(jù)塊的匹配,則尚存在有一些困難。
有鑒于此,為了改進先前技術(shù)的缺點,提高圖像壓縮率,本發(fā)明的目的即在于提供一種雙向圖像壓縮方法,其針對傳統(tǒng)壓縮流程忽略了圖形中像素有序方向分布的內(nèi)在圖形特性,在方法上強調(diào)要充分考慮和利用圖形的內(nèi)在有序像素分布特性;在算法上改善了傳統(tǒng)壓縮算法,使其效能得以充分發(fā)揮。
傳統(tǒng)的壓縮方法主要是將重點放在改善純數(shù)據(jù)壓縮算法上,而本發(fā)明的方法則是具有很不同的思維方式,利用本發(fā)明的壓縮方法,可更完整地利用圖形有內(nèi)在分布特性,同時進一步發(fā)揮各壓縮原則在LZ算法中的效能,進而減小了圖形的分布,藉以得到更好的壓縮率。
當(dāng)壓縮圖形時,將實際圖形的存儲數(shù)據(jù),按照圖形的長、寬構(gòu)成像素陣列,然后將像素依照水平和垂直方向構(gòu)成隊列數(shù)據(jù)包,亦即以字節(jié)為基本構(gòu)成隊列單元,對單色圖而言,1個字節(jié)包含8個像素;對于16色圖而言,1個字節(jié)包含2個像素;對于256色圖而言,1個字節(jié)包含1個像素,依此類推。然后,再針對隊列數(shù)據(jù)包進行LZ數(shù)據(jù)壓縮,最后比較分別沿著兩個壓縮方向(即水平方向和垂直方向)上的壓縮結(jié)果,取壓縮結(jié)果的最小值,從而動態(tài)地產(chǎn)生最優(yōu)的壓縮結(jié)果,并將實際取得的最優(yōu)壓縮結(jié)果所對應(yīng)的像素陣列的隊列數(shù)據(jù)包方向記錄下,以做為解壓還原之用。
本發(fā)明的壓縮算法主要是在數(shù)據(jù)包壓縮方面,針對在各種LZ算法中,忽略處理壓縮窗口間數(shù)據(jù)相關(guān)性的問題,依據(jù)壓縮窗口的浮動特性,相對于習(xí)知的LZ壓縮算法,提出一種可實現(xiàn)的、較快速的全域LZ算法,以下將其稱為LZZ壓縮算法。本發(fā)明的LZZ壓縮算法的主要特征為(1)在字節(jié)重復(fù)處理方面,突破了壓縮窗口(例如4K)的限制,壓縮編碼最大可包含64K個重復(fù)字節(jié)。(2)在數(shù)據(jù)塊匹配區(qū)間方面,突破壓縮窗口區(qū)間(例如4K)的限制,最大數(shù)據(jù)塊匹配向前試探空間可達256×4的大小。(3)在數(shù)據(jù)塊匹配長度方面,可突破壓縮窗口(例如4K)的限制,壓縮編碼最大可包容64K個匹配字節(jié)。下面結(jié)合
較佳實施例,藉以更清楚地揭示本發(fā)明的技術(shù)、方法與特征。其中圖1a與圖1b為用以說明習(xí)知的LZW壓縮算法的編碼流程圖。
圖2為先前技術(shù)中圖像數(shù)據(jù)壓縮的流程圖。
圖3a為在一圖形中的多個像素的排列方式的視圖。
圖3b為對一圖形中的多個像素賦予顏色點值后的像素陣列的視圖。
圖4為本發(fā)明的雙向圖像壓縮算法的流程圖。
圖5a及圖5b為本發(fā)明的LZZ算法的流程圖。
圖6和圖7為一幅圖形構(gòu)成水平和垂直方向的16色640×480的圖像。
圖8為在本發(fā)明所使用的LZZ壓縮算法內(nèi)的無重復(fù)字節(jié)編碼的字節(jié)段中的編碼定義圖。
圖9為在本發(fā)明所使用的LZZ壓縮算法內(nèi)的重復(fù)字節(jié)編碼的字節(jié)段中的編碼定義圖。
圖10為在本發(fā)明所使用的LZZ壓縮算法內(nèi)的數(shù)據(jù)塊重復(fù)編碼的字節(jié)段中的編碼定義圖。
本發(fā)明為一雙向圖像壓縮方法,由于每幅圖都是由許多圖元組成,圖元可以是一個像點,也可以是一個任意大小的像點矩陣。依據(jù)每幅圖的像點結(jié)構(gòu),可能在水平方向上規(guī)則有序的圖元較多,也可能在垂直方向上規(guī)則有序的圖元較多。而規(guī)則有序的圖元為影響壓縮率的重要因素,因此,在本發(fā)明的雙向壓縮方法中,當(dāng)壓縮某一圖形文件時,將實際圖形的存儲數(shù)據(jù)依照圖形的長、寬構(gòu)成F[X,Y]陣列,然后將圖形數(shù)據(jù)分別沿水平及垂直方向,構(gòu)成不同的隊列數(shù)據(jù)包。然后,針對該數(shù)據(jù)包進行本發(fā)明的壓縮處理,最后在比較兩個方向上的壓縮數(shù)據(jù)結(jié)果,取其最小值,而動態(tài)產(chǎn)生最佳的壓縮結(jié)果,并將實際中能產(chǎn)生最佳壓縮結(jié)果所對應(yīng)的F[X,Y]陣列的隊列數(shù)據(jù)包排列方向記錄下來,以作為解壓還原之用。如此,對應(yīng)于不同的圖形,可以針對其像素陣列不同的有序方向性,而做出不同的壓縮選擇。換言之,本發(fā)明也就是利用一種壓縮方法,分別對兩個不同方向排列的數(shù)據(jù)包進行壓縮,比較結(jié)果并取其最佳的壓縮值,從而達成更理想的壓縮率。
請參閱圖4,本發(fā)明的雙向壓縮算法包括下列步驟(1)步驟100,先以字節(jié)為圖元單位,分別沿著水平方向及垂直方向構(gòu)成隊列數(shù)據(jù)包;(2)步驟102,接著再利用本發(fā)明的壓縮算法,分別壓縮前述沿著水平方向及垂直方向所構(gòu)成的隊列數(shù)據(jù)外;(3)步驟104,再比較沿著水平方向及垂直方向的陣列壓縮率,若水平方向大于垂直方向,則進行至步驟106,選定水平方向壓縮結(jié)果為本壓縮算法的壓縮結(jié)果,同時記錄壓縮數(shù)據(jù)大小,并記錄壓縮方向為水平方向,然后結(jié)束;(5)步驟108,選定垂直方向壓縮結(jié)果為本壓縮算法的壓縮結(jié)果,同時記錄壓縮數(shù)據(jù)大小,并記錄壓縮方向為垂直方向,然后結(jié)束。
前述本發(fā)明的壓縮算法,主要是以LZW壓縮算法為基礎(chǔ),再加入擴展編碼技術(shù),使得本發(fā)明對數(shù)據(jù)的壓縮可以突破壓縮窗口的限制,以下將本發(fā)明的壓縮算法簡稱為LZZ壓縮算法,其是先設(shè)定一個數(shù)據(jù)包的長度為DataBlockSize,壓縮窗口的大小設(shè)定為WindowSize(例如4K),當(dāng)前搜索字節(jié)偏移設(shè)定為CurrentPoint。
在處理重復(fù)字節(jié)時,于其他的LZ算法中,其結(jié)束條件為CurrentPoint+RepeatLength<WindowSize,及CurrentPoint+RepeatLength<DataBlockSize。
而在LZZ算法中,其結(jié)束條件為CurrentPoint+RepeatLength<64K,及CurrentPoint+RepeatLength<DataBlockSize,在處理數(shù)據(jù)塊匹配時,首先先對整個數(shù)據(jù)包,依據(jù)一固定長度FIXED_LENGTH,例如可為30~50個字節(jié)為間隔大小,對整個數(shù)據(jù)包的所有數(shù)據(jù)劃分為若干段,利用CRC(循環(huán)冗余校驗碼)具有唯一表征一定長度字串的特性,為每段分別計算其CRC值(例如為16位的CRC),產(chǎn)生一幅由各段CRC值組成的值域。這樣利用CRC值至少可以觀察到214個數(shù)據(jù)字節(jié)的特性。根據(jù)判斷CRC值是否相等,作為FIXED_LENGTH為基礎(chǔ)的各段CRC最大匹配長度統(tǒng)計,即可以得到由段號和各段最大匹配長度所組成的段匹配表。則相對于一已知指針Point,在數(shù)據(jù)包內(nèi)指針Poing所對應(yīng)的段號為Point/FIXED_LENGTH。
當(dāng)壓縮掃描指針為CurrentPoint時,首先掃描從偏移CurrentPoing-WindowSize(如CurrentPoint<WindowSize,則取值為0)開始到CurrentPoint為止的一個“浮動的壓縮窗口”和從CurrentPoint開始的數(shù)據(jù)塊匹配數(shù)MatchLengthInWindow,然后再進行向前的全域搜索,搜索區(qū)間為從數(shù)據(jù)包開始偏移0處到CurrentPoint-WindowSize(如CurrentPoint<WindowSize,則取值為0)處。所以當(dāng)以FIXED_LENGTH為段大小來劃分時,相對應(yīng)的區(qū)間段號為0~(CurrentPoint-WindowSize)/FIXED_LENGTH,如此直接根據(jù)段號查段匹配表,即可得出全域數(shù)據(jù)塊匹配長度MatchLengthInPastRange。
接著,比較MatchLengthInWindow和MatchLengthInPastRange的大小,可得出最大的數(shù)據(jù)塊匹配長度。
在此應(yīng)注意,若考慮到編碼效率的因素,當(dāng)MatchLengthInWindow<MatchLengthInPassRange≥8時,將取MatchLengthInWindow為當(dāng)前最大的匹配長度,因為此時采用MatchLengthInWindow的編碼(LZ編碼)的長度小于采用MatchLengthInPastRange的編碼(擴展編碼)的長度。如此,經(jīng)由引入段匹配(根據(jù)CRC值表進行計算),可較為快速地實現(xiàn)大容量的數(shù)據(jù)塊匹配計算。
請參閱圖5a、5b,本發(fā)明的LZZ壓縮算法包括下列步驟(1)步驟110,取得當(dāng)前重復(fù)字節(jié)數(shù)據(jù)RepeatLength;(2)步驟112,取得當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度MatchLengthInWindow;(3)步驟114,取得從數(shù)據(jù)包開始到當(dāng)前掃描字節(jié)的上一個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度MatchLengthInPastRange;(4)步驟116,若當(dāng)前重復(fù)字節(jié)數(shù)RepeatLength小于2,則行進至步驟118,否則進行至A;(5)步驟118,若當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度MatchLengthInWindow小于上一個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度MatchlengthInPastRange,則進行至步驟120,否則進行至步驟122;(6)步驟120,設(shè)定最大數(shù)據(jù)塊匹配長度MatchLengthInPastRange,然后進行至B;(7)步驟122,設(shè)定最大數(shù)據(jù)塊匹配長度為當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度MatchLengthInWindow,然后進行至B。
其中,如圖5b所示,A為進行至步驟130,執(zhí)行普通的字節(jié)編碼,然后再行進至D。而B則行進至步驟140,決定當(dāng)前重復(fù)字節(jié)數(shù)RepeatLength是否大于最大數(shù)據(jù)塊匹配長度,若是則進行至步驟142,否則進行至步驟144;步驟142,執(zhí)行字節(jié)重復(fù)編碼,然后經(jīng)由D進行至步驟146;步驟144,執(zhí)行數(shù)據(jù)塊匹配編碼,然后經(jīng)由D進行至步驟146;步驟146,若數(shù)據(jù)包掃描結(jié)束,則結(jié)束流程,否則進行至C,由C進行至步驟110。
請參閱圖6,其為一幅16色640×480的圖像,此圖像的結(jié)構(gòu)大致可分為I、J、K三個區(qū)塊,對此圖而言,由于I與J兩個區(qū)塊的圖形特性幾乎完全相同,所以根據(jù)LZZ算法,可實現(xiàn)I、J區(qū)塊跨壓縮窗口區(qū)間的匹配壓縮。同時,區(qū)塊K中則含有較大幅度的白色塊,如前所述,以傳統(tǒng)的壓縮算法,其壓縮窗口小于4K字節(jié),則這樣一幅16色640×480的圖像至少必須分成38個壓縮窗口,因此,在區(qū)塊K中大約會有10個大小為4K字節(jié)且僅包含白爭像素的壓縮窗口,嚴(yán)重地影響壓縮效率。相對地,利用本發(fā)明的LZZ算法,可以實現(xiàn)跨壓縮窗口長度的字節(jié)重復(fù)壓縮,也就是說,字節(jié)重復(fù)壓縮的長度可大于4K字節(jié),因此,在圖形中具有大量重復(fù)字節(jié)時,其壓縮效率極佳。另外,因為圖形為水平構(gòu)圖,所以沿水平方向看,區(qū)塊I及J可實施大區(qū)域匹配壓縮,區(qū)塊K則可實施大區(qū)域重復(fù)壓縮。由圖中顯示可以看出,若沿著垂直方向來看,則由于像素重復(fù)率較低,所以壓縮特性將較差。將其按水平方向和垂直方向分別構(gòu)成數(shù)據(jù)包,然后因為習(xí)知的LZ壓縮算法只能應(yīng)用于水平方向的壓縮,而本發(fā)明的LZZ壓縮算法可應(yīng)用于水平和垂直兩個方向,所以分別利用LZZ壓縮算法壓縮其水平方向和垂直方向的數(shù)據(jù)包,再利用LZW壓縮算法壓縮其水平方向的數(shù)據(jù)包,其壓縮結(jié)果比較如下表1表1<
>相對地,當(dāng)此一16色640×480的圖像如圖7所示,同樣地分別利用LZZ壓縮算法壓縮其水平方向和垂直方向的數(shù)據(jù)包,再利用LZW壓縮算法壓縮其水平方向的數(shù)據(jù)包,其壓縮結(jié)果比較如下表2表2<
很明顯,由上表可看出本發(fā)明的LZZ壓縮算法對于左右對稱或上下對稱的構(gòu)圖,壓縮效率較傳統(tǒng)壓縮算法高,因為其實現(xiàn)了遠端數(shù)據(jù)匹配。依據(jù)上表1中的數(shù)據(jù)而言,沿著水平方向,利用LZZ壓縮算法壓縮后,圖形的大小為2294個字節(jié),僅為運用LZW壓縮算法壓縮的結(jié)果的一半大小。不過由于其仍大于水平方向的2294個字節(jié),所以根據(jù)本發(fā)明的方法,還是輸出水平方向的壓縮結(jié)果作為運用本發(fā)明的方法進行壓縮的輸出。而根據(jù)表2的數(shù)據(jù),沿著水平方向,利用LZZ壓縮算法壓縮后,圖形有大小為5026個字節(jié),不到運用LZW壓縮算法壓縮的結(jié)果的一半,也就是說,在圖形構(gòu)圖對稱性較差的情況下,LZZ壓縮算法的壓縮效率更是顯示比習(xí)知壓縮算法好。當(dāng)然,比較表1與表2的數(shù)據(jù),可知對于構(gòu)圖對稱性較佳的圖形,利用LZZ壓縮算法可以獲得極佳的壓縮效率。
接下來再以一實施例說明LZZ壓縮算法的詳細流程,其中,此實施例是以單色圖為例加以說明。
對于如圖3a所示的像素陣列,該單色圖形的寬為M×8、高為n,其為沿著水平方向相鄰8個像素為1個字節(jié)存儲單元的像素陣列。P11、P12、P13、P14、…、P21、P22、P23、……均為陣列元素,其分別對應(yīng)單色圖形中8個水平相鄰的像素,其大小均為1個字節(jié),且令M為所對應(yīng)的圖元陣列的行值,N為所對應(yīng)的圖元陣列的列值。其與圖像的對應(yīng)公式為M=單色圖像寬/8N=單色圖像高再者,以下所述圖元如未經(jīng)特別指定,均指單色圖形中8×1像素大小的圖塊。
首先分別沿著水平方向和垂直方向,將圖像陣列中的圖元區(qū)分成隊列數(shù)據(jù)包。亦即,沿著水平方向構(gòu)成隊列數(shù)據(jù)包后,得到一個長度為N×M大小的數(shù)組序列,如下所示ArrayX[N×M]={P11、P12、P13、P14、…、P1m、P21、P22、P23、P24、…、P2m、P31、P32、P33、P34、…、P3m、P41、P42、P43、P44、…、P4m、…、Pn1、Pn2、Pn3、Pn4、…、Pnm};另外,沿著垂直方向構(gòu)成隊列數(shù)據(jù)包后,得到一個長度為M×N大小的數(shù)組序列,如下所示ArrayY[N×M]={P11、P12、P13、P14、…、P1n、P21、P22、P23、P24、…、P2n、P31、P32、P33、P34、…、P3n、P41、P42、P43、P44、…、P4n、…、Pm1、Pm2、Pm3、Pm4、…、Pmn}。
針對上述兩個數(shù)據(jù)隊列,均采用前述LZZ壓縮算法進行壓縮,如圖4所示,數(shù)組ArrayX經(jīng)LZZ壓縮算法壓縮后得到的壓縮碼長度為SizeX,數(shù)組ArrayY經(jīng)LZZ壓縮算法壓縮后得到的壓縮碼長度為SizeY。則若SizeX<SizeY,則取水平方向數(shù)據(jù)包的壓縮結(jié)果為壓縮的結(jié)果,同時記錄壓縮方向為水平方向。又若SizeX>SizeY,則取垂直方向數(shù)據(jù)包的壓縮結(jié)果為壓縮的結(jié)果,同時記錄壓縮方向為垂直方向。
最后,再對本發(fā)明的LZZ壓縮算法的編碼定義加以說明?;旧?,本發(fā)明的LZZ壓縮算法是以習(xí)知的LZ壓縮算法為基礎(chǔ),加上擴展編碼的部分以及匹配重復(fù)地址的運用。
在無重復(fù)字節(jié)編碼的字節(jié)段中,第一個字節(jié)為標(biāo)記字節(jié),其后的字節(jié)為數(shù)據(jù)中的無重復(fù)特征字節(jié),如圖8所示,其中標(biāo)記字節(jié)第7位及第6位無為0,其余6位表示后面的無重復(fù)特征字節(jié)的個數(shù)N。
在重復(fù)字節(jié)編碼中,第一個字節(jié)為標(biāo)記字節(jié),第二個字節(jié)為重復(fù)字節(jié)的ASCII碼,如圖9所示,標(biāo)記字節(jié)的第七位與第六位分別為0和1,以作為編碼識別。后面的6位表示字節(jié)重復(fù)個數(shù)N,其最大值NMAX為64。另外,相對于一般的LZ壓縮算法中,字節(jié)重復(fù)個數(shù)N≥2(由重復(fù)編碼的定義決定)。當(dāng)N=0或N=1時,即成為冗余編碼。在本發(fā)明中,特別設(shè)定N=0和N=1時,采用LZZ編碼,其中,當(dāng)N=0時,以第三個字節(jié)表示重復(fù)字節(jié)個數(shù),其中表示64至256個重復(fù)字節(jié);當(dāng)N=1時,以第三個字節(jié)與第四個字節(jié)表示重復(fù)字節(jié)個數(shù),其可表示256至64K個重復(fù)字節(jié)。
在數(shù)據(jù)塊重復(fù)編碼中,第一字節(jié)仍為標(biāo)記字節(jié),第二字節(jié)為地址字節(jié),如圖10所示,第一個字節(jié)的第7位為1,以做為編碼的標(biāo)記,而第一字節(jié)的第0~3位與第二字節(jié)的第0~07位,共12位用以表示當(dāng)前匹配數(shù)據(jù)塊的數(shù)據(jù)塊重復(fù)地址,因為212=4096,故可表示的匹配重復(fù)數(shù)據(jù)塊的最大范圍為4096個字節(jié)。也就是說,將來源數(shù)據(jù)以最大尺寸4096字節(jié)放入緩沖區(qū)內(nèi),當(dāng)找到兩個相同的數(shù)據(jù)塊時,便將第一個數(shù)據(jù)塊相對于緩沖區(qū)首地址的編移稱之為地址。因此,12位恰可表示一個緩沖區(qū)的地址,如此當(dāng)后一數(shù)據(jù)塊和前一數(shù)據(jù)塊匹配成功后,若其匹配數(shù)目小于8時,則放置于第一字節(jié)的第4~6位,此時壓縮編碼為2字節(jié)長度;否則第一字節(jié)的4~6位為111(二進制表示),此時當(dāng)匹配數(shù)目小于256時,則匹配數(shù)目放置在第三字節(jié),此時壓縮編碼為3字節(jié)長度;若匹配長度超過256但小于64K,則將第三字節(jié)設(shè)置為1(作特征標(biāo)示),而將真實匹配長度放置在第5和第6字節(jié)中。而當(dāng)匹配地址小于4K時,采用2~3位壓縮編碼,即如圖10所示,為[第一位、第二位]或[第一位、第二位、第三位]。當(dāng)匹配地址大于4K時,采用4或5或6位編碼,匹配地址等于第四字節(jié)(表示整4K個數(shù))*4096+第一位及第二位中地址值A(chǔ)DDR。至于組號則可存儲一組編碼,用以指示匹配的數(shù)據(jù)塊,因此,8位的組號可以表示的最大數(shù)據(jù)塊匹配向前試探空間為256×4K。
權(quán)利要求
1.一種雙向圖像壓縮方法,其特征在于,包括下列步驟(i)先以字節(jié)為圖元單位,分別沿著水平方向及垂直方向構(gòu)成隊列數(shù)據(jù)包;(ii)接者再利用一壓縮算法,分別壓縮前述沿著水平方向及垂直方向所構(gòu)成的隊列數(shù)據(jù)包;(iii)再比較沿著水平方向及垂直方向的陣列壓縮率,若水平方向大于垂直方向,則進行至下一步驟;(iv)選定水平方向壓縮結(jié)果為本壓縮算法的壓縮結(jié)果,同時記錄壓縮數(shù)據(jù)大小,并記錄壓縮方向為水平方向,然后結(jié)束;(v)前述步驟(iii)中,比較沿著水平方向及垂直方向的陣列壓縮率,若水平方向小于垂直方向,則進行至下一步驟;及(vi)選定垂直方向壓縮結(jié)果為本壓縮算法的壓縮結(jié)果,同時記錄壓縮數(shù)據(jù)大小,并記錄壓縮方向為垂直方向,然后結(jié)束。
2.如權(quán)利要求1所述的雙向圖像壓縮方法,其特征在于,前述壓縮算法包括下表步驟(1)取得當(dāng)前重復(fù)字節(jié)數(shù);(2)取得當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度;(3)取得從數(shù)據(jù)包開始到當(dāng)前掃描字節(jié)的上一個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度;(4)若當(dāng)前重復(fù)字節(jié)數(shù)小于2,則行進至下一步驟,否則進行至步驟(9);(5)若當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度小于上個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度,則進行至下一步驟;(6)設(shè)定最大數(shù)據(jù)塊匹配長度為上一個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度,然后進行至步驟(10);(7)若當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊長度大于上個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度,則進行至下一步驟;(8)設(shè)定最大數(shù)據(jù)塊匹配長度為當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度,然后進行至步驟(10);(9)執(zhí)行普通的字節(jié)編碼,然后再行進至步驟(14);(10)決定當(dāng)前重復(fù)字節(jié)數(shù)是否大于最大數(shù)據(jù)塊匹配長度,若是則進行至下一步驟;(11)執(zhí)行字節(jié)重復(fù)編碼,然后進行至步驟(14);(12)若當(dāng)前重復(fù)字節(jié)數(shù)小于最大數(shù)據(jù)塊匹配長度,若是則進行至下一步驟;(13)執(zhí)行數(shù)據(jù)塊匹配編碼,然后進行至下一步驟;(14)若數(shù)據(jù)包掃描結(jié)束則結(jié)束流程,否則進行至步驟(1)。
3.如權(quán)利要求2所述的雙向圖像壓縮方法,其特征在于,當(dāng)前述當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度<上一個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度≤8時,取當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度為當(dāng)前最大的匹配長度。
4.如權(quán)利要求2所述的雙向圖像壓縮方法,其特征在于,當(dāng)前搜索字節(jié)的偏移+當(dāng)前重復(fù)字節(jié)數(shù)<64K,及當(dāng)前搜索字節(jié)的偏移+當(dāng)前重復(fù)字節(jié)數(shù)<數(shù)據(jù)包的長度。
5.如權(quán)利要求2所述的雙向圖像壓縮方法,其特征在于,前述壓縮方法的編碼定義為在無重復(fù)字節(jié)編碼的字節(jié)段中,第一個字節(jié)為標(biāo)記字節(jié),其后的字節(jié)為數(shù)據(jù)中的無重復(fù)特征字節(jié)。
6.如權(quán)利要求2所述的雙向圖像壓縮方法,其特征在于,前述壓縮方法的編碼定義為重復(fù)字節(jié)編碼中,第一個字節(jié)為標(biāo)記字節(jié),第二個字節(jié)為重復(fù)字節(jié)的ASCII碼。
7.如權(quán)利要求2所述的雙向圖像壓縮方法,其特征在于,前述壓縮方法的編碼定義為在數(shù)據(jù)塊重復(fù)編碼中,第一字節(jié)仍為標(biāo)記字節(jié),第二字節(jié)為地址字節(jié)。
8.如權(quán)利要求5所述的雙向圖像壓縮方法,其特征在于,前述標(biāo)記字節(jié)第7位及第6位均為0,其余6個位表示后面的無重復(fù)特征字節(jié)的個數(shù)。
9.如權(quán)利要求6所述的雙向圖像壓縮方法,其特征在于,前述標(biāo)記字節(jié)的第七位與第六位分別為0和1,以做為編碼識別,后面的6位表示字節(jié)重復(fù)個數(shù)N,且N的最大值為64。
10.如權(quán)利要求7所述的雙向圖像壓縮方法,其特征在于,前述第一個字節(jié)的第7位為1,以做為編友碼的標(biāo)記,而第一字節(jié)的第0~3位與第二字節(jié)的0~7位,共12位用以表示當(dāng)前匹配數(shù)據(jù)塊的數(shù)據(jù)塊重復(fù)地址。
11.如權(quán)利要求9所述的雙向圖像壓縮方法,其特征在于,當(dāng)N=0時,第三字節(jié)為重復(fù)字節(jié)個數(shù),其可表示64至256個字節(jié);當(dāng)N=1時,第三字節(jié)與第四字節(jié)為重復(fù)字節(jié)個數(shù),其可表示256至64K個字節(jié)。
12.如權(quán)利要求10所述的雙向圖像壓縮方法,其特征在于,當(dāng)后一數(shù)據(jù)塊和前一數(shù)據(jù)塊匹配成功后,若其匹配數(shù)目小于8時,則放置于第一字節(jié)的第4~6位,此時壓縮編碼為2字節(jié)長度;否則第一字節(jié)的4~6位為二進制數(shù)表示的111,此時當(dāng)匹配數(shù)目小于256時,則匹配數(shù)目放置在第三字節(jié)中,此時壓縮編碼為3字節(jié)長度;若匹配長度超過256但小于64K,則將第三字節(jié)置為1,以做為特征標(biāo)示,而將真實匹配長度放置在第5和第6字節(jié)中;而當(dāng)匹配地址小于4K時,采用2~3位壓縮編碼,為[第一位、第二位]或[第一位、第二位、第三位];當(dāng)匹配地址大于4K時,采用4或5或6位編碼匹配地址等于第四字節(jié)×4096+第一位及第二位中的地址值。
13.一種雙向圖像壓縮方法,其特征在于,包括下列步驟(i)當(dāng)壓縮某一圖形文件時,將實際圖形的存儲數(shù)據(jù)依照圖形有長、寬構(gòu)成一陣列,然后將圖形數(shù)據(jù)的陣列分別沿水平及垂直方向,構(gòu)成不同的隊列數(shù)據(jù)包;(ii)首先,對沿水平方向構(gòu)成的隊列數(shù)據(jù)包進行壓縮處理,在處理重復(fù)字節(jié)時,設(shè)定其結(jié)束條件為當(dāng)前搜索字節(jié)的偏移+當(dāng)前重復(fù)字節(jié)數(shù)<64K,及當(dāng)前搜索字節(jié)的偏移+當(dāng)前重復(fù)字節(jié)數(shù)<數(shù)據(jù)包的長度,在處理數(shù)據(jù)塊匹配時,首先對整個數(shù)據(jù)包,以一固定長度的字節(jié)為間隔,對整個數(shù)據(jù)包分段計算其循環(huán)冗余校驗碼值,產(chǎn)生一張循環(huán)冗余校驗碼值域表,然后,根據(jù)循環(huán)冗余校驗碼值是否相等,可以得到以該固定長度為基礎(chǔ)的段匹配表,則相對于一已知的指針,在數(shù)據(jù)包內(nèi)指針?biāo)鶎?yīng)的段號為指針/固定長度;(iii)當(dāng)壓縮掃描指針為當(dāng)前搜索字節(jié)的偏移時,首先掃描從偏移當(dāng)前搜索字節(jié)的偏-壓縮窗口的大小開始到當(dāng)前搜索字節(jié)的偏移為止的一個浮動的壓縮窗口和從當(dāng)前搜索字節(jié)的偏移開始的數(shù)據(jù)塊匹配數(shù)據(jù)當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度,然后再進行向前的全域搜索,搜索區(qū)間為從數(shù)據(jù)包開始偏移0處到當(dāng)前搜索字節(jié)的偏移-壓縮窗口的大小處,所以當(dāng)以固定長度為段大小來劃分時,相對應(yīng)的區(qū)間段號為0至(當(dāng)前搜索字節(jié)的偏移-壓縮窗口的大小)/固定長度,如此直接根據(jù)段號查段匹配表,即可得出全域數(shù)據(jù)塊匹配長度上一個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度;(iv)接著,比較當(dāng)前壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度和上一個壓縮窗口內(nèi)的數(shù)據(jù)塊匹配長度的大小,可得出最大的數(shù)據(jù)塊匹配長度;(v)接下來,再對沿垂直方向構(gòu)成的隊列數(shù)據(jù)包進行如前述步驟(ii)至步驟(iv)的壓縮處理;(vi)最后再比較兩個方向上的壓縮數(shù)據(jù)結(jié)果,取其最小值,而動態(tài)產(chǎn)生最佳的壓縮結(jié)果,并將實際中能產(chǎn)生最佳壓縮結(jié)果所對應(yīng)的圖形數(shù)據(jù)的陣列的隊列數(shù)據(jù)包排列方向記錄下來,以作為解壓還用之用。
14.如權(quán)利要求13所述的雙向圖像壓縮方法,其特征在于,前述循環(huán)冗余校驗碼值為16位。
全文摘要
本發(fā)明涉及一種雙向圖像壓縮方法,包括:(i)以字節(jié)為圖元單位,分別沿著水平及垂直方向構(gòu)成隊列數(shù)據(jù)包;(ii)利用一壓縮算法,分別壓縮前述沿著水平及垂直方向所構(gòu)成的隊列數(shù)據(jù)包;(iii)比較沿著水平及垂直方向的陣列壓縮率,若水平方向大于垂直方向,則(iv)選定水平方向壓縮結(jié)果為本壓縮算法的壓縮結(jié)果;(v)若水平方向小于垂直方向,則(vi)選定垂直方向壓縮結(jié)果為本壓縮算法的壓縮結(jié)果,同時記錄壓縮數(shù)據(jù)大小,并記錄壓縮方向,然后結(jié)束。
文檔編號H04N7/26GK1259829SQ98122950
公開日2000年7月12日 申請日期1998年11月27日 優(yōu)先權(quán)日1998年11月27日
發(fā)明者陳淮琰, 鄭建鋒 申請人:英業(yè)達集團(西安)電子技術(shù)有限公司