Genetic Programming and Procedural Image FiltersFor my S.M. degree, I developed a new kind of interactive genetic programming system for evolving procedural image filters. The main innovation was the introduction of preliminary fitness functions, which rank the filters before the results are shown to the user. The user then makes the final selection of the "breeding population" by viewing the results of the filters running on the output of a video stream in realtime. To create these images I used the SolProgrammingLanguage, a now-dead project to develop an "ideal" language for prodecural image processing, image generation, and graphic design. Sol combines Scheme lisp with ideas from set and category theory to produce interesting results. Real-time performance for image filtering was achieved by on-the-fly translation into C++ and run-time compilation and dynamic (re)linking against the already running C++ front-end. (Do not, as they say, try this at home).
On-the-fly translation, compilation, and dynamic linkage is a great pattern for high performance implementations; I used it while an undergrad to make a fractal generator that you could enter arbitrary formulas (and not just the usual "z^2 + c") into. Of course, for that project the translation part was pretty trivial — just C++ expression into C++ expression. It's a pity that this pattern isn't more standarized: when I last looked into it a decade ago, there was no machine portable way to do dynamic linking of C/C++ code. Great images, BTW. — ThomasColthurst
| ||||||||||||||