Astronomical super-resolution with drizzle for wide field-of-view images
Project description
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
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file astrosr-1.0.4.tar.gz.
File metadata
- Download URL: astrosr-1.0.4.tar.gz
- Upload date:
- Size: 27.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
007e22c0691690edd1c71077fda3fc0a6a94d9aceeb00d5a4d7f6d797c8bd056
|
|
| MD5 |
19f42cf457f18f6363235913b85b5c5e
|
|
| BLAKE2b-256 |
a3511ea9082fe2a0af7991fb484413836fac32cc7f6c165e3bac0ab40a6a0b16
|
File details
Details for the file astrosr-1.0.4-py3-none-any.whl.
File metadata
- Download URL: astrosr-1.0.4-py3-none-any.whl
- Upload date:
- Size: 14.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2e0325809949ee90f9c734e42a07d5c536a4bacd2b629c4c7c4f362a4af00969
|
|
| MD5 |
3087591e33fa86f04d87b9336ca19dbc
|
|
| BLAKE2b-256 |
4b51870f9d52ba365d9f242c19119f8e691298cd9d62a463a1a5326a6674691c
|