JPEG编解码器的简要仿真(无代码,无真相)

         图像、视频压缩的必要性:

         设图像为720 * 480, 且为RGB图,每个色道位深为8, 故该图像的大小为:720 * 480 * 3 B   = 0.99 MB(很大,很吓人.),如果是视频,就更是吓人.

       

         图像、视频压缩的可行性:

         1. 视觉冗余(下采样,量化)

         2. 空间时间冗余 (帧内帧间预测)

         3. 数学冗余   (熵编码)

 

        下面来简要仿真JPEG的编解码过程,matlab代码如下:

 

clear
clc

% 原始像素值
pix = [52    55    61    66    70    61    64    73;...
       63    59    66    90   109    85    69    72;...
       62    59    68   113   144   104    66    73;...
       63    58    71   122   154   106    70    69;...
       67    61    68   104   126    88    68    70;...
       79    65    60    70    77    63    58    75;...
       85    71    64    59    55    61    65    83;...
       87    79    69    68    65    76    78    94]

% 差值
X = pix - 128

%变换矩阵
A = dctmtx(8)

% DCT变换
Y = round(A * X * A')

% JPEG亮度量化表
Qstep = [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]

% 量化
QDCT = round(Y ./ Qstep)

% 因为熵编码无损,所以在此省略了熵编码和熵解码

% 反量化
decY = QDCT .* Qstep

% 反DCT
decX = round(A' * decY * A)

%恢复
decPix = decX + 128

%比较
delta = decPix - pix



         结果为:

pix =

    52    55    61    66    70    61    64    73
    63    59    66    90   109    85    69    72
    62    59    68   113   144   104    66    73
    63    58    71   122   154   106    70    69
    67    61    68   104   126    88    68    70
    79    65    60    70    77    63    58    75
    85    71    64    59    55    61    65    83
    87    79    69    68    65    76    78    94


X =

   -76   -73   -67   -62   -58   -67   -64   -55
   -65   -69   -62   -38   -19   -43   -59   -56
   -66   -69   -60   -15    16   -24   -62   -55
   -65   -70   -57    -6    26   -22   -58   -59
   -61   -67   -60   -24    -2   -40   -60   -58
   -49   -63   -68   -58   -51   -65   -70   -53
   -43   -57   -64   -69   -73   -67   -63   -45
   -41   -49   -59   -60   -63   -52   -50   -34


A =

    0.3536    0.3536    0.3536    0.3536    0.3536    0.3536    0.3536    0.3536
    0.4904    0.4157    0.2778    0.0975   -0.0975   -0.2778   -0.4157   -0.4904
    0.4619    0.1913   -0.1913   -0.4619   -0.4619   -0.1913    0.1913    0.4619
    0.4157   -0.0975   -0.4904   -0.2778    0.2778    0.4904    0.0975   -0.4157
    0.3536   -0.3536   -0.3536    0.3536    0.3536   -0.3536   -0.3536    0.3536
    0.2778   -0.4904    0.0975    0.4157   -0.4157   -0.0975    0.4904   -0.2778
    0.1913   -0.4619    0.4619   -0.1913   -0.1913    0.4619   -0.4619    0.1913
    0.0975   -0.2778    0.4157   -0.4904    0.4904   -0.4157    0.2778   -0.0975


Y =

  -415   -29   -62    24    55   -20    -1     3
     7   -21   -62     9    11    -7    -6     6
   -46     8    77   -25   -30    10     7    -5
   -50    12    35   -15    -9     6     0     3
    11    -8   -13    -1    -1     1    -4     1
    -9     1     3    -3    -1     0     2    -1
    -4    -1     2    -1     2    -3     1    -2
    -1    -1    -1    -2    -1    -1     0     0


Qstep =

    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


QDCT =

   -26    -3    -6     2     2    -1     0     0
     1    -2    -4     0     0     0     0     0
    -3     1     5    -1    -1     0     0     0
    -4     1     2    -1     0     0     0     0
     1     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0


decY =

  -416   -33   -60    32    48   -40     0     0
    12   -24   -56     0     0     0     0     0
   -42    13    80   -24   -40     0     0     0
   -56    17    44   -29     0     0     0     0
    18     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0


decX =

   -74   -57   -62   -70   -63   -65   -65   -46
   -76   -66   -62   -45   -24   -38   -60   -55
   -72   -71   -59   -15    19   -11   -55   -60
   -63   -70   -58    -6    27   -12   -58   -56
   -58   -68   -65   -28    -7   -42   -70   -52
   -56   -64   -73   -60   -48   -69   -78   -50
   -49   -52   -71   -74   -61   -66   -68   -46
   -39   -40   -62   -72   -53   -47   -50   -40


decPix =

    54    71    66    58    65    63    63    82
    52    62    66    83   104    90    68    73
    56    57    69   113   147   117    73    68
    65    58    70   122   155   116    70    72
    70    60    63   100   121    86    58    76
    72    64    55    68    80    59    50    78
    79    76    57    54    67    62    60    82
    89    88    66    56    75    81    78    88


delta =

     2    16     5    -8    -5     2    -1     9
   -11     3     0    -7    -5     5    -1     1
    -6    -2     1     0     3    13     7    -5
     2     0    -1     0     1    10     0     3
     3    -1    -5    -4    -5    -2   -10     6
    -7    -1    -5    -2     3    -4    -8     3
    -6     5    -7    -5    12     1    -5    -1
     2     9    -3   -12    10     5     0    -6

 

         上述仿真结果和冈萨雷斯书上的结果几乎完全一致(有个别像素不一致,极有可能是matlab过早利用浮点数代替无理数所致),从而也说明上述仿真过程是正确的.

 

         JPEG编解码原理就是这样的.

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值