Group Members


Project Description

Our project is based on current research in which we are working on probabilistic segmentation on images of horizontal cells. More information on the function of horizontal cells may be found here.

The method of image segmentation we are using is based on a Markov Random Walk where each pixel is weighted by its intensity value and is connected to 10 other pixels (8 neighbors, itself, and a restart pixel). The steady state of a random walk can be formulated as an eigenvector problem. The images we are working on are 768x512 pixels, this alone would give us a 390,000 transition matrix. However, one method we devised to improve the image segmentation requires memory of the previous state of the random walk which increases the transition matrix to a 3.5 million square sparse non-symmetric matrix.

Our project for this course focuses on the eigenvector calculation needed for this segmentation. Our images have anywhere from 1-6 cells, and each one needs to be segmented separately, thus the need for very quick calculations. Our current implementation in matlab takes approximately 3hrs (and a lot of memory) to segment a single cell. We would like to implement a sparse eigenvector calculation in MPI that can handle matrices of such a large magnitude in a matter of minutes (hopefully seconds). Although we are dealing with extremely large matrices, they are also very sparse (0.00003% are non-zero elements) and we plan to take advantage of this in our implementation.

We plan to run our parallel implementation on the bio-imaging cluster which consists of 16 machines, each with two dual-core processors (approximately 64 nodes).

Progress Report

Our progress so far focused on two items - the numerical methods we want to use to solve our eigenvector problem, and finding the package we can use to implement the solution. The numerical method we have decided upon is to use an iterative technique, GMRES, to find the largest eigenvector of our matrix. We know that the eigenvalue we are looking for is 1, so we can convert the eigenvector computation to:

Ax =x
Ax- x = 0
(A-I)x = 0

Given the amount of packages in the public domain for solving systems of linear equations, we think this is a better approach. However, since GMRES is an iterative technique, and we are solving for the null vector, GMRES converges on 0. To get the GMRES method to converge on the correct eigenvector, we do:

[1] + A'x = 0
A'x = [1]

Where [1] is a vector with the restart location set to 1. We can do this since we know the restart location will be one (or nearly one). In A', we just remove a row and column that we know will be zero in the final eigenvector. In matlab, this method gets GMRES to properly converge on the correct eigenvector. We are also considering writing a power method approach to compare the straight eigenvector calculation with an iterative method. The two packages we are planning to use are OpenCV and Hypre. OpenCV is an image processing package for C++, which we need since our transition matrix is formed from an image. The other major package we are using, Hypre, is a C library built for solving sparse matrix equations. This package has many solvers, including GMRES. We have not decided yet on how the transition matrix will be constructed/organized. With Hypre, we can choose between a standard Compressed Row Storage or a Hypre specific Stencil/Grid storage.

Project Conclusion

We've finished the implementation and now have a completely working system on the Bioimage Informatics cluster which can segment a cell in as little as 20 seconds (using 96 cpus).

This system will soon be fully integrated into Bisque (the image database) and put to use by biologists studying horizontal cells.

If you'd like to know more, our presentation slides can be found here (in powerpoint), and our final report can be found here (pdf). If you are interested in the source code or have further questions please email me (nlarusso_@_cs.ucsb.edu - remove underscores).