tadded k-means clustering to reduce the number of colors - cross-stitch - inter… | |
git clone git://src.adamsgaard.dk/cross-stitch | |
Log | |
Files | |
Refs | |
LICENSE | |
--- | |
commit b8948bc4acd8107a723b6c23b5b417120b7813d9 | |
parent 38af9a0714c260b0ed50af24ce635a17d301c87c | |
Author: Anders Damsgaard <[email protected]> | |
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(-) | |
--- | |
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 | |
------- | |
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', typ… | |
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) | |
diff --git a/fisker-pattern.png b/fisker-pattern.png | |
Binary files differ. |