People implementing new image processing algorithms often choose one of two approaches:
1. Use an existing interactive array-processing language, like Matlab.
2. Use C or C++.
Codes in C or C++ can run quickly, but are often difficult to develop.
Codes in an array processing language are easier to develop, run quickly if you use built-in functions, but can run slowly if you need a new array function and you implement it using loops.
I want a development environment that allows me to develop codes as easily as existing array-processing languages do, but with speed that is always within an order of magnitude of codes in C/C++, even if I needed to implement my own new array operators.
So over the past several years I've been working on a package that views an array simply as a function with a domain that is a multi- dimensional rectangular interval of tuples of integers (multi- indices) and a range that could be grey-scale pixel values, color pixel values, gradients, other arrays, ..., whatever you want. So you specify this domain and the function on the domain, in whatever way you wish, and you're done. Of course, at times this function is defined by looking up elements in memory, but many times this isn't necessary. And sometimes you may want to change this function's values at certain points in the domain but not at others (making it mutable), but many times this isn't necessary either.
If you think of arrays as functions then typical higher-order operations, such as map and reduce, have natural analogs on arrays. And slicing and dicing arrays, to implement separable transforms by applying a one-dimensional transform along each coordinate direction, for example, can be seen as function currying, while being careful to keep track of the associated function domains.
I'll give some examples; I encourage the audience to bring their own examples of hard-to-program formulas on arrays to discuss at the end of the talk.
Postdoc Seminar Homepage