Подтвердить что ты не робот

Дэвид Лоу SIFT - вопрос о масштабном пространстве и координатах изображения (проблема смещения смещения)

Я понимаю, что это узкоспециализированный вопрос.. но здесь идет. Я использую реализацию SIFT для поиска совпадений на двух изображениях. С текущей реализацией, которая у меня есть, когда я сопоставляю изображение с версией 90 или 180 градусов, я получаю совпадения, которые примерно равны половине пикселей, но варьируется в пределах диапазона. Так, например, если совпадение найдено в координате пикселя (x, y) в im1, то соответствующее совпадение в его 90-градусном повернутом изображении im2 равно (x, y + 0,5). Если я использую изображение с 180 градусами, смещение появляется как в координатах x, так и в координатах x, и только в x, если я использую вращение на 270 градусов (-90).

1) Прежде всего, я предполагаю, что SIFT должен дать мне такое же совпадающее местоположение во вращающемся изображении. Неявное предположение состоит в том, что вращение не меняет значения пикселей изображения, которые я подтвердил, это правда. (Я использую IRFAN View для вращения и сохранения в формате .pgm, а значения пикселей остаются неизменными).

2) У меня есть другие реализации, которые не дают этого смещения.

3) Я предполагаю, что это смещение связано с программированием и, возможно, связано с преобразованием координат координаты точки масштабирования в координаты ключевой точки изображения.

Я надеюсь, что кто-то столкнется с этой проблемой или может указать мне на ссылку о том, как преобразовать из пространства масштаба в пространство изображения.

4b9b3361

Ответ 1

В отличие от утверждений Микола, можно получить масштаб и ориентацию из SIFT. SIFT пытается найти шкалу с наибольшими экстремумами ДОГ, а также находит доминирующую ориентацию (r). Каждый вектор местоположения для функции SIFT возвращает (x, y, s, r)

Чтобы увидеть, как масштабное пространство преобразуется в пиксели, попробуйте выполнить VLFeat . В частности, используйте команду vl_plotsiftdescriptor для построения дескрипторов. Вы можете увидеть, как s масштабируется относительно пикселей для этой реализации. Чтобы выяснить другие реализации, найдите одну и ту же функцию в обеих реализациях и посмотрите, как различается масштабный коэффициент s.

Ответ 2

Сначала общий комментарий:

SIFT просто дает вам функции с координатами x, y в пиксельных координатах. Он ничего не говорит вам о масштабах или повороте данной функции по дизайну, и на самом деле это определяющая характеристика SIFT, что вектор признаков инвариантен относительно этих типов преобразований (т.е. Именно поэтому SIFT работает). ~~ ( EDIT: Это неправильно, WTF я думал, когда писал это?)

Смещение в 0,5 пикселя незначительно, и для этой разницы может быть большое количество возможных объяснений. Одна из возможностей состоит в том, что в двух реализациях используются разные исходные координаты; например, один ставит начало координат посередине, а другой ставит его на угол. Это может повлиять на округление, что может объяснить разницу в 0,5 в зарегистрированных пиксельных местоположениях. Другая возможность заключается в том, что они различаются по количеству использованных образцов вращения; или, возможно, от числа рассматриваемых масштабов. Изменение любого из этих параметров может существенно повлиять на наблюдаемую функцию на целых несколько пикселей. Конечно, это все чистое предположение, так как нужно было бы увидеть, как реализация может сказать что-то окончательное.

Теперь, чтобы решить ваши более конкретные проблемы:

  • Это плохое предположение. Прямолинейно отобранные изображения вообще не инвариантны относительно вращений. Даже при повороте на 90 градусов может возникнуть проблема, если в реализации SIFT выполняется несколько оборотов, количество которых не кратно 4. Однако при достаточном количестве образцов вы можете ожидать, что он приблизится к правильному результату, но почти никогда не будет точно (за исключением некоторых очень особых вырожденных ситуаций).

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

  • Я не знаю, почему вы ожидаете, что он будет таким же, поскольку SIFT опирается на ряд внутренних факторов twiddle, которые могут различаться между реализациями.

Наконец, я не уверен, что вы подразумеваете под "преобразованием из масштабного пространства в пространство изображения". Масштабное пространство определяется для изображений, а не точек, и нет никакого отображения 1:1 между координатами в пространстве шкалы и пространстве изображения. Если вы просто хотите перевести изображение пространственного пространства в обычное изображение, просто возьмите 0-масштабный срез. Если вы хотите превратить изображение в представление масштабного пространства, сверните его с кучей гауссианов разного радиуса.