Matlab离散余弦变换算法给我错误的系数

时间:2018-12-03 17:28:18

标签: algorithm matlab dct

我正在尝试对尺寸为256的.ppm图像使用二维DCT。这是用于我的脚本的公式。

enter image description here

问题是当我将我的系数与 官方的dct2 matlab功能都不同。但是我仍然可以使用逆公式并获得完全相同的图像。系数错误怎么办?如何更改才能获得正确的系数?

sum = 0;
for x=1:32
  for y=1:32
    for u=1:8
      for v=1:8
        if(u ~= 0 && v ~= 0)
          T(x,y,u,v) = (1/4)*1/sqrt(2)*1/sqrt(2)*cos(((2*x+1)*pi*u)/16)*cos(((2*y+1)*pi*v)/16);
        else
          T(x,y,u,v) = (1/4)*1*1*cos(((2*x+1)*pi*u)/16)*cos(((2*y+1)*pi*v)/16);
        end
        DCTT(u,v) = A(x*u,y*v)*T(x,y,u,v);
        disp(DCTT(u,v));
      end
    end
  end
end

save dct.num DCTT;
fid = fopen('dct.num');
D = textscan(fid,'%f', 'delimiter', ',');
fclose(fid);
disp(D);

sum=0;
for x=1:32
  for y=1:32
    for u=1:8
      for v=1:8
        A(x*u,y*v) = A(x*u,y*v) + (DCTT(u,v)*T(x,y,u,v));
      end
    end
  end
end

imwrite (A, 'imageAfter.ppm')

imshow(A);

0 个答案:

没有答案