<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Pyramid of Filters - Fast Image Filtering without FFT?</article-title>
      </title-group>
      <contrib-group>
        <aff id="aff0">
          <label>0</label>
          <institution>Keldysh Institute of Applied Mathematics RAS</institution>
          ,
          <addr-line>Miusskaya sq. 4, 125047 Moscow</addr-line>
          ,
          <country country="RU">Russia</country>
        </aff>
      </contrib-group>
      <abstract>
        <p>Methods of computer graphics which had already become common in design of new optical systems and materials find currently new applications such as stomatology and ophthalmology. Some modern imaging systems are now designed in conjunction with the human vision system which is at their end. As a result simulation of the effects of human vision becomes necessary. These include partial defocusing and resulting “blur” of image, scattering and halo/corona and so on. Such effects are usually simulated convolving the original, “ideal” image with the pixel spread function. The latter frequently has size about that of the source image, so straightforward calculation of convolution would take a giant number of operations. Therefore in case of high resolution a decent speed is usually achieved by using the Fast Fourier Transform (FFT) for convolution, but since FFT operates periodic functions on a lattice with resolution being an integer power of a prime numbers, the required working resolution may considerably increase that of the original image and required memory becomes inadmissible. This paper presents an alternative method that allows calculations in much smaller memory avoiding overheads introduced by FFT requirements.</p>
      </abstract>
      <kwd-group>
        <kwd>Optical Simulation</kwd>
        <kwd>Imaging System Design</kwd>
        <kwd>Human Vision Effects</kwd>
        <kwd>Image Processing</kwd>
        <kwd>Filters</kwd>
        <kwd>Convolution</kwd>
      </kwd-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        Methods of computer graphics which had already become common in design of new
optical systems and materials, are now applied in stomathology and ophthalmology.
Some imaging systems are now designed in conjunction with the human vision system
which is at their end. Simulation of many effects of human vision, as well as defocusing
and aberration of lenses etc use 2D convolution of the original, “ideal” image with a
kernel for the pixel spread function [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ]:
f (x; y) = X K(x0
x; y0
y)f (x0; y0)
(1)
x0;y0
where (x; y) are the pixel coordinates, f is the source image, and K(x; y) is the filter’s
kernel. Summation goes over the neighborhood of the “target” pixel (x; y) where the
kernel is not 0.
      </p>
      <p>Copyright © 2020 for this paper by its authors. Use permitted under Creative Commons
License Attribution 4.0 International (CC BY 4.0).
? Supported by RFBR, grants 18-01-00569, 18-31-20032 and 19-01-00435.</p>
      <p>
        In simulation of such human vision effects as halo and glare [
        <xref ref-type="bibr" rid="ref2 ref3 ref4 ref5 ref6">2–6</xref>
        ] the size of filter
(read: of its support) can be about the size of the source image. For HD photos and
other high-precision means this the image size can be as huge as even 40000x25000
pixels. Obviously, if for each of about a billion of target pixels calculate a sum of about
a billion terms, the speed of such direct calculation will be below any expectation.
      </p>
      <p>
        Since the kernel depends only on the difference between the source and target
coordinates, efficiency can be drastically improved using Fast Fourier Transform (FFT) [
        <xref ref-type="bibr" rid="ref7">7</xref>
        ],
with which the number of operations is about the number of pixels.
      </p>
      <p>However FFT is not good regarding memory. First, FFT operates periodic functions
(both input, kernel and the result) so that the boundaries of the image are glued. As a
result, the FFT convolution to the black source image with the only white pixel at (0,0)
produces filtered image which is gray not only near (0,0) but also near the opposite end
(x = Nx; y = Ny). To avoid this artifact one has to add “margins” of size at least twice
filter radius and pad the source image to 0 there.</p>
      <p>
        Meanwhile, as said above, in human vision simulation that radius is about the image
size, thus we apply FFT convolution to the thrice larger image, 120000ı75000 pixels in
the above example. And this is not the end. The usual FFT is radix-2, i.e. the resolution
must be an integer power of two. Although there do exist radix-3, 5 and other variants
[
        <xref ref-type="bibr" rid="ref7">7</xref>
        ], this exotic is less efficient. The nearest larger power of two for 120000ı75000 is
