Whiteboard Team

Ajay Gaddam, Raja Chintalapati, Vijaya Mekala The Virtual Whiteboards functionality of Unicron comprises the following scope: In general, transmitting the entire whiteboard image contents is inefficient in terms of bandwidth requirements, so the whiteboard team is concerned with reducing that bandwidth by incrementally updating textures. A student observed that MPEG is based on similar principles.

Steps

At almost every step, test by writing image to file.
  1. read camera JPG into memory - done
  2. uncompress JPG data - done already
  3. crop image to whiteboard boundary - done
  4. modify cropping to read coordinates from config files - Ajay
    Note: the boundary will be given by four (x,y) pixel coordinates that you read from a config file.
  5. fix keystoning (modify trapezoid to become a rectangle) - done (Vijay)
  6. scale image to texture dimensions (powers of 2, e.g. 1024x512 pixels) - done
  7. Write an "image processing server" that fetches JPEG data from cameras. Version 1 should do so continuously, as fast as it can (done, could be tuned for performance and measured some more).
  8. Image processing server step 2. In addition to polling the cameras, listen on TCP ports 4550-4552 for HTTP requests for the three cameras' cropped, scaled, keystoned, texture image files. Providing http service can use separate thread(s) from the fetch task. The image processing server will probably run on the same host as the CVE server.
  9. Modify CVE server configuration to know whether its got an image processing server.
  10. Image processing server Version 2 can add sleep modes, and reduced frame rate controls.
  11. Write images, with sequence id's, to files in dat/textures/cam[1234]/idnum.jpg Remove old images with some reasonable scheme. Scheme1 might be: keep two copies of each camera at any given time. Send CVE server message when new image is ready. Wait for CVE server to ask for next message (on each camera). For each frame, write file to disk and send server an update notice.
  12. send whole image to CVE clients
    The server will decide which clients should receive this data. Clients should pull image data from image processing server.
  13. LATER "whiten"/normalize image - done some work
  14. LATER stamp image with a timestamp
  15. LATER "diff" adjacent images. identify only pen changes. create a minimal rectangle.
  16. LATER remove instructor.
  17. send image data (LATER: a minimal rectangle, with coordinates) to CVE clients
  18. CVE clients update their version of texture the slow way
  19. add support for minimal memory-based window ops in native OpenGL format. These ops consist mainly of: setpixel and copyarea - Omar El Khatib

Image Processing Libraries we have Evaluated

Sample Images

An older sample shot.

Links

http://research.microsoft.com/~zhang/Papers/TR03-39.pdf
an interesting TR from microsoft
a funky site recommended by Vijaya