2015-12-15 4 views
0

Я пытаюсь создать приложение, которое будет соответствовать изображению фасада здания для изображения в моей базе данных (см. Образец изображения ниже). Я реализую приложение на Java и до сих пор слежу за этим учебным пособием: http://docs.opencv.org/2.4/doc/tutorials/features2d/feature_homography/feature_homography.htmlСогласование изображений с несколькими изображениями с OpenCV SURF

Что я хотел бы получить, так это то, как перейти на следующий шаг и адаптировать мой код, чтобы я поместил сохраненные изображения в совпадение с входным изображением. Как мне это сделать? Сохранять ли я изображение и ключевые точки каждого изображения в базе данных? или я храню дескрипторы?

Любые учебники или примеры приложений, подобных этому, будут очень признательны.

Test building facade matching

ответ

1

Вы в основном хранить

  • дескрипторов, чтобы соответствие
  • позиции соответствующих ключевые моменты, чтобы отказ от матчей, основываясь на геометрических ограничениях

Вы не действительно нужно хранить каждое изображение, но вы можете захотеть сохранить по крайней мере один для каждого здания, чтобы показать наилучшее совпадение с пользователем.

Какие проблемы у вас есть на данный момент? Объем пространства, необходимый для вашей базы данных? Скорость согласования? Или, может быть, качество соответствия? В зависимости от вашего ответа вы можете получить разные подходы.

Сначала я попытался реализовать простейший подход, просто перейдя по данным, извлеченным из ссылочных изображений в вашей базе данных, и попытался совместить ваш образ. Вы можете выбрать эталонное изображение, которое дает максимальные inliers, а затем проверить, если их сумма выше, что некоторые эмпирически определено пороговое значение, чтобы определить, есть ли у вас матч.

Если у вас возникнут проблемы с производительностью, вы можете попытаться получить выгоду из того, что заранее подготовили базу и прекомпретируете что-то полезное. Одним из примеров может быть несколько деревьев kd или дерево kd, в котором есть функции от , все изображения (с сохранением индекса, из которого каждая функция пришла), а затем выполнить сопоставление с некоторыми изменениями (разрешить каждой ключевой точке из исходного изображения соответствовать нескольким ключевым точкам, если они происходят из разных эталонных изображений). Затем после сопоставления и геометрических тестов проверьте, какое контрольное изображение получает максимальные совпадения.

Если вы будете иметь проблемы с памятью вы можете попытаться ограничить количество характерных точек на каждое опорном изображение (выполнить сортировки по убыванию по баллам, оставить только N лучшие черты). Вы также можете использовать дескрипторы меньшего размера (SURF over SIFT и т. Д.). Но я не думаю, что это вероятный сценарий, так как вам понадобится около 100-1000 функций на эталонное изображение, и если вы используете дескриптор SIFT с 128 поплавками, вы получите 1000 * 128 * 4 = 500 килобайт на изображение. Используя 200 точек на эталонные изображения и SURF дескрипторов с 64 поплавком даст вам 50 килобайта для каждого изображения. Вы можете пойти еще дальше и использовать символы для SURF и получить ~ 13 кбайт на изображение, но качество соответствия, скорее всего, ухудшится.

+0

Я еще не начал реализовывать эту часть моего приложения, поэтому я хотел знать, как хранить информацию, указанную вами в вашем сообщении? Я видел несколько примеров того, как люди хранят их в матрице, а затем извлекают информацию, когда они перемещаются по сохраненным изображениям и просто используют полученную информацию для соответствия входному изображению. Также как бы определить, является ли образ совпадением или нет? – Juppal

+0

Я понимаю, что вы ищете какую-то «лучшую практику», но, к сожалению, у меня нет опыта с сопоставлением изображений с использованием базы данных, поэтому мой совет может быть неактуальным. Таким образом, чтобы избежать преждевременной оптимизации, лучше всего сначала попробовать наивный подход, а затем посмотреть, где он нуждается в улучшении. Во всяком случае, я добавил некоторые мысли в свой ответ. – alexisrozhkov

+0

Благодарим вас за советы. – Juppal

 Смежные вопросы

  • Нет связанных вопросов^_^