already 131072ı131072 pixels.
      </p>
      <p>Since the number of FFT operations is nearly linear in the total number of pixels,
it still remains more or less admissible, and modern PCs can do that in half an hour
or hour for 3 color components. The really critical thing is though memory because
131072ı131072 pixels, times 3 color channels is already 192 Gb. One must keep both
the source image, the filtered image and the kernel at a time, all of that resolution. Plus
several auxiliary arrays etc. So for our example this totals to more that 512 Gb which is
rarely available nowadays.</p>
      <p>Meanwhile, the source image is just about 12 Gb so all this huge memory is merely
the FFT overhead. Happily, for symmetric kernels it is possible to design an
alternative method that works in much less memory while still has decent speed. This paper
describes two such algorithms (that can be also combined).
2</p>
    </sec>
    <sec id="sec-2">
      <title>Pyramid of resolutions</title>
      <p>
        This is closely related to the well-known Level Of Detail or mipmap [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ] or multigrids
in finite-difference methods. Decomposition into a series of images with decreasing
resolution (based on Laplace pyramid) was even used in simulation of human vision [
        <xref ref-type="bibr" rid="ref8">8</xref>
        ].
Other alternatives to FFT such as wavelets etc are discussed in [
        <xref ref-type="bibr" rid="ref9">9</xref>
        ]. We shall proceed
from the multigrid idea, though differently, and obtain a pyramid of filters (and filtered
images). The idea of changing the resolution is much similar to that in the well-known
image pyramid [
        <xref ref-type="bibr" rid="ref1">1</xref>
        ].
      </p>
      <p>
        The kernel for human vision is rather sophisticated [
        <xref ref-type="bibr" rid="ref4 ref6">4, 6</xref>
        ] but is mainly a weighted
sum of isotropic components like
      </p>
      <p>K(r) =
where r px2 + y2 is the distance between the source and target pixels. The spread
a can be both small (less than a pixel) for some components, and large for other
components. As a result, for small r the kernel changes very steeply, while at large r it
inevitably changes more and more slowly.</p>
      <sec id="sec-2-1">
        <title>2.1 Intentions</title>
        <p>To utilize that let us decompose our filter into the sum of the “central” and
“peripheral” parts, so that the former be distinct from zero for only, say, r 50 while the
“periphery”, which can be not 0 everywhere, be smooth (slowly changing) enough.</p>
        <p>The convolution with the original filter is then the sum of convolutions with the
“central” and “peripheral” sub-kernels. The former, because of the small filter radius,
can be calculated even directly, without any FFT and thus in its original resolution. It
requires about 1002 operations per pixel which is a lot but still admissible for modern
PCs.</p>
        <p>As to the smooth peripheral part, it is insensitive to the fine-scale detail of the source
image. And the filtered image is smooth. So we can calculate it in decreased resolution
(say tenfold) and then interpolate the result to the original resolution. And in this highly
reduced resolution we can already apply FFT because the overhead is admissible.</p>
        <p>Alternatively, we can repeat the procedure, now decomposing the peripheral
component into again the “central part of periphery” and “periphery of periphery”. Again
the central part will be limited to say 50 pixels and the peripheral will be so smooth
that admits already a 10-fold reduction of resolution (as compared to level 1, so
already 102 = 100 as compared to the original resolution!). In our example this is merely
250ı400 so the filter, even if it covers the whole image area, can be applied directly
(without FFT at all). So in this case we proceed without FFT at all levels.</p>
        <p>The first central component is termed the first level of pyramid. The “central part
of periphery” is the second level of pyramid. And “periphery of periphery” constitutes
the third level (which in principle can be subdivided that sample manner leading to the
fourth level and further). How this pyramid looks in reality is shown in Figure 1.</p>
        <p>While convolving with the 1st level, we work in the original resolution and keep the
source and the processed images which totals to about 24 Gb. The memory to keep the
filter of 50 pixels radius is negligible.</p>
        <p>At the second level, all is the same only for the tenfold reduced resolution, so it
needs merely about 24=102 Gb = 240 Mb that is negligible. The third level takes even
less.</p>
        <p>So the total memory and speed are determined by the first level and are admissible.
