PostDoc Research


Proposition:
Development of an automatic color and brightness calibration system for multi-projection display walls.

Researcher:
Luciano Pereira Soares

Advisory:
Prof. Joaquim Jorge
   
   Collaboration:
    Ricardo Jorge Jota Costa
    Bruno de Araujo

Local & Period:
This research project was developed at the INESC-ID main building and at the TagusPark campus of the Instituto Superior Técnico. It started at the September, 1st and finished at November, 30th of 2005, also there was a short visit period in February of 2005.

Problem:
The power wall (LEMe Wall) developed at the Instituto Superior Técnico uses a matrix of commodity projectors, these projectors present a severe differences in color and brightness reproduction. Beside, other color effects coming from the screen, computers and room environment increase the color and brightness shift among projection tiles, delivering an heterogeneous image for the user.

Procedure:
Get the power wall images through a web camera, discover the equation to correct the colors and brightness  and feed the computer with this equation. There is one program running in the administration computer node which gets the images and proceed with the calculations. After each cluster node receives, across the network, the new calibration and stores it in the graphic card for a normal operation. 

System Connections
Connection Scheme



Steps:

Study and discover the color and brightness calibration techniques

Look for a development environment and start an application

Develop an simple application that just gets the colors and inform how to proceed the calibration manually

Complete the application enabling it to calibrate the computer (and even the projectors*)

Produce an article for a conference in the field.


Progress:

Many publications regarding color, brightness and contrast calibration were studied during the postdoc. In the Stone paper[1] there is an overview of tiled display technologies and a chapter covering the question of black offset. In Majunder et. al. [2] paper, we found a better focus in color and brightness calibration, it deals with complex mathematics and it is not clear in the paper how this solution is able to deal with real time visualization applications, also it used very sophisticated system that are very expensive, like the spectroradiometer. An overview of the ICC specification [3] was done, that will lead to a better understanding of the file format, that is an standard for color correction, although it is not going to be used since the graphic cards dos not fully support this resource. The Hereld paper [4] talks about tiled projection systems, and cover gamut matching, they are also using cameras but they do the calibration in the projectors, they talk about ICC but don't get into details. The other Majunder's paper [5] gives some clues about what is important for future active areas of research in color and brightness calibration, like user tracking and calibrations during operation.

After an investigation of the tools available, there are few option to implement the solution. The tools, or APIs, for web cameras are not a standard in C++, then there were many ways to implement and depends on the camera manufacturer. Java although supports a standard multimedia environment called JMF that supports web cameras and it is not hardware dependent.

Java also has a native support for ICC, but there are very few documentation on it, and basically no one sample for reference, with few tests I could read and write some files, but I was unable to change the content (an small sample that I did is here). There are also two libraries in C++ to deal with ICC file format, one is ICCLib, but it is too old. The other one, is the SampleICC, it was developed in VisualStudio, I was afraid about portability since we intend to use Linux, but after some revamp in the code it compiled on Linux and runs in Cygwin as well. The code modifications are in the code section.

Another important point regards the user interface, since Java is very good to create nice user interfaces I decided to use Java to develop the server application to run in the master node. The java application gets the camera picture and proceed the calibration calculations.

For communication I am using sockets that is simple and powerful enough, and the protocol used for communication is based in XML. Instead of using a parser for XML, I decided to develop a simple one from scratch, creating something lighter for the cluster. The camera application, developed in Java, acts as a server, and then the daemons, developed in C++, running in the cluster nodes start to connect with this server. With this approach the application does not need to know each computer prior to start the application. As each computers connect, it is included in a list showing their hostname.

For graphical display OpenGL has all the features need to display the patterns. It is possible to generate the solid color and the lines and patterns for the geometric calibration.

The development platform used to access the Java and C++ code in a easy way is the Eclipse. It presents many important tools enabling a quicker development

At the beginning we decided to use camera to capture and create a ICC file to be loaded by the graphic cards to calibrate the brightness and colors. But the first big problem in this project is the fact that the nvidia panel, doesn't support very well ICC formats. As you can see, in the ICC Profile Inspector the tone curve is in one way, but in the nvidia it is in a different position, what happens is that the nvidia swaps the axes, then for sure it doesn't work. Since I can't remove the last point in Y axes, that in the nvidia is X, (Look at the top right conner, there is a point that makes all 100% light in 100% output) then a can't dim the light. Then we abort for a while the ICC output.


ICC Profile InspectorNVidia Panel
image from ICC Profile Inspector and NVidia Panel

