### Table of Contents

This page introduces the notion of local feature frame used
extensively in VLFeat. A *feature frame* or simply
a *frame*, is a geometric object such as a point, a circle, or
an ellipse representing the location and shape of an image
feature. Frame types are closed under certain classes of
transformations of the plane (for example circles are closed under
similarity transformations) and can be used in corresponding
co-variant feature detectors.

# Types of frames

VLFeat uses five types of frames:

*points*defined by their center $(x,y)$;*circles*defined by their center $(x,y)$ and radius $\sigma$;*ellipses*defined by their center $T = (x,y)$, and a positive semidefinte matrix $\Sigma$ such that the ellipse is the set of points $\{\bx \in \real^2: (\bx-T)^\top\Sigma^{-1}(\bx-T)=1\}$;*oriented circles*defined by their center $(x,y)$, their radius $\sigma$, and rotation $\theta$;- and
*oriented ellipses*defined by an affine transformation $(A,T)$, where $A\in\real^{2\times2}$ is the linear component and $T\in\real^2$ the translation.

A frame of each of these types can then be represented by 2, 3, 4,
5, or 6 numbers respectively, packed into a vector `frame`

using the conventions detailed in `vl_plotframe`

.

# Features frames as geometric frames

The purpose of a frame is twofold. First, it specifies a local
image region. Second, and perhaps more importantly, it specifies an
image transformation. A frame instance can in fact be thought as a
transformed variant of a *canonical* or *standard
frame*.

For example, a point $(x,y)$ can be seen as the translated version of the origin $(0,0)$ taken as canonical point frame. Likewise, a circle with center $(x,y)$ and radius $\sigma$ can be seen as the translated and rescaled version of a unit circle centered at the origin, taken as canonical circular frame.

In general, different classes of frames are closed under different classes of 2D transformations. For instance, points are closed under all transformations, while disks are closed under translations, rigid motions, similarity, but not general affine transformations. Within a class of compatible transformations, a frame may specify one uniquely if it can be obtained by transforming the standard frame in only one way. For instance, a point $(x,y)$ can be obtained from $(0,0)$ through a unique translation $T=(x,y)$. Likewise, a circle can be obtained from the standard circle by a unique translation and rescaling. However, neither a point or a circle is sufficient to fully specify a similarity transformation (e.g. a circle leaves the rotation undetermined).

Since frames specify *transformations of the image domain*,
i.e. coordinate changes, they are surrogates of geometric reference
frames. In particular, the mapping from a standard frame to one
measured by a local feature detector is often undone
to *normalize* the local image appearance, a key process in the
computation of invariant feature descriptors.

# Oriented frames

While unoriented frames (points, circles, and ellipses) are easy to
understand, a few words should be spent illustrating
their *oriented* variants. Intuitively, an oriented circle
(ellipse) is a circle (ellipse) with a radius representing its
orientation, such as the following:

This figure was generated by using the `vl_plotframe`

function:

A = eye(2) ; T = [0;0] ; f = [T ; A(:)] ; vl_plotframe(f) ;

This particular oriented frame is conventionally deemed to
be *standard* and, as shown in the code fragment above, it
corresponds to the identity affine transformation. Since this ellipse
is also a circle, the frame can equivalently be represented by an
oriented circle with unit radius and null orientation:

radius = 1 ; theta = 0 ; f = [T ; radius ; theta] ; vl_plotframe(f) ;

A positive rotation of the frame appears clockwise because the image coordinate system is left-handed (Y axis pointing downwards):

radius = 1 ; theta = pi/4 ; f = [T ; radius ; theta] ; vl_plotframe(f) ;

As indicated above, frames are often used to specify image transformations. In particular, oriented ellipses and oriented circles can be obtained by a unique affine transformation of the standard oriented circle shown above (the difference is that, different from oriented ellipses, oriented circles are not close with respect to all affine transformations).

For the oriented ellipse, this affine transformation $(A,T)$ is
encoded explicitly in the `frame`

vector used to represent
it numerically. For example, the code fragment

f = [T ; A(:)] ; vl_plotframe(f) ;

produces the plot

Note that, when features extracted by a detector such
as `vl_covdet`

or `vl_sift`

, are normalized, this
is done by applying the affine transformation which is
the *inverse* of the one specified by the feature frame; in
this way, in fact, the frame is transformed back to its standardized
version.

Similarly, unoriented frames can all be seen as affine transformations of the standard unoriented frame (the unit circle centered at the origin). In this case, however, the affine transformation $(A,T)$ is determined only up to a rotation $(AR, T)$. >When this ambiguity exists and an affine transformation $(A,T)$ needs to be selected, it is customary to choose $R$ such that the Y axis of the image is mapped onto itself (see below).

# Converting between frame types

The function `vl_frame2oell`

can be used to convert any
frame type to an oriented ellipse.

Since all oriented frames are special cases of oriented ellipses,
this transformation is trivial for oriented circles and ellipses. On
the other hand, rewriting unoriented frames as *oriented*
ellipses requires assigning (arbitrarily) an orientation to them.

By default, when an arbitrary orientation has to be selected in the
conversion, this is done in such a way that the affine transformation
$(A,T)$ is *upright*. This means that $A$ maps the Y axis to
itself:

This effect can be better understood by starting from some oriented
frames, removing the orientation, and then
using `vl_frame2oell`

to generate oriented ellipses back:
in the process, orientation information is lost and replaced by a
conventional orientation: