In practice, our suggestions are closely related: for each point, evaluate some function of the neighbouring points. However, there's several ways of interpreting this including
* Cellular automata (some analogue of Conway's "Life").
* 2D spatial filtering (lots of maths with integrals and sigmas) ** .
* 2D spatial filtering (a heuristic like "draw a square around the current point").
** Frankly, the amount of high-level maths in filter design, even 1D filters such as are heavily used in audio signal processing, is intimidating. I never had a lecturer who was brave enough to say "all it means is that you take /this/ fraction of the current sample, /this/ much of the preceding sample, and so on".
Obligatory XKCD:
https://xkcd.com/2614The good news is that you can skip the maths, and apply exactly the same approach in 2D, i.e. "you take /this/ fraction of the current sample, /this/ much of each of its immediate neighbours, and so on". Although I think it's fair to add that from a programming POV it's easy to say "look at a square around the current point", while a mathematician would far prefer that we looked at a circle.
MarkMLl