Думается, надо делать двухпроходный алгоритм. На первом проходе исключать при поиске уже отобранные цвета, помечая совпадение, и подбирая ближайший наилучший из оставшихся, а на втором проходе - ранжировать совпавший и наилучший по luminosity. Как-то так наверное.