Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    primarykey
    data
    text
    <p>I had to go back to the <a href="http://www.vision.ee.ethz.ch/~surf/eccv06.pdf" rel="nofollow">original paper</a> to find the precise answers to your questions.</p> <p><strong>Some background first</strong></p> <p>SURF leverages a common Image Analysis approach for regions-of-interest detection that is called blob detection. The typical approach for blob detection is a difference of Gaussians. There are several reasons for this, the first one being to mimic what happens in the visual cortex of the human brains.</p> <p>The drawback to difference of Gaussians (DoG) is the computation time that is too expensive to be applied to large image areas.</p> <p>In order to bypass this issue, SURF takes a simple approach. A DoG is simply the computation of two Gaussian averages (or equivalently, apply a Gaussian blur) followed by taking their difference. A quick-and-dirty approximation (not so dirty for small regions) is to approximate the Gaussian blur by a box blur.</p> <p>A box blur is the average value of all the images values in a given rectangle. It can be computed efficiently via <em>integral images</em>.</p> <p><strong>Using integral images</strong></p> <p>Inside an integral image, <em>each pixel value is the sum of all the pixels</em> that were <em>above</em> it and on its <em>left</em> in the original image. The top-left pixel value in the integral image is thus 0, and the bottom-rightmost pixel of the integral image has thus the sum of all the original pixels for value.</p> <p>Then, you just need to remark that the box blur is equal to the sum of all the pixels inside a given rectangle (not originating in the top-lefmost pixel of the image) and apply the following simple geometric reasoning.</p> <p>If you have a rectangle with corners ABCD (top left, top right, bottom left, bottom right), then the value of the box filter is given by:</p> <pre><code>boxFilter(ABCD) = A + D - B - C, </code></pre> <p>where A, B, C, D is a shortcut for IntegralImagePixelAt(A) (B, C, D respectively).</p> <p><strong>Integral images in SURF</strong></p> <p>SURF is not using box blurs of sizes 9x9, etc. directly. What it uses instead is several orders of Gaussian derivatives, or Haar-like features.</p> <p>Let's take an example. Suppose you are to compute the 9x9 filters output. This corresponds to a given sigma, hence a fixed scale/octave.</p> <p>The sigma being fixed, you center your 9x9 window on the pixel of interest. Then, you compute the output of the 2nd order Gaussian derivative in each direction (horizontal, vertical, diagonal). The Fig. 1 in the paper gives you an illustration of the vertical and diagonal filters.</p> <p><strong>The Hessian determinant</strong></p> <p>There is a factor to take into account the scale differences. Let's believe the paper that the determinant is equal to:</p> <pre><code>Det = DxxDyy - (0.9 * Dxy)^2. </code></pre> <p>Finally, the determinant is given by: <code>Det = DxxDyy - 0.81*Dxy^2</code>.</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload