Я когда-то использовал следующий алгоритм (у меня стояла правда задача не получить абсолютно близкое значение, а просто цвет из близкой зоны, но вдруг что почерпнешь и для себя):
1. Создается равномерный трехмерный массив (Р) в заданном пространстве с определенным шагом, к примеру 4. То бишь координаты в RGB у элементов будут 000, 400, 040, 440 и т.д.
2. Проходим по всем элементам исходного массива (А) цветов и заполняем на базе этих данных наш равномерный массив (Р). Если у нас к примеру в исходном массиве (А) есть цвет 511, то запоминаем эти данные для самого близкого элемента в массиве (Р): Р[400]=511 иначе оставляем Р[400]=0
3. Теперь нам достаточно при поиске ближайшего цвета (В) просто обратиться напрямую к ближайшему по сетке элементу массива (Р):
В[301] -> ближайший цвет в сетке 400 -> Р[400]=511 -> ближайший исходный цвет 511…