Mam predefiniowaną paletę kilkudziesięciu kolorów (40-50) i obrazki. Dla każdego z nich muszę znaleźć 3-4 dominujące w nim kolory z tej palety (nie jest wymagana 100% zgodność kolor piksela-kolor z palety).
Zastanawiam się jak to sensownie zrobić, póki co wymyśliłem, że:
1. Nie ma sensu pracować na dużym obrazku - miniatura 100x100px, którą i tak generuje, wystarczy w zupełności
2. Najprościej (i najdokładniej) byłoby zrzutować tą miniaturę na zadaną paletę i zrobić histogram. Miałoby to również tę zaletę, iż mógłbym bardzo prosto odrzucić kolor tła - wystarczyłoby ignorować kolor zajmujący np ponad 30%. Problem polega na tym, że nie mam pomysłu jak to sensownie zrobić.
Potraktować barwy składowe jako współrzędne w przestrzeni trójwymiarowej i szukać najbliższego punktu? Wymagałoby to liczenia odległości każdego piksela od wszystkich kolorów w palecie i wyboru najmniejszej - czyli dla 40 kolorów i miniatury 100x100px byłoby to 100x100x40 = 400 000 sqrt((x1-x2)^+(y1-y2)^2+(z1-z2)^2) i tyle samo porównań, czyli delikatnie mówiąc paskudnie wydajnościowo.
Co prawda takich operacji nie będzie wiele (max 100-200 na dobę, co będzie stanowić <0,05%), ale i tak wolałbym tego uniknąć.
Ma ktoś jakiś lepszy pomysł? Może być kosztem dokładności, pod warunkiem, że błędne rzutowanie będzie w granicach kilku procent.