Show HN: High End Color Quantizer
123 points| big-nacho | 8 months ago |github.com
I stumbled upon the color quantization problem while doing something related for work. I then found an interesting paper for which I could find no implementations online, and the thing went from "let's implement this paper" to getting pretty obsessed with the whole thing.
It's at an early, eaaaarly stage. There's a lot of work to be done, and it's a memory hog, but generally speaking works quite well, and the output is for the most part very high quality, so I'm happy to share it as beta.
bmn__|8 months ago
If your goal is for users to adopt the use of the software, then you can easily increase acceptance by going the proverbial extra mile:
1. Make it installable via `uv tool install patolette` with the optimisations taken care of automatically. 2. Compare its results in the documentation/on the project Web site against the incumbents. https://news.ycombinator.com/item?id=26646035 Find standard test images https://ddg.gg/?q=color+quantization+test+corpus , copy the split-image/slider technique from https://uprootlabs.github.io/poly-flif/
The rationale for this is that each interested user should not have to replicate this work on his own.
ansgri|8 months ago
qingcharles|8 months ago
Gifski uses the png-quant library, and I wonder how this compares?
CamperBob2|8 months ago
Still, color quantization is a really interesting rabbit hole to go down if you're new to graphics programming, or at least it was for me. It's a mixed blessing that almost nobody has to confront the problem anymore.
Lerc|8 months ago
Colour quantisation is still one of the best lossy image compression formats for when you have almost no memory or CPU.
unknown|8 months ago
[deleted]
pk-protect-ai|8 months ago
unknown|8 months ago
[deleted]
pixelpoet|8 months ago
sRGB is a nonlinear colour space and so you can't do linear operations in that space (because a^2 + b^2 isn't (a+b)^2 in general).
big-nacho|8 months ago
dinfinity|8 months ago
I'd say that showing full example results are the most important part of showcasing a "high end" color quantizer.
big-nacho|8 months ago
Regarding full examples, because some other projects seem to have cherry picked cases where they perform very well, I wanted to go for a "try it out yourself" approach, at least for now. Maybe in the future I'll add a proper showcase. Thanks for the feedback :)
SillyUsername|8 months ago
Does it also support colour spaces other than RGB, CIEDE (I think I saw that in the source), i.e CMYK for paint mixing, and similar ilk?
I have a few personal projects that would benefit from a library that is wide ranging in the colour space, dither algorithms (I only saw riezsma) and quantizations.
Typically these are all usually implemented in different libraries :(
Thanks!
leeoniya|8 months ago
https://news.ycombinator.com/item?id=9213955
see that whole thread, too
big-nacho|8 months ago
w-m|8 months ago
big-nacho|8 months ago
The optional K-Means step just grabs whatever palette the original method yielded and uses it as initial state for a final refinement step. This gives you (or gets you closer) to a local optimum. In a lot of cases it makes little difference, but it can bump up quality sometimes.
sebastianmestre|8 months ago
Something that always bugged me about palette generators I've used is how they end up not picking any colors intense enough for the deepest highlights/shadows, because they use colors close to the average of various sets of pixels.
The result is that the most eye-catching parts of an image end up washed out, reducing the appeal.
My hack to address this has always been making a larger image with big white/black bars around the original image to push the palette generator to include a few really bright or dark colors.
From the look of your examples, your project addresses this too, right?
Btw, I opened an issue about the graphs in your readme because, as a programmer, they don't tell me if your program is fast or not. From a user's perspective that thinks in terms of the side length of an image, the numbers presented are very useful, but they might be even more useful in table format.
ValdikSS|8 months ago
https://github.com/OpenPrinting/libcupsfilters/pull/92
vanderZwan|8 months ago
big-nacho|8 months ago
I also generally want to take a bit more time with the dithering topic and explore other methods too, which hopefully I'll add in the future.
Aurornis|8 months ago
esafak|8 months ago
vanderZwan|8 months ago
qingcharles|8 months ago
JKCalhoun|8 months ago
pk-protect-ai|8 months ago
leeoniya|8 months ago
pinoy420|8 months ago
[deleted]
8954144039|8 months ago
[deleted]
andrelaszlo|8 months ago
[deleted]
unknown|8 months ago
[deleted]