astroSR: Astronomical Super-Resolution with Drizzle Algorithm
Overview
astroSR implements the Drizzle algorithm (Fruchter & Hook, 2002) for astronomical image combination and super-resolution reconstruction. The package provides precise photometric flux conservation through pixel-to-pixel mapping with configurable overlap area calculations, enabling resolution enhancement beyond the native pixel scale of input images.
Key Features
- Faithful Drizzle Implementation: Complete implementation of the Fruchter & Hook (2002) algorithm with exact flux conservation
- Resolution Enhancement: Achieves spatial resolution improvement through optimal dithering pattern exploitation
- Flexible Weighting: Supports per-image weighting based on exposure time, image quality, or other metrics
- Multiple Kernel Types: Square, Gaussian, and tophat kernels for different reconstruction requirements
- WCS Support: Full World Coordinate System handling for precise geometric transformations
- Noise Control: Configurable pixel fraction parameter for noise correlation management
Theoretical Background
The achievable resolution gain depends on:
- Number of input images and their dithering pattern
- Alignment precision and point spread function characteristics
- Signal-to-noise ratio of individual exposures
For well-dithered observations, the effective resolution improvement typically ranges from 1.5× to 3× the native pixel scale, with optimal results achieved using 4-9 input images.
Installation
From PyPI (Recommended)
pip install astrosr
From Source
git clone https://github.com/dot-gabriel-ferrer/astroSR.git
cd astroSR
pip install .
Development Installation
git clone https://github.com/dot-gabriel-ferrer/astroSR.git
cd astroSR
pip install -e .[dev]
Requirements
- Python ≥ 3.9
- NumPy ≥ 1.20.0
- Astropy ≥ 6.0
- SciPy ≥ 1.7.0
- Matplotlib ≥ 3.5.0
- DrizzlePac ≥ 3.6.0
Usage
Command Line Interface
Basic usage for combining dithered images:
astrosr \
--input img1.fits img2.fits img3.fits img4.fits \
--output combined.fits \
--scale-factor 2.0 \
--pixfrac 0.8
Advanced usage with custom weighting:
astrosr \
--input obs1.fits obs2.fits obs3.fits \
--output result.fits \
--scale-factor 2.0 \
--pixfrac 0.8 \
--weights 1.0 2.0 1.5 \
--kernel gaussian \
--save-weight-map
Python API
from astrosr import drizzle_super_resolution
# Basic combination
drizzle_super_resolution(
input_files=['img1.fits', 'img2.fits', 'img3.fits', 'img4.fits'],
output_file='superres.fits',
scale_factor=2.0,
pixfrac=0.8
)
# Advanced configuration
result = drizzle_super_resolution(
input_files=['obs1.fits', 'obs2.fits', 'obs3.fits'],
output_file='output.fits',
scale_factor=2.0,
pixfrac=0.8,
weights=[1.0, 1.2, 0.8],
kernel='gaussian',
pixel_scale=0.5, # arcsec/pixel
save_weight_map=True,
preserve_flux=True
)
Parameters
| Parameter | Type | Default | Description |
|---|---|---|---|
input_files |
list | - | List of input FITS files |
output_file |
str | - | Output FITS filename |
scale_factor |
float | 2.0 | Resolution improvement factor |
pixfrac |
float | 0.8 | Drizzle pixel fraction (0.6-1.0) |
kernel |
str | 'square' | Kernel type: 'square', 'gaussian', 'tophat' |
weights |
list | None | Per-image weights |
pixel_scale |
float | auto | Output pixel scale (arcsec/pixel) |
save_weight_map |
bool | False | Save weight map alongside output |
Applications
Dithered Observations
Combine multiple exposures with sub-pixel offsets to achieve super-resolution:
drizzle_super_resolution(
input_files=['dither_01.fits', 'dither_02.fits', 'dither_03.fits', 'dither_04.fits'],
output_file='superres.fits',
scale_factor=2.0
)
Quality-Weighted Combination
Weight images by exposure time or image quality:
drizzle_super_resolution(
input_files=['short_exp.fits', 'long_exp.fits'],
output_file='weighted.fits',
weights=[1.0, 3.0], # 3x weight for longer exposure
scale_factor=1.8
)
Mosaic Construction
Combine overlapping fields into a unified high-resolution image:
drizzle_super_resolution(
input_files=['field_a.fits', 'field_b.fits', 'field_c.fits'],
output_file='mosaic.fits',
scale_factor=1.5
)
Validation and Testing
The implementation has been validated for:
- Photometric accuracy (< 1% flux conservation error)
- Geometric precision in coordinate transformations
- Proper handling of NaN pixels and image boundaries
- Resolution enhancement verification
Comprehensive test suite available in tests/ directory.
Documentation
- Usage Guide - Detailed examples and parameter descriptions
- Algorithm Reference - Mathematical foundations and implementation details
- API Documentation - Complete function reference
Scientific References
- Fruchter, A. S., & Hook, R. N. (2002). Drizzle: A method for the linear reconstruction of undersampled images. Publications of the Astronomical Society of the Pacific, 114(792), 144-152. https://doi.org/10.1086/338393
- Gonzaga, S., et al. (2012). The DrizzlePac Handbook. Space Telescope Science Institute.
- Koekemoer, A. M., et al. (2003). HST Dither Handbook. Space Telescope Science Institute.
- Fruchter, A. S., et al. (2016). The panchromatic Hubble Andromeda Treasury. Astrophysical Journal, 83(1), 6. https://doi.org/10.3847/0004-637X/83/1/6
Project Structure
astrosr/
├── src/astrosr/
│ ├── __init__.py
│ └── drizzle_super_resolution.py
├── tests/
│ └── test_drizzle_super_resolution.py
├── scripts/
│ ├── run_drizzle.py
│ └── batch_drizzle.py
├── docs/
│ ├── usage.md
│ ├── algorithm.md
│ └── api.md
├── examples/
│ ├── demo_drizzle.py
│ └── README.md
├── pyproject.toml
└── README.md
Contributing
Contributions are welcome. Please follow these guidelines:
- Fork the repository
- Create a feature branch from
main - Implement changes with comprehensive tests
- Ensure all tests pass and documentation is updated
- Submit a pull request with detailed description
License
This project is licensed under the MIT License - see the LICENSE file for details.
Citation
If you use astroSR in your research, please cite:
Ferrer Jorge, E. Gabriel (2025). astroSR: Astronomical Super-Resolution with Drizzle Algorithm [Computer software]. https://github.com/dot-gabriel-ferrer/astroSR
Contact
Elías Gabriel Ferrer Jorge Email: gabrielferrerjorge@gmail.com GitHub: dot-gabriel-ferrer
Acknowledgments
- Original Drizzle algorithm: Andrew Fruchter and Richard Hook (Space Telescope Science Institute)
- DrizzlePac reference implementation: Space Telescope Science Institute
- Astropy community for astronomical Python ecosystem
Metadata
Release files for astrosr 1.0.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| astrosr-1.0.4.tar.gz | 27.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| astrosr-1.0.4-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 42.3 kB
Release files / astrosr-1.0.4.tar.gz
| Download URL | astrosr-1.0.4.tar.gz |
|---|---|
| Size | 27.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
007e22c0691690edd1c71077fda3fc0a6a94d9aceeb00d5a4d7f6d797c8bd056
|
|
BLAKE2b-256 checksum How to use checksums |
a3511ea9082fe2a0af7991fb484413836fac32cc7f6c165e3bac0ab40a6a0b16
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.7
|
Release files / astrosr-1.0.4-py3-none-any.whl
| Download URL | astrosr-1.0.4-py3-none-any.whl |
|---|---|
| Size | 14.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2e0325809949ee90f9c734e42a07d5c536a4bacd2b629c4c7c4f362a4af00969
|
|
BLAKE2b-256 checksum How to use checksums |
4b51870f9d52ba365d9f242c19119f8e691298cd9d62a463a1a5326a6674691c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.7
|