Сопоставление / корреляция шаблонов OpenCV C ++

У меня следующая проблема: как показано на скетче ниже, у меня есть исходное изображение размером 900x900 пикселей и изображение шаблона меньшего размера 300x300 пикселей. Теперь мне нужно рассчитать корреляцию между произвольной частью исходного изображения и повернутым изображением шаблона изображения. Угол поворота (фи), а также координаты подсекции (x, y) даны, и мне нужно только вычислить корреляцию. Однако мне нужно очень часто повторять всю операцию для разных комбинаций x, y и phi.

эскиз

Я собираюсь использовать opencv (версия 3.1) для этой задачи. Поскольку мне нужно повторить операцию для разных комбинаций x, y и phi с одним и тем же исходным и шаблонным изображениями, я ищу очень быстрое решение. На данный момент я поворачиваю шаблон с учетом угла с помощью warpAffine (), а затем использую функцию matchTemplate () для вычисления корреляции. Однако matchTemplate (), похоже, вычисляет скорее свертку, чем простую корреляцию, и я думаю, что я ее пропустил. Также часть matchTemplate () является узким местом моей программы. Вы знаете, как это ускорить? Полезно ли в этом случае использовать ускорение графики? Или может быть полезно сохранить версию моих изображений, преобразованную в формате dft, перед выполнением корреляции? Или у вас совсем другие идеи?

Спасибо


person Gustav-Gans    schedule 02.09.2016    source источник


Ответы (1)


Почему это требует времени?

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

Реализация GPU

Реализация графического процессора может помочь увеличить скорость, но это не гарантирует. Вы реализуете GPU в OpenCV cv :: cuda :: TemplateMatching

Другие подходы

В зависимости от типа вашего шаблона, то есть с текстурой или без текстуры и т. Д., Вы можете тщательно создавать функции, которые не зависят от масштаба, такие как SIFT, который будет относительно быстрее, чем сопоставление с плотным шаблоном. Поскольку ваши изображения имеют большие размеры, обнаружение SIFT в реальном времени будет затруднено, но я могу заверить, что я буду быстрее, чем метод, который вы используете сейчас.

Вы можете проверить этот документ на некоторые обзоры характеристик изображения.

person kcc__    schedule 03.09.2016