im = imread('AlfredoBorba_TuscanLandscape.jpg');

[X, Y, ~] = size(im);
% Crop image
im = im(1:X-mod(X,8), 1:Y-mod(Y,8), :);

% Visualization
figure(1)
subplot(3,3,1)
imshow(im)
title('Original image')
QF = 1:2:16;

for ind = 1:8
    %% Encoding
    YCbCr_image = EQA3YM_RGB_to_YCbCr(im);
    spectrum = EQA3YM_DCT(YCbCr_image);
    quant_spectrum = EQA3YM_quantizer(spectrum, QF(ind));
    zigzag = EQA3YM_zigzag(quant_spectrum);
    rle = EQA3YM_rle_encoder(zigzag);

    %% Decoding
    zigzag2 = EQA3YM_rle_decoder(rle);
    quant_spectrum2 = EQA3YM_izigzag(zigzag2, size(im,1), size(im,2));
    spectrum2 = EQA3YM_dequantizer(quant_spectrum2, QF(ind));
    YCbCr_image2 = EQA3YM_IDCT(spectrum2);
    im2 = EQA3YM_YCbCr_to_RGB(YCbCr_image2);

    %% Visualization
    subplot(3,3,ind+1)
    imshow(im2)
    title(sprintf('Compressed and decompressed image\nQF: %d\nCompression: %4.1fx', QF(ind), numel(im)/numel(rle)))
    
end
