Improved checkerboard detector for camera calibration

asked 2017-03-06 09:55:04 -0500

Steve3nto gravatar image

updated 2017-03-06 12:00:40 -0500


I was wondering if there is a better checkerboard detector to substitute the one that is being used in the node from the ROS image_pipeline.

This is because the calibration is absolutely impossible to carry out for distances larger than 5 meters. The rospy node just does not detect the checkerboard anymore, even though I am using a checkerboard with 108 mm of square size which is quite big.

With Matlab the checkerboard is detected for much larger distances, so I am sure that having a better algorithm to detect the corners of the checkerboard would help.

What would be the best strategy to detect the checkerboard also for large distances? Is this being developed already by someone?

Thanks in advance for your help!

--------------------------- EDIT ---------------------------------
I went through the calibration procedure in the image_pipeline

There is an hard-coded threshold in the is_good_sample method that might be rejecting too many good checkerboard detections. That is one ting that might be improved, modified.

Another problem is the downsample and detect approach, in which the images are scaled back to VGA resolution and then detections are upsampled to original size. I think that really makes it impossible to have good detection for distant objects and it should be avoided for high quality camera calibration.

Has anyone tried to get rid of the downsample and detect method? Is the checkerboard detected better without it? Does it become too slow?

edit retag flag offensive close merge delete


I haven't tracked it down (or looked to see if others had the same problem) and haven't done a robust performance comparison, but I wrote a find chessboard python node that had identical parameters to an older non-ros C++ find chessboard executable and it runs much much slower.

lucasw gravatar image lucasw  ( 2017-03-06 12:14:10 -0500 )edit

I plan on re-writing it in C++ but haven't gotten to it yet. In C++ I had to do a course checkerboard corner finder, then a subpixel pass, the python returns subpixel from findChessboard which may be the source of a performance gap- if there isn't a checkerboard it shouldn't waste cpu on subpixel

lucasw gravatar image lucasw  ( 2017-03-06 12:16:33 -0500 )edit

But the problem for me is not speed/performance. I don't care if the images lag a bit and it doesn't look real time while calibrating. I just care about having the best chessboard detection and calibration result.

Steve3nto gravatar image Steve3nto  ( 2017-03-07 05:40:31 -0500 )edit