|
Software Last modified: 22 Jan 09 |
| I was involved in the development of quite a few programs over the years. Some of them are listed below (especially those that have a GUI). (I did a lot of programming on the Commodore 64/128 in the 1980s. Unfortunately, I don't have screenshots any more.)
EMG-View This is a tool for loading, saving, viewing, and editing EMG signals and EMG signal decomposition results. I wrote this program over the years as a part of my doctoral research.
EMG-Belief EMG-Belief is a tool for EMG signal decomposition. It has only a simple GUI, but the algorithm is strong (it's a loopy belief propagation algorithm on a factor graph). I wrote this program during my doctoral studies.
factorgraph This is a Java package for implementing message-passing algorithms that are based on factor graphs. (For an introduction to factor graphs refer to Andi Loeliger's nice tutorial paper.) Each graph has a certain number of nodes. So one basic class is called Node. The package allows to define the graph topology by connecting nodes. Then, every node has a node function. Therefore, the second basic class is called NodeFunction. There are many subclasses that implement the specific node functions for different message types (see below). The reason for having separate classes for nodes and node function is that we wanted to separate the topology of the graph from the node functions. In this way we can easily change node functions without touching the topology of the graph. Nodes compute messages that are sent out of the nodes along the edges of the graph. The order of the computation has to be defined. This can be done by using the class Schedule. In order to define such a schedule, the user assigns a unique number to each port first. For that he or she uses the class Port. Then the schedule is just a sequence of port numbers. Below is a code snipped that shows how a very simple graph (just one add node with its terminal nodes) as well as an update schedule is defined.
The messages that would ideally be sent along the edges of the graph are scaled continuous probability density functions. Since general continuous functions can not be stored in memory, they have to be represented/approximated in some way. For example, the continuous functions can be approximated by joint Gaussian density functions. In this case one has to send, for example, only a mean vector and a covariance matrix. Alternative forms to represent continuous messages are: discrete messages, list of samples/weights, and others. The class Message deals with the storing and processing of these various kinds of messages. The Java package is very flexible in that it can basically deal with any type of message format. I have used different forms of discrete, Gaussian, and joint-Gaussian messages. But other types are also possible. Each node function "knows" what message types it can handle. The package automatically checks whether the message that is sent to a node is of the right format. Here is another point that I would like to explain. When designing factor graphs for signal processing applications, there are often many identical slices in the factor graph, one for each discrete time index of the signal to be processed. That's why there is a base class called FgOneTimeSlotAbstract. So the user has to implement only one section of the full graph (for one time index) and can then instantiate an object of this class for each time index. The single sections are finally connected to make up the full graph. The Java package factorgraph is a very general package, which provides building blocks that algorithm designers can use without having to derive every detail by themselves first (modular assembly principle). This helps researchers and developers to implement various signal processing or machine learning algorithms in a more or less straightforward way. EMG-Belief (see above) uses this package. I have also implemented a BSS (blind source separation) algorithm that is based on the factorgraph package. So in summary, the factorgraph package is an object oriented, modular, open, reusable, and cross-platform toolbox. It facilitates the implementation of graphs and message-passing algorithms that run on such graphs. Its building blocks can simply be combined, which allows rapid prototyping. In addition, new building blocks can be easily included.
ImageJ Plugins My students and I have developed some nice ImageJ plugins for image processing. Here are screenshots of just a few results.
E-Voting System This e-voting system was implemented by a student that Daniel Hösli and I hired for our newly founded association VMITET.
Dynamic Online Survey System This dynamic online survey system was developed by Daniel Hösli (who did a great deal of the programming) and me during our MBA thesis. We used it for a survey among the scientific staff of our department at ETH Zürich. It worked great and people really liked it. It's a dynamic survey system since the questions that someone gets depend on previous answers.
Mental Arithmetic Trainer (MAT) This is a little program for training mental arithmetic, which I wrote just for fun. It is very flexible and can easily be extended to offer more complicated problems. I have already given this program to a primary school teacher for her school kids.
mrFindBorders mrFindBorders is a program to semi-automatically find the boundaries between visual areas in primary visual cortex. The program works with flattened representations (2D images) of the folded cortical surface. After the boundaries have been identified (using template deformation and matching), they can be projected back to 3D, where the visual areas can be marked with different colors. I wrote mrFindBorders as a part of my diploma thesis at Stanford University.
MELKAISER MELKAISER is a program that allows the creation of decision trees by human experts. The decision trees are supposed to reflect useful relationships found in the data. The acronym MELKAISER stands for “Mitsubishi Electric Corporation Knowledge Acquisition Inductive System using Statistical Data, Examples, and Restriction Rules”. In other words, MELKAISER is a system that accepts information in the form of correlation tables, examples, and rules. From this input information, the program creates a decision tree using an induction algorithm. I wrote this program during an internship at Mitsubishi Electric in Japan.
|