I am using Charuco board for camera calibration. I discovered that the corner detection (incl sub-pixel accuracy) returned by aruco.interpolateCornersCharuco
is very poor. In the image below, I purely drew the detected charuco corners (white squares).
C:\fakepath\corners_off_iphone.png
I used the code below:
dictionary = cv2.aruco.getPredefinedDictionary(cv2.aruco.DICT_4X4_1000)
board = cv2.aruco.CharucoBoard_create(15, 25, 8, 5, dictionary)
foldername = "C:/Users/mfischer-g/Documents/Calibration/Data/MssCalibrationTests/DeviationsiPhone/"
filename = "charuco2_ps1.jpg"
gray = cv2.cvtColor(cv2.imread(foldername + filename), cv2.COLOR_BGR2GRAY)
if gray is None:
print("Can not read image file.")
sys.exit()
corners, ids, rejectedImgPoints = cv2.aruco.detectMarkers(gray,dictionary)
_, charucoCorners, ids = cv2.aruco.interpolateCornersCharuco(corners, ids, gray, board)
cv2.aruco.drawDetectedCornersCharuco(gray, charucoCorners)
_ = cv2.imwrite(foldername + "detectedMarkers.jpg", gray)
How comes that the detected corners are so far off?