Skip to main content

A high-performance Python package for reprojecting astronomical images between different coordinate systems with support for SIP distortion correction.

Project description

dfreproject

A high-performance Python package for reprojecting astronomical images between different coordinate systems with support for SIP distortion correction.

Documentation Status Tests codecov

The idea behind this package was to make a stripped down version of the reproject package by astropy in order to reduce computational time. We achieve approximately 40X faster computations with this package. Take a look at the demos for an example.

Features

  • Fast reprojection of astronomical images between different WCS frames
  • Support for Simple Imaging Polynomial (SIP) distortion correction
  • GPU acceleration using PyTorch
  • Multiple interpolation methods (nearest neighbor, bilinear, bicubic)
  • Simple high-level API and detailed low-level control

Installation

Using PyPi

If you want to install using PyPi (which is certainly the easiest way), you can simply run

pip install dfreproject

Requirements

  • Python 3.7+
  • NumPy
  • Astropy
  • PyTorch
  • Matplotlib
  • cmcrameri

Installing from Source

For the latest development version, install directly from the GitHub repository:

git clone https://github.com/DragonflyTelescope/dfreproject.git
cd dfreproject
pip install -e .

For development installation with documentation dependencies:

pip install -e ".[docs]"

Quick Start

from astropy.io import fits
from astropy.wcs import WCS
from dfreproject import calculate_reprojection

# Load source and target images
source_hdu = fits.open('source_image.fits')[0]
target_hdu = fits.open('target_grid.fits')[0]
target_wcs = WCS(target_hdu.header)
# Perform dfreproject with bilinear interpolation
reprojected = calculate_reprojection(
    source_hdus=source_hdu,
    target_wcs=target_wcs,
    shape_out=target_hdu.data.shape,
    order='bilinear'
)

# Convert back to NumPy and save as FITS
reprojected_np = reprojected.cpu().numpy()
output_hdu = fits.PrimaryHDU(data=reprojected_np)
output_hdu.header.update(target_wcs.to_header())
output_hdu.writeto('reprojected_image.fits', overwrite=True)

The arguments for calculate_reprojection are the same as for the standard reprojection options in the reproject package such as reproject_interp, reproject_adaptive, or reproject_exact. Therefore, it can be directly swapped for one of these by simply importing it with from dfreproject import calculate_reprojection and then using calculate_reproject instead of reproject_interp. This comes with the caveat that the flux calculation most closely mimics that to reproject_interp.

Demos and Examples

A collection of example notebooks and scripts is available in the demos folder to help you get started:

  • reprojection-comparison.ipynb - Simple example of reprojecting between two WCS frames and comparing the result of our implementation with the reproject package.
  • Coordinate-Comparison.ipynb' - A step-by-step walkthrough of our coordinate transformations with a comparison to astropy.wcs`.

To run the demos:

cd demos
jupyter notebook

Documentation

Comprehensive documentation is available at https://dfreproject.readthedocs.io/

The documentation includes:

  • API reference
  • Mathematical details of the reprojection process
  • Tutorials and examples
  • Performance tips

Contributing

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

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

Citation

If you use this package in your research, please cite: TBD

Acknowledgments

  • Based on the FITS WCS standard and SIP convention
  • Inspired by Astropy's reproject package
  • Accelerated with PyTorch
  • Documentation aided by Claude.ai

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

dfreproject-0.0.1.tar.gz (31.3 kB view details)

Uploaded Source

Built Distribution

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

dfreproject-0.0.1-py3-none-any.whl (23.8 kB view details)

Uploaded Python 3

File details

Details for the file dfreproject-0.0.1.tar.gz.

File metadata

  • Download URL: dfreproject-0.0.1.tar.gz
  • Upload date:
  • Size: 31.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for dfreproject-0.0.1.tar.gz
Algorithm Hash digest
SHA256 ce45827379bb89ffccdf13138f3c4f61e50ed2d74113ed0ad8564db941b73f93
MD5 8d2f761941422fbf75694e40e08eb847
BLAKE2b-256 a39759788323df36f4d93e41bd4c40635836b5226c25c86b12a81e6dae5029ba

See more details on using hashes here.

File details

Details for the file dfreproject-0.0.1-py3-none-any.whl.

File metadata

  • Download URL: dfreproject-0.0.1-py3-none-any.whl
  • Upload date:
  • Size: 23.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.7

File hashes

Hashes for dfreproject-0.0.1-py3-none-any.whl
Algorithm Hash digest
SHA256 8e4068bc99b9b1fa366b9dd8348b866df65ec6cf3f049c50a3cf9a13084bb78c
MD5 d94ca91c9bea0f4e62fba317f4491317
BLAKE2b-256 bee17734cd00b8618256ed26e4bc1a707cf0d43ce2c01e4b8582631dad8b14d9

See more details on using hashes here.

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