Алгоритм дискретного косинусного преобразования Matlab, дающий мне неправильные коэффициенты - PullRequest
0 голосов
/ 03 декабря 2018

Я пытаюсь использовать двумерный DCT для изображения .ppm размером 256. Вот формула, которая использовалась для моего сценария.

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);
...