LBG 向量量化演算法

2021-08-04 04:39:45 字數 4015 閱讀 1509

lbg向量化演算法

向量量化vqvector quantization是70年代後期發展起來的一種資料壓縮技術是一種高效的有損資料壓縮技術它具有壓縮比大、解碼簡單和失真較小等優點。其基本思想是將若干個標量資料組構成乙個向量,然後在向量空間給以整體量化,從而壓縮了資料而不損失多少資訊。向量量化是香濃資訊理論在信源編碼理論方面的發展,它的理論基礎是香濃的率失真理論,率失真理論是乙個存在性定理,並非是乙個構造性定理,它未給出如何構造,向量量化器的方法,向量量化總是優於標量量化,這是因為向量量化能有效地應用向量中各,分量之間的4種相互關聯性質來消除資料中的冗餘度。自從2023年提出向量量化器vector

quantizater碼書設計的lbg演算法以來,向量量化vectorquantization技術[gray1984]已經成功地應用到影象壓縮和語音編碼中[1]。

二、lbg演算法中最佳量化器的設計

lbg演算法中的最佳向量量化器設計的關鍵是最佳劃分和最佳碼書的設計[2]。

一是給定碼書條件下,尋找信源空間的最佳劃分,使平均失真最小,由碼書和nnr得最

佳劃分。

二是在給定劃分條件下,尋找最佳碼書,使平均失真最小

給定了劃分後為了使碼書的平均失真最小,碼字必須為相應劃分的形心,質心——即

式中表示選取的y是使平均失真為最小的y,對於一般的失真測度和信源分布,很難找

到形心的計算方法。對於訓練序列分布和常用的均方失真測度,形心可由下式給出,式中表示集合中元素的個數,即集中有x個。

三、向量量化器的設計演算法

經典的碼書設計演算法是lbg演算法[2]它是y.lindea.buzo與r.m.gray在2023年推出

的,其思想是對於乙個訓練序列,先找出其中心,再用**法產生乙個初始碼書a^0,最後

把訓練序列按碼書a^0中的元素分組,找出每組的中心,得到新的碼書,轉而把新碼書作為初始碼書再進行上述過程,直到滿意為止。設計向量量化器的主要任務是設計碼書,在給定碼書大小n的情況下,由最佳劃分和最佳碼書兩個必要條件得到向量量化器的設計演算法lbg演算法既可用於已知信源分布特性情況,又可用於未知信源分布特性情況

lbg演算法流程描述如下

此演算法基於最佳向量量化器設計的最佳劃分和最佳碼書這兩個必要條件,是勞埃德演算法

在向量空間的推廣,其特點為物理概念清晰、演算法理論嚴密及演算法實現容易。但是它有3

個主要缺點:

1在每次迭代的最佳劃分階段從碼書中搜尋訓練向量的最近碼字需要大量的儲存空

間和繁瑣的計算。

2初始碼書的選擇影響碼書訓練的收斂速度和最終碼書的效能。

3碼書的自適應能力不強。

二、程式除錯

系統:win7 

軟體:vs2010

開啟程式包專案,進行重新編譯及重定專案目標後,執行程式,報錯:無法找到

經查詢解決方法為:

新建unistd.h

檔案,檔案內容為:

#ifndef _unistd_h

#define _unistd_h 

#include 

#include 

#endif /* _unistd_h */

·       

1

·       

2

·       

3

·       

4

·       

5

·       

1

·       

2

·       

3

·       

4

·       

5

並將unistd.h

檔案置於如下路徑資料夾中

這個程式可以用來訓練向量量化器。使用lbg演算法獲得影象壓縮碼書,初始化使用linde,  buzo, and gray提出的分割方法。用作。這個專案可以  很長一段時間來執行特別是所需的大小  碼書很大。因此這是乙個好主意來執行  專案背景。

影象的尺寸可以由使用者指定或者由程式直接獲得。但是image_size只支援少量的影象標準,如果想要支援更多格式的檔案需通過編輯檔案image_size.c來實現。或者可以在執行時指定影象的尺寸(使用選項- x – y)。

1. 呼叫引數格式:

trvqsp_img ts_img codefile [-bcb_size] [ -t block_height] [-w block_width] [-x row_size][-y col_size] [-h]

ts_img:是訓練影象,也即待量化壓縮的影象,假定為8位灰度級,使用光柵掃瞄順序儲存。

codefile:以二進位制格式存放碼書的檔案,有乙個包含12個位元組的檔案頭記錄:向量的維度,以及碼書的大小。

-b cb_size:碼書的大小

-t block_height:塊的高度(以畫素為單位)

-w block_width:塊的寬度(以畫素為單位)

實際上由block_width 、block_height決定著碼書向量的大小,也即每個輸出塊的大小。因此向量的維數是block_height *block_width。

-x row_size:輸入影象的寬

-y col_size:輸入影象的高

-h 幫助

2. 碼書構造流程

這個程式可以使用向量量化來壓縮影象。需使用trvqsp_img獲得的碼書檔案,碼書的大小以及碼塊的大小包含在指定的碼書檔案中。這個程式使用的是定長編碼,所以可以使用變長編碼來優化程式。如果沒有指定乙個輸出檔案則從命令框中輸出。

1. 呼叫格式:

vqimg_enc [

-i imagein

] [-ocmpfile] [-c codebook] [-x row_size] [-ycol_size] [-h]

-i imagein:輸入的待編碼的影象檔名

-o cmpfile:輸出的量化壓縮後的檔名

-c cmpfile:碼書檔案

-x row_size:輸入影象的寬

-y col_size:輸入影象的高

-h 幫助

2. 量化流程:

重建壓縮影象使用vqimg_enc。解碼需要提供碼書檔案,而碼書檔案則通過壓縮檔案的檔案頭提供其名稱,不需要人為輸入。影象是

8位灰度級影象,使用光柵掃瞄順序儲存。

1. 呼叫格式:

vqimg_dec [-i cmpfile] [-oimageout] [-h]

-i cmpfile:壓縮檔案名

-o imageout:重建影象檔名

-h 幫助

2. 重構流程

學習向量量化

與 k 均值演算法類似,學習向量量化 learning vector quantization,簡 稱 lvq 也是試圖找到一組原型向量來刻畫聚類結構,但與一般聚類演算法不同 的是,lvq 假設資料樣本帶有類別標記,學習過程利用樣本的這些監督資訊來 輔助聚類.可看作通過聚類來形成 類別 子類 結構,...

信源編碼 向量量化演算法

1.向量量化的基本思想 將若干個標量資料組構成乙個向量,然後在 向量空間 給以整體量化,從而壓縮了資料而不損失多少資訊。向量量化引入的優點 高維空間處理可增加靈活性。2.向量量化最重要的點 碼本的生成。這裡介紹一種演算法 lbg演算法。lbg演算法的思想 1.隨意選取n個影象塊作為碼向量 2.由這n...

LVQ學習向量量化

現在已經2011年五月份了,今年的兩個多月幾乎沒什麼成果,想到水樣年華這個詞,額!總結過往,翹首未來,心中不免些許迷茫,程式設計師之路在何方?靡靡之音,不絕於耳,然何時我也能奏一首陽春白雪,不為流傳於世,只求一心靈安靜之所!lvq原理不再贅述,其本質可以看成是最近鄰分類,所謂競爭性神經網路,即把歐氏...