7. Camera Model

Pinhole camera, homogeneous coordinates, intrinsic & extrinsic matrices, projection pipeline, camera calibration

Contents
1. Pinhole Camera Model 2. Projective Geometry 3. Vanishing Points & Lines 4. Homogeneous Coordinates 5. Projection Matrix Derivation 6. Intrinsic Parameters 7. Extrinsic Parameters 8. Full Camera Matrix 9. Camera Calibration 10. Back-Projection (2D to 3D) 11. Homography Interactive: Intrinsic Matrix Builder Interactive: Back-Projection Tool Interactive: Rotation Explorer Interactive: Full Projection Pipeline Interactive: Homography Visualizer Interactive: Projection Pipeline Flashcards

1. Pinhole Camera Model

A camera maps the 3D world onto a 2D image. Understanding this mapping mathematically is fundamental to computer vision: it lets us reconstruct 3D structure from images, predict where a 3D point will appear in an image, and calibrate sensors for autonomous systems.

The central question of this module:

Core Problem
Given a point $P = (X, Y, Z)$ in 3D world coordinates, on which pixel $(u, v)$ will it appear in the image?

Why a Pinhole?

If you place a bare sensor in front of a scene, every point sends light in all directions — every sensor cell receives light from many scene points simultaneously, producing a completely blurred image. A barrier with a tiny aperture (the pinhole) forces each sensor cell to receive light from only one direction, producing a sharp (but inverted) image.

Pinhole camera model showing image plane, pinhole, and virtual image plane
Pinhole camera model: every scene point, the optical center, and its image point are collinear.
ComponentDescription
Optical center $C$The pinhole — all light rays pass through this point
Image planeSensor behind the pinhole — receives the inverted image
Virtual image planeConceptual plane in front of $C$ at distance $f$; gives an upright image and is used for mathematics
Focal length $f$Distance from optical center to image plane
Principal pointIntersection of the principal axis with the image plane
Lens camera diagram
Real cameras use lens systems instead of a true pinhole: more light, but optical aberrations. The pinhole model remains the foundational mathematical abstraction.
Historical context: camera obscura

The pinhole principle dates back to antiquity. Mo-Ti (China, 470–390 BC) described the phenomenon. The camera obscura (Latin: dark room) was a room-sized device used by Renaissance artists for tracing scenes. Lens-based versions appeared by 1568.

Historical camera obscura illustration
A historical camera obscura: a darkened room with a small opening that projects an inverted scene onto the opposite wall.

2. Projective Geometry

When we project the 3D world onto a 2D image, information is lost. Knowing what is lost versus what is preserved is crucial for reasoning about camera systems.

What is Lost in Projection

PropertyWhy it is Lost
Depth / DistanceA small nearby object and a large distant object can produce identical 2D projections
Absolute sizeImage size depends on distance — a person close appears larger than a person far away
AnglesRight angles in 3D do not generally project to right angles in 2D
ParallelismParallel lines (unless parallel to image plane) converge to a vanishing point

What is Preserved in Projection

PropertyExplanation
Straightness of linesA straight 3D line projects to a straight 2D line — fundamental to perspective projection
IncidenceIf a 3D point lies on a 3D line, its projection lies on the projected line
Key insight
The preservation of straight lines is why perspective-projected images of buildings still look "correct" — all the walls and edges remain straight. Only angles, distances, and parallels are distorted.

3. Vanishing Points and Vanishing Lines

A vanishing point is where a set of parallel 3D lines appears to converge in the image. Mathematically, it is the projection of the "point at infinity" along that direction.

A vanishing line (horizon line) connects the vanishing points of all parallel lines that lie on the same 3D plane. For the ground plane, the vanishing line is the horizon.

Key insight
Vanishing points arise because projection is nonlinear: points at the same depth map to the same image location, so a set of parallel lines "converges" at the depth where they would meet at infinity.

4. Homogeneous Coordinates

Perspective projection is inherently nonlinear (it involves division by depth $Z$). Homogeneous coordinates allow us to express this nonlinear projection as a linear matrix multiplication, which is computationally elegant and forms the basis for all camera matrix operations.

