ransac duo
authorTomas Musil <tomik.musil@gmail.com>
Fri, 27 Jun 2014 23:13:30 +0000 (01:13 +0200)
committerTomas Musil <tomik.musil@gmail.com>
Fri, 27 Jun 2014 23:13:30 +0000 (01:13 +0200)
imago_pack/ransac.py

index 3f8bb65..197fc31 100644 (file)
@@ -4,6 +4,9 @@ import random
 from math import sqrt
 import numpy as NP
 
+# TODO comments
+# TODO threshold
+
 def initial_estimate(data):
     return random.sample(data, 2)
 
@@ -36,16 +39,24 @@ def iterate(data, distance):
         consensus = len(consensual)
         model = get_model(consensual)
         consensual = filter_near(data, model, distance)
-    return consensus, model
+    return consensus, model, consensual
         
 def estimate(data, dist, k):
     best = 0
     model = None
+    consensual = None
     for i in xrange(0, k):
-        new, new_model = iterate(data, dist)
+        new, new_model, new_consensual  = iterate(data, dist)
         if new > best:
             best = new
             model = new_model
+            consensual = new_consensual
+
+    return model, consensual
+
+def ransac_duo(data, dist, k, mk):
+    cons = []
+    for i in xrange(mk):
+        model, cons = estimate(set(data) - set(cons), dist, k)
+    return (model, cons), estimate(set(data) - set(cons), dist, k)
 
-    return model
-