HOME | DD
Published: 2018-04-23 19:51:49 +0000 UTC; Views: 3000; Favourites: 9; Downloads: 0
Redirect to original
Description
/* Journal Top */ body div#devskin11548908 .gr-box { background:#617360; } body div#devskin11548908 .gr-top h2, body div#devskin11548908 .gr-top h2 a { text-transform:uppercase; letter-spacing:2px; padding:5px 20px; font-size:29px; } body div#devskin11548908 .timestamp, body div#devskin11548908 .commentslink { text-align:center; padding:5px; text-transform:uppercase; letter-spacing:2px; } body div#devskin11548908 .left { width:17%; } body div#devskin11548908 .right { width:83%; } body div#devskin11548908 .right { float:right; } body div#devskin11548908 .left { float:left; } /* Box and Square Headings */ body div#devskin11548908 h1, body div#devskin11548908 h2 { text-transform:uppercase; font-weight:normal; font-size:14px; font-weight:bold; font-family:'open sans'; } body div#devskin11548908 h1 { letter-spacing:2px; color:#fff; padding:5px; background:#617360; } body div#devskin11548908 .text h2 { padding-left:10px; letter-spacing:1px; margin:5px 0 -5px 0; border-left:20px solid #617360; } body div#devskin11548908 h1:hover, body div#devskin11548908 h2:hover { font-weight:bold; } body div#devskin11548908 .p1 { background:#617360; } body div#devskin11548908 .b1 { background:#617360; } body div#devskin11548908 .g1 { background:#617360; } body div#devskin11548908 .p2 { border-left:20px solid #617360!important; } body div#devskin11548908 .b2 { border-left:20px solid #617360!important; } body div#devskin11548908 .g2 { border-left:20px solid #617360!important; } /* Mini Gallery Code */ body div#devskin11548908 .mini .shadow-holder { display:inline-block; width:150px; height:150px; overflow:hidden; } body div#devskin11548908 .mini .shadow-holder img { padding:0px; max-width:none; margin:0 0 0 0; } body div#devskin11548908 .mini .lit { width:150px; height:150px; } body div#devskin11548908 .mini .shadow-holder:hover img, body div#devskin11548908 .mini .shadow-holder:hover .lit { position:absolute!important; z-index:2; margin:7px 0 0 -63px; padding:5px; } body div#devskin11548908 .b .shadow-holder:hover img, body div#devskin11548908 .b .shadow-holder:hover .lit, body div#devskin11548908 .embedded-deviation img:hover, body div#devskin11548908 .embedded-freeform-deviation:hover { background:#617360; } body div#devskin11548908 .g .shadow-holder:hover img, body div#devskin11548908 .g .shadow-holder:hover .lit, body div#devskin11548908 .embedded-deviation img:hover, body div#devskin11548908 .embedded-freeform-deviation:hover { background:#617360; } body div#devskin11548908 .y .shadow-holder:hover img, body div#devskin11548908 .y .shadow-holder:hover .lit, body div#devskin11548908 .embedded-deviation img:hover, body div#devskin11548908 .embedded-freeform-deviation:hover { background:#617360; } body div#devskin11548908 .shadow-holder:hover img, body div#devskin11548908 .shadow-holder:hover .lit, body div#devskin11548908 .embedded-deviation img:hover, body div#devskin11548908 .embedded-freeform-deviation:hover { background:#617360; } body div#devskin11548908 .mini.b .shadow-holder:hover { background:#617360; } body div#devskin11548908 .mini.g .shadow-holder:hover { background:#617360; } body div#devskin11548908 .mini.y .shadow-holder:hover { background:#617360; } body div#devskin11548908 .mini .shadow-holder:hover { background:#617360; }
Well, there was this random discussion about nature of art. I started discussing it as a sort of a classification problem, and people complained I was bringing statistics into art
So I decided to actually do a bit of statistics about fractals.
My first project, inspired by what Esherymack is doing, is to study the colors I use in my artwork.
The dominant colors and sorting
My idea was to find the dominant colors for each work. Then, I could find clusters of those color profiles, and find out which combinations are the most common. So color profiles for each artwork are the first step.
For this task, I used the k-means idea presented in this article: zeevgilovitz.com/detecting-dom…
The basic idea of using k-means to find dominant colors is that you take the color of each pixel, and then separate those in k groups, based on similarity between colors. For example, with a small number of groups, red and orange would go into same group, but blue would go into a different group.
So now I could get the dominant colors for any picture. 50 dominant colors, why not? Here you go, 50 shades of disc for you:
The optimal number of clusters may vary from one image to another. But since I wanted to group the resulting profile later on, I decided to pick some number that would work well for most. For the clustering part, I used color profiles with 10 dominant colors for each image.
This method returns the colors in no specific order. Since I wanted to also display the results visually, this was not cool, since this looks kinda messy. Once more, I was too lazy to think of something by myself, and used somebody else's results: www.alanzucconi.com/2015/09/30… Out of the described methods, I liked the Hilbert curve sorting the most, and it was the method I used. On the picture above, the colors on the right are ordered using a Hilbert curve.
Clustering nightmare
Now that I had the tools to describe the colors of each image, I applied it on 1118 artworks from my gallery. For clustering, I would need to define some sort of distance measure between two profiles, a number that would describe how different the colors of two works are. The main trick here is that the colors come in no specific order: an image can have green and blue, but also can have blue and green, and my measure would need to somehow accommodate this.
Meanwhile, another pic to make sure you are following:
After messing around a bit, I ended up with the following: given two color profiles, A and B, I would pair the colors of A with colors of B in such way that the sum of differences between each pair would be the smallest possible (say hi, Hungarian algorithm).
I also tinkered a lot with the distance measures between pairs of colors, ending up with a weird function of HSL, which seemed to work the best for the case.
Finally all I had to do is to run some hierarchical clustering, using the distances I calculated previously.
Results
I use a lot of different coloring schemes Most of the time, though, I am not fun at all. The most common color combination among my work was a gradient of brown, sometimes red, with small additions of other colors. This color scheme is used in 22% (almost one fourth, shame on me) of my works.
A few works representative of this group:
I make those pretty much at constant rate, and it was obviously my favorite color scheme during 2015 and 2016 - at some months, 50-60% of my work were basically brown. Below, you can see the % of brownish works out of all submitted, by month:
A second typical coloring scheme observed was black and white. Over the years, I made 55 black and white stills (5% of the studied artworks).
There are a few other typical color profiles, but they are overall less common than those two.
Related content
Comments: 8
lockphase [2018-04-25 04:31:27 +0000 UTC]
A little tool I use infrequently in my work: labs.tineye.com/color/ and just collate the results from there.
Hope it helps, cheers !
👍: 0 ⏩: 0
ChaosFissure [2018-04-23 22:49:26 +0000 UTC]
Very cool analysis I'd be curious to know more about distance measures and things like that, since it's not something I'm super familiar with. Did you try LAB color space to check perceptual differences in color, or did you restrict the search space to HSL/RGB for the most part? I only ask since I'm using LAB (namely for its friendly interpolation) in my world generation program I'm making XD
Strangely enough, I have k-means stuff as tabs open in my browser as things to code up later in the future! Thanks for sharing that link as well, it's nice to see clean code that I can easily understand to parse through the algorithm. I might need to expedite my implementation of this!
👍: 0 ⏩: 1
tatasz In reply to ChaosFissure [2018-04-23 22:57:19 +0000 UTC]
As for color distances, I used euclidean distance on HSL, with slightly lower weight on lightness. I know this is super wrong, and some sort of cosine distance would be more appropriate, since we have angles (H) and rays/intensities (S), but it kind of worked and resulted in meaningful clusters
LAB here was my 3rd thing to try, but then HSL worked
K-Means is fun and useful stuff, since it is fairly simple and works quite well for numeric things. For example, while I used euclidean distance between colors for the k-means "dominant colors" step, one may implement, again, cosine distance, which makes more sense for many color representations.
I will probably do some more poking with this soon, such as peeking into other artists as some folks already asked, or doing some entirely different stuff (Neural Networks, yay)
👍: 0 ⏩: 1
ChaosFissure In reply to tatasz [2018-04-23 23:12:03 +0000 UTC]
I spent a bit of time trying to figure out LAB, basically it requires conversion from RGB -> XYZ -> LAB and back. I can through conversion code your way if you want to try it out and see what it does, since there's a bunch of silly constants and things I don't entirely understand involved XD
Although I'm probably totally out of the domain here, would other types of distance (manhattan/voronoi) also work for these purposes? I don't know how they'd differ, just know the terms exist from stuff I've seen in Blender in the past XD
👍: 0 ⏩: 1
tatasz In reply to ChaosFissure [2018-04-24 15:14:01 +0000 UTC]
Well, the voronoi distance, i suppose it is the euclidean one, with d = sqrt(x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2).
I don't think manhattan would be a gamechanger, since it is d = (abs(x1-x2) + abs(y1-y2) + abs(z1-z2)), not SOOO different really, its kinda proportional.
I think the main issue here is the color system used.
As for LAB, yep why not, could be fun
👍: 0 ⏩: 0