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
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
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
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)
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
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
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
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)])
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
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)