← Handbook

Background Neutralization

Correct a measured residual sky color cast -- a channel imbalance in a chosen background reference -- after the main color-calibration and stretch path, without modeling a spatial gradient and without acting as a substitute for physical/catalog color calibration.

schema 1 · revision 1

Recognize it

Intended output

A reduction in the measured dark-corner sky channel imbalance, with target color, sky level/headroom, stars, and extended structure preserved closely enough that the result remains a valid continuation of the same processing path.

Required input state

What NOVA does

NOVA gates on measured dark-corner sky ratios (image_analyzer._color()'s sky_g_over_r/sky_b_over_r), skipping when the maximum deviation from 1.0 is <= 0.10 to preserve an already-correct SPCC balance, and running when it exceeds 0.10. When it runs, tool_params.compute_background_neutralize() selects the established scale correction. seti_astro.background_neutralize() then calls SASpro's auto_rect_50x50() to find a background patch and background_neutralize_rgb() to correct it, applies a NOVA-specific dark-corner completeness pass (driving all four frame corners toward the darkest channel's median, motivated by a case where the single auto patch read neutral while the corners still carried a cast), and finally blends the whole result back toward the original pixels in signal-bearing regions using a reused luminance mask -- failing closed (skipping the step) if that masking step itself fails. The objective post-check requires the measured dark-corner cast to drop by more than 0.02 with the SNR-proxy retained above 0.85, and can request a stronger retry when residual imbalance stays above 0.15.

Use when

  • A nonlinear RGB image has a measured residual background color cast after the upstream calibration/stretch state is understood.
  • Multiple plausible sky regions agree on the direction of the cast.
  • The image has a trustworthy clean-background reference, or the auto reference has been inspected/validated.
  • A fallback color path left a background pedestal/cast and a later cleanup is explicitly intended, not misrepresented as catalog calibration.

Skip when

  • Monochrome data.
  • The representative background is already neutral within the measured 0.10 engineering tolerance -- SPCC-calibrated color should be preserved, not disturbed, when there is no measured problem.
  • No clean background reference exists and the darkest areas are likely real extended signal (frame-filling nebulae, IFN, galaxy halos).
  • The apparent issue is a spatial gradient or vignetting rather than a global channel bias -- that is a background-extraction problem, not this step's job.
  • The upstream color or stretch failure has not been diagnosed -- this step should not be used to mask a problem that belongs earlier in the pipeline.

Limits

  • This is a channel-balancing transform based on a reference region, not gradient extraction and not physical color calibration. A neutral corner after this step is not proof that stars or nebula have physically correct color, and it does not repair a spatial gradient -- a flatter-looking corner should never be credited as gradient removal without an independent, matched P11 comparison.
  • The run/skip gate uses dark-corner sky ratios specifically because whole-frame color can be dominated by target signal. Ordinary processing keeps the established scale correction; Experiment Mode compares that real scale/pivot branch with SASpro's explicit offset branch and a no-treatment control.
  • As of 2026-09-04, NOVA's wrapper reuses Sky-Selective Green Rebalance's own luminance mask to blend the SASpro-corrected result back toward the original pixels wherever the mask says signal, not background -- so the correction is no longer applied uniformly to the whole frame. A real M42 run recorded in the source: the unmasked correction neutralized the sky (corner G/R 0.673 -> 0.939) but dragged the bright nebula core -- whose true color is not neutral, dominant OIII lands in G -- from G/R 0.914 to a visibly green 1.133; the masked correction restored the core to G/R 0.918 (matching its pre-correction value) while leaving the corner correction (0.941) essentially unchanged. If mask construction itself fails, NOVA skips neutralization entirely rather than falling back to the unmasked correction (fail-closed).
  • The auto-selected background reference is a heuristic, not a semantic "clean sky" detector: it searches for the darkest available patch. Dark does not guarantee uncontaminated -- extended faint nebulosity, IFN, dust, mosaic seams, vignette remnants, and narrowband structure can all occupy the darkest region.
  • Historical run evidence has sometimes credited this step with dramatically improving "gradient" or spatial flatness. That inference is rejected here: those runs also contained major upstream palette/stretch/background differences, and a channel-balancing transform is not a gradient model -- see the linked background extraction article for gradient-specific evidence.

Scientific and aesthetic notes

  • A rigorous comparison must hold constant the exact input FITS, the color-calibration success/failure path, the linked/unlinked stretch state, the narrowband/palette state, crop and mosaic coverage state, and ideally use a fixed validated background reference rectangle if testing transform semantics rather than reference selection.
  • Before treating a background region as valid, check that it is consistently dark across multiple scales, contains no detected stars or compact objects, does not reveal diffuse nebulosity/IFN/dust under a deep stretch, is not near a mosaic seam or vignette edge, and agrees with several other candidate sky regions.
  • Offset and scale are the two real correction semantics exposed by NOVA; pedestal removal remains a separate, unexposed axis.
  • A single historical run reporting a large numeric improvement from one pivot mode is confounded artifact evidence at best -- not statistical confidence, and not proof that mode is universally preferable.

Evidence and measurements

MeasurementsAcceptance criteria
  • Defined background ROI channel ratios (G/R, B/R) before and after, in the exact region used to evaluate the step -- not whole-frame medians.
  • Spatial consistency across several independently selected sky ROIs, not only one corner aggregate.
  • Change map / residual map by channel, showing where the step altered the frame.
  • Sky-level/headroom/clipping change per channel.
  • Matched unsaturated-star color ratios, to check whether a background-only correction distorts calibrated stellar colors.
  • Target-region color ratios, checked separately from background, especially in emission/narrowband fields.
  • A no-op paired comparison on the exact same parent input.
  • Measured dark-corner sky cast drops without stronger corner neutrality being achieved by crushing one channel.
  • Matched unsaturated star colors and target-region color ratios show no unexplained systematic shift.
  • No new opposite-sign cast (e.g., a corrected green cast reappearing as magenta) elsewhere in the frame.
  • The effective mode, selected reference rectangle, and whether the signal-preserving mask activated are recorded -- candidate ID alone is not sufficient evidence.
  • A flatter-looking corner is never accepted as gradient-correction evidence without an independent, matched background-extraction comparison.

Cross-tool matrix

Tool EquivalenceExpected resultEvidence
novaExact replayA measurable reduction in dark-corner sky channel imbalance with target color, sky headroom, and structure preserved.nova-background-neutralize-source, nova-m42-background-neutralize-mask-2026-09-04
sasproSame engine, adapted hostA background-referenced channel correction toward neutral in the selected rectangle.saspro-backgroundneutral-source-p22
sirilFunctional alternativeChannel-equalized background toward neutral gray in the selected region.siril-manual-color-calibration-p22
pixinsightFunctional alternativeChannel-referenced background correction toward neutral in the selected reference.pixinsight-resources-p22

NOVA Python pipeline SASpro-backed wrapper with NOVA completeness pass and signal-preserving mask (2026-09-04)

  1. Confirm the measured dark-corner cast that triggered this step, not just whether the frame looks non-neutral overall.
  2. Treat offset and scale as distinct correction semantics, and surface any candidate artifacts that collapse in a run.
  3. Persist the selected reference rectangle, effective mode, pre/post patch medians, pre/post dark-corner ratios, and whether the signal-preserving mask activated -- candidate ID alone is not sufficient provenance for this step.

Controls and starting ranges

bg_neutral_offset / bg_neutral_scale
the two real Experiment Mode correction semantics
none
true control -- essential for proving correction was needed
0.10 run/skip gate
source-confirmed engineering threshold on dark-corner max(|G/R-1|,|B/R-1|); not a scientifically validated optimum

Mask behavior: Signal-preserving luminance mask built in (2026-09-04); fails closed (skips the step) if mask construction itself fails.

Failure modes

  • Crediting this step with gradient correction because corners look flatter.
  • Treating a large historical improvement from one pivot mode as validated superiority rather than confounded artifact evidence.
  • Assuming the darkest available patch is guaranteed clean sky.

Recovery

  • Revert to the parent input; validate or choose a different background reference; skip if no clean sky exists.

Seti Astro Suite Pro background neutralization backgroundneutral.py; production-installed 1.18.0 core semantics not independently re-verified in this repo

  1. Select a background rectangle that represents true, uncontaminated sky -- the upstream source's own auto-finder searches for darkness, not cleanliness.
  2. Be aware that the inspected upstream core's default `remove_pedestal=True` subtracts each channel's whole-image minimum before the reference patch is even measured, which can alter channel relationships ahead of the correction itself -- this is unresolved/version-bound for the installed NOVA deployment.

Controls and starting ranges

mode
offset (explicit additive branch) or scale (NOVA's stable name for the pivot-around-1 branch)

Mask behavior: No signal-preserving mask at the inspected upstream core; NOVA's wrapper adds one on top.

Failure modes

  • Treating arbitrary non-offset strings as additional correction modes.

Recovery

  • Fall back to a manually validated reference rectangle, or skip.

Siril manual background-reference color calibration manual color calibration; exact version not independently confirmed in this repo

  1. Select a background region that represents true background and avoid crowded or contrasty/stellar/target-dominated regions, per Siril's own documentation.
  2. Treat this as the same process goal -- background-reference channel equalization -- with a different selection/transform implementation than NOVA/SASpro, not a pixel-identical algorithm.

Controls and starting ranges

background selection
manual region selection representing true sky

Mask behavior: Not applicable -- manual region selection is itself the targeting mechanism.

Failure modes

  • Selecting a background region that is dark but not actually clean sky.

Recovery

  • Choose a different background region; compare against a no-op.

PixInsight BackgroundNeutralization BackgroundNeutralization process; not currently dispatched by NOVA for this step

  1. Select a background reference region using the same true-sky discipline as any other background-neutralization tool -- darkest is not automatically cleanest.
  2. Treat this as the same process goal with a different host implementation; this packet did not establish a production NOVA-to-PixInsight dispatch path for this step, so no direct execution equivalence is claimed.

Controls and starting ranges

background reference
manually or ROI-selected region representing true sky

Mask behavior: Not independently confirmed in this repo.

Failure modes

  • Selecting a background reference that is dark but not actually clean sky.

Recovery

  • Choose a different reference region; compare against a no-op.

Validation status

Not yet Jeff-validated. Use this as sourced guidance, not a certification.

Sources

Related evidence

The M66 recipe and Jeff-validation ledger will link here when their static exports are available. Until then, this article remains explicitly unvalidated.