Skip to main content

Utilities for affine transforms of 2d/3d coordinates in PyTorch

Project description

torch-affine-utils

License PyPI Python Version CI codecov

A small utility library for generating affine matrices for 2D and 3D coordinates.

Overview

torch-affine-utils provides an easy, intuitive API for generating affine transformation matrices in PyTorch. These matrices are often used in computer graphics and imaging applications where coordinate transformations are frequent.

The library supports:

  • 2D transformations (rotation, translation, scaling)
  • 3D transformations (rotation around X, Y, Z axes, translation, scaling)
  • Batched operations for efficient processing
  • Support for different coordinate conventions (xyw/yxw for 2D, xyzw/zyxw for 3D)

Installation

pip install torch-affine-utils

Usage Examples

2D Transformations

import einops
import torch
from torch_affine_utils.transforms_2d import R, T, S

# Create a rotation matrix (45 degrees)
rotation = R(torch.tensor([45.0]))

# Create a translation matrix
translation = T(torch.tensor([[2.0, 3.0]]))

# Create a scaling matrix
scaling = S(torch.tensor([[2.0, 3.0]]))

# Chain transformations (apply scaling, then rotation, then translation)
transform = translation @ rotation @ scaling

# Apply to a batch of 2D coordinates
coords = torch.tensor([
    [1.0, 1.0, 1.0],  # Homogeneous coordinates (x, y, w)
    [1.0, 0.0, 1.0]
])  
coords = einops.rearrange(coords, 'b xyw -> b xyw 1')
transformed_coords = transform @ coords

3D Transformations

import einops
import torch
from torch_affine_utils.transforms_3d import Rx, Ry, Rz, T, S

# Create rotation matrices around each axis
rot_x = Rx(torch.tensor([30.0]))  # 30 degrees around X axis
rot_y = Ry(torch.tensor([45.0]))  # 45 degrees around Y axis
rot_z = Rz(torch.tensor([60.0]))  # 60 degrees around Z axis

# Create a translation and scaling matrix
translation = T(torch.tensor([[1.0, 2.0, 3.0]]))
scaling = S(torch.tensor([[2.0, 2.0, 2.0]]))

# Chain transformations
transform = translation @ rot_z @ rot_y @ rot_x @ scaling

# Apply to a batch of 3D coordinates
coords = torch.tensor([
    [1.0, 1.0, 1.0, 1.0],  # Homogeneous coordinates (x, y, z, w)
    [1.0, 0.0, 0.0, 1.0]
])
coords = einops.rearrange(coords, 'b xyzw -> b xyzw 1')
transformed_coords = transform @ coords

Batched Operations

The library supports batched operations for efficient processing:

import torch
from torch_affine_utils.transforms_2d import R

# Batch of rotation angles
angles = torch.tensor([0.0, 30.0, 45.0, 60.0, 90.0])

# Create batch of 2D rotation matrices
rotation_matrices = R(angles)  # Shape: (5, 3, 3)

from torch_affine_utils.transforms_3d import T

# Batch of 3D translations
translations = torch.tensor([
    [1.0, 0.0, 0.0],
    [0.0, 1.0, 0.0],
    [0.0, 0.0, 1.0],
    [1.0, 1.0, 1.0],
])

# Create batch of translation matrices
translation_matrices = T(translations)  # Shape: (4, 4, 4)

Homogeneous Coordinates

The package provides a helper function to convert standard coordinates to homogeneous coordinates

import torch
from torch_affine_utils import homogenise_coordinates

# For 2D points
points_2d = torch.tensor([[1.0, 2.0], [3.0, 4.0], [5.0, 6.0]])
homogeneous_2d = homogenise_coordinates(points_2d)
# Result: tensor([[1.0, 2.0, 1.0],
#                 [3.0, 4.0, 1.0],
#                 [5.0, 6.0, 1.0]])

# For 3D points
points_3d = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]])
homogeneous_3d = homogenise_coordinates(points_3d)
# Result: tensor([[1.0, 2.0, 3.0, 1.0],
#                 [4.0, 5.0, 6.0, 1.0]])

# Works with any batch dimensions
points_batched = torch.randn(2, 3, 5, 3)  # Shape: (2, 3, 5, 3) - batch of 3D points
homogeneous_batched = homogenise_coordinates(points_batched)
# Result shape: (2, 3, 5, 4) - added homogeneous coordinate

Coordinate Systems

The library supports multiple coordinate conventions:

  • For 2D:

    • xyw (default): Standard Cartesian coordinates
    • yxw: Alternative ordering (useful for 2D image coordinates)
  • For 3D:

    • xyzw (default): Standard right-handed Cartesian coordinates
    • zyxw: Alternative ordering (useful for 3D image coordinates)

License

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

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

torch_affine_utils-0.6.3rc1.tar.gz (8.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

torch_affine_utils-0.6.3rc1-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

Details for the file torch_affine_utils-0.6.3rc1.tar.gz.

File metadata

  • Download URL: torch_affine_utils-0.6.3rc1.tar.gz
  • Upload date:
  • Size: 8.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for torch_affine_utils-0.6.3rc1.tar.gz
Algorithm Hash digest
SHA256 f13a5f34c66ff2e3a7c5e580d08857553142075c541ac1227b24a997fc9ad952
MD5 a321d26aad1ac0cd3c87e073c2c1f9e5
BLAKE2b-256 123b99831fa7f86bc2cca68419691708c4e7b95da0774f73606d6272956e3431

See more details on using hashes here.

Provenance

The following attestation bundles were made for torch_affine_utils-0.6.3rc1.tar.gz:

Publisher: deploy.yml on teamtomo/teamtomo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file torch_affine_utils-0.6.3rc1-py3-none-any.whl.

File metadata

File hashes

Hashes for torch_affine_utils-0.6.3rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 43d2af857083d21e00785b30bfeaab09f8a8ff92747d1d8d0ef36aa0fd9095e6
MD5 705b640fada9ae733e5ecf61c30a977b
BLAKE2b-256 3f79a2b3f8ef117b006dfc1d8e7817a19691903147391331c10451f65ed3958e

See more details on using hashes here.

Provenance

The following attestation bundles were made for torch_affine_utils-0.6.3rc1-py3-none-any.whl:

Publisher: deploy.yml on teamtomo/teamtomo

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page