Overview

As mentioned previously, there are two main steps in generating a seamless display. The first is camera-based calibration. This involves a user-level application that gathers the required geometric data to geometrically register each projector into the camera image coordinate space and photometric data for blending or luminance smoothing.

    Be aware that the calibration procedures that collect the geometric and photometric information need to be performed only periodically whenever there is a change in the display set-up. It is not critical to perform the calibration procedure in real time. Therefore, the overall calibration procedure can often take several minutes to perform information gathering from the camera as well as the necessary computation.

Algorithms

The purpose of calibration is to build the correspondence between projector coordinate and camera coordinate. So during the calibration procedure, we project a few feature images with the coordinate of the features (white blobs in black background) in projector space manually specified. The remaining question is how to detect the features in camera image and build the correspondence between the projected features and detected features.

    Detecting the feature is relatively simple. We first project feature image with all the features (all the white blobs, 10x10, for example), then we grab the camera image and convert to grey image (if original is color) and then to binary image. If the environment lighting and camera exposure are carefully tuned, all the pixels of features will be white and all other pixels will be black. Then we use the labeling algorithm to detect all connecting components in the image. The labeling algorithm is classic and you can find many introduction about it from the web. You can also refer to our codes for more details. After detecting all the connecting components, each of them is regarded as one feature. The total number of features detected should equal to the number we projected. The average coordinate of all the pixels inside the connecting component (the center of connecting component) is the coordinate of the feature in the camera image. We also record the bounded box of each feature for later detection.

    The bigger challenge is to determine correspondence between the projected feature and detected feature in camera coordinates. We use a binary encoding scheme to efficiently build this correspondence. First, we assign an ID for each feature in projector coordinate, for example, 1~100 for 100 features. We rewrite this ID to binary format in 7 bits, for example, 0000111 for ID 7. Then, we project a image with all the features and grab the camera image accordingly. After analysing the image with labeling algorithm mentioned previously, we are able to record the bounded box for each feature. Next, we project a feature image for each bit (7 images for 7 bits). For each feature, if the corresponding bit of the binary format of its ID equals to 1, we show this feature (the white blob) in the feature image we are going to project; if it equals to 0, we eliminate it. The following figure shows the full feature image and one feature image for each bit. After projecting the feature image of specified bit and grabbing the camera image accordingly, we detect whether a feature is shown in the bounded box generate from the full feature image. If the feature is shown, we put a "1" in that bit of the ID associated with the feature; otherwise, we put a "0". In this way, we can recover the specified bit of all the features. After repeat this process for all the bits (7 bits for 100 features), we can recover the ID of all the features in the camera image. Now we can assure that the feature in projector is corresponding to the feature with the same ID in camera image. We associate their coordinate in projector space and camera space together and successfully build the correspondence. (You can find more details about this algorithm in reference [1])

Figure 1. Projector-to-camera mapping registration procedure using binary encoding scheme

System Configuration

There are three typical configurations you might consider to play with. The first configuration is using only one projector (single-projector configuration). The second configuration is using multiple projectors, each driven by one PC (multi-projector multi-PC configuration). The third configuration is using multiple projectors driven by one PC with multiple outputs (multi-projector single-PC configuration), for example, we use four projectors driven by one PC supporting dual graphic cards while each card has dual outputs.

Single-Projector Configuration

Single projector configuration uses only one PC as both master PC and rendering PC, as shown in the following figure:

Figure 2. Single-Projector Configuration

    Though this configuration could not provide a larger display (even slightly smaller than the original display area), it is very helpful for beginners to understand the structure and concept of the system. And the codes are relative simple, so they are easy to read, understand and modify. Meanwhile, the hardware involved in this configuration is limited, so it's quite straightforward to set up the system. After finish the system, you could expect that no matter how you placed the projector, the imagery in the camera view is geometrically undistorted. Since there is only one projector in this case, no photometric correction needs to be done.

Multi-Projector Multi-PC Configuration

Multi-Projector Multi-PC configuration consists of an individual master PC and one rendering PC for each projector. It's the most common and practical configuration, as shown in the following figure:

