From: Tomas Musil Date: Fri, 18 Jul 2014 15:35:52 +0000 (+0200) Subject: scale colors X-Git-Url: http://git.tomasm.cz/imago.git/commitdiff_plain/f19938820e152bbd68f2ed3f8aa3f7d7f182ca06 scale colors --- diff --git a/src/intrsc.py b/src/intrsc.py index 68b18a0..73de142 100644 --- a/src/intrsc.py +++ b/src/intrsc.py @@ -57,13 +57,13 @@ def board(image, lines, show_all, do_something): board_raw = sum(board_raw, []) ### Show color distribution - luma = [s[0] for s in board_raw] - saturation = [s[1] for s in board_raw] if show_all: import matplotlib.pyplot as pyplot import Image fig = pyplot.figure(figsize=(8, 6)) + luma = [s[0] for s in board_raw] + saturation = [s[1] for s in board_raw] pyplot.scatter(luma, saturation, color=[(s[2][0]/255., s[2][1]/255., @@ -77,7 +77,15 @@ def board(image, lines, show_all, do_something): image_p = Image.fromstring('RGB', size, buff, 'raw') do_something(image_p, "color distribution") - clusters = k_means.cluster(3, 2,zip(zip(luma, saturation), range(len(luma))), + max_s0 = max(s[0] for s in board_raw) + min_s0 = min(s[0] for s in board_raw) + norm_s0 = lambda x: (x - min_s0) / (max_s0 - min_s0) + max_s1 = max(s[1] for s in board_raw) + min_s1 = min(s[1] for s in board_raw) + norm_s1 = lambda x: (x - min_s1) / (max_s1 - min_s1) + color_data = [(norm_s0(s[0]), norm_s1(s[1])) for s in board_raw] + + clusters = k_means.cluster(3, 2,zip(color_data, range(len(color_data))), [[0., 0.5], [0.5, 0.5], [1., 0.5]]) if show_all: diff --git a/src/k_means.py b/src/k_means.py index f429824..119f576 100644 --- a/src/k_means.py +++ b/src/k_means.py @@ -4,11 +4,11 @@ import random def cluster(k, d, data, i_centers=None): """Find *k* clusters on *d* dimensional *data*.""" - borders = [(min(p[0][i] for p in data), max(p[0][i] for p in data)) - for i in range(d) ] if i_centers: old_centers = i_centers else: + borders = [(min(p[0][i] for p in data), max(p[0][i] for p in data)) + for i in range(d)] old_centers = [[(h - l) * random.random() + l for (l, h) in borders] for _ in range(k)] clusters, centers = next_step(old_centers, data)