I do not understand why this image is failing to detect chessboard corners.
I know it is blurry, but I made it zoom to crop specifically around the chessboard in the image. I cannot wrap my head around why this being incapable of finding the chessboard corners. I feel that the function itself has to be more robust and capable.
I’ve found the ChAruco calibration targets to be much better - the aruco markers are more easily recognized and can be used go guide the rest of the process. The plain chessboard detection just isn’t as robust in my experience.
One thing that might be tripping you up in this case is that I think you need a border of white around the chessboard. If your squares aren’t surrounded by white pixels (or are too close to the edge of the image) you might run into problems.
Again, the ChAruco process is what I’d use. It’s not perfect, but I’ve used it extensively and to good effect.
What specifically are you trying to accomplish? (If the chessboard detection worked, what happens next?)
Interesting, I didn’t even know about ChAruco. My only fear is the resolution, especially with the Aruco binary targets. Also the white background is a great idea, that could help immensely.
Ultimately, what I am trying to do is gather the coordinates from the chessboards. I have a reference image where the chessboard corners should be and those coordinates are saved in a text file. Then, when I take a test image, I save the coordinates on that image in a text file as well. The camera could be slightly angled, so the coordinates could differ. Then I create a homography matrix from those coordinates and use perspective warp to essentially make the test image look like the ref image (perspective wise). My group has done all our calculations at the angle and position of the camera in the reference image. So this ensures that the test image will be like that (as long as the image is in a linear zone, which I believe you shed some light about FOVs less than 90 degrees can assume linearity).
Here is one of the images:
Now this is a mock set up of how big the screen will be and where the camera will be as well. Surprisingly, even after cropping each chessboard, they could not be found with the find chessboard function. It has to be the resolution and them being so small. I have a work around that utilizes the geometry and area of the chessboard, but I would love to use an actual function.
I’ve done something like this before - maybe it would be helpful for your situation.
Create a pattern with Aruco markers and some high-quality “chessboard corners” in between. The Aruco markers define a line segment in the world, with the fiducials at known positions on the (world) line. If your setup is always more or less as pictured (roughly orthogonal view of the plane) then you can simply linearly interpolate between the image coordinates of the two Arucos to get a pretty good estimate of where the fiducial corners will be. (If you have perspective, you will have to handle that, since the fiducial coordinates will not be equally spaced along the projected line).
Using your estimated position for each fiducial point, run goodFeaturesToTrack in a small window. Then run cornerSubpix on the best feature, again on a small window. The fiducials are designed with curved edges so as to avoid giving a high response to goodFeaturesToTrack - there should be one clear winner.
You could have 4 strips (top/bottom/left/right), each with unique Arucos. From there you should be able to get a pretty good homography estimate.
The hard part about this in your case is getting good ground truth on the fiducial locations. For one, the printing won’t be very accurate (and the paper / substrate can deform, etc..), but also the placement on the whiteboard will be difficult to do accurately.
In my case I was using a camera that had been very accurately calibrated (intrinsics and extrinsics), so I was able to use it to measure the actual locations of the fiducials, which I then used later as ground truth for calibration as the camera moved from place to place.
Good luck.