CMSC
426
Image
Processing
Autumn
2011
Instructor: Yiannis
Aloimonos (yiannis@cs.umd.edu)
Lecture: TuTh 12:30 pm-1:45 pm - CSI
2120
Office Hours: Tu 11:00am-12:00 am Th 2:00-3:00
pm- AVW
4475
Teaching Assistant: Chengxi Ye
(cxy@cs.umd.edu)
Office
Hours: Tu 9:00 am -11:00 am
Important
Anouncements !
(Please,
reload
everytime you check the
announcements)
(Aug 31) Welcome to CMSC426
(Sep 8) How to get matlab: http://www.it.umd.edu/vcl/index.php
(Sep 28) How to learn matlab: press F1 and open the help browser.
Course Outline
In this class we will cover the following topics:
Reading List
There is no required text. We will distribute material from a variety of sources.
Grading
Midterm: 25%, Final: 25%, Projects/Homework: 50%
Lecture Notes
Lecture 1: Intoduction pdf
Lecture 2: Image formation 1 pdf ppt
Lecture 3: Image formation 2: Radiometry pdf ppt
Lecture 4: Linear algebra review and Introduction to Matlab Linear algebra tutorial (from PennState) Matlab script 1 Matlab script 2 (some image operations)
Lectures 5 and 6: Camera Calibration ppt Some linear algebra for solving equations ppt
Lecture 7: Filtering filter.ppt filter2.ppt
Lectures 8 and 9 and some of 10: Edge detection ppt Canny edge detection m-file
Lecture 10: Resampling ppt (Slides from Univ. of Washington)
Lecture 11: Image motion ppt
Lecture 12: Statistics on image features: Review of statistical concepts ppt Web site on illusions
Lecture 13: Stereopsis ppt
Lecture 14: Projective Geometry ppt (10 MB )
Lectures 15 and 18: Epipolar Geometry ppt (8 MB )
Lectures 19 and 20: Interpretation of image motion fields ppt
Lecture 21: 3D motion estimation from image derivatives ppt
Lecture 23: Shape from Shading pdf (from Daniel DeMenthon)
Lecture 24: Texture ppt (5.5 MB)
Lecture 25: Tracking with Kalman Filters pdf (from Daniel DeMenthon)
Course Projects
Here is the first project. The goal is to create a
panorama (mosaic),
given the images in the attachment. These
images were obtained
by a rotating camera.
I also attach a
paper containing basic information as well as an
algorithm for
the creation of the mosaic.
The basic idea is that the
transformation between any two of the images
is a homography. By
estimating such homographies, you will be able
to take each image
and put it in some coordinate system, thus creating
the mosaic.
Project 2: Repeat the mosaic project but make the process completely automatic.
Project 3:
Write a program that makes an autostereogram. This program must be automatic, and take in a depth map, and (perhaps a texture source, or you can generate the texture randomly). You turn in a web page, with your favorite (2 or 3) example outputs (and the depth map they came from).
Program input: depth map, such as those available from:
http://www.dbki.de/tutorials/eng/landscape/pic/depth.jpg (where dark should be closer) or any thing else you can find.
The depth map is usually a grayscale picture, and you need to map the
color (probably from 0-256) to a distance (how far apart the next
pixel should be over). Often mapping depths of 0-256 into the range
of disparities of 100-250 pixels is about right, but it depends on
your monitor/printer.
Vague Algorithm:
Start at the left pixel of each row. (ie, let x = 1)
randomly pick color C **.
color location x with color C.
look up the depth (Z) at pixel location x on that row.
map Z onto a displacement d (something like d = 100 + Z/2).
x = x + d.
if x is still in the image
(that is, if you haven't gone off the right edge)
then loop to "color location x..."
if x isn't still in the image, set x to the position of the
leftmost pixel that isn't colored at all yet,
loop to "randomly pick color C"
end
** you do have to choose a color, but it does not have to be random.
Extensions (extra credit).
Moving autostereograms (good java choice). The idea here is to create a depth map that changes through time, and then show the autostereogram images through time (so that you see a moving depth map). This might entail creating a depth map that is a mathematical function that depends on time (or frame number t): d(x,y) = 4 + sin( (x+t) /150) Now, continually update the autostereograms as the depth map changes. This would be a nice java applet, or you could save the results as a movie (mpeg or avi).
Explore transparency in autostereograms. If you have a partially transparent surface over a more "solid" surface, we can often see both depths at once. The Project is to explore this idea in the following way: make one autostereogram. make another one with a smaller depth. make the second one slightly (or very, I don't know) transparent, and put it one top of the first autostereogram. How can you make it transparent? Option 1, only use every 5th pixel (or so)... for the second autostereogram. Option 2, instead of completely coloring the pixels, have the transparent layer only partially change the colors of the pixels. Make a collection of "2 layer autostereograms" and answer the following questions: ..) does it matter if neither, one, or both of the two autostereograms is random dot (ie, does it help if they have more structure? ...) how separated, in depth, can the two surfaces be?
Project 4: Implement your favorite stereo algorithm and apply it to two Middlebury sequences. Compare with the ground truth.
Homework
Additional Resources
Questions and concerns to
cxy@cs.umd.edu
Designed by Gutemberg Guerra-Filho