CSE554: Geometric Computing for Biomedicine (Fall 2015)

Advances in biomedicine have been powered by the continued enhancement of data acquisition techniques. Many of these techniques produce image data in two or three dimensions, such as microscopy, MRI, CT, ultrasound, cryo-EM, to name a few. To visualize these image data, and further to perform quantitative analysis, it is often useful to extract geometric forms, such as curves and surfaces, from the images. Not only do they offer intuitive means for visual presentation, geometric forms also enable efficient and robust computational algorithms for data understanding and processing.

This course covers some of the most commonly used geometric algorithms in image analysis, including morphology analysis, skeletonization, surface reconstruction, mesh processing, model deformation and registration.

Lectures, labs, and project: The course is offered in two sessions each week. The first session (on Monday) is for lectures, and the second (on Wednesday) is for working on lab modules. All lab modules will be graded during the lab time. The final grade is based on the lab modules (75%) and the course project (25%), which is turned in and presented at the end of the semester.

Time and location: The lectures are offered on Mondays 1-2:30pm in Cupples II 200, and the labs take place on Wednesdays 1-2:30pm in Whitaker 130 (CEC lab).

Instructor and TA: The course is taught by Dr. Tao Ju (taoju at cse.wustl.edu). Feel free to contact him or schedule an appointment by email. If you are a biomedical researcher and would like to get involved in this course (e.g., looking for students to work on an image analysis problem, or interested in giving a guest lecture about your work), you are more than welcome to contact the instructor. Our TAs are Yajie Yan (yajieyan at wustl.edu) and Zhiyang Huang (zhiyang.huang at wustl.edu).


The lecture slides are posted here shortly before the lecturing session. There is no required textbooks, although there are numerous books and articles on related topics that you can find online. We encourage you to check them out if you want to dig deeper than the lecture slides.

Lab modules
The lab modules are designed for prototyping the algorithms and to be done individually. In many of the modules, you will be asked to start working on a 2D version of the algorithm that is easy to design and debug, before advancing to 3D. Test data (both 2D images and 3D volumes) will be provided that are typically small in size but representative of the characteristics of the actual data. Labs are due and graded in Thursday lab sessions.

The programming language of the labs is Mathematica, a math package that offers many great features for prototyping (e.g., easy coding, symbolic evaluation, interactive graphics, automatic formatting, etc.). It is perfectly fine if you have never used it before; we will teach you how in Module 0. All modules and solutions, except for Module 0, will be posted on the resource page on Piazza

  • Module 0: Programming in Mathematica (Notebook) (Due: Sept 9 in class).
  • Module 1: Binary pictures (Posted on Piazza) (Due: Sept 23 in class)
  • Module 2: Thinning (Posted on Piazza) (Due: Oct 7 in class)
  • Module 3: Contouring (Posted on Piazza) (Due: Oct 21 in class)
  • Module 4: Fairing and simplification (Posted on Piazza) (Due: Nov 4 in class)
  • Module 5: Alignment and deformation (Posted on Piazza) (Due: Nov 18 in class)

How to get Mathematica: All CEC labs should have Mathematica installed before the semester begins. If you are working outside CEC, here are a couple of ways to access Mathematica:
  • If you are on the SEAS network, follow this instruction to download Mathematica on your computer. After download, open Mathematica and choose Help->Enter activation key. Then click the "Other ways to activate button" and choose "Connect to a network license server". Enter "sl.mathlm.wustl.edu" in the server name box.
  • If you are outside SEAS and would like to install Mathematica on your computer, you can purchase a student license for $45 for a semester here.
Course project
Once you have got your hands wet in the lab modules, you are ready to tackle some real-world bio-medical problems. For the course project, you need to identify a current problem of interest in bio-medical image processing, and make a reasonable attempt at solving it using geometric or image processing algorithms (not necessarily limited to those covered in the course). You can use any programming language of your choice (e.g., C++, Java, Matlab, Python, etc.), and either do the project individually or with a partner (provided that there is sufficient workload for each person).

How to identify a problem: Almost any image-centered biomedical research lab would have problems that you can help to solve. The instructor will present several examples in class, but you are strongly encouraged to go out and look for such problems both within and outside the university (e.g., by checking out lab webpages in BME or other medical school departments; another good starting point is WashU's Imaging Science Pathway). Avoid problems that either too simple (e.g., can be solved by a couple of Matlab/Mathematica commands) or too hard (e.g., automatic tumor detection). If you are not sure, bring the problem to the instructor and discuss.

  • October 26: Sample project ideas
  • November 2: Project proposals due
  • November 30, December 2: In-class project presentations
  • December 7: Final report due.
See the notes (Slides PDF) for more details on format, time line, and tips. Presentations and data files from guest speakers will be posted on Piazza.

About the course
What makes the course unique?
  • State-of-the-art: Most of the algorithms covered in the course were developed in the past three decades (some in the past few years), and are still under active research. Students with get to see what's going on behind today's bio-medical image analysis software and tools.

  • Hands-on: The course puts heavy emphasis on doing-it-yourself exercises. All of the algorithms are conceptually simple to implement. Students will prototype these algorithms in the lab modules (using Mathematica), and build a production-level tool or solve a real-world problem in the course project.

  • Real-world challenges: We will deal with real-world biomedical images of a variety of imaging modalities (microscopy, MRI, CT, EM, etc.), and tackle actual tasks confronting researchers and doctors. For the course project, students will have the chance of engaging in on-going research efforts involving image analysis.

Why would I take this course?
  • You are a CS major and would like to see cool ways to apply your knowledge and programming skills, or
  • You are in a biomedical program and wonder "how can I do xyz to my images", or
  • You are a graduate student involving in imaging-based biomedical research, or
  • You are interested in graphics and image processing, or
  • ...
  • You want to impress your friends (and future employers) with fancy graphics :)

What are the prerequisites?
  • Programming: You should be proficient in programming in one of the major languages (e.g., C/C++, Java, Python), which is needed for your course project. Knowing how to program in Mathematica is NOT required (we will teach you as part of the course). If you are a CS major, CSE 332 or equivalent is required.

  • Algorithms and data structure: You need to be familiar with basic data structures (e.g., queues, trees, graphs, etc.) and related algorithms. If you are a CS major, CSE 241 or equivalent is required.

  • Math: Linear algebra is required.