EECS 556 / EECS 498 (section 556) in W21: Image Processing

Prof. Jeff Fessler

This course describes algorithms for digital image processing and the tools for analyzing those algorithms. Most (if not all) algorithms are illustrated with images because the beauty of image processing is that you get to see the results.

There is no required or recommended textbook. Prof. Fessler has over 700 pages of course notes containing about 400 figures to illustrate the concepts and methods.
Here is an example image processing application called image deblurring (restoring an out-of-focus image):

Topic outline

For a "preview" of the course, see the complete W18 lecture notes (762 pages). There will be modifications in W21, but those notes provide a sense of the course.

Prequisites

Format

In W21 the course will be taught remotely, using a combination of synchronous and asynchronous learning. The implementation will depend in part on the enrollment. For the past several years, I have taught EECS 556 in an "engaged learning" format (aka flipped classroom) using class time for group work on whiteboards. I hope to find a way to replicate that experience in W21, perhaps using jamboard for group work.

In January, after I see the enrollment, I will post a more detailed syllabus with policies on the course web page http://web.eecs.umich.edu/~fessler/course/556/

Past semesters have had company sponsors (KLA & Apple) who have awarded prizes to the top projects. For example, see this ECS news article from 2018. I will seek such sponsors for W21 as well, but I don't know how the ongoing pandemic might affect their interest.

Code examples will be given using Julia (for any new examples) and Matlab (for many legacy examples). For the EECS 556 section, some HW and Exam problems will require students to use Julia. For the EECS 498-556 section, students will be able to choose either Matlab or Julia. Student teams will be free to choose their own language for their final projects.

556 vs 498-556

The course notes for EECS 556 and EECS 498 will be identical. Topics 1-10 above will be common to both sections and are taught at the senior-level in many universities. Starting with Topic 11 above, the 498 and 556 sections will have some different homework problems and exam questions that are appropriate for the different backgrounds of students in each section. In particular, Topic 11 will not be required for 498 students, because it relies on EECS 501 background on random processes, and portions of Topics 12 and 13 rely extensively on EECS 551 and will not be required for 498 students. There will be some Julia tasks (Jupyter or Pluto notebooks, or 505-style codices) that will be required for 556 students and optional for 498 students.

EECS 498 will not count as a major area course for SIMPL / Computer Vision majors. ECE graduate students should take 556 and SIMPL / Computer Vision majors must take 556 not 498. Grades will be assigned separately for the two sections.

Undergraduates who are thinking of an ECE MS degree at UM could potentially use this 498 as a "double counted" technical elective for the SUGS (SGUS?) program. In my view it should also count as a 400-level tech elective for the EE/CE undergraduate degrees, but check with your undergraduate adviser about that.

Caution to non-ECE majors

This course traditionally gets favorable ratings but also is often rated as having an above average work load. Students who have not had the equivalent of EECS 216 and EECS 351 will find Topics 1-7 very fast paced because the notes rely heavily on the foundations from 216 and 351. Students without signal processing backgrounds should audit EECS 351 and learn 1D DSP before taking EECS 556. At the graduate level, we do not enforce prerequisites; they are simply advisory.

As a graduate student you might think you can just "pick up" whatever you are missing as needed. That is a good perspective in general, but if you take this class as a non-ECE major you need to realize that the typical ECE graduate student will come into it with the equivalent of EECS 216, 301, 351, 501, 551 as background, which is over 20 credits of relevant preparation. The course pace and depth is targeted at students with that background. Undergraduates in 498-556 will come in with at least EECS 216 and 351 (and hopefully 301) background, which is at least 8 credits of relevant background. That is a lot of background for a non-ECE major to "pick up on the fly" during a graduate course.

If you want to review DSP before starting EECS 556, see my lecture notes from EECS 451 (now named 351), especially Chapters 2, 4, 5 and 6. If you want to learn the Julia language before the term begins, there are many tutorials online including an MIT course on Julia with videos. Here is a recent medium article about the course and language.