OpenCV: solvePnP unidades tvec e direções dos eixos

Eu estou tentando encontrar a posição relativa da câmera no tabuleiro de xadrez (ou o contrário) - eu me sinto bem com a conversão entre diferentes sistemas de coordenadas, por exemplo. como sugeridoAqui. Decidi usar o tabuleiro de xadrez não apenas para calibração, mas também para a determinação da posição atual, já que posso usar ofindChessboardCorners para obter oimagePoints (e isso funciona bem).

Eu li muito sobre este assunto e sinto que eu entendo osolvePnP saídas (mesmo que eu seja completamente novo paraopenCV e visão computacional em geral). Infelizmente, os resultados que recebo desolvePnP e medindo fisicamente a configuração do teste são diferentes: a translação na direção z é desligada em aprox. 25%.x ey as direções estão completamente erradas - várias ordens de grandeza e direção diferente da que eu li para ser o sistema de coordenadas da câmera (x apontando para cima a imagem, y para a direita, z longe da câmera). A diferença persiste se eu convertertvec ervec a câmera posar em coordenadas mundiais.

Minhas perguntas são:

Quais são as direções dos eixos dos sistemas de coordenadas de câmera e mundo?FazsolvePnP saída a tradução nas mesmas unidades que eu especificar oobjectPoints?Eu especifiquei a origem do mundo como o primeiro dosobjectPoints (um dos cantos do tabuleiro de xadrez). Tudo bem e étvec a tradução para exatamente esse ponto a partir das coordenadas da câmera?

Este é o meu código (eu anexeipro forma como ele não joga nenhuma exceção etc.). Eu usei imagens em escala de cinza para obter a matriz intrínseca da câmera e os coeficientes de distorção durante a calibragem, então decidi executar a localização em tons de cinza também.chessCoordinates é uma lista de localização dos pontos do tabuleiro de xadrez em mm em relação à origem (um dos pontos de canto).camMatrix edistCoefficients vêm da calibração (realizada usando o mesmo tabuleiro de xadrez eobjectPoints).

camCapture=cv2.VideoCapture(0) # Take a picture of the target to get the imagePoints 
tempImg=camCapture.read()
imgPts=[]
tgtPts=[]

tempImg=cv2.cvtColor(tempImg[1], cv2.COLOR_BGR2GRAY)
found_all, corners = cv2.findChessboardCorners(tempImg, chessboardDim )

imgPts.append(corners.reshape(-1, 2))
tgtPts.append(np.array(chessCoordinates, dtype=np.float32))

retval,myRvec,myTvec=cv2.solvePnP(objectPoints=np.array(tgtPts), imagePoints=np.array(imgPts), cameraMatrix=camMatrix, distCoeffs=distCoefficients)

questionAnswers(2)

yourAnswerToTheQuestion