Я пытаюсь использовать двумерный DCT для изображения .ppm размером 256. Вот формула, которая использовалась для моего сценария.
Проблема в том,когда я сравниваю мой коэффициент с коэффициентом официальной функции 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);