%Programa: Convolución
%Descripción: Calcula la convolución usando conv2() e imfilter() de matlab
%Autor: FJHL
%Fecha Inicial: 31/Agosto/2015
%Fecha Actualización: 18/Agosto/2016
close all;
clear all;
clc;

I=imread('../images/street.png');
% I2=imread('../images/office_2.jpg');

Isub=double(I(1:4:end,1:4:end));

K=(1/9)*ones(3,3);
K1=[1 2 1;0 0 0;-1 -2 -1];
K2=[-1 0 1;-2 0 2;-1 0 1];
%K=[0 1 0;1 -4 1;0 1 0];
%K=[1 1 1;1 -8 1;1 1 1];
KS=[0 -1 0;-1 5 -1;0 -1 0];

%1. Usando conv2
Iconv1=conv2(Isub,K1);%Note que el resultado es una imagen con diferente tamaño al de la original
Iconv2=conv2(Isub,K2);

MagGrad=sqrt(Iconv1.^2 + Iconv2.^2);

%2. Usando imfilter
% GaussianFilter=fspecial('gaussian',[7 7],2.5); %fspecial(type): average,laplacian,sobel
% IGF=imfilter(Isub,GaussianFilter);
IGF_conv=imfilter(Isub,K,'conv');%se puede especificar si queremos conv o correlación
IGF_corr=imfilter(Isub,K,'corr');

% I2_conv=imfilter(I2,KS,'conv');

figure;
imagesc(I);
colormap gray;

figure;
imagesc(MagGrad);
colormap gray;

figure;
imagesc(IGF_conv);
colormap gray;
figure;
imagesc(IGF_corr);
colormap gray;

% figure;
% imagesc(I2);
% figure;
% imagesc(I2_conv);
