% %part 3a
x=imread('mj.jpg');
%x=xg(1:600,1:600);
%x=double(x);
r=x(:,:,1);g=x(:,:,2);b=x(:,:,3);
figure(1);imagesc(x);
title('original')
%xgray=0.2126*r+0.7152*g+0.0722*b;
%figure(1);imagesc(xgray);colormap(gray)
xza=zeros(600,600);
%qy = [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];
%xb=xgray(181:188,281:288)
%xb
%figure(2); imagesc(uint8(xb));colormap(gray)
for i=1:75 %since 600/8 = 75
   for j=1:75
    red=r(i*8-7:i*8,j*8-7:j*8);
    blue=b(i*8-7:i*8,j*8-7:j*8);
    green=g(i*8-7:i*8,j*8-7:j*8);
    %xz=xgray(i*8-7:i*8,j*8-7:j*8);

    %part 3b
    red2=double(red);
    blue2=double(blue);
    green2=double(green);

    red3=red2-128;
    blue3=blue2-128;
    green3=green2-128;

    yred=dct(dct(red3')'); %since y=dct(dct(x')')=> y=c*xc*c';
    yblue=dct(dct(blue3')');
    ygreen=dct(dct(green3')');

    %part 3c
    p=1; %also p=2 and p=4
    q=p*8./hilb(8);
    yred1=round(yred./q);
    yblue1=round(yblue./q);
    ygreen1=round(ygreen./q);

    %part 3d
    yred2=yred1.*q;
    yblue2=yblue1.*q;
    ygreen2=ygreen1.*q;

    yred3=idct(idct(yred2')');
    yblue3=idct(idct(yblue2')');
    ygreen3=idct(idct(ygreen2')');

    yred4=yred3+128;
    yblue4=yblue3+128;
    ygreen4=ygreen3+128;

    yred5=uint8(yred4);
    yblue5=uint8(yblue4);
    ygreen5=uint8(ygreen4);

    cr(i*8-7:i*8,j*8-7:j*8,1)=yred5;
    cr(i*8-7:i*8,j*8-7:j*8,3)=yblue5;
    cr(i*8-7:i*8,j*8-7:j*8,2)=ygreen5;

   end
end
figure(3);imagesc(cr);
title('p=1')

for i=1:75 %since 600/8 = 75
   for j=1:75
    red=r(i*8-7:i*8,j*8-7:j*8);
    blue=b(i*8-7:i*8,j*8-7:j*8);
    green=g(i*8-7:i*8,j*8-7:j*8);
    %xz=xgray(i*8-7:i*8,j*8-7:j*8);

    %part 3b
    red2=double(red);
    blue2=double(blue);
    green2=double(green);

    red3=red2-128;
    blue3=blue2-128;
    green3=green2-128;

    yred=dct(dct(red3')'); %since y=dct(dct(x')')=> y=c*xc*c';
    yblue=dct(dct(blue3')');
    ygreen=dct(dct(green3')');

    %part 3c
    p=2; %also p=2 and p=4
    q=p*8./hilb(8);
    yred1=round(yred./q);
    yblue1=round(yblue./q);
    ygreen1=round(ygreen./q);

    %part 3d
    yred2=yred1.*q;
    yblue2=yblue1.*q;
    ygreen2=ygreen1.*q;

    yred3=idct(idct(yred2')');
    yblue3=idct(idct(yblue2')');
    ygreen3=idct(idct(ygreen2')');

    yred4=yred3+128;
    yblue4=yblue3+128;
    ygreen4=ygreen3+128;

    yred5=uint8(yred4);
    yblue5=uint8(yblue4);
    ygreen5=uint8(ygreen4);

    cr(i*8-7:i*8,j*8-7:j*8,1)=yred5;
    cr(i*8-7:i*8,j*8-7:j*8,3)=yblue5;
    cr(i*8-7:i*8,j*8-7:j*8,2)=ygreen5;

   end
end
figure(4);imagesc(cr);
title('p=2')

for i=1:75 %since 600/8 = 75
   for j=1:75
    red=r(i*8-7:i*8,j*8-7:j*8);
    blue=b(i*8-7:i*8,j*8-7:j*8);
    green=g(i*8-7:i*8,j*8-7:j*8);
    %xz=xgray(i*8-7:i*8,j*8-7:j*8);

    %part 3b
    red2=double(red);
    blue2=double(blue);
    green2=double(green);

    red3=red2-128;
    blue3=blue2-128;
    green3=green2-128;

    yred=dct(dct(red3')'); %since y=dct(dct(x')')=> y=c*xc*c';
    yblue=dct(dct(blue3')');
    ygreen=dct(dct(green3')');

    %part 3c
    p=4; %also p=2 and p=4
    q=p*8./hilb(8);
    yred1=round(yred./q);
    yblue1=round(yblue./q);
    ygreen1=round(ygreen./q);

    %part 3d
    yred2=yred1.*q;
    yblue2=yblue1.*q;
    ygreen2=ygreen1.*q;

    yred3=idct(idct(yred2')');
    yblue3=idct(idct(yblue2')');
    ygreen3=idct(idct(ygreen2')');

    yred4=yred3+128;
    yblue4=yblue3+128;
    ygreen4=ygreen3+128;

    yred5=uint8(yred4);
    yblue5=uint8(yblue4);
    ygreen5=uint8(ygreen4);

    cr(i*8-7:i*8,j*8-7:j*8,1)=yred5;
    cr(i*8-7:i*8,j*8-7:j*8,3)=yblue5;
    cr(i*8-7:i*8,j*8-7:j*8,2)=ygreen5;

   end
end
figure(5);imagesc(cr);
title('p=4')
for i=1:75 %since 600/8 = 75
   for j=1:75
    red=r(i*8-7:i*8,j*8-7:j*8);
    blue=b(i*8-7:i*8,j*8-7:j*8);
    green=g(i*8-7:i*8,j*8-7:j*8);
    %xz=xgray(i*8-7:i*8,j*8-7:j*8);

    %part 3b
    red2=double(red);
    blue2=double(blue);
    green2=double(green);

    red3=red2-128;
    blue3=blue2-128;
    green3=green2-128;

    yred=dct(dct(red3')'); %since y=dct(dct(x')')=> y=c*xc*c';
    yblue=dct(dct(blue3')');
    ygreen=dct(dct(green3')');

    %part 3c
    p=10; %also p=2 and p=4
    q=p*8./hilb(8);
    yred1=round(yred./q);
    yblue1=round(yblue./q);
    ygreen1=round(ygreen./q);

    %part 3d
    yred2=yred1.*q;
    yblue2=yblue1.*q;
    ygreen2=ygreen1.*q;

    yred3=idct(idct(yred2')');
    yblue3=idct(idct(yblue2')');
    ygreen3=idct(idct(ygreen2')');

    yred4=yred3+128;
    yblue4=yblue3+128;
    ygreen4=ygreen3+128;

    yred5=uint8(yred4);
    yblue5=uint8(yblue4);
    ygreen5=uint8(ygreen4);

    cr(i*8-7:i*8,j*8-7:j*8,1)=yred5;
    cr(i*8-7:i*8,j*8-7:j*8,3)=yblue5;
    cr(i*8-7:i*8,j*8-7:j*8,2)=ygreen5;

   end
end
figure(6);imagesc(cr);
title('p=10')