• JPEG基本系统


      JPEG标准主要采用了基于块的DCT变换编码,同时综合应用了游程编码和霍夫曼编码等。其有损压缩算法编码的大致流程如下:第一步,对图像块(把整个图像分成多个 ( 8 imes 8 ) 子块)进行DCT变换,得到DCT系数;第二步,根据量化表对DCT系数进行量化;第三步,对DCT系数中的直流(DC)系数进行差分预测,对交流(AC)系数按Zig-Zig顺序重新排序;第四步,对第三步得到的系数进行霍夫曼编码。

    图1  JPEG基本系统框图

      1. FDCT和IDCT:JPEG基本系统以DCT变换为基础,采用固定的 ( 8 imes 8 ) 子块。其表达式如下:

    egin{equation}
    F(u,v)=C(u)C(v)sum_{i=0}^{7}sum_{j=0}^{7}f(i,j)
    cos{left [ frac{(2i+1)upi }{16} ight ] }
    cos{left [ frac{(2j+1)vpi }{16} ight ] }
    end{equation}

    egin{equation}
    f(i,j)=sum_{i=0}^{7}sum_{j=0}^{7}F(u,v)C(u)C(v)
    cos{left [ frac{(2i+1)upi }{16} ight ] }
    cos{left [ frac{(2j+1)vpi }{16} ight ] }
    end{equation}

    egin{equation}
    C(u),C(v)=left{egin{matrix}
    1/ sqrt{2} & u,v=0 \
    1 & other
    end{matrix} ight.
    end{equation}

      在JPEG基本系统中,( f(x,y) ) 为8bit 像素,即取值范围为 ( 0sim 255 ) ,由DCT变换可求得DC系数 ( F(0,0) ) 的取值范围为 ( 0 sim 2040 ) ,实际上,同样可以求出 ( F(0,0) ) 是图像均值的8倍,除   ( F(0,0) ) 外的其他系数为AC系数。

      2. 量化与逆量化:对低频系数缩小,对高频系数放大,是大部分幅值较小的系数在量化后变为0,然后只剩下一小部分系数需要存储,从而大大压缩了数据量。量化的过程就是每个DCT系数除以各自的量化步长并取整,然后得到量化后的系数:

    egin{equation}
    ilde{F}(u,v)=INTleft [ frac{F(u,v)}{S(u,v)} pm 0.5 ight ]
    end{equation}

      人眼视觉系统的频率频率响应,随着空间频率的增加而下降,且对于色度分量的下降比亮度分量要快。为此,JPEG为亮度分量和色度分量分别推荐了量化表如下:

      亮度量化表:

    16 11 10 16 24 40 51 61
    12 12 14 19 26 58 60 55
    14 13 16 24 40 57 69 56
    14 17 22 29 51 87 80 62
    18 22 37 56 68 109 103 77
    24 35 55 64 81 104 113 92
    49 64 78 87 103 121 120 101
    72 92 95 98 112 100 103 99

      色度量化表

     17 18 24 47  99  99  99  99 
    18  21  26  66  99  99   99 99 
    24  26  56  99  99  99  99  99 
    47  66  99  99  99  99  99  99 
    99  99  99  99  99  99  99  99 
    99  99  99  99  99  99  99  99 
    99  99  99  99  99  99  99  99 
    99  99  99  99  99  99  99  99 
    egin{tabular}{|c|c|c|c|c|c|c|}
    
        hline
    
        multirow{2}{*}{Method}&
    
        multicolumn{3}{c|}{C}&multicolumn{3}{c|}{ D}crcline{2-7}
    
        &Precision&Recall&F1-Measure&Precision&Recall&F1-Measurecr
    
        hline
    
        hline
    
        A&0.7324&0.7388&0.7301&0.6371&0.6462&0.6568crhline
    
       B&0.7321&0.7385&0.7323&0.6363&0.6462&0.6559crhline
    
        C&0.7321&0.7222&0.7311&0.6243&0.6227&0.6570crhline
    
        D&0.7654&0.7716&0.7699&0.6695&0.6684&0.6642crhline
    
        E&0.7435&0.7317&0.7343&0.6386&0.6488&0.6435crhline
    
        F&0.7667&0.7644&0.7646&0.6609&0.6687&0.6574crhline
    
        G&{f 0.8189}&{f 0.8139}&{f 0.8146}&{f 0.6971}&{f 0.6904}&{f 0.6935}cr
    
        hline
    
        end{tabular}
    表格latex

      3. 对量化系数编码:对于由量化器输出的量化系数,JPEG采用定长和变长相结合的编码方法,具体如下:

      (1)直流(DC)系数,由于图像中相邻的两个图像块的DC系数一般很接近,所以JPEG对量化后的系数采用无失真DPCM编码,即对当前块的DC系数 ( F_i(0,0) ) 和已编码的相邻块DC系数( F_{i-1}(0,0) ) 的差值进行编码。

    egin{equation}
    Delta F(0,0)=F_i(0,0)-F_{i-1}(0,0)
    end{equation}

      按照其取值范围,JPEG将差值分为12类。编码时,将DC系数差值表示为“符号1 符号2”的形式,其中符号1为从表中查得的类别,实际上就是用自然二进制码表示DC系数差值所需的最少比特数,符号2为实际的差值。对符号1,即DC系数差值的类别,采用霍夫曼编码。由于亮度和色度分量的DC系数差值统计特性差别较大,所以JPEG为两者分别推荐了霍夫曼表。对符号2,采用二进制码,负数用整数的反码表示。例如:差值为2,用于“10”表示;差值为-2,用“01”表示。

    类别 取值 类别 取值
    0 0 6 -63~-32,32~63
    1 -1,1 7 -127~-64,64~127
    2 -3,-2,2,3 8 -255~-128,128~255
    3 -7~-4,4~7 9 -511~-256,256~511
    4 -15~-8,8~15 10 -1023~-512,512~1023
    5 -31~-16,16~31 11 -2047~-1024,1024~2047

       2.交流(AC)系数:Z型扫描(系数的重新排列):因为经过量化以后,AC系数中出现较多的0,所以JPEG采用对0系数的游程长度编码,即将所有AC系数表示为 ( 00cdots 0X,00cdots 0X,cdots ,00cdots 0X,cdots  ),其中,X表示非0值。若干个0和一个非0值X组成一个编码的基本单位,连续零的个数越多,编码效率就越高。因此,根据DCT系数量化后的分布特点,对DCT系数采取如图所示的Z型扫描方式,以使大多数出现在右下角的0能够连起来,出现更多的连0。熵编码:对于连0,可以用其游程即个数表示。同DC系数差值编码类似JPEG

    1.  
  • 相关阅读:
    湘湖的雪
    Lua 如何调用C打包的动态库
    自己制作一个USB自动挖矿器
    二十五块DIY 带屏幕可远程的温湿度传感器
    来看下,C# WebService WSDL自动生成代码,数组参数的BUG。。。ArrayOfString
    记一次非常规方法对接硬件设备(Grason Stadler GSI 61)
    京享值超8万的京东钻石用户告诉你套路是这样的
    C# 显示纯文本对齐封装(控制显示字体长度)
    [开源] C# 封装 银海医保的接口
    [开源]使用C# 对CPU卡基本操作封装
  • 原文地址:https://www.cnblogs.com/jianle23/p/13931323.html
Copyright © 2020-2023  润新知