But in Linux, we found one solution that is based in the file ~/.nvidia-settings-rc that has some commands for color/brightness/contrast control, and a call to nvidia-settings with the option "--load-config-only" change the parameters very fast, and also the parameters "--config=<any file>"  enables the creation of a different file to calibrate the colors. From this point I decided to look into this code, and create a entire new application to load the calibration.

After I while I discovered the extensions in X11 to deal with gamma configuration, the functions are the following:

In the server application, the camera was connected to the application and the image stream was got. To have a better use of the images, the camera parameters were modified through the JMF, but I was not able to find how to change this parameters on-line, inside the application. Then every time I wish modify the camera calibration, I have to live the application and change the camera parameters manually.

The first step in the calibration was to discover each tiling region. We developed an algorithm used to subtract two images, one with the projector fully bright, and other fully black, and looking for the borders each image line it was possible to discover the edges. After a scan line algorithm was used to find each pixel corespondent each projector. One problem regards the room environment since wall, chairs, tables reflect the projection light and create too many noise for the calibration. Look at the following picture, it is possible to see that the ceiling is brighter because the reflection, to solve the borders detection issue we look for abrupt brightness changes, since the light in the ceiling is smooth, it is not catch by the algorithm.

subtraction
subtraction from black and white image

During the visualization, after each projector tile being detected, there is red wire frame with the computer hostname over the captured image, matching with the projector tiles. This was possible using a glass pane over the camera image.

Another problem is related with the camera, that depending on the position it has a different effect from the brightness acquisition this is because the lens is brighter when it is straight to the light focus, creating then some bright effects.

During the operation, the primary colors are displayed in the power wall. As you can see in the images, we have a severe hot-spot problem, then a cosine curve equation is used to correct the brightness deformation, as the pixels get away from the screen, we already know how it decrease. Finding the center of projection is quite simple since we can discover the brightness point in the image.

Red

Green

Blue

White

The RGB and White colors projected. These images were taken by a high resolution camera.

Also we decided to include commands for a manual adjustment, this controls enable the user to control each gamma curve achieving a more precise result. Since we find difficult to change many parameters at the same time, the user interface enable just increase and decrease 8 points in the gamma curve of each color, thta are the same points used in the automatic calibration.

Technical Report:
The following tech report presents the research in a more formal presentation. It is delivered in a pdf format that is easer for printing.

    techreport.pdf           (if you need acrobat reader)


Pictures:
Here are the snapshots that I got during the software development:

First Snapshot of the applications

Second Version picture

last version picture

first version

second version

last version


This is a real application in the power wall.

before

after

System being used in a cluster application



 
Code:
The code of the system [JAVA] [C++]

    Modifications in SampleICC:
        in file:  IccTagBasic.cpp
        in line 6346 put the "int j;" outside the loop, and change the loop to "j=0"
        add in the beginning of the code: #define __min(X, Y) ((X) < (Y) ? (X) : (Y))

        I created a makefile to build the library for SampleIcc: Makefile

Other tasks:

Beside the main project, several other tasks were developed during the PostDoc:

Future Work:

As a future work we are going to use different quality cameras and their parts, to discover camera influence in the calibration. Another step is the to plug-in additional software components to use projector controls in the calibration and then achieve better results in the calibration. We also intend to increase overlap region among the projection tiles and apply edge blending using a precise linear blending system, not irregular one that needs automatic edge blending algorithms, we can predict the color variation between two neighboring projectors and work the corresponding attenuation functions in the graphics card, thus enabling existing applications to use this resource without changing any code.

References:
[1] Maureen C. Stone. "Color and Brightness Appearance Issues in Tiled Displays," IEEE Computer Graphics and Applications, vol. 21,  no. 5,  pp. 58-66,  September/October,  2001.   [PDF]
[2] Aditi Majumder, Zhu He, Herman Towles, Greg Welch. "Achieving Color Uniformity Across Multi-Projector Displays," vis, p. 17,  11th IEEE Visualization 2000 (VIS'00),  2000.  [PDF]
[3] "Specification ICC.1:2004-10 (Profile version 4.2.0.0) Image technology colour management — Architecture, profile format, and data structure”, ICC, 2004. [PDF]
[4] Mark Hereld, Ivan R. Judson, Joseph Paris, and Rick L. Stevens. "Developing Tiled Projection Display Systems," Proceedings of Fourth Immersive Projection Technology Workshop, 2000. [PDF]
[5] Michael Brown, Aditi Majumder, Ruigang Yang. "Camera-Based Calibration Techniques for Seamless Multiprojector Displays," IEEE Transactions on Visualization and Computer Graphics, vol. 11,  no. 2,  pp. 193-206,  March/April,  2005. [PDF]


* not yet implemented

1
Hosted by www.Geocities.ws

1