def match0(self, af0kp, af0descriptors, af1kp, af1descriptors, wide = False):
    """
    Given keypoints and descriptors for af0 and af1, returns
    a list of pairs *(a,b)*, where
    *a* is an index into this *af0*'s keypoints, and
    *b* is an index into *af1*'s keypoints.
    """

    if af0kp == [] or af1kp == []:
      return []
    if wide:
      xs = self.wxs
      ys = self.wys
    else:
      xs = self.xs
      ys = self.ys

    self.calls += 1
    self.timer['Match'].start()
    Xs = vop.array([k[0] for k in af1kp])
    Ys = vop.array([k[1] for k in af1kp])
    pairs = []
    matcher = self.desc2matcher(af1descriptors)
    for (i,(ki,di)) in enumerate(zip(af0kp, af0descriptors)):
      predX = (abs(Xs - ki[0]) < xs)
      predY = (abs(Ys - ki[1]) < ys)
      hits = vop.where(predX & predY, 1, 0).tostring()
      best = self.search(di, matcher, hits)
      if best != None:
        pairs.append((i, best[0], best[1]))
    self.timer['Match'].stop()
    return pairs
Beispiel #2
0
 def match(self, af0, af1):
     Xs = vop.array([k[0] for k in af1.kp])
     Ys = vop.array([k[1] for k in af1.kp])
     pairs = []
     for (i, (ki, di)) in enumerate(zip(af0.kp, af0.descriptors)):
         # hits = (Numeric.logical_and(Numeric.absolute(NXs - ki[0]) < 64, Numeric.absolute(NYs - ki[1]) < 32)).astype(Numeric.UnsignedInt8).tostring()
         predX = (abs(Xs - ki[0]) < 64)
         predY = (abs(Ys - ki[1]) < 32)
         hits = vop.where(predX & predY, 1, 0).tostring()
         best = VO.sad_search(di, af1.descriptors, hits)
         if best != None:
             pairs.append((i, best, 0))
     return pairs
Beispiel #3
0
 def match(self, af0, af1):
     Xs = vop.array([k[0] for k in af1.kp])
     Ys = vop.array([k[1] for k in af1.kp])
     pairs = []
     for (i, ki) in enumerate(af0.kp):
         # hits = (Numeric.logical_and(Numeric.absolute(NXs - ki[0]) < 64, Numeric.absolute(NYs - ki[1]) < 32)).astype(Numeric.UnsignedInt8).tostring()
         predX = (abs(Xs - ki[0]) < 64)
         predY = (abs(Ys - ki[1]) < 32)
         hits = vop.where(predX & predY, 1, 0).tostring()
         for (j, c) in enumerate(hits):
             if ord(c) != 0:
                 pairs.append((i, j))
     return pairs
Beispiel #4
0
 def f_uvd(f):
     d_str = "".join([chr(min(x / 4, 255)) for x in f.disp_values])
     d = vop.array(
         Image.fromstring("L", (640, 480),
                          d_str).resize(chipsize, Image.NEAREST).tostring())
     f_valid = d != 255.0
     f_d = d / 4
     u = vop.duplicate(vop.arange(chipsize[0]), chipsize[1]) * factor
     v = vop.replicate(vop.arange(chipsize[1]), chipsize[0]) * factor
     i = vop.array(
         Image.fromstring("L", (640, 480), f.rawdata).resize(
             chipsize, Image.NEAREST).tostring()) / 255.
     return (f_valid, u, v, f_d, i)
Beispiel #5
0
 def match(self, af0, af1):
   Xs = vop.array([k[0] for k in af1.kp])
   Ys = vop.array([k[1] for k in af1.kp])
   pairs = []
   for (i,(ki,di)) in enumerate(zip(af0.kp,af0.descriptors)):
     # hits = (Numeric.logical_and(Numeric.absolute(NXs - ki[0]) < 64, Numeric.absolute(NYs - ki[1]) < 32)).astype(Numeric.UnsignedInt8).tostring()
     predX = (abs(Xs - ki[0]) < 64)
     predY = (abs(Ys - ki[1]) < 32)
     hits = vop.where(predX & predY, 1, 0).tostring()
     best = VO.sad_search(di, af1.descriptors, hits)
     if best != None:
       pairs.append((i, best, 0))
   return pairs
Beispiel #6
0
 def match(self, af0, af1):
   Xs = vop.array([k[0] for k in af1.kp])
   Ys = vop.array([k[1] for k in af1.kp])
   pairs = []
   for (i,ki) in enumerate(af0.kp):
     # hits = (Numeric.logical_and(Numeric.absolute(NXs - ki[0]) < 64, Numeric.absolute(NYs - ki[1]) < 32)).astype(Numeric.UnsignedInt8).tostring()
     predX = (abs(Xs - ki[0]) < 64)
     predY = (abs(Ys - ki[1]) < 32)
     hits = vop.where(predX & predY, 1, 0).tostring()
     for (j,c) in enumerate(hits):
       if ord(c) != 0:
         pairs.append((i, j))
   return pairs