Definition — 2D Homogeneous Coordinates
A 2D Cartesian point $(x, y)$ is represented as a 3-vector: $$\begin{pmatrix} x \\ y \\ 1 \end{pmatrix} \sim \begin{pmatrix} kx \\ ky \\ k \end{pmatrix} \quad \text{for any } k \neq 0$$ To convert back: divide all components by the last one.
Definition — 3D Homogeneous Coordinates
A 3D Cartesian point $(X, Y, Z)$ is represented as a 4-vector: $$\begin{pmatrix} X \\ Y \\ Z \\ 1 \end{pmatrix} \sim \begin{pmatrix} \lambda X \\ \lambda Y \\ \lambda Z \\ \lambda \end{pmatrix} \quad \text{for any } \lambda \neq 0$$ To convert back: $$\begin{pmatrix} X \\ Y \\ Z \\ W \end{pmatrix} \longrightarrow \left(\frac{X}{W},\; \frac{Y}{W},\; \frac{Z}{W}\right)$$
Homogeneous coordinates: a 2D image point corresponds to a ray in 3D projective space
A 2D image point $(x, y)$ corresponds to an entire ray through the origin in homogeneous (projective) space. All points on the ray represent the same image point — this models the camera ray that generates that pixel.
Key insight
Scale invariance directly models pinhole geometry: all 3D points along the same ray through the optical center $C$ produce the same image point. The actual distance (depth) does not matter — only the direction of the ray matters.

5. Camera Projection Matrix Derivation

Setup and Similar Triangles

Place the camera coordinate system with origin at the optical center $C$, the $z$-axis along the principal axis, and $x$/$y$-axes spanning the image plane. A 3D point in camera coordinates $P = (x_v, y_v, z_v)$ projects onto the virtual image plane at distance $f$ (focal length) by similar triangles:

Perspective Projection Equations (Similar Triangles)
$$x_s = \frac{f \cdot x_v}{z_v}, \qquad y_s = \frac{f \cdot y_v}{z_v}$$ As $z_v$ increases (farther away), $x_s$ and $y_s$ decrease — objects appear smaller. The mapping is nonlinear (division by $z_v$).
3D-to-2D projection geometry
Projection geometry: a 3D point $P(x_v, y_v, z_v)$ projects to image point $P_s(x_s, y_s)$ on the virtual image plane at distance $d = f$, via similar triangles.

Matrix Form (Simple Projection)

Absorbing the division by $z_v$ into homogeneous-to-Cartesian conversion:

Simple Perspective Projection Matrix (3×4)
$$\begin{pmatrix} x_s \\ y_s \\ 1 \end{pmatrix} \sim \underbrace{\begin{pmatrix} f & 0 & 0 & 0 \\ 0 & f & 0 & 0 \\ 0 & 0 & 1 & 0 \end{pmatrix}}_{\text{Simple Projection Matrix}} \begin{pmatrix} x_v \\ y_v \\ z_v \\ 1 \end{pmatrix}$$ Dividing the result by the third component recovers $x_s = f x_v / z_v$ and $y_s = f y_v / z_v$. Note: result is in millimeters (physical sensor units), not pixels.

6. Intrinsic Camera Parameters

Intrinsic parameters describe the internal characteristics of the camera — how 3D points in camera coordinates map to 2D pixel coordinates. They are properties of the hardware (sensor, lens) and do not depend on the camera's position in the world.

Intrinsic parameters: optical center, principal point, principal axis, image plane
Intrinsic parameters: the optical center $C$, principal point $(u_0, v_0)$, focal length $f$, and pixel size determine the intrinsic matrix $K$.
ParameterSymbolDescription
Focal length (horiz.)$\alpha = f / p_w = f_x$Focal length in horizontal pixel units
Focal length (vert.)$\beta = f / p_h = f_y$Focal length in vertical pixel units (may differ if pixels are non-square)
Principal point$(u_0, v_0)$Where the principal axis hits the image plane (ideally center, often slightly off)
Skew$s$Shear between pixel rows and columns; $s \approx 0$ for modern cameras
Intrinsic Matrix $K$ (3×3, 5 DOF)
$$K = \begin{pmatrix} \alpha & s & u_0 \\ 0 & \beta & v_0 \\ 0 & 0 & 1 \end{pmatrix}$$ Five degrees of freedom: $f_x, f_y, s, u_0, v_0$.

