---
kind: concept
slug: local-reference-frame
title: Local reference frame
summary: >-
  A coordinate frame attached to a point of a surface, built from the geometry near that point, so that local data can be expressed the same way under any pose. Two designs are covered: a scatter-matrix frame with a sign rule that gives unique axes and one-correspondence pose, and a normal-based frame that places grasp candidates on point clouds. All results are author-reported.
tags: [3d-vision, point-cloud, local-descriptor, object-recognition, robotic-grasping, local-reference-frame]
papers: ["1304.3192", "1706.09911"]
related: [local-surface-descriptor, robotic-grasp-generation, local-feature-matching]
status: draft
updated_at: 2026-10-24
---

## Overview

A local reference frame (LRF) is a right-handed set of three axes attached to
one point p on a surface. The axes are computed from the surface geometry near
p. Neighbour points are then written in this frame before they are described,
so the description does not depend on how the object is posed
[arxiv:1304.3192 §4.1]. The first card states the hard requirements: a frame
must survive noise, changes in mesh resolution, occlusion and clutter
[arxiv:1304.3192 §1].

A frame also gives a pose. If a scene point and a model point have frames F_s
and F_m, one correspondence gives a rotation R = F_s^T F_m and a translation
t = p_s − p_m R [arxiv:1304.3192 eq. 19] [arxiv:1304.3192 eq. 20]. Recognition
then needs one correct correspondence per pose hypothesis, not three
[arxiv:1304.3192 §6.3].

A frame can also place a tool. The grasp-detection card builds a frame at a
sampled surface point and places a two-finger hand in it, so the frame sets
where the gripper goes rather than how two clouds match
[arxiv:1706.09911 §4].

This page rests on two cards, and both report results only from the full
pipeline they belong to, not from the frame alone.

## Variants

### Scatter-matrix frame with sign disambiguation (RoPS)

The frame is the eigen-decomposition of a weighted scatter matrix of the
triangles inside a sphere of radius r around p [arxiv:1304.3192 §3.1]
[arxiv:1304.3192 eq. 4]. Each triangle has an area weight, normalised over the
patch, and a squared distance weight that falls to zero at radius r
[arxiv:1304.3192 eq. 5] [arxiv:1304.3192 eq. 6].

Eigenvectors are only defined up to sign, so the first and third axes are
flipped to match the majority of the scatter. The sign comes from a weighted
first-order sum along each axis [arxiv:1304.3192 eq. 8] [arxiv:1304.3192 eq. 9]
[arxiv:1304.3192 eq. 10]. The second axis is the cross product of the third
and first, which makes the frame right-handed [arxiv:1304.3192 §3.2]. The axes
are ordered by decreasing eigenvalue [arxiv:1304.3192 eq. 7]. Card:
[Rotational Projection Statistics for 3D Local Surface Description and Object Recognition](/papers/1304.3192).

Author-reported repeatability, measured on a tuning set of six models at half
resolution with 0.1 mr noise: 83.5% of pairs have an LRF error below 10°. The
second-best method in the comparison, Petrelli and Di Stefano, reaches 43.2%
[arxiv:1304.3192 §3.3] [arxiv:1304.3192 fig. 3]. The paper also swaps this frame
into spin image, NormHist, LSP and THRIFT for its comparisons, so those
results test descriptor and frame together [arxiv:1304.3192 §7.1].

### Normal-based frame for grasp placement (GPD)

The frame is built from the surface normals in a small ball around a sampled
point p. Its third axis is the surface normal, which is flipped to point
outward [arxiv:1706.09911 §4]. The paper calls it a Darboux-style frame. The
card does not state the ball radius [arxiv:1706.09911 §4], and the normal
estimation radius is not stated either [arxiv:1706.09911 §3]. Card:
[Grasp Pose Detection in Point Clouds](/papers/1706.09911).

The frame sets where the hand goes. The sampler slides a two-finger hand along
its approach direction and then rotates it about another frame axis over a
grid of offsets and rotations. The paper uses 10 offsets and 8 rotations
[arxiv:1706.09911 §4]. It reports at least three times as many true positives
for its grid than for a version that rotates about the other frame axis, on
two BigBird objects [arxiv:1706.09911 fig. 4] [arxiv:1706.09911 §4.1]. The
frame is not evaluated as a pose estimator: the card gives no repeatability
or pose-error numbers for it.

The paper's text and its official code disagree on the frame axes. The text
says the smallest-eigenvalue direction is the normal axis, but the code takes
the largest one, and the card notes that the text reading gives a
surface-tangent axis, not a normal [arxiv:1706.09911 §4].

## When to use which

The table gives the constraints the cards address. All numbers are
author-reported.

