points = [l.points for l in new_lines1]
for trial in xrange(3):
- line1, cons = ransac.estimate(points, 2, 800, Diagonal_model)
- points2 = map(lambda l: [(p if not p in cons else None) for p in l], points)
- line2, cons2 = ransac.estimate(points2, 2, 800, Diagonal_model)
+ model = Diagonal_model(points)
+ diag_lines = ransac.ransac_multi(2, points, 2, 800, model=model)
+ [(line1, cons), (line2, cons2)] = diag_lines
center = intersection(line1, line2)
data = sum(points, [])
diag1 = Line(line1)
data.append((x, y))
dist = 3
- (line, points), (line2, points2) = ransac.ransac_duo(data, dist, 75, 15)
+ [(line, points), (line2, points2)] = ransac.ransac_multi(2, data, dist, 250)
line_to_points = lambda (a, b, c), x: (x, (a*x + c) / (- b))
# TODO width should not be here vvv
# TODO refactor gridf to use standard equations instead of points
score += min(d, dist)
return score, cons
+ def remove(self, data):
+ self.data = list(set(self.data) - set(data))
+
def iterate(model, distance):
score = float("inf")
consensual = model.initial()
return estimate, consensual
-def ransac_duo(data, dist, k, mk, modelClass=Linear_model):
- cons = []
- for i in xrange(mk):
- model, cons = estimate(set(data) - set(cons), dist, k, modelClass)
- return (model, cons), estimate(set(data) - set(cons), dist, k, modelClass)
-
def ransac_multi(m, data, dist, k, modelClass=Linear_model, model=None):
+ if not model:
+ model = modelClass(data)
ests = []
cons = []
for i in xrange(m):
est, cons_new = estimate(None, dist, k, model=model)
model.remove(cons_new)
- ests.append(est)
+ ests.append((est, cons_new))
return ests
-
-
-