diff --git a/tpFourier/fourier2019/Makefile b/tpFourier/fourier2019/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3021bf53985f387c754829fc7bf03ef1f649e59b --- /dev/null +++ b/tpFourier/fourier2019/Makefile @@ -0,0 +1,31 @@ +OPTIONS = --filter=pandoc-numbering +OPTIONS += --filter=pandoc-crossref + +PDFOPTIONS = --highlight-style kate +PDFOPTIONS += --pdf-engine pdflatex +PDFOPTIONS += --number-sections +PDFOPTIONS += --template=./default.latex + + +HTMLOPTIONS += -t html5 +HTMLOPTIONS += -c css/prism.css +HTMLOPTIONS += --self-contained +HTMLOPTIONS += --mathjax=MathJax.js + +MD=$(wildcard *.md) +HTML=$(MD:%.md=%.html) +PDF=$(MD:%.md=%.pdf) + + +all: $(HTML) $(PDF) + +%.pdf: %.md Makefile + sed -e 's/language-c/C/g' -e 's/language-bash/bash/g' $< > $*_tex.md + pandoc -s $(OPTIONS) $(PDFOPTIONS) -o $@ $< + rm $*_tex.md + +%.html: %.md Makefile + pandoc -s $(OPTIONS) $(HTMLOPTIONS) -o $@ $< + +clean: + rm -rf *.html *.pdf diff --git a/tpFourier/fourier2019/MathJax.js b/tpFourier/fourier2019/MathJax.js new file mode 100644 index 0000000000000000000000000000000000000000..3c5458cf56ca84c856384c74f5f51a6b349569f6 --- /dev/null +++ b/tpFourier/fourier2019/MathJax.js @@ -0,0 +1,4 @@ +var fileref=document.createElement('script') +fileref.setAttribute("type","text/javascript") +fileref.setAttribute("src", "https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS-MML_HTMLorMML") +document.getElementsByTagName("head")[0].appendChild(fileref) diff --git a/tpFourier/fourier2019/default.latex b/tpFourier/fourier2019/default.latex new file mode 100644 index 0000000000000000000000000000000000000000..4312f715daa7a88095e74bc668794731322f9984 --- /dev/null +++ b/tpFourier/fourier2019/default.latex @@ -0,0 +1,288 @@ +\documentclass[$if(fontsize)$$fontsize$,$endif$$if(lang)$$babel-lang$,$endif$$if(papersize)$$papersize$paper,$endif$$for(classoption)$$classoption$$sep$,$endfor$]{$documentclass$} +$if(beamerarticle)$ +\usepackage{beamerarticle} % needs to be loaded first +$endif$ +$if(fontfamily)$ +\usepackage[$for(fontfamilyoptions)$$fontfamilyoptions$$sep$,$endfor$]{$fontfamily$} +$else$ +\usepackage{lmodern} +$endif$ +$if(linestretch)$ +\usepackage{setspace} +\setstretch{$linestretch$} +$endif$ +\usepackage{amssymb,amsmath,bm} +\usepackage{ifxetex,ifluatex} +\usepackage{fixltx2e} % provides \textsubscript +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[$if(fontenc)$$fontenc$$else$T1$endif$]{fontenc} + \usepackage[utf8]{inputenc} +$if(euro)$ + \usepackage{eurosym} +$endif$ +\else % if luatex or xelatex +$if(mathspec)$ + \ifxetex + \usepackage{mathspec} + \else + \usepackage{unicode-math} + \fi +$else$ + \usepackage{unicode-math} +$endif$ + \defaultfontfeatures{Ligatures=TeX,Scale=MatchLowercase} +$for(fontfamilies)$ + \newfontfamily{$fontfamilies.name$}[$fontfamilies.options$]{$fontfamilies.font$} +$endfor$ +$if(euro)$ + \newcommand{\euro}{€} +$endif$ +$if(mainfont)$ + \setmainfont[$for(mainfontoptions)$$mainfontoptions$$sep$,$endfor$]{$mainfont$} +$endif$ +$if(sansfont)$ + \setsansfont[$for(sansfontoptions)$$sansfontoptions$$sep$,$endfor$]{$sansfont$} +$endif$ +$if(monofont)$ + \setmonofont[Mapping=tex-ansi$if(monofontoptions)$,$for(monofontoptions)$$monofontoptions$$sep$,$endfor$$endif$]{$monofont$} +$endif$ +$if(mathfont)$ +$if(mathspec)$ + \ifxetex + \setmathfont(Digits,Latin,Greek)[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \else + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} + \fi +$else$ + \setmathfont[$for(mathfontoptions)$$mathfontoptions$$sep$,$endfor$]{$mathfont$} +$endif$ +$endif$ +$if(CJKmainfont)$ + \usepackage{xeCJK} + \setCJKmainfont[$for(CJKoptions)$$CJKoptions$$sep$,$endfor$]{$CJKmainfont$} +$endif$ +\fi +% use upquote if available, for straight quotes in verbatim environments +\IfFileExists{upquote.sty}{\usepackage{upquote}}{} +% use microtype if available +\IfFileExists{microtype.sty}{% +\usepackage[$for(microtypeoptions)$$microtypeoptions$$sep$,$endfor$]{microtype} +\UseMicrotypeSet[protrusion]{basicmath} % disable protrusion for tt fonts +}{} +\PassOptionsToPackage{hyphens}{url} % url is loaded by hyperref +$if(verbatim-in-note)$ +\usepackage{fancyvrb} +$endif$ +\usepackage[unicode=true]{hyperref} +$if(colorlinks)$ +\PassOptionsToPackage{usenames,dvipsnames}{color} % color is loaded by hyperref +$endif$ +\hypersetup{ +$if(title-meta)$ + pdftitle={$title-meta$}, +$endif$ +$if(author-meta)$ + pdfauthor={$author-meta$}, +$endif$ +$if(keywords)$ + pdfkeywords={$for(keywords)$$keywords$$sep$, $endfor$}, +$endif$ +$if(colorlinks)$ + colorlinks=true, + linkcolor=$if(linkcolor)$$linkcolor$$else$Maroon$endif$, + citecolor=$if(citecolor)$$citecolor$$else$Blue$endif$, + urlcolor=$if(urlcolor)$$urlcolor$$else$Blue$endif$, +$else$ + pdfborder={0 0 0}, +$endif$ + breaklinks=true} +\urlstyle{same} % don't use monospace font for urls +$if(verbatim-in-note)$ +\VerbatimFootnotes % allows verbatim text in footnotes +$endif$ +$if(geometry)$ +\usepackage[$for(geometry)$$geometry$$sep$,$endfor$]{geometry} +$endif$ +$if(lang)$ +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \usepackage[shorthands=off,$for(babel-otherlangs)$$babel-otherlangs$,$endfor$main=$babel-lang$]{babel} +$if(babel-newcommands)$ + $babel-newcommands$ +$endif$ +\else + \usepackage{polyglossia} + \setmainlanguage[$polyglossia-lang.options$]{$polyglossia-lang.name$} +$for(polyglossia-otherlangs)$ + \setotherlanguage[$polyglossia-otherlangs.options$]{$polyglossia-otherlangs.name$} +$endfor$ +\fi +$endif$ +$if(natbib)$ +\usepackage{natbib} +\bibliographystyle{$if(biblio-style)$$biblio-style$$else$plainnat$endif$} +$endif$ +$if(biblatex)$ +\usepackage[$if(biblio-style)$style=$biblio-style$,$endif$$for(biblatexoptions)$$biblatexoptions$$sep$,$endfor$]{biblatex} +$for(bibliography)$ +\addbibresource{$bibliography$} +$endfor$ +$endif$ +$if(listings)$ +\usepackage{listings} +$endif$ +$if(lhs)$ +\lstnewenvironment{code}{\lstset{language=Haskell,basicstyle=\small\ttfamily}}{} +$endif$ +$if(highlighting-macros)$ +$highlighting-macros$ +$endif$ +$if(tables)$ +\usepackage{longtable,booktabs} +% Fix footnotes in tables (requires footnote package) +\IfFileExists{footnote.sty}{\usepackage{footnote}\makesavenoteenv{long table}}{} +$endif$ +$if(graphics)$ +\usepackage{graphicx,grffile} +\makeatletter +\def\maxwidth{\ifdim\Gin@nat@width>\linewidth\linewidth\else\Gin@nat@width\fi} +\def\maxheight{\ifdim\Gin@nat@height>\textheight\textheight\else\Gin@nat@height\fi} +\makeatother +% Scale images if necessary, so that they will not overflow the page +% margins by default, and it is still possible to overwrite the defaults +% using explicit options in \includegraphics[width, height, ...]{} +\setkeys{Gin}{width=\maxwidth,height=\maxheight,keepaspectratio} +$endif$ +$if(links-as-notes)$ +% Make links footnotes instead of hotlinks: +\renewcommand{\href}[2]{#2\footnote{\url{#1}}} +$endif$ +$if(strikeout)$ +\usepackage[normalem]{ulem} +% avoid problems with \sout in headers with hyperref: +\pdfstringdefDisableCommands{\renewcommand{\sout}{}} +$endif$ +$if(indent)$ +$else$ +\IfFileExists{parskip.sty}{% +\usepackage{parskip} +}{% else +\setlength{\parindent}{0pt} +\setlength{\parskip}{6pt plus 2pt minus 1pt} +} +$endif$ +\setlength{\emergencystretch}{3em} % prevent overfull lines +\providecommand{\tightlist}{% + \setlength{\itemsep}{0pt}\setlength{\parskip}{0pt}} +$if(numbersections)$ +\setcounter{secnumdepth}{$if(secnumdepth)$$secnumdepth$$else$5$endif$} +$else$ +\setcounter{secnumdepth}{0} +$endif$ +$if(subparagraph)$ +$else$ +% Redefines (sub)paragraphs to behave more like sections +\ifx\paragraph\undefined\else +\let\oldparagraph\paragraph +\renewcommand{\paragraph}[1]{\oldparagraph{#1}\mbox{}} +\fi +\ifx\subparagraph\undefined\else +\let\oldsubparagraph\subparagraph +\renewcommand{\subparagraph}[1]{\oldsubparagraph{#1}\mbox{}} +\fi +$endif$ +$if(dir)$ +\ifxetex + % load bidi as late as possible as it modifies e.g. graphicx + $if(latex-dir-rtl)$ + \usepackage[RTLdocument]{bidi} + $else$ + \usepackage{bidi} + $endif$ +\fi +\ifnum 0\ifxetex 1\fi\ifluatex 1\fi=0 % if pdftex + \TeXXeTstate=1 + \newcommand{\RL}[1]{\beginR #1\endR} + \newcommand{\LR}[1]{\beginL #1\endL} + \newenvironment{RTL}{\beginR}{\endR} + \newenvironment{LTR}{\beginL}{\endL} +\fi +$endif$ + +% set default figure placement to htbp +\makeatletter +\def\fps@figure{htbp} +\makeatother + +$for(header-includes)$ +$header-includes$ +$endfor$ + +$if(title)$ +\title{$title$$if(thanks)$\thanks{$thanks$}$endif$} +$endif$ +$if(subtitle)$ +\providecommand{\subtitle}[1]{} +\subtitle{$subtitle$} +$endif$ +$if(author)$ +\author{$for(author)$$author$$sep$ \and $endfor$} +$endif$ +$if(institute)$ +\providecommand{\institute}[1]{} +\institute{$for(institute)$$institute$$sep$ \and $endfor$} +$endif$ +\date{$date$} + +\begin{document} +$if(title)$ +\maketitle +$endif$ +$if(abstract)$ +\begin{abstract} +$abstract$ +\end{abstract} +$endif$ + +$for(include-before)$ +$include-before$ + +$endfor$ +$if(toc)$ +{ +$if(colorlinks)$ +\hypersetup{linkcolor=$if(toccolor)$$toccolor$$else$black$endif$} +$endif$ +\setcounter{tocdepth}{$toc-depth$} +\tableofcontents +} +$endif$ +$if(lot)$ +\listoftables +$endif$ +$if(lof)$ +\listoffigures +$endif$ +$body$ + +$if(natbib)$ +$if(bibliography)$ +$if(biblio-title)$ +$if(book-class)$ +\renewcommand\bibname{$biblio-title$} +$else$ +\renewcommand\refname{$biblio-title$} +$endif$ +$endif$ +\bibliography{$for(bibliography)$$bibliography$$sep$,$endfor$} + +$endif$ +$endif$ +$if(biblatex)$ +\printbibliography$if(biblio-title)$[title=$biblio-title$]$endif$ + +$endif$ +$for(include-after)$ +$include-after$ + +$endfor$ +\end{document} diff --git a/tpFourier/fourier2019/fourier.md b/tpFourier/fourier2019/fourier.md new file mode 100644 index 0000000000000000000000000000000000000000..278f2b1e7836bca0a91ef369629787dfb78803e6 --- /dev/null +++ b/tpFourier/fourier2019/fourier.md @@ -0,0 +1,73 @@ +--- +author: +- Mathématiques en technologie de l'information +title: Travail pratique - Les transformées de Fourier +autoSectionLabels: false +autoEqnLabels: true +eqnPrefix: + - "éq." + - "éqs." +chapters: true +numberSections: false +chaptersDepth: 1 +sectionsDepth: 3 +lang: fr +documentclass: article +papersize: A4 +cref: false +urlcolor: blue +toc: false +include-before: <script src="css/prism.js"></script> +--- +\newcommand{\dd}{\mathrm{d}} +\newcommand{\real}{\mathbb{R}} +\newcommand{\integer}{\mathbb{Z}} +\renewcommand{\natural}{\mathbb{N}} +\newcommand{\complex}{\mathbb{C}} + +# Objectif + +Implémenter de façon naïve les transformées de Fourier discrètes +en deux dimensions et comprendre leur utilité en traitement d'image. +Puis comparer les performances de votre implémentation avec +cellee de la librairie `numpy`. + +# Les transformées de Fourier en plusieurs dimensions + +Nous avons vu pendant le cours la définition de la transformée de Fourier discrète +en une dimension donc nous n'allons pas trop insister sur le sujet ici +mais reproduire le résulta principal. + +Soit un signal $f[n]$ discret et de longueur $N$ ($n$ va de $0$ à $N-1$), +nous pouvons écrire sa transformée, $\hat{f}[k]$ ($k$ allant de $0,..,N-1$) de Fourier comme[^1] +$$ +{\hat{f}}[k]=\sum_{n=0}^{N-1} f[n] e^{-\frac{2\pi i n k}{N}}. +$$ +A l'inverse, on peut calculer la transformées de Fourier discrète inverse de $\hat{f}[k]$ comme +$$ +f[n]=\frac{1}{N}\sum_{k=0}^{N-1} {\hat{f}}[k] e^{\frac{2\pi i k n}{N}}, +$$ +ce qui permet de déterminer le signal d'origine à partir de sa transformée de Fourier. + +On peut généraliser la transformée de Fourier pour des signaux en plus d'une dimension. +Ici, on va s'intéresser aux signaux bidimensionnels. Un tel signal peut représenter +par exemple les niveaux de gris d'une image. On a que la transformée de Fourier +pour un signal qui dépend de deux coordonnées, $f[n_1,n_2]$, $n_1=0,..,N_1-1$, $n_2=0,..,N_2-1$, +a une transformée de Fourier discrète, $\hat{f}[k_1,k_2]$, $k_1=0,..,N_1-1$ et $k_2=0,..,N_2-1$, donnée par +$$ +{\hat{f}}[k_1,k_2]=\sum_{n_1=0}^{N_1-1} e^{-\frac{2\pi i n_1 k_1}{N_1}}\left(\sum_{n_2=0}^{N_2-1} f[n_1,n_2] e^{-\frac{2\pi i n_2 k_2}{N_2}}\right). +$$ +De cette formule, on peut déduire que faire la transformée de Fourier en deux dimensions +n'est rien d'autre que faire la transformée de Fourier dans chacune des dimensions +séparément. + +De même la transformée de Fourier inverse à deux dimensions s'écrit +$$ +f[n_1,n_2]=\sum_{k_1=0}^{N_1-1} e^{\frac{2\pi i n_1 k_1}{N_1}}\left(\sum_{k_2=0}^{N_2-1} {\hat{f}}[k_1,k_2] e^{\frac{2\pi i n_2 k_2}{N_2}}\right). +$$ + +# Travail à réaliser + +# Conseils + +[^1]: On représente $f[n]$ et $\hat{f}[k]$ comme des listes (ou vecteurs) de longueur $N$. \ No newline at end of file