CtrlK
BlogDocsLog inGet started
Tessl Logo

tessl/pypi-dipy

Comprehensive Python library for diffusion MRI analysis including tensor imaging, tractography, and visualization

Pending
Overview
Eval results
Files

registration.mddocs/

Registration and Alignment

Image registration algorithms for aligning diffusion data, including affine and non-linear registration methods, motion correction, and streamline registration. DIPY provides high-level registration functions that handle common alignment tasks.

Capabilities

Non-linear Registration

Symmetric diffeomorphic registration for non-linear alignment between images.

def syn_registration(moving, static, *, moving_affine=None, static_affine=None, step_length=0.25, metric="CC", dim=3, level_iters=None, prealign=None, **metric_kwargs):
    """
    Symmetric diffeomorphic registration between 2D/3D images.
    
    Parameters:
        moving (array/str): moving image data or file path
        static (array/str): static (target) image data or file path  
        moving_affine (array): 4x4 affine for moving image
        static_affine (array): 4x4 affine for static image
        step_length (float): optimization step length
        metric (str): similarity metric ('CC', 'EM', 'SSD')
        dim (int): image dimensions (2 or 3)
        level_iters (list): iterations at each pyramid level
        prealign (array): initial transformation matrix
        
    Returns:
        tuple: (warped_moving, mapping) - registered image and transformation
    """

def register_dwi_to_template(dwi, gtab, *, dwi_affine=None, template=None, template_affine=None, reg_method="syn", **reg_kwargs):
    """
    Register DWI data to template through B0 volumes.
    
    Parameters:
        dwi (array/str): DWI data or file path
        gtab (GradientTable): diffusion gradient table
        dwi_affine (array): 4x4 affine for DWI data
        template (array/str): template image or file path
        template_affine (array): 4x4 affine for template
        reg_method (str): registration method ('syn' or 'aff')
        
    Returns:
        tuple: (warped_b0, mapping) - registered B0 and transformation
    """

Affine Registration

Multi-step affine registration with gradual transformation fitting.

def affine_registration(moving, static, *, moving_affine=None, static_affine=None, pipeline=None, starting_affine=None, metric="MI", level_iters=None, sigmas=None, factors=None, ret_metric=False, moving_mask=None, static_mask=None, **metric_kwargs):
    """
    Multi-step affine registration pipeline.
    
    Parameters:
        moving (array/str): moving image
        static (array/str): static image  
        moving_affine (array): 4x4 affine for moving image
        static_affine (array): 4x4 affine for static image
        pipeline (list): transformation sequence (['center_of_mass', 'translation', 'rigid', 'affine'])
        starting_affine (array): initial transformation
        metric (str): similarity metric ('MI')
        level_iters (list): iterations at each scale level  
        sigmas (list): smoothing parameters for scale space
        factors (list): scale factors for pyramid
        ret_metric (bool): return optimization metrics
        moving_mask (array): mask for moving image
        static_mask (array): mask for static image
        
    Returns:
        tuple: (resampled, final_affine) or (resampled, final_affine, xopt, fopt)
    """

def center_of_mass(moving, static, **kwargs):
    """Center of mass alignment transform."""

def translation(moving, static, **kwargs):  
    """Translation-only transform."""

def rigid(moving, static, **kwargs):
    """Rigid transform (translation + rotation)."""

def rigid_isoscaling(moving, static, **kwargs):
    """Rigid transform with isometric scaling."""

def rigid_scaling(moving, static, **kwargs):
    """Rigid transform with anisotropic scaling."""

def affine(moving, static, **kwargs):
    """Full affine transform (12 degrees of freedom)."""

Series Registration

Registration of 4D image series and DWI datasets for motion correction.

def register_series(series, ref, *, pipeline=None, series_affine=None, ref_affine=None, static_mask=None):
    """
    Register 4D image series to reference volume.
    
    Parameters:  
        series (array/str): 4D image series
        ref (int/array/str): reference volume index or image
        pipeline (list): transformation sequence
        series_affine (array): 4x4 affine for series
        ref_affine (array): 4x4 affine for reference
        static_mask (array): mask for reference image
        
    Returns:
        tuple: (xformed, affines) - registered series and transformation matrices
    """

