Asymmetric Circle Grid Calibration

Thanks so much!

It’s only thanks to your post that I came to realize what the dimensions for the detection function findCirclesGrids should be, and with that accounted for, this pattern now works for me:

found, centers = cv2.findCirclesGrid(grayscale_image, (4, 29), flags = cv2.CALIB_CB_ASYMMETRIC_GRID | cv2.CALIB_CB_CLUSTERING, blobDetector=detector)

Also realizing that it expects the odd rows to be offset from both sides, i.e. have one dot less than the even rows.

So, thanks a lot.

This works for me off a 10.9 inch tablet.

Knowing this, I think that other patterns will work for me now too, perhaps not only ones adhering to this spacing ratio, but I’ll check.

I’m still short of getting my calibration converge, perhaps my criteria for convergence isn’t smart enough:

        if len(self._imagePoints) >= self._MIN_VIEWS:
            rms, K, dist, rvecs, _ = cv2.calibrateCamera(self._objectPoints,
                                                         self._imagePoints,
                                                         grayscale_image.shape[::-1], None, None)
            self._rvecs = rvecs  # store for angle coverage
            if self._last_rms is not None and abs(self._last_rms - rms) < self._EPS_RMS:
                self.finished, self._K, self._dist, self._last_rms = True, K, dist, rms
            else:
                self._K, self._dist, self._last_rms = K, dist, rms

Anyway, thanks for enabling the detection!

1 Like