Поскольку eznme не ответил на ваш вопрос (вам нужны отпечатки пальцев, он объясняет сжатие и восстановление), вот метод, с которым вы часто будете сталкиваться:
Вы разделяете информацию о цвете и яркости (цветность и яркость)и взвесить их по-разному.Иногда вы даже выбрасываете цветность и просто используете часть яркости.Это значительно уменьшает размер вашего отпечатка пальца (~ фактор три) и учитывает то, как мы воспринимаем изображение - в основном по локальной яркости, а не по абсолютному цвету.В качестве бонуса вы получаете некоторую устойчивость в отношении цветовых манипуляций с изображением.
Разделение может выполняться различными способами, например, преобразование вашего изображения RGB в YUV или YIQ цветовое пространство.Если вы хотите сохранить только компонент яркости, эти два цветовых пространства эквивалентны.Тем не менее, они кодируют цветность по-разному.Вот линейное преобразование для яркости Y из RGB: Y = 0,299 * R + 0,587 * G + 0,114 * B
Когда вы смотрите на математику, вы замечаете, что мы ничего не делаем, кроме созданияизображение в градациях серого - принимая во внимание, что мы воспринимаем зеленый цвет ярче, чем красный, а красный ярче синего, когда все они численно равны.
В случае, если вы хотите сохранить немного информации о цвете, чтобы сохранить отпечаток пальца каксжато, насколько это возможно, вы можете уменьшить разрешение двух компонентов U, V (каждый на самом деле 8 бит).Таким образом, вы можете объединить их в одно 8-битное значение, сократив их информацию до 4-битного и объединив их с оператором сдвига (не знаю, как это работает в Java).Цветность должна весить меньше по сравнению с яркостью в конечном расчете расстояния отпечатка пальца (упомянутый вами точечный продукт).