Course
An affine transformation is a process that moves points in space to new points by applying a linear transformation and a shift, which is called translation. You can rotate, scale, shear, reflect, and then slide everything across, and straight lines will stay straight.
Affine transformations are omnipresent because they capture a wide variety of geometric changes that keep the geometry of an object while yet being cheap to compute.

Diverse applications of affine transformations. Source of image: Napkin AI
The idea originated when mathematicians like Leonhard Euler and August Ferdinand Möbius tried to figure out what properties stay invariant even when other things change.
Today, it is a key part of the digital world, powering everything from the CSS on a webpage to complicated medical imaging.
What Are Affine Transformations?
Affine transformations sit right between “pure linear algebra” and “real-world geometry.” They keep the math clean while allowing translations, which linear maps alone cannot do.
Understanding affine spaces and transformations
A vector space has a special point called the origin (even if you don’t draw it, it’s there conceptually). In a vector space, vectors can be added and scaled, and there is a distinguished “zero vector.”
An affine space looks like a vector space without a chosen origin. You can still talk about:
- points (locations)
- displacement vectors between points (e.g., “go from P to Q”)
- adding a vector to a point (move the point by that displacement)
But you cannot add two points meaningfully, because addition of points depends on an origin choice.
Formally, an affine space A over a vector space V is a set of points with a free and transitive action of V. Practically: differences of points live in V, but the individual points themselves do not.
An affine transformation is a mapping between affine spaces that preserves affine combinations (more on that later) and, geometrically, preserves straight lines and parallelism.
Affine transformation formula: Definition using vector spaces
In coordinates, an affine transformation has the form:
Affine transformation in matrix form.
Where:
- x ∈ Rn is your input point (as a column vector)
- A ∈ Rn×n is a matrix representing the linear part (rotation, scaling, shear, reflection, combinations)
- b ∈ Rn is a vector representing the translation
This “linear + constant” structure is why affine maps are so popular in engineering and computing: they’re expressive, but still fast and stable to apply.
Key Properties of Affine Transformations
Affine transformations preserve several geometric relationships that are “structural,” while allowing shapes to stretch or skew.
What properties are preserved in affine transformations?

Properties Preserved in Affine Transformation. Image Source: Napkin AI
Preserved:
- Collinearity: if points lie on the same line before, they lie on a line after.
- Parallelism: parallel lines remain parallel (this is a big deal in graphics and mapping).
- Convexity: a convex shape stays convex.
- Ratios along a line: if a point divides a segment in a ratio, that ratio is preserved.
A neat way to express this is through affine combinations:
Affine maps preserve these combinations.
Not preserved (in general):
- Distances
- Angles
- Areas/volumes (unless special conditions hold)
Finally, affine transformations are closed under composition: doing one affine transformation after another is still an affine transformation.
Affine transformation group structure
Affine transformations form a group under composition (often called the affine group, written Aff(n)).
The composition works cleanly if
and
then
This is still affine.
A note on invertibility: Ax+b is invertible if A is invertible (det(A)≠0). Then:
So you get a powerful algebra: build complex transforms by chaining simple ones, and reverse them when needed.
Affine Transformation Matrix
To compute affine transformations efficiently, we utilize matrices—particularly homogeneous coordinates, which facilitate translations in a matrix-compatible manner.
General form of affine transformation matrices
In n dimensions, the transformation is as follows:
where
-
Agoverns the alteration of shape (linear component). -
bregulates displacement (translation)
The requirement for invertibility is that matrix (A) must be invertible. In simple terms, what it means is that if (A) compresses all points onto a line (resulting in a decrease in rank), it cannot be uniquely reversed.
Homogeneous coordinates and augmented matrix representation
Translations cannot be represented by an (n x n) matrix acting on (x) alone. Homogeneous coordinates address this issue by introducing an additional coordinate.
Represent a 2D point ((x, y)) as ((x, y, 1)).
Then a 2D affine transform becomes a 3×3 matrix:

