URI: 
       tadded k-means clustering to reduce the number of colors - cross-stitch - interactively turn images into patterns for cross stitching
  HTML git clone git://src.adamsgaard.dk/cross-stitch
   DIR Log
   DIR Files
   DIR Refs
   DIR LICENSE
       ---
   DIR commit b8948bc4acd8107a723b6c23b5b417120b7813d9
   DIR parent 38af9a0714c260b0ed50af24ce635a17d301c87c
  HTML Author: Anders Damsgaard <anders.damsgaard@geo.au.dk>
       Date:   Fri, 14 Feb 2014 15:17:59 +0100
       
       added k-means clustering to reduce the number of colors
       
       Diffstat:
         M README.rst                          |       3 +++
         M cross-stitch.py                     |      16 ++++++++++++----
         M fisker-pattern.png                  |       0 
       
       3 files changed, 15 insertions(+), 4 deletions(-)
       ---
   DIR diff --git a/README.rst b/README.rst
       t@@ -30,6 +30,7 @@ Usage
        -----
        
          usage: cross-stitch.py [-h] --infile file --outfile file [--width WIDTH]
       +                       [--ncolors NCOLORS]
        
        Downsamples and modifies an image in order to create a pattern for cross
        stitching.
       t@@ -42,6 +43,8 @@ optional arguments:
                                save processed image as file
          --width WIDTH, -w WIDTH
                                canvas width, default value = 20
       +  --ncolors NCOLORS, -c NCOLORS
       +                        number of colors in output image, default value = 10
        
        Example
        -------
   DIR diff --git a/cross-stitch.py b/cross-stitch.py
       t@@ -4,6 +4,7 @@ import sys
        import argparse
        import scipy.ndimage
        import scipy.misc
       +import scipy.cluster
        import numpy as np
        import matplotlib.pyplot as plt
        
       t@@ -19,12 +20,13 @@ parser.add_argument('--outfile', '-o', metavar='file', type=str, nargs=1,
                required=True, help='save processed image as file')
        parser.add_argument('--width', '-w', type=int, nargs=1, default=20,
                help='canvas width, default value = 20')
       -#parser.add_argument('--n-colors', '-c', type=int, nargs=1, default=10,
       -        #help='number of colors in output image, default value = 10')
       +parser.add_argument('--ncolors', '-c', type=int, nargs=1, default=10,
       +        help='number of colors in output image, default value = 10')
        args = parser.parse_args()
        infile = args.infile[0]
        outfile = args.outfile[0]
        width = args.width[0]
       +ncolors = args.ncolors
        
        ## Read image ##################################################################
        try:
       t@@ -39,11 +41,17 @@ new_size = (int(round(hw_ratio*width)), width)
        im_small = scipy.misc.imresize(im, new_size)
        
        ## Process image colors ########################################################
       -
       +ar = im_small.reshape(scipy.product(im_small.shape[:2]), im_small.shape[2])
       +colors, dist = scipy.cluster.vq.kmeans(ar, ncolors)
       +c = ar.copy()
       +vecs, dist = scipy.cluster.vq.vq(ar, colors)
       +for i, color in enumerate(colors):
       +    c[scipy.r_[scipy.where(vecs==i)],:] = color
       +im_small_reduced = c.reshape(new_size[0], new_size[1], 3)
        
        ## Generate output plot ########################################################
        fig = plt.figure()
       -imgplot = plt.imshow(im_small)
       +imgplot = plt.imshow(im_small_reduced)
        imgplot.set_interpolation('nearest')
        plt.grid()
        plt.savefig(outfile)
   DIR diff --git a/fisker-pattern.png b/fisker-pattern.png
       Binary files differ.