This is a lightweight kinect
calibration method – which is
It’s hacked for processing and works without openCV.
I created this tool because i needed an interactive wall for another project. The alignment between a camera and a projector is normally done by a homographic transformationm which is a standard functionality of the OpenCV library. But since i had problems using OpenCV in processing with my current hard and software setup … i needed to write a quick and easy alternative.
So what this application basically does…IS…it transforms the user’s data (pixel, sceleton) orthogonal to a self defined projectorwall.
Most of the artists and especially beginners within the processing community, tried the wonderfull applications presented at openprocessing.org. The first thing i always tend to do- is to get the non interactive applications -> interactive…by simply replacing any items with mousevariables ;). This kind of “try and play”, helped me a lot learning different concepts and understand other artist’s methods. By the following application you are allowed to simply replace spacial variables of a graphical scetch, with sceleton variables mapped to the wall and discover different possibilities of an interactive wall or TV by yourself.
This is a zip folder, containing the calibration scetch and a demo scetch. The content is only intended to help. Code is based upon the simpleopenNI library by Max Rheiner.Download zip folder
In order to get this working you’ll need:
Ok this should be very easy! The following tutorial assumes that you have the depending libraries up and running…and that you are basically familiar with programming language and processing. We will go through the following steps:
- Calibrate the wall’s orientation
- Calibrate the screen’s dimension
- Investigate possible offsets
I Calibrate the wall’s orientation
Place your camera pointing at the screen/projection in about 2 – 5 meter distance. Run the Calibration Scetch. You will see a live stream of the depth image in 3 dimensional space. Make sure the image covers the hole screen of the desired projection. Within the four corners of the depth image you will find four cubes (sometimes hidden, but always available). Drag and drop all of those cubes on top of the desired wall/plane. You’ll see a blue vector, representing the current orthogonal and ortsVector of the calibration. Use the cursor buttons in order to spin around the wall, and check if the vector is truelly orthogonal to the wall you want to project on. If you are satisfied with the outcome, then simply proceed to the next step of the calibration, by pressing “m”.
Now that you defined the orientation of the wall, you need to define the exact dimensions of the actual screen/projection displaying the content. Drag all four cubes to the desired corners of the projection. If your done with that step…then you are basicall done ;), you can switch back and forth between step one and two by pressing “m”…or press “s”-ave to store your values in “positions.txt” and stop the program if you feel satisfied about your calibration result.
The calibartion of course can have some calculation offset, rooting from inaccuracy and noise. Hence we need to define the offset, representing the amount of inaccuracy in order to get better results. To do so, please turn the value for “CalibrateScreen=true” to false and run the scetch again. Now your calibration values will be loaded and you will see a black screen. Please move your body infront of this screen and you will see a pixel image representing your mask. If there is an offset and this image doesnt fit to your outlines then use the control5 sliders for offsetX and offsetY. If you think the outcome is nice, then press “s” to save the defined offset within the calibration file “positions.txt” and stop the program.
In order to use your calibration setup for the demo, you’ll need to copy and paste the “positions.txt”-calibration file of the calibrate scetch to the demo scetch. Open the demo scetch and run it…Enjoy…or hit me up via mail if you are stressed ;)