我正在学习图像压缩和重建方面的矢量量化,我想知道为什么我们要从训练集中形成初始码本?由于我们只传输代码字的索引,为什么我们不将训练集视为最终的代码簿。这将导致更准确的重建,对吧?会有什么区别?
答案 0 :(得分:0)
码本不是要传输的图像。码字是k维码本中的行的参考点。注意:码本本质上是一个二维数组,其中行号是代码字。
实施例: 1000个训练图像的大小为512x512。 如果我们想要创建一个256的码本,将512x512图像压缩成128x128 VQ(矢量量化)索引表,那么我们的码本需要16个维度(即,我们原始图像中的每个4x4块(16个值)被压缩为1个值是一个代码字)。 无论使用哪种聚类算法(例如LBG),都会找到最接近的16个值,这些值最能代表1000个训练图像中的4x4块。这16个值将被放入码本中。在找到最好的256个组或16个值的簇之后,可以使用该码本。
这个码本需要发送到接收器一次。与1000个512x512训练图像相比,它是256行,16维结构。您将128x128索引表发送给接收者,然后接收者可以在码本中查找位置并重建512x512图像。这并不准确,因为这种类型的压缩是有损的。