+ board_raw = sum(board_raw, [])
+
+ ### Show color distribution
+ luma = [(0.30 * s[0] + 0.59 * s[1] + 0.11 * s[2]) / 255.
+ for s in board_raw]
+ saturation = [(max(s) - min(s)) / (255 - abs(max(s) + min(s) - 255))
+ for s in board_raw]
+ if show_all:
+ import matplotlib.pyplot as pyplot
+ pyplot.scatter(luma, saturation, color=[(s[0]/255., s[1]/255., s[2]/255., 1.)
+ for s in board_raw])
+ pyplot.show()
+
+ clusters = k_means.cluster(3, 2,zip(zip(luma, saturation), range(len(luma))),
+ [[0., 0.], [0.5, 0.25], [1., 0.5]])
+ #clusters.sort(key=mean_luma)
+
+ if show_all:
+ pyplot.scatter([d[0][0] for d in clusters[0]], [d[0][1] for d in clusters[0]],
+ color=(1,0,0,1))
+ pyplot.scatter([d[0][0] for d in clusters[1]], [d[0][1] for d in clusters[1]],
+ color=(0,1,0,1))
+ pyplot.scatter([d[0][0] for d in clusters[2]], [d[0][1] for d in clusters[2]],
+ color=(0,0,1,1))
+ pyplot.show()
+
+ clusters[0] = [(p[1], 'B') for p in clusters[0]]
+ clusters[1] = [(p[1], '.') for p in clusters[1]]
+ clusters[2] = [(p[1], 'W') for p in clusters[2]]
+
+ board_rl = sum(clusters, [])
+ board_rl.sort()
+ board_rg = (p[1] for p in board_rl)
+
+ board_r = []
+
+ try:
+ for i in xrange(19):
+ board_r.append([])
+ for _ in xrange(19):
+ board_r[i].append(board_rg.next())
+ except StopIteration:
+ pass
+