chaehyeonsong / discocal

135 stars 19 forks source link

The results are very poor on my dataset #10

Open zhangzscn opened 1 month ago

zhangzscn commented 1 month ago

We tested this algorithm on the images we collected ourselves and found that the results were very poor. Our calibration board is printed directly, and our camera FOV is approximately 120 degrees. The picture is attached, could you please help me take a look?

./main.out 4 3 4 ../sample_imgs/our2/ 0.1 0.27

calib.io_circles_841x1189_4x3_270_200.pdf

Due to upload restrictions, we have divided the data into several compressed packets. We also set some images that cannot recognize the calibration board to ignore when running the program.

GMSL_IDX0_framegrab_2.zip GMSL_IDX0_framegrab_4.zip GMSL_IDX0_framegrab_53.zip GMSL_IDX0_framegrab_41.zip

chaehyeonsong commented 1 month ago

Hi @zhangzscn . I can't open the first zip file. Therefore, I analyzed the problem based on the others. The problem is that your camera has severe distortion, but you only use the images captured from the similar distance. To get good results, you need some images captured from a close distance. By the way, I updated the code, so you can get proper results running the latest version. This is the result. 1862.181257, 1860.296757, 1871.195180, 1130.211204, 0.356858, -0.332841, 0.146336, -0.041941, 0.005041 Try again with my latest code using new dataset containing close shots!

I think the problem may come from the wrong camera model. Did you check your camera model?

zhangzscn commented 1 month ago

Tried the latest code and did solve the previous problem. From the results, the projection error of your algorithm is 1.541120, and that of Matlab is 2.24.Nice work! My camera model is a pinhole model. Is there a theoretical basis for taking pictures from different distances, or is it empirical?

chaehyeonsong commented 1 month ago

Both. Images taken from close distances are more sensitive to extrinsic values (6D configuration of the board). Therefore the images make the optimization process more robust. However, diverse distances are recommended since the same distance results in an overfitting problem that the camera parameter only fits at a specific distance.

By the way, the final projection error 1.54 is the radius-fixed version results? Our code recalculates the camera parameter if the calibration quality is lower than 80%. Please use the last results :)

zhangzscn commented 1 month ago

yes,final projection error 1.54 is the radius-fixed version results.

Since your method can perform unbiased estimation of the center of a circle, can you help write code to recognize the position of the center of a circle in an image if the camera parameters are known? I want to extend your method to stereo camera calibration.

chaehyeonsong commented 1 month ago

@zhangzscn If you turn on "save_pose" option in main.cpp, you can get the extrinsic value of each target. I refer to OpenCV live show. In this Webinar, I describe the details of code. Furthermore, I plan to extend this code to extrinsic calibration. Within one month, the extrinsic calibration pipeline will be released

zhangzscn commented 1 month ago

Thank you very much. This is a very good paper. Looking forward to the next release.