Я только что опубликовал это вчера, я не хочу дублировать сообщение, но оно очень похоже.
Создание меньших растровых изображений из растрового объекта
Мой проект с открытым исходным кодом Transparency Maker создает базу данных пикселей, которая на самом деле представляет собой список объектов PixelInformation.
Конечно, у каждого пикселя есть свойства для красного, зеленого и синего, но есть также свойства для Total, BlueGreen, BlueRed и GreenRed, представляющий собой сумму Blue + Green, Blue + Red и т. Д. c.
. Затем можно выполнить запросы Linq или для каждого цикла и сравнить итоговое значение для двух пикселей (класс информации о пикселях), и затем вы можете сравнивать разные вещи, такие как:
Сравнение итогов так же просто, как:
int difference = pixel1.Total - pixel2.Total;
Что аналогично вводу всего этого, если вы используете стандартный BitMap:
int redDiff = Pixel1.Red - Pixel2.Red;
int green = Pixel1.Green - Pixel2.Green;
int blueDiff = Pixel1.Blue - Pixel2.Blue;
int diff = redDiff + greenDiff + blue;
В качестве мысли вы могли бы уточнить свой алгоритм так, чтобы каждое различие получало больший вес, поэтому для вышеупомянутой последней строки может быть:
int difference = (redDiff * 17) + (greenDiff * 17) + (blueDifference * 17);
Я только что составил 17, например, какое значение веса вы используете, зависит от вас.
Теоретически, приведенное выше даст вам более близкое число к более близким изображениям.
Вот ссылка на мой проект с открытым исходным кодом, если вам нужен полный код: https://github.com/DataJuggler/TransparencyMaker
Возможно, это даст вам некоторые идеи.