有限状态VQ(Finite state vector quantization, FSVQ)是有记忆性的VQ(Vector quantization, VQ),它可以用一个有限状态机(Finite-state machine)来描述,其中每一个状态各代表一个分开的VQ编码簿。
概要有限状态VQ与分类VQ(Classified vector quantization,CVQ)相同的是都使用好几个小号编码簿而不是单一一个大型的编码簿。但是,由于FSVQ是利用下一状态函数(Next-state function)来决定哪一个编码簿,而非分类器,因此并没有CVQ所遭遇的问题,像是送与不送用以指明所选用之编码簿的额外信息。下一状态函数是以目前的状态(即其编码簿)及目前的输出码向量为输入,以另一个状态的函数为输出。使用FSVQ的优点是因为相邻的像素方块通常是相似的,因此可以利用这种相关性或累赘,在知道前面方块的结果后,选择一个合适的编码簿。实验的结果显示,FSVQ改善了VQ的效率。1
算法第一步:
将原视频切割成大小为n(一般为n = 4 x 4 = 16)而且不相重叠的方块。这些方块排顺序成为一串视频向量,。
第二步:
给定一个起始状态及其连带之编码簿,我们首先为第一个视频向量,,编码,找出中和它最接近的码向量,,提交的指针给接收端。
第三步:
以前一个状态、及前一个状态的输出码向量做为下一状态函数f(.)的输入,求出下一个状态,即;使用下一个状态的编码簿为下一个视频向量做编码;假设从中所找得最接近的码向量为,则提交在中的指针给接收端。
第四步:
以同样的程序为其余的视频向量做编码(即,求新的状态,然后从中找出与最接近的码向量并提交奇指针给接收端)。
如前所述,由于下一个状态是以前一个状态以及输出码向量(而不是视频向量本身)的函数,因此接收端可以完全与发送端同步地改变状态而不需要使用额外的信息。但是,这也为这个方法带来了一个缺点:如果发送线发生错误,这个错误会一直影响下去而可能导致即严重的重建误差。2
编码簿每一个视频向量,X,与一组代表性样本或码向量(Codevectors),,作比对的工作。这些码向量共同组成的即为编码簿(Codebook)。
区域编码簿一般而言,要编码某一张特定的视频,最优化的编码簿应为使用这张视频本身为训练集所产生的,此种编码簿称为区域编码簿(Local codebook)。
使用区域编码簿通常会有相当好的压缩效率,这是因为该视频所特有之视频特征(如线、边等等)都会被自己的区域编码簿所充分地考虑进去,因而都找得到足以代表的码向量。
然而,区域编码簿会有两大缺点:首先,每编码一张视频就得产生它所独用的编码簿,这是相当费时的工作,也会让即时处理变的不可能;其次,区域编码也得提交给接收端,这个额外的数据量会大大地降低压缩效率。1
通用编码簿要解决区域编码所带来的问题,可以使用多张具代表性的视频作为训练集,并产生通用编码簿(Global codebook)。
如果要编码的视频属于同一类(就分辨率、视频特色、详细内容等等而言),全体编码也将导致很好的效果;反之,如果要编码的视频有很大的不同,通用编码簿的效率可能就会远远不如区域编码,尤其是如果所选用的训练集又很小的情况下。1
本词条内容贡献者为:
胡启洲 - 副教授 - 南京理工大学