[wiki:libpipi << back to libpipi] = Gaussian filtering = Current code: * [/browser/libpipi/trunk/pipi/filter/blur.c] * [/browser/libpipi/trunk/pipi/filter/convolution_template.h] * [/browser/libpipi/trunk/pipi/filter/convolution.c] The usual way to create a Gaussian kernel is to evaluate a Gaussian function at the center of each cell: k[i][j] = exp(-(i²+j²)/2σ) This usually works well, except when the kernel is thin (σ < 1). It gets worse when using our generalised kernel: k[i][j] = exp(-((i×cosθ-j×sinθ-dx)²+(j×cosθ+i×sinθ-dy)²)/2σ) {{{ #!html
TODO interpolate the Gaussian integral on more points, eg. 5×5 (currently libpipi does it at the central point and at 8 additional points in the neighbourhood). }}} = Median filtering = Current code: * [/browser/libpipi/trunk/pipi/filter/median.c] There are several ways to optimise a median filter. Random links for now: * [http://coding.derkeiler.com/Archive/General/comp.programming/2004-10/0289.html Sliding median filter] * [http://iris.usc.edu/Vision-Notes/bibliography/twod268.html A shitload of papers about median filtering and its derivatives] = Dilate / erode = Current code: * [/browser/libpipi/trunk/pipi/filter/dilate.c] Erosion and dilation already work, but only for nearest pixels. {{{ #!html
TODO each pixel couple test is done twice. There seems to be an opportunity for improvement there. }}} {{{ #!html
TODO implement "dilate by X" (Manhattan distance). }}} {{{ #!html
TODO implement "dilate by X" (Euclidian distance). }}} === References === * [http://ostermiller.org/dilate_and_erode.html Efficiently Implementing Dilate and Erode Image Functions]