CS448f: Image Processing
Instructor: Andrew Adams
Tue, Thu 3:30-5:30pm
TA: Jennifer Dolson
Mon, Wed 10:15-11:30am
Where and whenGates Building Room #392
Tuesday and Thursday 2:15-3:30pm
Schedule and Lecture Notes
Sep 22 - 1.1:
Sep 24 - 1.2:
Sep 29 - 2.1:
Oct 1 - 2.2:
Oct 6 - 3.1:
Oct 8 - 3.2:
Oct 13 - 4.1:
Oct 15 - 4.2:
Oct 20 - 5.1:
Oct 22 - 5.2:
Oct 27 - 6.1:
Oct 29 - 6.2:
Nov 5 - 7.2:
Nov 12 - 8.2:
Nov 17 - 9.1:
Nov 19 - 9.2:
Over the past decade a family of new algorithmic tools for image processing have arisen and have proven to have broad applicability. Many of them are so useful they have become basic tools in Adobe Photoshop, yet they are not covered by traditional image processing classes. This family includes techniques like gradient domain manipulations, fast edge-preserving filters, aligning and combining bursts of images, and image segmentation with graph-cuts.
For an algorithm to be a useful tool in your mental toolbox, you need a deep understanding of how it works. For this reason the course will be focused on actually implementing these algorithms in C++ using a stripped-down open-source image processing framework (ImageStack). In the second half of the course, you'll pick a recent paper on one of these techniques and implement it.
However, before these techniques are taught, you'll need to have a solid image processing foundation to build on, and so the first part of the course will deal with traditional image processing issues like sampling and reconstruction, linear filters, and geometric operations like rotating and warping images, with an emphasis on efficient and accurate implementations.
During this portion of the course students will all implement some basic algorithms within ImageStack, and competitions will be held to select which submissions will become a permanent part of ImageStack (with student permission). As an example, one such competition will be: implement a rotation algorithm (that runs within a time limit), such that when an image is rotated by 1 degree 360 times, it's as close as possible to the original.
Prerequisites and Relationship to Other Courses
You'll be expected to know basic linear algebra and calculus. You need not have dealt with pixels before, though the undergraduate computer graphics course (CS148) would be helpful, as would the undergraduate digital photography course (CS178). However, we do not require you to have taken these. You'll need to be comfortable writing object-oriented C++ code (ie CS106B and CS108).
This course will feed into the computer vision course (CS223b), the computational photography course (CS448A), and to a lesser extent the more advanced computer graphics course (CS248), which all run in Winter. A solid image processing background and an awareness of new techniques will be helpful to you in all three of these courses.
Your grade for the course is divided as follows: The assignments are worth 60%, and your project is worth 40%. The assignment score is broken down into 30% for your best assignment, 20% for your next best assignment, and 10% for your worst assignment. There are no exams. We've tried to front-load the assessable work so you have less to do as you get busier with your other classes. You get 2 late days for your assignments, and no late days for the project (it doesn't really work with project presentations). Attendance is mandatory. You're allowed up to two unexplained absences. If you can't make the class for some good reason just send me an email.
The first assignment will get you to implement an image rotation algorithm that is both fast and accurate. You'll be graded on both criteria. There will be a competition to see whose implementation is the fastest (given an accuracy requirement), and the most accurate (given a speed requirement). Fabulous prizes will be awarded (probably candy).
The second assignment will be a similar competition for fast accurate Gaussian blurs, and the third assignment will be another competition, this time for quickly aligning a sequence of images. Your assignment grades will be mostly based on meeting requirements, though there will be extra points available for doing well in the competitions.
For your project, you'll be implementing a cool technique from a recent siggraph paper (or a paper from a similar conference). These techniques will be shared at the end of the course (with your permission), so we can all walk away from the course with an image processing library full of the latest and greatest stuff. Towards the second half of the course you'll give a medium length presentation on the paper you chose, and show off your implementation progress so far. At the end of the course you'll submit your completed implementation, and give a short demo of it in class. The first presentation is worth 10% of your grade for the course, the second presentation and submitted material is worth 30%.
I should say one thing up front that might not be the norm for upper level CS courses. Code readability will count for your grade. As it says above, I'd like everyone to be able to walk away from this class with a bunch of useful code, so your code is going to have to be understandable by your fellow students.