Алгоритмы раскрашивания и наилучшего соответствия палитры
-
01-10-2019 - |
Вопрос
Копался в Гугле и не нашел ничего похожего на то, что мне нужно.так что же мне нужно?ну две вещи:
Во-первых, я ищу алгоритм/псевдо-код/белые капиталы, чтобы определить наиболее подходящий цвет для получения R, G, B Tuple от и массива 256 кортежей RGB.
Во-вторых, я ищу алгоритм/псевдо-код/белые карты, чтобы перераспределить изображение палитра 8-бит (с использованием приведенной выше палитра RGB) в данном оттенке/насыщении или с помощью модификации канала G, B.Также было бы неплохо, если бы можно было добавить исправление для пикселей гамма и артефактов в раскраске.
у кого-нибудь есть подсказки/указатели/советы относительно того, где я могу найти такую вещь (я знаю, что они должны существовать, иначе некоторые функции фотошопа не были бы)
ОБНОВЛЯТЬ:вот базовое евклидово расстояние RGB до искателя индекса палитры:
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;
}
Решение
Видеть http://en.wikipedia.org/wiki/Color_difference о том, как рассчитать расстояния между цветами, чтобы учитывать чувствительность человеческого глаза.
Другие советы
Если вы хотите, чтобы это было быстрее, чем линейный поиск, проверьте VP-дерево или KD-дерево.
Если вам нужна точность восприятия, выполните поиск в Цветовое пространство лаборатории.