The problem is that none of these posterisation algorithms (reducing bit depth of channels and optionally dithering) match the quality of somebody placing the pixels by hand. It always looks more like 'deep fried' images as opposed to pixel art. None of the samples are appealing (except for perhaps that one with palm trees).
Just started watching that talk, lots of extremely impressive artworks, I'd never heard of the colour cycling techniques he talks about before which are very neat.
Wow, sorry to be blunt but 1) it looks AWFUL. I didn't expect it to robustly-successfully redraw sources but this is just a dismal implementation of depth-reduction. 2) Its offensive, insulting, to say that this converts into 'pixel art'. 3) Not only that but it is trivial. I'm sure almost anyone reading will have done something at this level for interest in two or three lines and then abandoned it seeing how bad it looks. As a pallet cleanser (ha) here's an article about actually good low-color automated processing https://bisqwit.iki.fi/story/howto/dither/jy/
That's an amazing article. I had to dither all the 24-bit color sprite assets from the artists, when I was a video game developer in the 90s, into a single 256-color palette that was hand-picked. I just used a simple euclidian-distance algorithm and thought I was clever.
As always with HN I come out looking like an imposter!
I wonder if one alternate approach could perhaps be to do image segmentation on the original image, decide what segments are important enough to be preserved, and then, using other techniques to do the downscaling and color choosing, but while enforcing an additional constraint of sufficient contrast between the downscaled versions of the different segments?
Like, if some detail would, if scaled down proportionally with everything else would become too small to make out, but where by making it a bit bigger than it should be would remain both recognizable, while still fitting ok within whatever larger thing?
E.g. converting lips into a row of pixels when necessary. Similarly with eyes.
And accurate. It's just re-scaling and palette indexing, no different than what people toyed around with using Photoshop in 1998. It looks nothing at all like hand-pixeled art.
> Pyxelate downsamples images by (iteratively) dividing it to 3x3 tiles and calculating the orientation of edges inside them. Each tile is downsampled to a single pixel value based on the angle the magnitude of these gradients, resulting in the approximation of a pixel art. This method was inspired by the Histogram of Oriented Gradients computer vision technique.
> Then an unsupervised machine learning method, a Bayesian Gaussian Mixture model is fitted (instead of conventional K-means) to find a reduced palette. The tied gaussians give a better estimate (than Euclidean distance) and allow smaller centroids to appear and then lose importance to larger ones further away. The probability mass function returned by the uncalibrated model is then used as a basis for different dithering techniques.
> Preprocessing and color space conversion tricks are also applied for better results.
But yeah for all the effort, it doesn't look that much better than just exporting with a small palette and positional dithering.
I'm kinda curious how this compares to imagemagick -> limit the colorspace. Though getting imagemagick to produce some of those styles of images may be difficult or impossible (like the purple/pink pattern on the bottom left corgi).
This effect happens naturally, after re-saving print screen of an image in JPG format a few times.
More interesting might be pixray project (https://github.com/dribnet/pixray) where pixel art is generated using machine learning from keyword prompts.
for all the cool machine learning stuff and libs involved the results look like what i could do in the 90s in photoshop. it doesn’t really look like hand drawn pixel art IMHO.
I'd love to see an algorithm that could approximate this degree of mastery :)