CSCI 497P/597P - Introduction to Computer Vision

Scott Wehrwein

Winter 2019

Course Overview


Where and When


Synopsis from the WWU Course Catalog

A broad introduction to the fundamentals and applications of computer vision. Topics include basic image processing, the geometry and physics of image formation, multi-view scene reconstruction, segmentation, and detection and recognition of objects.

Official Course Outcomes

On completion of CSCI 497P, students will demonstrate:

On completion of CSCI 597P, students will additionally demonstrate:

Tentative Schedule

Date Topics Assignments Readings
1/8 Introduction and logistics (slides) 1
1/9 Image filtering (slides) 3.1-3.2
1/11 Filtering, numpy, edges (slides, Hybrid out 4.2
1/14 Edges, resampling (slides) 4.2, 3.5
1/15 Upsampling, Features overview (slides) 3.5, 4.1.1
1/16 Features: Harris corners (slides) 4.1.1
1/18 Features: Invariance, descriptors (slides) 4.1.2
1/21 No Class (MLK Day)
1/22 Features: descriptors and matching (slides) Hybrid due, Features out 4.1.2-4.1.3
1/23 2D transformations: Affine (slides) 2.1.1-2.1.2
1/25 2D transformations: Homographies, Inverse warping (slides, code)
1/28 Alignment: Translations, Affine (slides, notes) P1 Artifact Winners 6.1.1-6.1.2
1/29 Alignment: Homography (slides, notes) 6.1.1-6.1.2
1/30 RANSAC (slides, code, notes) 6.1.4
2/1 Cameras, Projection (slides) Features due
2/4 ❄ Snow Day ❄
2/5 Projection, Planar panoramas (slides) 2.1, 9.1
2/6 Spherical Panoramas, Camera intrinsics and extrinsics (slides) Pano out; Pano notes 2.1, 9.1, 9.3
2/8 Intrinsics, Extrinsics, Depth from Disparity (slides, notes1, notes2) HW1 out (2/9) 2.1, 11.1, 11.3
2/11 ❄ Snow Day ❄
2/12 ❄ Snow Day ❄
2/13 ❄ Snow Day ❄ HW1 due (Thursday 3/14)
2/15 Stereo matching (slides)
2/18 No class (President’s Day)
2/29 Projective Geometry (slides, notes)
2/20 Midterm Exam (in class)
2/22 Projective geometry and the fundamental matrix (slides, notes) Pano due
2/25 Photometric stereo (slides)
2/26 Intro to recognition and classification (slides) 231n: Classification
2/27 Image classification and linear classifiers (slides) PS out 231n: Linear Classifiers
3/1 Optimization and SGD (slides) 231n: Optimization 1
3/4 Backpropagation (slides, notes) 231n: Optimization 2
3/5 Neural Networks, CNNs (slides, activations.pdf) PS due; AlexNet out 231n: Neural Networks 1, 2, 3, case study
3/6 CNNs: Architecture Basics (slides) 231n: CNNs
3/8 CNNs: Feature Intuition and Training (slides) 231n: NN 3, CNNs
3/11 CNNs: Training and Architectures (slides) AlexNet due (Sunday 3/10) HW2 out
3/12 CNNs: Application to Other Problems (slides)
3/13 Review, Deep Dream, Style Transfer (slides, code) deepdream, style transfer
3/15 Review, Bilateral Filtering HW2 Due (Thursday 3/14)
Tuesday 3/19 Final Exam 1:00–3:00pm


We will use the following textbook. A PDF preprint version is freely available online at


Grades will be calculated as a weighted average of scores on the following course components:

Programming assignments will contain add-ons beyond the base project; these add-ons will be required for students in CSCI597P and provide an opportunity for extra credit for students in CSCI497P.

Course Policies

Inclusive Classroom Environment

It is expected that everyone will promote a friendly, supportive, and respectful environment in the classroom, labs, and project groups. Everyone’s participation will be equally welcomed and valued.


Strictly speaking, attendance at lectures is not mandatory and not explicitly tracked. That said, no credit will be given for missed in-class assessment activities.

Late Work

You have three “slip days” that you may use at your discretion to submit programming assignments late. Slip days apply only to programming assignments and can not be applied to any other deadline. You may use slip days one at a time or together - for example, you might submit each of three assignments one day late, or submit one assignment three days late. A slip day moves the deadline by exactly 24 hours from the original deadline; if you go beyond this, you will need to use a second slip day, if available.

After your slip days are exhausted, a penalty of 10% * floor(hours_late/24 + 1) - that is, 10% per day late.

Programming Guidelines

Your programs will be graded on correctness, clarity, and efficiency (in that order).


A correct program is one that always produces the correct output for a given input. Also, a correct program does not produce unintended side-effects. The most effective way to ensure that your program is correct is to test, test, test. Test each component as you introduce it; once you are confident that a component works you can use it in other routines. Try to break your program in testing, and if you succeed, locate the bug and fix it. The better you test your program, the more likely it is to be correct - the more likely it is to be correct, the more likely you’ll earn a good score. Most of your grade will depend on the correctness of your code.


The easier it is to read and maintain your code, the easier it is to locate and remove bugs. Your program should be well organized, appropriately commented, and easy to maintain. To have a well-organized program, design your program thoughtfully and modularly. Think before you code: hacking away blindly leads to ugly, difficult-to-read code. If you do hack away, producing a functional but ugly wall of code, try to clean it up a bit. Make sure that your cleaning does not introduce new bugs.

As for comments, please follow these simple guidelines proposed by Emeritus Professor Osborne:


Your programs should be asymptotically efficient, e.g. checking graph reflexivity should be O(n), insertion into a balanced tree should be O(log n), etc. Do not optimize your code beyond the asymptotic level, as such tweaks are often at the expense of clarity, correctness, or both.

Academic Honesty

Collaboration Policy - Individual Assignments

Individual programming assignments are to be completed independently. Students are welcome to discuss assignments with each other on a conceptual level, but each student should be writing their code independently and without direct help from fellow students. Sharing your code with others or looking at someone else’s code is an explicit violation of this collaboration policy. To make sure you are collaborating appropriately, follow these two rules:

Automated tools will be used to check your code for plagiarism at the push of a button. They are not fooled by tricks such as changing variable naming and whitespace: in fact, hiding plagiarism is harder than doing the assignment.

Collaboration Policy - Pair Programming

For pair programming assignments, the above policy applies to any collaborations with people outside your group. In addition, the following pair programming best practices must be followed:

University Policies

Please review the University policies outlined at regarding: