scale colors
[imago.git] / src / intrsc.py
index cbf922a..73de142 100644 (file)
@@ -30,6 +30,11 @@ def board(image, lines, show_all, do_something):
     # TODO refactor show_all, do_something
     # TODO refactor this into smaller functions
     lines = [dst_sort(l) for l in lines]
+    an0 = (sum([l[0] for l in lines[0]]) / len(lines[0]) - pi / 2)
+    an1 = (sum([l[0] for l in lines[1]]) / len(lines[1]) - pi / 2)
+    if an0 > an1:
+        lines = [lines[1], lines[0]]
+
     intersections = intersections_from_angl_dist(lines, image.size)
 
     if show_all:
@@ -52,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.,
@@ -72,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:
@@ -113,7 +126,7 @@ def board(image, lines, show_all, do_something):
     return output.Board(19, board_r)
 
 def mean_luma(cluster):
-    """Return mean luma of the *cluster* of points."""
+    """Return mean luminanace of the *cluster* of points."""
     return sum(c[0][0] for c in cluster) / float(len(cluster))
 
 def to_general(line, size):
@@ -129,10 +142,11 @@ def intersection(l1, l2):
     y = (c1 * a2 - a1 * c2) / delim
     return x, y
 
+# TODO remove the parameter get_all
 def intersections_from_angl_dist(lines, size, get_all=True):
     """Take grid-lines and size of the image. Return intersections."""
-    lines1 = map(lambda l: to_general(l, size), lines[1])
     lines0 = map(lambda l: to_general(l, size), lines[0])
+    lines1 = map(lambda l: to_general(l, size), lines[1])
     intersections = []
     for l1 in lines1:
         line = []
@@ -142,7 +156,7 @@ def intersections_from_angl_dist(lines, size, get_all=True):
     return intersections
    
 def rgb2lumsat(color):
-    """Convert RGB to luma and HSI model saturation."""
+    """Convert RGB to luminance and HSI model saturation."""
     r, g, b = color
     luma = (0.30 * r + 0.59 * g + 0.11 * b) / 255.0
     max_diff = max(color) - min(color)