資源描述:
《基于lbg矢量量化圖像壓縮編碼實(shí)驗(yàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、基于LBG的矢量量化圖像壓縮編碼實(shí)驗(yàn)一、實(shí)驗(yàn)原理矢量量化:要想得到好的性能編碼,僅采用標(biāo)量量化是不可能的。當(dāng)把多個(gè)信源符號聯(lián)合起來形成多維矢量,再對矢量進(jìn)行標(biāo)量量化時(shí)自由度將更大,同樣的失真下,量化基數(shù)可進(jìn)一步減少,碼率可進(jìn)一步壓縮。這種量化叫矢量量化。應(yīng)用:在航天、軍事、氣象、醫(yī)學(xué)、多媒體等領(lǐng)域中經(jīng)常需要大量存儲(chǔ)和傳輸各種靜態(tài)圖像和視頻圖像。為了提高傳輸效率和減少存儲(chǔ)空間,必須采取有效的壓縮編碼算法消除圖像中所包含的各種冗余信息并在給定的失真條件下使用盡量少的比特?cái)?shù)來描述圖像。矢量量化(VQ)作為一種有效的有損壓
2、縮技術(shù),其突出優(yōu)點(diǎn)是壓縮比大以及解碼算法簡單,因此它已經(jīng)成為圖像壓縮編碼的重要技術(shù)之一。矢量量化壓縮技術(shù)的應(yīng)用領(lǐng)域非常廣闊,如軍事部門和氣象部門的衛(wèi)星(或航天飛機(jī))遙感照片的壓縮編碼和實(shí)時(shí)傳輸、雷達(dá)圖像和軍用地圖的存儲(chǔ)與傳輸、數(shù)字電視和DVD的視頻壓縮、醫(yī)學(xué)圖像的壓縮與存儲(chǔ)、網(wǎng)絡(luò)化測試數(shù)據(jù)的壓縮和傳輸、語音編碼、圖像識(shí)別和語音識(shí)別等等。LGB算法:一種有效和直觀的矢量量化碼書設(shè)計(jì)算法——LBG算法(也叫GLA算法)是由Linde、Buzo和Gray于1980年首先提出來的。該算法基于最佳矢量量化器設(shè)計(jì)的最佳劃分和最
3、佳碼書這兩個(gè)必要條件,且是Lloyd算法在矢量空間的推廣,其特點(diǎn)為物理概念清晰、算法理論嚴(yán)密及算法實(shí)現(xiàn)容易。設(shè)訓(xùn)練矢量集為,待產(chǎn)生的碼書為,其中,,,則碼書設(shè)計(jì)過程就是需求把訓(xùn)練矢量集分成個(gè)子集的一種最佳聚類方案,而子集的質(zhì)心矢量作為碼字。假設(shè)平方誤差測度用來表征訓(xùn)練矢量和碼字之間的失真,即:則碼書設(shè)計(jì)的準(zhǔn)則可用下列數(shù)學(xué)形式表達(dá):最小化約束條件,其中為矩陣,其元素滿足:矩陣可看作訓(xùn)練矢量的聚類結(jié)果。根據(jù),可計(jì)算碼字:其中代表子集中訓(xùn)練矢量的數(shù)目,或者說是矩陣第行中非零元素的數(shù)目。針對訓(xùn)練矢量集為,其LBG算法的具體
4、步驟如下:步驟1:給定初始碼書,令迭代次數(shù),平均失真,給定相對誤差門限。步驟2:用碼書中的各碼字作為質(zhì)心,根據(jù)最佳劃分原則把訓(xùn)練矢量集劃分為個(gè)胞腔,滿足步驟3:計(jì)算平均失真判斷相對誤差是否滿足若滿足,則停止算法,碼書就是所求的碼書。否則,轉(zhuǎn)步驟4。步驟4:根據(jù)最佳碼書條件,計(jì)算各胞腔的質(zhì)心,即由這個(gè)新質(zhì)心形成新碼書,置,轉(zhuǎn)步驟2。二、實(shí)驗(yàn)?zāi)康牟捎檬噶苛炕惴ǎ↙BG)獲得圖像壓縮所需要的碼書,通過碼書實(shí)現(xiàn)圖像壓縮編碼。三、實(shí)驗(yàn)內(nèi)容對給定的一幅圖片四、實(shí)驗(yàn)步驟(1)對訓(xùn)練圖片,采用LBG算法獲取最佳碼書設(shè)計(jì);(2)采
5、用熵編碼實(shí)現(xiàn)圖像索引編號的壓縮。五、程序代碼clearall;data=imread('cameraman.tif');%調(diào)入原始圖像data=double(data)/255;%歸一化[m,n]=size(data);%求出圖像的行數(shù)和列數(shù)figure(1)subplot(1,2,1);imshow(data);%顯示原始圖像title('原始圖像')subplot(1,2,2);imhist(data);title('直方圖')siz_word=4;%設(shè)置碼字的大小siz_book=512;%設(shè)置碼書的大小da
6、ta1=zeros(m*n,1);fori=1:mforj=1:ndata1((i-1)*n+j)=data(i,j);endendM1=floor(m*n/siz_word);r=mod(m*n,siz_word);ifr>0M1=M1+1;enddata2=zeros(M1,siz_word);l=1;A=zeros(siz_word,1);r=1;fori=1:m*nA(r)=data1(i);ifr==siz_worddata2(l,:)=A;l=l+1;r=1;elser=r+1;endendcode_b
7、ook=zeros(siz_book,siz_word);%LBG算法開始%初始化碼書l=1;r=1;A=zeros(siz_word,1);fori=1:siz_book*siz_wordA(r)=data1(i);ifr==siz_wordcode_book(l,:)=A;l=l+1;r=1;elser=r+1;endendMIU=zeros(M1,siz_book);t=1;whilet==1fori=1:M1B=zeros(siz_word,1);B=data2(i,:);A=zeros(siz_word,
8、1);A=code_book(1,:);tep=0.0;forl=1:siz_wordtep=tep+(A(l)-B(l))^2;endr=1;forj=2:siz_bookA=code_book(j,:);temp=sum((A-B).^2);iftemp