基于binDCT算法的JPEG壓縮系統(tǒng)的制作方法
【專利摘要】本發(fā)明公開了一種基于binDCT的JPEG壓縮系統(tǒng)重點改進在壓縮算法方面,采用的算法為新興binDCT算法。在這種算法中,所有系數(shù)為二進制和所有的乘法被代替為移位和加法操作,因此可以更簡單和快速的通過硬件和軟件實現(xiàn)。通過二進制DCT算法降低了DCT轉(zhuǎn)換的復(fù)雜性,同時相對傳統(tǒng)算法,本發(fā)明以犧牲一定的圖像質(zhì)量作為代價,提高圖像的壓縮率,因而可以廣泛應(yīng)用與類似無線頭監(jiān)控等各種無線多媒體傳感網(wǎng)系統(tǒng)中。
【專利說明】基于b i nDCT算法的JPEG壓縮系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種圖像壓縮系統(tǒng),具體涉及一種面向無線傳感網(wǎng)的低開銷、高壓縮率且基于binDCT算法的JPEG壓縮系統(tǒng)。
【背景技術(shù)】
[0002]從20世紀(jì)60年代起,隨著電子技術(shù)和計算機技術(shù)的不斷提高和普及,應(yīng)用數(shù)字方法進行圖像處理(數(shù)字圖像處理)進入了高速發(fā)展時期。圖像的數(shù)字化處理表示使得圖像信號可以高質(zhì)量地傳輸,并便于圖像的檢索、分析、處理和存儲。但是,數(shù)字圖像的表示需要大量的數(shù)據(jù)空間,因而必須進行數(shù)據(jù)壓縮編碼。
[0003]經(jīng)過30多年的基礎(chǔ)研究,圖像壓縮編碼研究從20世紀(jì)80年代末90年代初進入新的時期。一方面進入到實用化的研究,另一方面繼續(xù)深入理論研究。
[0004]實用化方面的研究集中在國際標(biāo)準(zhǔn)化組織和國際電信聯(lián)盟ITU聯(lián)合制訂的幾個標(biāo)準(zhǔn)上,有力地推動了實用開發(fā)工作。于1988年形成草案,1990年通過的ITU-TH.261建議,是圖像壓縮編碼技術(shù)走向?qū)嵱没闹匾徊剑菆D像壓縮編碼40年研究成果的結(jié)品。進入90年代后相繼提出了一系列圖像國際壓縮編碼的標(biāo)準(zhǔn)。這些建議普遍采用的混合編碼技術(shù)是當(dāng)今最實用的高效編碼方法,得到了廣泛的推廣與應(yīng)用。圖像壓縮技術(shù)的發(fā)展趨勢是:算法更復(fù)雜,壓縮率更高,JPEG的壓縮率在1:20左右,JPEG2000的壓縮率將為1:200或更高,MPEG壓縮標(biāo)準(zhǔn)也已經(jīng)過幾代發(fā)展,從MPEG-1到MPEG-2,到現(xiàn)在的MPEG-4,壓縮算法越來越復(fù)雜,運算量越來越大,壓縮率也越來越高。
[0005]無線多媒體傳感器網(wǎng)絡(luò)(WMSN)是在傳統(tǒng)無線傳感器網(wǎng)絡(luò)(WSN)的基礎(chǔ)上發(fā)展起來的具有音頻、視頻、圖像等多媒體信息感知功能的新型傳感器網(wǎng)絡(luò)。在無線多媒體傳感網(wǎng)中,擁有一個高效的處理視頻流的JPEG IP核十分重要。
[0006]在無線多跳的環(huán)境中,未壓縮的原始視頻流需要極大的帶寬。因此,很明顯對于多媒體傳感器網(wǎng)絡(luò)需要有效的無損壓縮技術(shù)。傳統(tǒng)的應(yīng)用于無線和有線的視頻編碼技術(shù)是基于通過源編碼器采用統(tǒng)計學(xué)方法減少比特產(chǎn)生速率。為達到這個目的,編碼器通過幀內(nèi)壓縮技術(shù)減少一幀內(nèi)的冗余信息,同時也有采用幀間壓縮技術(shù)(也稱為預(yù)測編碼或運動估計)減少連續(xù)振之間的冗余信息。
[0007]國際上對JPEG編碼器的研究主要是集中在這幾個方面:壓縮算法改進,可重構(gòu)芯片以及IP核重架構(gòu)。動態(tài)可重構(gòu)允許在運行時有選擇的替代某些邏輯塊,用以提高FPGA的面積利用率。關(guān)于可重構(gòu)芯片的方法。一般是基于混合硬件/軟件架構(gòu)。將其中計算密集型的應(yīng)用程序組件映射到特定的硬件內(nèi)核中。這些內(nèi)核同臺的分配FPGA資源。而剩余的由軟件實現(xiàn)。通過這種方法以犧牲少量性能的方式來減少更多的面積。再有就是通過修改IP核的架構(gòu)來實現(xiàn)低開銷的編碼器,例如Qihui Zhang提到一種新的架構(gòu)方式,將二維DCT計算模塊利用分別的部分允許兩個一維連續(xù)變換進行行列分解,其中間結(jié)果與一個平行內(nèi)存換位,可達到較高的運行頻率,并通過額外的SIP0,PISO以及寄存器bank來實現(xiàn)。
[0008]但是目前的JPEG的研究熱點為優(yōu)化處理器速度和得到高質(zhì)量的圖像。此種設(shè)計和無線傳感網(wǎng)的低開銷和圖像高壓縮率要求相悖,并且這些方法具有較高的復(fù)雜度,實現(xiàn)較為復(fù)雜。
【發(fā)明內(nèi)容】
[0009]本發(fā)明目的在于針對現(xiàn)有技術(shù)所存在的不足提供一種基于binDCT算法的JPEG壓縮系統(tǒng),其解決了目前圖像壓縮系統(tǒng)的低壓縮率、高開銷和高復(fù)雜度等問題。
[0010]為了解決現(xiàn)有技術(shù)中的這些問題,本發(fā)明提供的技術(shù)方案是:
[0011]一種基于binDCT算法的JPEG壓縮系統(tǒng),所述JPEG壓縮系統(tǒng)包括binDCT模塊、Zigzag模塊、量化模塊、編碼模塊和控制器模塊,在系統(tǒng)工作過程中,
[0012]binDCT模塊根據(jù)binDCT算法,將輸入的8X8數(shù)據(jù)塊進行binDCT變換,并將輸出數(shù)據(jù)送入Zigzag模塊;
[0013]Zigzag單元將輸入的變換后的矩陣按照Zigzag的順序重新排列,然后將輸出數(shù)據(jù)送至量化模塊;
[0014]量化模塊將輸出數(shù)據(jù)乘以量化矩陣的倒數(shù)矩陣,完成量化后將數(shù)據(jù)輸入至編碼模塊;
[0015]編碼模塊將量化模塊輸出數(shù)據(jù)拆分為直流分量和交流分量,對直流分量和交流分量采用不同的編碼方式,分別完成差分編碼和變長編碼以及墑編碼;控制模塊負責(zé)產(chǎn)生所有模塊的邏輯控制信號和時序控制信號,最后將編碼的數(shù)據(jù)進行輸出。
[0016]對于上述技術(shù)方案,發(fā)明人還有進一步的優(yōu)化實施方案。
[0017]作為優(yōu)化,binDCT模塊在對圖像數(shù)據(jù)進行離散余弦變換的時候采用binDCT矩陣,將DCT變換的所有乘法操作變換為移位和加法操作,binDCT模塊將數(shù)據(jù)每八個作為一組,先進行行變換后,再進行列變化,完成一維變換后,再進行二維變換,最終完成binDCT變換。
[0018]作為優(yōu)化,Zigzag模塊采用了兩個ram,采用兵兵操作,兵兵操作的處理主要是把輸入數(shù)據(jù)流通過輸入數(shù)據(jù)選擇單元等時地分配到數(shù)據(jù)緩沖區(qū)zigramO和zigraml中。
[0019]更進一步,Zigzag模塊首先將輸入的數(shù)據(jù)流緩存到zigramO,然后通過輸入數(shù)據(jù)選擇,進行切換,并將輸入的數(shù)據(jù)流緩存到zigraml,與此同時,還要將zigramO的數(shù)據(jù)通過輸出數(shù)據(jù)選擇單元的選擇,送到量化模塊進行處理;之后再在第三個周期通過輸入數(shù)據(jù)選擇單元的再次切換,將輸入的數(shù)據(jù)流緩存到zigramO,與此同時,再一次將zigraml的數(shù)據(jù)通過輸出數(shù)據(jù)選擇單元的切換,送到量化模塊進行處理;如此循環(huán),周而復(fù)始。
[0020]作為優(yōu)化,量化模塊的量化器不斷產(chǎn)生地址信號,從量化系數(shù)表中讀取量化系數(shù),量化系數(shù)表包括存放亮度信號Y的量化系數(shù)表和色度信號UV的兩個量化系數(shù)表,在量化系數(shù)表中存放的是相應(yīng)量化步長的倒數(shù),量化模塊直接將binDCT系數(shù)與讀取的量化系數(shù)相乘。
[0021]作為優(yōu)化,編碼模塊將數(shù)據(jù)拆分為DC分量和AC分量;其中DC值采用差分編碼的方式,經(jīng)過量化后的AC數(shù)據(jù)會出現(xiàn)大量連續(xù)的零,對AC數(shù)據(jù)用游程編碼(RLE),大量的零就可以用比較少的數(shù)據(jù)來表示,減少使用的比特數(shù),然后對AC數(shù)據(jù)進行VLC編碼,根據(jù)VLI碼的大小進行哈夫曼編碼,而AC分量進行VLC編碼,根據(jù)AC系數(shù)的VLC碼的大小和游程長度從哈夫曼碼表中查得相應(yīng)的哈夫曼碼[0022]作為優(yōu)化控制器模塊為通過用戶輸入8個寄存器控制整個編碼,通過用戶設(shè)定輸入圖像的MCU格式和數(shù)量、每個分量對應(yīng)的量化表和哈夫曼表以及產(chǎn)生編碼開始和停止信號等,對整個編碼過程進行時序和邏輯控制。
[0023]相對于現(xiàn)有技術(shù)中的方案,本發(fā)明的優(yōu)點是:
[0024]本發(fā)明所描述的基于binDCT的JPEG壓縮系統(tǒng)重點改進在壓縮算法方面,采用的算法為新興binDCT算法。在這種算法中,所有系數(shù)為二進制和所有的乘法被代替為移位和加法操作,因此可以更簡單和快速的通過硬件和軟件實現(xiàn)。通過二進制DCT算法降低了 DCT轉(zhuǎn)換的復(fù)雜性,同時相對傳統(tǒng)`算法,本發(fā)明以犧牲一定的圖像質(zhì)量作為代價,提高圖像的壓縮率,因而可以廣泛應(yīng)用與類似無線頭監(jiān)控等各種無線多媒體傳感網(wǎng)系統(tǒng)中。
【專利附圖】
【附圖說明】
[0025]下面結(jié)合附圖及實施例對本發(fā)明作進一步描述:
圖1為本發(fā)明實施例的JPEG壓縮系統(tǒng)的總體結(jié)構(gòu)示意圖;
圖2為本發(fā)明實施例中的binDCT矩陣;
圖3為本發(fā)明實施例中的binDCT模塊框圖;
圖4是本發(fā)明實施例中的像素矩陣輸入順序;
圖5是本發(fā)明實施例中的Zigzag模塊框圖;
圖6是本發(fā)明實施例中的量化模塊框圖;
圖7是本發(fā)明實施例中的編碼模塊框圖;
圖8是本發(fā)明實施例中的huff模塊狀態(tài)機框圖;
圖9是本發(fā)明實施例中的pack模塊狀態(tài)機框圖;
圖10是本發(fā)明實施例中的控制器模塊框圖。
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]【具體實施方式】
[0037]以下結(jié)合具體實施例對上述方案做進一步說明。應(yīng)理解,這些實施例是用于說明本發(fā)明而不限于限制本發(fā)明的范圍。實施例中采用的實施條件可以根據(jù)具體廠家的條件做進一步調(diào)整,未注明的實施條件通常為常規(guī)實驗中的條件。
[0038]實施例:[0039]本實施例描述了一種基于binDCT算法的JPEG壓縮系統(tǒng),其總體結(jié)構(gòu)如圖1所示,所述JPEG壓縮系統(tǒng)包括binDCT模塊、Zigzag模塊、量化模塊、編碼模塊和控制器模塊,在系統(tǒng)工作過程中,
[0040]binDCT模塊根據(jù)binDCT算法,將輸入的8X8數(shù)據(jù)塊進行binDCT變換,并將輸出數(shù)據(jù)送入Zigzag模塊;
[0041]Zigzag單元將輸入的變換后的矩陣按照Zigzag的順序重新排列,然后將輸出數(shù)據(jù)送至量化模塊;
[0042]量化模塊將輸出數(shù)據(jù)乘以量化矩陣的倒數(shù)矩陣,完成量化后將數(shù)據(jù)輸入至編碼模塊;
[0043]編碼模塊將量化模塊輸出數(shù)據(jù)拆分為直流分量和交流分量,對直流分量和交流分量采用不同的編碼方式,分別完成差分編碼和變長編碼以及墑編碼;控制模塊負責(zé)產(chǎn)生所有模塊的邏輯控制信號和時序控制信號,最后將編碼的數(shù)據(jù)進行輸出。
[0044]如上所述,整個JPEG壓縮系統(tǒng)分為兩個部分,一個是壓縮編碼部分,一個是控制部分。壓縮編碼部分的輸入數(shù)據(jù)為待編碼原始數(shù)據(jù),經(jīng)過binDCT模塊、Zigzag模塊、量化模塊、編碼模塊,最后得到最終數(shù)據(jù);控制部分的輸入為地址和控制輸入,主要是便于配置JPEG IP核的寄存器,對圖像編碼過程進行控制,控制部分最后得輸出數(shù)據(jù)。
[0045]binDCT模塊中的核心變量,binDCT矩陣如圖2所示。通過對矩陣觀察可以發(fā)現(xiàn),binDCT矩陣具有對稱性的特征。將其中一樣的值采用系數(shù)CO-Cll進行替換,可以將矩陣轉(zhuǎn)換。根據(jù)binDCT的算法,整個binDCT變換只需要通過加法和移位可以實現(xiàn),將整個binDCT模塊的結(jié)構(gòu)如圖3所示。
[0046]binDCT模塊包括7個模塊。其中dctctrl模塊為控制模塊,負責(zé)產(chǎn)生控制信號,mulh、selecth、sumh三個模塊對數(shù)據(jù)進行一維水平binDCT變換,mulv、selectv、sumv三個模塊對數(shù)據(jù)進行一維垂直binDCT變換。zigramO和zigraml為zigzag模塊的外掛ram。dctram為dct模塊的外掛ram。mulv和mulh模塊負責(zé)對輸入的像素和binDCT系數(shù)矩陣的系數(shù)進行相乘。由于采用的是補碼運算,因此通過簡單的移位和加法,將所有的系數(shù)同輸入的像素值進行相乘。首先對輸入像素減去128。使得輸入像素的范圍為-128-128之間,為偶函數(shù)。輸入的為正數(shù),減去128之后,數(shù)據(jù)可能為負數(shù),因此在減去128的同時需要將負數(shù)轉(zhuǎn)換為補碼。同時輸入的像素輸入為八位,為了提高運算精度,需要對數(shù)據(jù)進行位擴展,最后二維變換完成后,再截去擴展位。
[0047]輸入性像素是通過一個一個的8X8的矩陣進行輸入的。輸入的順序是按行輸入的,如圖4所示,輸入順序為XOO,XOl……X07……X70……X77。
[0048]selcth和selcth的功能是將mulh和mulv相乘得出的結(jié)果按照矩陣的順序進行排列。sumh和sumv模塊負責(zé)每列相乘的結(jié)果加上符號,再進行求和運算。dctctrl模塊負責(zé)產(chǎn)生selcth、selctv、sumh和sumv模塊的控制信號,同時產(chǎn)生dctram的地址信號,完成行變換結(jié)果的轉(zhuǎn)置。dctctrl模塊的主要輸入信號為時鐘信號clk,同步的起始信號strt。按行輸入的,每一個時鐘輸入一個像素。dctctrl同時完成了對行變換的轉(zhuǎn)置。分別采用4個三位計數(shù)器來實現(xiàn)地址轉(zhuǎn)換。其中ahh和ahl組成了 memh信號,avh和avl組成了 memv信號,這兩個信號分別是dctram的地址輸入和輸出信號。由于memh信號和memv信號計數(shù)方法不同,因此寫入地址和讀出地址的不同,完成了矩陣的轉(zhuǎn)置。[0049]Zigzag模塊的輸入為binDCT模塊的輸出數(shù)據(jù)。本發(fā)明采用了兩個ram,采用兵兵操作。乒乓操作的處理主要是把輸入數(shù)據(jù)流通過輸入數(shù)據(jù)選擇單元等時地分配到數(shù)據(jù)緩沖區(qū)zigramO和zigraml中。即首先將輸入的數(shù)據(jù)流緩存到zigramO,然后通過輸入數(shù)據(jù)選擇,進行切換,并將輸入的數(shù)據(jù)流緩存到zigraml,與此同時,還要將zigramO的數(shù)據(jù)通過輸出數(shù)據(jù)選擇單元的選擇,送到量化模塊進行處理。之后,再在第三個周期通過輸入數(shù)據(jù)選擇單元的再次切換,將輸入的數(shù)據(jù)流緩存到zigramO,與此同時,再一次將zigraml的數(shù)據(jù)通過輸出數(shù)據(jù)選擇單元的切換,送到量化模塊進行處理。如此循環(huán),周而復(fù)始。Zigzag模塊分為三個部分,兩個zigram和一個控制信號產(chǎn)生模塊zigzag。它的框圖可見圖5。
[0050]由于binDCT模塊的輸出數(shù)據(jù)并不是Y,而是Y的轉(zhuǎn)置,因此第一步是是利用Zigzag模塊對Y進行轉(zhuǎn)置。實現(xiàn)轉(zhuǎn)置非常簡單,利用一個計數(shù)器X對輸入數(shù)據(jù)進行計數(shù),由于數(shù)據(jù)輸入是按行輸入的。只需要將X的高三位和第三位進行顛倒,再進行存儲數(shù)據(jù),即可以得到Y(jié)的轉(zhuǎn)置。第二步用Zigzag模塊按照Zigzag的順序產(chǎn)生讀信號。通過對圖像進行zigzag排序后,將高頻分量和低頻分量分離。將矩陣除以JPEG標(biāo)準(zhǔn)中定義的量化矩陣即可得到量化結(jié)果。
[0051 ] 但是在硬件電路中,乘法比除法更容易實現(xiàn),且耗費的硬件電路更少。因此用乘法代替除法,來代替量化的操作,求得量化矩陣的倒數(shù)矩陣。
[0052]由于求倒后,系數(shù)較少,因此將存儲的系數(shù)矩陣的系數(shù)放大2n倍后存儲。通過這種方式,將除法操作轉(zhuǎn)換為乘法操作。由于圖像的不同分量對應(yīng)不同的量化矩陣,故在JPEGIP核中固化兩個量化表,針對不同分量采用不同量化表進行量化。由于系數(shù)進行了放大,因此量化表的值存了兩個數(shù)值,一個為放大后的數(shù),一個為放大2n倍的n。量化模塊的框圖可見圖6。圖中fl和f2代表函數(shù)。圖6中總共有兩個函數(shù),fI主要功能是根據(jù)控制信號,提前相應(yīng)的量化表值,將量化表值進行分離,分離為量化表放大值和移位值sh。將zigzag模塊的輸出和量化表值輸入到mul模塊中,將兩個數(shù)進行相乘,完成量化操作。將得到的值muli輸入進f2,根據(jù)sh的值進行移位操作,右移操作,得到原始值ym。再將ym輸入狀態(tài)機I,將這個數(shù)進行取整操作后送到輸出,最后得到量化后的值。
[0053]編碼模塊中,對于數(shù)據(jù)的DC分量和AC分量采用不同的編碼方式。首先對DC分量進行差分編碼,然后對結(jié)果進行變長編碼,同時對AC分量進行變長編碼,最后進行哈夫曼編碼。最終完成所有數(shù)據(jù)的編碼,將數(shù)據(jù)打包輸出為enc。其中哈夫曼編碼,采用的為靜態(tài)哈夫曼表,即將所需要的表值固化在IP核中。我們將所有的編碼相關(guān)的模塊放在一個總模塊中。由于JPEG壓縮的處理是按照一個一個的8X8塊進行處理的,再輸入最后一個處理塊的時候,需要一個信號提示為最后一個塊,這個信號為last信號。并且不同分量對應(yīng)不同的哈夫曼表,因此需要一個信號標(biāo)志當(dāng)前顏色分量。編碼模塊的框圖可見圖7。
[0054]經(jīng)過量化后的分量輸入給變成模塊,Ien模塊對其中的DC分量進行差分編碼。Ien模塊完成對DC數(shù)據(jù)的差分編碼和AC數(shù)據(jù)的游程編碼。huff模塊完成對DC系數(shù)的差分值進行VLI編碼,對AC系數(shù)的值進行VLC編碼,并且根據(jù)DC系數(shù)VLI碼的大小,從Huffman碼表中查得相應(yīng)的Huffman碼,根據(jù)AC系數(shù)的VLC碼的大小和游程長度從Huffman碼表中查得相應(yīng)的Huffman碼。由于從huff模塊輸出值長度不定,因此需要pack模塊進行打包。最后為了讓編碼后的數(shù)據(jù)符合JPEG標(biāo)準(zhǔn),需要對數(shù)據(jù)添加標(biāo)志位,這個功能由aflag模塊完成。store模塊主要負責(zé)緩存編碼過程中產(chǎn)生的數(shù)據(jù),將數(shù)據(jù)送給af lag模塊進行處理。[0055]Ien模塊主要是完成DC系數(shù)的差分編碼,并計算數(shù)據(jù)中的ZRL,以及對AC進行變長編碼。Ien模塊中,設(shè)計了一個異步FIFO,用以緩存編碼數(shù)據(jù)。
[0056]huff模塊的主要功能是計算哈夫曼表值的地址。同時產(chǎn)生ZRL和E0B。每當(dāng)產(chǎn)生連續(xù)16個0系數(shù)則產(chǎn)出一個ZRL。為了得到更高的壓縮率,所有的ZRL代碼被丟棄用一個單一的EOB取代。對于每個數(shù)據(jù)進行單時鐘編碼,并將ZRL碼推入一個很淺的FIFO中,如果模塊以0值終結(jié),則刷新并被EOB碼代替。從哈夫曼表中提取的哈夫曼值傳遞給pack模塊進行打包。
[0057]在進行哈夫曼編碼的時候,需要根據(jù)特殊情況進行特別處理,例如在編碼最后或者需要插入重啟標(biāo)志位的時候。因此在模塊內(nèi)部設(shè)計一個狀態(tài)機進行模擬。狀態(tài)機的框圖可見圖8。
[0058]總共設(shè)計了6 種狀態(tài),分別是 waits、normal、padr、padf、restrt 和 fish。其中waits狀態(tài)為等待狀態(tài),在模塊同步重啟或者異步重啟或者清除信號有效的時候,一直為這個狀態(tài)。當(dāng)Ien模塊的FIFO不為空的時候,意味著stuff模塊有數(shù)據(jù)進行處理的時候,進A normal狀態(tài)。當(dāng)初始寄存器設(shè)計為插入重啟位的時候,即restart信號有效的時候,進A padr狀態(tài),準(zhǔn)備插入重啟標(biāo)志位。padr狀態(tài)后,插入重啟標(biāo)志位,完成后進入normal狀態(tài)。在normal狀態(tài)中,若已經(jīng)處理到最后一個處理塊的時候,若最后編碼得到的數(shù)據(jù)不到32位,需要進行位填充,滿足字節(jié)對齊的條件,因此若final_sig為I的時候,進入padf狀態(tài)。padf?狀態(tài)完成后,需要補充EOB標(biāo)志位,進入fish狀態(tài)。
[0059]pack模塊主要是完成將編碼后的哈夫曼碼值(hcode)和Ien模塊計算得到的DC和AC變長編碼后的值(fvalue)進行打包,打包成32位的數(shù)據(jù)進行輸出。pack模塊中的狀態(tài)機主要目的是區(qū)分重啟標(biāo)志位插入狀況。狀態(tài)機框圖可見圖9。
[0060]從圖9可以看到,總共有idle、restrt、flushc和flushl四個狀態(tài)。此狀態(tài)機是為了插入restart標(biāo)志位和圖像結(jié)尾的位填充進行服務(wù)的。若異步或同步重置或清除信號有效的時候,為idle狀態(tài)。在idle狀態(tài)的時候,若flush=l,即需要進行末尾填充的時候,進入flushl狀態(tài)。根據(jù)相應(yīng)的剩余數(shù)據(jù)的大小,補充相應(yīng)大小的Oxf?,直到補足32位。flushl狀態(tài)結(jié)束后,進入flushc狀態(tài),進行連續(xù)的f填充。在idle狀態(tài)時,若restart=l則進入restrt狀態(tài)。插入額外的32位數(shù)據(jù)。插入完畢后,若flush=l且dout_vldi=l,則進入 flushc 狀態(tài);若 flush=l 且 dout_vldi=0,則進入 flushl 狀態(tài);若 flush=0 且 dout_vldi=l,則進入idle狀態(tài),表示reatart標(biāo)志位插入完畢,進入正常編碼。
[0061]aflag模塊的功能主要是從存儲模塊讀取編碼得到的32位數(shù)據(jù)和它的標(biāo)志位,同時輸出編碼數(shù)據(jù)。通過的它的標(biāo)志位狀態(tài),aflag模塊決定是否將為OxfT的數(shù)據(jù)擴展為OxffOO。只有當(dāng)Oxff這個比特不為標(biāo)志位的時候進行。
[0062]store模塊包含4bit深度,36bit寬度的FIFO。每個FIFO中包含4字節(jié)的數(shù)據(jù)和4bit的標(biāo)志位字節(jié)。由于最終產(chǎn)生的enc數(shù)據(jù)為8位數(shù)據(jù),故用這個FIFO來緩存編碼產(chǎn)生的32位數(shù)據(jù)??梢酝瑫r讀寫數(shù)據(jù),不產(chǎn)生擁堵。
[0063]控制器模塊從用戶輸入的寄存器配置中讀取數(shù)據(jù),將之轉(zhuǎn)換為相應(yīng)的時序控制信號和邏輯控制信號??刂颇K的框圖可見圖10。圖10中,輸入信號為din為用戶輸入的寄存器配置數(shù)據(jù),eover信號來自編碼模塊。當(dāng)編碼完成的時候產(chǎn)生eover信號。首先從輸入寄存器中提取相應(yīng)的邏輯控制信號輸出。得到相應(yīng)寄存器信號rl-r7和控制寄存器組。同時產(chǎn)生當(dāng)前的顏色分量信號coll和它的延遲信號C012和模塊控制信號nextcomp,代表輸入新的顏色組件。然后通過顏色分量選擇相應(yīng)的哈夫曼表,得到哈夫曼表控制信號COlh0最后根據(jù)colh信號和寄存器配置信號選擇相應(yīng)的當(dāng)前哈夫曼表hti作為中心模塊的輸入。其次,產(chǎn)生當(dāng)前顏色分量數(shù)量的控制信號ncol。將此信號通過查詢寄存器得到顏色分量數(shù)量colsel。再次,將mcu的計數(shù)器mcucnt和me轉(zhuǎn)變?yōu)閮?nèi)核啟動信號go和內(nèi)核停止信號stp。圖中狀態(tài)負責(zé)生成控制模塊的狀態(tài)。此狀態(tài)機總共有7個狀態(tài)。分別為空閑狀態(tài)ectrl_ewait、開始編碼狀態(tài)ectrl_estart、第一個DCT編碼狀態(tài)ectrl_edctwl、第二個DCT編碼狀態(tài)ectrl_edctw2、第二個DCT編碼狀態(tài)延遲狀態(tài)ectrl_nx3w、正常編碼狀態(tài)ectrl_enc和最后一個MCU的編碼狀態(tài)ectrl_ende。
[0064]若go信號有效,即內(nèi)核啟動信號有效則進入開始編碼狀態(tài)。若en信號有效,en信號來自于編碼模塊,當(dāng)變長編碼的FIFO非空且未滿的時候有效。進入第一個DCT編碼狀態(tài)。當(dāng)en=l且nxO=l則進入第二個DCT編碼狀態(tài)。當(dāng)再次en=l且nxO=l的時候進入ectrl_enx3w狀態(tài)。當(dāng)en=l且nx3=l的時候,進入編碼狀態(tài)。當(dāng)finali信號有效的時候,進入最后一個MCU編碼狀態(tài)。
[0065]上述實例只為說明本發(fā)明的技術(shù)構(gòu)思及特點,其目的在于讓熟悉此項技術(shù)的人是能夠了解本發(fā)明的內(nèi)容并據(jù)以實施,并不能以此限制本發(fā)明的保護范圍。凡根據(jù)本發(fā)明精神實質(zhì)所做的等效變換或修飾,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。
【權(quán)利要求】
1.一種基于binDCT算法的JPEG壓縮系統(tǒng),其特征在于,所述JPEG壓縮系統(tǒng)包括binDCT模塊、Zigzag模塊、量化模塊、編碼模塊和控制器模塊,在系統(tǒng)工作過程中, binDCT模塊根據(jù)binDCT算法,將輸入的8X8數(shù)據(jù)塊進行binDCT變換,并將輸出數(shù)據(jù)送入Zigzag模塊; Zigzag單元將輸入的變換后的矩陣按照Zigzag的順序重新排列,然后將輸出數(shù)據(jù)送至量化模塊; 量化模塊將輸出數(shù)據(jù)乘以量化矩陣的倒數(shù)矩陣,完成量化后將數(shù)據(jù)輸入至編碼模塊; 編碼模塊將量化模塊輸出數(shù)據(jù)拆分為直流分量和交流分量,對直流分量和交流分量采用不同的編碼方式,分別完成差分編碼和變長編碼以及墑編碼;控制模塊負責(zé)產(chǎn)生所有模塊的邏輯控制信號和時序控制信號,最后將編碼的數(shù)據(jù)進行輸出。
2.根據(jù)權(quán)利要求1所述的基于binDCT算法的JPEG壓縮系統(tǒng),其特征在于,binDCT模塊在對圖像數(shù)據(jù)進行離散余弦變換的時候采用binDCT矩陣,將DCT變換的所有乘法操作變換為移位和加法操作,binDCT模塊將數(shù)據(jù)每八個作為一組,先進行行變換后,再進行列變化,完成一維變換后,再進行二維變換,最終完成binDCT變換。
3.根據(jù)權(quán)利要求1所述的基于binDCT算法的JPEG壓縮系統(tǒng),其特征在于,Zigzag模塊采用了兩個ram,采用乒乓操作,乒乓操作的處理主要是把輸入數(shù)據(jù)流通過輸入數(shù)據(jù)選擇單元等時地分配到數(shù)據(jù)緩沖區(qū)zigramO和zigraml中。
4.根據(jù)權(quán)利要求3所述的基于binDCT算法的JPEG壓縮系統(tǒng),其特征在于,Zigzag模塊首先將輸入的數(shù)據(jù)流緩存到zigramO,然后通過輸入數(shù)據(jù)選擇,進行切換,并將輸入的數(shù)據(jù)流緩存到zigraml,與此同時,還要將zigramO的數(shù)據(jù)通過輸出數(shù)據(jù)選擇單元的選擇,送到量化模塊進行處理;之后再在第三個周期通過輸入數(shù)據(jù)選擇單元的再次切換,將輸入的數(shù)據(jù)流緩存到zigramO,與此同時,再一次將zigraml的數(shù)據(jù)通過輸出數(shù)據(jù)選擇單元的切換,送到量化模塊進行處理;如此循環(huán),周而復(fù)始。
5.根據(jù)權(quán)利要求1所述的基于binDCT算法的JPEG壓縮系統(tǒng),其特征在于,量化模塊的量化器不斷產(chǎn)生地址信號,從量化系數(shù)表中讀取量化系數(shù),量化系數(shù)表包括存放亮度信號Y的量化系數(shù)表和色度信號UV的兩個量化系數(shù)表,在量化系數(shù)表中存放的是相應(yīng)量化步長的倒數(shù),量化模塊直接將binDCT系數(shù)與讀取的量化系數(shù)相乘。
6.根據(jù)權(quán)利要求1所述的基于binDCT算法的JPEG壓縮系統(tǒng),其特征在于,編碼模塊將數(shù)據(jù)拆分為DC分量和AC分量;其中DC值采用差分編碼的方式,經(jīng)過量化后的AC數(shù)據(jù)會出現(xiàn)大量連續(xù)的零,對AC數(shù)據(jù)用游程編碼(RLE),大量的零就可以用比較少的數(shù)據(jù)來表示,減少使用的比特數(shù),然后對AC數(shù)據(jù)進行VLC編碼,根據(jù)VLI碼的大小進行哈夫曼編碼,而AC分量進行VLC編碼,根據(jù)AC系數(shù)的VLC碼的大小和游程長度從哈夫曼碼表中查得相應(yīng)的哈夫曼碼。
7.根據(jù)權(quán)利要求1所述的基于binDCT算法的JPEG壓縮系統(tǒng),其特征在于,控制器模塊為通過用戶輸入8個寄存器控制整個編碼,通過用戶設(shè)定輸入圖像的MCU格式和數(shù)量、每個分量對應(yīng)的量化表和哈夫曼表以及產(chǎn)生編碼開始和停止信號等,對整個編碼過程進行時序和邏輯控制。
【文檔編號】H04N19/124GK103491375SQ201310205175
【公開日】2014年1月1日 申請日期:2013年5月29日 優(yōu)先權(quán)日:2013年5月29日
【發(fā)明者】劉昊, 趙琳 申請人:東南大學(xué)