概要
有限狀態VQ與分類VQ(Classified vector quantization,CVQ)相同的是都使用好幾個小號編碼簿而不是單一一個大型的編碼簿。但是,由於FSVQ是利用下一狀態函式(Next-state function)來決定哪一個編碼簿,而非分類器,因此並沒有CVQ所遭遇的問題,像是送與不送用以指明所選用之編碼簿的額外信息。下一狀態函式是以目前的狀態(即其編碼簿)及目前的輸出碼向量為輸入,以另一個狀態的函式為輸出。使用FSVQ的優點是因為相鄰的像素方塊通常是相似的,因此可以利用這種相關性或累贅,在知道前面方塊的結果後,選擇一個合適的編碼簿。實驗的結果顯示,FSVQ改善了VQ的效率。
算法
•第一步:
將原視頻切割成大小為n(一般為n = 4 x 4 = 16)而且不相重疊的方塊。這些方塊排順序成為一串視頻向量, 。
•第二步:
給定一個起始狀態 及其連帶之編碼簿 ,我們首先為第一個視頻向量, ,編碼,找出 中和它最接近的碼向量, ,提交 的指針給接收端。
•第三步:
以前一個狀態 、及前一個狀態的輸出碼向量 做為下一狀態函式f( .)的輸入,求出下一個狀態 ,即 ;使用下一個狀態 的編碼簿 為下一個視頻向量 做編碼;假設從 中所找得最接近的碼向量為 ,則提交 在 中的指針給接收端。
•第四步:
以同樣的程式為其餘的視頻向量做編碼(即,求新的狀態 ,然後從 中找出與 最接近的碼向量 並提交奇指針給接收端)。
如前所述,由於下一個狀態是以前一個狀態以及輸出碼向量(而不是視頻向量本身)的函式,因此接收端可以完全與傳送端同步地改變狀態而不需要使用額外的信息。但是,這也為這個方法帶來了一個缺點:如果傳送線發生錯誤,這個錯誤會一直影響下去而可能導致即嚴重的重建誤差。
編碼簿
每一個視頻向量,X,與一組代表性樣本或碼向量(Codevectors), ,作比對的工作。這些碼向量共同組成的即為 編碼簿(Codebook)。
區域編碼簿
一般而言,要編碼某一張特定的視頻,最最佳化的編碼簿應為使用這張視頻本身為訓練集所產生的,此種編碼簿稱為區域編碼簿(Local codebook)。
使用區域編碼簿通常會有相當好的壓縮效率,這是因為該視頻所特有之視頻特徵(如線、邊等等)都會被自己的區域編碼簿所充分地考慮進去,因而都找得到足以代表的碼向量。
然而,區域編碼簿會有兩大缺點:首先,每編碼一張視頻就得產生它所獨用的編碼簿,這是相當費時的工作,也會讓即時處理變的不可能;其次,區域編碼也得提交給接收端,這個額外的數據量會大大地降低壓縮效率。
通用編碼簿
要解決區域編碼所帶來的問題,可以使用多張具代表性的視頻作為訓練集,並產生通用編碼簿(Global codebook)。
如果要編碼的視頻屬於同一類(就解析度、視頻特色、詳細內容等等而言),全體編碼也將導致很好的效果;反之,如果要編碼的視頻有很大的不同,通用編碼簿的效率可能就會遠遠不如區域編碼,尤其是如果所選用的訓練集又很小的情況下。