CS448f: Image Processing
| |||
Instructor: Andrew Adams Gates 376 Office Hours: Tue, Thu 3:30-5:30pm |
TA: Jennifer Dolson Gates 360 Office Hours: Mon, Wed 10:15-11:30am |
||
Where and whenGates Building Room #392Tuesday and Thursday 2:15-3:30pm | |||
Schedule and Lecture Notes
Sep 22 - 1.1:
Lectures notes.
Sep 24 - 1.2:
Lecture notes.
Sep 29 - 2.1:
Lecture notes on Sharpening.
Oct 1 - 2.2:
Lecture notes on Tone-Mapping.
Oct 6 - 3.1:
Lecture notes on Fast Filtering.
Oct 8 - 3.2:
Lecture notes on alignment.
Oct 13 - 4.1:
Assignment 3 - Alignment.
Oct 15 - 4.2:
Lecture notes on blending and pyramids.
Oct 20 - 5.1:
Lecture notes on wavelets.
Oct 22 - 5.2:
Lecture notes on wavelets.
Oct 27 - 6.1:
Lecture notes on deconvolution.
Oct 29 - 6.2:
Lecture notes on Seam Carving and Graph Cuts.
Nov 3 - 7.1:
Nov 5 - 7.2:
Nov 10 - 8.1:
Nov 12 - 8.2:
Nov 17 - 9.1:
Nov 19 - 9.2:
Course DescriptionOver 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 CoursesYou'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.
Assessable MaterialsYour 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. AssignmentsThe 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.
FAQ
|