Image streams are just as efficient as the naked pointers, yet they are safe. In a situation where you need to pass an image object as a return value of a function, you should return a lazy image instead. The full image would be rolled out only when and where it is needed. Image filtration . They are very optimized, and very fast.
All filtration is done in-place.
It seems that it takes noticeably more time to read an image than to filter it. A general, non-separable 2D filtration is supported as well. The probability of pixel's survival depends on how much it sticks out of its neighborhood. Lookup table substitutions are powerful and fast. Fractal clouds generator of plasma fractals is a bonus.