diff options
| author | Yuval Adam <yuval@y3xz.com> | 2015-06-30 14:59:40 +0300 |
|---|---|---|
| committer | Yuval Adam <yuval@y3xz.com> | 2015-06-30 14:59:40 +0300 |
| commit | a4334bec763e0691b80ea510ecf743f18ffa1006 (patch) | |
| tree | beef3b484e0a7c500345d9e6a5ae15685b20581a /client | |
| parent | 134c62488679bb8d562742f9b0f063497c4cd94f (diff) | |
HS(V) on all photos average
Diffstat (limited to 'client')
| -rw-r--r-- | client/effects.js | 35 |
1 files changed, 29 insertions, 6 deletions
diff --git a/client/effects.js b/client/effects.js index d2a39f8..fd26bf7 100644 --- a/client/effects.js +++ b/client/effects.js @@ -130,25 +130,48 @@ Effects = (function() { } ) ), true // shallow - ) + ); + + var all_colors_hsv = _.map(all_colors, function(col) { + var c = new tinycolor({r: col[0], g: col[1], b: col[2]}); + var hsv = c.toHsv(); + return hsv; + return new Array(hsv.h, hsv.s, hsv.v); + }); + + var all_colors_hs = _.map(all_colors_hsv, function(hsv) { + return new Array(hsv.h, hsv.s); + }); var k = new KMeans(); - k.cluster(all_colors, 2); + k.cluster(all_colors_hs, 2); var centroids = k.centroids; - var g_p1 = new paper.Color(centroids[0][0] / 256, centroids[0][1] / 256, centroids[0][2] / 256); - var g_p2 = new paper.Color(centroids[1][0] / 256, centroids[1][1] / 256, centroids[1][2] / 256); + var valued_centroids = _.map(centroids, function(cent, i) { + var cluster = _.filter(all_colors_hsv, function(c) { + return k.classify(new Array(c.h, c.s)) == i; + }); + var vval = _.reduce(cluster, function(m, c) { + return m + c.v; + }, 0) / cluster.length; + var r = new tinycolor({h: cent[0], s: cent[1], v: vval}); + var rgb = r.toRgb(); + return new Array(rgb.r, rgb.g, rgb.b); + }); + + var g_p1 = new paper.Color(valued_centroids[0][0] / 256, valued_centroids[0][1] / 256, valued_centroids[0][2] / 256); + var g_p2 = new paper.Color(valued_centroids[1][0] / 256, valued_centroids[1][1] / 256, valued_centroids[1][2] / 256); Session.set('g_p1', g_p1); Session.set('g_p2', g_p2); - centroids = _.map(centroids, function(c) { + valued_centroids = _.map(valued_centroids, function(c) { return _.map(c, function(cc) { return Math.round(cc); }) }); - return centroids; + return valued_centroids; } function averageColor(id) { |
