\relax \providecommand{\transparent@use}[1]{} \citation{matheron75} \citation{mcguire2008median} \citation{chen09} \citation{sanchezICASSP12} \citation{YangTA09} \citation{ipol.2011.bcm_nlm} \citation{Dabov09bm3dimage} \citation{PALHANOXAVIERDEFONTES} \citation{matheron75} \citation{caselles97} \citation{springerlink:10.1007/3-540-48236-9_16} \citation{bertaux:04} \citation{bertaux:04} \citation{bertaux:04} \@writefile{toc}{\contentsline {section}{\numberline {1}Introduction}{1}} \newlabel{contrib}{{2}{1}} \@writefile{toc}{\contentsline {section}{\numberline {2}Contribution}{1}} \citation{denoiselab} \citation{denoisereview} \citation{bertaux:04} \citation{Dabov09bm3dimage} \citation{CUDAPG} \@writefile{toc}{\contentsline {section}{\numberline {3}Plan}{2}} \newlabel{GPUgeneralites}{{4}{2}} \@writefile{toc}{\contentsline {section}{\numberline {4}NVidia's GPU architecture}{2}} \newlabel{isolines}{{5}{2}} \@writefile{toc}{\contentsline {section}{\numberline {5}Isolines}{2}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.1}Fixed-length isolines}{2}} \newlabel{LL2}{{1}{3}} \newlabel{GL}{{3}{3}} \newlabel{GL2}{{4}{3}} \newlabel{LL1}{{5}{3}} \@writefile{toc}{\contentsline {subsection}{\numberline {5.2}Lengthenable isolines}{3}} \@writefile{lof}{\contentsline {figure}{\numberline {1}{\ignorespaces Determination and lengthening of an isoline: The gray level $z$ of each pixel is seen as an elevation value. $S^n$ is the $n$ pixel length isoline for pixel of coordinates $(i, j)$. The elongation of $S^n$ by $S^p$ ($p$ pixel length) is submitted to the GLRT condition (see eq. \textup {\hbox {\mathsurround \z@ \normalfont (\ignorespaces 8\hbox {}\unskip \@@italiccorr )}}).}}{3}} \newlabel{si3}{{1}{3}} \newlabel{LLNP}{{6}{3}} \newlabel{LLNP2}{{7}{3}} \newlabel{GLRT}{{8}{3}} \citation{bertaux:04} \citation{Dabov09bm3dimage} \newlabel{lniv0}{{6}{4}} \@writefile{toc}{\contentsline {section}{\numberline {6}Isoline models}{4}} \newlabel{lniv2}{{6.1}{4}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.1}Poly-isolines with limited deviation angle (PI-LD)}{4}} \newlabel{cx}{{9}{4}} \newlabel{cx2}{{10}{4}} \newlabel{pild:debut}{{2a}{4}} \newlabel{sub@pild:debut}{{(a)}{a}} \newlabel{pild:sub1}{{2b}{4}} \newlabel{sub@pild:sub1}{{(b)}{b}} \newlabel{pild:sub2}{{2c}{4}} \newlabel{sub@pild:sub2}{{(c)}{c}} \newlabel{pild:sub3}{{2d}{4}} \newlabel{sub@pild:sub3}{{(d)}{d}} \newlabel{pild:sub4}{{2e}{4}} \newlabel{sub@pild:sub4}{{(e)}{e}} \newlabel{pild:sub5}{{2f}{4}} \newlabel{sub@pild:sub5}{{(f)}{f}} \@writefile{lof}{\contentsline {figure}{\numberline {2}{\ignorespaces Example of lengthening process starting with a two-segment poly-isoline ($l=5$, $\Delta d_{max}=2$). The initial situation is shown in 2a\hbox {}, while 2b\hbox {} to 2f\hbox {} represent the successive candidate segments. The direction index of the last validated segment is $d_2=2$ (2a\hbox {}). It implies that direction indexes allowed for the third segment range from $d_2-\Delta d{max}=0$ to $d_2+\Delta d{max}=4$ (2b\hbox {} to 2f\hbox {}). The lengthening of the poly-isoline is accepted if at least one segment has a positive GLRT. If there are several, the one which minimizes the standard deviation of the whole poly-isoline is selected. }}{4}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Isoline with two validated segments $s_1$ and $s_2$.}}}{4}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {First evaluated segment, corresponding to pattern $p_{5,0}$.}}}{4}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(c)}{\ignorespaces {Second evaluated segment, corresponding to pattern $p_{5,1}$.}}}{4}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(d)}{\ignorespaces {Third evaluated segment, corresponding to pattern $p_{5,2}$.}}}{4}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(e)}{\ignorespaces {Fourth evaluated segment, corresponding to pattern $p_{5,3}$.}}}{4}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(f)}{\ignorespaces {Fifth evaluated segment, corresponding to pattern $p_{5,4}$.}}}{4}} \newlabel{pild}{{2}{4}} \newlabel{lniv3}{{6.2}{5}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.2}Poly-isolines with precomputed directions (PI-PD)}{5}} \newlabel{pipd:pipd1}{{3a}{5}} \newlabel{sub@pipd:pipd1}{{(a)}{a}} \newlabel{pipd:pipd2}{{3b}{5}} \newlabel{sub@pipd:pipd2}{{(b)}{b}} \newlabel{pipd:pipd3}{{3c}{5}} \newlabel{sub@pipd:pipd3}{{(c)}{c}} \newlabel{pipd:pipd4}{{3d}{5}} \newlabel{sub@pipd:pipd4}{{(d)}{d}} \@writefile{lof}{\contentsline {figure}{\numberline {3}{\ignorespaces Example of PI-PD lengthening process starting with a two-segment poly-isoline ($l=5$). The initial situation is represented in 3a\hbox {}, while 3a\hbox {} to 3d\hbox {} represent the successive processing steps. The end pixel of the last validated segment is $(i_2,j_2)$ (3a\hbox {}). Reference matrices \(I_{\Theta }\) and \(I_{\Sigma }\) provide the values needed to select the pattern to be applied on \((i_2,j_2)\) (3b\hbox {} and 3c\hbox {}). GLRT is performed to validated lengthening or not. This process goes on until one submitted segment does not comply with GLRT. }}{5}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Poly-isoline with two validated segments.}}}{5}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Next direction is read from element $(i_2,j_2)$ of $I_{\Theta }$.}}}{5}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(c)}{\ignorespaces {Pattern $p_{l,d_3}$ is then applied at $(i_2,j_2)$ and GLRT is performed. Both sums needed to perform GLRT are read from element $(i_2,j_2)$ of $I_{\Sigma }$.}}}{5}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(d)}{\ignorespaces {If accepted by GLRT, segment $s_3$ is added to poly-isoline.}}}{5}} \newlabel{pipd}{{3}{5}} \newlabel{pipd_plan}{{6.3}{5}} \@writefile{toc}{\contentsline {subsection}{\numberline {6.3}Hybrid PI-PD}{5}} \newlabel{fig:ref}{{4a}{6}} \newlabel{sub@fig:ref}{{(a)}{a}} \newlabel{fig:noisy1}{{4b}{6}} \newlabel{sub@fig:noisy1}{{(b)}{b}} \newlabel{fig:noisy2}{{4c}{6}} \newlabel{sub@fig:noisy2}{{(c)}{c}} \newlabel{fig:dir1}{{4d}{6}} \newlabel{sub@fig:dir1}{{(d)}{d}} \newlabel{fig:dir2}{{4e}{6}} \newlabel{sub@fig:dir2}{{(e)}{e}} \@writefile{lof}{\contentsline {figure}{\numberline {4}{\ignorespaces Zoom on a small square window of the airplane image. 4a\hbox {} reproduce the zoom on the window, taken from the reference image of Figure 6\hbox {}. 4b\hbox {}, 4c\hbox {} and 4a\hbox {} and are 3D views where each bar represents a pixel whose gray-level corresponds to the height of the bar. Figures 4d\hbox {} and 4e\hbox {} are 2D top views of the window. The chosen window shows an edge between two regions of low slope. The images 4b\hbox {} and 4c\hbox {} are corrupted with two different random drawings of the same additive white gaussian noise (AWGN) of power $\sigma ^2$ and mean value $0$. 4d\hbox {} and 4e\hbox {} show, for each pixel of the window, the direction of the isoline found by PI-PD. In regions of low slope (the two regions at the top and the bottom), the determination of the direction is not robust. But near the edge, directions do not vary from one drawing to another.}}{6}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Reference image}}}{6}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Image corrupted by random drawing $n^{\circ }1$}}}{6}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(c)}{\ignorespaces {Image corrupted by random drawing $n^{\circ }2$}}}{6}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(d)}{\ignorespaces {Isoline directions for random drawing $n^{\circ }1$}}}{6}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(e)}{\ignorespaces {Isoline directions for random drawing $n^{\circ }2$}}}{6}} \newlabel{img_plans}{{4}{6}} \@writefile{lof}{\contentsline {figure}{\numberline {5}{\ignorespaces Edge detector. 3D view representing an example square 11x11 pixel window ($l=5$) used in the edge detector for $\Theta _4=45^{\circ }$ around a center pixel colored in black. Each pixel is represented by a bar. Bars of height value 0 are for pixels that are not involved in the detector. Top region is defined by five pattern segments and includes the center pixel. Bottomp region only includes three pattern segments. The different height values are meant to distinguish between each of the three different sets of pixels and their role. }}{6}} \newlabel{detect_plans}{{5}{6}} \newlabel{GLRT2}{{11}{6}} \newlabel{halfplane}{{b)}{7}} \newlabel{img_window:ref}{{6a}{7}} \newlabel{sub@img_window:ref}{{(a)}{a}} \newlabel{img_window:win}{{6b}{7}} \newlabel{sub@img_window:win}{{(b)}{b}} \@writefile{lof}{\contentsline {figure}{\numberline {6}{\ignorespaces Location of the example window inside the reference image. Figure 6a\hbox {} shows the whole reference image and 6b\hbox {} zooms on the part where the example 11x11 pixel window is.}}{7}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Reference noiseless airplane image}}}{7}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Location of the example window in the reference image.}}}{7}} \newlabel{img_window}{{6}{7}} \newlabel{lniv}{{7}{7}} \@writefile{toc}{\contentsline {section}{\numberline {7} Hybrid PI-PD filter Implementation: details}{7}} \newlabel{genPaths}{{7.1}{7}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.1}Segment patterns}{7}} \newlabel{exbords:noisy}{{7a}{7}} \newlabel{sub@exbords:noisy}{{(a)}{a}} \newlabel{exbords:bords}{{7b}{7}} \newlabel{sub@exbords:bords}{{(b)}{b}} \@writefile{lof}{\contentsline {figure}{\numberline {7}{\ignorespaces Pixel classification inside the noisy image. Figure 7a\hbox {} shows the noisy input image and 7b\hbox {} reproduces the output classification of pixels, as a black and white image, obtained with threshold value $T2_{max}=2$. Black pixels are supposed to be near an edge, while white pixels belong to Low Slope Regions.}}{7}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Noisy airplane image}}}{7}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Pixel classification performed by the edge detector. }}}{7}} \newlabel{exbords}{{7}{7}} \@writefile{lof}{\contentsline {figure}{\numberline {8}{\ignorespaces Top: example segment patterns $p_{5,d}$ for $d\in [0;7]$; the black pixel represents the center pixel $(i,j)$, which does not belong to the pattern. The gray ones define the actual pattern segments. Bottom: the first 8 lines of corresponding matrix $P_5$ whose elements are the positions of segment pixels with respect to the center pixel.}}{7}} \newlabel{p5q1}{{8}{7}} \newlabel{sipd}{{7.2}{8}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.2}Generation of reference matrices $I_{\Sigma }$ and $I_{\Theta }$}{8}} \@writefile{loa}{\contentsline {algocf}{\numberline {1}{\ignorespaces Initializations in GPU memory}}{8}} \newlabel{algoinit}{{1}{8}} \newlabel{sipdl}{{7.3}{8}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.3}PI-PD lengthening process: \texttt {kernel\_PIPD()} }{8}} \@writefile{loa}{\contentsline {algocf}{\numberline {2}{\ignorespaces generation of reference matrices, kernel \texttt {kernel\_precomp()}}}{8}} \newlabel{algoprecomp}{{2}{8}} \newlabel{sipdd}{{7.4}{8}} \@writefile{toc}{\contentsline {subsection}{\numberline {7.4}Hybrid PI-PD : \texttt {kernel\_edge\_detector()} }{8}} \citation{denoiselab} \citation{6036776} \citation{Wang04imagequality} \@writefile{loa}{\contentsline {algocf}{\numberline {3}{\ignorespaces PI-PD lengthening process \texttt {kernel\_PIPD()}}}{9}} \newlabel{algoPIPD}{{3}{9}} \newlabel{results}{{8}{9}} \@writefile{toc}{\contentsline {section}{\numberline {8}Results}{9}} \@writefile{loa}{\contentsline {algocf}{\numberline {4}{\ignorespaces edge detector and pixel classifier \texttt {kernel\_edge\_detector()}}}{9}} \newlabel{algoDetect}{{4}{9}} \citation{Wang04imagequality} \citation{Dabov09bm3dimage} \citation{Dabov09bm3dimage} \citation{BuadesCM06} \@writefile{lof}{\contentsline {figure}{\numberline {9}{\ignorespaces Comparison between hybrid PI-PD, average and BM3D filters. PI-PD parameter values: $n=25$, $l=5$, $T_{max}=1$ and $T2_{max}=2$. The \emph {noisy} column correspond to the noisy input images, before denoising. \newline Timings: average filter in around 0.35\nobreakspace {}ms hybrid PI-PD in around 11.0\nobreakspace {}ms and BM3D in around 4.3\nobreakspace {}s}}{10}} \newlabel{tablePI}{{9}{10}} \newlabel{conclusion}{{9}{10}} \@writefile{toc}{\contentsline {section}{\numberline {9}Conclusion, future work}{10}} \citation{BuadesCM06} \bibstyle{spbasic} \bibdata{bibliosv} \bibcite{denoiselab}{{1}{2007}{{den}}{{}}} \bibcite{CUDAPG}{{2}{2010}{{CUD}}{{}}} \bibcite{bertaux:04}{{3}{2004}{{Bertaux et~al}}{{Bertaux, Frauel, R{\'e}fr{\'e}gier, and Javidi}}} \bibcite{denoisereview}{{4}{2005}{{Buades et~al}}{{Buades, Coll, and Morel}}} \bibcite{BuadesCM06}{{5}{2006}{{Buades et~al}}{{Buades, Coll, and Morel}}} \bibcite{caselles97}{{6}{1997}{{Caselles et~al}}{{Caselles, Coll, and Morel}}} \bibcite{chen09}{{7}{2009}{{Chen et~al}}{{Chen, Beister, Kyriakou, and Kachelries}}} \bibcite{ipol.2011.bcm_nlm}{{8}{2011}{{Coll et~al}}{{Coll, Morel, and Buades}}} \bibcite{Dabov09bm3dimage}{{9}{2009}{{Dabov et~al}}{{Dabov, Foi, Katkovnik, and Egiazarian}}} \bibcite{matheron75}{{10}{1975}{{Matheron}}{{}}} \bibcite{mcguire2008median}{{11}{2008}{{Mc{G}uire}}{{}}} \bibcite{springerlink:10.1007/3-540-48236-9_16}{{12}{1999}{{Monasse and Guichard}}{{}}} \bibcite{PALHANOXAVIERDEFONTES}{{13}{2010}{{Palhano Xavier De~Fontes et~al}}{{Palhano Xavier De~Fontes, Andrade~Barroso, Coup{\'e}, and Hellier}}} \bibcite{6036776}{{14}{2011}{{Perrot et~al}}{{Perrot, Domas, Couturier, and Bertaux}}} \bibcite{sanchezICASSP12}{{15}{2012}{{Sanchez and Rodriguez}}{{}}} \bibcite{Wang04imagequality}{{16}{2004}{{Wang et~al}}{{Wang, Bovik, Sheikh, Member, Simoncelli, and Member}}} \newlabel{fig:noisy}{{10a}{11}} \newlabel{sub@fig:noisy}{{(a)}{a}} \newlabel{fig:pipd}{{10b}{11}} \newlabel{sub@fig:pipd}{{(b)}{b}} \newlabel{fig:hpipd}{{10c}{11}} \newlabel{sub@fig:hpipd}{{(c)}{c}} \newlabel{fig:bm3d}{{10d}{11}} \newlabel{sub@fig:bm3d}{{(d)}{d}} \@writefile{lof}{\contentsline {figure}{\numberline {10}{\ignorespaces Comparison of 512x512 images denoised from noisy airplane image (10a\hbox {}) with a PI-PD filter (10b\hbox {}), PI-PD hybrid filter (10c\hbox {}) and BM3D filter (10d\hbox {}). Only zoomed parts of images are shown in order to ensure better viewing.}}{11}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(a)}{\ignorespaces {Noisy image $\sigma =25$}}}{11}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(b)}{\ignorespaces {Average 5x5 filter, in $0.35\nobreakspace {}ms$}}}{11}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(c)}{\ignorespaces {PI-PD hybrid filter, $n=25$, $l=5$, $T_{max}=1$, $T2_{max}=2$, in $11\nobreakspace {}ms$ }}}{11}} \@writefile{lof}{\contentsline {subfigure}{\numberline{(d)}{\ignorespaces {BM3D filter, in $4.3s$}}}{11}} \newlabel{comparimg}{{10}{11}} \bibcite{YangTA09}{{17}{2009}{{Yang et~al}}{{Yang, Tan, and Ahuja}}}