Building the Intrinsic Matrix Step by Step

Step 1: Simplest case — square pixels, no skew, principal point at center: $K = \text{diag}(f, f, 1)$

Step 2: Add principal point offset $(u_0, v_0)$ — optical axis not through sensor center.

Step 3: Non-square pixels — separate $\alpha = f/p_w$ and $\beta = f/p_h$.

Step 4: Add skew $s$ — pixel grid not perfectly rectangular.

3D visualization of a non-rectangular (skewed) pixel
Non-rectangular (skewed) pixel: the skew parameter $s$ captures the shear between pixel rows and columns.
Effect of varying focal length: 24mm, 70mm, 135mm, 300mm
Effect of focal length on field of view: 24mm (wide angle) to 300mm (telephoto). Longer focal length = more zoom = smaller FOV.
CCD sensor pixel size comparison
Pixel size on a CCD sensor. Larger pixels capture cleaner images; the same pixel count on a larger sensor yields lower noise.
Intrinsic matrix equation: projection from camera coordinates
The intrinsic matrix $K$ applied to camera-frame coordinates. With no rotation or translation, the projection reduces to $s\,\mathbf{p}_{ip} = K [I | \mathbf{0}] \mathbf{P}_c$.
Why recalibration is needed

Intrinsic parameters are specific to each camera but can change over time. Recalibration is needed when:

  • Physical shock (camera dropped) — can shift the lens relative to the sensor
  • Temperature changes (outdoor winter recording) — thermal expansion/contraction shifts camera components
  • Lens change — a new focal length changes $f_x$, $f_y$ entirely
Interactive Tool -- Intrinsic Matrix Builder

Step through 4 levels of complexity in the intrinsic matrix $K$. At each level, adjust the active parameters and see how they affect pixel coordinates and the sensor grid.

7. Extrinsic Camera Parameters

Extrinsic parameters describe the position and orientation of the camera in the world. They transform points from world coordinates to camera coordinates.

Overview of all coordinate frames: world, camera, image plane, and pixel coordinates
The four coordinate frames: world coordinates $(X_w, Y_w, Z_w)$ are transformed by $[R | \mathbf{t}]$ to camera coordinates, then projected by $K$ onto the image plane.
Extrinsic parameters diagram: world frame to camera centre to image plane
Extrinsic parameters $[R | \mathbf{t}]$: rotation aligns world axes to camera axes; translation shifts origin from world to camera center.
Extrinsic Matrix $[R | \mathbf{t}]$ (3×4, 6 DOF)
$$[R \;|\; \mathbf{t}] = \begin{pmatrix} r_{11} & r_{12} & r_{13} & t_x \\ r_{21} & r_{22} & r_{23} & t_y \\ r_{31} & r_{32} & r_{33} & t_z \end{pmatrix}$$ Transforms world point to camera coordinates: $$\begin{pmatrix} X_c \\ Y_c \\ Z_c \\ 1 \end{pmatrix} = \begin{pmatrix} R & \mathbf{t} \\ \mathbf{0}^T & 1 \end{pmatrix} \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{pmatrix}$$ Six degrees of freedom: 3 rotation angles + 3 translation components.

3D Rotation Matrices

The rotation $R$ decomposes into three elementary rotations about coordinate axes (counter-clockwise convention):

Elementary Rotation Matrices
$$R_x(A) = \begin{pmatrix} 1 & 0 & 0 \\ 0 & \cos A & -\sin A \\ 0 & \sin A & \cos A \end{pmatrix}$$ $$R_y(B) = \begin{pmatrix} \cos B & 0 & \sin B \\ 0 & 1 & 0 \\ -\sin B & 0 & \cos B \end{pmatrix}$$ $$R_z(C) = \begin{pmatrix} \cos C & -\sin C & 0 \\ \sin C & \cos C & 0 \\ 0 & 0 & 1 \end{pmatrix}$$ Combined (apply $R_x$ first, then $R_y$, then $R_z$): $\quad R = R_z \cdot R_y \cdot R_x$
Individual rotation matrices Rx, Ry, Rz
Elementary rotation matrices $R_x$, $R_y$, $R_z$ about each coordinate axis.
Camera rotation axes: pan, tilt, roll
Camera rotation axes: pan (yaw — rotate about vertical axis), tilt (pitch — rotate about horizontal axis), roll (rotate about optical axis).
Properties of rotation matrices
  • $R$ is orthogonal: $R^T R = I$, so $R^{-1} = R^T$
  • $\det(R) = 1$ (proper rotation, no reflection)
  • Although $R$ has 9 entries, only 3 degrees of freedom: the 6 orthogonality constraints from $R^T R = I$ remove 6 free parameters
