From fec222d59c73d937e2029055bf04f67c56b85702 Mon Sep 17 00:00:00 2001 From: Martin Thoma Date: Sun, 20 Nov 2016 11:05:29 +0100 Subject: [PATCH] Add linear convolution example --- tikz/convolution-linear/Makefile | 31 ++++++ tikz/convolution-linear/README.md | 3 + .../convolution-linear/convolution-linear.png | Bin 0 -> 18054 bytes .../convolution-linear/convolution-linear.tex | 88 ++++++++++++++++++ 4 files changed, 122 insertions(+) create mode 100644 tikz/convolution-linear/Makefile create mode 100644 tikz/convolution-linear/README.md create mode 100644 tikz/convolution-linear/convolution-linear.png create mode 100644 tikz/convolution-linear/convolution-linear.tex diff --git a/tikz/convolution-linear/Makefile b/tikz/convolution-linear/Makefile new file mode 100644 index 0000000..baccbb3 --- /dev/null +++ b/tikz/convolution-linear/Makefile @@ -0,0 +1,31 @@ +SOURCE = convolution-linear +DELAY = 80 +DENSITY = 300 +WIDTH = 512 + +make: + pdflatex $(SOURCE).tex -output-format=pdf + make clean + +clean: + rm -rf $(TARGET) *.class *.html *.log *.aux *.data *.gnuplot + +gif: + pdfcrop $(SOURCE).pdf + convert -verbose -delay $(DELAY) -loop 0 -density $(DENSITY) $(SOURCE)-crop.pdf $(SOURCE).gif + make clean + +png: + make + make svg + inkscape $(SOURCE).svg -w $(WIDTH) --export-png=$(SOURCE).png + +transparentGif: + convert $(SOURCE).pdf -transparent white result.gif + make clean + +svg: + #inkscape $(SOURCE).pdf --export-plain-svg=$(SOURCE).svg + pdf2svg $(SOURCE).pdf $(SOURCE).svg + # Necessary, as pdf2svg does not always create valid svgs: + inkscape $(SOURCE).svg --export-plain-svg=$(SOURCE).svg diff --git a/tikz/convolution-linear/README.md b/tikz/convolution-linear/README.md new file mode 100644 index 0000000..02cba42 --- /dev/null +++ b/tikz/convolution-linear/README.md @@ -0,0 +1,3 @@ +Compiled example +---------------- +![Example](convolution-linear.png) diff --git a/tikz/convolution-linear/convolution-linear.png b/tikz/convolution-linear/convolution-linear.png new file mode 100644 index 0000000000000000000000000000000000000000..d54b124664f607641942904f64efd66db05c5c2f GIT binary patch literal 18054 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 literal 0 HcmV?d00001 diff --git a/tikz/convolution-linear/convolution-linear.tex b/tikz/convolution-linear/convolution-linear.tex new file mode 100644 index 0000000..53b393c --- /dev/null +++ b/tikz/convolution-linear/convolution-linear.tex @@ -0,0 +1,88 @@ +\documentclass{standalone} +\usepackage{amssymb} +\usepackage{tikz} +\usetikzlibrary{calc} + +\begin{document} +\newcommand{\filtersize}{3} +\newcommand{\filterx}{8} +\newcommand{\filtery}{2.2} +\newcommand{\filteroffset}{1} + +\newcommand{\imagesize}{7} +\newcommand{\imagex}{0} +\newcommand{\imagey}{0} +\newcommand{\imageoffset}{2} + +\newcommand{\outx}{13} +\newcommand{\outy}{0} +\newcommand{\outoffset}{2} + +\newcommand{\percx}{1} +\newcommand{\percy}{2} +\begin{tikzpicture} +% ,circle,thick,draw=black,fill=black,minimum width=4pt,minimum height=4pt + \tikzstyle{point}=[draw=none,inner sep=0pt] + + + % draw perceptive field + \node (p1)[point] at (\imagex+\percx, + \imagey+\percy+\percx*\imageoffset/\imagesize) {}; + \node (p2)[point] at (\imagex+\percx+\filtersize, + \imagey+\percy+\percx*\imageoffset/\imagesize+\filtersize*\imageoffset/\imagesize) {}; + \node (p3)[point,blue] at (\imagex+\percx+\filtersize, + \imagey+\percy+\filtersize+\percx*\imageoffset/\imagesize+\filtersize*\imageoffset/\imagesize) {}; + \node (p4)[point] at (\imagex+\percx, + \imagey+\percy+\filtersize+\percx*\imageoffset/\imagesize) {}; + \draw[fill=gray] (p1.center) -- (p2.center) -- (p3.center) -- (p4.center) -- (p1.center); + + % draw output point + \node (o1)[point] at (\outx+\percx+1, + \outy+\percy+\percx*\outoffset/\imagesize+1+1*\outoffset/\imagesize) {}; + \node (o2)[point] at (\outx+\percx+2, + \outy+\percy+\percx*\outoffset/\imagesize+1*\outoffset/\imagesize+1+1*\outoffset/\imagesize) {}; + \node (o3)[point,blue] at (\outx+\percx+2, + \outy+\percy+1+\percx*\outoffset/\imagesize+1*\outoffset/\imagesize+1+1*\outoffset/\imagesize) {}; + \node (o4)[point] at (\outx+\percx+1, + \outy+\percy+2+\percx*\outoffset/\imagesize+1*\outoffset/\imagesize) {}; + \draw[fill=black] (o1.center) -- (o2.center) -- (o3.center) -- (o4.center) -- (o1.center); + + % draw image + \foreach \x in {0,...,\imagesize} + { + \draw (\imagex+\x, \imagey+\x*\imageoffset/\imagesize) -- (\imagex+\x, \imagey+\imagesize+\x*\imageoffset/\imagesize); + \draw (\imagex, \imagey+\x) -- (\imagex+\imagesize, \imagey+\x+\imageoffset); + } + + % draw filter + \foreach \x in {0,...,\filtersize} + { + \draw (\filterx+\x, \filtery+\x*\filteroffset/\filtersize) -- (\filterx+\x, \filtery+\filtersize+\x*\filteroffset/\filtersize); + \draw (\filterx, \filtery+\x) -- (\filterx+\filtersize, \filtery+\x+\filteroffset); + } + + % draw out + \foreach \x in {0,...,\imagesize} + { + \draw (\outx+\x, \outy+\x*\outoffset/\imagesize) -- (\outx+\x, \outy+\imagesize+\x*\outoffset/\imagesize); + \draw (\outx, \outy+\x) -- (\outx+\imagesize, \outy+\x+\outoffset); + } + + \node at (\imagex + \imagesize/2,\imagey + \imagesize + 2) {$I \in \mathbb{R}^{\imagesize \times \imagesize}$}; + \node at (\filterx + \filtersize/2,\filtery + \filtersize + 2) {$F \in \mathbb{R}^{\filtersize \times \filtersize}$}; + \node at (\outx + \imagesize/2,\outy + \imagesize + 2) {$I' \in \mathbb{R}^{\imagesize \times \imagesize}$}; + \node[draw,circle] (sumsymb) at (\filterx + \filtersize+1,\filtery + \filtersize/2 + \filteroffset-0.5) {$\sum$}; + + \draw[dashed] (1.5, 2.9) -- (10.5, 2.9) -- (sumsymb.center); + \draw[dashed] (1.5, 2.9+\filtersize-1) -- (10.5, 2.9+\filtersize-1) -- (sumsymb.center); + \draw[dashed] (1.5+\filtersize-1, 2.9+\filtersize-1+2*\filteroffset/3) -- (10.5+\filtersize-1, 2.9+\filtersize-1+2*\filteroffset/3) -- (sumsymb.center); + \draw[dashed] (1.5+\filtersize-1, 2.9+2*\filteroffset/3) -- (10.5+\filtersize-1, 2.9+2*\filteroffset/3) -- (sumsymb.center); + \draw[dashed] (sumsymb.center) -- (15, 4); + + \node[draw,circle,fill=white] at (5.5, 2.9) {$+$}; + \node[draw,circle,fill=white] at (5.5+\filtersize-1, 2.9+2*\filteroffset/3) {$+$}; + \node[draw,circle,fill=white] at (5.5+\filtersize-1, 2.9+2*\filteroffset/3+\filtersize-1) {$+$}; + \node[draw,circle,fill=white] at (5.5, 2.9+\filtersize-1) {$+$}; + \node[draw,circle,fill=white] at (sumsymb.center) {$\sum$}; +\end{tikzpicture} +\end{document}