This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DLP Calibration with openCV

Other Parts Discussed in Thread: TIDA-00361, DLP-ALC-LIGHTCRAFTER-SDK

Hi, I am trying to calibrate the DLP LightCrafter4500 with my own openCV program. I am going step by step like it is explained in the article from Daniel Moreno and Gabriel Taubin: Simple, Accurate, and Robust Projector-Camera Calibration.

1. Vertical Graycode sequence on a Checkerboard and decode

2. Horizontal Graycode sequence on a Checkerboard and decode

3. Find Checkerboard corners and get Pixel coordinates in Camera system.

4. Use the coordinates from 3.) and find the vertical and horizontal projector pixel from 1.) and 2.)

5. Calculate a homography matrix with every pair of camera and projector points from 4.)

6. performe a perspective transformation of every projector point found in 4.) with the transformation matrix from 5.)

7. do camera calibration with world coordinates from 3.) and transformed projector points from 6.)

My results for the intrinsic matrix are: [547.61,      0,           271,29;
                                                             0 ,          545.30,      353.68;
                                                             0,               0,                1]

The translation vector of the extrinsic parameter is easy to check and it makes also no sense.

The calibration of the Camera works well and the computed parameters makes sense 

I am pretty sure that my decoding of the gray code pattern is working. 

My guess is that it has something to do with the diamond pixel arrangement of the DLP3000 like it's explained in this post: Post

Can someone give me advices to handle this problem?

Thanks in advance

Patrick

 

.

  • Hi Patrick,

    Have you taken a look at TIDA-00361 and the DLP-ALC-SDK(www.ti.com/tool/dlp-alc-lightcrafter-sdk)? The SDK provides the source code for our implementation of the calibration process - you can compare it against what you're doing to see if there is something that helps you out.

    After you've taken a look at how we implement our system, let us know if you have any further questions.

    Thanks,
    Paul
  • Thanks a million. I will check it and come back later.
  • I've checked the code in the SDK. But I am not able to adopt a lot, because the method of calibration is quiet different.

    The DMD has a Resolution of 912x1140 but in physical space the projected Image is wider than high. The distance between a column is double compared to the distance between two rows due to the diamond pixel Arrangement. So if I am just divide the rows by two the Resolution is 912x570 what gives an aspect of 16:10. The same Ratio when I measure the Image in physical space in mm.

    But if I am just divide the row number by two, the results aren't better.

    How to transform Diamond Pixel Array to a rectangular Array, or is somewhere a mistake in my thoughts?

    What happens if the Images are projected with the Video mode and a Resolution of 1280x800? Is there a resampling from Diamond to rectangular Pixel Arrangement?

    Thanks,

    Patrick

  • Patrick,

    For more information on the diamond configuration of the pixels, please check out question three in the FAQ. Here is a picture I like to help illustrate the mapping:

      

    Wouldn't it work to multiply the columns by two instead of dividing the rows? If you assume that each pixel in the x-axis is projected as two pixels for an image of 1824 x 1140 (16:10) then you're accounting for the diamond effect and the width compression. Or, when you make the images that you want to project, simply cut any x-axis feature size (vertical bars, etc) in half. Then when you project and take images, you should be able to map directly back. 

    Using video mode and a resolution of 1280 x 800 causes the device to perform resampling from rectangular input to diamond output.

    Hope that helps,

    Paul