2.2</p>
      </sec>
      <sec id="sec-2-2">
        <title>Real reduction of resolution</title>
        <p>
          In the above reasoning we spoke about tenfold reduction of resolution which is surely
imaginary. In reality reduction ratio is determined by the desired accuracy (which is
in turn determined by the kernel and requirements to the “smoothness” of periphery),
and is usually just 3. That is, resolution of the image processed at the next level is 3
times lower than that at the current level, and each pixel of the image at the next level
“comprises” a group of 3ı3=9 current level pixels. In the simplest case, the value stored
in that pixel is just the sum over that group (i.e. 9 pixels of the current level), though
later we shall also use another relations). The first 3 levels of pyramid for one of the
filters used in simulation of human vision acuity [
          <xref ref-type="bibr" rid="ref4">4</xref>
          ] is shown in Figure 1.
        </p>
        <p>For the lower reduction ratio we shall need more levels to reach finally so low
resolution that can be processed directly (without FFT). It can be already 7.</p>
        <p>The radius of the central part which in our idea was said to be 50 pixels is, surely,
not that round. It is calculated from the criterion: outside that area the function changes
so gradually that the inaccuracy of the linear interpolation from the 3fold reduced
resolution is below allowed threshold. For human vision kernel, it is usually somewhere
between 7 thru 25 pixels depending on other parameters.</p>
        <p>All that and other details are explained below.
How the second level (of the kernel and image) is constructed? Let the reduction ratio
be 2M + 1 where M is a positive integer. Than each pixel of the next level substitutes
somehow the group (2M + 1) (2M + 1) pixels of current level “around” it.</p>
        <p>It is convenient to take M = 1 so that reduction of resolution is 3fold, and in our
calculations we used that value. Though M = 2 and larger is also possible.</p>
        <p>Obviously, the convolution of the 1st level (i.e. the original) image with the 1st level
