Я должен преобразовать координаты изображения в мировые координаты.У меня есть доступ ко всем параметрам камеры, указанным ниже:
py=0.0036 # pixel width and height px py
px=0.0036
focal_length=1777.341982433
fx=focal_length
fy=focal_length
dist_offset=112.6882278 # distance offset.
prince_pt=[954.935281491,558.241833346] #pricipal offset
camera_matrix = [[fx, 0.00000000, prince_pt[0]],
[ 0.00000000, fy, prince_pt[1]],
[ 0.00000000, 0.00000000, 1.00000000]]
dist_coeffs = [[ 0.068732817,
0.139845334,
-0.11738526,
-0.001002139,
-0.001268871]]
roll = 0.0271091714
pitch =0.0188595763
yaw = 3.137739087
YPR=[roll,pitch,yaw]
Мне нужно рассчитать мировые координаты для каждого пикселя, используя матрицу вращения и собственную матрицу камеры.Я рассчитываю матрицу вращения, используя заданные параметры шага рыскания и крена.Я преобразую эти углы Эйлера в матрицу вращения, как показано ниже
print ("roll = ", roll)
print ("pitch = ", pitch)
print ("yaw = ", yaw)
print( "")
def eulerAnglesToRotationMatrix(theta) :
R_x = np.array([[1, 0, 0 ],
[0, math.cos(theta[0]), -math.sin(theta[0]) ],
[0, math.sin(theta[0]), math.cos(theta[0]) ]
])
R_y = np.array([[math.cos(theta[1]), 0, math.sin(theta[1]) ],
[0, 1, 0 ],
[-math.sin(theta[1]), 0, math.cos(theta[1]) ]
])
R_z = np.array([[math.cos(theta[2]), -math.sin(theta[2]), 0],
[math.sin(theta[2]), math.cos(theta[2]), 0],
[0, 0, 1]
])
RotationMat = np.dot(R_z, np.dot( R_y, R_x ))
return RotationMat
R=eulerAnglesToRotationMatrix(YPR)
print ("Rotation matrix \n", R)
После получения матрицы поворота R. Пусть «I» будет координатами изображения в пикселях.«W» - мировые координаты.'C' - внутренняя матрица камеры.Затем я вычисляю мировые координаты W по C'R'I = W, где C '= инверсия внутренней матрицы камеры и R' = инверсия матрицы вращения.Моя камера находится в центре мира, поэтому я не рассматриваю матрицу перевода.
Код для вычисления мировых координат приведен ниже:
Cam_intrisic=np.asanyarray(camera_matrix)
print("Camera Intrinsic \n",Cam_intrisic)
iCam_intrinsic=inv(Cam_intrisic)
iR=inv(R)
print("Inverse of Rotation matrix \n",iR)
print(iCam_intrinsic)
print("Inverse Camera matrix \n",iCam_intrinsic)
def worldCordinate(a,b):
pixelPt = np.ones((3, 1))
pixelPt[0, 0] = a
pixelPt[1, 0] = b
tempMat=np.matmul (iR,np.matmul(iCam_intrinsic, pixelPt))
return tempMat
a=1080
b=0
print("Input pixel: ",a,b )
world=worldCordinate(a,b)
print("\n World test co-ordinates ", world)
Пожалуйста, дайте мне знать, куда я идунеправильно.Я не получаю точные координаты относительно камеры.