/eigenmap_gpu

GPU accelerated vessel segmentation using Laplacian eigenmaps

Primary LanguageCudaOtherNOASSERTION

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.