Chapter 1: Introduction to 3D Computer Vision
Understand the foundational concepts of 3D computer vision: how 3D data is represented, how coordinate systems work, how rigid transformations move objects through space, and why homogeneous coordinates simplify everything. Explore rotation representations, common file formats, and the wide-ranging applications driving this field.
- Topics
- 7
- Demos
- 2
- Videos
- 3
- Min read
- 40
Chapter Overview
3D Computer Vision extends traditional image understanding into the third dimension. Instead of analyzing flat pixel grids, we reconstruct, interpret, and manipulate the full three-dimensional structure of the world.
What is this chapter about? We establish the mathematical and conceptual foundations you will use throughout every subsequent chapter. You will learn how 3D data is stored and represented, how different coordinate systems relate to each other, how objects are moved through space with rigid transformations, and why homogeneous coordinates are the standard tool for combining these operations.
Why does this matter? Every algorithm in 3D vision---from stereo matching to neural radiance fields---relies on coordinate transforms, rotation representations, and 3D data structures. A solid grasp of these fundamentals prevents confusion later when matrices start multiplying.
How the topics connect: We begin with 3D representations (point clouds, meshes, voxels) to understand what data we work with. Then coordinate systems explain where things live in space. Rigid transformations and homogeneous coordinates give us the tools to move between coordinate systems. Rotation representations address the subtleties of encoding orientation. We close with data formats for practical I/O and a survey of applications that motivate the entire field.
Chapter Roadmap
Click any topic to jump in
3D Representations
Point clouds, meshes, voxels, and implicit surfaces — the raw materials of 3D vision.
Coordinate Systems
World, camera, and image frames — where things live in space and how to express positions.
Tools for coordinate transforms
Rigid Transformations
Rotation and translation — how to move and orient objects without deforming them.
Homogeneous Coordinates
Extending to 4D so rotation and translation combine into a single matrix multiply.
Representations in practice and in the wild
Rotation Representations
Euler angles, quaternions, and axis-angle — different ways to encode orientation and their trade-offs.
3D Data Formats
PLY, OBJ, PCD — file formats for storing and exchanging 3D geometry data.
Applications
Autonomous driving, AR/VR, and medical imaging — where 3D vision meets the real world.
Topics
7 topics in this chapter
A photograph throws away the one quantity a robot most needs: how far away things are. Every pixel records colour along a ray, but not where along that ray the surface sits, so a 2D image alone cannot tell a small near box from a large distant one. 3D computer vision recovers and reasons about that missing geometry, and the very first decision is how to store it. Unlike an image, which is always a regular grid, 3D shape has several competing encodings. A LiDAR returns a loose cloud of points with no connectivity. A game engine wants a triangle mesh it can rasterize. A neural network for occupancy prediction is happiest with a regular voxel grid, and recent methods such as NeRF and DeepSDF store a surface as the zero level set of a learned function. This topic opens the plan by comparing the three main families, point clouds, meshes, and voxels or implicit functions, in terms of memory, what each makes easy, and what each makes hard. Later topics build the coordinate machinery needed to move any of them around in space.
Definition
A 3D representation is a data structure that encodes the geometry of a scene or object. Explicit representations store samples of the surface directly: points, or vertices joined by faces. Volumetric representations store values on a 3D grid. Implicit representations store a function whose zero level set is the surface, so geometry is queried rather than listed.
In this topic
- 1Point Clouds
- 2Triangle Meshes
- 3Voxel Grids and Implicit Representations
Point Clouds
A point cloud is an unordered set of 3D points , often with extra per-point attributes such as colour, a surface normal, or LiDAR return intensity. It is the raw output of LiDAR scanners, depth cameras and photogrammetry, which makes it the most common 3D format in practice. Its strengths are simplicity and fidelity to the sensor: nothing is interpolated. Its weaknesses follow from what is missing. There is no connectivity, so the surface between points is unknown, density varies with range, and because the order of points is arbitrary, any learning method must give the same answer for every permutation of the list.
A point cloud is a set where each . The storage cost is exactly floats (plus per-point attributes). Because points are unordered, any algorithm must be permutation-invariant: if , then for any permutation . This constraint directly motivated architectures like PointNet, which uses per-point MLPs followed by a symmetric function (max pooling).
A LiDAR sensor returns 100,000 points, each with (x, y, z, intensity). How much memory does this require using 32-bit floats?
Triangle Meshes
A triangle mesh represents a surface with a vertex list of 3D positions and a face list of index triples saying which three vertices form each triangle; edges are implied by the faces. Unlike a point cloud, a mesh states the surface explicitly, so normals, areas, geodesic distances, rendering and collision tests are all well defined. The price is that connectivity must be valid: holes, flipped faces and non-manifold edges break many algorithms. Euler's formula for a closed sphere-like surface gives a quick sanity check, because in a watertight triangle mesh every edge is shared by exactly two faces.
A mesh consists of vertices and faces . The Euler characteristic is a topological invariant: for any closed surface homeomorphic to a sphere. For a triangle mesh, (each edge shared by two faces), so . This means given and , you can predict exactly --- any deviation indicates holes or non-manifold geometry.
A mesh has 1,000 vertices and 1,996 triangular faces. Verify this satisfies Euler's formula for a closed surface: .
Voxel Grids and Implicit Representations
A voxel grid divides space into equal cubes and stores one value per cube, such as occupancy or a signed distance. It is the 3D analogue of an image, so 3D convolutions apply directly, but memory grows with the cube of the resolution, and almost all of it describes empty space. Implicit representations avoid the grid by storing a function and defining the surface as the set where , with negative values inside. Neural implicit models such as DeepSDF, Occupancy Networks and NeRF learn with a network, giving continuous, compact shapes at the cost of having to query the network to extract a surface.
A dense grid at resolution costs memory, but a smooth surface crosses only cells, so in the probe a radius-120 sphere in a grid touches about 1.1 percent of the voxels. Octrees and sparse hash grids store only those cells. An implicit signed distance function describes the surface as . Where it is differentiable it satisfies , and points away from the nearest surface point, so projects a point onto the surface. The identity fails on the medial axis, where two surface points are equally near.
A voxel grid has resolution with a single float per voxel. How much memory is needed? What resolution would fit in 1 GB?
Related Problems on PixelBank
The previous topic chose how to store geometry, but a list of coordinates is meaningless until we know which frame it is written in. The same physical corner of a table might be (2.0, 0.5, 0.8) metres from the room's origin, (0.1, -0.3, 1.9) metres from the camera, and pixel (445, 165) in the image. A self-driving car juggles even more frames: the world map, the vehicle body, each LiDAR, and each camera. Many of the most stubborn bugs in 3D vision are not wrong algorithms but coordinates silently mixed across frames, or two libraries that disagree about which axis points up. This topic sets out the three frames that every later chapter relies on. The world frame is a fixed global reference. The camera frame is attached to the optical centre, with Z looking into the scene. The image frame is measured in pixels from the top-left corner. Along the way we write the transformations between them, a rigid change of frame followed by a perspective division, which the next topics turn into matrix machinery.
Definition
A coordinate system, or reference frame, is an origin plus three orthonormal axes against which positions are measured. Changing frames maps a point's coordinates in one frame to its coordinates in another while the physical point stays fixed. In 3D vision the standard chain is world frame, then camera frame, then 2D image (pixel) frame.
In this topic
- 1World Coordinate System
- 2Camera Coordinate System
- 3Image (Pixel) Coordinate System
World Coordinate System
The world coordinate system is a fixed reference frame that every object, sensor and camera in a scene can be expressed in, so measurements from different devices can be compared directly. Its origin and axes are a choice, not a physical fact: a robot might put the origin at its charging dock with Z up, a reconstruction tool might use the first camera's position, and a graphics engine might use Y up. What matters is that the choice is fixed and documented. Mixing conventions, for example Z-up robotics data with Y-up graphics assets, silently rotates everything by 90 degrees, which is one of the most common integration bugs.
The world frame defines a global origin and orthonormal axes . Any point in space has a unique coordinate vector relative to this frame. The choice of world frame is arbitrary but fixed: all other frames are defined relative to it. In robotics, the world frame is typically anchored to the ground plane with pointing up; in computer vision, conventions vary (-up or -up), so checking the convention is critical before combining data from different sources.
A scene has a camera at position (2, 1, 3) and an object at (5, 1, 0) in world coordinates. What is the Euclidean distance between them?
Camera Coordinate System
The camera coordinate system has its origin at the optical centre, with Z along the viewing direction into the scene, X to the right and Y down in the OpenCV convention. Graphics libraries such as OpenGL instead look down negative Z with Y up, so always check which one a tool uses. A world point is moved into this frame by undoing the camera's pose: subtract the camera position and rotate by the camera's orientation , giving . Only points with positive are in front of the camera, which makes a negative depth an immediate sign of a convention error.
The camera frame has its origin at the optical center , with the -axis along the optical axis (pointing into the scene), pointing right, and pointing down. Transforming a world point to camera coordinates uses where is the camera's rotation and is the camera position. The perspective projection then divides by : . Only points with are in front of the camera.
A camera is at world position t = (1, 0, 2) looking along the world Z-axis (no rotation). A point P_world = (3, 1, 5) is in world coordinates. What are its camera coordinates?
Image (Pixel) Coordinate System
The image coordinate system is measured in pixels on the sensor, with the origin at the top-left corner, increasing to the right and increasing downward. A camera-frame point reaches it in two steps. First, perspective division by the depth gives normalized coordinates and , which is where size shrinks with distance. Second, an affine map scales by the focal length in pixels and shifts by the principal point , where the optical axis meets the sensor. The division is the only nonlinear step, and it is also why depth cannot be recovered from one image.
The image frame maps normalized coordinates to pixel coordinates via the intrinsic matrix: and . The origin is the principal point (ideally the image center), and are the focal length in pixel units. This linear mapping means pixel coordinates are an affine function of the normalized projection: the full pipeline from 3D to pixels is a composition of a rigid transform, a perspective division (nonlinear), and an affine scaling.
A point in camera coordinates is . The camera has focal length pixels and principal point . Find the pixel coordinates.
Related Problems on PixelBank
The previous topic named the frames; now we need the operation that moves coordinates between them. When a camera turns its head or a robot carries a part across a table, the object does not stretch or bend, only its position and orientation change. Such motions are rigid transformations, and they appear in nearly every algorithm in this plan: aligning two LiDAR scans, expressing a world point in a camera frame, chaining a robot arm's joints, tracking an object between frames. A rigid motion in 3D has six degrees of freedom, three for orientation and three for position, and it can always be written as a rotation followed by a translation. This topic covers rotation matrices and the constraints that make a 3-by-3 matrix a valid rotation, translation vectors, and composition, where the order of operations matters and swapping two steps gives a different result. The next topic packs rotation and translation into a single 4-by-4 matrix so that long chains become simple matrix products.
Definition
A rigid transformation is a map that preserves distances and handedness, where is a 3-by-3 rotation matrix with and , and is a 3-vector translation. The set of all such maps is the special Euclidean group SE(3), which has six degrees of freedom.
In this topic
- 1Rotation Matrices
- 2Translation Vectors
- 3Composing Transformations
Rotation Matrices
A rotation matrix is a 3-by-3 matrix that turns vectors about the origin without changing their lengths or the angles between them. Two conditions define it: orthogonality, , which preserves lengths and makes the inverse just the transpose, and , which rules out mirror images. Together they cut nine numbers down to three degrees of freedom. The columns of are the rotated frame's axes written in the original frame. All such matrices form the group SO(3). Because rotations compose by multiplication, numerical drift can creep in, so long chains are periodically re-orthonormalized.
A rotation matrix satisfies and . These two constraints reduce the 9 free parameters of a matrix to just 3 degrees of freedom (matching the 3 rotational DOF of a rigid body). The columns of form an orthonormal basis: where . Rotation preserves lengths () and angles ().
Verify that is a valid rotation matrix.
Translation Vectors
A translation vector shifts every point by the same displacement, so it preserves distances, angles and orientation, and unlike a rotation it leaves no point fixed. Translation is not a linear map in ordinary 3D coordinates, because the origin moves, which is why it cannot be written as a 3-by-3 matrix and must be added separately. A rigid transformation applies the rotation first and then the translation, . The order is part of the definition: translating first and then rotating also moves the translation itself, producing a different result whenever the rotation is not the identity.
Translation is a vector that shifts every point by the same offset: . Unlike rotation, translation is not a linear map in standard coordinates because for any matrix (unless we augment the coordinates). Translation has 3 DOF, one per axis. The magnitude gives the displacement distance, and gives the direction of motion.
A point P = (1, 2, 3) is rotated 90 degrees about the Z-axis, then translated by t = (5, 0, 0). What is the final position?
Composing Transformations
Rigid transformations chain: if maps frame A to frame B and maps B to C, the composite maps A straight to C. Substituting gives , so the rotations multiply and the first translation is rotated by the second rotation. Composition is associative but not commutative: rotations about different axes do not commute, and a rotation does not commute with a translation. Inverting a transform gives . Getting the order or the direction of a chain wrong is the most common pose bug, which is why careful code names transforms by their source and target frames.
A rigid transformation has 6 DOF (3 rotation + 3 translation). Composing two transforms gives . Note that the order matters: in general because rotation is non-commutative. The inverse is .
Transform T1 rotates 45 degrees about Z. Transform T2 translates by (1, 0, 0). Apply T1 then T2 to point P = (1, 0, 0). Then apply T2 then T1 to the same point. Are the results the same?
Related Problems on PixelBank
The previous topic left an awkward asymmetry: rotation is a matrix product, but translation is a separate addition, so a chain of ten rigid motions becomes a tangle of nested sums. Camera projection is worse, because it divides by depth, which no matrix can do in ordinary coordinates. Homogeneous coordinates fix both problems with one idea: add a fourth coordinate and treat vectors that differ only by a nonzero scale as the same point. Translation then becomes a linear map, a whole rigid transformation becomes one 4-by-4 matrix, and chains reduce to matrix multiplication. Perspective division becomes the final step of dividing by the last coordinate. As a bonus, setting the fourth coordinate to zero represents a direction, a point at infinity, which explains vanishing points in photographs. This topic covers the 4D embedding, the 4-by-4 transformation matrix and its inverse, and the projective view of points at infinity that the camera models of the next chapter rely on.
Definition
Homogeneous coordinates represent a 3D point by any 4-vector with , and recover it by dividing by the last component. Vectors with last component 0 represent directions, or points at infinity. In this form rigid transformations and projections become single matrix multiplications.
In this topic
- 1From 3D to 4D: Adding the Homogeneous Coordinate
- 2The 4x4 Transformation Matrix
- 3Projective Geometry and Points at Infinity
From 3D to 4D: Adding the Homogeneous Coordinate
A 3D point becomes by appending a fourth component, the weight . Any nonzero multiple, such as , names the same point, and converting back means dividing the first three entries by . This redundancy is the whole trick. Because the point carries a constant 1, a matrix can add a constant offset, so translation becomes linear. Because only ratios matter, the divide-by-depth of perspective projection becomes the final divide-by-. Code must divide before comparing or measuring distances, since two vectors that look different may be the same point.
In homogeneous coordinates, a 3D point becomes , and more generally for any . This adds one dimension but gains a crucial property: translation becomes a linear operation. The mapping back to Euclidean space is , which is well-defined for . This normalization is the same perspective division used in camera projection, unifying the mathematical treatment of transformations and projection.
Convert the homogeneous point (6, 4, 10, 2) to standard 3D coordinates. Then convert (3, 2, 5) to homogeneous.
The 4x4 Transformation Matrix
A rigid transformation becomes the 4-by-4 matrix , with the rotation in the top-left block and the translation in the last column. Multiplying by returns , so rotation and translation happen in one product, and a chain of transforms is a chain of matrix multiplications. The inverse keeps the same shape, with in the corner and as the translation, which avoids a general 4-by-4 inversion. Robotics, graphics and SLAM libraries all store poses this way.
In homogeneous coordinates, the rigid transform becomes a single matrix multiplication: . Composing transforms is now just matrix multiplication: . The inverse is . This representation is the standard in robotics and graphics because it makes transformation chains simple left-to-right (or right-to-left) matrix products.
Write the 4x4 matrix for: rotate 90 degrees about Z, then translate by (3, 1, 0).
Projective Geometry and Points at Infinity
A homogeneous vector with , such as , cannot be divided back to a finite point. It represents a direction, a point at infinity. Projective geometry treats these as ordinary points, so two parallel lines meet at the point at infinity in their shared direction. A camera maps that point to a finite pixel, the vanishing point, which is why railway tracks converge in a photo. Rigid transformations treat directions correctly for free: the translation column is multiplied by , so a direction is rotated but never shifted.
Points along the line , projected with and principal point (320, 240), land at pixels (320, 365), (677, 276), (801, 245) and (820, 240) for . They approach (820, 240), which is exactly the projection of the direction . Every line with that direction approaches the same pixel, so parallel lines converge at a single vanishing point. Points with form the plane at infinity, which is unchanged by rigid motions and affine maps and only moved by projective ones.
A direction vector (1, 0, 0) in homogeneous coordinates is (1, 0, 0, 0). What happens when you apply a rigid transformation T to it?
Related Problems on PixelBank
Rigid transformations needed a rotation, and the rotation matrix from the previous topics is unambiguous but wasteful: nine numbers for three degrees of freedom, with six constraints that numerical drift slowly violates. In practice rotations are stored, interpolated and optimized in other forms, and each form fails in a characteristic way. Euler angles are compact and readable, but they lose a degree of freedom at certain angles, the gimbal lock that once troubled the Apollo guidance platform. Quaternions use four numbers, never lock, and interpolate smoothly, but each rotation has two quaternions, and . The axis-angle rotation vector is minimal and ideal for optimization, yet it wraps around at 180 degrees. Choosing badly shows up as jittering animations, optimizers that stall, or neural networks that cannot learn a pose. This topic compares the three representations, shows how to convert between them, and explains why SLAM back ends optimize small rotation vectors while engines store quaternions. The chapter then turns to the file formats that store all this geometry.
Definition
A rotation representation is a parameterization of the rotation group SO(3), which has three degrees of freedom. Common ones are Euler angles (three successive axis rotations), unit quaternions (four numbers on the unit sphere, with and equivalent), and axis-angle rotation vectors (a 3-vector whose direction is the axis and whose length is the angle in radians).
In this topic
- 1Euler Angles and Gimbal Lock
- 2Quaternions
- 3Axis-Angle and Rotation Vectors
Euler Angles and Gimbal Lock
Euler angles write a rotation as three successive rotations about coordinate axes, for example yaw about Z, then pitch about Y, then roll about X. Three numbers with physical meaning make them popular for user interfaces and for vehicles. Their flaw is gimbal lock: when the middle angle reaches 90 degrees, the first and third axes line up, so two of the angles control the same motion and one degree of freedom disappears. Near that configuration small rotations need huge angle changes, which breaks interpolation and optimization. There are also 12 axis orders, plus intrinsic or extrinsic readings, so mismatched conventions are a classic source of bugs.
Differentiate the rotation matrix with respect to the three angles and look at the singular values of that 9-by-3 Jacobian. In the probe, with roll 10 and yaw 20 degrees, the smallest singular value is 0.0247 at pitch 0, 0.0030 at pitch 80, 0.0003 at pitch 89, and exactly 0 at pitch 90. The rank drops from 3 to 2: one direction of rotation can no longer be produced by any small change in the angles. Near the lock an optimizer must take enormous angle steps to make a small rotation, which is why pose solvers avoid Euler angles internally.
Using the convention , show that at pitch = 90 degrees the matrix depends only on roll minus yaw. Which of these equals (roll = 0, pitch = 90, yaw = 30): (roll = 30, pitch = 90, yaw = 0), (roll = -30, pitch = 90, yaw = 0), or (roll = 10, pitch = 90, yaw = 40)?
Quaternions
A unit quaternion with norm 1 encodes a rotation by angle about unit axis as and . Four numbers on a smooth sphere give no gimbal lock, composition is a quaternion product, and renormalizing is cheap compared with re-orthogonalizing a matrix. Spherical linear interpolation, SLERP, moves along the great circle between two quaternions at constant angular speed, which is why game engines, robotics middleware and SLAM systems store orientation this way. The catch is the double cover: and are the same rotation, so interpolation and averaging must first flip one onto the same hemisphere.
A unit quaternion with represents a rotation via (quaternion multiplication). Quaternions live on the 3-sphere , a smooth manifold with no singularities, avoiding gimbal lock entirely. The double-cover property means and represent the same rotation. Interpolation between rotations uses SLERP: where , producing constant angular velocity.
Convert a 90-degree rotation about the Z-axis to a unit quaternion.
Axis-Angle and Rotation Vectors
Euler's rotation theorem says every rotation is a single turn by angle about some unit axis . The rotation vector packs both into one 3-vector, , whose direction is the axis and whose length is the angle in radians. Rodrigues' formula converts it to a matrix, and it equals the matrix exponential of the skew-symmetric matrix built from . With three numbers and no constraints, it suits optimization: bundle adjusters and OpenCV's solvePnP use it for small pose updates. Its weak spot is the wrap at : rotation vectors of length near in opposite directions describe nearly the same rotation, and leaves the axis undefined.
Any rotation can be written as a rotation by angle around unit axis : (Rodrigues' formula). The rotation vector compactly encodes both axis and angle in 3 parameters. The matrix exponential connects them: and . This is the Lie algebra to Lie group mapping, making axis-angle the natural representation for optimization.
A rotation vector is . What axis and angle does this represent? What is the corresponding quaternion?
Related Problems on PixelBank
The previous topics described geometry as arrays in memory, but real pipelines exchange it through files: a scanner writes a point cloud, a reconstruction tool turns it into a mesh, a renderer or a 3D printer consumes it. Choosing the wrong format quietly loses information. Exporting a coloured scan to STL drops the colour, a large ASCII file can take hundreds of times longer to load than its binary twin, and a viewer that expects Y-up can turn a Z-up model on its side. A handful of formats cover most of practice. PLY is the flexible research format for scans and meshes with arbitrary per-vertex properties. OBJ is the text-based interchange format of graphics, with separate lists of positions, texture coordinates and normals. PCD is the Point Cloud Library's format, and STL and glTF serve 3D printing and web delivery. This topic examines how each format lays out its bytes, what it can and cannot store, and how to choose one, before the chapter closes with applications.
Definition
A 3D data format is a file layout for geometry and its attributes. It specifies which elements exist (points, vertices, faces, materials), what properties each element carries (position, colour, normal, texture coordinates), and whether values are stored as human-readable text (ASCII) or packed binary, which is smaller and much faster to parse.
In this topic
- 1PLY (Polygon File Format)
- 2OBJ (Wavefront Object)
- 3PCD (Point Cloud Data) and Other Formats
PLY (Polygon File Format)
PLY, the Stanford polygon format, starts with a short text header that declares each element, such as vertex and face, with its count and a typed list of properties, followed by the data in ASCII or in little- or big-endian binary. Because the header describes the layout, a file can add any per-vertex or per-face property, such as colour, normals, confidence or curvature, and readers skip what they do not understand. That flexibility made it the standard output of 3D scanners and the default in Open3D, MeshLab and CloudCompare. For large data, always write binary: ASCII spends many characters per number and must be parsed.
A binary PLY file size is exact: header plus vertex count times vertex size plus face count times face size. For xyz floats and RGB bytes the vertex size is 15 bytes, and a triangle stored as a 1-byte count with three 4-byte indices is 13 bytes. ASCII size depends on formatting, roughly 8 to 10 characters per float and 2 to 4 per colour. The size gap is therefore modest, 1.66 times in the probe, but parsing text is far slower than copying bytes, 721 ms versus 3 ms for a 164,000-vertex mesh, which is the real reason to prefer binary.
A PLY file header says: element vertex 1000, element face 1800, property float x/y/z, property uchar red/green/blue. Estimate the ASCII and binary file sizes.
OBJ (Wavefront Object)
OBJ is a plain-text format from graphics with one record per line: v for a vertex position, vt for a texture coordinate, vn for a normal, and f for a face. A face corner is written as position/texture/normal indices, counted from 1, so positions, texture coordinates and normals live in separate lists and can be shared independently. That is how a cube can share 8 corner positions while each face still gets its own flat normal. Materials go in a companion MTL file. OBJ is universally supported and easy to inspect, but it has no binary form, no per-vertex colour in the specification, and large meshes load slowly.
OBJ size scales with the number of characters per value. In the probe, a 163,842-vertex, 327,680-face mesh exported as OBJ took 12.8 MB, while binary PLY took 6.2 MB, about 2.1 times smaller, and binary glTF 5.9 MB. Binary STL took 16.4 MB, because it stores each triangle independently as 50 bytes: a normal, three full vertex positions and an attribute field, with no shared vertices. Sharing matters because a closed triangle mesh has about twice as many faces as vertices, so per-face vertex copies repeat every position about six times.
An OBJ file contains: 'f 1/1/1 2/2/1 3/3/1'. What does this mean?
PCD (Point Cloud Data) and Other Formats
PCD is the native format of the Point Cloud Library; Open3D also reads and writes it. Its header lists field names, sizes, types and counts, then data in ASCII, binary or compressed binary. It records width and height, so an organized cloud from a depth camera keeps its pixel grid, which allows fast neighbour lookups. Colour is usually packed into one 4-byte field. Other formats serve other jobs. STL stores bare triangles for 3D printing. glTF is a compact, GPU-ready format for the web and AR. LAS and E57 archive survey LiDAR with return and scanner metadata. Choose by the downstream tool.
Bytes per point decide what fits in memory and on disk. A binary PLY with xyz floats and three colour bytes costs 15 bytes per point. PCD packs RGB into one 4-byte field, so the same data costs 16 bytes, slightly more, but aligned. A float normal adds 12 bytes in either format. Binary STL has no shared vertices, costing 50 bytes per triangle. Because a closed mesh has about two triangles per vertex, that is about 100 bytes per vertex, versus about 38 for a binary PLY with 4-byte indices. Format choice can therefore change file size by more than two times for identical geometry.
You need to: (1) share a textured 3D model on a website, (2) 3D-print a mechanical part, (3) process a LiDAR scan. Which format for each?
The chapter so far has been toolkit: representations, frames, rigid motions, homogeneous matrices, rotation parameterizations and files. This closing topic shows where that toolkit earns its keep, and what accuracy each application demands from it. A self-driving car fuses LiDAR and camera data hundreds of thousands of points at a time, and if its sensors' relative pose is off by a tenth of a degree, a LiDAR return at 100 metres lands about 17 centimetres from the right pixel. An augmented-reality headset re-estimates its six-degree-of-freedom pose about 90 times a second, and a virtual object that drifts by more than a pixel or two looks unconvincing. Medical CT and industrial scanners work with volumes of hundreds of millions of voxels, where storage and sub-millimetre accuracy dominate. In each case the same ideas recur: a point cloud or volume as data, rigid transforms between sensors, and a projection into an image. The next chapter starts on the most important of those, the camera model and its calibration.
Definition
3D computer vision applications are systems that recover, track or use 3D geometry from sensors. The main families are autonomous driving and robotics (3D detection, mapping and localization), augmented and virtual reality (real-time six-degree-of-freedom tracking and scene meshing), and medical or industrial 3D imaging (volumetric reconstruction, segmentation and metrology).
In this topic
- 1Autonomous Driving and Robotics
- 2Augmented and Virtual Reality
- 3Medical Imaging and 3D Scanning
Autonomous Driving and Robotics
Self-driving vehicles combine LiDAR, cameras and radar to build a 3D picture of the road many times per second. 3D object detection outputs oriented boxes for cars, cyclists and pedestrians, with position, size and heading. Simultaneous localization and mapping, SLAM, tracks the vehicle's pose against a map that it also updates. Robots use the same tools to estimate an object's 6D pose before grasping it. All of this rests on calibration: every sensor pair needs an accurate rigid transform between frames, because a small angular error becomes a large position error at range, and a detection projected to the wrong pixels can be fused with the wrong object.
Fusing a LiDAR point with an image means transforming it into the camera frame and projecting it, followed by division by depth. An angular calibration error moves a point at range sideways by about , so the error grows linearly with distance. For degrees that is 5.2 cm at 30 m and 17.5 cm at 100 m, enough to put a pedestrian's edge onto the background. Translation errors behave the opposite way: a fixed offset matters most up close and fades with distance. Long-range fusion is therefore dominated by rotation accuracy.
A self-driving car's LiDAR produces 150,000 points per scan at 10 Hz. How many points per second must the 3D object detection model process?
Augmented and Virtual Reality
AR and VR headsets track the head's pose in six degrees of freedom, three rotations and three translations, using visual-inertial odometry that fuses camera images with the accelerometer and gyroscope of an inertial measurement unit. The IMU gives fast, smooth motion, and the cameras correct its drift. The headset also builds a mesh of the room, so virtual objects can sit on real tables and be hidden behind real furniture, and it estimates the 3D pose of the hands for gesture input. Because rendering must keep up with the display, every tracking step must fit in a few milliseconds.
A one-pixel error at focal length corresponds to an angle of about radians, so with pixels one pixel is degrees. Keeping a virtual object within one pixel therefore needs rotation errors below roughly 0.1 degree. For translation, a sideways shift at distance moves the image by about pixels, so at arm's length, 0.5 m, one pixel is 1 mm. Higher-resolution displays shrink both budgets in proportion to the focal length in pixels, which is why tracking accuracy targets tighten with every headset generation.
An AR headset tracks at 90 Hz with 6DoF pose. How many rotation and translation parameters are estimated per second?
Medical Imaging and 3D Scanning
Medical imaging reconstructs 3D volumes: CT combines X-ray projections from many angles into a stack of slices, and MRI measures a volume directly. Analysis then works in 3D, segmenting organs, tumours and vessels, measuring their volumes, and planning surgery. Navigation systems register the preoperative scan to the patient on the table with a rigid transform, so instruments can be shown inside the anatomy. Industrial scanners use structured light or lasers to triangulate millions of surface points and compare a manufactured part to its CAD model, flagging deviations of a fraction of a millimetre. Both domains are limited by data volume and by registration accuracy.
CT reconstruction inverts the Radon transform: each X-ray measures a line integral of tissue attenuation, , and filtered back-projection recovers slice by slice. Volume sizes follow directly from the grid: slices is 78.6 million voxels, about 157 MB at 16 bits, and is 262 million. Memory grows linearly with slice count and quadratically with in-plane resolution, so doubling both in-plane axes costs four times the storage.
A CT scanner takes 1000 slices of 512x512 pixels. How many voxels does the 3D reconstruction have? If each voxel stores a 16-bit Hounsfield unit, what is the data size?