CoolFace
Datasetpublic

ddompe/astro-iq

astro-iq — Astrophotography Sub-frame Quality Dataset A machine-learning dataset for no-reference quality scoring of raw astrophotography sub-exposures. Each sample is a 512×512 greyscale PNG thumbnail (center-cropped from the original 6248×4176 sensor frame) paired with photometric features and a continuous quality label in [0, 1]. Dataset summary Property Value Total frames 8,378 Labelled frames 7,828 Sensors ZWO ASI2600MC Pro (OSC), ZWO… See the full description on the dataset page: https://huggingface.co/datasets/ddompe/astro-iq.

sourceHugging Facecc-by-4.0updated 4mo agoView on Hugging Face
0likes7downloads
Dataset Card

astro-iq — Astrophotography Sub-frame Quality Dataset

A machine-learning dataset for no-reference quality scoring of raw astrophotography sub-exposures. Each sample is a 512×512 greyscale PNG thumbnail (center-cropped from the original 6248×4176 sensor frame) paired with photometric features and a continuous quality label in [0, 1].

Dataset summary

PropertyValue
Total frames8,378
Labelled frames7,828
SensorsZWO ASI2600MC Pro (OSC), ZWO ASI2600MM Pro (Mono)
Objects~90 (Messier, NGC, IC, Sharpless catalogue)
LocationSan José, Costa Rica (lat 9.93°, lon −84.09°, 1161 m)
Date range2022 – 2025
Thumbnail size512 × 512 px, 8-bit greyscale PNG
Parquet columns54 (see schema below)
Train / Val / TestSession-based split (no atmospheric leakage)

Labels

Two auto-generated labels are provided:

  • `label_composite` (primary): weighted sum of four percentile-normalised signals — FWHM (0.35), eccentricity (0.20), SNR (0.20), sky sigma (0.15). Each component is normalised within its filter group. Score 1.0 = best quality in the archive, 0.0 = worst.
  • `label_fwhm`: FWHM-only label, normalised within each (object, filter) group. Useful as a baseline or sanity check.

Splits

Splits are session-based: all frames from the same (object, night) are in the same split. This prevents atmospheric-condition leakage that would inflate test-set accuracy with a frame-random split.

SplitFrames
train4,889
val1,812
test1,677

File structure

data/labels.parquet      # one row per frame, all features + labels + split
thumbnails/              # 512×512 8-bit greyscale PNG per frame
  <xx>/                  # first 2 hex chars of frame_id (directory sharding)
    <frame_id>.png

Join thumbnails to metadata by frame_id:

python
thumb_path = f"thumbnails/{frame_id[:2]}/{frame_id}.png"

Loading the dataset

python
import polars as pl
from PIL import Image

df = pl.read_parquet("data/labels.parquet")
train = df.filter(pl.col("split") == "train")

# Load a thumbnail
frame_id = train["frame_id"][0]
img = Image.open(f"thumbnails/{frame_id[:2]}/{frame_id}.png")

Or with the HuggingFace datasets library (streaming-friendly):

python
from datasets import load_dataset
ds = load_dataset("ddompe/astro-iq")

Citation

If you use this dataset, please cite:

bibtex
@dataset{astroiq2025,
  author    = {Dompe, Diego and Ramirez, David},
  title     = {astro-iq: Astrophotography Sub-frame Quality Dataset},
  year      = {2025},
  publisher = {HuggingFace},
  url       = {https://huggingface.co/datasets/ddompe/astro-iq}
}

Licence

Dataset (Parquet + thumbnails): CC BY 4.0. Pipeline code: MIT — see the GitHub repository.