<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 基于矢量量化編碼的數(shù)據(jù)壓縮算法的研究分析

          基于矢量量化編碼的數(shù)據(jù)壓縮算法的研究分析

          作者: 時(shí)間:2012-09-14 來源:網(wǎng)絡(luò) 收藏

          Step 4:如果 >0,則交換索引n和引起最大失真下降的索引j,并轉(zhuǎn)Step 2;
          Step 5:終止。如果n=N一1,則終止,否則,轉(zhuǎn)Step 3。
          可以看出,BSA根據(jù)函數(shù)值 將碼字進(jìn)行排列而選擇出哪一個(gè)碼字最先進(jìn)行交換,從而在運(yùn)算上給出了一個(gè)方向性引導(dǎo)。如果由于程序運(yùn)行時(shí)間的限制而使算法的迭代次數(shù)有限,則這種方向性引導(dǎo)將顯得尤為重要。每一次成功交換的完成,代表一次迭代的結(jié)束。若一次迭代中的所有試驗(yàn)性交換產(chǎn)生的失真下降都不大于O,則說明算法已經(jīng)達(dá)到一個(gè)局部最優(yōu)解.應(yīng)該指出的是:從不同的初始碼字排序出發(fā),可獲得不同的局部最優(yōu)解,從而保證BSA算法對(duì)于碼字交換的限制不會(huì)影響它獲得全局最優(yōu)碼字索引分配方案的可能性。實(shí)驗(yàn)證明,該算法獲得的碼字索引分配方案的失真比隨機(jī)碼字索引分配方案的失真有較大改進(jìn)。
          3.3.2 禁止搜索碼字索引算法
          禁止搜索的基本思想是通過一系列移動(dòng)來搜尋所有可行解的搜索空間,并且在當(dāng)前迭代中禁止某些搜索方向以避免死循環(huán)和跳入局部極小。由當(dāng)前解到其鄰域解的移動(dòng)被部分地或完全地記錄在禁止表中,目的是為了禁止以后迭代中的重復(fù)操作。
          令 為測試解的集合,其中元素si可以被表示為式【8】(3.22):
          (3.22)
          其中,N為碼書的尺寸,Si(j)表示在解si中分配給碼字Yj的索引, 令 和 分別表示當(dāng)前解和最優(yōu)解。中碼字Yj的索引,Sb(j)仍表示分配給解Sb中碼字Yi的索引。
          令 , 和 分別代表測試解組的目標(biāo)函數(shù)值集合,當(dāng)前解的目標(biāo)函數(shù)值和最優(yōu)解的目標(biāo)函數(shù)值,其中 是測試解 的目標(biāo)函數(shù)值,0iNs-1。初始的當(dāng)前解是隨機(jī)產(chǎn)生的,通過隨機(jī)交換當(dāng)前解中的兩個(gè)索引來產(chǎn)生測試解。禁止表中只存儲(chǔ)交換的索引。如果從當(dāng)前解中產(chǎn)生測試解的交換索引與禁止表中任何記錄相同,則稱該測試解為禁止解。該算法的具體步驟如下:
          Step 1:設(shè)置禁止表大小Ts測試解個(gè)數(shù)N,以及迭代次數(shù)Im。令迭代計(jì)數(shù)器i=1,禁止表插入點(diǎn)t=1。隨機(jī)產(chǎn)生當(dāng)前解 ,計(jì)算其相應(yīng)的目標(biāo)函數(shù)值V}。令Sb=Sc以及Vb=Vc
          Step 2:把當(dāng)前解Sc拷貝給每一個(gè)測試解si, 0iNs-1。對(duì)每一個(gè)測試解si,0i Ns-1,產(chǎn)生兩個(gè)隨機(jī)整數(shù)r1和r2, , , 。N為碼字個(gè)數(shù),然后通過交換索引 和 產(chǎn)生新測試解組。計(jì)算測試解的函數(shù)值 。
          Step 3:如果最優(yōu)測試解的目標(biāo)函數(shù)值比最優(yōu)解的目標(biāo)函數(shù)值Vb還小,則把它作為新的當(dāng)前解,并令其目標(biāo)函數(shù)值作為當(dāng)前解的目標(biāo)函數(shù)值Vc,轉(zhuǎn)Step 3。否則,選出測試解中最好的非禁止解。如果能選到,則把它作為新的當(dāng)前解Sc并令其目標(biāo)函數(shù)值作為當(dāng)前解的目標(biāo)函數(shù)值Vc,轉(zhuǎn)Step 3;否則,轉(zhuǎn)Step 1。
          Step 4: 如果vb>vc,令Sb=Sc,Vb=Vc,把從舊當(dāng)前解到新當(dāng)前解所交換過的索引插入禁止表中。禁止表的插入點(diǎn)設(shè)為ti=ti+1;如果ti>Ts,令ti=l,如果iIm,令i=i+1轉(zhuǎn)Step 1;否則,算法結(jié)束。

          本文引用地址:http://www.ex-cimer.com/article/170855.htm

          第四章 算法的實(shí)現(xiàn)
          4.1 需求分析與整體設(shè)計(jì)
          4.1.1需求分析
          隨著數(shù)字技術(shù)的飛速發(fā)展,越來越多的信息(文本、圖形、圖像、動(dòng)畫、音頻及視頻影像等)采用數(shù)字化的形式存儲(chǔ)、傳輸和檢索。由于網(wǎng)絡(luò)上的流量飛速增長,而且網(wǎng)絡(luò)的帶寬總是滿足不了需求,技術(shù)的迅猛發(fā)展,要求在盡量不損傷多媒體質(zhì)量的情況下量。
          正是由于這種需求的存在,要求開發(fā)一套完整的數(shù)據(jù)軟件,利用的數(shù)據(jù)壓縮算法,能夠調(diào)用BMP格式的圖像,對(duì)載入的圖像進(jìn)行壓縮并顯示解壓后的圖像效果,能夠選擇路徑保存解壓后的圖像實(shí)現(xiàn)SNR信噪比的計(jì)算,便于對(duì)壓縮軟件性能的評(píng)價(jià)。
          4.1.2 整體設(shè)計(jì)
          軟件的設(shè)計(jì)在Eclipse開發(fā)工具下編譯Java應(yīng)用程序。利用Java語言的面向?qū)ο蟮奶攸c(diǎn),充分利用他的可封裝性,重用性和多態(tài)性等特點(diǎn),開發(fā)一整套完整的數(shù)據(jù)壓縮算法的壓縮軟件。
          將這個(gè)數(shù)據(jù)壓縮軟件從整體上分五個(gè)模塊來實(shí)現(xiàn)的。Bmp格式圖像的調(diào)入和保存模塊,圖像矢量塊的劃分模塊,初始碼書生成模塊,LBG量化模塊,圖像解壓模塊。如圖4.1所示:

          圖4.1程序模塊框圖
          軟件界面的設(shè)計(jì)。在JAVA的運(yùn)行環(huán)境下要實(shí)現(xiàn)矢量量化數(shù)據(jù)壓縮算法對(duì)BMP格式的靜止圖像進(jìn)行壓縮與解壓。軟件界面的設(shè)計(jì),在圖像界面的左側(cè)可以顯示調(diào)入的圖像,右側(cè)顯示圖像信息。在瀏覽按鈕上可以調(diào)入待壓縮的圖像,并且可以選擇解壓后的圖像的保存位置。選擇好解壓圖像后點(diǎn)擊壓縮按鈕即可開始對(duì)圖像進(jìn)行矢量量化的壓縮。最后顯示壓縮的結(jié)果,包括原始圖像的大小,壓縮后的大小,壓縮比,壓縮時(shí)間及PSNR值等信息。軟件運(yùn)行的初始界面如圖4.2所示:

          圖4.2程序運(yùn)行初始界面
          4.2 矢量量化算法的實(shí)現(xiàn)過程及說明
          4.2.1 初始碼書的生成
          這個(gè)程序利用了隨機(jī)生成碼書的方法,即根據(jù)輸入信源分布直接從訓(xùn)練序列中隨機(jī)選擇N個(gè)訓(xùn)練矢量作為初始碼字以構(gòu)成初始碼書。該方法的優(yōu)點(diǎn)是計(jì)算量低,初始碼書的生成較為容易。雖然可能出現(xiàn)碼書的分布不均勻的現(xiàn)象,但是配合LBG算法的多次迭代可以得到補(bǔ)償。需要注意,這里所說的隨機(jī)是說初始碼書的選擇方式是隨機(jī)的,而一旦碼書選定,編碼器的工作方式則是按著最近鄰方式進(jìn)行的。隨機(jī)碼書的生成代碼如下:
          codebook=new MyBlock[N];
          for(int i=0;iN;i++)
          { codebook[i]=new MyBlock();
          } codebook[0]=tv.randomselect();
          for(int j=1;jN;j++) {
          int t=0;
          do{ t++;
          n=0;
          codebook[j]=tv.randomselect();
          for(int l=0;lj;l++)
          { if(codebook[j].vcmp(codebook[l])==0)
          { n=1; break; }
          }
          }while(n!=0t100);}

          4.2.2 LBG矢量量化
          圖4.2 LBG碼書設(shè)計(jì)流程圖

          如圖4.2所示的流程圖,對(duì)隨機(jī)生成初始碼書,碼書大小N,訓(xùn)練矢量序列,停止計(jì)算門限和起始平均失真的初始碼書進(jìn)行勞埃德迭代。用初始碼書為已知的心形,把訓(xùn)練序列重新劃分為N個(gè)胞腔。計(jì)算新的平均失真和相對(duì)失真,判斷新的失真是否滿足門限條件,如果滿足則退出勞埃德迭代否則繼續(xù)進(jìn)行勞埃德迭代直到滿足門限條件,生成碼書。LBG算法的關(guān)鍵代碼如下:
          flag=0;//循環(huán)標(biāo)識(shí)
          tcb(s,tv);//訓(xùn)練集和碼本建立關(guān)系
          for(int i=0;iN;i++)
          { for(int j=0;jtv.M;j++)
          {if(s[j]==i) n++;
          yn[i]=n;
          } }dsum=0;
          for(int i=0;itv.M;i++)
          {dsum=dsum+(long)min1(tv.train[i],1);
          }d1=(double)(dsum/tv.M);
          d=Math.abs(((double)(d0-d1)/(double)d1));
          if(d1d0d>e)
          {for(int i=0;iN;i++)
          {if(yn[i]!=0)
          {o=core(tv,i,s);
          codebook[i].vcopy(o);
          }d0=d1;
          flag=1;
          }while(flag==1);
          在這段代碼中,首先建立碼本與訓(xùn)練矢量的關(guān)系,并經(jīng)過多次的勞埃德迭代直到滿足門限條件,生成新的碼書。這里應(yīng)用了LBG算法他具有如下的優(yōu)點(diǎn):
          1.不用初始化計(jì)算,可大大減少計(jì)算時(shí)間
          2.初始碼字選自訓(xùn)練序列,無空胞腔問題
          雖然LBG算法有如上的優(yōu)點(diǎn),但是他本身也存在一些缺點(diǎn)和不足的地方,比如在計(jì)算的過程中可能會(huì)選到一些非典型矢量作碼字,因而該胞腔中只有很少矢量,甚至只有一個(gè)初始碼字,而且每次迭代又都保留了這些非典型矢量的形心;還可能會(huì)造成在某些空間把胞腔分得過細(xì),而有些空間分得太大。這些缺點(diǎn)都會(huì)導(dǎo)致碼書中有限個(gè)碼字得不到充分利用,還需要進(jìn)一步的改進(jìn)算法。
          程序整體流程圖如圖4.3所示:

          圖4.3 軟件流程圖
          4.2.3 矢量量化碼字索引與恢復(fù)
          在這個(gè)程序中沒有考慮快速碼字搜索的算法,應(yīng)用了最佳碼字搜索的方法,使輸入矢量與所有的碼字進(jìn)行比較,選出距離最小的那個(gè)碼字成為匹配碼字,生成索引。這種算法雖然增加了計(jì)算量,但是減少了圖像數(shù)據(jù)壓縮過程中的失真。
          在輸出端,將編碼過后生成的索引對(duì)照碼書,將圖像數(shù)據(jù)進(jìn)行還原。
          4.3 實(shí)驗(yàn)結(jié)果及評(píng)價(jià)
          在初始界面點(diǎn)擊瀏覽按鈕調(diào)入.BMP圖像。圖像就會(huì)顯示在程序運(yùn)行初始界面的左側(cè),如圖4.3所示:

          圖4.4 壓縮前的程序界面
          點(diǎn)擊”壓縮”按鈕,程序就會(huì)自動(dòng)進(jìn)行矢量量化的壓縮,下面的進(jìn)度條會(huì)顯示壓縮的百分比,當(dāng)進(jìn)度達(dá)到100%時(shí),程序就會(huì)將解壓好的圖像顯示在程序界面的左側(cè)。并顯示一系列的壓縮信息,包括壓縮源文件的大小,壓縮后的碼本大小,壓縮比,壓縮過程所需要的時(shí)間以及峰信噪比PSNR等信息。壓縮后的界面如圖4.5所示:

          圖4.5 恢復(fù)后的程序界面
          程序顯示的壓縮結(jié)果的壓縮比和壓縮時(shí)間上可以看出,這個(gè)利用矢量量化編碼算法的壓縮軟件可以達(dá)到16:1的高壓縮比,并且壓縮時(shí)間比較短。所以矢量量化壓縮編碼是一種非常有效的壓縮算法。
          從壓縮圖像的效果來看,實(shí)驗(yàn)測試的圖像均采用的512×512,8比特/象素的women圖像作為訓(xùn)練圖像產(chǎn)生各種大小的碼書,矢量維數(shù)均為16,對(duì)壓縮程序進(jìn)行測試。通過變換碼書的大小,運(yùn)行程序得到不同的信噪比。測試結(jié)果如下表4.1所示:
          表4.1 不同碼書的信噪比
          序號(hào) 碼書大小 PSNR
          1 64 27.36
          2 128 27.74
          3 256 28.54
          4 512 29.28

          如上表所示,隨著碼書的加大,系統(tǒng)的信噪比在升高,當(dāng)碼書大小為512時(shí),PSNR可以達(dá)到29.28。圖像雖然有一定程度上的失真,但是并不是十分明顯,基本上保持了圖像原有的圖像質(zhì)量。
          這個(gè)程序采用的是矢量量化碼書生成算法中的LBG算法,通過運(yùn)行程序以及對(duì)運(yùn)行結(jié)果的分析可以看出這種從標(biāo)量量化勞埃德迭代操作推廣出來的迭代算法具有以下兩個(gè)優(yōu)點(diǎn):
          1.不用初始化計(jì)算,可大大減少計(jì)算時(shí)間
          2.初始碼字選自訓(xùn)練序列,無空胞腔問題
          雖然LBG算法在具有如上的優(yōu)點(diǎn),但是因?yàn)長BG算法是一種下降算法,每次迭代總能減少(至少保持不變)平均失真,而且每次迭代通常只能產(chǎn)生碼書的局部變化,即每次迭代后,與舊碼書相比,新碼書不可能有非常大的變化。所以初始碼書的選擇影響碼書訓(xùn)練的收斂速度和最終碼書的性能,一旦選定初始碼書,該算法只能得到局部最優(yōu)的碼書,即LBG算法一般不能得到全局最優(yōu)的碼書。
          在每次迭代的最佳劃分階段,從碼書中搜索訓(xùn)練矢量的最近碼字需要大量的存儲(chǔ)空間和繁瑣的計(jì)算;這對(duì)軟件大的運(yùn)行要求比較高的運(yùn)行環(huán)境。這個(gè)可以通過快速碼字搜索的算法來解決這個(gè)問題。

          第五章 結(jié)論與展望
          本文主要針對(duì)矢量量化的算法和實(shí)現(xiàn)研究與探討,本章主要對(duì)本文內(nèi)容與研究工作進(jìn)行一下總結(jié)。最后對(duì)矢量量化技術(shù)在今后發(fā)展方向上作了一些展望。
          矢量量化技術(shù)作為數(shù)據(jù)壓縮領(lǐng)域里的一個(gè)分支,主要優(yōu)點(diǎn)是壓縮比大以及解碼簡單,在圖像壓縮方面已經(jīng)得到成功地應(yīng)用。目前, 矢量量化技術(shù)的研究主要集中在三個(gè)方面:矢量量化器的碼本設(shè)計(jì),矢量量化碼字快速搜索算法設(shè)計(jì),矢量量化碼字索引分配問題。本文主要研究了矢量量化碼本設(shè)計(jì)算法和碼字快速搜索算法,并討論了矢量量化技術(shù)的應(yīng)用問題。全文主要工作可以總結(jié)如下:
          首先,介紹了數(shù)據(jù)壓縮算法的基本理論和發(fā)展現(xiàn)狀,討論了數(shù)據(jù)壓縮算法的分類體系和發(fā)展歷程。
          其次,介紹了矢量量化技術(shù)的來源和發(fā)展歷程,重點(diǎn)介紹了關(guān)于矢量量化技術(shù)的技術(shù)基礎(chǔ)和矢量量化算法中的關(guān)鍵技術(shù)。
          再次,研究了經(jīng)典的矢量量化的設(shè)計(jì)算法,分別研究討論了矢量量化中的LBG算法,最大下降算法;快速搜索算法中的不等式的快速搜索算法和碼字索引分配中的BSA算法等,并討論了現(xiàn)有各種矢量量化算法。
          最后,介紹了一種LBG矢量量化算法的實(shí)現(xiàn)方法,并對(duì)實(shí)驗(yàn)結(jié)果進(jìn)行了性能評(píng)價(jià)。
          以上是本文內(nèi)容的總結(jié)。還有許多問題沒有涉足或研究的深度不夠。矢量量化技術(shù)領(lǐng)域雖然已經(jīng)取得了長足的進(jìn)步,但總體上來說還有許多問題需要進(jìn)一步研究。下面對(duì)矢量量化未來發(fā)展的展望:
          (1) 矢量量化是一種信源編碼技術(shù),在矢量量化器設(shè)計(jì)的過程中,考慮如何降低信道傳輸中可能造成的噪聲干擾的影響,可以提高矢量量化系統(tǒng)的整體性能。歸結(jié)起來,可以用矢量量化碼書索引分配問題來描繪,即研究如何合理的安排碼書中碼字的排序,使得編碼系統(tǒng)在信道傳輸中的容錯(cuò)能力增強(qiáng)。
          (2) 矢量量化作為一種數(shù)據(jù)壓縮技術(shù),如何更好地應(yīng)用到實(shí)際的數(shù)據(jù)壓縮和傳輸系統(tǒng)中去,在實(shí)際應(yīng)用中體現(xiàn)編碼算法的優(yōu)越性,是一個(gè)很實(shí)際的問題,在設(shè)計(jì)算法的同時(shí),要考慮應(yīng)用的實(shí)際情況。
          (3) 本文中在圖像的編碼方面對(duì)矢量量化進(jìn)行研究,矢量量化技術(shù)并不僅僅用在圖像編碼中,可以根據(jù)實(shí)際需要,可以深入對(duì)其進(jìn)行深入研究,如可以在語音壓縮編解碼、音視頻壓縮和遠(yuǎn)程會(huì)議等方面,還可以將這些成果應(yīng)用到其方面一數(shù)字水印、語音識(shí)別、語音合成以及文字合成以及文字的識(shí)別等。

          矢量控制相關(guān)文章:矢量控制原理
          全息投影相關(guān)文章:全息投影原理

          上一頁 1 2 3 下一頁

          評(píng)論


          相關(guān)推薦

          技術(shù)專區(qū)

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();