Beispiel #7
0
 def match(self, af0, af1):
   if af0.kp == [] or af1.kp == []:
     return []
   Xs = vop.array([k[0] for k in af1.kp])
   Ys = vop.array([k[1] for k in af1.kp])
   pairs = []
   for (i,(ki,di)) in enumerate(zip(af0.kp,af0.descriptors)):
     predX = (abs(Xs - ki[0]) < 64)
     predY = (abs(Ys - ki[1]) < 32)
     hits = vop.where(predX & predY, 1, 0).tostring()
     best = self.search(di, af1, hits)
     if best != None:
       pairs.append((i, best[0], best[1]))
   return pairs
Beispiel #8
0
    def setNumRansacIterations(self, i):
        """
    Sets the number of RANSAC iterations.
    """
        self.ransac_iterations = i

        # random.random is relatively slow, so run it here and keep the
        # values in r0,r1,r2.
        self.r0 = vop.array(
            [self.rnd.random() for i in range(self.ransac_iterations)])
        self.r1 = vop.array(
            [self.rnd.random() for i in range(self.ransac_iterations)])
        self.r2 = vop.array(
            [self.rnd.random() for i in range(self.ransac_iterations)])
Beispiel #9
0
 def scavenger(self, diff_pose, frame):
   af0 = self.keyframe
   af1 = frame
   Xs = vop.array([k[0] for k in af1.kp])
   Ys = vop.array([k[1] for k in af1.kp])
   pairs = []
   fwd_pose = ~diff_pose
   for (i,(ki,di)) in enumerate(zip(af0.kp,af0.descriptors)):
     (x,y,d) = self.cam.cam2pix(*fwd_pose.xform(*self.cam.pix2cam(*ki)))
     predX = (abs(Xs - x) < 4)
     predY = (abs(Ys - y) < 4)
     hits = vop.where(predX & predY, 1, 0).tostring()
     best = self.descriptor_scheme.search(di, af1, hits)
     if best != None:
       pairs.append((i, best[0], best[1]))
   self.pairs = [(i0,i1) for (i0,i1,d) in pairs]
   solution = self.solve(af0.kp, af1.kp, self.pairs)
   return solution
 def scavenger(self, diff_pose, af0, af1):
     Xs = vop.array([k[0] for k in af1.features()])
     Ys = vop.array([k[1] for k in af1.features()])
     pairs = []
     fwd_pose = ~diff_pose
     ds = af1.descriptor_scheme
     matcher = ds.desc2matcher(af1.descriptors())
     for (i, (ki, di)) in enumerate(zip(af0.features(), af0.descriptors())):
         (x, y,
          d) = self.cam.cam2pix(*fwd_pose.xform(*self.cam.pix2cam(*ki)))
         predX = (abs(Xs - x) < 4)
         predY = (abs(Ys - y) < 4)
         hits = vop.where(predX & predY, 1, 0).tostring()
         best = ds.search(di, matcher, hits)
         if best != None:
             pairs.append((i, best[0], best[1]))
     self.pairs = [(i0, i1) for (i0, i1, d) in pairs]
     if False:
         import pylab
         f0, f1 = af0, af1
         for (a, b) in self.pairs:
             pylab.plot([f0.features()[a][0],
                         f1.features()[b][0]],
                        [f0.features()[a][1],
                         f1.features()[b][1]])
         pylab.imshow(numpy.fromstring(af0.lf.tostring(),
                                       numpy.uint8).reshape(480, 640),
                      cmap=pylab.cm.gray)
         pylab.scatter([x for (x, y, d) in f0.features()],
                       [y for (x, y, d) in f0.features()],
                       label='%d kp' % f0.id,
                       c='red')
         pylab.scatter([x for (x, y, d) in f1.features()],
                       [y for (x, y, d) in f1.features()],
                       label='%d kp' % f1.id,
                       c='green')
         pylab.legend()
         pylab.show()
     solution = self.solve(af0.features(), af1.features(), self.pairs)
     return solution
Beispiel #11
0
def vop3(L):
    """ Turn a list of triplets into a triplet of vop arrays """
    x0 = vop.array([x for (x, _, _) in L])
    y0 = vop.array([y for (_, y, _) in L])
    z0 = vop.array([z for (_, _, z) in L])
    return (x0, y0, z0)