Дескриптор SIFT для угловых пикселей изображения

Я хочу сделать функцию для вычисления просеивающих дескрипторов, которая принимает на вход два аргумента, один — это изображение, а второй — вектор определенных точек изображения. На выходе будут строки из 128 размерных дескрипторов просеивания, где каждая строка соответствует дескриптору определенной точки на изображении. Для вычислений дескрипторов SIFT необходимо обрезать определенный участок вокруг ключевой точки (скажем, 32 x 32) и выполнить некоторую обработку изображения (гистограмму ориентаций и все такое). Мой вопрос здесь в том, как бороться с угловыми пикселями на изображении. например, если я дам местоположение пикселя (1,1) в качестве входных данных для функции, то как обрезать патч или как выполнить расчет дескриптора для такого местоположения на изображении??


person vijay    schedule 05.08.2015    source источник
comment
вы можете создать рамку вокруг вашего изображения размером 32 пикселя, отражающую исходное изображение. Таким образом, даже ваши углы будут иметь правильный прямоугольник 32x32 вокруг. В OpenCV это можно сделать с помощью copyMakeBorder и BORDER_REFLECT_101.   -  person Miki    schedule 05.08.2015
comment
не повлияет ли это на производительность дескриптора??   -  person vijay    schedule 06.08.2015
comment
Да, конечно. Вот почему вы не должны вычислять просеивание вблизи границ.   -  person Miki    schedule 06.08.2015
comment
По сути, как указал @Miki, функции в пикселях изображения вычисляются в радиусе r. Чем больше r (зависит от функции), тем больше количество пикселей, которые теряют информацию в изображении. Например, для r = 5 полоса 5 пикселей вокруг границ изображения будет терять информацию при вычислении признаков. Чтобы решить это, существуют граничные условия, вы можете либо отразить, установить значение 0, либо обернуть изображение выходит за его пределы, но результат будет тот же — потеря информации. Таким образом, не слишком полагайтесь на особенности вблизи границ.   -  person Imanol Luengo    schedule 07.08.2015
comment
Взгляните на этот другой ответ: stackoverflow.com/questions/5715220/   -  person Imanol Luengo    schedule 07.08.2015
comment
Хммм ок... Спасибо :)   -  person vijay    schedule 08.08.2015


Ответы (1)


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

Если «вектор определенных точек», на который вы ссылаетесь, является «ключевыми точками», то вы можете использовать opencv для извлечения функций SIFT, которые возвращают 128-мерный вектор признаков для каждой ключевой точки.

Вам не нужно самостоятельно явно вычислять дескрипторы SIFT, поскольку OPENCV предоставляет для этого методы, как описано в дескрипторы SIFT

person kmario23    schedule 30.10.2016