Figure 3. Multi-Projector Multi-PC Configuration

    The number of rendering PCs is flexible and can vary from 1 to many. You can choose it according to your intention and available hardware (typically we adopt 4 projectors as a 2 by 2 array). All the projectors need to be registered in the camera coordinate space, so they will project the same feature images as previous configuration, one by one in the order specified in the configuration file. One result file containing geometric information and one alpha image for each projector containing photometric information will generated in the calibration procedure.

Multi-Projector Single-PC Configuration

Multi-Projector single-PC configuration uses only one PC to drive multiple projectors, as shown in the following figure:

Figure 4. Multi-Projector Single-PC Configuration

    There are some tricks in this configuration. It relies on the graphic card to support the function of combining all the four outputs into a large virtual desktop. Our NVIDIA GeForce 8800GTS support this feature pretty well (and I believe most mordern graphic cards do). Meanwhile, the graphic memory on the two card are isolated and any geometric or photometric correction that need to refer to the pixels in the texture buffer of the other card is impossible. This is not a problem in the Calibration and Image Viewer application, but it lead to the 3D Model Viewer unrealistic under this configuration.

Download

Please go to the downloadpage.

How to use the code

Before you start, you should first choose the configuration you would like to adopt according to your intention and available hardware. Single-projector configuration is simplified and requires the minimum hardware, so it is a good place to start with. Multi-projector multi-PC configuration is the practical configuration and should be tried out ultimately if you have enough PCs and projectors. Multi-projector single-PC configuration is helpful to understand the calibration technology and easy to set up if you have the required graphics cards. Below are the step-by-step instructions about how to use the code.

Single-Projector Configuration:

  1. Download the binary package named Calibration from the above "Download" Section;
  2. Connect the PC, projector and camera as showed in Figure 2;
  3. Make sure that the driver of the camera is properly installed and can be supported by OpenCV;
  4. Make sure that the camera is placed properly that it can see the whole display area of the projector and no obstructing white and/or bright object is in the camera's view;
  5. Run the calibration program from command line with:
    Calibration.exe result.txt pic.bmp
  6. If everything goes well, you will see the calibration procedure goes on and finally the pic.bmp shown on screen;
  7. In less than one minute, you will get the calibration result from the file result.txt at the same directory.

Multi-Projector Multi-PC Configuration:

  1. Download the corresponding binary package named CalibClient (control client running on master PC) and CalibServer(render server running on render PC) from the above "Download" Section;
  2. Connect the PCs, projectors and camera as showed in Figure 3;
  3. Make sure that the driver of the camera is properly installed and can be supported by OpenCV;
  4. Make sure that the camera is placed properly that it can see the whole display area of all the projectors and no obstructing white and/or bright object is in the camera's view;
  5. Run the following program on all the rendering PC from command line with:
    RenderServer.exe
  6. Modify the configuration file named Client4.cfg with the help of the comments according to your actual configuration (IP address, port, etc);
  7. Run the control client program on the master PC from command line with:
    CalibClient.exe Client4.cfg
  8. If everything goes well, you will see the calibration procedure goes on;
  9. In a few minutes, you will get the calibration result from the file result2x2.txt (as specified in the configuration file) and the alpha image named Px.bmp at the same directory.

Multi-Projector Single-PC Configuration:

  1. Download the corresponding binary package named MMonCalibration from the above "Download" Section;
  2. Connect the PCs, projectors and camera as showed in Figure 4;
  3. Make sure that the driver of the camera is properly installed and can be supported by OpenCV;
  4. Make sure that the camera is placed properly that it can see the whole display area of all the projectors and no obstructing white and/or bright object is in the camera's view;
  5. Make sure that you have multiple graphics cards installed properly;
  6. From the desktop of your Windows XP, go to "Right-Click->Properties->Settings", enable all the connected monitors by select the "Extend my Windows desktop onto this monitor" check box; Make sure the top left projector is set as primary display and drag the monitor icons to match the physical arrangement;
  7. Run the following program on the PC from command line with:
    MMonCalibration.exe 2 2 result.txt
  8. If everything goes well, you will see the calibration procedure goes on;
  9. In a few minutes, you will get the calibration result from the file resul.txt (as specified in the command line) and the alpha image named Px.bmp at the same directory.

