Изображения DoG отображают больше крайностей, чем ожидалось в python SIFT реализации - PullRequest
0 голосов
/ 31 января 2020

Я работаю над переводом статьи Лоу о SIFT в python. Я борюсь с различием гауссовских результатов, которые демонстрируют очень экстремальные изображения, то есть они неравномерно распределены по серой шкале. Я строю масштабное пространство следующим образом:

def L(sig,I):
    return cv2.GassianBlur(I,(25,25),sig)

sig0 = sqrt(2)
sig = sig0
k=math.sqrt(2)
o=[]
Li=[L(sig,I0)]
for i in range(nspo):
    Li.append(L(k*sig,I0))
    Di = np.subtract(Li[i+1],Li[i])
    sig = k*sig
    o.append(Di)

Вдохновившись уроком из д-ра Вейца, я замечаю, что мои результаты отличаются от его тем, что его результирующее изображение DoG равномерно распределено по серой шкале, а мое имеет тенденцию к занять более экстремальное пространство. Ниже приведен пример фрейма, использованного в учебном пособии д-ра Вейца, получившаяся в результате повышенная дискретизация DoG и DoG, которые я получил с использованием вышеуказанного алгоритма. Заранее благодарим за любые советы или предложения или решения этой головоломки.

Original image
Ideal DoG example
Too extreme DoG example (algorithm above)

1 Ответ

1 голос
/ 11 марта 2020

Кажется, ваше входное изображение имеет тип uint8, поэтому, когда вы вызываете np.subtract(Li[i+1], Li[i]), вы вычитаете целые числа без знака. В разностном изображении, поскольку любые отрицательные значения будут округлены до 255. Вы увидите яркие белые области, как у вас здесь. вы можете заставить numpy выполнить вычитание, используя float32, например:

np.subtract(Li[i+1], Li[i], dtype='float32')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...