EE 599-002 - Cameras as Computing Systems
EE 699-002 - Cameras as Computing Systems

Preliminary ABET-style Syllabus


EE 599 - Cameras as Computing Systems: 3 Credits

EE 699 - Cameras as Computing Systems: 3 Credits

Cameras as Computing Systems is essentially an embedded computer engineering course about operation, construction, control, and programming of digital cameras.

This course will begin with an introduction to the basic principles of photography and operation of digital cameras. No experience or expertise in photography is required as a prerequisite, although many aspects of the discussion will be motivated by explaining photographic techniques. About one third of the course will be about the basic mechanisms and processes asociated with digital cameras.

The second third of the course will focus on control of image capture. Various techniques and mechanisms will be discussed, including in-camera environments such as Android and CHDK (the Canon Hack Development Kit, which allows users to run arbitrary C code inside PowerShot cameras). Tethered control also will be discussed in detail. Each student will implement at least one program controlling camera capture and will test it using actual camera hardware.

The last third of the course will center on novel types of digital manipulations of captured image data. Emphasis will be placed on techniques that are intimately tied to specific aspects of the capture process -- this is not a course in classical image processing and is intended to have minimal overlap with Matlab-heavy Image Processing, Computer Vision, or Computational Photography courses.

The primary distinction between the graduate and undergraduate versions of the course will be the handling of the projects. Graduate student (EE 699) projects will be significantly more open-ended, involving at least one project for which each student must individually propose, write-up, code, and present their final result to the class.

A good knowledge of C programming is expected, as all the programming will use environments building on C.


None required - Course notes

Although there are camera prototyping kits and industrial cameras that could be used for this course, we prefer to use consumer cameras. Many USB and FireWire webcams allow low-level access. Various Canon PowerShot cameras support the level of control desired using CHDK -- the Canon Hack Development Kit and some Canon EOS cameras support similar access using Magic Lantern. The Android camera framework also provides a low-level programmable interface to many consumer cameras.


Dr. Henry G. Dietz, Professor


The goal of this course is to have students understand operation, construction, control, and programming of digital cameras. There will be hands-on projects involving low-level programming of digital cameras.


For EE599: Undergraduate standing and fluency in C or a similar programming language

For EE699: Graduate standing and fluency in C or a similar programming language


  1. Introduction
  2. Photographic concepts and techniques
  3. Design of cameras and lenses
  4. Basic camera algorithms (autofocus, demosaicing, etc.)
  5. Control of camera operation (bracketing, motion detection, scripting, tethering, etc.)
  6. Image data (raw formats, EXIF, JPEG, etc.)
  7. Computational processing after capture (HDR, panoramas, stereo transformations, etc.)
  8. Graduate project presentations and discussions


Upon completion of this course the students should demonstrate the ability to:

  1. Understand history and evolution of camera and lens technology, from its beginnings to modern digital cameras and beyond.
  2. Understand and be able to apply basic photographic techniques.
  3. Understand the basic design and function of the subsystems within a modern digital camera -- the architecture of modern stand-alone still/video cameras and webcams.
  4. Understand and have implementation experience with the basic algorithms and data formats associated with modern digital cameras.
  5. Understand and have implementation experience with computer control of camera operation.
  6. Understand and have implementation experience with computational photographic processing after capture.


Students will perform open-ended experiments using and programming (commodity) camera hardware.


The bulk of the design content is in the form of students designing and implementing C code controlling, or processing data captured by, digital cameras. However, students will also be made aware of and tested on design issues embedded in camera construction -- the use of commodity camera hardware makes hands-on design of the camera hardware impractical.


Lecture 3 hours per week.


Engineering Science: 1 Credit (33%)

Engineering Design: 2 Credits (67%)


These course outcomes fulfill the following program objectives:

PREPARED BY: Henry G. Dietz; last update: August 28, 2014 Computers as Computing Systems