概要
使用CVQ的優點是使用許多小型的編碼簿,每一個專門為某一類向量而設計,可以達到和使用單一一個大型編碼簿相當的重建質量,且搜尋時間會小很多。此外,CVQ也可以用在Mean/Residual vector quantization (參見乘碼) 技術的余值向量上。
算法
第一步:
將原視頻切割成大小為n (通常n = 4 x 4 = 16) 且不相重疊的方塊,每一個方塊都經過一個以邊的方向來做分類的分類器,將其歸類為M類當中的一類;這些類別可能包括暗視頻方塊 (Shade block,沒什麼明顯梯度的方塊) ,中度範圍方塊 (Midrange block,具有中等梯度但無明顯邊的方塊) ,垂直邊方塊,水平邊方塊,或邊方塊,以及混合型方塊 (有邊但方向不清楚)。
第二步:
每一個分類後的方塊向量各以其所屬之編碼簿做編碼。編碼簿的大小可以各有不同,分別為,,而且每一個方塊在選擇最接近的向量時,也可以採用不同的有損估算函式。整個碼向量數目為:。
第三步:
將所選出的碼向量指針送給接收端,接收端則用這些指針解碼。
編碼簿
每一個視頻向量,X,與一組代表性樣本或碼向量(Codevectors), ,作比對的工作。這些碼向量共同組成的即為 編碼簿(Codebook)。
編碼簿的產生,一般是從將要壓縮的視頻集中選出幾張具有代表性的視頻作為訓練集(Training set),然後以此訓練集作出編碼簿。這個方法的好處是沒有必要知道關於這些視頻之統計數據或相關信息。
區域編碼簿
一般而言,要編碼某一張特定的視頻,最最佳化的編碼簿應為使用這張視頻本身為訓練集所產生的,此種編碼簿稱為區域編碼簿(Local codebook)。
使用區域編碼簿通常會有相當好的壓縮效率,這是因為該視頻所特有之視頻特徵(如線、邊等等)都會被自己的區域編碼簿所充分地考慮進去,因而都找得到足以代表的碼向量。
然而,區域編碼簿會有兩大缺點:首先,每編碼一張視頻就得產生它所獨用的編碼簿,這是相當費時的工作,也會讓即時處理變的不可能;其次,區域編碼也得提交給接收端,這個額外的數據量會大大地降低壓縮效率。
通用編碼簿
要解決區域編碼所帶來的問題,可以使用多張具代表性的視頻作為訓練集,並產生通用編碼簿(Global codebook)。
如果要編碼的視頻屬於同一類(就解析度、視頻特色、詳細內容等等而言),全體編碼也將導致很好的效果;反之,如果要編碼的視頻有很大的不同,通用編碼簿的效率可能就會遠遠不如區域編碼,尤其是如果所選用的訓練集又很小的情況下。