Interactive Tool -- Extrinsic Rotation Explorer

Rotate a 3D wireframe cube by adjusting pan (yaw), tilt (pitch), and roll angles. Observe the individual and combined rotation matrices update with exact trigonometric values, and verify the orthogonality properties of $R$.

8. The Full Camera Matrix

The complete projection from world coordinates to pixel coordinates chains the extrinsic and intrinsic transformations.

Full Camera Projection (KEY EQUATION)
$$s \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \underbrace{K}_{3 \times 3} \; \underbrace{[R \;|\; \mathbf{t}]}_{3 \times 4} \; \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{pmatrix} = \underbrace{C}_{3 \times 4} \begin{pmatrix} X_w \\ Y_w \\ Z_w \\ 1 \end{pmatrix}$$ where $C = K [R | \mathbf{t}]$ is the camera calibration (projection) matrix, and $s = Z_c$ is the scale factor.
Summary equation: p_ip = K * E * p_w = C * p_w
Summary: $\mathbf{p}_{ip} = K \cdot E \cdot \mathbf{p}_w = C \cdot \mathbf{p}_w$ — a world point maps to a pixel via the combined camera matrix $C$.
Intrinsic and extrinsic matrix decomposition of full projection
Explicit matrix decomposition: the camera intrinsic (left) multiplied by camera extrinsic (right) gives the full projection.
MatrixSizeDegrees of Freedom
Intrinsic $K$$3 \times 3$5 ($f_x, f_y, s, u_0, v_0$)
Extrinsic $[R | \mathbf{t}]$$3 \times 4$6 (3 rotation + 3 translation)
Total $C = K[R | \mathbf{t}]$$3 \times 4$11 (12 entries minus 1 for scale)
Key insight — Why 11 and not 12?
The camera matrix $C$ is defined only up to scale: multiplying all entries of $C$ by any nonzero constant does not change the projected pixel coordinates (since we divide by the third component). This scale ambiguity removes one degree of freedom, leaving 11.
Interactive Tool -- Full Projection Pipeline Visualizer

Adjust a 3D world point, camera intrinsics, and extrinsics. Watch every step of the projection pipeline with fully computed matrices and intermediate values.

World Point
Intrinsic
Extrinsic -- Rotation
Extrinsic -- Translation

9. Camera Calibration

Camera calibration is the process of estimating the 11 independent parameters of $C$ (and by decomposition, the intrinsic $K$ and extrinsic $[R | \mathbf{t}]$).

Calibration target (checkerboard) projected through camera to image plane
Calibration setup: a checkerboard with known 3D corner positions is imaged, and the 2D pixel positions of each corner are measured.

Step 1 — Compute $C$ from Point Correspondences

Each known 3D point $(x_w, y_w, z_w)$ with measured pixel position $(x_{ip}, y_{ip})$ gives two equations:

$$x_{ip} = \frac{x_w p_{11} + y_w p_{12} + z_w p_{13} + p_{14}}{x_w p_{31} + y_w p_{32} + z_w p_{33} + p_{34}}, \qquad y_{ip} = \frac{x_w p_{21} + y_w p_{22} + z_w p_{23} + p_{24}}{x_w p_{31} + y_w p_{32} + z_w p_{33} + p_{34}}$$

Rearranging to linear form, these become two rows in the system $A\mathbf{p} = \mathbf{0}$, where $\mathbf{p}$ contains the 12 entries of $C$ (effectively 11 unknowns after scale).

Calibration equation system in matrix form: Ap = 0
The linear system $A\mathbf{p} = \mathbf{0}$: each 3D-2D correspondence contributes two rows. At least 6 non-coplanar points (12 equations) are needed to solve for 11 unknowns.
Minimum Points for Calibration
At least 6 non-coplanar 3D-2D correspondences are required:
  • Each point provides 2 equations
  • 6 points give 12 equations for 11 unknowns
  • In practice, more points are used to form an overdetermined system, solved via least-squares / SVD for robustness

