zoukankan      html  css  js  c++  java
  • 【转】矢量量化

    原文地址:http://wenku.baidu.com/view/fbdb7dfa770bf78a64295405.html

    1 定义

    标量量化:把每个像素的颜色用一个0255之间的整数值表示。

    矢量量化:把几个像素组成的像素块,用一个特定码书中的像素块来表示,码书中像素块的数目,一般远小于这些像素块所有可能颜色的组合。

    在图像压缩中的矢量量化:

      

    矢量量化的使用

    如果一个2x2像素的小块,每像素有8位表示,则所有的像素块的可能取值有:232=4G种,可以选择一个远远小于这个数的数n,作为码书中码的个数,然后对图像中的每个块(矢量),用一个码书中的码来近似,这样只需用这个码的编号来编码这个图像矢量即可,因此每一个小块,最后都只需用log2n个位来表示,由此达到压缩的目的。

     

    3 图像块与码书中码的匹配

    图像块与码书中码的匹配

    设图像块B=(b1, b2, , bn)
    码矢量:C=(c1, c2, , cn)

    图像块与码矢量的匹配程度,由它们之间的“距离”来度量,一般d(B, C)可取如下之一:

    Σ|bi - ci|

    Σ(bi – ci)2

    Max|bi - ci|

    d(B, C) 可以看成失真程度的一种度量(BC表示时)

     

    4.1 LBG算法

    LBG算法是由Linde, Buzo 和 Gray三位学者提出的方法。其主要的思想是:从一组码矢量出发,将所有的图像矢量进行划分,然后再重新计算码矢量,直到码矢量的变化收敛时,即完成了码书的选择。

    主要步骤:

    1随意选取n个图像块作为码矢量

    2由这n个码矢量对所有的图像块进行划分,即分成n个集合,使每个集合中的图像块,都是与各码矢量距离中,与对应的码矢量的距离最小的

    3由这n个集合的重心,得到n个新的码矢量

    4如果这些个码矢量与原来的码矢量变化不大(收敛),就完成码书的训练,否则重新进行23

     

    4.2 例子

    假设每像素8位,分成两个像素的小块。

    图像共有24个像素,12个小块:
    B1=(32,32), B2=(60,32), B3=(32,50), B4=(60,50), B5=(60,150), B6=(70,140), B7=(200,210), B8=(200,32), B9=(200,40), B10=(200,50), B11=(215,50), B12=(215,35)

    初始码书:C1=(70,40), C2=(60,120), C3=(210,200), C4=(225, 50)

     

    根据上图,很容易确定初始划分:
    P1 = (B1, B2, B3, B4), P2=(B5, B6), P3=(B7), P4=(B8, B9, B10, B11, B12)

    平均失真为D(可用ΔD/D<ζ作为收敛判断准则)
    mean({1508, 164, 1544, 200, 900, 500, 200, 949, 725, 625, 100, 325}) = 645

    计算4个新的码矢量为:
    {(B1+B2+B3+B4)/4, (B5+B6)/2, B7, (B8+B9,B10,B11,B12)/5},所以新的码矢量为:
    C1=(46,41), C2=(65, 145), C3=(200,210), C4=(206,41)

  • 相关阅读:
    2017——我们为什么选择JAVA?JAVA的发展方向和学习方法(必看)
    Java
    4中引用(强,软,弱,虚)侧重弱引用
    面试常见问题
    一个牛人给java初学者的建议
    java转换图片压缩生成webp格式
    JVM-String常量池与运行时常量池
    轮滑基础(一)(前摔,葫芦步,推步,A字转弯,弓步转弯)
    单词本
    可空值 DateTime? ToString("yy-MM-dd")
  • 原文地址:https://www.cnblogs.com/irish/p/3147841.html
Copyright © 2011-2022 走看看