kernel can be written as
f (x; y) = X K((x0</p>
        <p>Pyramid of Filters — Fast Image Filtering without FFT 5
where x; y; x0; y0 are the pixel coordinates i.e. the integer indices, K is the kernel as a
function of the physical (continuous!) coordinates (meters, degrees, ...), while is the
pixel step i.e. the change of that physical coordinate from one pixel to another.</p>
        <p>Grouping the pixels of the 1st level into “clusters” of (2M + 1) (2M + 1) pixels,
so that on the original resolution grid their centers are</p>
        <p>((2M + 1)X0 + 1; (2M + 1)Y 0 + 1)
where (X0; Y 0) are the pixels at the reduced resolution, we can write result of
convolution at the point x = (2M + 1)X + 1; y = (2M + 1)Y + 1 (present in both resolutions!)
as
f (x; y) = X</p>
        <p>M
X</p>
        <p>M</p>
        <p>X</p>
        <p>X0;Y 0 = M = M
0
(2M + 1)</p>
        <p>K((X0
Near the origin the kernel usually changes steeply while far from it, for r r0 (below
we shall calculate that r0), the kernel becomes so smooth that for it the original high
resolution becomes superfluous. So according to our idea the kernel (which we shall
assume isotropic just for convenience) is decomposed into the sum of the “central part”
(vanishing for r &gt; r0) and “periphery”:</p>
        <p>K(r) = Kc(r) + Kp(r)</p>
        <p>The peripheral part Kp(r) is known for r r0 where by construction it equals
K(r), while for r r0 it is arbitrary. It is natural to require that there Kp(r) be
maximally simple and smooth, e.g. a parabola seamlessly going into K(r) at r = r0:
where</p>
        <sec id="sec-2-2-1">
          <title>Then the central part is and the convolution takes the form</title>
          <p>Kp(r) =
(</p>
          <p>+ r2; r
K(r); r
r0
r0
Kc(r) =
= K(r0)
=</p>
          <p>K0(r0)</p>
          <p>2r0
(K(r)
0;
r0K0(r0)
2
r2; r
r
r0
r0
(4)
(5)
(6)
(7)
(8)
(9)
(10)</p>
          <p>+ X
So far we did not introduced any approximation but just regrouped the original
expression and named the results of convolution with the central respectively peripheral part
of the kernel as fc(x; y) and fp(x; y).</p>
          <p>Now let us assume that r0 is so large that inside one pixel of 2nd level (i.e. for all
(2M + 1) (2M + 1) pixels of the 1st level it comprises) Kp can be approximated by
the linear function (effectively the first terms of the Taylor series)</p>
          <p>Kp((X0
where</p>
          <p>D(r)</p>
          <p>0
Then introducing
r 1 @Kp = 2(2M + 1) 2
@r
M
X</p>
          <p>M</p>
          <p>X
= M = M
Fm;n(X; Y )
m nf (X + ; Y + )
we have in the 2nd level pixel (X; Y ),
fp(X; Y )</p>
          <p>X) 0; (Y 0</p>
          <p>Y ) 0)F0;0(X0; Y 0)
X Kp((X0
X0;Y 0
+
+</p>
          <p>X (X0
X0;Y 0
X (Y 0
X0;Y 0</p>
          <p>X)D((X0</p>
          <p>X) 0; (Y 0</p>
          <p>Y ) 0)F1;0(X0; Y 0)
Y )D((X0</p>
          <p>X) 0; (Y 0</p>
          <p>Y ) 0)F0;1(X0; Y 0) (11)
which is nothing but the convolution on the coarse pixel grid of 2nd level of resolution.</p>
          <p>Deviation of the kernel from its linear approximation can be estimated through the
second derivatives. For r r0 the relative error is</p>
          <p>2
while within the central zone it is
The use of the derivative in r2, not in r, is convenient when the kernel is given as an
analytic function of r2, as it is in human vision. If the kernel is defined as a tabulated
function of r,</p>
          <p>Pyramid of Filters — Fast Image Filtering without FFT 7</p>
          <p>r=r0
Usually @(r2) +2r2K@(r2) @(r2) decreases for r ! 1, so the relative error in any pixel
@K @ @K
is bounded by</p>
          <p>K
r=r0
Then r0 can be found as the radius for which the above expression equals the error of
approximation. It can be done with e.g. bisection because of monotone decrease.</p>
          <p>Construction of the third level i.e. decomposition of now Kp into its central and
peripheral parts is done similarly, just taking Kp instead of K. The central part of Kp
becomes level 2 in the pyramid of filters, while peripheral part of Kp is again
decomposed, its central part becoming level 3 of the pyramid of filters and so on.</p>
          <p>Notice the filter of the n-th (for n &gt; 1) level is not scalar, but its value is a “tuple”
n</p>
          <p>Kp; r 1 @Kp o. The source image at this level also keeps a “triad” fF0;0; F0;1; F1;0g
@r
of sums over sub-pixels (i.e. of (2M + 1) (2M + 1) pixels of the previous level) in
each its color channel.
3</p>
        </sec>
      </sec>
    </sec>
    <sec id="sec-3">
      <title>Factorization/separability</title>
      <p>These words mean a function of several arguments is a product of univariate function.
Namely, let us look at the famous Gaussian filter kernel</p>
      <p>K = C2e (r=a)2 :</p>
      <sec id="sec-3-1">
        <title>It is a product of two univariate functions</title>
        <p>K = Ce (x=a)2</p>
        <p>Ce (y=a)2
k(x)k(y)
so the convolution with it is just two successive one-dimensional convolutions
(12)
(13)
(14)
(15)
(16)
(17)
For a filter of radius 100 pixels a direct calculation of a 2D convolution requires about
1002 operations per pixel, while two 1D convolutions need only 200 operations, i.e. 50
times less. For larger radius the gain can be giant. So it would be great if this method
can be somehow extended to work with more general kernels besides Gaussian.</p>
        <p>
          It happens that really a 2D convolution can be calculated as a series of 1D ones for
an isotropic kernel K(r) and even just a “Hermitian” kernel K(x; y) = K(y; x), this is
a generalization of “separable filtering” from [
          <xref ref-type="bibr" rid="ref10">10</xref>
          ], [
          <xref ref-type="bibr" rid="ref1">1</xref>
          ].
        </p>
        <p>Indeed, a Hermitian matrix K(x; y) = K(y; x) of dimension N N can be
expanded as a sum of “eigenprojectors”</p>
        <p>N 1
K(x; y) = X
m=0
m m(x) m(y)
(20)
where m — is a normalized eigenvector, m being the corresponding eigenvalue.
Notice that a matrix with nonnegative elements can have some negative eigenvalues.</p>
        <p>The most contribution in (20) comes from eivenvectors with larger j j so that we
order in the absolute value of the eigenvalues and terminate the series (20) when the sum
of remaining 2m becomes less than the desired accuracy. Notice for a smooth kernel,
the first eigenvectors are also smooth, while the last oscillate rapidly, changing the sign
from pixel to pixel. This is a usual property.</p>
        <p>For kernels used in simulation of the human vision, a good accuracy about 1% is
achieved already for just 2 – 4 (first) eigenvectors. The convolution now is calculated
as:</p>
        <p>f (x; y) =</p>
        <p>X k(x0
It is not necessary to keep all the images gm for all pixels. For a filter of size N
is enough to keep just N rows of each of them.
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Combining factorization and pyramid of resolutions</title>
      <p>We can combine the two approaches. Either we first construct the pyramid of filters and
then each its level is factored.</p>
      <p>In principle the opposite order is also possible, i.e. we first decompose the original
kernel with (20) and then construct the pyramid for each of its m. But for this order
(18)
(19)
(21)
(22)
N it</p>
      <p>Pyramid of Filters — Fast Image Filtering without FFT 9
we should need to calculate eigenvectors (at least the main) of the matrix of size about
40000ı25000 which is too expensive.</p>
      <p>For all levels beyond the 1st the filter is a tuple nKp; r 1 @@Krp o so one must factor
both its components and so that the number of eigenvectors retained be the same. We
find it from the obvious condition that Kp itself is approximated well enough, because
the gradient component, r 1 @@Krp is used for improvement of accuracy to the 2nd order
and is thus less essential than the main term Kp.
5</p>
    </sec>
    <sec id="sec-5">
      <title>Results</title>
      <p>The method was applied to HDRI image of size 4000ı2500 shown in Figure 2 (left).
Filter was K = 2 1a2 (1+(r=1a)2)3=2 with a = 12:5 pixels and was defined in area
2500ı2500 pixels.</p>
      <p>We compared our methods with the exact filtering based on FFT, shown in Figure 2
(right). The results of our methods are shown in Figure 3. All methods and their
combinations give very similar, acceptable results. The difference between images obtained
by the 5 filtering methods is below 0.67%.</p>
      <p>The memory and speed for computer with i7–4800MQ @ 2.7Ghz and 16Gb DDR3
RAM are shown in Table 1
pyramid 1st order pyramid 2nd order FFT
with factorization 12.1 sec, 276 Mb 22.3 sec, 276 Mb n/a
no factorization 27.8 sec, 196 Mb 39.3 sec, 218 Mb 18.8 sec, 2598 Mb</p>
      <p>pyramid (no factorization, no gradient)</p>
      <p>pyramid with gradient, no factorization
pyramid with factorization, no gradient</p>
      <p>pyramid with factorization and gradient
We elaborated and tested the method that allows to filter images of very high resolutions
without FFT. The new method needs much less memory while the speed is comparable
with that achieved with FFT, and in case of pyramid with factorization and no gradient
even higher. The deviation from the standard exact method is meanwhile very low,
below 1% which is admissible for visual applications. It can be further improved by
adding support of gradients (2nd order) and manipulating the settings of the method.
This however increases memory and decreases speed, so the results shown in Section 5
are just a reasonable compromise.</p>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          1.
          <string-name>
            <surname>Szeliski</surname>
          </string-name>
          , R.:
          <source>Computer Vision: Algorithms and Applications</source>
          . Springer (
          <year>2011</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          2.
          <string-name>
            <surname>Franssen</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Coppens</surname>
          </string-name>
          , J.:
          <article-title>Straylight at the retina: scattered papers</article-title>
          .
          <source>Univ. of Amsterdam</source>
          , Faculty of Medicine (
          <year>2007</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          3.
          <string-name>
            <surname>Ginis</surname>
            ,
            <given-names>H.S.</given-names>
          </string-name>
          , Pe´rez,
          <string-name>
            <given-names>G.M.</given-names>
            ,
            <surname>Bueno</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.M.</given-names>
            ,
            <surname>Artal</surname>
          </string-name>
          ,
          <string-name>
            <surname>P.:</surname>
          </string-name>
          <article-title>The wide-angle point spread function of the human eye reconstructed by a new optical method</article-title>
          .
          <source>Journal of vision 12(3)</source>
          ,
          <volume>20</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>20</lpage>
          :
          <fpage>10</fpage>
          (
          <year>2012</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          4.
          <string-name>
            <surname>Spencer</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Inc</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Shirley</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Zimmerman</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Greenberg</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          :
          <article-title>Physically-based glare effects for digital images</article-title>
          .
          <source>Computer Graphics</source>
          <volume>29</volume>
          (
          <issue>08</issue>
          ),
          <fpage>325</fpage>
          -
          <lpage>334</lpage>
          (
          <year>1995</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          5.
          <string-name>
            <surname>Williamson</surname>
            ,
            <given-names>C.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Strachan</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Siebert</surname>
          </string-name>
          , J.:
          <article-title>Simulating the effects of laser dazzle on human vision</article-title>
          .
          <source>In: Proceedings of International Laser Safety Conference</source>
          . pp.
          <fpage>268</fpage>
          -
          <lpage>277</lpage>
          . Orlando, USA (
          <year>2013</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          6.
          <string-name>
            <surname>Yoshida</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mittner</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Mantiuk</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Seidel</surname>
            ,
            <given-names>H.P.</given-names>
          </string-name>
          :
          <article-title>Brightness of glare illusion</article-title>
          .
          <source>In: Proceedings of the 5th symposium on Applied perception in graphics and visualization APGV '08</source>
          . pp.
          <fpage>83</fpage>
          -
          <lpage>90</lpage>
          (
          <year>2008</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          7. Press, W.,
          <string-name>
            <surname>Teukolsky</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Vettering</surname>
            ,
            <given-names>W.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Flannery</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          :
          <article-title>Numerical Recipes in C++: The Art of Scientific Computing (2nd edn) Numerical Recipes Example Book (C++) (2nd edn) Numerical Recipes Multi-Language Code CD ROM with LINUX or UNIX single-screen license revised version</article-title>
          .
          <source>European Journal of Physics</source>
          <volume>24</volume>
          (
          <issue>3</issue>
          ),
          <volume>329</volume>
          (
          <year>2003</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          8.
          <string-name>
            <surname>Pattanaik</surname>
            ,
            <given-names>S.N.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Ferwerda</surname>
            ,
            <given-names>J.A.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Fairchild</surname>
            ,
            <given-names>M.D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Greenberg</surname>
            ,
            <given-names>D.P.:</given-names>
          </string-name>
          <article-title>A multiscale model of adaptation and spatial vision for realistic image display</article-title>
          .
          <source>In: Proceedings of the 25th Annual Conference on Computer Graphics and Interactive Techniques SIGGRAPH '98</source>
          . pp.
          <fpage>287</fpage>
          -
          <lpage>298</lpage>
          . ACM, New York, NY, USA (
          <year>1998</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          9.
          <string-name>
            <surname>Dammertz</surname>
            ,
            <given-names>H.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Sewtz</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Hanika</surname>
            ,
            <given-names>J.</given-names>
          </string-name>
          ,
          <string-name>
            <surname>Lensch</surname>
          </string-name>
          , H.:
          <article-title>Edge-avoiding a-trous wavelet transform for fast global illumination filtering</article-title>
          .
          <source>In: Proceedings of High Performance Graphics</source>
          <year>2010</year>
          . pp.
          <fpage>67</fpage>
          -
          <lpage>75</lpage>
          (
          <year>2010</year>
          ).
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          10.
          <string-name>
            <surname>Perona</surname>
            ,
            <given-names>P.</given-names>
          </string-name>
          :
          <article-title>Deformable kernels for early vision</article-title>
          .
          <source>IEEE Trans. Pattern Anal. Mach. Intell</source>
          .
          <volume>17</volume>
          ,
          <fpage>488</fpage>
          -
          <lpage>499</lpage>
          (
          <year>1995</year>
          ).
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>