2

我尝试在 matlab 中编写一个 m 文件,在 256x256 尺寸的图像中执行 jpeg 压缩,在下面的代码中,我将图像拆分为 8x8 子块并执行 dct 变换和量化后。我的问题是,我还希望在量化之后将新生成的值保留在矩阵中,以便拥有一个 256x256 矩阵,其中也包含 0 值,然后执行 zig zag 操作。我的代码如下:

clc;
clear all;
data=imread('cameraman.tif');
x=double(data);

%length of image with no compression
len=256*256;
data1=uint8(zeros(size(data)));

%quantization weigting table

   qv1= [ 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];

      final=zeros(256,256);

      count1=0;
      for row=1:8:256
          for column = 1:8:256
          %shift down pixel
          x=double(data(row:row+7,column:column+7))-128;
          %8x8 dct transform
          xf=dct2(x);
          %quantization
          xf=round(xf./qv1).*qv1;
          final(row+7,column+7)=xf;
          count1=count1+sum(xf(:)~=0);
          %inverse dct transformation,
          data1(row:row+7,column:column+7)=idct2(xf)+128;
          end
      end

我想制作上面描述的矩阵的“最终”变量。我有错误。我不知道如何更改代码才能正确。

4

1 回答 1

0

似乎不是 final(row+7,column+7) 你应该有 final(row:row+7,column:column+7),否则你有一个分配不匹配。此外,循环内的转换似乎没有必要,因为您在输入之前double已经转换为。double

于 2013-07-18T09:09:47.607 回答