Step 2 — Decompose $C$ into $K$ and $[R | \mathbf{t}]$

Once $C$ is estimated, RQ decomposition recovers $K$ (upper triangular) and $R$ (orthogonal). The translation is then $\mathbf{t} = K^{-1} \mathbf{c}_4$ where $\mathbf{c}_4$ is the fourth column of $C$.

Camera calibration model with optical center, principal point, and image plane
Camera calibration model: the principal point $pp$, optical center, and image plane are all determined from the calibration process.

10. Back-Projection (2D to 3D)

Forward projection maps a 3D point to a 2D pixel, but what about the reverse? Given a pixel coordinate, can we recover the original 3D point? This back-projection problem is fundamental to 3D reconstruction, point cloud generation, and SLAM.

The Problem

Forward projection loses depth: infinitely many 3D points along the same ray through the optical center all map to the same pixel. To recover the 3D position, we need the depth value $d$ from an external source (depth sensor, stereo matching, LiDAR, structured light, etc.).

Perspective projection geometry showing the ray from camera through pixel
Perspective projection geometry: all 3D points along a ray through the optical center project to the same pixel. Depth is the missing information.

The Back-Projection Equation

Back-Projection Equation
Given a pixel $(u, v)$ and depth $d$, the 3D point in camera coordinates is: $$\mathbf{p}_{cam} = d \cdot K^{-1} \begin{pmatrix} u \\ v \\ 1 \end{pmatrix}$$ To obtain the point in world coordinates, apply the inverse extrinsic transform: $$\mathbf{p}_{world} = R^T(\mathbf{p}_{cam} - \mathbf{t})$$
Depth to 3D vertex back-projection equation
Back-projection: combining a pixel coordinate with depth to recover the 3D point. Each pixel and its depth yield one vertex in the reconstructed point cloud.

Step-by-Step Derivation

Back-projection is derived by inverting the forward projection equation step by step.

Step 1: Start from the forward projection equation:

$$s \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = K[R|\mathbf{t}]\mathbf{p}_w \quad \text{where } s = Z_c \text{ (depth in camera frame)}$$

Step 2: For camera coordinates only (set $R = I$, $\mathbf{t} = \mathbf{0}$):

$$s \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = K \begin{pmatrix} X_c \\ Y_c \\ Z_c \end{pmatrix}$$

Step 3: Left-multiply both sides by $K^{-1}$:

$$\begin{pmatrix} X_c \\ Y_c \\ Z_c \end{pmatrix} = s \cdot K^{-1} \begin{pmatrix} u \\ v \\ 1 \end{pmatrix}$$

Step 4: Since $s = Z_c = d$ (the depth), substitute:

$$\mathbf{p}_{cam} = d \cdot K^{-1} \begin{pmatrix} u \\ v \\ 1 \end{pmatrix}$$
Geometric intuition
$K^{-1}$ converts a pixel coordinate $(u, v, 1)^T$ into a normalized ray direction in camera space. Multiplying by the depth $d$ scales this unit ray to reach the actual 3D point. The ray direction is independent of depth -- changing $d$ moves the point along the same ray.

What $K^{-1}$ Actually Computes

For the standard intrinsic matrix $K$ (with zero skew), the inverse has a simple closed form:

Derivation of $K^{-1}$

Starting from $K = \begin{pmatrix} f_x & 0 & u_0 \\ 0 & f_y & v_0 \\ 0 & 0 & 1 \end{pmatrix}$, we seek $K^{-1}$ such that $K K^{-1} = I$.

Since $K$ is upper triangular, its inverse is also upper triangular. Working row by row:

  • Row 3: the last row of $K^{-1}$ must be $(0, 0, 1)$
  • Row 2: $f_y \cdot (K^{-1})_{22} = 1 \Rightarrow (K^{-1})_{22} = 1/f_y$, and $f_y \cdot (K^{-1})_{23} + v_0 \cdot 1 = 0 \Rightarrow (K^{-1})_{23} = -v_0/f_y$
  • Row 1: $f_x \cdot (K^{-1})_{11} = 1 \Rightarrow (K^{-1})_{11} = 1/f_x$, and $f_x \cdot (K^{-1})_{13} + u_0 \cdot 1 = 0 \Rightarrow (K^{-1})_{13} = -u_0/f_x$
