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.,
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:
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)