small changes
authorTomas Musil <tomik.musil@gmail.com>
Sat, 19 Jul 2014 18:01:38 +0000 (20:01 +0200)
committerTomas Musil <tomik.musil@gmail.com>
Sat, 19 Jul 2014 18:01:38 +0000 (20:01 +0200)
src/imago.py
src/intrsc.py
src/k_means.py

index 0dd970a..18e7bba 100755 (executable)
@@ -133,10 +133,12 @@ def main():
                 draw.line(l, fill=(64, 255, 64), width=1)
             do_something(im_g, "grid", name="grid")
 
-    board = intrsc.board(image, lines, show_all, do_something, logger)
+    intersections = intrsc.b_intersects(image, lines, show_all, do_something, logger)
+    board = intrsc.board(image, intersections, show_all, do_something, logger)
 
     logger("finished")
 
+    # TODO! refactor this mess:
     if len(args.files) == 1:
 
         if args.sgf_output:
@@ -156,7 +158,10 @@ def main():
                 print >> sys.stderr, "Opening", f
             if image.mode == 'P':
                 image = image.convert('RGB')
-            board = intrsc.board(image, lines, show_all, do_something, logger)
+            if image.size[0] > args.w:
+                image = image.resize((args.w, int((float(args.w)/image.size[0]) *
+                              image.size[1])), Image.ANTIALIAS)
+            board = intrsc.board(image, intersections, show_all, do_something, logger)
             if args.sgf_output:
                 game.addMove(board)
             else:
@@ -173,14 +178,15 @@ class Imsave():
         self.saving_num = 0
 
     def save(self, image, title='', name=None):
+        im_format = ('.png', 'PNG')
         if name:
-            filename = self.saving_dir + name + '.jpg'
+            filename = self.saving_dir + name + im_format[0]
         else:
-            filename = self.saving_dir + "{0:0>2}".format(self.saving_num) + '.jpg'
+            filename = self.saving_dir + "{0:0>2}".format(self.saving_num) + im_format[0]
             self.saving_num += 1
         if not os.path.isdir(self.saving_dir):
             os.makedirs(self.saving_dir)
-        image.save(filename, 'JPEG')
+        image.save(filename, im_format[1])
 
 if __name__ == '__main__':
     try:
index 3c736d9..62f1498 100644 (file)
@@ -26,8 +26,8 @@ def dst_sort(lines):
     lines.sort(key=itemgetter(1))
     return lines
 
-def board(image, lines, show_all, do_something, logger):
-    """Compute intersections, find stone colors and return board situation."""
+def b_intersects(image, lines, show_all, do_something, logger):
+    """Compute intersections."""
     # TODO refactor show_all, do_something
     # TODO refactor this into smaller functions
     logger("finding the stones")
@@ -47,9 +47,15 @@ def board(image, lines, show_all, do_something, logger):
                 draw.point((x , y), fill=(120, 255, 120))
         do_something(image_g, "intersections")
 
-    image_c = filters.color_enhance(image)
-    if show_all:
-        do_something(image_c, "white balance")
+    return intersections
+
+def board(image, intersections, show_all, do_something, logger):
+    """Find stone colors and return board situation."""
+
+#    image_c = filters.color_enhance(image)
+#    if show_all:
+#        do_something(image_c, "white balance")
+    image_c = image
     
     board_raw = []
     
@@ -88,9 +94,15 @@ def board(image, lines, show_all, do_something, logger):
     #color_data = [(norm_s0(s[0]), norm_s1(s[1])) for s in board_raw]
     color_data = [(s[0], s[1]) for s in board_raw]
 
-    clusters = k_means.cluster(3, 2,zip(color_data, range(len(color_data))),
+    clusters, score = k_means.cluster(3, 2,zip(color_data, range(len(color_data))),
                                [[0., 0.5], [0.5, 0.5], [1., 0.5]])
-
+#    clusters1, score1 = k_means.cluster(1, 2,zip(color_data, range(len(color_data))),
+#                               [[0.5, 0.5]])
+#    clusters2, score2 = k_means.cluster(2, 2,zip(color_data, range(len(color_data))),
+#                               [[0., 0.5], [0.75, 0.5]])
+#    import sys
+#    print >> sys.stderr, score1, score2, score
+#
     if show_all:
         fig = pyplot.figure(figsize=(8, 6))
         pyplot.scatter([d[0][0] for d in clusters[0]], [d[0][1] for d in clusters[0]],
@@ -125,7 +137,6 @@ def board(image, lines, show_all, do_something, logger):
     except StopIteration:
         pass
     
-
     return output.Board(19, board_r)
 
 def mean_luma(cluster):
index 119f576..5260601 100644 (file)
@@ -15,8 +15,10 @@ def cluster(k, d, data, i_centers=None):
     while delta(old_centers, centers) > 0:
         old_centers = centers
         clusters, centers = next_step(old_centers, data)
-
-    return clusters
+    dst = lambda c, p: sum((a - b) ** 2 for (a, b) in zip(p, c)) ** 0.5
+    score = sum([sum(map(lambda p: dst(c, p[0]), clus)) for clus, c in
+                 zip(clusters, centers)])
+    return clusters, score
 
 def next_step(centers, data):
     """Compute new clusters and centers."""