Библиотека Java для сравнения сходства изображений
Я потратил довольно много времени на изучение библиотеки, которая позволяет мне сравнивать изображения друг с другом в Java.
Я действительно не нашел ничего полезного, возможно, мой навык GoogleSearch недостаточно высок, поэтому я подумал, что спрошу вас, ребята, если вы можете указать мне направление того, где я мог бы найти что-то вроде этого.
В принципе, я хочу сравнить два изображения друг с другом и получить значение того, насколько они похожи. Как процент или около того.
Надеюсь, у вас, ребята, есть что-то, что я могу использовать, я не знаю, как написать что-то подобное...
PS: Это не обязательно должно быть на Java, это просто среда, в которой будет работать мое приложение.
Ответы
Ответ 1
Вы можете взглянуть на два ответа на сам SO: этот пример касается самого сравнения изображений, предлагая ссылки на вещи на С++ (если я правильно прочитал), а этот канал предлагает ссылки на более широкие подходы, один из которых находится в C.
Я бы предложил начать со второй ссылки, так как там ссылки на эту дискуссию, которые приведут к реализации кода некоторых соответствующих методов, которые вы могли бы "перевести" на Java самостоятельно.
Что лучшие мои навыки Google могли бы сделать, ни одна Java, хотя - извините. Надеюсь, это хорошая отправная точка!
EDIT:
Здесь кто-то с вашей проблемой написал свой класс сравнения в Java. Однако я не читал исходный код. Он прямо заявляет, что он тоже не мог найти Java-библиотеки для этой цели, поэтому он сам написал сам.
О, и этот вопрос о SO имеет, вероятно, лучшие ссылки по этому поводу, касающиеся Java-библиотек обработки изображений. Надеюсь, среди них есть одна из них, которая может сравнивать изображения для сходства.
Хорошо, последнее редактирование:
В книге обработки изображений Java показана реализация Java базового алгоритма для определения разницы между двумя картинками. У него также есть электронное письмо, чтобы связаться с парнем, который написал его, а также с множеством ссылок. Нет библиотеки.
EDIT после прочтения вашего комментария к вашему вопросу:
Если вы уже не проверили все вышеперечисленные ссылки, так как вам кажется, что вы проверяете, равны ли два изображения, я бы предложил начать с Cookbook обработки изображений Java (так как у этого есть реализация алгоритма на Java для проверки равные образы) и последняя ссылка на вопрос SO. Кроме того, проверить PerceptualImageDiff и исходный код этого проекта (С++); это звучит очень изящно - по-видимому, он должен проверить, соответствуют ли два изображения человеческой визуальной системе.
Ответ 2
Сверху моей головы OpenCV - отличная библиотека обработки изображений, но она может быть излишней, если вы просто хотите для сравнения изображений. Если это так, я бы пошел с ImageJ.
Кто-то уже спросил, как это сделать, используя OpenCV здесь.
Я бы использовал С++ для этого, но если вы должны использовать Java, есть проект, который сделал оболочку Java для OpenCV, здесь.
Ответ 3
Я использовал класс в эту ссылку, чтобы сравнить два изображения продукта, и результаты были классными. Это не очень сложно реализовать, просто для сравнения двух изображений, вам просто нужно удалить строки JAI и Swing и т.д. Он изменяет размеры изображений до 300x300 и возвращает значение разности, например "1234". Максимальное значение разности составляет около 11041, указано в ссылке. Делая разделение, вы можете просто получить процент. Если интересно, я могу опубликовать измененный код здесь позже.
Результаты были классными, но у меня все еще есть "фотографии цифровых фотоаппаратов", которые обнаруживаются как "ТВ-фотографии". Итак, я использовал ImageJ для обнаружения ребер на картинке. Используя операцию обнаружения краев, ImageJ преобразует изображение в обнаруженное ребро изображение greyform. Затем я помещал два обнаруженных края изображения в один и тот же компаратор и умножал оба значения. Результаты стали еще точнее.
Получение обнаруженной по краям формы изображений