我正在嘗試使用 KITTI 開放數(shù)據(jù)集來進行深度單眼視覺測距 我嘗試使用此repo它使用此代碼將姿勢轉(zhuǎn)換為 6DoFdef get6DoFPose(self, p):? ? pos = np.array([p[3], p[7], p[11]])? ? R = np.array([[p[0], p[1], p[2]], [p[4], p[5], p[6]], [p[8], p[9], p[10]]])? ? angles = self.rotationMatrixToEulerAngles(R)? ? return np.concatenate((pos, angles))def isRotationMatrix(self, R):? ? Rt = np.transpose(R)? ? shouldBeIdentity = np.dot(Rt, R)? ? I = np.identity(3, dtype=R.dtype)? ? n = np.linalg.norm(I - shouldBeIdentity)? ? return n < 1e-6def rotationMatrixToEulerAngles(self, R):? ? assert (self.isRotationMatrix(R))? ? sy = math.sqrt(R[0, 0] * R[0, 0] + R[1, 0] * R[1, 0])? ? singular = sy < 1e-6? ? if not singular:? ? ? ? x = math.atan2(R[2, 1], R[2, 2])? ? ? ? y = math.atan2(-R[2, 0], sy)? ? ? ? z = math.atan2(R[1, 0], R[0, 0])? ? else:? ? ? ? x = math.atan2(-R[1, 2], R[1, 1])? ? ? ? y = math.atan2(-R[2, 0], sy)? ? ? ? z = 0? ? return np.array([x, y, z], dtype=np.float32)模型輸出也是相同的格式(6DoF)問題是如何評估 6DoF 結(jié)果,因為此評估工具 ( kitti-odom-eval ) 僅支持以下兩種格式# First format: skipping frames are allowed99 T00 T01 T02 T03 T10 T11 T12 T13 T20 T21 T22 T23?# Second format: all poses should be included in the fileT00 T01 T02 T03 T10 T11 T12 T13 T20 T21 T22 T23?
1 回答

慕碼人2483693
TA貢獻1860條經(jīng)驗 獲得超9個贊
您的模型輸出是與平移相關(guān)的旋轉(zhuǎn)歐拉角的相對位置。
為了進行評估,您必須:
將您的旋轉(zhuǎn)和平移轉(zhuǎn)換為齊次矩陣 4x4 -> 為此,您必須將歐拉角轉(zhuǎn)換為旋轉(zhuǎn)矩陣,然后將旋轉(zhuǎn)矩陣 3x3 與平移向量 1x3 連接起來,并附加一個額外的行 [0,0,0,1]矩陣得到齊次矩陣。
將您的相對位置 4x4 轉(zhuǎn)換為絕對位置-> 您在Tk中的絕對位置是相對位置Trel與先前絕對位置Tk-1的點積,其中 T 是幀索引為 k 的齊次矩陣
Tk = Trel @ Tk-1
第一個絕對位置取決于你的數(shù)據(jù)集和你想做的工作。默認情況下,基本絕對位置是 4x4 二維數(shù)組,對角線為 1,其他位置為零(在 numpy np.eye(4) 中)因此,要轉(zhuǎn)換序列中的整個相對位置,您需要將基本絕對位置乘以所有相對位置
Tk5 = Trel @ Tk4 # 其中 Trel 是第 4 幀和第 5 幀之間的相對位置
當?shù)?2 步完成后,您將擁有包含Tn絕對位置的絕對位置。那么你必須展平每個齊次 4x4 矩陣并得到一個包含 12 個元素的向量,并將每個展平的齊次 4x4 矩陣寫入一個文件作為結(jié)果!
添加回答
舉報
0/150
提交
取消