Narrowband Normalisation
Workflow card and learning notes for the NarrowbandNormalization process by Bill Blanshan and Mike Cranfield — balancing SII/Ha/OIII intensities without clipping bright cores.
Workflow card and learning notes for the NarrowbandNormalization process by Bill Blanshan and Mike Cranfield.
Quick reference. Process → Color Calibration → NarrowbandNormalization. Real-time preview is on by default. Image must be background-neutralised; star removal strongly recommended.
Workflow at a glance
| Data type | Palette | Lightness | Key controls | Apply when… |
|---|---|---|---|---|
| OSC dual-narrowband (non-linear, starless) | HOO | Ha (default) or Preserve | Blend Mode 1/2/3, OIII Boost, Shadow | Stars removed, BG neutralised, image stretched |
| Mono SHO/HSO (non-linear, starless) | SHO or HSO | Ha or SII | OIII Boost, SII Boost, Shadow, SCNR | Stars removed, BG neutralised, image stretched |
| Mono SHO/HSO (linear) | SHO or HSO | Disabled in linear | Boosts and Shadow only — be gentle | BG neutralised; stretch afterwards (GHS/HT) |
Sensible starting settings
| Control | OSC HOO | Mono SHO (non-linear) | Mono SHO (linear) |
|---|---|---|---|
| Lightness Mode | Ha | Ha | n/a (disabled) |
| Blend Mode (HOO only) | 2 — Natural HOO | — | — |
| OIII Boost | 0 → ease up | 0 → ease up | 0 (very small steps) |
| SII Boost | — | 0 → ease up | 0 (very small steps) |
| Shadow Control | 0 → small + | 0 → small + | 0 (sensitive in linear) |
| Highlight Reduction | 0 | 0 | 0 |
| Brightness | 0 | 0 | 0 |
| SCNR | Off | 0.5–1.0 if green cast | 0 (apply later) |
1. What this process actually does
NarrowbandNormalisation is a process — not a script — that balances the relative intensities of the SII, Ha and OIII channels of a narrowband image without clipping the bright cores. It replaces the older PixelMath approach (also originally by Bill Blanshan) with a real-time, parametric, fully reversible interface.
How the maths works (in plain English)
- It measures the average positive deviation from the median of each channel — a clipping-resistant proxy for “how bright is this channel really”.
- It computes the ratios between channels and applies a Midtones Transfer Function (MTF) curve stretch to the weaker channels until the deviations match.
- Because the maths uses an MTF stretch rather than a linear multiply, weak signal lifts much more than the bright cores, so highlights stay clean.
- Everything is non-destructive while the dialog is open — sliders are reversible, individually resettable, and the whole process is resettable in one click.
Why this matters compared with PixelMath. The old PixelMath expressions were brilliant but blind: you set numbers and hoped. The process gives a real-time preview so you can see the result of every slider movement, which is faster and lets you build intuition for the controls. Mike Cranfield rebuilt the maths under the bonnet so it is more robust than the original PixelMath, particularly with respect to clipping.
2. Installing the process
One-time setup. Once installed, the process appears under Process → Color Calibration → NarrowbandNormalization (some PixInsight builds will also list it under Process → All Processes).
- Open Resources → Updates → Manage Repositories.
- Click Add, paste
https://www.cosmicphotons.com/pi-modules/narrowbandnormalization/, then OK. - Run Resources → Updates → Check for Updates.
- Accept the install, close PixInsight, let the updater run, then reopen.
- Confirm the process exists under Process → Color Calibration → NarrowbandNormalization.
Version requirement. Requires PixInsight 1.8.9-1 or later (signed-script era). The current version is stable on 1.8.9 builds and on 1.9.x Lockhart. Earlier PixInsight installations will refuse to load it.
3. Preconditions before you launch the process
Get these right before opening the dialog and the rest is comparatively easy.
| Step | Why it matters |
|---|---|
| Background neutralised | The maths assumes the channel medians are a sensible reference. A skewed background (e.g. a strong red gradient) will pull the ratios off and cause the boosts to over-correct. |
| Stars removed (StarXTerminator) | The process modifies channel colour. With stars in the frame, star colours go strange — magenta halos, green cores. Run the process on the starless image, then screen the stars back at the end. |
| Image stretched (for full functionality) | Lightness modes are only available on non-linear data. You can run on linear data, but with reduced control. For SHO especially, stretch first. |
| Mild noise reduction (optional) | Shadow lifts will amplify whatever noise is in the weaker channels. A light NoiseXTerminator pass first can pay back later. |
4. The interface explained
Real-time preview
Top of the dialog. Toggle on first — without it the rest of the controls are guesswork. The preview palette is auto-selected from the workflow you choose, but you can override it.
Palette selector
| Palette | Maps to | Use for |
|---|---|---|
| HOO | R = Ha, G = synthetic, B = OIII | OSC dual-narrowband (one-shot colour, dual-band filter) |
| SHO | R = SII, G = Ha, B = OIII (Hubble) | Mono three-channel narrowband, Hubble palette |
| HSO | R = Ha, G = SII, B = OIII | Alternative Hubble-style mapping with Ha as red |
| Custom | User-defined | Anything outside the standard palettes |
Lightness modes
Lightness mode controls which channel (or combination) drives the perceived brightness of the final image. Available on non-linear data only.
| Mode | Behaviour | When to use |
|---|---|---|
| Off | Uses the normalised image’s own luminance. | When the normalised result already looks balanced and you want no further lightness manipulation. |
| Preserve | Uses the original image’s luminance. | When the colour balance has shifted but you want the structural detail to look exactly as it did before. |
| Ha | Uses Ha as the lightness channel. | Default starting point. Brings out nebula structure cleanly because Ha typically has the highest SNR. |
| SII | Uses SII as the lightness channel. | Sometimes cleaner than Ha for very SII-bright targets. Worth trying side by side. |
| OIII | Uses OIII as the lightness channel. | Rarely useful in practice — OIII is usually the noisiest channel. Try, but be prepared to switch back. |
Blend modes (HOO only — synthetic green)
OSC dual-band data has no real green channel, so the process synthesises one. The blend mode controls how it does that — this is the single biggest aesthetic decision in HOO processing.
| Mode | Recipe | Visual character |
|---|---|---|
| 1 | Blend of Ha + normalised OIII | Hubble-style look — leans towards golden/teal contrast. |
| 2 | Blend of original OIII + normalised OIII | Natural HOO look — most “honest” rendering of the data. |
| 3 | Stronger OIII emphasis | Pushes blue/teal harder — useful when OIII is faint and you want to hero it. |
Channel boosts
- OIII Boost — lifts OIII visibility further after normalisation. Useful when the channel is genuinely weak. Move in small increments.
- SII Boost — SHO/HSO only. Lifts SII visibility. Often needed because SII is typically the weakest channel in mono SHO.
- Shadow Control — reveals faint signal in shadows. Pushed too far it introduces a blue cast (because OIII shadow noise lifts faster than the others). Use sparingly.
- Highlight Reduction — protects bright regions from clipping. Most images don’t need it; reach for it if cores are blowing out.
- Brightness — global curve stretch applied after normalisation. Convenient but you can equally do this with HistogramTransformation afterwards.
SCNR (built in)
Range 0–1, where 0 is off and 1 is full removal of the green cast. Useful for SHO/HSO where Ha is mapped to green and dominates. For HOO with synthetic green you usually leave this off.
5. Workflow A — OSC dual-narrowband (HOO)
For ASIAir / Seestar / dual-band filter data with one-shot colour cameras. Assumes you have already extracted the Ha and OIII channels and combined them into an HOO RGB image, with stars removed and background neutralised.
- Open the non-linear, starless HOO image. Run BackgroundNeutralization first if you haven’t already.
- Process → Color Calibration → NarrowbandNormalization. Toggle on Real-time preview.
- Set Palette to HOO.
- Set Lightness Mode to Ha (this is the safest starting point).
- Cycle through Blend Modes 1, 2, 3 watching the preview. Pick whichever fits the target — Mode 2 is the most neutral default.
- Adjust OIII Boost in small increments. Stop the moment OIII regions look how you want them; don’t chase it.
- Use Shadow Control sparingly. If you see blue creep into the background, back it off.
- Apply.
- Continue with curves, saturation, masks, sharpening, then star reintegration.
Editorial note on HOO blend modes. The transcripts disagree slightly on which blend mode to pick. Mode 2 (Natural HOO) is the most defensible starting point because it preserves the OIII data character. Mode 1 (Hubble-style) is more “Instagram-friendly” but leans towards a stylised look that some find oversaturated. Try all three and pick by eye — there is no objectively correct choice.
6. Workflow B — Mono SHO / HSO (non-linear)
For mono camera narrowband data with separate SII, Ha and OIII subs, combined into an SHO or HSO RGB image, stretched, with stars removed.
- Open the stretched, starless SHO/HSO image. Confirm BackgroundNeutralization has run.
- Open NarrowbandNormalization → Real-time preview on.
- Set Palette to SHO (Hubble) or HSO depending on your channel mapping.
- Set Lightness Mode to Ha. If Ha is unusually noisy, try SII instead.
- Adjust OIII Boost first, then SII Boost. Most SHO images need both.
- Use Shadow Control to reveal faint structures, watching for a blue cast in the background.
- Set SCNR somewhere between 0.5 and 1.0 if a green cast appears (Ha-as-green can dominate before normalisation lands).
- Apply.
Saturation comes after, not before. It is tempting to bump saturation while you have the preview open. Don’t. Apply NarrowbandNormalization first, then do saturation as a separate Curves or ColorSaturation step. The normalisation maths is calibrated for the input colour space, and pre-saturating the image distorts the channel ratios it is trying to balance.
7. Workflow C — Linear SHO / HSO
Less common, but useful when you want to preserve linear processing flexibility (e.g. you plan to inject Ha as luminance manually after stretching).
- Confirm BackgroundNeutralization has run on the linear image.
- Optionally remove stars on the linear data.
- Use linked ScreenTransferFunction so the preview reflects the stretched look.
- Open NarrowbandNormalization. Note: lightness modes are disabled in linear mode.
- Move boosts and Shadow Control in much smaller increments — controls are far more sensitive on linear data.
- Apply.
- Stretch the result with GeneralizedHyperbolicStretch (GHS) or HistogramTransformation.
- Optionally inject Ha as luminance via LRGBCombination.
Why bother with linear? Most users get equivalent results from the non-linear workflow with less risk. The linear workflow earns its keep when you want full control over the stretch curve afterwards (e.g. very dim targets where you need GHS to handle the shadows precisely), or when you want to keep all your tools — deconvolution, NoiseX, BlurX — running in their preferred linear space before you commit to colour.
8. Post-processing after normalisation
NarrowbandNormalisation produces a strong base — the rule of thumb from the videos is that you are 80–90 percent there after Apply. The remaining 10–20 percent is standard finishing, in roughly this order:
- ColorSaturation or Curves saturation pass — gentle global lift first, then selective.
- Build colour masks (e.g. yellow, blue) and run Curves through them for selective contrast.
- NoiseXTerminator if shadow lifts have made noise visible.
- BlurXTerminator (Sharpen mode if not already done) on the colour image.
- Star reintegration (PixelMath screen of the original star image, or ScreenStars).
- Final HistogramTransformation pass for black point.
9. Tool reference — menu locations
| Tool | Where to find it | Purpose in this pipeline |
|---|---|---|
| NarrowbandNormalization | Process → Color Calibration → NarrowbandNormalization | The tool itself. SII/Ha/OIII intensity equalisation. |
| BackgroundNeutralization | Process → Color Calibration → BackgroundNeutralization | Required precondition — sets channel medians sensibly. |
| StarXTerminator | Process → All Processes → StarXTerminator | Removes stars before normalisation; keeps star colours from going strange. |
| ScreenTransferFunction | Process → IntensityTransformations → ScreenTransferFunction | Linked STF for previewing linear images while normalising. |
| HistogramTransformation | Process → IntensityTransformations → HistogramTransformation | Stretching after linear-mode normalisation; final black point. |
| GeneralizedHyperbolicStretch (GHS) | Process → IntensityTransformations → GeneralizedHyperbolicStretch | Preferred stretch for difficult linear data after normalisation. |
| SCNR (standalone) | Process → NoiseReduction → SCNR | Standalone version of the green-removal control built into the process. |
| LRGBCombination | Process → ChannelManagement → LRGBCombination | Manual Ha-as-luminance injection after linear workflow. |
| CurvesTransformation | Process → IntensityTransformations → CurvesTransformation | Post-normalisation contrast, saturation, channel-by-channel tweaks. |
| ColorMask (Cosmic Photons) | Process → MaskGeneration → ColorMask | Selective colour masks for finishing — same author family as NBN. |
| NoiseXTerminator | Process → All Processes → NoiseXTerminator | Cleans up shadow noise revealed by Shadow Control lifts. |
| BlurXTerminator | Process → All Processes → BlurXTerminator | Sharpening on the final colour image (Sharpen mode). |
10. Troubleshooting matrix
| Symptom | Likely cause | Fix |
|---|---|---|
| Process won’t install or doesn’t appear in menu after restart | PixInsight version too old, or repository URL typo | Confirm version 1.8.9-1 or later. Re-add repository, ensure trailing slash on URL, run Check for Updates again. |
| Lightness mode controls are greyed out | Image is linear | Stretch the image first (GHS or HT), or accept reduced control and use linear mode. |
| Stars look magenta or have green cores after Apply | Stars were not removed before running the process | Undo. Run StarXTerminator, run normalisation on the starless version, then screen stars back at the end. |
| Background develops a strong blue cast | Shadow Control pushed too high, lifting OIII noise | Reduce Shadow Control. Re-check BackgroundNeutralization ran cleanly first. |
| Bright cores clip after Apply | Brightness or boosts pushed past where the MTF curve can compensate | Reduce Brightness/boosts. Try Highlight Reduction. Reset and ease in more slowly. |
| Colours look flat after normalisation | Normal — saturation comes after this stage | Apply, then run ColorSaturation or a Curves saturation pass. Don’t pre-saturate. |
| Strong green cast after SHO normalisation | Ha-mapped-to-green dominance | Increase the built-in SCNR slider towards 1.0, or apply standalone SCNR after. |
| OIII lift looks plausible but the image looks “wrong” | Wrong palette selected for the channel mapping | Confirm SHO vs HSO matches how you actually combined channels. |
| Linear mode gives wildly different results than expected | Controls are far more sensitive on linear data | Reset, then move sliders by tenths of a unit rather than full units. |
| Real-time preview not updating | Toggle off, large image, or stale preview window | Toggle real-time preview off and on. Check the preview window is current. |
11. Per-session checklist
Tick through this when processing. Mirrors the workflows above without the explanation.
Before you open the process
- Image is calibrated, integrated, gradient-corrected.
- BackgroundNeutralization has run.
- Stars removed (StarXTerminator). Original saved separately for re-screening later.
- Optional: light NoiseXTerminator pass on weak channel.
- Image stretched (for non-linear workflow). Linear users: STF linked.
Inside the process — first pass
- Real-time preview ON.
- Palette set correctly: HOO / SHO / HSO.
- Lightness mode set: Ha (default) or Preserve. Try SII if Ha noisy.
- HOO only: Blend Mode chosen (1 / 2 / 3) by visual taste.
- Boosts started at 0, eased up only as needed.
- Shadow Control nudged up only if faint signal needs revealing.
- SCNR (SHO/HSO only) set if green cast persists.
- Reset individual sliders if they over-corrected.
After Apply
- Saturation pass (ColorSaturation or Curves).
- Colour masks for selective contrast adjustments.
- NoiseXTerminator if shadow lifts revealed noise.
- BlurXTerminator (Sharpen mode) on colour image.
- Stars screened back in.
- Final HistogramTransformation pass for black point and a final crop.
12. Sources
This card is built from three video walkthroughs (Cuiv the Lazy Geek, Bill Blanshan’s in-depth tutorial, and an “Ultimate Normalisation Tool” walkthrough) cross-referenced against the Cosmic Photons repository pages and the published PixInsight forum thread, to reconcile minor inconsistencies between the videos.
- Bill Blanshan & Mike Cranfield — repository
- Cosmic Photons home
- PixInsight Forum announcement: official PixInsight Users Community thread “New Process: NarrowbandNormalization”.