Вот тут кажется много полезной информации с кодом:
www.enlight.ru/demo/faq/smth.phtml?query=alg_clr_dith
Ключевые слова: Кластеризация (Quantization), Dithering.
Можно, даже, взять усредненную (универсальную) палитру, но результат будет не всегда хорошим.
Ваша палитра вышла не такой плохой на первый взгляд как вы подумали, однако я вижу что изображение, построенное на ее основе, не использует яркие цвета, вероятно есть ошибка в алгоритме.
Поиск цвета в палитре нужно вести только не только по яркости. Скорее по сумме квадратов отклонений по каждой цветовой компоненте.
И еще - у вас не сортировка по яркости, у вас один проход с перестановкой, он не дает полную сортировку.
Скорее всего из-за этого у вас и получилось такое тусклое итоговое изображение. Но яркость - все равно не то, синий и красный цвета будут одинаково яркими, но совсем разными.