Image processing can be taught very effectively by complementing the basic lectures with computer laboratories where the participants can actively process and manipulate images. This offering is made even more attractive by allowing the students to develop their own image processing code within a reasonable time frame. The learning of the mathematical concepts of the image processing is facilitated with hands-on experimentation. The first level of involvement is to apply the algorithms to real images and to see the results. The second is to take part in the programming itself and to truly experience how formulas translate into algorithms.
ImageJ is an existing public-domain software package, for a menu-driven, convivial interaction with the full functionality of an image processing application. It is the Java offspring of the well-known NIH Image software. As a result, it can run on any platform with a Java Virtual Machine (Mac, Windows, Linux, etc, ...). The application and the source are freely available. The author, Wayne Rasband, is with the National Institutes of Health, Bethesda, Maryland, USA. ImageJ has an open architecture that allows extensibility by addition of Java plugins; these can be compiled and loaded dynamically. We take advantage of this functionality for adding our educational plugins.
A "programmer-friendly" software layer to simplify and robustify the access to pixels data without having to worry about the technicalities and interfacing with ImageJ.
Full information on ImageAccess.
We have developed a class, named ImageAccess, that provides a high-level and foolproof way of accessing the pixels of an image in ImageJ. Conceptually, there is a clear advantage in separating the image-processing code (algorithm) from the access of the pixels, since the latter is a technical part that depends on the language, the platform, or the frame grabber.
The students who take the image-processing laboratories do not necessarily know Java. Hence, we always provide them with an example of a Java method that does an operation that is very similar to the assignment. In particular, we make sure that the example uses the same type of syntax (loops, assignments, mathematical functions) as required for the solution. In addition, we do structure their code by providing empty templates that need to be filled in. This means that a good portion of the assignment can usually be implemented by simple modifications of the example.
D. Sage, M. Unser, "Teaching Image-Processing Programming in Java," IEEE Signal Processing Magazine, vol. 20, no. 6, pp. 43-52, November 2003.