clear all; clearvars; close all; clc;

x = imread('baboonbw.png');
x = double(x);
Xgray = x;
% Original 496 x 496 image in gray scaele
figure(1);
imagesc(Xgray);
colormap(gray);
axis square;

p=4;
Q = p*8./hilb(8);
%Q = [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;];
n=8;
C = zeros(n);
for i=1:n
    for j=1:n
        C(i,j)=cos((i-1)*(2*j-1)*pi/(2*n));
    end
end
C=sqrt(2/n)*C;
C(1,:)=C(1,:)/sqrt(2);
%C(1,:)=1/sqrt(2);
%C_temp=C

Xf = zeros(496,496);
for i= 1:8:496
    for j = 1:8:496
        % Quantizize
        X = Xgray(i:i+7,j:j+7);
        Xd = double(X);
        Xc = Xd - 128;
        Y = dct(dct(Xc')');
        Yq = round(Y./Q);
        % Dequantizize
        Ydq = Yq.*Q;
        Xdq = C'*Ydq*C;
        Xe = Xdq + 128;
        Xf(i:i+7, j:j+7) = uint8(Xe);
    end
end
figure(2);
imagesc(uint8(Xf), [0,255]);
colormap(gray)
axis square;