我正在尝试使用python和opencv运行Kitti里程表数据集 我已经从https://github.com/uoip/monoVO-python复制了一些代码 效果很好。 我想看点云,所以我尝试使用提供点云的其他版本的“恢复”。代码的关键部分在下面
def processFrame(self, frame_id):
self.px_ref, self.px_cur = featureTracking(self.last_frame, self.new_frame, self.px_ref)
E, mask = cv2.findEssentialMat(self.px_cur, self.px_ref, focal=self.focal, pp=self.pp, method=cv2.RANSAC, prob=0.999, threshold=1.0)
# original version of recoverpose
_, R, temp, mask1 = cv2.recoverPose(E, self.px_cur, self.px_ref, focal=self.focal, pp = self.pp)
t = temp.ravel()
# new version of recoverpose
_,R1, temp1, mask1, foundPts = cv2.recoverPose(E,self.px_cur, self.px_ref,
cameraMatrix = self.cam.K,
distanceThresh = 0.0,
mask = mask)
t1 = temp1.ravel()
print('R,t diff')
print(R-R1)
print(t-t1)
print('R,R1')
print(R)
print(R1)
程序开始产生垃圾,所以我添加了打印语句。 下面给出前两个调用的输出。
R,t差异 [[2. 0. -0.04]
[-0。 2. 0.05]
[-0.03 0.06 0.]]
[0。 0. 0。]
R,R1
[[1. 0. -0。]
[-0。 1. -0。]
[0. 0. 1。]]
[[-1。 -0。 0.04]
[0. -1。 -0.06]
[0.04 -0.06 1.]]
R,t diff
[[0。 0. 0。]
[0。 0. 0。]
[0。 0. 0。]]
[0。 0. 0。]
R,R1
[[1..0。 -0。]
[0. 1. -0。]
[0. 0. 1。]]
[[1..0。 -0。]
[0. 1. -0。]
[0. 0. 1。]]
新行有时(但不总是)提供不同的姿势,看起来好像在相机后面。我尝试过不使用遮罩(mask = None),并且尝试了distanceThresh的其他值。我找不到distanceThresh的默认值是什么。是否有人对什么是错误的或如何进行有任何想法?