Esempio n. 1
0
    def _predict_neighbours(self, a, b, new_corners):
        if a == b + 1 or (b == 3 and a == 0):
            a, b = b, a
        na = (a + 3) % 4
        v1 = new_corners[na].get_prediction_vector(False, self.corners[na])
        nb = (b + 1) % 4
        v2 = new_corners[nb].get_prediction_vector(True, self.corners[nb])
        ap = add(new_corners[na].p, v1)
        bp = add(new_corners[nb].p, v2)

        cor_a = Corner([new_corners[na].p, ap, bp], 1,
                                imgtime=new_corners[na].time)
        cor_b = Corner([ap, bp, new_corners[nb].p], 1,
                                imgtime=new_corners[na].time)
        cor_b.is_predicted = cor_a.is_predicted = True

        cor_a.compute_change(self.corners[a], self.image)
        cor_b.compute_change(self.corners[b], self.image)
        if cor_a.different:
            if cor_b.different: return
            else:
                new_corners[b] = cor_b
                self._predict_one(a, new_corners)
        else:
            new_corners[a] = cor_a
            if cor_b.different:
                self._predict_one(b, new_corners)
            else:
                new_corners[b] = cor_b
Esempio n. 2
0
    def _predict_from_one(self, a, new_corners):
        vec = new_corners[a].get_prediction_vector(True, self.corners[a])
        pa = (a + 3) % 4
        p1 = add(new_corners[a].p, vec)
        vec = (-vec[0],-vec[1])
        vec=rotateVec(vec, self.corners[pa].angle)
        pp1= add(p1,vec)
        cor_p = Corner([pp1, p1, new_corners[a].p], 1,
                                 imgtime=new_corners[a].time)

        vec = new_corners[a].get_prediction_vector(False, self.corners[a])
        na = (a + 1) % 4
        p2 = add(new_corners[a].p, vec)
        vec = (-vec[0],-vec[1])
        vec=rotateVec(vec, self.corners[na].angle)
        np2= add(p1,vec)
        cor_n = Corner([new_corners[a].p, p2, np2], 1,
                                 imgtime=new_corners[a].time)
        cor_p.is_predicted = cor_n.is_predicted = True
        cor_p.compute_change(self.corners[pa], self.image)
        cor_n.compute_change(self.corners[na], self.image)
        da= (a + 2) % 4
        if cor_p.different:
            if cor_n.different: return
            else:
                new_corners[na] = cor_n
                self._predict_neighbours(pa, da, new_corners)
        else:
            new_corners[pa] = cor_p
            if cor_n.different:
                self._predict_neighbours(na, da, new_corners)
            else:
                new_corners[na] = cor_n
                self._predict_one(da, new_corners)
Esempio n. 3
0
 def _predict_one(self, index, new_corners):
     '''
     predict position of corner index
     @param index:
     @param new_corners:
     '''
     # predicting by taking vectors form near corners along the sides
     # and solving linear equation for intersection
     L = len(new_corners)
     nb = (index + 1) % L
     b = new_corners[nb]
     nd = (index - 1 + L) % L
     d = new_corners[nd]
     assert isinstance(b, Corner)
     v1 = b.get_prediction_vector(True, self.corners[nb])
     v2 = d.get_prediction_vector(False, self.corners[nd])
     p1 = b.p
     p2 = d.p
     (p, _) = solve_linear(v1, v2, p1, p2)
     point = add(b.p, v1, p)
     cor = Corner([d.p, point, b.p], imgtime=b.time)
     cor.compute_change(self.corners[index])
     cor.is_predicted = True
     if cor.similarity < self.avg_sim * 2:
         new_corners[index] = cor