Skip to content
AI360Xpert
Beta

Point Clouds as 3D Point Sets

Point clouds keep raw 3D coordinates with no grid and no surface, which saves memory but leaves neighbor search to you.

A point cloud stores exact 3D positions with no grid, so memory stays tiny while density falls with range squared.
A point cloud stores exact 3D positions with no grid, so memory stays tiny while density falls with range squared.

Why Does This Exist?

Sensors output points, not shapes. The representation closest to the sensor keeps (x,y,z)(x, y, z) plus intensity with no quantization. Point cloud processing teaches the network side; this page teaches the representation trade: exact positions and tiny memory against no surface, no inside-outside test, and density that collapses with distance. The grid alternative that buys convolutions at cubic cost is voxels.

Think of It Like This

Stars plotted from a telescope log

A telescope log lists each star's coordinates and brightness with no lines between them. The list is tiny and exact, but finding constellations means searching neighbors yourself. Drawing grid lines over the sky would quantize every star.

Points are the log and voxels are the grid overlay. The analogy stops at motion: stars sit still while LiDAR points sweep, so one parked frame and one highway frame with the same count carry very different densities.

How It Actually Works

A cloud is a matrix PP in RN×3\mathbb{R}^{N \times 3} with NN rows for points and 3 columns for coordinates, plus optional feature columns such as intensity. Memory is M=N×3×4M = N \times 3 \times 4 bytes for float32 coordinates, where 3 is the coordinate count and 4 is the bytes per float. Density falls roughly as 1/r21/r^2 with range rr because a fixed angular beam spreads over a wider patch the farther it travels. Neighbor search needs a KD-tree or spatial hashing since adjacency is not stored anywhere in the matrix.

Worked example

Take N=100,000N = 100{,}000 points. Memory is 100,000×3×4=1,200,000100{,}000 \times 3 \times 4 = 1{,}200{,}000 bytes, about 1.21.2 MB. A car at 1010 m returns about 800800 points; the same car at 4040 m returns 800×(10/40)2=800×0.0625=50800 \times (10/40)^2 = 800 \times 0.0625 = 50 points. That 1616-fold drop is why far objects need different thresholds than near ones.

Code

n = 100_000print(n * 3 * 4 / 1e6)# -> 1.2
near_points, r0, r1 = 800, 10, 40print(near_points * (r0 / r1) ** 2)# -> 50.0

Watch Out For

Treating density as uniform across range

A fixed neighbor radius of 0.20.2 m finds dozens of neighbors near the sensor but two or three far away, so the same surface produces different features at different ranges. The symptom is a detector that fires on near cars and sleeps on far ones. Scale the radius with rr or sample fixed-kk neighborhoods instead of fixed-radius balls.

The Quick Version

  • Point clouds store exact positions with minimal memory and no quantization.
  • Density drops with range squared, so far objects look sparse.
  • No surface or occupancy answer comes free; search builds neighborhoods.
  • Do not use raw points when you need watertight surfaces; mesh or field instead.
  • 100,000100{,}000 points fit in about 1.21.2 MB.