两种版本的recoverpose给出不同的结果

时间:2019-04-26 15:08:56

标签: python opencv pose-estimation

我正在尝试使用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的默认值是什么。是否有人对什么是错误的或如何进行有任何想法?

0 个答案:

没有答案