0

I have been working on performing camera calibration using ChAruCo boards.

Following the code here (my commented version is shown below), it appears that only every other image is used when performing the camera calibration - due to the decimator.

What could be a reason for this? Other than to save processing power, which seems unnecessary since this step is only performed once.

def read_chessboards(chessboard_images):
# Charuco base pose estimation.

print("POSE ESTIMATION STARTS:")

# Declare lists to store corner locations and IDs
allCorners = []
allIds = []
decimator = 0

# SUB PIXEL CORNER DETECTION CRITERION
criteria = (cv2.TERM_CRITERIA_EPS + cv2.TERM_CRITERIA_MAX_ITER, 100, 0.00001)

# for each of the chessboard images
for im in chessboard_images:
    print("=> Processing image {0}".format(im))
    frame = cv2.imread(im)                          # read current image into frame variable
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # convert to grayscale
    corners, ids, rejectedImgPoints = cv2.aruco.detectMarkers(gray, ARUCO_DICT)  # detect markers present in image

    # if there are any markers detected
    if len(corners) > 0:
        # SUB PIXEL DETECTION
        for corner in corners:
            # refine corner locations
            # TODO: check if this works
            cv2.cornerSubPix(gray, corner,
                             winSize=(3, 3),
                             zeroZone=(-1, -1),
                             criteria=criteria)

        # interpolate position of ChArUco board corners.
        res2 = cv2.aruco.interpolateCornersCharuco(corners, ids, gray, board)
        print(f'Charuco corners at: {res2}')

        # if 3+ corners are detected, add to allCorners list for every other image
        if res2[1] is not None and res2[2] is not None and len(res2[1]) > 3 and decimator % 1 == 0:
            allCorners.append(res2[1])
            allIds.append(res2[2])

    # why only every other chessboard image?
    decimator += 1

imsize = gray.shape
return allCorners, allIds, imsize
x51
  • 1

1 Answers1

0

Just realized that x % 1 always evaluates to 0, so it doesn't actually do anything. I guess it was included as an optional feature - if you change 1 to some other number.

x51
  • 1