Bruce Draper
Office: 442 CS Building
Office Hours: TBD
Lecture Time and Place:
3:00 - 3:50, MWF, CSB Room 325
Recitation 1 Time and Place:

Early computers were text-based. Data was entered as text, programs were run from the command line, etc. Then computer systems began to use images -- but only for output. Computer graphics was invented, and the compute gaming industry was born. We began to have special-purpose graphics computers, and traditional computers were outfitted with window-based operating systems. Now we are entering the next phase: images and video streams as input. Every computer and cell-phone has a digital camera, but how do we take advantage of all this raw visual data? This course tries to begin answering this question.


In order to understand the material in this course you must be comfortable with linear algebra, and with computational geometry expressed through linear algebra. For example, you should be able to give a geometric interpretation of the dot (inner) product and cross product of two vectors, and for matrix multiplication. You should understand homogeneous coordinates and the mathematics of perspective projection. You should know the basic reflectance models (Lambertian, specular, and hybrid). You should know the basics about color spaces. This material is covered in CS410, which is a prerequisite for this course.

In order to do the programming assignments in this course, you must be able to write complex programs in either C++ or Python. (C, Java, MATLAB, and other programming languages are not acceptable.) You will be using the OpenCV library and TensorFlow as well. Note that writing complex programs includes designing, testing and documenting your own programs from scratch.


There is no required textbook for this class. This does not mean there is no reading. This means that on-line reading materials are associated with each lecture, as indicated on the progress page. The resources page also includes links to some generally useful on-line computer vision resources.


Here are the formally graded elements of the course and associated weighting:

Activity Weight
Programming Assignments (6, maybe 7) 50 %
In-class Tests (3) 50%

Students in this class are expected to do more than attend; they are expected to participate. This includes having read and understood the reading assignments before class, answering questions in class when called upon, and most importantly asking questions in class. The midterm will cover material from the start of class to the date of the midterm exam, with an emphasis on material not covered by the programming assignments. The final exam will cover material from the midterm exam through the end of the course (i.e. it is not cumulative), again with an emphasis on material not covered by the programming assignments. There will be four programming assignments: a quick warm-up exercise due in week #2 (and worth half of what the other three are worth), and then three larger assignments.

Exams and programming projects will be done individually and grades assigned on an individual basis. Students not already familiar with the CSU Honor Pledge should review this clear and simple pledge and always adhere to it.

Late and Makeup Policy

Midterm and Finals: Make-up exams are only given for extraordinary circumstances (e.g., illness, family emergency). Students must consult with the instructor as soon as possible, preferably before the start of the exam. Course examination dates are listed in the syllabus; be aware of them and plan accordingly.

Projects: Always check the assignment page for due dates. Late assignments will not be accepted except in extraordinary circumstances (e.g. illness, family emergency).

Important Dates

Midterm Wednesday, March 9th
Final Exam May 10th, 4:10-6:10pm

The midterm and the final exam will be held in the same classroom as regular lectures. While no change to the midterm dates is anticipated, the instructor reserves the right to change these dates with a weeks notice.

In Class Participation

All students taking this course are expected to participate actively. This includes asking and responding to questions. Students may be asked to present their programming assignments in class, in which case the presentation becomes part of the graded portion of the assignment.

Professional Conduct

All students are expected to conduct themselves professionally. We (the instructors and GTAs) assume you are familiar with the policies in the student information sheet for the department. Additionally, you are computing professionals, albeit perhaps just starting. You should be familiar with the code of conduct for the primary professional society, ACM. You can read the ACM Code of Conduct HERE.

We work to maintain an environment supportive of learning in the classroom and laboratory. Towards that end, we require that you be courteous to and respectful of your fellow participants (i.e., classmates, instructors, GTAs and any tutors). In particular:

  • Please turn off the ring on your cell phone. If you are expecting an emergency call, sit near the door and slide out discretely to take it.
  • In class use of electronic devices in general, and laptops specifically, is permitted as a courtesy so that you may better participate and learn. If at any time the instructor judges that an electronic device is becoming a distraction the student may be asked to to turn it off and put it away.
  • All exams and quizzes are to be done without the aid of notes of any kind. Laptops and all other electronic devices must be shut and put away during exams and quizzes.