GPU accelerated vessel segmentation using Laplacian eigenmaps NOTE The codebase has not been maintained since June 2014. Use it with your own risk. **Note that it does not work with MAGMA version 1.5.0 or later. Please use MAGMA version 1.4.1**. SYNOPSIS Laplacian eigenmap is an image segmentation algorithm that began to gain traction in recent years. It involves a generalized eigenvalue problem which extracts high-level features from local neighborhood information. Unfortunately, it is computationally costly to compute eigenvalues of a large linear systems. We make use of general-purpose GPUs to accelerate the segmentation process. DOCUMENTATION See https://hyunsu-cho.io/eigenmap_gpu.html. DEPENDENCIES 1. MAT file I/O Library --> See Step 1 of HOW TO COMPILE http://matio.sourceforge.net/ 2. MAGMA (Matrix Algebra on GPU and Multicore Architectures) http://icl.cs.utk.edu/magma/index.html **Make sure to use MAGMA version 1.4.1**. 3. ATLAS (Automatically Tuned Linear Algebra Software) http://math-atlas.sourceforge.net/ HOW TO COMPILE 1. Run ./get_matio.sh to automatically download and install the MAT file I/O Library. This library is required to read and write in MATLAB's binary MAT file format. 2. Open the Makefile and edit the system paths (lines 13-16) as necessary. 3. Run make. HOW TO RUN To make things easier, we rely on MATLAB's image processing facilities when it comes to pre-/post-processing. Hence, do the following steps: 1. Put the input image in Test_Data directory. The image must have jpg extension. 2. Launch MATLAB in graphical mode. 3. Run one of the bootstrap scripts with the name of the image. Each script has a suffix that represents a distinct scenario: - bootstrap_c(...) : compute Laplacian eigenmap using one CPU thread - bootstrap_omp(...) : use many CPU threads - bootstrap_gpu(...) : use one GPU device instead - bootstrap_vanilla(...) : use one CPU thread; really slow because the entire script is written in MATLAB's scripting language To get an intuitive feeling of how the bootstrap scripts look like, take a quick look at test.m. More precisely, bootstrap calls share the following form: bootstrap_x('image_name', [param1], [param2], [# of Lanczos iterations]) For instance, if the input image is example.jpg, the parameters are 10 and 50, and the number of Lanczos iterations is 75, use: bootstrap_x('example', 10, 50, 75); 4. The segmented images pop up as figures and at the same time are saved in results directory. FUNCTION SUMMARY - pairweight: computes the weight matrix. - laplacian: computes the Laplacian matrix from the weight matrix. - eigs: computes a few smallest eigenvalues of the Laplacian matrix; uses general symmetric eigenvalue solver. - lanczos: computes a few smallest eigenvalues of the Laplacian matrix; uses the Lanczos method.