Я новичок в OpenCV. Я хотел бы знать, можем ли мы сравнить два изображения (одно из изображений, сделанных фотошопом, т.е. исходное изображение, а другое будет снято с камеры) и выяснить, совпадают ли они или нет. Я попытался сравнить изображения, используя сопоставление шаблонов. Это не работает. Не могли бы вы сказать мне, какие другие процедуры мы можем использовать для такого рода сравнения?
Метод сравнения изображений с C++ и OpenCV
Ответы (2)
Сравнение изображений можно проводить разными способами в зависимости от того, какую цель вы преследуете:
- если вы просто хотите сравнить, являются ли два изображения примерно одинаковыми (с небольшими различиями в яркости), но с одинаковой перспективой и видом камеры, вы можете просто вычислить квадратную разницу между пикселями для каждой цветовой полосы. Если сумма квадратов на двух изображениях меньше порогового значения, изображения совпадают, в противном случае — нет.
- Если одно изображение является черно-белым вариантом другого, необходимо преобразовать цветные изображения (см., например, http://www.johndcook.com/blog/2009/08/24/algorithms-convert-color-grayscale). После этого просто выполните шаг выше.
- Если одно изображение является частью другого, необходимо выполнить регистрацию двух изображений. Это означает определение масштаба, возможного поворота и XY-сдвига, которые необходимы для наложения части изображения на большее изображение (методы регистрации изображений см.: Pluim, JPW, Maintz, JBA, Viergever, MA, Регистрация на основе взаимной информации. медицинских изображений: обзор, IEEE Transactions on Medical Imaging, 2003, том 22, выпуск 8, стр. 986–1004)
- Если у вас есть различия в перспективе, вам нужен алгоритм для исправления перекоса одного изображения, чтобы оно как можно лучше соответствовало другому. Способы устранения перекоса см., например, в http://javaanpr.sourceforge.net/anpr.pdf со страницы 15 и далее.
Удачи!
person
user1391128
schedule
28.05.2012
Вы должны попробовать СИФТ. Вы применяете SIFT к своему маркеру (изображение, сохраненное в памяти), и вы получаете некоторые дескрипторы (точки, надежные для распознавания). Затем вы можете использовать алгоритм FAST с кадрами камеры, чтобы найти соответствующие ключевые точки маркера на изображении камеры. У вас много тем на эту тему:
Как искать объект на изображении с SIFT и OpenCV?
OpenCV — сопоставление объектов с использованием дескрипторов SURF и BruteForceMatcher
Удачи
person
Jav_Rock
schedule
28.05.2012
Спасибо за ваш ответ. но я не думаю, что это сработает для очень маленьких отличий.. предположим, что исходное изображение содержит две машины... и сравниваемое изображение также содержит две одинаковые машины... но одна из машин имеет знак красного креста.. он не может обнаружить это
- person user1421108; 28.05.2012
конечно может. SIFT обнаруживает углы, те точки, которые легко распознать в любом масштабе, любой перспективе, вверх ногами и т. д. Я использовал его с загроможденными изображениями, и он работает действительно очень хорошо. Это современный детектор, а также быстрый. Просто попробуйте. Что может быть сложнее обнаружить, чем изображение зеленой травы на траве. У SIFT нет проблем
- person Jav_Rock; 28.05.2012
Я пробовал сравнение с использованием дескрипторов SIFT и FlannBasedMatcher, но он не может обнаружить необычную часть изображения... одним словом, он просто обнаруживает, что оба изображения одинаковы. Большое спасибо.
- person user1421108; 30.05.2012