Range image

A range image is a 2D projection of a 3D LiDAR sweep. For a spinning LiDAR, the natural projection is cylindrical: each column corresponds to an azimuth angle and each row to a laser ring (elevation), and each pixel stores the measured depth — often alongside intensity and the ring index. A point with azimuth ϕ\phi and elevation θ\theta maps to

(u,v)=(ϕ2πW,  θθminθmaxθminH)(u, v) = \left( \left\lfloor \frac{\phi}{2\pi} W \right\rfloor,\; \left\lfloor \frac{\theta - \theta_{\min}}{\theta_{\max} - \theta_{\min}} H \right\rfloor \right)

for a W×HW \times H image. This works because a spinning LiDAR is effectively a rotating 1D sensor array — the range image simply recovers the sensor’s native 2D structure that gets flattened into an unordered point list. Concretely, a 64-beam sensor gives H=64H = 64 rows, and the horizontal resolution follows from the azimuth step (an angular step of 0.2°0.2° would give W=360/0.2=1800W = 360/0.2 = 1800 columns).

Why the representation is so useful

Common pitfalls

Why it matters for SLAM

The range image is the bridge between LiDAR processing and the mature toolbox of image processing and CNNs. An entire branch of LiDAR SLAM — SuMa’s projective ICP, SuMa++‘s semantic filtering, learned descriptors and loop-closure networks operating on range views — depends on it. Knowing when a method operates on raw point clouds (LOAM, FAST-LIO2) versus range images (SuMa family) tells you a lot about its speed profile, hardware requirements, and sensor assumptions.