無分裂結(jié)構(gòu)的二維小波變換圖片處理芯片設(shè)計(jì)與驗(yàn)證
掃描二維碼
隨時(shí)隨地手機(jī)看文章
摘要:5/3小波變換硬件實(shí)現(xiàn)常用結(jié)構(gòu)是先完成分裂,再依照分裂后的數(shù)據(jù)完成預(yù)測(cè)部分和更新部分的變換,這需要復(fù)雜的控制結(jié)構(gòu)。在此采用JPEG2000推薦的5/3小波變換公式,在基于行的列變換基礎(chǔ)上提出了一種全新的無數(shù)據(jù)分裂的結(jié)構(gòu)。該結(jié)構(gòu)放棄地址尋址的數(shù)據(jù)讀取模式,采用讀取一維數(shù)據(jù)流節(jié)點(diǎn)的輸入方式,從時(shí)應(yīng)的寄存器中讀取在多個(gè)寄存器中依次流動(dòng)的數(shù)據(jù),省略了數(shù)據(jù)輸入的地址控制模塊。由于減少了數(shù)據(jù)分裂步驟,并且無需控制預(yù)測(cè)及更新步驟的交替進(jìn)行,因此簡(jiǎn)化了小波變換控制系統(tǒng)的結(jié)構(gòu)。在此運(yùn)用軟硬件協(xié)同的驗(yàn)證方法,利用計(jì)算機(jī)軟件和FPGA結(jié)合,完成圖片從計(jì)算機(jī)端輸入,在FPGA中完成小波變換,并輸出到計(jì)算機(jī)顯示器上顯示的步驟。
關(guān)鍵詞:小波變換;軟硬件協(xié)同驗(yàn)證;FPGA;JPEG 2000
0 引言
小波分析是當(dāng)前應(yīng)用數(shù)學(xué)和工程學(xué)科中一個(gè)迅速發(fā)展的新領(lǐng)域,而近年來基于小波變換的圖像壓縮技術(shù)以硬件方式推向市場(chǎng),圖片壓縮已成為小波變換極其重要的應(yīng)用領(lǐng)域。而在原有的小波變換的理論基礎(chǔ)上發(fā)展的基于小波變換的更新算法,不采用Fourier變換作為主要的分析工具,這與經(jīng)典小波變換相比具有小波構(gòu)造簡(jiǎn)單、反變換容易實(shí)現(xiàn)、運(yùn)算速度快和節(jié)省存儲(chǔ)空間等優(yōu)點(diǎn)。但其在硬件應(yīng)用開發(fā)上,對(duì)中間數(shù)據(jù)量要求較大,占用較多寄存器,因而通過硬件結(jié)構(gòu)的探索來減小寄存器的開銷,成為小波變換圖片處理的一個(gè)重要分支。
本文提出了無分裂步驟的5/3小波變換結(jié)構(gòu),完成了該結(jié)構(gòu)的FPGA硬件實(shí)現(xiàn),并結(jié)合計(jì)算機(jī)端Matlab軟件,正確完成圖片變換驗(yàn)證。
1 硬件結(jié)構(gòu)
1.1 算法實(shí)現(xiàn)結(jié)構(gòu)
本文采用JPEG2000推薦的5/3小波變換算法,算法公式如下:
常見的小波變化實(shí)現(xiàn)結(jié)構(gòu)如圖1所示,先完成分裂,再進(jìn)行預(yù)測(cè),最后完成更新步驟。分裂步驟是指通過對(duì)數(shù)據(jù)地址n的奇偶進(jìn)行判斷,將數(shù)據(jù)分裂為奇地址部分和偶地址部分。輸入奇地址部分?jǐn)?shù)據(jù),進(jìn)行預(yù)測(cè)部分運(yùn)算,并輸出細(xì)節(jié)數(shù)據(jù);輸入偶地址部分?jǐn)?shù)據(jù),完成更新部分運(yùn)算,輸出平滑數(shù)據(jù)。因此需要根據(jù)輸入數(shù)據(jù)的地址,對(duì)數(shù)據(jù)進(jìn)行分裂,或控制預(yù)測(cè)部分和更新部分交替工作。
本文提出一種全新的運(yùn)算結(jié)構(gòu),以一維數(shù)據(jù)流輸入數(shù)據(jù),無需數(shù)據(jù)分裂步驟,并且不需要控制預(yù)測(cè)部分和更新部分的運(yùn)行和停止,通過對(duì)數(shù)據(jù)流固定節(jié)點(diǎn)取值,分別完成預(yù)測(cè)和更新步驟,并根據(jù)數(shù)據(jù)地址的變換,利用數(shù)據(jù)選擇器從2個(gè)端口交替讀取數(shù)據(jù)即能控制預(yù)測(cè)和更新步驟的運(yùn)行。
1.2 數(shù)據(jù)存取結(jié)構(gòu)
本文采用基于行的列變化和流水線結(jié)構(gòu),完成二維小波變化數(shù)據(jù)處理。輸入數(shù)據(jù)以一維數(shù)據(jù)流形式逐一輸入,變化模塊讀取數(shù)據(jù)流中的數(shù)據(jù)進(jìn)行數(shù)據(jù)計(jì)算,產(chǎn)生變化結(jié)果。
1.2.1 行變換數(shù)據(jù)存取結(jié)構(gòu)
行變換模塊輸入數(shù)據(jù)讀取方式,是用讀取寄存器中數(shù)據(jù)流的方式代替地址尋址的數(shù)據(jù)讀取模式。
數(shù)據(jù)依照輸入順序,在寄存器A,B,C,D中依次流動(dòng)。變換模塊在不同的時(shí)間分別從A,C和D中讀取數(shù)據(jù),進(jìn)行預(yù)測(cè)和更新的變化步驟。變換后輸出的數(shù)據(jù)存放在列變換模塊的寄存器D1和FIFO-A中。行變換模塊結(jié)構(gòu)圖如圖2所示。
1.2.2 列變化數(shù)據(jù)存取結(jié)構(gòu)
在進(jìn)行列變換時(shí),需要讀取變換數(shù)據(jù)點(diǎn)臨近行的同列數(shù)據(jù)。而完成該數(shù)據(jù)點(diǎn)變換后,進(jìn)行的是同一行下一列的數(shù)據(jù)點(diǎn)的列變換。因此需要依次讀出相鄰4行的同列數(shù)據(jù),行數(shù)不變,列數(shù)依次遞增。
為了簡(jiǎn)單的實(shí)現(xiàn)該數(shù)據(jù)讀取的順序,本文使用3個(gè)FIFO來保存連續(xù)3行的數(shù)據(jù):當(dāng)輸入新一行的第1個(gè)數(shù)據(jù)時(shí),3個(gè)FIFO釋放出第1個(gè)數(shù)據(jù)(即之前3行每1行的第1個(gè)數(shù)據(jù)),剛好組成完成列變換的相鄰4行的同列數(shù)據(jù)。同時(shí),數(shù)據(jù)的新1行的數(shù)據(jù)進(jìn)入FIFO-A,F(xiàn)IFO-A釋放出的數(shù)據(jù)進(jìn)入FIFO-B,F(xiàn)IFO-B釋放出的數(shù)據(jù)進(jìn)入FIFO-C。之后,釋放出第2列的數(shù)據(jù),并重復(fù)上述步驟。
因此在完成數(shù)據(jù)變換的同時(shí),數(shù)據(jù)在FIFO-A,F(xiàn)IFO-B,F(xiàn)IFO-C中依次流動(dòng)。完成該行的所有列數(shù)據(jù)的變換后,F(xiàn)IFO-A中的數(shù)據(jù)依次寄存在FIFO-B中,F(xiàn)IFO-B的數(shù)據(jù)寄存在FIFO-C中,而FIFO-A則寄存了新1行的數(shù)據(jù)。當(dāng)下1行的數(shù)據(jù)輸入時(shí),又依照上述順序,開始下1行的列變換。
1.3 變換模塊結(jié)構(gòu)
常見的小波變換結(jié)構(gòu)是當(dāng)輸入奇數(shù)地址數(shù)據(jù)時(shí)完成預(yù)測(cè)步驟,當(dāng)輸入偶數(shù)地址數(shù)據(jù)時(shí)完成更新步驟。而本文提出的結(jié)構(gòu)不進(jìn)行數(shù)據(jù)分裂,直接對(duì)數(shù)據(jù)進(jìn)行預(yù)測(cè)和更新,并同時(shí)輸出到數(shù)據(jù)選擇器。數(shù)據(jù)選擇器對(duì)地址奇偶進(jìn)行判斷,選擇輸出數(shù)據(jù),可以得到和常用結(jié)構(gòu)相同的結(jié)果。列變換模塊結(jié)構(gòu)圖如圖3所示。
1.3.1 行變換結(jié)構(gòu)
本文提出了無分裂步驟的結(jié)構(gòu)中,行變換時(shí)數(shù)據(jù)流輸入后依次寄存在寄存器D1,D2,D3,D4中。如圖4(a),寄存器D1,D2,D3,D4中已分別寄存了輸入數(shù)據(jù)X4,X3,X2,X1,而寄存器D5,D6,D7則分別寄存了數(shù)據(jù)Y2,Y1,Y0。此時(shí)利用寄存器D1,D2,D3中的數(shù)據(jù)X4,X3,X2經(jīng)過預(yù)測(cè)步驟,得到預(yù)測(cè)結(jié)果y3=x3-(x2+x4)/2;此前已在寄存器D5,D6,D7中分別寄存了前3個(gè)時(shí)鐘分別完成計(jì)算的結(jié)果Y2,Y1,Y0,則經(jīng)過更新步驟可得y1=x1+(y0+y2+2)/4。此時(shí)通過數(shù)據(jù)選擇器輸出的值Y1是奇數(shù)地址,因此僅需要完成預(yù)測(cè)步驟運(yùn)算的結(jié)果(即寄存器D6中的數(shù)據(jù)),也就是說輸出寄存器D6中的Y1值,放棄更新步驟產(chǎn)生的Y1值。
在下一個(gè)時(shí)鐘沿來臨時(shí),X4,X3,X2依次取代X3,X2,X1的位置,輸入的X5則寄存在X4的位置,同理Y2,Y1依次取代Y1,Y0的位置,預(yù)測(cè)產(chǎn)生的Y3值則寄存在Y2,則下一次計(jì)算時(shí),寄存器中的值如圖4b,預(yù)測(cè)步驟產(chǎn)生Y4,更新步驟產(chǎn)生Y2,由于是偶數(shù)地址,所以通過數(shù)據(jù)選擇器輸出經(jīng)過更新步驟的Y2值。
1.3.2 列變換結(jié)構(gòu)
列變換時(shí),假設(shè)第m行的第n列完成行變換后的數(shù)據(jù)為X(m,n),將該數(shù)據(jù)寄存在寄存器D1中,下個(gè)時(shí)鐘沿來臨時(shí),F(xiàn)IFO-A和FIFO-B中分別釋放出第m-1和m-2行的第n列的數(shù)據(jù)X(m-1,n)和X(m-2,n),同D1中X(m,n)數(shù)據(jù)共同完成預(yù)測(cè)步驟生成Y(m,n)并寄存在D2中,同時(shí)從D1和FIFO-A,F(xiàn)IFO-B中釋放出的數(shù)據(jù)X(m,n),X(m-1,n)和X(m-2,n)分別寄存進(jìn)FIFO-A,F(xiàn)IFO-B,F(xiàn)IFO-C。再下一個(gè)時(shí)鐘沿來臨時(shí),完成第m行第n+1列的行變換,并寄存在D1中,之后即可按照上述步驟完成第m行第n+1列數(shù)據(jù)的預(yù)測(cè)和更新,得出結(jié)果Y(m,n+1)。當(dāng)FIFO把第m行數(shù)據(jù)完全釋放出時(shí),已在該FIFO寄存了第m+1行的完整數(shù)據(jù),可以開始下一行的列變換。同理,完成預(yù)測(cè)步驟的數(shù)據(jù)寄存在D2,F(xiàn)IFO-D,F(xiàn)IFO-E中,依據(jù)預(yù)測(cè)步驟相似的原理完成更新步驟。之后依據(jù)數(shù)據(jù)的列地址的奇偶,選擇不同的Y值輸出。
1.4 控制結(jié)構(gòu)
一般的變化模塊,均采用狀態(tài)機(jī)的控制方法,利用狀態(tài)的跳轉(zhuǎn),來控制行變化和列變化之間的關(guān)系,完成預(yù)測(cè)和更新步驟。
而本文提出了全新的、更為靈活的直角坐標(biāo)系控制法,即利用行坐標(biāo)(row-c)和列坐標(biāo)(col-c)形成一個(gè)二維直角坐標(biāo)系,并將圖片映射到直角坐標(biāo)系上,每一對(duì)坐標(biāo)(row-c,col-c)對(duì)應(yīng)直角坐標(biāo)系上圖片的一個(gè)點(diǎn),也對(duì)應(yīng)該點(diǎn)的變換時(shí)刻。通過row-c,col-c的值來判斷正在進(jìn)行變換的行列值,來決定FIFO和變化模塊的動(dòng)作。利用row-c,col-c的末位來判斷進(jìn)行變換的行和列地址分別是奇數(shù)地址還是偶數(shù)地址,決定是進(jìn)行預(yù)測(cè)步驟還是更新步驟。結(jié)合計(jì)數(shù)器,通過輸入的圖片的行像素值M和列像素值N,分別控制row-c和col-c的跳變。因而可以簡(jiǎn)單的通過改變M,N值的大小來改變進(jìn)行變換的圖片的大小。
2 結(jié)果驗(yàn)證
2.1 采用軟硬件協(xié)同驗(yàn)證的結(jié)構(gòu)
本文采用軟硬件協(xié)同工作的結(jié)構(gòu),如圖5所示。利用計(jì)算機(jī)端的Matlab軟件從FPGA芯片中讀取變換后的RGB數(shù)據(jù),并顯示在計(jì)算機(jī)顯示器上。
具體結(jié)構(gòu)是將圖片數(shù)據(jù)通過北翰科技公司的Verilink插件,從Matlab軟件中送入FPGA芯片中的FIFO,小波變換模塊從FIFO中依次讀取數(shù)據(jù),并進(jìn)行變換,完成變換的數(shù)據(jù)通過FIFO送回Matlab軟件,并顯示在計(jì)算機(jī)的顯示器上。
2.2 驗(yàn)證結(jié)果
本文采用128×128像素RGB圖片作為變換圖像源,在計(jì)算機(jī)的Matlab軟件中,將圖片轉(zhuǎn)換成一維數(shù)據(jù)流,并依次通過Verilink插件送入FPGA芯片的FIFO中,在送入數(shù)據(jù)的同時(shí),F(xiàn)PGA中的變換模塊從FIFO中讀出數(shù)據(jù)進(jìn)行變換,并將變換結(jié)果通過輸出的FIFO送至計(jì)算機(jī)端的Mat lab軟件。在完成全部數(shù)據(jù)變換后,在計(jì)算機(jī)端將獲得的數(shù)據(jù)重新排列,并轉(zhuǎn)換成128×128×3的RGB圖片格式,并對(duì)比顯示變換前和變換后的圖片效果。變換前圖片如圖6(a),變換并重排后圖片如圖6(b),圖片數(shù)據(jù)高頻分量和低頻分量分離正確無誤。
3 結(jié)語
本文提出了無分裂步驟的小波變換結(jié)構(gòu),簡(jiǎn)化了變換模塊的控制系統(tǒng),采用數(shù)據(jù)流模式輸入數(shù)據(jù),并且和軟硬件協(xié)同的工作方式良好配對(duì),利用FPGA和計(jì)算機(jī)完成了二維小波變換的板級(jí)驗(yàn)證。本文提出的結(jié)構(gòu)在5/3小波變換中有效運(yùn)行,并起到簡(jiǎn)化結(jié)構(gòu)的關(guān)鍵作用,下一步將嘗試把該結(jié)構(gòu)運(yùn)用于9/7小波變換的硬件結(jié)構(gòu)實(shí)現(xiàn)中,并提出適合9/7小波變換硬件實(shí)現(xiàn)的結(jié)構(gòu)。