Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

torch-transform-image

License PyPI Python Version CI codecov

Real space transformations of 2D/3D images in PyTorch

Motivation

This package provides a simple, consistent API for applying affine transformations to 2D/3D images in PyTorch. It enables efficient, GPU-accelerated geometric transformations of images.

Installation

pip install torch-transform-image

Features

  • Apply arbitrary affine transformations to 2D and 3D images
  • Support for various interpolation methods (nearest, bilinear, bicubic for 2D; nearest, trilinear for 3D)
  • Batched operations for efficient processing
  • Fully differentiable operations compatible with PyTorch's autograd

Coordinate System

This package uses the same coordinate system as NumPy/PyTorch array indexing:

  • For 2D images: coordinates are ordered as [y, x] for dimensions (height, width)
  • For 3D images: coordinates are ordered as [z, y, x] for dimensions (depth, height, width)

Transformation matrices left-multiply homogeneous pixel coordinates ([y, x, 1] for 2D and [z, y, x, 1] for 3D).

Generating Transformation Matrices

The companion package torch-affine-utils provides convenient functions to generate transformation matrices that work with homogenous pixel coordinates (yxw/zyxw):

from torch_affine_utils.transforms_2d import R, T, S  # Rotation, Translation, Scale for 2D
from torch_affine_utils.transforms_3d import Rx, Ry, Rz, T, S  # Rotation, Translation, Scale for 3D

Usage

2D Transformations

import torch
from torch_transform_image import affine_transform_image_2d
from torch_affine_utils.transforms_2d import R, T, S  # Rotation, Translation, Scale

# Create a test image (28×28)
image = torch.zeros((28, 28), dtype=torch.float32)
image[14, 14] = 1  # Place a dot at the center

# Create a transformation matrix to translate coordinates 4 pixels in y direction
translation = T([4, 0])  # Uses [y, x] coordinate order matching dimensions (h, w)

# Apply the transformation
result = affine_transform_image_2d(
    image=image,
    matrices=translation, 
    interpolation='bilinear',  # Options: 'nearest', 'bilinear', 'bicubic'
    yx_matrices=True,  # The generated translations have [y, x] order
)

# Compose multiple transformations
# First translate to origin, then rotate, then translate back
T1 = T([-14, -14])  # Move center to origin
R1 = R(45, yx=True)  # Rotate 45 degrees
T2 = T([14, 14])  # Move back
transform = T2 @ R1 @ T1  # Matrix composition (applied right-to-left)

# Apply the composed transformation
rotated = affine_transform_image_2d(
    image=image,
    matrices=transform,
    interpolation='bicubic',
    yx_matrices=True,
)

3D Transformations

import torch
from torch_transform_image import affine_transform_image_3d
from torch_affine_utils.transforms_3d import R, T, S  # Rotation, Translation, Scale

# Create a test volume (64×64×64)
volume = torch.zeros((64, 64, 64), dtype=torch.float32)
volume[32, 32, 32] = 1  # Place a dot at the center

# Create a transformation matrix (translate coordinates 5 voxels in z direction)
translation = T([5, 0, 0])  # Uses [z, y, x] coordinate order matching dimensions (d, h, w)

# Apply the transformation
result = affine_transform_image_3d(
    image=volume,
    matrices=translation, 
    interpolation='trilinear',  # Options: 'nearest', 'trilinear'
    zyx_matrices=True,  # The generated translations have [z, y, x] order
)

How It Works

Under the hood, the package:

  1. Creates a coordinate grid for the output image
  2. Applies the transformation matrix to these coordinates
  3. Samples the input image at the transformed coordinates using the specified interpolation method

This can be unintuitive at times, in the 2D example above the dot will move to [10,14] in the output. If you want the input image to be transformed according to the matrix, you can use torch.linalg.inv to inverse the direction of the transform.

All operations are performed in PyTorch, making them fully differentiable and GPU-compatible.

License

This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Metadata

Release files for torch-transform-image 0.6.0rc2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for torch-transform-image 0.6.0rc2
File Size Uploaded
torch_transform_image-0.6.0rc2.tar.gz 8.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for torch-transform-image 0.6.0rc2
File Interpreter ABI Platform
torch_transform_image-0.6.0rc2-py3-none-any.whl Python 3 none any Details

Total release size: 17.1 kB

Release files / torch_transform_image-0.6.0rc2.tar.gz

Download URL torch_transform_image-0.6.0rc2.tar.gz
Size 8.4 kB
Tags Source
SHA-256 checksum
How to use checksums
1034ef821d93fa3548eea5eac0f1628472784e731979b281754749dbcf41b464
BLAKE2b-256 checksum
How to use checksums
0d61135f4cb149450a763cf8e97323922d34e03829681dd60dd8ebe2a7e5f5e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log

Release files / torch_transform_image-0.6.0rc2-py3-none-any.whl

Download URL torch_transform_image-0.6.0rc2-py3-none-any.whl
Size 8.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3c35cc45806358bc608f8e56679c939da94a8992001c7566b37c272e01bec718
BLAKE2b-256 checksum
How to use checksums
7ce3f7a210dac276fa8aa37ff47a1344ef50e2d36721621810298513596233b0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 11, 2026.

Transparency log
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page