Multi-Projector Based Display Code ---- Calibration的更多相关文章

  1. Multi-Projector Based Display Code ------- Home

    Overview This project provides you with the tools and techniques you need to create your own large-a ...

  2. Multi-Projector Based Display Code ---- ImageViewer

    Overview Image viewer is a typical application for large display. It makes use of the high-resolutio ...

  3. Multi-Projector Based Display Code ---- FAQ

    Frequently Asked Question How do I know that my camera has a proper lens? Answer: If you can see exa ...

  4. Multi-Projector Based Display Code ---- ModelViewer

    Overview Model viewer is another application we provided for large display. It is designed for viewi ...

  5. Multi-Projector Based Display Code ---- Download

    The code providing are for your reference. Please download the code according to your hareware confi ...

  6. 160多条Windows 7 “运行”命令

    160多条Windows 7 “运行”命令: 删除或更改应用程序 = control appwiz.cpl 添加设备 = devicepairingwizard  蓝牙文件传输 = fsquirt  ...

  7. Peer Code Reviews Made Easy with Eclipse Plug-In

    欢迎关注我的社交账号: 博客园地址: http://www.cnblogs.com/jiangxinnju/p/4781259.html GitHub地址: https://github.com/ji ...

  8. Code Pages

    https://docs.microsoft.com/en-us/windows/desktop/intl/code-pages Most applications written today han ...

  9. 设备管理 USB ID

    发现个USB ID站点,对于做设备管理识别的小伙伴特别实用 http://www.linux-usb.org/usb.ids 附录: # # List of USB ID's # # Maintain ...

随机推荐

  1. Redis docker安装和主要功能

    docker安装redis 启动docker,下载redis镜像:docker pull redis 然后运行镜像并发布端口6379: 然后运行redis-cli(这是Redis的一个命令行管理工具) ...

  2. 解决git反复输入密码的问题

    打开git命令面板 cd到项目根目录 $ git config --global credential.helper store然后只输入一次密码,后面就不需要了

  3. MVC中 jquery validate 不用submit方式验证表单或单个元素

    <script src="/Scripts/jquery-1.4.4.js"></script> <script src="/Scripts ...

  4. 查看linux空间大小

    du -sh : 查看当前目录总共占的容量.而不单独列出各子项占用的容量 du -lh --max-depth=1 : 查看当前目录下一级子文件和子目录占用的磁盘容量.

  5. 批量导出hive表的建表语句

    转的这里的 首先先导出所有的table表 hive -e "use xxxdb;show tables;" > tables.txt 然后再使用hive内置语法导出hive表 ...

  6. Imcash:比特币减半 四年机遇你能否抓住?

    减半到底是什么? 2010来,比特币已有4次下跌幅度达70%或更高. 2012年的11月份比特币减半,诞生了一次上涨10倍有余的超级牛市. 2016年7月,历史又是如此的相似,比特币产量又迎来了减半, ...

  7. GA:GA优化BP神经网络的初始权值、阈值,从而增强BP神经网络的鲁棒性—Jason niu

    global p global t global R % 输入神经元个数,此处是6个 global S1 % 隐层神经元个数,此处是10个 global S2 % 输出神经元个数,此处是4个 glob ...

  8. C. Queen Codeforces Round #549 (Div. 2) (搜索)

    ---恢复内容开始--- You are given a rooted tree with vertices numerated from 11 to nn . A tree is a connect ...

  9. 20172328 2018-2019《Java软件结构与数据结构》第一周学习总结

    20172328 2018-2019<Java软件结构与数据结构>第一周学习总结 概述 Generalization 本周学习了软件质量.数据结构以及算法分析的具体内容,主要依托于所用教材 ...

  10. aspnet mvc 中 跨域请求的处理方法

    ASP.NET 处理跨域的两种方式    方式1,后端程序处理.原理:给响应头加上允许的域即可,*表示允许所有的域                 定义一个cors的过滤器 加在在action或者co ...