SIFT Дэвида Лоу - Вопрос о масштабном пространстве и координатах изображения (странная проблема смещения) - PullRequest
13 голосов
/ 11 июня 2011

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

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 16 июня 2011

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

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

2 голосов
/ 13 июня 2011

Первый общий комментарий:

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

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

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

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

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

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

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

...