我正在尝试对尺寸为256的.ppm图像使用二维DCT。这是用于我的脚本的公式。
问题是当我将我的系数与 官方的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);