2D affine transformation using homogeneous coordinates (3×3 matrix). Source: Author
Benefits:
- The composition simplifies to multiplication (only matrix multiplication is required).
- Optimized pipelines (graphics and vision libraries favor this)
- Consistent management of translation, rotation, scaling, and shearing
Types of Affine Transformations
Most affine transformations used in practice involve a handful of steps.
Translation in affine transformations
Translation moves every point by the same displacement: T(x)=x+b
2D homogeneous form is represented by:

Translation as a homogeneous transformation matrix (2D). Source: Author
This form is used in graphics (to move things), robotics (to change coordinate frames), and vision (for image alignments).
Scaling transformations: Uniform and non-uniform
Uniform scaling: In 2D, uniform scaling means using the same factor (s) in all directions:

Uniform 2D scaling matrix. Source: Author
Non-uniform scaling:

Non-uniform 2D scaling matrix. Source: Author
3D scaling, on the other hand, is like a 3×3 diagonal matrix. When you scale something, straight lines and parallelism is preserved, but distances change (unless s=1).
Rotation transformations in 2D and 3D
2D rotation by angle (theta):

2D rotation transformation by angle. Source: Author
When you rotate something in 3D, you do it around an axis (x, y, or z) with the corresponding matrices. When you add translation to a rotation, it stays affine (and becomes a "rigid motion" if you only do rotation and translation).
Shearing transformations explained
Shear “slants” shapes. A 2D x-shear is:

2D x-shear representation. Source: Author
A y-shear:

2D y-shear representation. Source: Author
Shears are often used in typography, visual warps, and effects that look like perspective (though genuine perspective is projective, not affine).
Reflection transformations in affine geometry
When you reflect about axes or planes that go through the origin, that is considered linear reflection (and hence affine).
2D reflection over the x-axis:

2D reflection over the x-axis. Source: Author
On the y-axis:

2D reflection over the y-axis. Source: Author
Reflections change the way things are oriented and are helpful for analyzing symmetry, recognizing patterns, and processing geometry.
How to Compose and Invert Affine Transformations
In real systems, you rarely use just one transformation in real systems; you link many together.
Composing multiple affine transformations
Suppose:
and
Then:
Order matters. Rotating first and then translating is not the same as translating first and then rotating. This is because translations get "caught" by the next matrix.
A useful approach to remember it is:
- If you’re using homogeneous matrices, composition is matrix multiplication
- The last transform you apply is on the left in multiplication.
Inverse affine transformations: Calculation and applications
For
if (A) is invertible:
In vision, this is often used: you commonly transfer output pixels back to input pixels (inverse mapping) to fill in gaps.
Linear vs. Affine Transformations
Affine transformations are “linear transformations that come with a built-in shift.”
Key differences between linear and affine transformations
A linear transformation - L(x)=Ax - must satisfy:
- L(0)=0 (origin stays at origin)
- L(x+y)=L(x)+L(y)
- L(cx)=cL(x)
An affine transformation T(x)=Ax+b:
- does not need to map 0 to 0
- keeps lines straight and preserves parallelism
- acts linearly once you factor out translation
Every linear map is affine (set b=0), but not all affine mappings are linear (any non-zero translation breaks linearity).
Affine transformations as linear plus translation
You can rewrite:
as “do the linear part (Ax), then add translation (b).”
You already know the 1D version if you've ever seen (y=mx+c). This is also why affine maps are often used in neural networks: a dense layer calculates (Wx+b), which is an affine map. After that, nonlinearity is incorporated.
Computer graphics and computer vision use affine transformations.
Affine Transformations in Computer Graphics and Computer Vision
This is where affine transformations cease being abstract and start paying rent.
Image transformation and warping using affine transformations
In image processing, affine transforms are used for:
- rotation and resizing
- translation (moving images)
- skew correction (shear)
- alignment/registration (matching images)
Two important implementation ideas:
- Forward mapping: refers to taking each input pixel and transferring it forward. This can create gaps/holes.
- Inverse mapping: for each output pixel, map backwards to locate where it originated from; this is usually the better option.
Interpolation is important since mapped coordinates don't frequently point to whole pixels. Some common ways are:
- Nearest neighbor: fastest, with blocks
- Bilinear: smoother, usually the default
- Bicubic: smoother but takes more processing power
Affine transformations in 3D graphics and rendering
Affine transformations are used everywhere in 3D graphics:
- model transforms (object local → world)
- view transforms (world → camera)
- projection prep (affine part happens before projective step)
A subtle but important point: when scaling is not uniform, surface normals don't always change in the same way as points. To ensure correct lighting, rendering pipelines commonly use the inverse-transpose of the linear part for normals.
Affine transformations in robotics
Robotics is just the omnipresence of coordinate systems.
Affine transformations map:
- robot base frame ↔ arm frame ↔ end-effector frame
- camera frame ↔ world frame
- lidar ↔ vehicle coordinates
In vision-based localization (e.g., visual odometry), minor movements between frames may often be approximated locally as affine in image space, which is helpful for monitoring and figuring out motion movement.
Coordinate space mapping and data normalization
In machine learning, feature scaling is often affine:
- Min-max scaling: (x' = alpha x + beta)
- Standardization: (x' = (x-μ)/σ) (also affine)
This is important as many models (especially gradient-based ones) work better when features are on similar scales.
Advanced Affine Transformation Concepts and Theory
Affine transformations seem straightforward at first, but the theory is deep, especially when you start to care about invariants like area or alternative coordinate systems.
Advanced Affine Transformation Concepts. Image Source: Napkin AI
Affine geometry and barycentric coordinates
Barycentric coordinates express a point as a as a weighted mix of the triangle's vertices:
These coordinates are affine-invariant, which means that if you change the triangle and the point in an affine way, λi stays the same.
That’s why barycentric coordinates are widely used in: texture mapping, mesh interpolation, and finite element analysis.
Measure-preserving and equiareal affine transformations
An affine transform preserves area (2D) or volume (3D) when:
The determinant of A informs you how much the area or volume changes when the linear element is added.
If (|det(A)| > 1), space gets bigger; but if it is less than one, it gets smaller. If it's negative, the orientation changes (like a reflection). These are vital for visuals, physics simulations, and modeling deformation.
Similarity transformations and isometries in affine geometry
Relationships:
- Affine: (Ax+b) (general case)
- Similarity: scaling + rotation + translation (keeps angles the same, up to scale)
- Isometry (rigid): rotation + translation (keeps distances and angles the same)
So:isometries ⊂ similarities ⊂ affine transformations
This hierarchy lets you pick the proper model for a problem statement. For example, if you need to keep the distance, affine is too broad.
Projective transformations and higher-dimensional affine extensions
Affine transformations are a type of projective transformation. Projective transforms can model perspective, like how parallel lines meet at a vanishing point. Affine transformations can't do this.
In homogeneous coordinates, projective transformations permit a broader final row than ([0,0,1]). That increased freedom is what makes perspective effects happen.
Affine concepts also work in higher dimensions, like 4D homogeneous transforms in 3D graphics.
Implementing Affine Transformations
Affine transforms are "easy math," but the way they are used can make or break the result.
Numerical stability and precision in affine transformations
Common issues:
- Near-singular matrices: if (det(A)) is close to 0, inversion becomes unstable
- Floating point error accumulation: repeated compositions can drift
- Scaling extremes: extremely big or small sizes can make things less precise.
Best practices:
- As a quick warning indicator, look at the condition number (or at least |det(A)|).
- For inversion, choose libraries that are stable, like NumPy and Eigen.
- When you have to do a lot of sequential things, like in graphics or robotics, re-orthonormalize rotation matrices.
GPU implementation and parallel processing of affine transformations
Affine transforms are embarrassingly parallel, which means that each point or pixel changes on its own. This makes them suitable for SIMD and GPU kernels.
That's why image warps and rendering pipelines work well with GPUs: they can do a lot of multiplication and addition operations at once.
Some common optimizations are: employing fused multiply-add operations, batching transformations, and reducing the number of memory transfers.
Specialized Affine Transformation Applications and Extensions
Affine transformations are "rigid enough" for a lot of tasks, and they can also be used to make more flexible models.
B-Spline Affine Transformations for Non-Rigid Registration
In morphometrics and medical imaging, pure affine alignment is only the first step. After rough alignment, B-spline-based deformation models let you make smooth, non-rigid warps while still keeping control points easy to understand.
Think of it this way: affine gets the overall image straight, and B-splines take care of the little bends.
Affine Invariance in Pattern Recognition and Computer Vision
Many recognition systems try to be affine invariant so that objects can still be recognized even when the viewpoint changes in a way that is similar to an affine translation.
Techniques include:
- employing affine-invariant features (or normalizing patches)
- figuring out local affine frames for keypoints
- designing descriptors that are robust to skew and scale
This makes operations like matching, tracking, and retrieval more reliable.
Affine Transformations in GIS and Geodetic Coordinate Systems
In GIS, affine transforms appear in map georeferencing, aligning layers from different sources, or local approximations of coordinate conversions.
Real geodetic transforms can be more complicated, however affine models are often used as local approximations or as part of a broader pipeline.
Software Libraries for Affine Transformation
You don't have to start from scratch with everything; most ecosystems have good support.
Implementing affine transformations in Python, C++, and Java
- Python: NumPy for matrix math; OpenCV for image warps; SciPy for numerical tools.
- C++: Eigen (linear algebra), OpenCV (vision), GLM (graphics math)
- Java: Apache Commons Math, and vision toolkits depending on the stack
Core idea across languages:
- Represent points as vectors
- Apply (Ax+b) (or homogeneous matrix multiplication)
- Use matrix multiplications to compose transformations.
- Flip when needed using (A-1)
Best software tools and libraries for affine transformations

Best Tools and Libraries for Affine Transformations. Image Source: Napkin AI
Widely used tools:
- OpenCV: warpAffine, getAffineTransform, estimateAffine2D (vision workflows)
- NumPy: matrix operations in general
- Eigen: high-performance C++ linear algebra
- GLM / DirectXMath: graphics-focused math libraries
- GDAL / PROJ (GIS): coordinate transformations and geospatial pipelines
You should select based on your domain: OpenCV for images, GLM for graphics, GDAL/PROJ for GIS.
Alternative Perspectives on Affine Transformations
Hearing the same idea explained in a different way can sometimes make things clearer.
Alternative definitions: Affine maps and affine functions
An affine map can be defined as a function that preserves the sanctity of affine combinations:
This formulation doesn't tie itself to a single origin, which is extremely "affine geometry" in spirit. It also makes it clear right away that lines translate to lines.
Affine transformations and the (y = mx + b) formula
If affine transformations seem abstract, relate them to what you already know: (y=mx) is linear (it goes through the origin), and (y=mx+b) is affine (it has the same slope effect and a shift).
In higher dimensions, (m) turns into a matrix (A), but the story is still the same: it acts linearly and moves around.
Conclusion
Affine transformations, if you remove all the extra stuff, boils down to really just this: "I'll keep your world made of straight lines and parallel edges, but I can't promise that your angles will stay the same."
If you're thinking in terms of matrices and linear systems, check out Linear Algebra for Data Science in R and tutorials that focus on matrices, including Row Echelon Form Explained.
If you want to get into computer vision, projects like Food Image Classification with Hugging Face and courses like Working with Hugging Face are a good next step.

Seasoned professional in data science, artificial intelligence, analytics, and data strategy.
FAQs
What is an affine transformation?
An affine transformation maps points using T(x)=Ax+bT, where A is a linear transform and b is a translation. It includes rotation, scaling, shear, reflection, and shifting all in one framework.
How is an affine transformation different from a linear transformation?
A linear transformation, which is written as L(x)=Ax, must send the origin to itself. An affine transformation includes translation (b≠0), which means it can shift the origin.
What geometric properties are preserved in affine transformation?
Affine transformations preserve straight lines, collinearity, and parallelism, thereby keeping the "line structure" intact. They also preserve the ratios of distances along the same line (for example, midpoints stay midpoints).
What properties are not preserved?
Distances and angles generally change, which means that shapes can stretch or bend. Area and volume may change too, unless the determinant condition holds.
Is feature scaling in machine learning an affine transformation?
Yes—standardization and min-max scaling are examples of affine maps.They alter the coordinates to make optimization work better without changing the relationships too much.
