%% Interpolação de uma imagem
%
% Nesta script, uma imagem será expandida na ordem de 2, e os pixels
% intermediários serão calculados via média simples dos seus vizinhos.
%
close all; close all; clc

%% Leitura da imagem

figure(1)
imagem1 = imread('Foto.jpg');
subplot(3,1,1)
imshow(imagem1)
title('imagem1 original')
pause(0.25)

figure(2)
imshow(imagem1)
title('2 - Imagem1 original')
pause(0.25)

%% Geração da imagem expandida
%
% Os pixels criados receberão valor inicialmente zero
%

imagem1_exp = uint8(zeros(2*size(imagem1,1),2*size(imagem1,2),3));
imagem1_exp(1:2:end,1:2:end,:) = imagem1;

figure(1)
subplot(3,2,3)
imshow(imagem1_exp)
title('imagem1 expandida')
pause(0.25)

figure(3)
imshow(imagem1_exp)
title('3 - Imagem1 expandida')
pause(0.25)

%% Interpolação
%
% Devido à natureza da expansão da imagem, a interpolação será dividida em
% 3 etapas:
%
% * Média simples das linhas e das colunas pares
% * Média simples das linhas ímpares e colunas pares
% * Média simples das linhas pares e colunas ímpares
%

imagem1_interp = imagem1_exp;

%% Interpolação: Etapa 1 - Linhas e colunas pares

for k = 1:3
    for i = 2:2:size(imagem1_exp,1)-1
        for j = 2:2:size(imagem1_exp,2)-1
            
            pixels = [imagem1_exp(i-1,j-1,k), imagem1_exp(i-1,j+1,k);
                      imagem1_exp(i-1,j-1,k), imagem1_exp(i+1,j+1,k)];
            
            pixel = (1/4)*sum(sum(pixels));
        
            imagem1_interp(i,j,k) = uint8(pixel);
            
        end
    end
end

figure(1)
subplot(3,2,4)
imshow(imagem1_interp)
title('Interpolação dos pixels de linhas e colunas pares')
pause(0.25)

figure(4)
imshow(imagem1_interp)
title('4 - Interpolação dos pixels de linhas e colunas pares')
pause(0.25)

%% Interpolação: Etapa 2 - Linhas ímpares e colunas pares

for k = 1:3
    for i = 3:2:size(imagem1_exp,1)-1
        for j = 2:2:size(imagem1_exp,2)-1
            
            pixels = [imagem1_interp(i-1,j,k), imagem1_interp(i+1,j,k);
             imagem1_interp(i,j-1,k), imagem1_interp(i,j+1,k)];
            
            pixel = (1/4)*sum(sum(pixels));
        
            imagem1_interp(i,j,k) = uint8(pixel);
            
        end
    end
end

figure(1)
subplot(3,2,5)
imshow(imagem1_interp)
title('Interpolação dos pixels de linhas ímpares e colunas pares')
pause(0.25)

figure(5)
imshow(imagem1_interp)
title('5 - Interpolação dos pixels de linhas ímpares e colunas pares')
pause(0.25)

%% Interpolação: Etapa 2 - Linhas pares e colunas ímpares

for k = 1:3
    for i = 2:2:size(imagem1_exp,1)-1
        for j = 3:2:size(imagem1_exp,2)-1
            
            pixels = [imagem1_interp(i-1,j,k), imagem1_interp(i+1,j,k);
             imagem1_interp(i,j-1,k), imagem1_interp(i,j+1,k)];
            
            pixel = (1/4)*sum(sum(pixels));
        
            imagem1_interp(i,j,k) = uint8(pixel);
            
        end
    end
end

figure(1)
subplot(3,2,6)
imshow(imagem1_interp)
title('Interpolação dos pixels de linhas pares e colunas ímpares')
pause(0.25)

figure(6)
imshow(imagem1_interp)
title('6 - Interpolação dos pixels de linhas pares e colunas ímpares')