Colorazione e Palette Best-Fit Algoritmi
-
01-10-2019 - |
Domanda
Stata rovistando google e non hanno trovato alcuna, come quello che sto cercando. Così che cosa è che sto cercando? bene due cose:
-
in primo luogo che sto cercando un Algoritmo / pseudo-codice / white-paper per determinare un colore best-fit per un invia r, g, b tupla da e matrice di 256 RGB tuple.
-
In secondo luogo, sto cercando un Algoritmo / pseudo-codice / white-paper a ricolorare immagine di una tavolozza 8bit (usando la tavolozza RGB sopra) sia ad un data tonalità / saturazione o da r, g, b modifica canale. sarebbe anche bello se fosse possibile aggiungere una correzione per gamma e artifacting pixel la colorazione pure.
qualcuno ha qualche suggerimento / puntatori / suggerimenti su dove potrei trovare una cosa del genere (so che devono esistere, altrimenti alcune delle funzioni photoshops non sarebbe)
UPDATE: ecco un distanza euclidea base RGB all'indice tavolozza finder:
uint_8 __stdcall GFXUTIL_GetNearestPaletteIndex(const uint_8* pPalette, size_t nSize, uint_8 nRed, uint_8 nGreen, uint_8 nBlue)
{
if(pPalette == NULL)
return 0;
int nDistance = -1;
size_t nIndex = 0, nFoundIndex = 0;
while(nIndex < nSize)
{
int nDistRed = pPalette[0] - nRed;
int nDistGreen = pPalette[1] - nGreen;
int nDistBlue = pPalette[2] - nBlue;
int nCurrentDistance = (nDistRed * nDistRed) + (nDistGreen * nDistGreen) + (nDistBlue * nDistBlue);
if(nCurrentDistance < nDistance)
{
nFoundIndex = nIndex;
nDistance = nCurrentDistance;
}
nIndex++;
pPalette += sizeof(uint_32);
}
return nFoundIndex;
}
Soluzione
http://en.wikipedia.org/wiki/Color_difference per il modo di calcolare distanze tra i colori in modo che la sensibilità dell'occhio umano viene preso in considerazione.
Altri suggerimenti
Se si desidera più veloce di ricerca lineare, quindi controllare VP-albero o KD-albero.
Se si desidera che percettivamente accurata, quindi effettuare la ricerca in Lab spazio colore .