convolution


\documentclass[tikz,border=5mm]{standalone}


\colorlet{myorange}{orange!70!red!60!black}

\begin{document}
\begin{tikzpicture}[line join=round,transform shape]

\def\in{{{1,0,0,0,0,0,0},{1,1,0,0,0,0,1},{0,1,1,0,0,0,1,1},{0,0,1,1,1,1,1},{0,0,0,1,1,1,0},{0,0,0,0,1,0,0},{0,0,0,0,0,0,0}}}
\def\out{{{3,1,1,1,1},{3,3,2,2,4},{1,3,3,4,3},{1,1,4,3,4},{0,1,1,3,1}}}
\def\ker{{{1,0,1},{0,1,0},{1,0,1}}}

\pgfdeclarelayer{Original layer}
\pgfdeclarelayer{Result layer}
\pgfdeclarelayer{Kernel}
\pgfdeclarelayer{KernelOverlay}
\pgfdeclarelayer{Original2Kernel}
\pgfdeclarelayer{Kernel2Result}
\pgfsetlayers{Result layer, Kernel2Result, Kernel, Original layer, Original2Kernel, KernelOverlay}
%\pgfsetlayers{Result layer, Kernel2Result, Kernel, Original2Kernel, Original layer, KernelOverlay}

\begin{pgfonlayer}{Original layer}
	\begin{scope}[yslant=-.25,local bounding box=Ori]
		\fill[orange!20] (3,3) rectangle +(3,3);
		\draw[black] (0,0) grid (7,7);
		\draw[black,very thick] (0,0) rectangle (7,7);
		\foreach \i in {0,...,6}
		{
			\foreach \j in {0,...,6}
			{
				\pgfmathsetmacro{\x}{int(\in[\i][\j])}
				\path (\i+.5,\j+.5) node{\x};

			}
		}
		\path
		(3,3) coordinate (IN1)
		(3,6) coordinate (IN2)
		(6,6) coordinate (IN3)
		(6,3) coordinate (IN4);
		\path (Ori.north) node[above]{Imatge inicial};
	\end{scope}
\end{pgfonlayer}

\begin{pgfonlayer}{KernelOverlay}
	\begin{scope}[yslant=-.25,shift={(3,3)},
local bounding box=KerOv]
		\fill[yellow, opacity=0] (0,0) rectangle +(3,3);
		\foreach \i in {0,...,2}
		{
			\foreach \j in {0,...,2}
			{
				\node[font=\small, scale=0.7] at (\i+.75,\j+.1) {$\times \pgfmathparse{int(\ker[\i][\j]))}\pgfmathresult$};
			}
		}
	\end{scope}
\end{pgfonlayer}

\begin{pgfonlayer}{Kernel}
	\begin{scope}[yslant=-.25,shift={(8,5)},
local bounding box=Ker]
		\fill[white] (0,0) rectangle +(3,3);
		\draw[black] (0,0) grid (3,3);
		\draw[black,very thick] (0,0) rectangle (3,3);
		\foreach \i in {0,...,2}
		{
			\foreach \j in {0,...,2}
			{
				\pgfmathsetmacro{\x}{int(\ker[\i][\j])}
				\path (\i+.5,\j+.5) node{\x};
			}
		}
		\path
		(0,0) coordinate (KER1)
		(0,3) coordinate (KER2)
		(3,3) coordinate (KER3)
		(3,0) coordinate (KER4);
		\path (Ker.north) node[above=2mm]{Filtre};
	\end{scope}
\end{pgfonlayer}

\begin{pgfonlayer}{Result layer}
	\begin{scope}[yslant=-.25,shift={(13,5)},
	local bounding box=Res]
		\fill[green!20, opacity=1] (3,3) rectangle +(1,1);
		\draw[black] (0,0) grid (5,5);
		\draw[black,very thick] (0,0) rectangle (5,5);
		\foreach \i in {0,...,4}
		{
			\foreach \j in {0,...,4}
			{
				\pgfmathsetmacro{\x}{int(\out[\i][\j])}
				\path (\i+.5,\j+.5) node{\x};
			}
		}
		\path
		(3,3) coordinate (OUT1)
		(3,4) coordinate (OUT2)
		(4,4) coordinate (OUT3)
		(4,3) coordinate (OUT4);
		\path (Res.north) node[above]{Resultat};
	\end{scope}
\end{pgfonlayer}

\begin{pgfonlayer}{Original2Kernel}
\foreach \i in {1,2,3,4}
{
	\draw[red, dashed] (IN\i)--(KER\i);
}
\end{pgfonlayer}

\begin{pgfonlayer}{Kernel2Result}
\foreach \i in {1,2,3,4}
{
	\draw[red, dashed] (KER\i)--(OUT\i);
}
\end{pgfonlayer}

	
\end{tikzpicture}
\end{document}