Inverse Intrinsic Matrix $K^{-1}$
$$K^{-1} = \begin{pmatrix} 1/f_x & 0 & -u_0/f_x \\ 0 & 1/f_y & -v_0/f_y \\ 0 & 0 & 1 \end{pmatrix}$$

Applying $K^{-1}$ to a homogeneous pixel coordinate expands to:

$$K^{-1} \begin{pmatrix} u \\ v \\ 1 \end{pmatrix} = \begin{pmatrix} (u - u_0)/f_x \\ (v - v_0)/f_y \\ 1 \end{pmatrix}$$

So the full back-projection computes:

$$X_c = d \cdot \frac{u - u_0}{f_x}, \qquad Y_c = d \cdot \frac{v - v_0}{f_y}, \qquad Z_c = d$$

Each step has a clear geometric meaning:

  1. Subtract the principal point $(u - u_0, v - v_0)$: center the pixel coordinates at the optical axis
  2. Divide by focal length $(\cdot / f_x, \cdot / f_y)$: convert from pixel units to physical (normalized) units
  3. Multiply by depth $(\cdot \times d)$: scale the normalized ray to reach the actual 3D point

Forward Projection vs. Back-Projection

Forward ProjectionBack-Projection
Direction3D → 2D2D + depth → 3D
Equation$\mathbf{u} = K \cdot \mathbf{p}_{cam} / Z_c$$\mathbf{p}_{cam} = d \cdot K^{-1} \cdot \tilde{\mathbf{u}}$
Information lostDepthNone (depth provided)
Requires$K$, $[R|\mathbf{t}]$$K^{-1}$, depth sensor, ($R^T$, $\mathbf{t}$ for world coords)
ApplicationsRendering, AR overlays3D reconstruction, point clouds, SLAM
Interactive Tool -- Back-Projection Visualizer

Click on the image plane (left) to place a pixel. Adjust intrinsic parameters and depth to see the back-projected 3D point (right). The equation panel shows every computation step and verifies the round-trip.

Intrinsic Parameters
Depth
Image Plane (click to place pixel)
3D Camera View (drag to orbit)

11. Homography

When all scene points lie on a plane (e.g., the ground plane with $Z = 0$), the projection matrix simplifies to a homography — a $3 \times 3$ projective transformation.

Homography from Projection (Planar Case $Z = 0$)
When $Z = 0$, the third column of $C$ drops out: $$\begin{pmatrix} u \\ v \\ w \end{pmatrix} = \underbrace{\begin{pmatrix} C_{11} & C_{12} & C_{14} \\ C_{21} & C_{22} & C_{24} \\ C_{31} & C_{32} & C_{34} \end{pmatrix}}_{H \;(3 \times 3)} \begin{pmatrix} X \\ Y \\ 1 \end{pmatrix}$$ The homography $H$ has 8 degrees of freedom (9 entries minus 1 for scale).
Derivation of homography matrix H from projection matrix C when Z=0
Homography derivation: when all points have $Z = 0$, the $3 \times 4$ projection matrix reduces to a $3 \times 3$ homography matrix.
Automated calibration via homography and synthetic templates

Standard calibration requires a physical checkerboard target. Automated methods use synthetic templates instead:

  1. Generate synthetic templates by randomly sampling pan, tilt, and roll angles, then applying a homography to create bird's-eye-view templates of an expected scene (e.g., a road intersection).
  2. Build a dictionary of thousands of templates (>5000 per intersection) covering different viewpoints.
  3. Match real images to the closest template using a Siamese network combined with a Spatial Transformer Network.
  4. Recover camera parameters from the best-matching template's homography.

Semantically segmented images (rather than raw RGB) are preferred because they capture scene topology (road layout, lane markings) and are more robust to lighting and weather changes.

Interactive Tool -- Homography Visualizer

See how a flat ground plane ($Z = 0$) is mapped to camera pixels through the homography $H$. Adjust the camera position and observe the 3x3 homography matrix update with the projected quadrilateral.

3D Scene View
Camera Image View

Flashcards