Live demo

Upsample a field

The decoder can be queried at any coordinate, so a field or an image encoded from a coarse pixel grid, or from a random few of its pixels, can be decoded on a finer grid.

Checking the server…
What is observed
Input a sample, your own image, or a painted field
The observed pixels and the Daedalus decoding on the finer grid appear here, with a classical interpolation as the baseline.
How it works

One encoding, any resolution

The encoder receives input points and the decoder is asked about new coordinates.
1

Observe a few pixels

A coarse grid of pixels, or a random fraction of them. Every color channel is a scalar function sampled at the observed pixel centers; the channels are encoded on the same partitions.

2

Query new coordinates

The decoder reads an embedding and a coordinate, so it can be asked about points that were never observed: here a grid two to four times finer, or every pixel of the image, each point assigned to its nearest partition.

3

Decode every point

A point's value comes from its own coordinate and the embeddings of its partitions, so the fine grid is fully decoded at all points simultaneously, without any explicit interpolation between the observed pixels.

4

Compare

The slider compares the observed pixels with the decoding. The same pixels upscaled by bicubic interpolation (a coarse grid) or interpolated piecewise-linearly (random pixels) are the baseline: both are scored against the image itself, and the Error view shows their errors side by side.

The backbone was never trained for super-resolution. The finer image is the continuous field the embeddings describe, read out at more points, and between the pixels it follows the smooth functions the backbone was trained on.