Appearance
A false-colour visualisation takes wavebands your eye cannot see — ultraviolet or infrared — and assigns them to the red, green and blue channels of a normal image, so invisible differences suddenly show up as colour. It is a deliberate mapping, not a true photograph, and the whole skill is choosing which band goes into which channel to reveal what you care about. This guide builds one from three registered bands with a short Python example you can run.
What exactly is "false" about false colour?
In an ordinary photo, red pixels mean the object reflected red light. In a false-colour composite, "red" might mean "reflected strongly at 940 nm infrared." The hues are assigned by you, so a faded brown annotation can come out vivid red simply because it reflects in the infrared band you parked in the red channel. Nothing is faked; the labelling of colour-to-wavelength is just different from human vision.
Which bands should a beginner combine?
Start with the classic infrared false-colour (IRFC) recipe, long used in conservation:
| RGB channel | Band placed there | Why |
|---|---|---|
| Red | Infrared (e.g. 940 nm) | Carbon inks stay dark, some pigments brighten |
| Green | Visible red (~650 nm) | Anchors familiar tones |
| Blue | Visible green (~550 nm) | Completes the composite |
This single mapping separates many pigments that look identical in normal light — ultramarine and azurite, for instance, diverge sharply. There is no universally "correct" recipe; the point of false colour is to try several mappings and keep the one that answers your question.
How do you actually build the composite?
You need three image files, each a single waveband, all registered (aligned pixel-for-pixel). Then merging is trivial:
python
import numpy as np
from PIL import Image
ir = np.array(Image.open("b_940nm.tif").convert("I;16"), dtype=float)
red = np.array(Image.open("b_650nm.tif").convert("I;16"), dtype=float)
grn = np.array(Image.open("b_550nm.tif").convert("I;16"), dtype=float)
def norm(a): # stretch each band to 0-255
lo, hi = np.percentile(a, (2, 98))
return np.clip((a - lo) / (hi - lo) * 255, 0, 255)
rgb = np.dstack([norm(ir), norm(red), norm(grn)]).astype("uint8")
Image.fromarray(rgb).save("false_colour.png")The norm step (a 2-98 percentile stretch) matters: without it one bright band swamps the others and the result looks flat.
Why do my composites have coloured fringes?
Because the bands are not aligned. Each waveband is often captured in a separate exposure; the slightest camera or page movement shifts one band by a pixel or two, and the merge paints colour halos along every edge. In Fiji, use Image > Stacks > Register > StackReg (or Linear Stack Alignment with SIFT) before merging. Misregistration is the number-one beginner failure — fix it first.
How do you do the same thing in Fiji without code?
File > Import > Image Sequenceto load the bands as a stack.- Align with
Linear Stack Alignment with SIFT. Image > Color > Merge Channels, assigning IR to red, visible-red to green, visible-green to blue.Image > Adjust > Brightness/Contrastand apply per-channel.
This gives the same result as the script and lets you preview different band assignments interactively.
When should you reach for PCA instead?
False colour is interpretable and repeatable — anyone can see exactly which three bands you used. When three bands are not enough to separate the signal, principal component analysis combines all the bands statistically to maximise contrast. PCA often reveals fainter traces but the resulting "colours" map to abstract components, not wavelengths, so it is harder to explain. Beginners should master false colour first; it covers a surprising number of cases.
Key Takeaways
- False colour maps invisible bands (UV/IR) onto RGB; the colours are assigned, not real.
- The classic IRFC recipe is IR-to-red, visible-red-to-green, visible-green-to-blue.
- Any of Fiji, ImageJ or a few lines of Python/NumPy can build the composite.
- Always register the bands first — misalignment causes coloured edge fringing.
- Apply a per-band percentile stretch so no single band dominates.
- Try several band assignments; there is no single correct mapping.
- Move to PCA only when three chosen bands cannot separate the feature.
Frequently Asked Questions
What is a false-colour image?
A false-colour image maps wavebands the eye cannot see — such as ultraviolet or infrared — onto the red, green and blue channels of an ordinary picture. It is a visualisation choice, not a photograph of reality, designed to make invisible differences visible.
Which bands go into a classic false-colour composite?
A common heritage recipe puts an infrared band in red, the visible red band in green, and the visible green band in blue (an IRR-based composite). The exact mapping depends on what you are trying to reveal, so try several.
Do I need expensive software to make one?
No. ImageJ/Fiji or a few lines of Python with NumPy and Pillow are enough to merge three registered bands into an RGB image. The hard part is capture and registration, not the colour mapping.
Why do the colours look 'wrong'?
They are supposed to. False colour deliberately assigns hues that do not match what you would see by eye; a pigment that is dull brown in visible light may appear bright red simply because it reflects strongly in the band you placed in the red channel.
What is the most common beginner mistake?
Combining bands that are not registered to each other, which produces coloured fringing along every edge. Align the bands first; misregistration of even one pixel ruins a false-colour composite.
How is false colour different from PCA visualisation?
False colour assigns three chosen real bands to RGB, so it is interpretable and repeatable. PCA combines all bands into statistical components that maximise contrast but are harder to relate to specific wavelengths.