# SpaceTransformer
A Python library for elegant 3D medical image geometric transformations.
## Why SpaceTransformer?
Traditional medical image processing suffers from fragmented coordinate concepts:
- **Frame**: Only captures position/orientation, missing crucial **shape** information
- **NIfTI Affine**: A 4x4 matrix that's hard to interpret - what does each element mean?
- **Manual bookkeeping**: Keeping track of transformations across multiple processing steps
SpaceTransformer introduces the **Space** concept - a complete description of 3D image geometry.
## Key Advantages
### 1. Complete Geometric Description
Unlike traditional "frame" concepts, `Space` fully describes the image sampling grid:
```python
space = Space(
shape=(512, 512, 100), # Complete voxel dimensions
origin=(0.0, 0.0, 0.0), # Physical position
spacing=(0.5, 0.5, 2.0), # Voxel size in mm
x_orientation=(1, 0, 0), # Explicit direction vectors
y_orientation=(0, 1, 0), # No ambiguous matrix interpretation
z_orientation=(0, 0, 1)
)
```
### 2. Expressive Spatial Operations
Describe complex transformations explicitly:
```python
# Chain operations elegantly
transformed_space = (space
.apply_flip(axis=2)
.apply_resize((256, 256, 50))
.apply_crop(bbox))
```
### 3. Transparent Matrix Interpretation
No more guessing what a 4x4 affine matrix means - direction vectors are explicit.
## Elegant Image Processing
### 1. Worry-Free Multi-Step Pipelines
```python
# Traditional approach: careful bookkeeping required
# crop -> resize -> segmentation -> resize back -> pad back
# SpaceTransformer approach: fully reversible by design
target_space = original_space.apply_crop(bbox).apply_resize(target_size)
warped_img = warp_image(original_img,
original_space,
target_space,
mode='linear',
pad_value=-1000)
# ... process in target_space ...
segment_result = segmodel(warped_img) # hxwxl, int
keypoint_result = keypmodel(warped_img) # nx3, [i,j,k], index coord
# Automatic optimal path back to original_space
original_segment_result = warp_image(segment_result,
target_space,
original_space,
mode='nearest',
pad_value = 0)
original_keypoint_result = warp_point(keypoint_result,
target_space,
original_space) # nx3, index coord
world_keypoint_result = target_space.to_world_transform(keypoint_result) # nx3, [x,y,z], mm
```
### 2. Abstract-Then-Execute Pattern
```python
# Plan transformations (fast, no actual image processing)
target_space = source_space.apply_flip(0).apply_rotate(1, 30).apply_crop(bbox).apply_resize((256, 256, 128))
# Execute once with optimal path (GPU-accelerated)
result = warp_image(image, source_space, target_space, cuda_device="cuda:0")
```
### 3. GPU-Accelerated & Deep Learning Ready
- PyTorch backend with automatic optimal transformation paths
- No `align_corners` confusion - transformations are mathematically guaranteed reversible
- Seamless integration with deep learning workflows
## Architecture
- **spacetransformer-core**: Pure NumPy implementation for geometric computations
- **spacetransformer-torch**: GPU-accelerated image resampling with PyTorch
## Quick Start
```python
import numpy as np
from spacetransformer.core import Space
from spacetransformer.torch import warp_image
# Create image space
space = Space(
shape=(512, 512, 100),
spacing=(1.0, 1.0, 2.0),
origin=(0, 0, 0)
)
# Define target transformation
target_space = space.apply_flip(axis=2).apply_resize((256, 256, 50))
# Apply to image (GPU-accelerated)
transformed_image = warp_image(
image, space, target_space,
pad_value=0, cuda_device="cuda:0"
)
```
## Format Support
- **NIfTI**: `Space.from_nifti(nifti_image)`
- **SimpleITK**: `Space.from_sitk(sitk_image)`
## Installation
```bash
pip install spacetransformer-core # Core functionality
pip install spacetransformer-torch # GPU acceleration
```
## Requirements
- **Core**: Python ≥3.8, NumPy ≥1.20
- **Torch**: PyTorch ≥1.12 (spacetransformer-torch)
---
*SpaceTransformer: Making 3D medical image transformations as elegant as they should be.*
Raw data
{
"_id": null,
"home_page": null,
"name": "spacetransformer-core",
"maintainer": null,
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": null,
"keywords": "medical-imaging, geometry, transform, numpy",
"author": null,
"author_email": "Your Name <you@example.com>",
"download_url": "https://files.pythonhosted.org/packages/69/e4/050ff9d205575f32896bc96dfcff01bef6e3407531630463785712736f4d/spacetransformer_core-0.1.0.tar.gz",
"platform": null,
"description": "# SpaceTransformer\n\nA Python library for elegant 3D medical image geometric transformations.\n\n\n\n## Why SpaceTransformer?\n\nTraditional medical image processing suffers from fragmented coordinate concepts:\n\n- **Frame**: Only captures position/orientation, missing crucial **shape** information\n- **NIfTI Affine**: A 4x4 matrix that's hard to interpret - what does each element mean?\n- **Manual bookkeeping**: Keeping track of transformations across multiple processing steps\n\nSpaceTransformer introduces the **Space** concept - a complete description of 3D image geometry.\n\n## Key Advantages\n\n### 1. Complete Geometric Description\nUnlike traditional \"frame\" concepts, `Space` fully describes the image sampling grid:\n```python\nspace = Space(\n shape=(512, 512, 100), # Complete voxel dimensions\n origin=(0.0, 0.0, 0.0), # Physical position\n spacing=(0.5, 0.5, 2.0), # Voxel size in mm\n x_orientation=(1, 0, 0), # Explicit direction vectors\n y_orientation=(0, 1, 0), # No ambiguous matrix interpretation\n z_orientation=(0, 0, 1)\n)\n```\n\n### 2. Expressive Spatial Operations\nDescribe complex transformations explicitly:\n```python\n# Chain operations elegantly\ntransformed_space = (space\n .apply_flip(axis=2)\n .apply_resize((256, 256, 50))\n .apply_crop(bbox))\n```\n\n### 3. Transparent Matrix Interpretation\nNo more guessing what a 4x4 affine matrix means - direction vectors are explicit.\n\n## Elegant Image Processing\n\n### 1. Worry-Free Multi-Step Pipelines\n```python\n# Traditional approach: careful bookkeeping required\n# crop -> resize -> segmentation -> resize back -> pad back\n\n# SpaceTransformer approach: fully reversible by design\ntarget_space = original_space.apply_crop(bbox).apply_resize(target_size)\nwarped_img = warp_image(original_img, \n original_space, \n target_space, \n mode='linear', \n pad_value=-1000)\n# ... process in target_space ...\nsegment_result = segmodel(warped_img) # hxwxl, int\nkeypoint_result = keypmodel(warped_img) # nx3, [i,j,k], index coord\n# Automatic optimal path back to original_space\noriginal_segment_result = warp_image(segment_result, \n target_space, \n original_space, \n mode='nearest', \n pad_value = 0)\noriginal_keypoint_result = warp_point(keypoint_result, \n target_space, \n original_space) # nx3, index coord \nworld_keypoint_result = target_space.to_world_transform(keypoint_result) # nx3, [x,y,z], mm\n```\n\n### 2. Abstract-Then-Execute Pattern\n```python\n# Plan transformations (fast, no actual image processing)\ntarget_space = source_space.apply_flip(0).apply_rotate(1, 30).apply_crop(bbox).apply_resize((256, 256, 128))\n\n# Execute once with optimal path (GPU-accelerated)\nresult = warp_image(image, source_space, target_space, cuda_device=\"cuda:0\")\n```\n\n### 3. GPU-Accelerated & Deep Learning Ready\n- PyTorch backend with automatic optimal transformation paths\n- No `align_corners` confusion - transformations are mathematically guaranteed reversible\n- Seamless integration with deep learning workflows\n\n## Architecture\n\n- **spacetransformer-core**: Pure NumPy implementation for geometric computations\n- **spacetransformer-torch**: GPU-accelerated image resampling with PyTorch\n\n## Quick Start\n\n```python\nimport numpy as np\nfrom spacetransformer.core import Space\nfrom spacetransformer.torch import warp_image\n\n# Create image space\nspace = Space(\n shape=(512, 512, 100),\n spacing=(1.0, 1.0, 2.0),\n origin=(0, 0, 0)\n)\n\n# Define target transformation\ntarget_space = space.apply_flip(axis=2).apply_resize((256, 256, 50))\n\n# Apply to image (GPU-accelerated)\ntransformed_image = warp_image(\n image, space, target_space, \n pad_value=0, cuda_device=\"cuda:0\"\n)\n```\n\n## Format Support\n\n- **NIfTI**: `Space.from_nifti(nifti_image)`\n- **SimpleITK**: `Space.from_sitk(sitk_image)`\n\n## Installation\n\n```bash\npip install spacetransformer-core # Core functionality\npip install spacetransformer-torch # GPU acceleration\n```\n\n## Requirements\n\n- **Core**: Python \u22653.8, NumPy \u22651.20\n- **Torch**: PyTorch \u22651.12 (spacetransformer-torch)\n\n---\n\n*SpaceTransformer: Making 3D medical image transformations as elegant as they should be.* \n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Pure numpy core implementation of Space Transformer for geometric computations.",
"version": "0.1.0",
"project_urls": null,
"split_keywords": [
"medical-imaging",
" geometry",
" transform",
" numpy"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "803e30f37eb091302a1766545cf02f96fb98fd18ed5449ad3402e75b54167b97",
"md5": "77fffd3d69d883364f85f984ccc2cbd6",
"sha256": "b4bc1e886da207a4decf4369286483e5fc0a55aa26002b881d78e68b69401f2f"
},
"downloads": -1,
"filename": "spacetransformer_core-0.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "77fffd3d69d883364f85f984ccc2cbd6",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 21664,
"upload_time": "2025-07-14T09:32:45",
"upload_time_iso_8601": "2025-07-14T09:32:45.781375Z",
"url": "https://files.pythonhosted.org/packages/80/3e/30f37eb091302a1766545cf02f96fb98fd18ed5449ad3402e75b54167b97/spacetransformer_core-0.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "69e4050ff9d205575f32896bc96dfcff01bef6e3407531630463785712736f4d",
"md5": "e804174a9a554d7d10cffc09c7dda151",
"sha256": "fd26aa5c354793bb13448399073de5412e54cc6f6594cbc08c8d77eac4cdf364"
},
"downloads": -1,
"filename": "spacetransformer_core-0.1.0.tar.gz",
"has_sig": false,
"md5_digest": "e804174a9a554d7d10cffc09c7dda151",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8",
"size": 25902,
"upload_time": "2025-07-14T09:32:47",
"upload_time_iso_8601": "2025-07-14T09:32:47.283225Z",
"url": "https://files.pythonhosted.org/packages/69/e4/050ff9d205575f32896bc96dfcff01bef6e3407531630463785712736f4d/spacetransformer_core-0.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-07-14 09:32:47",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "spacetransformer-core"
}