CSE554: Geometric Computing for Biomedicine (Fall 2016)

(For the 2018 class, go to MyCanvas)

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 Lab Sciences 301, and the labs take place on Wednesdays 1-2:30pm in Urbauer 216 (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 TA is Hang Dou (dou 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)
  • Module 1: Binary pictures (Solution posted on Piazza)
  • Module 2: Thinning (Solution posted on Piazza)
  • Module 3: Contouring (Solution posted on Piazza)
  • Module 4: Fairing and simplification (Solution posted on Piazza)
  • Module 5: Alignment and deformation (Posted on Piazza) (Due: Dec 7 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 $38 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.).

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.

  • Oct 14: Instructor presenting sample project ideas
  • Nov 2: Project proposals due
  • Dec 5: In-class project presentations
  • Dec 12: Final report due.
See the notes (Slides PDF) for more details on format, time line, and tips. Presentations and data files for sample projects can be found on Piazza (under General Resources).

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.