Quickstart
- Load ≥2 images (Drag & Drop or file picker). The app sorts frames by time.
- (Recommended) Click Pick reference star, then click a bright star in the canvas. Enter its catalog magnitude.
- Press Run. The app will align frames, detect objects, build tracks, compute photometry, and draw motion paths.
- Select a track to view a WISEA-style analysis record.
What the app does (pipeline)
This app is a minimal multi-frame photometry + motion tool. It runs fully in your browser.
1) Frame loading & timestamps
- JPEG EXIF
DateTimeOriginalis used if present. - Otherwise, the file modified time is used.
- You can edit timestamp and exposure time in the Frames table.
2) Alignment (global drift compensation)
Each frame is aligned to frame #1 using a coarse shift search (SSD on downsampled luminance). Output is a pixel shift (dx,dy).
3) Detection (blobs)
Pixels above threshold T are grouped into connected components (8-neighborhood). Each blob gets a centroid and mean RGB.
4) Tracking
Blobs are matched across frames by nearest-neighbor with a maximum distance. The sequence is a track.
5) Photometry
With a reference star, the app computes a per-frame zero point and then object magnitudes.
6) Physics layers
- AU anchor: compare track brightness to a 600 AU baseline.
- Reflected-object model: predict magnitude from
H,r,Δ, phase.
Photometry (counts → magnitude)
Aperture photometry
NetFlux = Sum(aperture) - Median(background) · N_aperturePixels
Flux mode: Luminance or Sum(R+G+B).
Instrumental magnitude
m_inst = -2.5 · log10( NetFlux / exposureSeconds )
Zero point & true magnitude
ZP = m_ref - m_inst(ref) m_true(object) = m_inst(object) + ZP
AU & irradiance anchors
I(1 AU) = 1360.8 W/m² I(r) = I(1 AU) / r²
I(600 AU) = 1360.8 / 600² ≈ 0.00378 W/m²
From 600 AU baseline to any AU
I(AU) = I(600) · (600/AU)² Δm = -2.5 · log10( I(AU) / I(600) ) = -5 · log10(600/AU) m_exp(AU) = m600 + Δm
The AU anchor filter compares mag_corr to m_exp(AU) with a tolerance.
Reflected-object magnitude model
m = H + 5 · log10(r · Δ) + P(α)
Linear phase term
P(α) = β · α
Compute H from a measured track
H = m_corr - 5·log10(r·Δ) - P(α)
Tracking (motion between frames)
Alignment: SSD shift search
SSD(dx,dy) = mean( (A(x,y) - B(x-dx, y-dy))² )
Auto threshold (median + k·MAD)
T = median + k · (1.4826 · MAD) MAD = median( |x - median(x)| )
Track matching
match if distance(p_i, p_{i+1}) ≤ MatchDist
Color / spectral heuristic
(B−V)* ≈ a·log10(R/G) + b·log10(G/B) m_corr = m + C · (B−V)*
This is a heuristic layer for clustering (redder vs bluer). For real spectral classification you need calibrated filters/spectra.
WISEA-style inspector output
The inspector output is a structured record containing:
- Pixel-based designation (
WISEA PXx_y) - Time span and motion (px/s)
- Mean magnitudes and model deltas
- Settings snapshot for reproducibility
For a real WISEA name (WISEA Jhhmmss.ss±ddmmss.s) you need WCS (pixel → RA/Dec).
Troubleshooting & tips
No tracks
- Enable Show all tracks (debug).
- Lower Min frames / Min disp.
- Reduce threshold (lower
kor manualT). - Increase Match dist for faster motion.
Bad magnitudes
- Reference star must not be saturated.
- Radii must satisfy
rOut > rIn > rAp. - Set correct exposure times (or keep 1.0 for relative results).
Glossary
- AU: Astronomical Unit (Earth–Sun distance).
- Irradiance: W/m² arriving at a surface.
- Flux: summed pixel intensity in an aperture.
- Magnitude: logarithmic brightness scale.
- ZP: zero point calibration offset.
- H: absolute magnitude (size+albedo proxy).
- WCS: pixel → sky coordinate mapping.