https://github.com/jenssegers/imagehash
https://github.com/xwiz/phash
Ищите минимальное расстояние Хэмминга и после - уже на них ищите отношения цветов пикселей (RED25%/TOTAL, RED50%/TOTAL, ..., GREEN25%/TOTAL, GREEN50%/TOTAL,....): каждого цветового сегмента одного канала к общему количеству пикселей.
Цветовой сегмент - это процент по цветовому каналу.
Самые близкие дроби нужного Вам цвета - это и будет то, что Вам нужно: похожие с конкретным цветом.
И нужно чтобы степень схожести цветов можно было задавать.
Ширина диапазонов канала и модульное расстояние между конкретными отношениями цветов (дробями). Т.е. собираете превалирующие цвета в кластер и сравниваете не один цвет внутри диапазона, а сразу несколько (из кластера).
Уменьшить кол-во цветов:
здесь и см. 1-й коммент!
PS: пока - можно без НС всё сделать.