koloryRGB -> kolory indeksowane

0

temat jest bardzo niescisly wiec juz opowiadam o swoich rozterkach...

Mam daną jakąs bitmape ( pełnokolorowe zdjecie). Mam też daną palete kulkudziesieciu kolorów w formacie RGB i chciałbym kazdemu pikselowi mojej bitmapy przypisać kolor z palety, oczywiście ten kolor który jest najbliższy.

Moje pytanie sprowadza się do tego jak "mierzyć podobieństwo kolorów". Jak sprawdzić czy dwa kolory są stosunkowo podobne czy raczej odległe.

Będę wdzięczny za wszelkie sugestie

0

To już kwestia algorytmu. Niektóre sobią tak, że liczą (o-orginał z obrazka, p-paleta):

Diff = ( |Ro-Rp|+|Go-Gp|+|Bo-Bp|+|So-Sp| ) / 4

Przy czym współczynnik S to kolor zamieniony na skalę szarości. Pikselowi RGBo przypisujesz kolor z palety RGBp taki, aby współczynnik Diff był jak najmniejszy (przy dokładnym dopasowaniu do palety, piksel będzie miał Diff = 0).

0

hmmm, a jesli chcialbym posortowac moją palete kolorów... jeśli dla kazdego koloru policze diff i posortuje wg tej wartosci to niekoniecznie podobne kolory bedą obok siebie :-(
Przyznam że nie próbowałem ale tak mi się wydaje

0

To nie ma znaczenia. Kolejność w palecie nie wpływa na to - ani nie decyduje o RGB ani o współczynniku S. Najwyższej, zamiast stwierdzić przykładowo, że piksel jest najbardziej podobny do koloru z palety o numerze 20, stwierdzisz, że jest podobny do koloru 240.

[DOPISANE]

A.. nie do końca Cię zrozumiałem. Jak posortujesz według Diff, to kolory o najmniejszym Diff będą najbardziej zbliżone, a pozostałe cię nie interesują. Jasne, że jak masz biały pikselek, to po posotrowaniu gdzieś w dali może się znaleźć czerwony obok niebieskiego, ale i tak wybierzesz ten, który jest najbliżej, bo jest on bardziej podobny.

Zauważ coś takiego: masz biały piksel, a paleta ma 4 kolory: czerowny, zielony, niebieski, żółty. Przyjmijmy (zgaduję), że zostaną posortowane tak: żółty, czerwony, zielony, niebieski. Oznacza to, że biały pikselek zastąpisz żółtym, bo tenże w palecie jest najbardziej podobny.

Diff dla każdego pikselka obrazu RGB i dla każdego koloru w palecie liczy się oddzielnie. Następnie z Diff dla kolejnych kolorów palety wybierasz najmniejszy - to piksel o tym Diff jest twoim kolorem z palety dla danego pikselka RGB.

0

ok, dzięki Szczawik, już wszystko rozumiem

1 użytkowników online, w tym zalogowanych: 0, gości: 1