В настоящее время я использую алгоритм Различия Гаусса. Пока мне удалось создать DoG в каждой октаве и сформировать пирамиду. Во-первых, все изображение уже в оттенках серого, во-вторых, мы знаем, что каждое изображение на каждом уровне DoG создается путем вычитания текущего изображения из предыдущего изображения (это приведет к некоторым отрицательным значениям).
Теперь я хочу изобразить это с помощью matplotlib. Из документации я прочитал «imshow автоматически обрабатывает отрицательные значения, соответствующим образом масштабируя значения яркости, поэтому наименьшие (отрицательные) значения будут отображаться черным, значения, близкие к нулю, будут серыми, а самые высокие значения будут белыми». поэтому я пробую это так
plt.imshow(imae, cmap="gray")
, но каким-то образом я все еще получаю изображение в оттенках серого вместо черно-белого, как в одном из примеров здесь: https://www.analyticsvidhya.com/blog/2019/10/detailed-guide-powerful-sift-technique-image-matching-python/
Затем я попытался установить vmin на ноль, и он работает. Я просто не понимаю, почему он по умолчанию не вел себя так, как указано в документации
** EDIT (включая некоторый исходный код) **
Это как выглядит моя октава DoG
def DoG_octave(gaussian_octave):
octave = []
for i in range(0, len(gaussian_octave)-1):
next_image = np.subtract(gaussian_octave[i+1], gaussian_octave[i])
octave.append(next_image)
return octave
Это займет один уровень октавы Гаусса из гауссовой пирамиды и вернет также один уровень октавы DoG для создания пирамиды DoG, и для каждого изображения на этом уровне ('imae '), Я показываю их с помощью imshow, поэтому plt.imshow(imae, cmap="gray")