clear all; clearvars; close all; clc;
x=imread('Sedona_AZ.JPG');
figure(1);
axis on;
imagesc(x);
title('Sedona, AZ');
x_size = size(x)
x_temp = uint8(x);
x=double(x);
r=x(:,:,1);
g=x(:,:,2);
b=x(:,:,3);
xgray=0.2126*r+0.7152*g+0.0722*b;
xgray=uint8(xgray);
n=8;
C = zeros(n);
for i=2:n
for j=1:n
C(i,j)=sqrt(2/n)*cos((i-1)*(j-1/2)*pi/n);
end
end
C(1,1:n)=ones(1,n)/sqrt(n);
xgray_size = size(xgray)
sizexgray8 = zeros(size(xgray)/8);
[row,col] = size(sizexgray8);
for i=1:row;
for j=1:col;
r1=r(i*8-7:i*8, j*8-7:j*8);
g1=g(i*8-7:i*8, j*8-7:j*8);
b1=b(i*8-7:i*8, j*8-7:j*8);
r2=double(r1);
r3=r2-128;
g2=double(g1);
g3=g2-128;
b2=double(b1);
b3=b2-128;
Y = 0.299*r3 + 0.587*g3 + 0.148*b3;
U = b3 - Y;
V = r3 - Y;
ryY=C*Y*C';
gyU=C*U*C';
byV=C*V*C';
p=8;
QyJPEG = [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;];
Qy=p.*QyJPEG;
ryYq=round(ryY./Qy);
QcJPEG = [17 18 24 47 99 99 99 99; 18 21 26 66 99 99 99 99; 24 26 56 99 99 99 99 99; 47 66 99 99 99 99 99 99; 99 99 99 99 99 99 99 99; 99 99 99 99 99 99 99 99; 99 99 99 99 99 99 99 99; 99 99 99 99 99 99 99 99;];
Qc=p.*QcJPEG;
gyUq=round(gyU./Qc);
byVq=round(byV./Qc);
ryYdq=ryYq.*Qy;
gyUdq=gyUq.*Qc;
byVdq=byVq.*Qc;
rxYdq=C'*ryYdq*C;
gxUdq=C'*gyUdq*C;
bxVdq=C'*byVdq*C;
rxdq = bxVdq + rxYdq;
bxdq = gxUdq + rxYdq;
gxdq = (rxYdq - 0.299*rxdq - 0.114*bxdq)/0.587;
rxe=rxdq+128;
gxe=gxdq+128;
bxe=bxdq+128;
rxe=uint8(rxe);
gxe=uint8(gxe);
bxe=uint8(bxe);
Xe(i*8-7:i*8, j*8-7:j*8, 1)=rxe;
Xe(i*8-7:i*8, j*8-7:j*8, 2)=gxe;
Xe(i*8-7:i*8, j*8-7:j*8, 3)=bxe;
end
end
figure(3);
axis on;
imagesc(uint8(Xe));
title(['p = ',num2str(p)]);
x_size =
2848 4288 3
xgray_size =
2848 4288