Improved checkerboard detector for camera calibration
Hello!
I was wondering if there is a better checkerboard detector to substitute the one that is being used in the cameracalibrator.py node from the ROS imagepipeline.
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 isgoodsample 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?
Asked by Steve3nto on 2017-03-06 10:55:04 UTC
Comments
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.
Asked by lucasw on 2017-03-06 13:14:10 UTC
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 subpixelAsked by lucasw on 2017-03-06 13:16:33 UTC
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.
Asked by Steve3nto on 2017-03-07 06:40:31 UTC