def register_dwi_series(data, gtab, *, affine=None, b0_ref=0, pipeline=None, static_mask=None):
    """
    Register DWI series to mean B0 (motion correction).
    
    Parameters:
        data (array/str): 4D DWI data
        gtab (GradientTable): gradient table
        affine (array): 4x4 affine transformation
        b0_ref (int): reference B0 volume index
        pipeline (list): transformation sequence  
        static_mask (array): mask for reference
        
    Returns:
        tuple: (xform_img, affine_array) - registered data and transformations
    """

def motion_correction(data, gtab, **kwargs):
    """
    Motion correction for DWI datasets.
    
    Alias for register_dwi_series with standard pipeline.
    """

Streamline Registration

Registration of streamline bundles to align tractography results.

def streamline_registration(moving, static, *, n_points=100, native_resampled=False):
    """
    Register streamline bundles to each other.
    
    Parameters:
        moving (list/str): moving streamlines or file path
        static (list/str): static streamlines or file path  
        n_points (int): number of points for resampling
        native_resampled (bool): return in original space but resampled
        
    Returns:
        tuple: (aligned, matrix) - aligned streamlines and 4x4 transformation
    """

Resampling and Mapping

Utilities for resampling images between different spaces and managing transformations.

def resample(moving, static, *, moving_affine=None, static_affine=None, between_affine=None):
    """
    Resample image from one space to another.
    
    Parameters:
        moving (array/str): moving image
        static (array/str): target image defining output space
        moving_affine (array): 4x4 affine for moving image
        static_affine (array): 4x4 affine for static image  
        between_affine (array): additional transformation between spaces
        
    Returns:
        Nifti1Image: resampled image in target space
    """

def write_mapping(mapping, fname):
    """
    Save registration mapping to nifti file.
    
    Parameters:
        mapping (DiffeomorphicMap): registration mapping
        fname (str): output file path
    """

def read_mapping(disp, domain_img, codomain_img, *, prealign=None):
    """
    Load registration mapping from nifti file.
    
    Parameters:
        disp (str/array): displacement field file or data
        domain_img (str/array): domain image
        codomain_img (str/array): codomain image
        prealign (array): pre-alignment transformation
        
    Returns:
        DiffeomorphicMap: loaded registration mapping
    """

Usage Examples

# Basic non-linear registration
from dipy.align import syn_registration
from dipy.data import read_stanford_hardi
import numpy as np

# Load example data  
img, _ = read_stanford_hardi()
data = img.get_fdata()

# Use first and last volumes as moving and static
moving = data[..., 0] 
static = data[..., -1]

# Perform symmetric diffeomorphic registration
warped, mapping = syn_registration(moving, static, metric='CC')

print(f"Original shape: {moving.shape}")
print(f"Warped shape: {warped.shape}")

# Motion correction for DWI series
from dipy.align import motion_correction

# Load full DWI data
img, gtab = read_stanford_hardi()
data = img.get_fdata()

# Apply motion correction
corrected_img, transforms = motion_correction(data, gtab)

print(f"Applied {transforms.shape[-1]} transformations")

# Affine registration with custom pipeline
from dipy.align import affine_registration

# Register with rigid transformation only
result, affine_matrix = affine_registration(
    moving, static,
    pipeline=['center_of_mass', 'translation', 'rigid']
)

print(f"Final affine transformation:\n{affine_matrix}")

# Streamline bundle registration  
from dipy.align import streamline_registration
from dipy.data import read_bundles_2_subjects

# Load example streamline bundles
streamlines1, streamlines2 = read_bundles_2_subjects()

# Register bundles
aligned_streamlines, transform_matrix = streamline_registration(
    streamlines1, streamlines2, n_points=20
)

print(f"Registered {len(aligned_streamlines)} streamlines")
print(f"Transform matrix shape: {transform_matrix.shape}")

# Resampling between spaces
from dipy.align import resample

# Resample moving image to static image space
resampled_img = resample(moving, static)

print(f"Resampled image type: {type(resampled_img)}")

Install with Tessl CLI

npx tessl i tessl/pypi-dipy

docs

core-utilities.md

data-access.md

image-processing.md

index.md

neural-networks.md

registration.md

segmentation.md

signal-reconstruction.md

simulations.md

statistics.md

tractography.md

visualization.md

workflows.md

tile.json