From: Tomas Musil Date: Sat, 19 Jul 2014 18:01:38 +0000 (+0200) Subject: small changes X-Git-Url: http://git.tomasm.cz/imago.git/commitdiff_plain/78ff145bbc5a1323c889b174d0f93ab30bfc0efe small changes --- diff --git a/src/imago.py b/src/imago.py index 0dd970a..18e7bba 100755 --- a/src/imago.py +++ b/src/imago.py @@ -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: diff --git a/src/intrsc.py b/src/intrsc.py index 3c736d9..62f1498 100644 --- a/src/intrsc.py +++ b/src/intrsc.py @@ -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): diff --git a/src/k_means.py b/src/k_means.py index 119f576..5260601 100644 --- a/src/k_means.py +++ b/src/k_means.py @@ -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."""