Skip to content
Multispectral & Scientific Imaging

To recover text from a palimpsest, image the leaf under a full set of wavebands from 365 nm ultraviolet to 940 nm near-infrared, register the bands to sub-pixel accuracy, then run statistical separation (PCA or ICA) to pull the erased undertext away from the overwriting and the parchment. The erased layer survives as iron residue and altered parchment, so the goal is to find the waveband and the statistical combination where that residue contrasts most strongly. Below is the end-to-end workflow I use on Greek and Latin codices.

Why is undertext recoverable at all?

When a scribe reused parchment, scraping with a knife and washing with milk or pumice removed the visible film of ink but not the chemistry it left behind. Iron-gall ink corrodes into the collagen, and the disturbed surface fluoresces differently from untouched parchment. That difference is invisible to the eye but measurable across wavelengths — which is exactly what a spectral stack records.

What does the capture workflow look like?

Treat capture as a controlled experiment:

  1. Mount the leaf flat on a non-reflective copy stand; never force fragile parchment flat — use weighted strips at the margins only.
  2. Capture each band with a monochrome sensor, one LED waveband at a time, keeping geometry identical.
  3. Bracket exposures for UV — fluorescence is dim and needs longer integration.
  4. Shoot flat-field and dark frames per session for calibration.
  5. Photograph a spectral target in the same setup for reflectance normalisation.

A typical 12-band set runs 365, 420, 450, 505, 535, 595, 625, 660, 730, 780, 850 and 940 nm.

How do I process the stack to reveal the undertext?

After flat-fielding and registration, statistical separation does the heavy lifting:

python
import numpy as np
from skimage import io
from sklearn.decomposition import FastICA

cube = np.stack([io.imread(f).astype(np.float32) for f in band_files], -1)
H, W, B = cube.shape
flat = cube.reshape(-1, B)
flat = (flat - flat.mean(0)) / (flat.std(0) + 1e-6)   # standardise bands

ica = FastICA(n_components=B, random_state=0, max_iter=800)
src = ica.fit_transform(flat).reshape(H, W, B)

# inspect every independent component; undertext often isolates in one
for i in range(B):
    comp = src[..., i]
    comp = 255 * (comp - comp.min()) / (comp.ptp() + 1e-6)
    io.imsave(f"ica_{i:02d}.png", comp.astype("uint8"))

Where PCA maximises variance, ICA maximises statistical independence and frequently separates a faint undertext layer that PCA blends into PC2/PC3. Review every component by eye.

Which band combinations work best as false colour?

A widely used recipe for iron-gall undertext maps a UV fluorescence band, a visible band and an infrared band into the three display channels:

Display channelSource bandEffect
Red940 nm NIRSuppresses overtext that fades in IR
Green535 nmAnchors page geometry
Blue365 nm UV fluorescenceLifts erased iron-stained strokes

Adjust which band feeds each channel until the lower text reads most cleanly; there is no single correct mapping.

What are the failure modes to watch for?

  • Cockling and movement between bands — produces fringes that masquerade as strokes.
  • Show-through from the verso confused with undertext — check both sides and the gutter direction.
  • Over-processing — aggressive stretching can manufacture text that is not there.
  • Mould and consolidants that fluoresce strongly and mask the undertext.

When in doubt, return to the raw bands and ask which physical feature each pixel represents.

How do I make the recovery defensible?

Recovery is a claim about evidence, so it must be reproducible. Archive the 16-bit registered band stack, record the full processing chain as paradata, and present the false-colour image alongside the bands that produced it. Then have a palaeographer transcribe independently. A reading that only one pipeline on one operator's screen can produce is not yet a result.

Key Takeaways

  • Undertext survives as iron residue and altered parchment, recoverable across UV-to-NIR bands.
  • A 12-band stack from 365 to 940 nm covers most iron-gall palimpsests.
  • ICA often isolates the erased layer better than PCA; inspect every component.
  • UV fluorescence (365 nm) is the single most productive band for European undertext.
  • False-colour mapping is interpretive — try several before settling.
  • Archive the raw stack and paradata, and verify readings with a palaeographer.

Frequently Asked Questions

What is a palimpsest?

A palimpsest is a manuscript leaf whose original (lower) text was scraped or washed off and overwritten with a new (upper) text. Traces of the erased writing usually survive in the parchment and can be imaged.

Which technique recovers palimpsest text best?

Multispectral imaging combined with statistical band separation (PCA or ICA) recovers most undertext. UV fluorescence at 365 nm is the single most productive band for iron-gall undertext on parchment.

Can I read a palimpsest without any special equipment?

Rarely. A converted full-spectrum camera with a 365 nm UV lamp and a few filters can reveal a surprising amount, but reliable recovery of badly washed text needs a calibrated multispectral stack.

Why does the undertext show up in ultraviolet?

Scraping leaves iron residues and altered parchment chemistry in the original strokes. Under UV the surrounding parchment fluoresces while the iron-stained strokes absorb, producing dark text on a bright ground.

Do I need to flatten and align the bands?

Yes. Sub-pixel registration is essential because PCA and band ratios amplify any misalignment into colour fringes that mimic or bury real strokes.

How do I prove a recovered reading is genuine?

Publish the calibrated band stack, document every processing step as paradata, and have palaeographers verify the reading independently. A reproducible pipeline distinguishes evidence from artefact.