convolution-linear.tex 4.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. \documentclass{standalone}
  2. \usepackage{amssymb}
  3. \usepackage{tikz}
  4. \usetikzlibrary{calc}
  5. \begin{document}
  6. \newcommand{\filtersize}{3}
  7. \newcommand{\filterx}{8}
  8. \newcommand{\filtery}{2.2}
  9. \newcommand{\filteroffset}{1}
  10. \newcommand{\imagesize}{7}
  11. \newcommand{\imagex}{0}
  12. \newcommand{\imagey}{0}
  13. \newcommand{\imageoffset}{2}
  14. \newcommand{\outx}{13}
  15. \newcommand{\outy}{0}
  16. \newcommand{\outoffset}{2}
  17. \newcommand{\percx}{1}
  18. \newcommand{\percy}{2}
  19. \begin{tikzpicture}
  20. % ,circle,thick,draw=black,fill=black,minimum width=4pt,minimum height=4pt
  21. \tikzstyle{point}=[draw=none,inner sep=0pt]
  22. % draw perceptive field
  23. \node (p1)[point] at (\imagex+\percx,
  24. \imagey+\percy+\percx*\imageoffset/\imagesize) {};
  25. \node (p2)[point] at (\imagex+\percx+\filtersize,
  26. \imagey+\percy+\percx*\imageoffset/\imagesize+\filtersize*\imageoffset/\imagesize) {};
  27. \node (p3)[point,blue] at (\imagex+\percx+\filtersize,
  28. \imagey+\percy+\filtersize+\percx*\imageoffset/\imagesize+\filtersize*\imageoffset/\imagesize) {};
  29. \node (p4)[point] at (\imagex+\percx,
  30. \imagey+\percy+\filtersize+\percx*\imageoffset/\imagesize) {};
  31. \draw[fill=gray] (p1.center) -- (p2.center) -- (p3.center) -- (p4.center) -- (p1.center);
  32. % draw output point
  33. \node (o1)[point] at (\outx+\percx+1,
  34. \outy+\percy+\percx*\outoffset/\imagesize+1+1*\outoffset/\imagesize) {};
  35. \node (o2)[point] at (\outx+\percx+2,
  36. \outy+\percy+\percx*\outoffset/\imagesize+1*\outoffset/\imagesize+1+1*\outoffset/\imagesize) {};
  37. \node (o3)[point,blue] at (\outx+\percx+2,
  38. \outy+\percy+1+\percx*\outoffset/\imagesize+1*\outoffset/\imagesize+1+1*\outoffset/\imagesize) {};
  39. \node (o4)[point] at (\outx+\percx+1,
  40. \outy+\percy+2+\percx*\outoffset/\imagesize+1*\outoffset/\imagesize) {};
  41. \draw[fill=black] (o1.center) -- (o2.center) -- (o3.center) -- (o4.center) -- (o1.center);
  42. % draw image
  43. \foreach \x in {0,...,\imagesize}
  44. {
  45. \draw (\imagex+\x, \imagey+\x*\imageoffset/\imagesize) -- (\imagex+\x, \imagey+\imagesize+\x*\imageoffset/\imagesize);
  46. \draw (\imagex, \imagey+\x) -- (\imagex+\imagesize, \imagey+\x+\imageoffset);
  47. }
  48. % draw filter
  49. \foreach \x in {0,...,\filtersize}
  50. {
  51. \draw (\filterx+\x, \filtery+\x*\filteroffset/\filtersize) -- (\filterx+\x, \filtery+\filtersize+\x*\filteroffset/\filtersize);
  52. \draw (\filterx, \filtery+\x) -- (\filterx+\filtersize, \filtery+\x+\filteroffset);
  53. }
  54. % draw out
  55. \foreach \x in {0,...,\imagesize}
  56. {
  57. \draw (\outx+\x, \outy+\x*\outoffset/\imagesize) -- (\outx+\x, \outy+\imagesize+\x*\outoffset/\imagesize);
  58. \draw (\outx, \outy+\x) -- (\outx+\imagesize, \outy+\x+\outoffset);
  59. }
  60. \node at (\imagex + \imagesize/2,\imagey + \imagesize + 2) {$I \in \mathbb{R}^{\imagesize \times \imagesize}$};
  61. \node at (\filterx + \filtersize/2,\filtery + \filtersize + 2) {$F \in \mathbb{R}^{\filtersize \times \filtersize}$};
  62. \node at (\outx + \imagesize/2,\outy + \imagesize + 2) {$I' \in \mathbb{R}^{\imagesize \times \imagesize}$};
  63. \node[draw,circle] (sumsymb) at (\filterx + \filtersize+1,\filtery + \filtersize/2 + \filteroffset-0.5) {$\sum$};
  64. \draw[dashed] (1.5, 2.9) -- (10.5, 2.9) -- (sumsymb.center);
  65. \draw[dashed] (1.5, 2.9+\filtersize-1) -- (10.5, 2.9+\filtersize-1) -- (sumsymb.center);
  66. \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);
  67. \draw[dashed] (1.5+\filtersize-1, 2.9+2*\filteroffset/3) -- (10.5+\filtersize-1, 2.9+2*\filteroffset/3) -- (sumsymb.center);
  68. \draw[dashed] (sumsymb.center) -- (15, 4);
  69. \node[draw,circle,fill=white] at (5.5, 2.9) {$+$};
  70. \node[draw,circle,fill=white] at (5.5+\filtersize-1, 2.9+2*\filteroffset/3) {$+$};
  71. \node[draw,circle,fill=white] at (5.5+\filtersize-1, 2.9+2*\filteroffset/3+\filtersize-1) {$+$};
  72. \node[draw,circle,fill=white] at (5.5, 2.9+\filtersize-1) {$+$};
  73. \node[draw,circle,fill=white] at (sumsymb.center) {$\sum$};
  74. \end{tikzpicture}
  75. \end{document}