// project ยท computer vision

Lunar Shadow Imaging

Some craters near the Moon's poles haven't seen sunlight in billions of years. This project teaches a neural network to see inside them anyway.

// the 10-second version

Take a photo in a pitch-black room and you get grainy speckles. I built an AI that looks at that kind of grainy mess from a Moon crater and works out what the crater really looks like.

// why it's cool

The darkest places matter most

These craters are called permanently shadowed regions (PSRs). They stay around −200 °C, cold enough to trap water ice, which future missions could turn into drinking water, oxygen and rocket fuel.

Orbiters like Chandrayaan-2 can catch the faint light bouncing in off nearby crater walls, but it's so weak that the photos come out as mostly noise.

// how it works

Five stages

  1. Draw fake cratersGenerate realistic sunlit crater scenes from scratch: the "answer key".
  2. Make them darkDarken each one the way a real camera would in near-total darkness, noise and all.
  3. Pair them upDark version in, bright version out, thousands of times.
  4. Train a U-NetThe network learns to undo the darkness while keeping real detail.
  5. Test fairlyScore it on craters it has never seen.

// under the hood

The key ideas

Realistic darkness. The fake dark images copy three real camera problems: light arriving randomly when there's very little of it (shot noise), electronic hiss from the sensor (read noise), and dim detail getting rounded down to zero (quantisation).

The U-Net. A neural network shaped like a U. One side shrinks the image to understand the big picture; the other rebuilds it at full size. Shortcuts across the middle keep edges sharp. This one has about 1.9 million parameters, small enough to train on a free cloud GPU.

The scores. PSNR measures how close each pixel is to the truth (higher is better). SSIM measures whether shapes and textures match, from 0 to 1.

// results

From noise to craters

+16.4 dB
PSNR, from 4.8 dB to 21.2 dB
0.06 → 0.66
SSIM, from no structure to clearly matching shapes
150 steps
of training on one GPU

Measured on held-out simulated images. Longer training (2,000 steps) recovers crater rims and individual boulders.

// the tricky part

No answer key exists

To teach a network to brighten photos, you normally show it the same scene in good light. A permanently shadowed crater has never been in good light, so that photo doesn't exist anywhere.

The fix was to make the training data: bright craters, darkened with real camera physics, so every example comes with a perfect answer. Real Chandrayaan-2 images can be dropped in later without changing the rest of the pipeline.

  • python
  • pytorch
  • opencv
  • numpy