| Situation | Use | Why |
|---|---|---|
| Goal is pose from matched features, and the surface is mostly non-symmetric so the eigenvalues are well separated | Scatter-matrix frame with sign rule | The sign rule makes the axes unique when eigenvalues differ [arxiv:1304.3192 §3.2] [arxiv:1304.3192 §3.3]. Pairs under 10° error: 83.5% on the tuning set [arxiv:1304.3192 §3.3] |
| You want pose from one correspondence per hypothesis | Scatter-matrix frame | The paper's pipeline uses one correspondence per pose and relies on frame reliability [arxiv:1304.3192 §6.3] [arxiv:1304.3192 §7.4]. Repeatability was measured only on the tuning set [arxiv:1304.3192 §3.3] |
| Input is a mesh-free depth point cloud and the goal is grasp candidates | Normal-based frame | The frame needs only normals near p, and the pipeline works on the cloud directly [arxiv:1706.09911 §1] [arxiv:1706.09911 §4]. Dense-clutter grasp success was 93% over 288 attempts on a Baxter robot, author-reported [arxiv:1706.09911 tab. 3] |
| Input is a point cloud with no mesh, and you need a repeatable frame for matching | Build a mesh first, and expect this step to affect results | The scatter-matrix frame uses the triangles inside the sphere [arxiv:1304.3192 §3.1]. For the Queen's set, scenes were triangulated and models were meshed by marching cubes [arxiv:1304.3192 §7.3]. The card gives no result for raw point clouds |
| Surfaces are near-symmetric and cover much of the scene | Expect points to be dropped | The pipeline removes scene points whose eigenvalue ratio is close to one [arxiv:1304.3192 §6.2]. The threshold is not stated [arxiv:1304.3192 §6.2] |
| Feature scale varies across the data | Fixed radius, the default | The paper uses 15 mr [arxiv:1304.3192 tab. 2] and does not select keypoint scale [arxiv:1304.3192 §4.2.4]. The adaptive-scale variant from Mian et al. is marginally worse in the paper's tests [arxiv:1304.3192 §7.2] |
| Latency matters | Budget per-point cost | The paper reports 42.6 s per object for keypoints and frames, in MATLAB on 2013 hardware, and says these times are not portable [arxiv:1304.3192 §7.3] |

## Implementation sketch

The cards give no complete code for the frame, so implement from the equations.
The RoPS frame below is the common core for matching. Each step cites the
equation or section that defines it. The numbered choices in the notes are
left open by the paper.

```pseudocode
# Area weight, normalised over the patch  [arxiv:1304.3192 eq. 5]
area_w = triangle_area(tris) / sum(triangle_area(tris))
# Squared distance weight, zero at radius r  [arxiv:1304.3192 eq. 6]
dist_w = (r - norm(p - centroid(tris))) ** 2
# Weighted scatter matrix about p  [arxiv:1304.3192 eq. 4]
C = sum(area_w * dist_w * triangle_scatter(tris, p))
# Axes sorted by decreasing eigenvalue  [arxiv:1304.3192 eq. 7]
vals, vecs = eig_descending(C)
x, z = vecs[0], vecs[2]
# Flip x so the weighted first moment along it is positive  [arxiv:1304.3192 eq. 8, eq. 9]
h = sum(area_w * dist_w * first_moment(tris, p, x))
x = x * sign(h)
# Flip z with the same test  [arxiv:1304.3192 eq. 10]
h = sum(area_w * dist_w * first_moment(tris, p, z))
z = z * sign(h)
# Right-handed frame: y from z and x  [arxiv:1304.3192 §3.2]
y = cross(z, x)
return stack(x, y, z)
```

Notes on what the papers leave open:

- The first moment in eq. 9 is written with a factor 1/6 over the three
  vertices. Any positive scale gives the same sign, but h = 0 is undefined
  [arxiv:1304.3192 §3.2].
- The eigenvalue-ratio threshold that flags symmetric surfaces is not stated
  [arxiv:1304.3192 §6.2]. Eigenvalue ties make the axes ambiguous
  [arxiv:1304.3192 §3.3].
- The radius r is given in mesh-resolution units (mr). The paper does not give
  a numeric definition of mr [arxiv:1304.3192 §4.2.4].
- For the normal-based frame, the ball radius and the meaning of "outward" are
  not stated in the card [arxiv:1706.09911 §4]. Pick the axis convention
  explicitly and test it, given the disagreement noted above
  [arxiv:1706.09911 §4].

## Contradictions

- The two designs use different inputs (triangles in a sphere for RoPS,
  normals in a ball for GPD) and are evaluated on different tasks, so their
  numbers are not comparable [arxiv:1304.3192 §7.1] [arxiv:1706.09911 §8.6].
- Within the grasp-detection paper, the text and the official code disagree
  about which eigen-axis is the normal. The card records this and does not
  resolve it [arxiv:1706.09911 §4].
- The scatter-matrix card's only comparison is against a single baseline on
  the paper's own tuning set [arxiv:1304.3192 §3.3].

## Papers

- [Rotational Projection Statistics for 3D Local Surface Description and Object Recognition](/papers/1304.3192): defines the scatter-matrix frame with a sign rule, and uses it for the RoPS descriptor and for pose from one correspondence.
- [Grasp Pose Detection in Point Clouds](/papers/1706.09911): builds a normal-based frame at sampled points and places two-finger grasp candidates in it, then scores them with a CNN.
